Как сделать динамическое меню с подменю ( Arduino mega или Arduino Uno)

У меня есть arduino mega с ЖК-экраном (от keyestudio KS2056). Я пытаюсь создать меню с подменю, которое имело бы добавляемые и удаляемые строки на основе входов от RFID-сканера(добавляемый) и кнопок(для удаления выбранных строк). Я не очень уверен, как я мог бы сделать это. Любая помощь была бы очень кстати.

, 👍1


2 ответа


1

Я пропущу часть RFID, которая не связана с меню.

Что вы можете сделать, так это создать две переменные:

int menuLevel1 = 0;
int menuLevel2 = 0;

Предполагая, что у вас 2 уровня, если у вас больше уровней, рассмотрите массив.

Теперь вы можете распечатать экран на основе значений этих двух переменных (используйте оператор switch для menuLevel1, который вызывает новые функции, каждая со своим собственным оператором switch для menuLevel2.

Обратите внимание, что есть и другие решения, но это довольно простое решение.

Сканер RFID просто изменяет значения, поэтому перейдите на другой экран меню.

Немного другое решение состоит в том, чтобы использовать не числа, а перечисление (или одно для основного уровня, и x для второго уровня и т.д.). Это может накапливаться, поэтому вы также можете использовать одно значение перечисления (с одной записью на возможную страницу меню).

Последний пример выглядит следующим образом:

enum EMenuPage
{
   StartPage,
   MainMenu,
   FirstMenu,
   DisplayX,
   SetY,
   …
}

enum EMenuPage _menuPage;

Отображение типа:

switch (_menuPage)
{
case StartPage:
   // Заполнить LCD дисплей начальной страницей
   break;

case …

И когда приходит RFID-сообщение:

if (RFID... == Back)
{
  _menuPage = MainMenu;
}
else …
,

0

[Конечный автомат][1]. это общая форма решения, представленного Майклом выше. это большая помощь в ситуациях, когда приложению приходится отвечать или действовать во многих состояниях (например, в меню). хорошая часть в том , что вы можете нарисовать их на листе бумаги, нарисовать график, управлять вводом/выводом и написать общую процедуру для действий в различных состояниях. имена состояний themsevles могут быть представлены целочисленной переменной и лучше представлены перечислением. после этого должна быть процедура, чтобы действовать на основе текущего состояния, а входные данные из текущего состояния должны переходить в другое состояние. в самой простой форме это просто блок "если бы еще". несмотря на то, что идея такая же, как и решение с голыми переменными, представленное в других ответах, игнорирование методов, связанных с конечным автоматом (например, просто рисование графиков состояния на листе бумаги), делает большое приложение неуправляемым.

,