Обсуждаем контроллеры компании Atmel.
Ответить

Re: micromenu-v2

Вс апр 03, 2022 22:07:12

Не знаю, я сам делал менюшки на основе набивания собственных шишек и мучений, иногда подглядывая за чужими реализациями.
Можно и без С++ написать. И даже без указателей на функции. Просто это будет громозко и неуниверсально. Но можно. Для каждой кнопки напишите исполняемые функции, вызываемые при детектировании факта нажатия кнопки, и внутри их по переменным текущего состояния и режима уже определяйте, какую исполняемую функцию вызывать в зависимости от режима менюшки. Быть может, так вам будет легче разобраться.

Re: micromenu-v2

Пн апр 04, 2022 08:50:42

Хмм, в начале темы ENTER есть
теперь его убрали
или, может, обрабатывать ENTER не планируете?

Re: micromenu-v2

Пн апр 04, 2022 09:52:11

Demiurg, да, я знаю про конечные автоматы и именно так и пытаюсь реализовать. И хотя много легче на стало, я кажется понимаю, куда надо копать. Я не мог перейти от модуля обработки кнопок к модулю меню. Буду пробовать переработать структуру автоматов.
BOB51, ну вот я раньше все небольшие проектики на ассме делал и все было нормально. А вот с переходом на С есть определенные сложности )

Re: micromenu-v2

Пн апр 04, 2022 10:04:36

На ассемблере можно и весьма крупные проекты делать.
Единственно придется к "многофайловому" варианту оформления/написания переходить.
То же самое и на СИ/С++ - в рамках одного файла не получится чего солидного нашкарябать (чем больше текста - тем сложнее разбираться).
А вот правила "многофайловиков" в сишных проектах заметно сложнее.
8)

Re: micromenu-v2

Пн апр 04, 2022 11:20:25

Я начинал с асма, сидел на нем несколько лет. Потом перешёл на си. Нет разницы, на каком языке. Главное в организации программных модулей, их взаимосвязях.
Вечером, если не забуду, попробую выложить пример.

Re: micromenu-v2

Пн апр 04, 2022 11:33:03

Вечером, если не забуду, попробую выложить пример.

вот этот?

вот например в этом примере я не могу понять, где используется результат функции bool proc_menu_keys (void). Булевое значение же должно где-то проверяться? Или это совершенно не важно и просто происходит переход по указателю SET_MENU_LEVEL ?

Re: micromenu-v2

Пн апр 04, 2022 11:44:31

у вас есть функция navigate_menu, которая или "бродит" по системе меню, которую вы описали, или возвращает код того пункта, на котором было нажатие ENTER. еще она может вернуть код завершения брожения по меню - когда нажата кнопка "выйти на предыдущий уровень меню", а находились в этот момент на самом верхнем уровне.
вот вам и надо анализировать результат, который эта функция вернула: если там код пункта меню, то выполнить то, что надо по тому пункту, ну или закончить работу.
то есть вы в цикле вызываете navigate_menu до тех пор, пока не вернет "выход из меню", а в остальных случаях выполняете действия по возвращенному коду и повторяете цикл снова.

ничего иного вам делать не надо, система micromenu сама сделает остальное, если вы дадите ей возможность работать с парой функций - ввода кнопок и отрисовки пункта меню.

все это описано в документации.

смысл использования этой системы именно в том, чтобы не думать, "где используется результат" и "как происходит переход". если вас мучают эти вопросы, то вы либо не понимаете, что делаете, либо вам надо самому написать всю систему работы с меню.

Добавлено after 3 minutes 29 seconds:
кстати, я хотел бы получить пояснения на счет "корабля" - если я понял контекст высказывания верно, то вы упоротый укроп и помогать вам нет никакого смысла. разубедите меня.

Re: micromenu-v2

Пн апр 04, 2022 16:30:13

Давайте будем на этом форуме вне политики. Любой разлад на руку "империи лжи"....

Re: micromenu-v2

Пн апр 04, 2022 16:58:20

Спасибо всем за терпение и объяснения. Запустил.

Re: micromenu-v2

Сб апр 01, 2023 00:41:59

Может кому пригодится, переписал свою версию микроменю для ардуино на ESP32. https://disk.yandex.ru/d/fBMnIz8LAprE6Q В папке два проекта, просто использование шрифтов сгенерированных в программе CXFontGenerator_3 и проект микроменю, https://youtube.com/shorts/f47wOlPhV0s. Там внизу цифры, просто для примера вывода их из разных шрифтов. Один шрифт содержит только цифры и вызывается со смещением '0', второй вызывается со смещением 0, и в нем, например, вместо цифр можно хранить свои картинки. В принципе можно оставить только два файла микроменю в папке lib, рисование пунктов сделать через функции библиотеки tft, но мне сильно не хватает вывода с выравниванием по правому краю. Работает немного тормознуто. Но и с родными библиотечными функциями print и т.д. примерно также.
Проект создан в vscode+platformio.
Ответить