#include // Пины для LCD дисплея const int RS = 12, EN = 11, D4 = 5, D5 = 4, D6 = 3, D7 = 2; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); // Пины джойстика const int pinJoyX = A0; // Ось X не используется в этом примере const int pinJoyY = A1; // Ось Y const int pinJoyBtn = 8; // Кнопка джойстика // Настройки джойстика const int deadZoneLow = 200; // Нижний порог const int deadZoneHigh = 800; // Верхний порог const int scrollDelay = 200; // Задержка для прокрутки // Меню String menuItems[] = {"Start Game", "Settings", "Highscores", "Exit"}; int menuIndex = 0; int lastMenuIndex = -1; unsigned long lastScrollTime = 0; void setup() { pinMode(pinJoyBtn, INPUT_PULLUP); lcd.begin(16, 2); lcd.print("Main Menu:"); } void loop() { // Чтение значений джойстика int yValue = analogRead(pinJoyY); int btnState = digitalRead(pinJoyBtn); // Обработка вертикальной прокрутки if (millis() - lastScrollTime > scrollDelay) { if (yValue < deadZoneLow && menuIndex > 0) { menuIndex--; lastScrollTime = millis(); } else if (yValue > deadZoneHigh && menuIndex < (sizeof(menuItems)/sizeof(menuItems[0])) - 1) { menuIndex++; lastScrollTime = millis(); } } // Обновление дисплея при изменении позиции if (menuIndex != lastMenuIndex) { lcd.clear(); lcd.setCursor(0, 0); lcd.print(">"); lcd.print(menuItems[menuIndex]); if (menuIndex + 1 < sizeof(menuItems)/sizeof(menuItems[0])) { lcd.setCursor(1, 1); lcd.print(menuItems[menuIndex + 1]); } lastMenuIndex = menuIndex; } // Обработка нажатия кнопки if (btnState == LOW) { delay(50); // Антидребезг if (digitalRead(pinJoyBtn) == LOW) { executeMenuItem(menuIndex); while(digitalRead(pinJoyBtn) == LOW); // Ждем отпускания кнопки } } } void executeMenuItem(int index) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Selected:"); lcd.setCursor(0, 1); switch(index) { case 0: lcd.print("Starting game..."); // Здесь код для запуска игры break; case 1: lcd.print("Opening settings"); // Здесь код для настроек break; case 2: lcd.print("Highscores list"); // Здесь код таблицы рекордов break; case 3: lcd.print("Exiting..."); // Здесь код выхода break; } delay(2000); lcd.clear(); lcd.print("Main Menu:"); }