Tasterabfrage

#3253507
Lesenswert?

petrus schrieb:
> Timmo H. schrieb:
>> Sofern der Taster nicht prellt, und er einen Pull-Down hat und du ihn
>> auf VCC ziehst möglicher weise. Vorrausgesetzt die Abfrage findet
>> kontinuierlich statt (z.b. in einer while-Schleife)
>
> stimmt alles

Na dann.
Eine normale Flankenerkennung mit einer Hilfsvariablen
1
int main()
2
{
3
  uint8_t isPressed = 0;
4

5
  ....
6

7

8
  while( 1 )
9
  {
10

11
    if(PIND & (1<<PD5)){
12
      if( !isPressed )
13
        val = val+1;
14
      isPressed = TRUE;
15
    }
16
    else
17
      isPressed = FALSE;
18

19
    ....
20
  }
21
}

Aber irgendwann wird dir Tastenprellen einen Strich durch die Rechnung 
machen.
Gast #3253852
Lesenswert?

Karl Heinz Buchegger schrieb:
> int main()
> {
>   uint8_t isPressed = 0;
>
>   ....
>
>   while( 1 )
>   {
>
>     if(PIND & (1<<PD5)){
>       if( !isPressed )
>         val = val+1;
>       isPressed = TRUE;
>     }
>     else
>       isPressed = FALSE;
>
>     ....
>   }
> }

kann mir das mal einer erklären.?
if(PIND & (1<<PD5)){
         val = val+1;
     }
das verstehe ich noch, aber den rest nicht.
#3253900
Lesenswert?

Hallo,

Es geht bei dem Code von K.H.B. um die Erkennung, ob eine Taste 
dauerhaft betätigt wird.

Beispiel:

Deine Abfrage erfolgt alle 5us (Frei gewählt). Jetzt wird der Taster 
betätigt und val wird inkrementiert. Nach 5us wird die Abfrage aber 
erneut abgearbeitet und das so lange, wie der Taster betätigt wird. Dies 
hat zur Folge, dass bei jedem Tastendruck, ein Änderung ein anderer Wert 
für val vorhanden ist (wenn testweise vor der Abfrage der Wert 0 ist).
Dieses kann/soll aber nicht sein, sondern es soll geprüft werden, ob ein 
Signalwechsel erfolgte => Es ist eine Variable notwendig, die so lange 
den Zustand 1 hat, so lange die Taste betätigt wird, Heißt:

Ausgangssituation 1. Aufruf der Abfrage und Taster betätigt:

Die 1. Prüfbedingung ist erfüllt, der Taster ist gedrückt. Jetzt kommt 
eine weitere Abfrage, dessen Bedingung (Statusvariable "Taster ist noch 
nicht gedrückt") ist zZt. auch erfüllt. Jetzt wird val inkrementiert und 
die Statusvariable bekommt den Wert 1("Taster gedrückt").

Wird jetzt die Abfrage erneut aufgerufen, ist die Hauptbedingung "Taster 
gedrückt" erfüllt, doch die Bedingung zum inkrementieren ist nicht 
erfüllt. Erst wenn der Taster losgelassen wird, bekommt die 
Statusvariable den Wert 0("Taster losgelassen") und erst bei einem 
erneuten Tastendruck wird val wieder inkrementiert.

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