#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define LED_BUILTIN 2 // ESP32 onboard LED
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27 is common. Try 0x3F if needed
unsigned int preset = 0, count = 0;
void label1() {
lcd.clear();
lcd.print(" * SHUBHAM *");
lcd.setCursor(0, 1);
lcd.print("WDMC CONTROLLER");
}
void label2() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("INPUT: ");
lcd.print(preset);
lcd.setCursor(0, 1);
lcd.print("COUNT: ");
lcd.print(count);
}
void setup() {
Wire.begin(21, 22); // SDA = 21, SCL = 22
lcd.init();
lcd.backlight();
pinMode(34, INPUT_PULLUP); // A0
pinMode(35, INPUT_PULLUP); // A1
pinMode(32, INPUT_PULLUP); // A2
pinMode(33, INPUT_PULLUP); // A3
pinMode(25, INPUT_PULLUP); // A4
pinMode(26, INPUT_PULLUP); // A5
pinMode(LED_BUILTIN, OUTPUT);
pinMode(5, OUTPUT); // Safe GPIO
label1();
delay(2000);
label2();
}
void loop() {
if (digitalRead(5) == LOW && digitalRead(25) == LOW) {
preset++;
digitalWrite(LED_BUILTIN, HIGH);
delay(250);
label2();
digitalWrite(LED_BUILTIN, LOW);
}
else if (digitalRead(5) == LOW && preset >= 1 && digitalRead(33) == LOW) {
preset--;
digitalWrite(LED_BUILTIN, HIGH);
delay(250);
label2();
digitalWrite(LED_BUILTIN, LOW);
}
if (preset >= 1 && preset <= 10000 && digitalRead(5) == LOW && digitalRead(26) == LOW) {
preset *= 10;
digitalWrite(LED_BUILTIN, HIGH);
delay(250);
label2();
digitalWrite(LED_BUILTIN, LOW);
}
else if (preset >= 10001) {
preset = 0;
label2();
}
if (preset >= 1 && digitalRead(35) == LOW) {
if (digitalRead(5) == HIGH) {
digitalWrite(5, LOW);
}
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
digitalWrite(LED_BUILTIN, LOW);
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
digitalWrite(LED_BUILTIN, LOW);
preset = 0;
count = 0;
delay(250);
label2();
}
else if (preset >= 1 && digitalRead(5) == HIGH && count >= preset) {
digitalWrite(5, LOW);
delay(250);
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
count = 0;
label2();
digitalWrite(LED_BUILTIN, LOW);
}
if (preset >= 1 && digitalRead(5) == LOW && digitalRead(32) == LOW) {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(5, HIGH);
}
if (digitalRead(5) == LOW && digitalRead(25) == LOW) {
preset++;
count = 0; // Reset count on new preset input
digitalWrite(LED_BUILTIN, HIGH);
delay(250);
label2();
digitalWrite(LED_BUILTIN, LOW);
}
}