Tastendruck mit Wiederholung

Das Programm reagiert auf eine gedrückte Taste. Beim erstmaligen Drücken und jeweils nach 500 ms wird ein Zähler um eins erhöht.

const int PIN = 13;
 
// Letzter Zustand der Taste
int lastState;
// Zeitpunkt für nächstes Zählen
unsigned long nextCount;
int count;
 
void setup() {
    pinMode(PIN, INPUT_PULLUP);
    lastState = HIGH;
    nextCount = 0;
    count = 0;
}
 
void loop() {
    int state = digitalRead(PIN);
    // Aktuelle Zeit auslesen
    unsigned long now = millis();
    if (state == LOW && lastState == HIGH) {
        // Taste ist neu gedrückt worden, hochzählen
        count = count + 1;
        // Nächstes mal in 500 ms hochzählen
        nextCount = now + 500;
    }
 
    if (state == LOW && nextCount < now) {
        // Taste ist seit 500 ms gedrückt, hochzählen
        count = count + 1;
        // Nächstes mal in 500 ms hochzählen
        nextCount = now + 500;
    }
 
    lastState = state;
}