Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Создание ЖК-меню без кода с использованием XOD

Компоненты и расходные материалы

Arduino UNO
× 1
DFRobot Arduino LCD / Keypad Shield
× 1

Приложения и онлайн-сервисы

Среда XOD

Об этом проекте

Процессоры, на которых установлены платы разработки Arduino, не являются микроконтроллерами вашего дедушки - они обладают серьезной вычислительной мощностью и могут использоваться для мониторинга и управления многими типами физического оборудования и датчиков одновременно. IDE графического программирования XOD для Arduino может упростить задачу быстрого прототипирования конструкции оборудования, но по мере роста сложности системы возникает проблема пользовательского контроля и управления информацией - как организовать информацию о контролируемом процессе для отображения и позволить пользователю управляйте им логически. Выделенные кнопки и переключатели работают для простых проектов, но вскоре исчерпываются логические способы их размещения (или места, где их можно было бы разместить на корпусе). Во многих проектах для обеспечения такого рода обратной связи используется дисплей определенного типа, даже микроволновая печь обычно имеет небольшой экран, который позволяет редактировать настройки и вводить время приготовления, и хотя слишком много «погружений в меню» для доступа к непонятным настройкам может поставить под угрозу пользовательский интерфейс, интерфейсы с меню - это реальность для проектов любого типа.

Программные платформы для разработки интерфейсов на основе меню на C или C ++ для микроконтроллеров часто требуют сложного обучения и могут быть трудными для быстрого внесения изменений в дизайн, поскольку часто все взаимодействует со всем остальным. Целью этого проекта было использование графической среды программирования XOD для обеспечения возможности быстрого прототипирования интерфейсов, управляемых с помощью меню, для проектов микроконтроллеров, совместимых с Arduino, с использованием стиля интерфейса перетаскивания / WYSIWYG. Выходные и входные параметры сгенерированной структуры меню являются модульными и универсальными и должны иметь возможность использования с широким спектром источников входного сигнала (переключатели, кнопки, кодировщики) и создают последовательность выходных текстовых сообщений, которые могут быть переданы в широкий круг. различные типы дисплеев, поддерживаемые XOD, включая многострочные текстовые ЖК-модули, используемые в этом примере.

Если вы не знакомы со средой XOD, которую использует этот проект, сначала ознакомьтесь с руководствами для этого проекта на xod.io.

Ниже приведен снимок экрана с простым наброском мотивационного примера. Мы рассмотрим эту диаграмму патчей XOD раздел за разделом, чтобы объяснить, как все сочетается друг с другом.

  • Меню Раздел интерфейса контроллера

Справа от экрана редактирования патча в XOD расположены четыре узла, соединенных по убыванию. Сверху вниз сначала находится узел аналогового типа ввода, который выбирается для подключения к одному из аналоговых входных портов Arduino. В своих тестах я использовал Arduino Uno с 8-битным процессором ATMega328 с подключенным к нему экраном ЖК-дисплея / клавиатуры 16x2. Клавиатура на экране подключается через контакты экрана к аналоговому входу «A0» Arduino, и оборудование генерирует напряжения разных уровней, чтобы сообщить Arduino, какие кнопки на панели нажаты.

Помимо кнопки «сброса» на клавиатуре, которая не связана напрямую с эскизом Arduino, этот тип экрана дисплея имеет четыре кнопки направления - вверх, вниз, влево и вправо, а также кнопку «выбора». Второй узел, питаемый узлом аналогового ввода, содержит код, который декодирует различные напряжения, соответствующие отдельным клавишам, и выводит триггеры импульсного типа в зависимости от того, какая кнопка нажата. Предусмотрен вход «тайм-аут», чтобы разработчик XOD мог отрегулировать тайм-аут устранения дребезга экранной ЖК-клавиатуры, чтобы избежать ложного срабатывания, настроенного на кнопку или тип переключателя конкретного приложения.

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

В том виде, в каком он реализован в настоящее время, он принимает один вход числового типа, которым может быть любой параметр, который пользователь может изменить с внешнего элемента управления, например, потенциометр или циферблат на панели управления, который представляет некоторый параметр, который может быть изменен. Когда данное меню листового типа выбирается контроллером меню, получающим импульс на свой вход «Invoke», в дереве меню слева узел экрана, на который в данный момент смотрит пользователь, будет выдавать импульс сам по себе. вывод, а также отправить изменение параметра. Также есть два входа String, которые можно использовать для создания заставки на дисплее при включении Arduino.

За этим узлом следует стандартный модуль ЖК-контроллера 16x2 из стандартной библиотеки среды XOD, но для отображения здесь выходного текста можно использовать любой тип дисплея, для которого доступен модуль.

  • Раздел "Дерево меню"

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

Выбор «вызвать», когда отображается меню типа «ветвь», спускается в связанную с ним группу подменю, а не генерирует вывод, как это делает меню листового типа. Возможны под-подменю, под-под-подменю и т. Д.! Могут быть реализованы сложные структуры, ограниченные в первую очередь доступными ресурсами ОЗУ и флэш-памяти процессора конкретной модели Arduino.

  • Вывод раздел

В этом примере секция вывода - это место, где меню листового типа взаимодействуют с внешним оборудованием через выходные контакты Arduino. Каждое листовое меню имеет выход импульсного типа, который подключается к соответствующему триггеру через шину для включения и выключения соответствующего цифрового выходного вывода. Такое устройство можно использовать для управления внешними реле или светодиодами, но импульсные выходы являются очень общими, и выходной импульс, генерируемый при выборе «Invoke» при доступе к экрану листового меню, может использоваться для выполнения множества задач, таких как обновление внутреннего узла типа буфера XOD, где данные параметров из порта ввода типа параметра контроллера меню сохраняются для будущего использования.

  • Текущие известные проблемы

Этот набор узлов был протестирован и должен нормально работать с Arduino Uno как есть, но остается несколько проблем, которые не были решены к крайнему сроку этого проекта. В настоящее время где-нибудь в дереве должно быть меню типа ветвления, чтобы скетч скомпилировался, хотя для большинства проектов, вероятно, потребуется хотя бы один. «Верхнее» меню, вводимое в контроллер меню, предназначенное для полного возврата к титульному экрану интерфейса, в настоящее время не реализовано, но должно быть простой функцией для следующей версии.

Четырехстрочные дисплеи поддерживаются узлом контроллера меню, но интерфейс листового меню с четырьмя строками ввода текста еще не написан. Значительные усилия были приложены для уменьшения накладных расходов на память этой утилиты, но способ, которым транспилятор XOD в настоящее время хранит постоянные строки, не является оптимальным для очень низких накладных расходов на оперативную память, а интерфейсы на основе меню, как правило, содержат много текста. Для этого проекта был разработан обходной путь, и в патч добавлен набор узлов типа flash-string, чтобы гарантировать, что более длинные строки не потребляют драгоценную оперативную память программы. Надеюсь, это будет решено в обновлении среды XOD, но пока что обходной путь работает нормально.

Использование узлов типа flash-string не слишком болезненно, но требует дублирования патча и кода для каждой новой строки, хранящейся в памяти программы, и нажатия на код C ++, содержащийся в самом узле, для редактирования выходной строки:

Ввод «ID» конечных узлов и узлов ветвления пока не имеет функции. Мысль в том, что для каждого набора подменю было бы хорошо иметь связанные идентификационные номера, расположенные в таком порядке, чтобы пользователь мог отслеживать свое положение в наборе дисплеев, но для этого потребуется немного подумать о том, как это кодировать на C ++. происходить автоматически.

  • Продолжаем работу

Необходимо провести дополнительное тестирование ошибок и тестирование на других устройствах Arduino, помимо устройств AVR / ATmega, таких как ARM. Текущий набор типов узлов меню несколько ограничивает - должно быть больше разнообразия ввода и вывода. Продолжение работы по сокращению накладных расходов на ОЗУ, возможно, за счет использования большего количества метапрограммирования во время компиляции и хранения такого же объема данных во флэш-памяти вместо соединения / конкатенации компонентов дерева во время выполнения.

19.02.19 - Второй пример.

Этот второй пример снимка экрана скетча показывает, как использовать контроллер меню, чтобы принимать внешнее или внутреннее значение в качестве входных данных для контроллера, отображать текущее и предыдущее значения на желаемой странице меню, а также выбирать новое значение и сохранять его в буфере. / P>

Справа на узел меню-контроллера подается выход счетчика, запитанный узлом "часы". Но это может быть любое значение внутренних данных или внешнее значение, например, от потенциометра, подключенного к аналоговому входу. Выходные данные счетчика также отправляются на узел форматирования строки и объединяются с некоторым отображаемым текстом, чтобы показать текущее значение, получаемое контроллером, во второй строке ЖК-дисплея, когда эта страница меню открыта.

Выходы «invoked» и «param» листового меню «A» отправляются в «буферный» узел из стандартной библиотеки XOD. Выходные данные буфера затем направляются обратно в аналогичную структуру, как и раньше, за исключением узла «defer», который требуется для разрыва любых петель обратной связи в скетчах XOD. Значение, хранящееся в буфере, отображается в первой строке ЖК-дисплея.

Когда узел контроллера меню получает триггерный импульс «вызова» от контроллера клавиатуры, узел A-out выводит входное значение параметра из контроллера меню, в данном случае текущее значение счетчика, и «активированный» триггер. импульс, который активирует процедуру обновления буфера и сохраняет новый параметр в буфере. Затем дисплей автоматически обновится, чтобы отобразить новое сохраненное значение.

Порт вывода буфера также может быть направлен на любое количество других узлов, чтобы изменить их поведение, чтобы отразить новое значение данных, выбранное пользователем:

Код

  • Системная библиотека XOD Menu
Системная библиотека XOD Menu C / C ++
https://xod.io/libs/bitrex/xod-menu-system-11

Добавьте bitrex / xod-menu-system в браузер скетч-библиотек с помощью опции File -> Add Libraries ... в среде XOD.
 Без предварительного просмотра (только загрузка). 

Схема

Открыть напрямую с помощью XOD IDE xodmenusystemrev1_1_4-1-19_fLVYrcSgbX.xodball

Производственный процесс

  1. Декодер DTMF с использованием только Arduino
  2. Создание монитора Ambilight с помощью Arduino
  3. Ультразвуковой левитационный аппарат с использованием ARDUINO
  4. ЖК-анимация и игры
  5. Вольтметр своими руками с использованием Arduino и смартфона
  6. Монитор сердечного ритма с использованием Интернета вещей
  7. WebServerBlink с использованием Arduino Uno WiFi
  8. Счетчик автомобилей с использованием Arduino + Обработка + PHP
  9. Автоматизированная игра Дино с использованием arduino
  10. FM-радио с использованием Arduino и RDA8057M