#include #include #include bool debounceRead(int buttonPin, int *lastButtonState, unsigned long *lastDebounceTime, int *buttonState) { int reading = digitalRead(buttonPin); // If the switch changed, due to noise or pressing: if (reading != *lastButtonState) { // reset the debouncing timer *lastDebounceTime = millis(); } if ((millis() - *lastDebounceTime) > DEBOUNCE_DELAY) { // whatever the reading is at, it's been there for longer than the debounce delay, so take it as the actual current state: // if the button state has changed: if (reading != *buttonState) { *buttonState = reading; if (*buttonState == HIGH) return true; else return false; } } // save the reading. Next time through the loop, it'll be the lastButtonState: *lastButtonState = reading; }