#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <TM1637Display.h>
// LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // إذا لم تعمل جرّب 0x3F
// TM1637
#define CLK 7
#define DIO 8
TM1637Display display(CLK, DIO);
// أزرار القائمة
#define BTN_NEXT 2
#define BTN_PREV 3
#define BTN_ENTER 4
#define BTN_BACK 5
// القوائم
String menuItems[] = {
"1. Servo Control",
"2. Dino Game",
"3. Security Lock",
"4. Settings"
};
int menuCount = sizeof(menuItems) / sizeof(menuItems[0]);
int currentMenu = 0;
bool inSubMenu = false;
void setup() {
lcd.init();
lcd.backlight();
display.setBrightness(7);
display.showNumberDec(0); // عرض صفر بالبداية
pinMode(BTN_NEXT, INPUT_PULLUP);
pinMode(BTN_PREV, INPUT_PULLUP);
pinMode(BTN_ENTER, INPUT_PULLUP);
pinMode(BTN_BACK, INPUT_PULLUP);
lcd.setCursor(0, 0);
lcd.print("Welcome, YO!");
delay(1000);
showMenu();
}
void loop() {
if (!inSubMenu) {
if (digitalRead(BTN_NEXT) == LOW) {
currentMenu = (currentMenu + 1) % menuCount;
showMenu();
waitForRelease(BTN_NEXT);
}
if (digitalRead(BTN_PREV) == LOW) {
currentMenu = (currentMenu - 1 + menuCount) % menuCount;
showMenu();
waitForRelease(BTN_PREV);
}
if (digitalRead(BTN_ENTER) == LOW) {
inSubMenu = true;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Selected:");
lcd.setCursor(0, 1);
lcd.print(menuItems[currentMenu]);
// مثال: عرض رقم القائمة على TM1637
display.showNumberDec(currentMenu + 1);
delay(1000);
waitForRelease(BTN_ENTER);
}
}
if (inSubMenu && digitalRead(BTN_BACK) == LOW) {
inSubMenu = false;
showMenu();
waitForRelease(BTN_BACK);
}
}
void showMenu() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Menu:");
lcd.setCursor(0, 1);
lcd.print(menuItems[currentMenu]);
display.showNumberDec(currentMenu + 1);
}
void waitForRelease(int pin) {
while (digitalRead(pin) == LOW);
delay(200); // لمنع التكرار
}