Hallo, ich möchte mehrer Tasten zeitgleich über while-Schleife abfragen. Eine Tasteabfrage geht mit; while (PINA & (1<<PA7)) { PORTB ^= (1<<PB3) | (1<<PB4); } Aber, wie müsste der while-Befehl aussehen, wenn ich 2 Tasten (PA7 und PA6) gleichzeitig abfragen möchte?
Michael schrieb: > while (PINA & ((1<<PA6) | (1<<PA7))) { ... } Doppelt falsch. Erstmal binäres und logisches Oder vertauscht und wenn man auf beide Taster gleichzeitig abfragen will braucht es ein Und.
ARGH! SORRY! Stimmt alles. Ich war zu schnell. Klar, so geht es natürlich auch wenn beide Taster am selben Port sind.
kommt drauf an was du machen willst: die Schleife abbrechen wenn eine der beiden Tasten gedrückt ist oder wenn beide gleichzeitig gedrückt werden
Der Code ergibt sich doch aus der Fragestellung. Wird Taste A und B gedrückt Wird Taste A oder B gedrückt
__Son´s Bersi__ schrieb: > while (PINA & (1<<PA7)) > { > PORTB ^= (1<<PB3) | (1<<PB4); > } So fragt man keine Tasten ab. Erstmal werden Tasten entprellt und die Entprellung liefert den Status der Taste(n). Diese können dann z.B. in einer Variablen abgelegt werden. Dann werden, völlig unabhängig vom Einlesen der Tasten, die Zustaände verarbeitet: switch(buttonstate) { case 0: //tu was break; case 1: //tu was anderes break; etc. blabla } mfg.
Hubert G. schrieb: > Der Code ergibt sich doch aus der Fragestellung. > Wird Taste A und B gedrückt > Wird Taste A oder B gedrückt ja und was denn nun? Ich kann das aus der Fragestellung jedenfalls nicht erkennen: __Son´s Bersi__ schrieb: > Aber, wie müsste der while-Befehl aussehen, wenn ich 2 Tasten (PA7 und > PA6) gleichzeitig abfragen möchte?
> Eine Tasteabfrage geht mit; > while (PINA & (1<<PA7)) > { > PORTB ^= (1<<PB3) | (1<<PB4); > } Das wäre eine blöde Abfrage
1 | char key1pressed,key1down,key2pressed,key2down; |
2 | key1pressed=PINA&(1<<PA7); |
3 | key2pressed=PINA&(1<<PA6); |
4 | while(1) |
5 | {
|
6 | key1down=PINA&(1<<PA7); |
7 | if(key1down&&!key1pressed) |
8 | {
|
9 | // tue was passieren soll wenn Taste1 runtergedrückt wird
|
10 | }
|
11 | key1pressed=key1down; |
12 | key2down=PINA&(1<<PA6); |
13 | if(key2down&&!key2pressed) |
14 | {
|
15 | // tue was passieren soll wenn Taste2 runtergedrückt wird
|
16 | }
|
17 | key2pressed=key1down; |
18 | _delay_ms(10); // Prellzeit abwarten |
19 | }
|
Und ja, man kann das verinfachen wenn alle 8 Tasten auf einem Port hängen.
Zur Konkretisierung; () PA6 UND PA7 zeitgleich aber PA6 ODER PA7 ist auch interessant. () ZZ. liegen alle Tasten auf dem gleichen PORT. () Tastenentprellung kommt später.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.