Съдържание:

Arduino HMI Използване на държавни машини: 9 стъпки
Arduino HMI Използване на държавни машини: 9 стъпки

Видео: Arduino HMI Използване на държавни машини: 9 стъпки

Видео: Arduino HMI Използване на държавни машини: 9 стъпки
Видео: How to Build LDmicro Arduino PLC (Part 1) 2024, Ноември
Anonim
HMI на Arduino с помощта на държавни машини
HMI на Arduino с помощта на държавни машини

В тази инструкция ще ви покажа как да използвате инструментите на диаграмата на състоянието на YAKINDU, за да реализирате прост и разширяем HMI, като използвате 16x2 LCD клавиатурен щит за Arduino.

Окончателните държавни машини (FSM) са мощен модел за проектиране за разработване на сложни интерфейси за човешка машина (HMI). Тъй като функционалността на HMI може да се увеличи, е полезно да се използва модел за проектиране като държавни машини.

Пълният пример е вграден в YAKINDU Statechart Tools. Освен това, Eclipse C ++ IDE за Arduino Plugin е използван за компилиране и мигане в IDE.

Кратък резюме на инструментите за държавни диаграми на YAKINDU

С този инструмент е възможно да се създават графични машини на състоянието. Тя позволява на потребителя да генерира C, C ++ или Java код от машината на състоянието. С този подход моделът може да бъде променен или разширен и потребителят може просто да генерира отново кода и не трябва да пише обикновен изходен код.

Консумативи

Части:

  • Arduino (Uno, Mega)
  • USB кабел
  • 16x2 LCD клавиатурен щит

Инструменти:

  • Инструменти за диаграми на състоянието на YAKINDU
  • Eclipse C ++ IDE за Arduino

Стъпка 1: Хардуерът

Image
Image

Щитът на LCD клавиатурата може просто да бъде включен в Arduino. Той има 16x2 LCD дисплей и допълнително има шест бутона:

  • Наляво
  • Точно така
  • Нагоре
  • Надолу
  • Изберете
  • (Нулиране)

Очевидно пет от тях могат да бъдат използвани. Ключовете са свързани към делител на напрежение и се откриват с помощта на Pin A0 в зависимост от напрежението. Използвал съм софтуер за отстраняване, за да ги открия правилно.

Стъпка 2: Определете как трябва да работи

HMI контрол
HMI контрол

Приложението трябва да може да прави три неща.

  1. Handle States Тук искам да използвам бутоните за навигация между пет състояния: горе, средно, отдолу, отляво и отдясно
  2. Хронометър Прост хронометър, който може да бъде стартиран, спрян и нулиран. Тя трябва да се увеличава на всеки 100 милисекунди
  3. Брояч Третата част съдържа прост брояч нагоре/надолу. Тя трябва да може да брои положителни числа и трябва да се нулира

Активното меню (или състоянието) ще се покаже на 16x2 LCD в горния ред. Приложението (състояние, таймер или брояч) ще се покаже в долния ред. За навигация трябва да използвате левия и десния бутон.

Стъпка 3: Връзка с държавната машина

Бутоните ще бъдат освободени и свързани към държавната машина. Те могат да се използват както при събития в машината на състоянието. Освен това са дефинирани операции за показване на текущото меню. И поне две променливи, една за таймера и една за брояча, са дефинирани.

интерфейс:

// бутони като входни събития в дясно в събитие вляво в събитие нагоре в събитие надолу в избиране на събитие // показване на HMI специфични стойности операция displayLCDString (стойност: низ, дължина: цяло число, позиция: цяло число) операция displayLCDInteger (стойност: цяло число, позиция: integer) операция clearLCDRow (позиция: integer) вътрешна: // променливи за съхранение var cnt: integer var timeCnt: integer = 0

След генериране на C ++ кода, събитията in трябва да бъдат отстранени и свързани към интерфейса. Този фрагмент от код показва как да направите това.

Първоначално бутоните ще бъдат определени:

#define NONE 0 #define SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define RIGHT 5

След това има определена функция за четене на бутона. Стойностите могат да варират в зависимост от производителя на LCD щита.

статичен int readButton () {int резултат = 0; резултат = analogRead (0); if (резултат <50) {return RIGHT; } if (резултат <150) {връщане НАГОРЕ; } if (резултат <300) {връщане НАДОЛУ; } if (резултат <550) {return LEFT; } if (резултат <850) {return SELECT; } връщане NONE; }

В края бутоните ще бъдат премахнати. Направих добри резултати с 80 ms. След като бутонът бъде пуснат, той ще повиши съответния случай.

int oldState = NONE; static void raiseEvents () {int buttonPressed = readButton (); забавяне (80); oldState = buttonPressed; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> raise_select (); прекъсване; } регистър НАЛЯВО: {stateMachine-> raise_left (); прекъсване; } случай НАДОЛУ: {stateMachine-> raise_down (); прекъсване; } регистър нагоре: {stateMachine-> raise_up (); прекъсване; } случай RIGHT: {stateMachine-> raise_right (); прекъсване; } по подразбиране: {break; }}}}

Стъпка 4: Контрол на HMI

Всяко състояние се използва за една част от менюто. Има подсъстояния, където приложението - например хронометърът - ще бъде изпълнено.

С този дизайн интерфейсът може лесно да се разшири. Допълнителни менюта могат просто да се добавят, като се използва същият модел на дизайн. Четенето на стойност на сензора и показването му в четвърти елемент от менюто не е голяма работа.

Засега само ляво и дясно се използват като контрола. Но нагоре и надолу също може да се използва като разширение за навигация в главното меню. Само бутонът за избор ще се използва за влизане в конкретен елемент от менюто.

Стъпка 5: Управлявайте състоянията

Обработвайте държави
Обработвайте държави

Менюто за състояния на дръжката се използва само като допълнителен пример за навигация. Използването нагоре, надолу, надясно или наляво позволява превключване между състоянията. Текущото състояние винаги ще бъде отпечатано на втория ред на LCD дисплея.

Стъпка 6: Хронометър

Хронометър
Хронометър

Хронометърът е доста прост. Първоначално стойността на таймера ще бъде нулирана. Таймерът може да се стартира с помощта на левия бутон и да се превключва с помощта на ляво и дясно. Използването нагоре или надолу нулира таймера. Таймерът може също да се върне на нула, като използвате бутона за избор два пъти - излизайки от менюто и влизайки в него отново, тъй като таймерът ще бъде настроен на нула, като първоначално влезете в хронометъра.

Стъпка 7: Брояч

Брояч
Брояч

Поне има изпълнен брояч. Въвеждането на състоянието на брояча нулира брояча. Може да се стартира с помощта на всеки бутон, с изключение на бутона за избор. Прилага се като обикновен брояч нагоре/надолу, чиято стойност не може да бъде по -малка от 0.

Стъпка 8: Симулация

Стъпка 9: Вземете примера

Можете да изтеглите IDE тук: YAKINDU Инструменти за диаграми на състоянието

След като изтеглите IDE, ще намерите примера чрез File -> N ew -> Example

Той е безплатен за любители, но можете да използвате и 30 -дневен пробен период.

Препоръчано: