Проект 2. Уличный светофор

Мы запрограммируем модуль TrafficLight, в режиме реального светофора! Сначала это будет самый простой режим, а потом реализуем более сложный: с мигающим зелёным сигналом А также мы изучим что такое библиотека, и как она помогает сделать программирование более простым!

Оборудование:

TrafficLight (светофор)

Программирование:

Библиотека Eryoma

Практика

Запрограммируйте модуль TrafficLight на работу в следующем режиме:

  1. включить красный светодиод
  2. ожидание 10 секунд
  3. выключить красный светодиод
  4. включить желтый светодиод
  5. подождать 2 секунды
  6. выключить желтый светодиод
  7. включить зелёный светодиод
  8. подождать 10 секунд
  9. выключить зелёный светодиод
  10. включить желтый светодиод
  11. подождать 2 секунды
  12. выключить желтый светодиод

Дополнительное задание

Измените режим работы светофора на более сложный

  1. красный цвет (10сек)
  2. красный + желтый (2сек)
  3. зеленый (10сек)
  4. зелёный мигающий (3 мигания)
  5. жёлтый (2сек)

Решение

Мы рекомендуем сначала освоить материал и попробовать сделать программу самостоятельно! А потом проверить себя, посмотрев наш вариант решения:

#include <Eryoma.h> // Подключаем библиотеку
Eryoma eryoma;      // Создаём экземпляр класса Eryoma 

void setup() {
  eryoma.setupConnector(ePort1, TrafficLight); // Указываем, что на 1 порте подключен модуль TrafficLight
}

void loop() {
  eryoma.write(ePort1, 0, 0, 255); // Включаем на 1 порте красный светодиод с заданной яркостью(от 0 до 255), остальные выключаем
  delay(10000);                    // Задержка 10000 мс (1 сек = 1000 мс)
  eryoma.write(ePort1, 0, 255, 0); // Включаем на 1 порте жёлтый светодиод с заданной яркостью(от 0 до 255), остальные выключаем
  delay(2000);                     // Задержка 2000 мс
  eryoma.write(ePort1, 255, 0, 0); // Включаем на 1 порте зелёный светодиод с заданной яркостью(от 0 до 255), остальные выключаем
  delay(10000);                    // Задержка 10000 мс
  eryoma.write(ePort1, 0, 255, 0); // Включаем на 1 порте зелёный светодиод с заданной яркостью(от 0 до 255), остальные выключаем
  delay(2000);                     // Задержка 2000 мс
}

#include <Eryoma.h> // Подключаем библиотеку
Eryoma eryoma; // Создаём экземпляр класса Eryoma

void setup() {
  eryoma.setupConnector(ePort1, TrafficLight); // Указываем, что на 1 порте подключен модуль TrafficLight
}

void loop() {
  eryoma.write(ePort1, 0, 0, 255);  // Включаем на 1 порте красный светодиод с заданной яркостью(от 0 до 255), остальные выключаем
  delay(10000);                     // Задержка 10000 мс
  eryoma.write(ePort1, 0, 255, 255);// Включаем на 1 порте красный и жёлтый светодиод с заданной яркостью(от 0 до 255), остальные выключаем
  delay(2000);                      // Задержка 2000 мс
  eryoma.write(ePort1, 255, 0, 0);  // Включаем на 1 порте зелёный светодиод с заданной яркостью(от 0 до 255), остальные выключаем
  delay(10000);                     // Задержка 10000 мс
  eryoma.write(ePort1, 0, 0, 0);    // Выключаем на 1 порте все светодиоды
  delay(1000);                      // Задержка 1000 мс
  eryoma.write(ePort1, 255, 0, 0);  // Включаем на 1 порте зелёный светодиод с заданной яркостью(от 0 до 255), остальные выключаем
  delay(1000);                      // Задержка 1000 мс
  eryoma.write(ePort1, 0, 0, 0);    // Выключаем на 1 порте все светодиоды
  delay(1000);                      // Задержка 1000 мс
  eryoma.write(ePort1, 255, 0, 0);  // Включаем на 1 порте зелёный светодиод с заданной яркостью(от 0 до 255), остальные выключаем
  delay(1000);                      // Задержка 1000 мс
  eryoma.write(ePort1, 0, 0, 0);    // Выключаем на 1 порте все светодиоды
  delay(1000);                      // Задержка 1000 мс
  eryoma.write(ePort1, 255, 0, 0);  // Включаем на 1 порте зелёный светодиод с заданной яркостью(от 0 до 255), остальные выключаем
  delay(1000);                      // Задержка 1000 мс
  eryoma.write(ePort1, 0, 255, 0);  // Включаем на 1 порте жёлтый светодиод с заданной яркостью(от 0 до 255), остальные выключаем
  delay(2000);                      // Задержка 2000 мс
}