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?
ja wie schon geschrieben, dann geht das display an...
Gast
#2200616
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
Gast
#2200679
Probier mal:
if (get_key_press (1 << KEY0))
{
if (powersave_state == 1)
{
powersave_time = 0;
Backlight_ON();
}
else
tu_etwas();
}
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.