Сообщение от mike-y-k
|
Aliaksandr1997, для начала сделайте картинку меню вменяемого размера (размер экрана в пикселях подойдёт) и лучше добавлять файлы через управление вложениями…
|
Вставил ниже
Сообщение от mike-y-k
|
А по сути вариантов достаточно и простой конечный автомат для такого меню будет сильно прозрачней…
Первый уровень на одном switch, второй уровень уже на своих switch для каждого.
Да и покомпактнее, и прозрачней будет логика обработки
|
У меня изначально управление меню и было сделано через конечный автомат
[HTML]switch (switchPointer) // Все делаем в одном операторе и одной функции;
{
case MAIN_MENU: /*** Главное меню ***/
break;
case MENU_MANUAL: /*** Ручной режим ****/
switch (mode) { // Выбор режима работы ручного режима
case EDIT_PARAM: // Режим редактирования
break;
case HEAT_ZONE:
break;
case COOL_ZONE:
break;
case STOP_PROCESS:
break;
}
break;
case MENU_AUTO: /*** Автоматический режим ****/
switch (reflowState) {
case REFLOW_STATE_IDLE:
break;
}
break;
case MENU_SETUP: /***Настройки ***/
break;
case MENU_START: /*** Пуск по заданному термопрофилю ***/
break;
}[/HTML]
Для опрос кнопок реализована отдельная библиотека, но меня допустим не устраивает код внутри обработчиков нажатий. Много лишних условий для проверки текущего пункта типа if (switchPointer == MENU_SETUP) и так для каждой кнопки . Вот с этой целью решил организовать на структуре хотя бы вход и выход (изначально if (enterMenu) { } else {} )
[HTML]void long_up(bool lg) {
if (enterMenu) { // если находимся в подменю, то
if (switchPointer == MENU_MANUAL) {
if (lg) {
if (btnupclick ‹ 3) btnupclick++; //увеличивает счетчик кнопки на 1
else btnupclick = 0; //если счетчик достиг предела положений то его надо обнулить.
lcd.setCursor(1, 2);
lcd.print(F("›"));
btn1 = mass_byte[btnupclick];
DoLong(btn1);
} else {
if (btndnclick ‹ 3) btndnclick++; //увеличивает счетчик кнопки на 1
else btndnclick = 0; //если счетчик достиг предела положений то его надо обнулить.
lcd.setCursor(1, 2);
lcd.print(F("‹"));
btn2 = mass_byte[btndnclick];
DoLong(btn2);
}
}
else if (switchPointer == MENU_SETUP) {
}
}
}[/HTML]