@sneha_codes
Debouncing buttons without delay(), so the rest of the loop keeps running. This replaced about thirty lines of tangled flags in my robot's control code. #code #arduino
arduino
// Non-blocking debounce — no delay(), the loop stays responsive.
class Button {
uint8_t pin; bool stable = HIGH, last = HIGH; unsigned long changedAt = 0;
public:
explicit Button(uint8_t p) : pin(p) { pinMode(p, INPUT_PULLUP); }
// Returns true once per physical press.
bool pressed() {
bool now = digitalRead(pin);
if (now != last) { last = now; changedAt = millis(); }
if (millis() - changedAt > 25 && now != stable) {
stable = now;
return stable == LOW; // active-low with INPUT_PULLUP
}
return false;
}
};