
Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:05

Привет! Я собираюсь показать вам, как запрограммировать пешеходный светофор для Arduino на C ++ с конечным автоматом с помощью YAKINDU Statechart Tools. Это продемонстрирует мощь конечных автоматов и может быть использовано в качестве образца для дальнейших проектов.
Запасы
Вам понадобится только Arduino, несколько кнопок, светодиоды, перемычка и резисторы.
Аппаратное обеспечение
- 2x кнопки
- 2 светофора или светодиоды с резисторами 220 Ом
- 2 резистора по 10 кОм
- Макетная плата
- Джемпер
- Arduino Uno / Mega (или любой другой, имеющий не менее 8 GPIO)
Программное обеспечение
- Инструменты диаграммы состояний YAKINDU
- Eclipse C ++ IDE для Arduino
Шаг 1. Определите, как это работает: пешеходный светофор
Для начала нам нужно указать, как должен работать пешеходный светофор. Я попытался резюмировать пункты списка:
- Используются два светофора - один для автомобилей, другой для пешеходов.
- Светофор можно включить кнопкой
- Пешеход может запросить переход улицы, нажав кнопку
- Выключенный светофор отображается миганием обоих желтых светодиодов.
- После включения светофор ждет 10 секунд в безопасном режиме
- После безопасного режима у автомобилей всегда будет зеленая фаза, пока пешеход не начнет запрос.
- Запрос пешехода на переход отображается мигающим желтым светодиодом.
Кроме того, существуют некоторые временные события в зависимости от того, как работает светофор.
Шаг 2: Постройте схему

Приступим к настройке схемы. В моем примере, как вы можете видеть на изображении предварительного просмотра, я использовал Arduino Mega 2560, но любой другой Arduino с как минимум восемью GPIO должен подойти. Кроме того, я купил на Amazon несколько светофоров 5V. Просто ищите светофор Arduino. В противном случае вы можете просто использовать шесть разных светодиодов. Кроме того, вам понадобятся две кнопки и два резистора 10 кОм.
Три левых светодиода используются для автомобильного движения и три правых светодиода для пешеходов, а желтый может указывать на запрос.
Шаг 3: Создание конечного автомата

Итак, как вы можете видеть, есть два основных состояния с составными членами - состояние включено и состояние выключено. Вы можете переключаться между обоими состояниями, используя событие onOff, которое связано с кнопкой ON / OFF. В исходном состоянии, выключенном, оба желтых светодиода начинают мигать каждую секунду. После включения светофора он включается в Safeestate. Через 10 секунд типичное поведение светофора будет устранено. Красный и желтый светодиоды будут включены в состоянии StreetPrepare, а светофор станет зеленым еще через 2 секунды. С этого момента конечный автомат ожидает события pedestrianRequest, которое связано со второй кнопкой. После отправки события запрос будет обозначаться переключением желтого светодиода каждую секунду в состоянии PedWating. Через 7 секунд светофор будет переключаться сначала на желтый, а затем на красный, пока пешеходы не получат сигнал о переходе в состояние PedestrianGreen. После этого активируется PedestrianRed, и цикл повторяется. Это можно прервать, только снова выключив светофор.
Шаг 4: Запуск примера

Шаг 5: Сгенерированный код C ++
Сгенерированный код C ++ представляет собой классический случай переключения для обработки логики конечного автомата. Это всего лишь фрагмент кода, как это выглядит:
void TrafficLightCtrl:: runCycle () {clearOutEvents (); for (stateConfVectorPosition = 0; stateConfVectorPosition <maxOrthogonalStates; stateConfVectorPosition ++) {switch (stateConfVector [stateConfVectorPosition]) {case main_region_on_r1_StreetGreen: {main_region_on_r1_StreetGreen); перерыв; } case main_region_on_r1_PedWaiting_r1_waitOn: {main_region_on_r1_PedWaiting_r1_waitOn_react (true); перерыв; } по умолчанию: перерыв; } clearInEvents (); }
Шаг 6. Получите пример
Весь пример готов к компиляции и запуску. Он поставляется с инструментами YAKINDU Statechart Tools, которые бесплатны для некоммерческого использования. После загрузки вы можете импортировать пример прямо в инструмент:
Файл -> Создать -> Пример -> Примеры диаграмм состояний YAKINDU -> Далее -> Светофор (C ++) для Arduino
> ЗДЕСЬ вы можете скачать YAKINDU Statechart Tools <<
Вы можете начать с 30-дневной пробной версии. После этого вы должны получить лицензию, которая бесплатна для некоммерческого использования!
Рекомендуемые:
Светодиодный звуковой реактивный бесконечный кубический конечный стол: 6 шагов (с изображениями)

Светодиодный звуковой реактивный бесконечный кубический торцевой стол: Вау! Ого! Какой классный эффект! - Вот некоторые вещи, которые вы услышите после завершения работы с руководством. Совершенно умопомрачительный, красивый, гипнотический, реагирующий на звук бесконечный куб. Это скромно продвинутый проект по пайке, на который у меня ушло около 12 человек
Конечный автомат на MSP430: 6 шагов

Конечный автомат на MSP430: я собираюсь показать вам, как программировать стартовую панель MSP430G2 с конечными автоматами (FSM), используя инструменты диаграммы состояний YAKINDU непосредственно в Texas Instruments Code Composer Studio. Это руководство состоит из шести шагов: Установка инструментов диаграммы состояний YAKINDU как
Эффектор гибки: Роботизированный конечный эффект для гибки пластин: 6 шагов

Изгибающий эффект: Роботизированный оконечный эффектор для изгибающих пластин: Цель: формирование и фиксация активных элементов третичного изгиба на первичном / вторичном структурном элементе / раме. Члены группы: Бабасола Томас, Нилофар Имани, Завод Сонгкхро
Конечный автомат и многозадачность на Arduino с расширителями SPI: 3 шага

Конечный автомат и многозадачность на Arduino с помощью расширителей SPI: На прошлой неделе я просил создать систему для пилотирования фейерверков с помощью Arduino. Для борьбы с пожарами требовалось около 64 выходов. Один из способов сделать это - использовать расширители IC. Итак, доступны 2 решения: - расширитель I2C, но ему нужен инвертор, когда вы
ПЛК Arduino 32 ввода-вывода + конечный автомат + SCADA или HMI: 8 шагов

ПЛК Arduino 32 ввода / вывода + конечный автомат + SCADA или HMI: множество способов программирования, управления и наблюдения за промышленной системой с помощью arduino