Съдържание:

Държавна машина на Arduino - пешеходен светофар: 6 стъпки (със снимки)
Държавна машина на Arduino - пешеходен светофар: 6 стъпки (със снимки)

Видео: Държавна машина на Arduino - пешеходен светофар: 6 стъпки (със снимки)

Видео: Държавна машина на Arduino - пешеходен светофар: 6 стъпки (със снимки)
Видео: Государственная граница-2. Все серии // Драма, триллер, боевик 2024, Ноември
Anonim
Държавна машина на Arduino - пешеходен светофар
Държавна машина на Arduino - пешеходен светофар

Здравейте! Ще ви покажа как да програмирате пешеходен светофар за Arduino в C ++ с машина с крайни състояния, като използвате YAKINDU Statechart Tools. Това ще демонстрира силата на държавните машини и може да се използва като план за по -нататъшни проекти.

Консумативи

Нуждаете се само от Arduino, няколко бутона, светодиоди, джъмпер и резистори.

Хардуер

  • 2x бутон
  • 2x светофари или можете да използвате светодиоди с резистори 220 ома
  • 2x 10k Ohm резистори
  • Платка
  • Скачач
  • Arduino Uno/Mega (или всеки друг, който има поне 8 GPIO)

Софтуер

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

Стъпка 1: Определете как работи: Пешеходен светофар

Първо трябва да уточним как трябва да работи пешеходният светофар. Опитах се да обобщя точките:

  • Използват се два светофара - единият за автомобилите, другият за пешеходците
  • Светофарът може да се включи с помощта на бутон
  • Пешеходецът може да поиска преминаване на улицата с натискане на бутон
  • Изключеният светофар се индикира чрез мигане на двата жълти светодиода
  • След включване светофарът изчаква 10 секунди в безопасен режим
  • След безопасен режим, колите винаги имат зелена фаза, докато пешеходецът започне заявка
  • Искането за преминаване на пешеходци се обозначава с превключване на жълт светодиод

Освен това има някои събития във времето в зависимост от начина на работа на светофара.

Стъпка 2: Изградете веригата

Изградете веригата
Изградете веригата

Нека започнем настройката на веригата. В моя пример, както можете да видите на изображението за визуализация, използвах Arduino Mega 2560, но всеки друг Arduino с поне осем GPIO трябва да е добре. Освен това купих някои 5V светофари в Amazon. Просто потърсете светофар Arduino. В противен случай можете просто да използвате шест различни светодиода. Освен това се нуждаете от два бутона за натискане и два 10k Ohm резистора.

Трите леви светодиода се използват за автомобилния трафик и трите десни светодиода за пешеходците, където жълтият може да посочи заявка.

Стъпка 3: Създаване на машината на състоянието

Създаване на държавната машина
Създаване на държавната машина

Така че, както можете да видите, има две основни състояния със съставни членове - състояние включено и състояние изключено. Можете да превключвате между двете състояния, като използвате събитието onOff, което е свързано към бутона ON/OFF. В първоначалното състояние, изключено, двата жълти светодиода започват да мигат всяка секунда. След като светофарът е включен, той стартира в Safestate. След 10 секунди типичното поведение на светофара ще бъде обработено. Червеният и жълтият светодиод ще се включат в състояние StreetPrepare и светофарът ще светне в зелено след още 2 секунди. Отсега нататък държавната машина чака събитието pedestrianRequest, което е свързано към втория бутон. След изпращане на събитието заявката ще бъде посочена чрез превключване на жълтия светодиод всяка секунда в състояние PedWating. 7 секунди по -късно светофарът първо ще бъде превключен в жълт, а след това в червен, докато пешеходците получат сигнала за преминаване в състояние на пешеходно зелено. След това PedestrianRed се активира и цикълът се повтаря. Това може да бъде прекъснато само чрез повторно изключване на светофара.

Стъпка 4: Изпълнение на примера

Стъпка 5: Генериран C ++ код

Генерираният C ++ код е класически комутатор за обработка на логиката на машината на състоянието. Това е само кодов фрагмент как изглежда:

void TrafficLightCtrl:: runCycle () {clearOutEvents (); за (stateConfVectorPosition = 0; stateConfVectorPosition <maxOrthogonalStates; stateConfVectorPosition ++) {превключвател (stateConfVector [stateConfVectorPosition]) {случай main_region_on_r1_StreetGreen: {main_region_etr; прекъсване; } случай main_region_on_r1_PedWaiting_r1_waitOn: {main_region_on_r1_PedWaiting_r1_waitOn_react (вярно); прекъсване; } по подразбиране: break; } clearInEvents (); }

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

Целият пример е готов за компилиране и изпълнение. Той се предлага с инструменти за държавни диаграми на YAKINDU, който е безплатен за некомерсиална употреба. След изтеглянето можете да импортирате примера директно в инструмента:

File -> New -> Example -> YAKINDU Statechart Примери -> Напред -> Светофар (C ++) за Arduino

> ТУК можете да изтеглите YAKINDU Statechart Tools <<

Можете да започнете с 30 -дневен пробен период. След това трябва да получите лиценз, който е безплатен за некомерсиална употреба!

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