#include <LiquidCrystal.h>
// Kết nối LCD: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
// Khai báo các chân nút nhấn và LED
const int buttonOK = 2; //Vang
const int buttonDown = 3; //Blue
const int buttonUp = 4; //Red
const int chargingLED = 13;
// Các thông số menu và cấu hình
const char* menuOptions[] = {"Sac", "Setup", "Exit"};//{0,1,2,3};
int chooseMenuOptions = 0;
const int* setupOptions[] = {1,2,3}; //{"Loai pin", "Cell Pin", "Current"};
const char* batteryTypes[] = {"LiPo", "Ac quy", "Pin chi"};//{0,1,2,3};
int currentMenuOption = 0;
int currentBatteryType= 0;
int currentBatteryNum= 1;
float currentBatteryCurrent= 0.1;
int setupOption = 0;
void setup() {
// Thiết lập chân nút nhấn và LED
pinMode(buttonOK, INPUT);
pinMode(buttonDown, INPUT);
pinMode(buttonUp, INPUT);
pinMode(chargingLED, OUTPUT);
digitalWrite(chargingLED, LOW); // Đảm bảo LED tắt khi khởi động
// Khởi tạo LCD
lcd.begin(16, 2);
lcd.print("Initializing...");
delay(1000);
lcd.clear();
}
void loop() {
handleButtons(); // Xử lý nút nhấn
displayMainMenu();
delay(100);
}
// Xử lý nút nhấn
void handleButtons() {
if (digitalRead(buttonUp) == 1){
delay(100);
// buttonDown = 0;
// buttonOK = 0;
if (currentMenuOption == 0){
if (chooseMenuOptions < 2){
chooseMenuOptions += 1;
} else if (chooseMenuOptions > 2){
chooseMenuOptions = 2;
}
} else if (currentMenuOption == 1){
} else if (currentMenuOption == 2){
if (setupOption == 0){
if (currentBatteryType < 2){
currentBatteryType += 1;
} else if (currentBatteryType > 2){
currentBatteryType =2;
}
} else if (setupOption == 1){
if(currentBatteryNum < 7){
currentBatteryNum += 1;
} else if (currentBatteryNum > 7){
currentBatteryNum = 7;
}
} else if (setupOption == 2){
if (currentBatteryCurrent < 2.9){
currentBatteryCurrent += 0.1;
} else if (currentBatteryCurrent > 3){
currentBatteryCurrent = 3;
}
}
} else if (currentMenuOption == 3){
// break;
}
}
if (digitalRead(buttonDown) == 1){
delay(100);
// buttonOK = 0;
// buttonUp = 0;
if (currentMenuOption == 0){
if (chooseMenuOptions > 0){
chooseMenuOptions -= 1;
} else if (chooseMenuOptions < 0){
chooseMenuOptions = 0;
}
} else if (currentMenuOption == 1){
// currentBatteryType -= 1;
} else if (currentMenuOption == 2){
if (setupOption == 0){
if (currentBatteryType > 0){
currentBatteryType -= 1;
} else if (currentBatteryType < 0){
currentBatteryType =0;
}
} else if (setupOption == 1){
if(currentBatteryNum > 1){
currentBatteryNum -= 1;
} else if (currentBatteryNum < 1){
currentBatteryNum = 1;
}
} else if (setupOption == 2){
if (currentBatteryCurrent > 0.1){
currentBatteryCurrent -= 0.1;
} else if (currentBatteryCurrent < 0){
currentBatteryCurrent = 0;
}
}
} else if (currentMenuOption == 3){
// break;
}
}
if (digitalRead(buttonOK) == 1){
delay(100);
// buttonDown = 0;
// buttonUp = 0;
if (currentMenuOption == 0){
currentMenuOption = chooseMenuOptions+1;
} else if (currentMenuOption == 1){
// break;
} else if (currentMenuOption == 2){
if (setupOption < 2 && setupOption >= 0){
setupOption += 1;
} else if (setupOption == 2) {
currentMenuOption = 0;
}
} else if (currentMenuOption == 0){
currentMenuOption = 0;
} else if (currentMenuOption == 3){
// break;
}
}
}
// Hiển thị menu chính
void displayMainMenu() {
lcd.clear();
if (currentMenuOption == 0){
lcd.setCursor(0, 0);
lcd.print("> Main Menu:");
lcd.print(menuOptions[chooseMenuOptions]);
lcd.setCursor(0, 1);
lcd.print("Sac Setup Thoat");
} else if (currentMenuOption == 2){
if (setupOption == 0){
lcd.setCursor(0, 0);
lcd.print("> S1: ");
lcd.print(batteryTypes[currentBatteryType]);
lcd.setCursor(0, 1);
lcd.print("Lipo Acquy PinChi");
} else if (setupOption == 1){
lcd.setCursor(0, 0);
lcd.print("> S2: ");
lcd.print(currentBatteryNum);
lcd.setCursor(0, 1);
lcd.print("1 den 7");
} else if (setupOption == 2){
lcd.setCursor(0, 0);
lcd.print("> S3: ");
lcd.print(currentBatteryCurrent);
lcd.print("Ampe");
lcd.setCursor(0, 1);
lcd.print("0 den 3Ampe");
}
} else if (currentMenuOption == 1){
lcd.setCursor(0, 0);
lcd.print(">Sac:");
lcd.print(batteryTypes[currentBatteryType]);
lcd.print("|");
lcd.print(currentBatteryNum);
lcd.print("c|");
lcd.setCursor(0, 1);
lcd.print(currentBatteryCurrent);
lcd.print("A|");
lcd.print("Charging");
digitalWrite(chargingLED, 1);
chooseMenuOptions = 0;
currentMenuOption = 0;
// currentBatteryType = 0;
// currentBatteryNum = 1;
// currentBatteryCurrent = 0.1;
setupOption = 0;
delay(5000);
digitalWrite(chargingLED, 0);
} else if (currentMenuOption == 3){
lcd.setCursor(0, 0);
lcd.print("Exiting");
chooseMenuOptions = 0;
currentMenuOption = 0;
currentBatteryType = 0;
currentBatteryNum = 1;
currentBatteryCurrent = 0.1;
setupOption = 0;
delay(5000);
}
}