Tastenbetätigungen zählen / entprellen



Ziel:

Die Anzahl von Tastenbetätigungen sollen gezählt und ausgegeben werden.
Für die Ausgabe der Zahl der Tastenbetätigungen wird das von früheren Experimenten her bekannte LCD-Shield benutzt.


Problem:

Das Betätigen einer Taste beinhaltet einen störenden Effekt, der sich "Prellen" nennt.
Statt des sofortigen elektrischen Kontaktes kommt es zum mehrfachen Schließen und öffnen.
Unser Arduino arbeitet so schnell, das z. B. das beim Zählen von Tastenbetätigungen jeder einzelne Prellvorgang mitgezählt werden würde.



Lösung:

  • Entprellen mittels Schaltungen, die Kondensatoren enthalten (Tiefpassfilter)

  • Oder einfacher: mit geschickt geschriebenem Programmcode

Schaltung:

Auf den Arduino stecken wir das LCD-Shield und verbinden einen Taster an den Eingang Analog_5 (=Digital19) und GND.



Programm:

Mit Hilfe eines Merkers ("set"), einer Zeitverzögerung (die länger als der Prellvorgang ist) und geschicktem Code wird hier zuverlässig jede Tastenbetätigung gezählt.

Man darf auch gerne die Taste dauerhaft drücken - es wird dann nicht weiter gezählt.

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);

int taste = 19; // Taste an Analog_5 = Digital_19
int zaehler = 0;
int set = 0; // soetwas nennt man auch "Merker"

void setup()
{
  lcd.clear();      // LCD löschen
  lcd.begin(16, 2); // verfügbare Spalten und Zeilen

  pinMode(taste, INPUT); // Eingang, an der die Taste hängt
  digitalWrite(taste, HIGH); // Für echtes High bei geöffneter Taste sorgen
}


void loop()
{
 
  if (digitalRead(taste) == LOW && set == 0) {
    zaehler++;
    lcd.setCursor(6,0);
    lcd.print( zaehler );
    set=1;
  }
 
  if (digitalRead(taste) == HIGH && set == 1) {
    delay(250);
    set=0;
  }

}