Съдържание:
- Консумативи
- Стъпка 1: Хардуерът
- Стъпка 2: Определете как трябва да работи
- Стъпка 3: Връзка с държавната машина
- Стъпка 4: Контрол на HMI
- Стъпка 5: Управлявайте състоянията
- Стъпка 6: Хронометър
- Стъпка 7: Брояч
- Стъпка 8: Симулация
- Стъпка 9: Вземете примера
Видео: Arduino HMI Използване на държавни машини: 9 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:51
В тази инструкция ще ви покажа как да използвате инструментите на диаграмата на състоянието на 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: Хардуерът
Щитът на LCD клавиатурата може просто да бъде включен в Arduino. Той има 16x2 LCD дисплей и допълнително има шест бутона:
- Наляво
- Точно така
- Нагоре
- Надолу
- Изберете
- (Нулиране)
Очевидно пет от тях могат да бъдат използвани. Ключовете са свързани към делител на напрежение и се откриват с помощта на Pin A0 в зависимост от напрежението. Използвал съм софтуер за отстраняване, за да ги открия правилно.
Стъпка 2: Определете как трябва да работи
Приложението трябва да може да прави три неща.
- Handle States Тук искам да използвам бутоните за навигация между пет състояния: горе, средно, отдолу, отляво и отдясно
- Хронометър Прост хронометър, който може да бъде стартиран, спрян и нулиран. Тя трябва да се увеличава на всеки 100 милисекунди
- Брояч Третата част съдържа прост брояч нагоре/надолу. Тя трябва да може да брои положителни числа и трябва да се нулира
Активното меню (или състоянието) ще се покаже на 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 -дневен пробен период.
Препоръчано:
Шкаф за електронни машини: 6 стъпки
Electronic Machine Locker: Това устройство ви позволява да включите електрически машини за определено време. Той помага да се следи активността на планираните машини. Ако потребителят въведе правилната парола, той/тя ще може да използва машината, свързана с това устройство в продължение на два часа (време
Neopixel Ws2812 Rainbow LED Glow с M5stick-C - Стартиране на Rainbow на Neopixel Ws2812 Използване на M5stack M5stick C Използване на Arduino IDE: 5 стъпки
Neopixel Ws2812 Rainbow LED Glow с M5stick-C | Изпълнение на Rainbow на Neopixel Ws2812 Използване на M5stack M5stick C Използване на Arduino IDE: Здравейте момчета в тази инструкция ще се научим как да използваме неопиксели ws2812 светодиоди или LED лента или LED матрица или LED пръстен с m5stack m5stick-C платка за разработка с Arduino IDE и ние ще направим модел на дъга с него
Направи си сам „Измервателен уред за използване на компютър ROG Base“Използване на Arduino и Python: 5 стъпки (със снимки)
Направи си сам „Измерител за използване на компютър ROG Base“Използване на Arduino и Python: ************************************* +На първо място, тези инструкции са написани от неносещ англоговорящ … не е професор по английски, така че, моля, информирайте за някаква граматическа грешка, преди да ми се подигравате.: P +и моля, не имитирайте
Предсказуема поддръжка на въртящи се машини с помощта на вибрация и говорител на нещата: 8 стъпки
Предсказуема поддръжка на въртящи се машини с използване на вибрации и говорители: Въртящите се машини като вятърни турбини, хидротурбини, асинхронни двигатели и др. Се сблъскват с различен вид износване. Повечето от тези неизправности и износване, причинени от необичайни вибрации в устройството. Тези машини често се експлоатират при тежки
Машини за движение: 10 стъпки (със снимки)
Машини за движение: Машините за движение предлагат игриво въведение в движението, механизма и роботиката. Комплектите се състоят от лазерно изрязан корпус от шперплат и прости части в насипно състояние като бавно движещи се зъбни колела, пластмасови батерии и плъзгащи превключватели. Учениците могат да експериментират с