int led1 = 8;
bool ledState = 0;
const int buttonPin = 2;
const unsigned long debounceDelay = 50;
const unsigned long doubleClickTime = 1000;
unsigned long lastDebounceTime = 0;
unsigned long lastClickTime = 0;
bool buttonState = HIGH;
bool lastButtonState = HIGH;
byte clickCount = 0;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(led1,OUTPUT);
digitalWrite(led1,ledState);
Serial.begin(9600);
}
void loop() {
bool reading = digitalRead(buttonPin);
// Non-blocking debounce
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) { // Button pressed
unsigned long currentTime = millis();
if (currentTime - lastClickTime < doubleClickTime) {
clickCount++;
if (clickCount == 2) {
Serial.println("Double Click!");
clickCount = 0;
ledState = !ledState;
digitalWrite(led1,ledState);
}
} else {
clickCount = 1;
Serial.println("Single Click (potential)");
}
lastClickTime = currentTime;
}
}
}
lastButtonState = reading;
// Handle single click after timeout
if (clickCount == 1 && (millis() - lastClickTime > doubleClickTime)) {
Serial.println("Single Click (confirmed)");
// Perform your single click action here
clickCount = 0;
}
}