Moin, hab mal eine kleine Frage bezüglich des Enprellens von Tasten. Hab bei meinem Projekt drei Tasten die entprellt werden müssen. Dazu hab ich die Methode Debounce-Makro von Peter Dannegger benutzt, welche auch super funktioniert. An dieser Stelle auch besten dank an Peter!!! Nun hab ich ein Problem, denn es lassen sich irgendwie nicht gleichzeitig zwei Tasten überprüfen ob sie gedrückt worden. Ich brauche diese Funktion, da eine Aktion ausgeführt werden soll, wenn zwei Taster gleichzeitig gedrückt werden. Hab gestern schon zwei Stunden rum probiert aber bin zu keinem funktionierenden Ergebnis gekommen. Ich hatte es mit der If-Bedingung: if(debounce( PINB, PB1 )&&debounce( PINB, PB0 ) probiert. Wäre cool wenn mir jemand auf die Sprünge helfen könnte. Besten dank auch hier schon mal wieder im Vorraus. Gruß Patrick
Patrick A. schrieb: > wenn zwei Taster > gleichzeitig gedrückt werden. 2 Taster "gleichzeitig" das schaffst Du gar nicht wetten? Ich würde abfragen ob eine "Shift" Taste bereits gedrückt ist während eine andere neu entprellt wurde. Gruß Anja
Hallo, erstmal danke für deine Antwort! Ich bin noch relativ frisch auf dem Gebiet der Mikrocontroller. Was meinst du denn mit "abfragen ob eine Shift-Taste bereits gedrückt ist"? Stehe irgendwie auf´n Schlauch! Gruß Patrick
Patrick A. schrieb: > Was meinst du denn mit "abfragen ob eine Shift-Taste bereits gedrückt > ist"? Naja, es rächt schon irgendwie, wenn man Code benutzt, den man nicht versteht... Von C habe ich keine Ahnung, ich benutze Peters Entprellung in ASM. Aber: Du wirst es nicht schaffen, zwei Tasten so gleichzeitig zu drücken, dass ihre Bits in Key_Press in derselben "Runde" der Hintergrund-Entprellroutine (in der Timer-ISR oder einem vom Timer synchronisierten Job) gesetzt werden. Es gibt aber neben Key_Press noch Key_State, in dem der entprellte Status der Tasten gehalten wird, um Änderungen zu erkennen. Diese kann man als "Shift-Tasten" missbrauchen, indem man die Bitwerte (nur lesend!) auswertet. Willst Du 2 gleichzeitige Tastendrücke auswerten, so überprüfst Du bei auftretendem Key_Press der einen Taste auch noch Key_State der anderen Taste. Das erfordert aber, dass die "Shift-Taste", also die Taste, von der man nur Key_State auswertet, vor der anderen Taste gedückt wird. Eine weitere Möglichkeit ohne Eingreifen in Peters Routinen sehe ich darin, einen Count-Down-Zähler zu implementieren, der von den Tastendrücken beider Tasten kumulativ gesetzt wird und in der Timer-ISR reduziert wird, solange er noch icht 0 ist. Jeder der beiden Tastendrücke erhöht ihn z.B. um den Wert 5. Wird dabei der Wert 6 überschritten, dann waren beide Tastendrücke zeitlich sehr nahe beieinander. Dann verzweigt man zur gewünschten Routine und löscht dort den TO-Zähler. Es gibt sicher elegantere Möglichkeiten, aber wenn man immer das Optimum sucht, wird man nie fertig. ...
Hallo, vielen Dank für deine Antwort, sie hat mir sehr geholfen!! Hab es jetzt irgendwie so gemacht und es funktioniert und das is ja die Hautptsache!!! Gruß Patrick
Patrick A. schrieb: > Nun hab ich ein Problem, denn es lassen sich irgendwie nicht > gleichzeitig zwei Tasten überprüfen ob sie gedrückt worden. Ich brauche > diese Funktion, da eine Aktion ausgeführt werden soll, wenn zwei Taster > gleichzeitig gedrückt werden. Siehe: Beitrag "Universelle Tastenabfrage mit 2 Tastenerkennung" Peter
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.