Создание кастомных LCD-меню на Arduino в XOD — без программирования
Компоненты и материалы
| Arduino UNO | 1 |
| Shield DFRobot LCD/Keypad для Arduino (16×2 LCD + 5 кнопок + Reset) | 1 |
Приложения и сервисы
- XOD Environment — визуальная IDE для Arduino (xod.io)
О проекте
Микроконтроллеры Arduino способны управлять множеством датчиков и исполнительных механизмов одновременно. Графическая среда XOD упрощает прототипирование, но по мере роста сложности встаёт вопрос интерфейса пользователя: как выводить информацию и управлять процессом логично. Кнопки и переключатели подходят для простых задач, но быстро исчерпываются. Меню на дисплее — стандартное решение (как в микроволновке), хотя глубокое погружение в меню ухудшает UX.
Программные фреймворки для меню на C/C++ имеют крутую кривую обучения и трудно модифицируются. Цель проекта — использовать XOD для быстрого прототипирования меню drag-and-drop/WYSIWYG. Входные/выходные параметры меню модульны и универсальны: работают с любыми источниками ввода (кнопки, энкодеры) и выводят текстовые последовательности, совместимые с любыми дисплеями, поддерживаемыми XOD (в примере — 16×2 текстовый LCD).
Если вы не знакомы с XOD, начните с туториалов на xod.io.
Пример 1: базовая структура патча
Секция контроллера меню (справа)
Четыре узла, соединённых вертикально:
- Аналоговый вход — подключён к пину A0. На шилде DFRobot клавиатура выдаёт разные напряжения на A0 в зависимости от нажатой кнопки (Вверх, Вниз, Влево, Вправо, Select). Кнопка Reset не подключена к Arduino.
- Декодер клавиатуры — преобразует напряжения в импульсные триггеры для каждой кнопки. Есть вход
timeoutдля настройки антидребезга. - Контроллер меню — принимает триггеры, управляет навигацией по дереву меню, генерирует обновления состояния. Принимает одно числовое значение (параметр) от внешнего источника (потенциометр и т.д.). При выборе листового меню (Invoke) соответствующий узел выдаёт импульс и значение параметра. Два строковых входа — для заставки при включении.
- Контроллер дисплея 16×2 — стандартный узел XOD, можно заменить на любой поддерживаемый дисплей.
Секция дерева меню (слева)
Древовидная структура, корень которой подаётся на вход контроллера меню. Три типа узлов:
- Leaf (лист) — конечный пункт, без оранжевых входов. Действие или изменяемый параметр.
- Branch (ветвь) — имеет вход и выход, позволяет выбрать среди дочерних подменю.
- Concat (конкатенация) — группирует подменю и подаёт их на вход Branch.
Выбор Invoke в Branch погружает в подменю. Поддерживаются вложенные подменю любой глубины (в пределах RAM/Flash).
Секция вывода (правый нижний угол)
Импульсные выходы листьев подключены через шину к триггерам (flip-flop), переключающим цифровые пины. Можно управлять реле, светодиодами, или сохранять значение в буфер (buffer node) для дальнейшего использования.
Известные проблемы
- Для компиляции в дереве должна быть хотя бы одна Branch-нода.
- Вход «Top» (возврат к титульному экрану) не реализован.
- Четырёхстрочные дисплеи поддерживаются контроллером, но узел Leaf с 4 строками текста ещё не написан.
- XOD неоптимально хранит константные строки в RAM. Для длинных текстов добавлены узлы flash-string (хранение во Flash), но требуют дублирования патча и правки C++ кода внутри узла.
- Вход ID у Leaf/Branch пока не используется (планировался для нумерации позиций).
Планы развития
- Тестирование на других платах (ARM и др.)
- Расширение типов узлов ввода/вывода
- Снижение расхода RAM через метапрограммирование и хранение во Flash
Пример 2: работа с параметрами (19.02.2019)
Контроллеру меню подаётся значение счётчика (clock node) — может быть любым внутренним или внешним значением (потенциометр). Значение форматируется в строку и выводится на 2-ю строку LCD при входе в меню.
Выходы invoked и param листа «A» идут в узел buffer. Значение буфера отображается на 1-й строке. При нажатии Invoke — текущее значение параметра сохраняется в буфер, дисплей обновляется. Выход буфера можно направить на любые узлы для изменения их поведения.
Код / Библиотека
Библиотека XOD Menu System: https://xod.io/libs/bitrex/xod-menu-system-11
Установка: в XOD IDE → File → Add Libraries → введите bitrex/xod-menu-system.
Превью недоступно (только скачивание).
Схемы / Патчи XOD
Файл проекта для XOD IDE: xodmenusystemrev1_1_4-1-19_fLVYrcSgbX.xodball — открывается напрямую в XOD.
Производственный процесс
- Создание DTMF-декодера на Arduino без внешних микросхем
- Создание потрясающей системы Ambilight для монитора на Arduino
- Создание ультразвукового левитатора на Arduino: пошаговое руководство
- Создание анимации и игр на LCD 16×2 с Arduino UNO
- Умный вольтметр на Arduino и смартфоне — простое DIY-проект
- IoT-монитор пульса в реальном времени на Arduino и MAX30100
- Веб-сервер на Arduino Uno WiFi: управление LED через браузер
- Умный счетчик парковки: Отслеживание машин в реальном времени (Arduino, Processing, PHP)
- Автоматизация игры «Динозавр» в Chrome на Arduino и LDR с Python
- Сборка компактного FM-радио на Arduino Nano и RDA5807M