Moin! Ich habe die Enprellung der Tasten nach P. Dannegger's Tutorial gemacht. Dies Funktioniert soweit auch aber es trotzdem seltsam in der Funktionsweise. Problem ist, daß ich für ein Display die Hinterdrundbeleuchtung ausschalte (timer) und diese sich bei einem Tastendruck wieder einschalten soll. Ich habe das in folgender Form versucht zu lösen: volatile uint8_t powersave_state = 0; //1=powersave, 0=normal . . . powersave_state =1; if ((get_key_press (1<<KEY0)) && (powersave_state ==1)) { powersave_time =0; Backlight_ON(); } if ((get_key_press (1<<KEY0)) && (powersave_state==0)) { tu_etwas(); } soweit so gut. Wird powersave_state=0; vor den if-Funktionen gesetzt passiert gar nix. tu_etwas() wird ignoriert. a) warum? b) wie kann man das umgehen? Vielen Dank...
Das Problem liegt nicht im geposteten Code. Tino Kühn schrieb: > Wird powersave_state=0; vor den if-Funktionen gesetzt > passiert gar nix. Und was passiert, wenn der Wert powersave_state=1 ist?
if ((get_key_press (1<<KEY0)) && (powersave_state ==1)) { powersave_time =0; powersave_state=0; Backlight_ON(); } if ((get_key_press (1<<KEY0)) && (powersave_state==0)) { tu_etwas(); }
Hallo, Tino Kühn schrieb: > if ((get_key_press (1<<KEY0)) && (powersave_state==0)) > { > tu_etwas(); > } Du kannst nur einmal get_key_press (1<<KEY0) aufrufen, danach wird der Zustand gelöscht. D.h. die zweiter Abfrage ist (fast) immer FALSE. Fast deshalb, wenn Du es schaffst die Taste 2 mal innerhalb von ca. 50ms zu drücken und los zu lassen, dann - aber nur dann.
get_key_press() liefert Dir genau ein Ereignis. Wenn Du es an 2 Stellen für die gleiche Taste aufrufst, wird rein zufällig mal die eine und mal die andere Stelle das Ereignis lesen. Und wenn eine Stelle das Ereignis wegwirft, ist es eben weg. Peter
Probier mal: if (get_key_press (1 << KEY0)) { if (powersave_state == 1) { powersave_time = 0; Backlight_ON(); } else tu_etwas(); }
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.