#include <OneButton.h>
#define BUTTON_PIN 2
OneButton button(BUTTON_PIN, true);
const int MAIN_MENU_ITEMS = 3;
const int SUB_MENU_ITEMS = 2;
enum MenuType { MAIN_MENU, SUB_MENU };
struct MenuItem {
String name;
void (*action)();
};
void option1() {
Serial.println("Option 1 selected");
}
void option2() {
Serial.println("Option 2 selected");
}
void option3() {
Serial.println("Option 3 selected");
}
void subOption1() {
Serial.println("Sub Option 1 selected");
}
void subOption2() {
Serial.println("Sub Option 2 selected");
}
MenuItem mainMenu[MAIN_MENU_ITEMS] = {
{"Option 1", option1},
{"Option 2", option2},
{"Option 3", option3}
};
MenuItem subMenu[SUB_MENU_ITEMS] = {
{"Sub Option 1", subOption1},
{"Sub Option 2", subOption2}
};
MenuType currentMenu = MAIN_MENU;
int currentMenuItem = 0;
unsigned long lastButtonClickTime = 0;
const unsigned long returnToMainDelay = 5000; // 2 секунди
void clickHandler() {
Serial.println("Click is detected");
if (currentMenu == MAIN_MENU) {
openSubMenu();
} else {
returnToMainMenu();
}
}
void setup() {
Serial.begin(9600);
button.attachClick(clickHandler);
}
void loop() {
button.tick();
// Основна програма виконується тут
Serial.println("Running main program...");
delay(1000);
}
void openSubMenu() {
currentMenu = SUB_MENU;
Serial.println("Sub Menu:");
displaySubMenu();
lastButtonClickTime = millis();
}
void returnToMainMenu() {
if (millis() - lastButtonClickTime > returnToMainDelay) {
currentMenu = MAIN_MENU;
Serial.println("Returning to Main Menu:");
displayMainMenu();
}
}
void displayMainMenu() {
for (int i = 0; i < MAIN_MENU_ITEMS; i++) {
if (i == currentMenuItem) {
Serial.print(">> ");
} else {
Serial.print(" ");
}
Serial.println(mainMenu[i].name);
}
}
void displaySubMenu() {
for (int i = 0; i < SUB_MENU_ITEMS; i++) {
if (i == currentMenuItem) {
Serial.print(">> ");
} else {
Serial.print(" ");
}
Serial.println(subMenu[i].name);
}
}