Оглавление:

Конечный автомат на Arduino - пешеходный светофор: 6 шагов (с изображениями)
Конечный автомат на Arduino - пешеходный светофор: 6 шагов (с изображениями)

Видео: Конечный автомат на Arduino - пешеходный светофор: 6 шагов (с изображениями)

Видео: Конечный автомат на Arduino - пешеходный светофор: 6 шагов (с изображениями)
Видео: Программирование Arduino для начинающих — Светофор. Создаём аналог пешеходного светофора #13 2024, Ноябрь
Anonim
Конечный автомат на Arduino - пешеходный светофор
Конечный автомат на Arduino - пешеходный светофор

Привет! Я собираюсь показать вам, как запрограммировать пешеходный светофор для 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-дневной пробной версии. После этого вы должны получить лицензию, которая бесплатна для некоммерческого использования!

Рекомендуемые: