avr tastenentprellung nach dannegger

OP #2200558
Lesenswert?

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...
#2200667
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren