Taster auf Klick, Doppelklick oder Langklick auswerten
Mit diesem Programm kann man die Art des Tastendrucks auswerten. Wie beim Entprellen wird nach 50ms ein zweites
Mal geprüft ob Taster noch gedrückt ist. Ab dann wird die Zeit berechnet wie lange die Taste betätigt bleibt.
Größer 400ms wird sofort als "langer Tastendruck" gewertet. Wenn der Tastendruck kürzer war wird noch einmal 500ms
weiter geprüft ob ein zweiter Tastendruck nachkommt. Wird dieser erkannt, handelt es sich um einen "Doppelklick".
Kommt dieser zweite Tastendruck innerhalb der Zeitspann nicht, wird ein "kurzer Tastendruck" ausgegeben.
Im weiteren Programmablauf wird anhand des erkannten Tasten-Status eine entsprechende Meldung an den seriellen
Monitor ausgegeben.
Schaltung und Programmcode
void setup() {
pinMode(2, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
// Rückgabewert der Taste 1=Klick, 2=Doppelklick, 3=Longklick
byte tastenModus = 0
// Tastereingang 2x abfragen
if (digitalRead(2) == LOW) {
delay(50);
if (digitalRead(2) == LOW) {
long startZeit = millis();
do {
/*nichts tun*/
} while (digitalRead(2) == LOW)
// Dauer des Tastendrucks berechnen
long dauer = millis() - startZeit + 50
// Betätigungsdauer auswerten
if (dauer > 400) {
tastenModus = 3; // langer Tastendruck >400ms
} else {
// bei kurzem Tastendruck nochmal 500ms auf Doppelklick prüfen
long zeitStempel = millis();
while (millis() < zeitStempel + 500) {
// Tastereingang wieder 2x abfragen
if (digitalRead(2) == LOW) {
delay(50);
if (digitalRead(2) == LOW) {
do {
/*nichts tun*/
} while (digitalRead(2) == LOW);
tastenModus = 2; // Doppelklick erkannt
}
}
}
// Überprüfen ob bereits ein Doppelklick erkannt wurde
if (tastenModus == 0) {
tastenModus = 1; // dann einfacher Tastendruck
}
}
// Ausgeben des erkannten Tastendrucks auf dem Seriellen Monitor
if (tastenModus == 1) {
Serial.println("kurzer Tastendruck");
} else if (tastenModus == 2) {
Serial.println("Doppelklick");
} else if (tastenModus == 3) {
Serial.println("langer Tastendruck");
} else {
Serial.println("undefiniert");
}
}
}