#include "Button.h" void Button::init(uint8_t pin, int offState, bool usePullUp) { this->pin = pin; this->offState = offState; this->lastState = offState; if (usePullUp) pinMode(pin, INPUT_PULLUP); else pinMode(pin, INPUT); } void Button::update(unsigned long referenceTime) { unsigned long currentTime = getTime(referenceTime); int currentState = digitalRead(pin); if (lastChangedTime != 0) { if (currentState != lastState && (currentTime - lastChangedTime) > debounceMillis) { lastChanged = true; if (currentState != offState) lastPressedTime = currentTime; else if (blocked) { blocked = false; lastChanged = false; } lastChangedTime = currentTime; lastState = currentState; return; } } else { lastChangedTime = currentTime; lastState = currentState; } lastChanged = false; }