Der anscheinend überarbeitete Code
(http://www.mikrocontroller.net/attachment.php/252480/C_TAST.C
) in http://www.mikrocontroller.net/articles/Entprellung benutzt noch
alte C - Konventionen und nicht die Typendeklarationen aus dem
Tutorial.
So wird auch in
u8 get_key_short( u8 key_mask )
{
cli(); // read key state and key press atomic !
return get_key_press( ~key_state & key_mask );
}
anscheinend die interrupts nicht wieder eingeschaltet. Hat das so seine
richtigkeit?
Wie lassen sich die Abfragen kombinieren, wenn die Abfragefunktion das
Zustandsbyte doch wieder zurücksetzen?
Ich möchte z.B. eine Aktion bei kurzem Tastendruck, und bei langem eine
andere wiederholt ausführen.
Das kann doch nicht so schwer sein. get_key_short klappt ja auch
wunderbar; wenn man innerhalb der schwelle die taste drückt und
losläßt, greift das.
zusätzlich möchte ich jetzt aber noch bei einem längeren tastendruck,
daß für die dauer im eingestellen abstand der code wiederholt
ausgeführt wird.
einzeln, wie im beispiel, funktionieren die sachen, aber anscheinend
nicht für dieselbe taste.
was kann ich machen??
ts, danke schonmal, ich habe eben schon google bemüht, mit dem
dateinamen diesen oft zitierten thread zu finden..leider ergebnislos.
wiki und avrfreaks, aber nicht der eigentliche thread.
dann lese ich mal..
juhuu, das funktioniert!
und wie könnte man prüfen, ob tasten gleichzeitig gedrückt werden?
if( get_key_press( 1<<BUTTON_B || 1<<BUTTON_B)) bewirkt nichts, werden
trotzdem als einzelne tastendrücke erkannt
sollte man die prüfung verschachteln?
if( get_key_short( 1<<BUTTON_A ))
{
if( get_key_long( 1<<BUTTON_A ) || get_key_rpt( 1<<BUTTON_A ))
{
.....
}
}
Komisch, hat das noch niemand gemacht, oder ist es schwer, oder stelle
ich meine Fragen falsch?
Ich schlage vor, den Lösungsansatz ggf. direkt in der Codesammlung
zugehörig zum Code einzubringen:
http://www.mikrocontroller.net/forum/read-4-310276.html#new