#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define CLK 25
#define DT 33
#define SW 32
int currentStateCLK;
int lastStateCLK;
unsigned long lastButtonPress = 0;
int leds[] = { 13, 12, 14, 27 };
unsigned int menu = 0;
int ledStatus[5] = { 0 };
int timer = 1000;
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.clear();
pinMode(CLK, INPUT);
pinMode(DT, INPUT);
pinMode(SW, INPUT_PULLUP);
for (int i = 0; i < 4; i++) {
pinMode(leds[i], OUTPUT);
}
menu = 0;
updateMenu();
}
void loop() {
currentStateCLK = digitalRead(CLK);
if (currentStateCLK != lastStateCLK && currentStateCLK == 1) {
if (digitalRead(DT) != currentStateCLK) {
menu--;
updateMenu();
} else {
menu++;
updateMenu();
}
}
lastStateCLK = currentStateCLK;
int btnState = digitalRead(SW);
if (btnState == LOW) {
if (millis() - lastButtonPress > 50) {
executeAction();
updateMenu();
}
lastButtonPress = millis();
}
delay(1);
}
void printlcd() {
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("LED Controller");
lcd.setCursor(0, 1);
}
void updateMenu() {
switch (menu) {
case 0:
menu = 0;
break;
case 1:
printlcd();
lcd.print(" Led 1>");
break;
case 2:
printlcd();
lcd.print(" <Led 2>");
break;
case 3:
printlcd();
lcd.print(" <Led 3>");
break;
case 4:
printlcd();
lcd.print(" <Led 4");
break;
case 5:
menu = 4;
break;
}
}
void executeAction() {
switch (menu) {
case 1:
action1();
break;
case 2:
action2();
break;
case 3:
action3();
break;
case 4:
action4();
break;
}
}
void action1() {
if (ledStatus[menu] != 0) {
ledStatus[menu] = 0;
lcd.clear();
lcd.print("> LED 1 OFF...");
digitalWrite(leds[menu - 1], ledStatus[menu]);
delay(timer);
} else {
ledStatus[menu] = 1;
lcd.clear();
lcd.print("> LED 1 ON...");
digitalWrite(leds[menu - 1], ledStatus[menu]);
delay(timer);
}
}
void action2() {
if (ledStatus[menu] != 0) {
ledStatus[menu] = 0;
lcd.clear();
lcd.print("> LED 2 OFF...");
digitalWrite(leds[menu - 1], ledStatus[menu]);
delay(timer);
} else {
ledStatus[menu] = 1;
lcd.clear();
lcd.print("> LED 2 ON...");
digitalWrite(leds[menu - 1], ledStatus[menu]);
delay(timer);
}
}
void action3() {
if (ledStatus[menu] != 0) {
ledStatus[menu] = 0;
lcd.clear();
lcd.print("> LED 3 OFF...");
digitalWrite(leds[menu - 1], ledStatus[menu]);
delay(timer);
} else {
ledStatus[menu] = 1;
lcd.clear();
lcd.print("> LED 3 ON...");
digitalWrite(leds[menu - 1], ledStatus[menu]);
delay(timer);
}
}
void action4() {
if (ledStatus[menu] != 0) {
ledStatus[menu] = 0;
lcd.clear();
lcd.print("> LED 4 OFF...");
digitalWrite(leds[menu - 1], ledStatus[menu]);
delay(timer);
} else {
ledStatus[menu] = 1;
lcd.clear();
lcd.print("> LED 4 ON...");
digitalWrite(leds[menu - 1], ledStatus[menu]);
delay(timer);
}
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
encoder2:CLK
encoder2:DT
encoder2:SW
encoder2:VCC
encoder2:GND