How do you plan to solve it?
/*Paste your code here*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BUTTON_PIN 7
#define LONG_PRESS_MS 1000
#define DOUBLE_CLICK_MS 400
#define RESET_DELAY 2000
#define DEBOUNCE_MS 50
LiquidCrystal_I2C lcd(0x27, 16, 2);
void showWaiting() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Waiting for");
lcd.setCursor(0, 1);
lcd.print("button press...");
}
void showMessage(const char* line1, const char* line2) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(line1);
lcd.setCursor(0, 1);
lcd.print(line2);
delay(RESET_DELAY);
showWaiting();
}
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
lcd.init();
lcd.backlight();
showWaiting();
}
void loop() {
if (digitalRead(BUTTON_PIN) == LOW) {
delay(DEBOUNCE_MS);
if (digitalRead(BUTTON_PIN) != LOW) return;
unsigned long pressStart = millis();
bool longDetected = false;
while (digitalRead(BUTTON_PIN) == LOW) {
if (!longDetected && (millis() - pressStart >= LONG_PRESS_MS)) {
showMessage("Long Press", "Detected");
longDetected = true;
}
delay(10);
}
if (longDetected) {
delay(200);
return;
}
delay(DEBOUNCE_MS);
unsigned long waitStart = millis();
bool secondPressed = false;
while (millis() - waitStart < DOUBLE_CLICK_MS) {
if (digitalRead(BUTTON_PIN) == LOW) {
delay(DEBOUNCE_MS);
if (digitalRead(BUTTON_PIN) == LOW) {
while (digitalRead(BUTTON_PIN) == LOW) delay(10);
secondPressed = true;
}
break;
}
delay(10);
}
if (secondPressed) {
showMessage("Double Click", "Detected");
} else {
showMessage("Single Click", "Detected");
}
delay(200);
}
}
Add a video of the output (know more)
