PS2/USB billentyűzet emulálás

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3347
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: PS2/USB billentyűzet emulálás

HozzászólásSzerző: kapu48 » 2014. november 17. hétfő, 14:19

Eddig nem volt szó folyamatos gombnyomásról!
Csak a megnyomás és elengedés érzékeléséről és megkülönböztetéséről.
(Ez már megy?) :?:

Különben is sorban kellene haladni! És 1*re csak 1 problémát megoldani!
8)

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3347
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: PS2/USB billentyűzet emulálás

HozzászólásSzerző: kapu48 » 2014. november 17. hétfő, 14:45

Most funkcio_1() adig fut amig nyomják a gombot:

Kód: Egész kijelölése

// Csak Nyomógomb állapot változásra történjen valami?

boolean  val1 = 1; // Induláskór, Az elengedet gomb állapota legyen 1!
boolean  val2 = 1; // Elöző nyomogomb allapotat tarolo valtozo is 1.


void setup() {               
  pinMode(2, INPUT);
  // D2 labon kapcsolo bemenet
  pinMode(8, OUTPUT);
  // D8 lab: kimenet_1
  pinMode(9, OUTPUT);
  // D9 lab: kimenet_2
  pinMode(10, OUTPUT);
  // D10 lab: kimenet_3
  pinMode(11, OUTPUT);
  // D11 lab: kimenet_4
  pinMode(12, OUTPUT);
  // D12 lab: kimenet_5
  pinMode(13, OUTPUT);
  // D13 lab: LED
  digitalWrite(2, HIGH);
  // D2-on felhuzo bekapcsol

}

void loop() {
do { // Várakozunk Gomb állapot változásra.
   digitalWrite(13, HIGH); // fut a program
   delay(25);           
   digitalWrite(13, LOW);
   delay(25);
   val1 = digitalRead(2);
 
  } while (val1 != val2);  // Most megváltozótt az állapot
 
   val2 = val1;  // Tároljuk az új állapotot     
 
  if (val1 == 0) {     
// Ha meg nyomták
    funkcio_1();
  }
  else {
    // Ha el engedték
    funkcio_2();
  }   
 
}

// Ha meg nyomták a gombot
void funkcio_1() {
  do { // Várakozunk Gomb elengedésére
  //LED be - var - LED ki
    digitalWrite(9, HIGH);
    delay(250); 
    digitalWrite(10, HIGH);
    delay(250);           
 
   } while (val1 != digitalRead(2)); // Kiugrik ha elengedték a gombot
 }


void funkcio_2(){
  //LED be - var - LED ki
  digitalWrite(11, HIGH);
  delay(250); 
  digitalWrite(12, HIGH);
  delay(250);           
  digitalWrite(11, LOW);
  delay(250);           
  digitalWrite(12, LOW);
  delay(250); 
 }
 


Utána funkció_2() is végrehajtódik.

Avatar
arnd
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2005. május 8. vasárnap, 6:00

Re: PS2/USB billentyűzet emulálás

HozzászólásSzerző: arnd » 2014. november 17. hétfő, 20:30

leteszteltem még egyszer:
alapból a funkció1-et hajtja végre folyamatosan (9,10-es kimenet) meg persze a 13-as fut a program jel.
ha nyomva tartom a gombot akkor meg csak a "fut" működik (13-as kimenet).

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3347
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: PS2/USB billentyűzet emulálás

HozzászólásSzerző: kapu48 » 2014. november 18. kedd, 0:20

Akkor javítsd ki a kiugrási feltételeket:

Kód: Egész kijelölése


} while (val1 == val2);  // Most megváltozott az állapot

} while (val1 == digitalRead(2)); // Kiugrik, ha elengedték a gombot




(Nekem nincsen Arduinom, ezért nem tudom tesztelni!)

Avatar
arnd
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2005. május 8. vasárnap, 6:00

Re: PS2/USB billentyűzet emulálás

HozzászólásSzerző: arnd » 2014. november 18. kedd, 18:15

(Nekem nincsen Arduinom, ezért nem tudom tesztelni!)


Köszönöm!!! Kicsit átalakítottam, hogy ne ismételje a "funkcio_1"-et amíg nyomva van a gomb (bekapcsolt kapcsoló). Így csak egyszer fut le, ha csak röviden nyomom meg a gombot akkor is lefut szépen egymás után a két funkció, szóval perfect!!!

Kód: Egész kijelölése

// Csak Nyomógomb állapot változásra történjen valami?

boolean  val1 = 1; // Induláskór, Az elengedet gomb állapota legyen 1!
boolean  val2 = 1; // Elöző nyomogomb allapotat tarolo valtozo is 1.


void setup() {               
  pinMode(2, INPUT);
  // D2 labon kapcsolo bemenet
  pinMode(8, OUTPUT);
  // D8 lab: kimenet_1
  pinMode(9, OUTPUT);
  // D9 lab: kimenet_2
  pinMode(10, OUTPUT);
  // D10 lab: kimenet_3
  pinMode(11, OUTPUT);
  // D11 lab: kimenet_4
  pinMode(12, OUTPUT);
  // D12 lab: kimenet_5
  pinMode(13, OUTPUT);
  // D13 lab: LED
  digitalWrite(2, HIGH);
  // D2-on felhuzo bekapcsol

}

void loop() {
  do { // Várakozunk Gomb állapot változásra.
    digitalWrite(13, HIGH); // fut a program
    delay(18);           
    digitalWrite(13, LOW);
    delay(18);
    val1 = digitalRead(2);

  }
  while (val1 == val2);  // Most megváltozótt az állapot

  val2 = val1;  // Tároljuk az új állapotot     

  if (val1 == 0) {     
    // Ha meg nyomták
    funkcio_1();
  }
  else {
    // Ha el engedték
    funkcio_2();
  }   

}

void funkcio_2(){
  //LED be - var - LED ki
  digitalWrite(11, HIGH);
  delay(250); 
  digitalWrite(12, HIGH);
  delay(250);           
  digitalWrite(11, LOW);
  delay(250);           
  digitalWrite(12, LOW);
  delay(250); 
}

void funkcio_1(){
  //LED be - var - LED ki
  digitalWrite(9, HIGH);
  delay(250); 
  digitalWrite(10, HIGH);
  delay(250);
  digitalWrite(9, LOW);
  delay(250);           
  digitalWrite(10, LOW);
  delay(250);     
}


Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3347
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: PS2/USB billentyűzet emulálás

HozzászólásSzerző: kapu48 » 2014. november 18. kedd, 18:41

Látod, nem is volt olyan nehéz összehozni!
:D

Ilyenkor kellene tudni javítani visszamenőleg, a felderítet hibákat a program listákban!
Hogy más ne fusson rá megint, ha esetleg ide téved!
Nem értem ezt mért tiltotta le Robert?
:?

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10025
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: PS2/USB billentyűzet emulálás

HozzászólásSzerző: Robert » 2014. november 18. kedd, 21:05

Tisztázzuk:
Leonardo : beépített HW-es USB.
ProMini: Emulált USB lehet (V-USB)

Innen a válasz egyértelmű: keresztbe nem csereszabatos a 2 proci billentyűzetre....

Miért nem jó a Pro Mini helyett a ProMicro?
Kész van az adott program hozzá :)? Túl egyszerű? :)

Avatar
arnd
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2005. május 8. vasárnap, 6:00

PS2 billentyűzet vezérlése

HozzászólásSzerző: arnd » 2014. november 18. kedd, 23:14

Robert írta:Tisztázzuk:
Leonardo : beépített HW-es USB.
ProMini: Emulált USB lehet (V-USB)

Innen a válasz egyértelmű: keresztbe nem csereszabatos a 2 proci billentyűzetre....

Miért nem jó a Pro Mini helyett a ProMicro?
Kész van az adott program hozzá :)? Túl egyszerű? :)

1, az ára sajnos nem fér bele a projectbe
2, az én korlátaim is szűkösek, most pillanatnyilag nincs rá időm, hogy ennyi tudást összeszedjek, nekem ez is kihívás volt.
3, ja és most csak PS2-höz férek hozzá

Viszont sikerült már tökéletesre reszelnem:
egy kapcsoló, plusz egy nyomógombbal, működik 4 funkció.
Attól függően, hogy a kapcsoló be/ki kapcsolásakor a nyomógomb meg van e nyomva vagy sem.
Mondjuk a cím már így nem aktuális.

Avatar
arnd
DrótVégénSzéndarab
Hozzászólások: 18
Csatlakozott: 2005. május 8. vasárnap, 6:00

PS2 billentyűzet vezérlése

HozzászólásSzerző: arnd » 2014. november 18. kedd, 23:30

kapu48 írta:Látod, nem is volt olyan nehéz összehozni!
:D

Ilyenkor kellene tudni javítani visszamenőleg, a felderítet hibákat a program listákban!
Hogy más ne fusson rá megint, ha esetleg ide téved!
Nem értem ezt mért tiltotta le Robert?
:?

Köszönöm még egyszer!
A do/while volt végül is a megoldás, ezt kellett csak jó feltételekkel megtámogatni.

Vagy ez már itt nagyon OFF?


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 2 vendég