|
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;
}
}
|