/**
* (C) jarduino.ru 2019
* Изучение ардуино через опыты.
*
* Опыт №4.2 Светофор, продолжение
*
* Использование функций для минимизации повторяющихся фрагментов
*/
// Глобальные константы
const int pinRedLed = 12; // красный подключен к порту 12
const int pinYellowLed = 9; // желтый подклчен к порту 9
const int pinGrenLed = 6; // зеленый подключен к порту 6
const int lightDelay = 5000; // продолжительность свечения зеленого и крассного
const int blinkDelay = 500; // полупериод мигания
const int yelloDelay = 1000; // полупериод мигания
const int blinkTimes = 3; // число миганий
const float delayMultiply = 0.1; // число миганий
// настройка платы
void setup()
{
// инициализировть цифровые порты светофора на вывод:
pinMode(pinRedLed, OUTPUT);
pinMode(pinYellowLed, OUTPUT);
pinMode(pinGrenLed, OUTPUT);
}
// Функция зажигает заданный светодиод на заданное время и гасит его.
void lightUp(const int pinLed, const int nDelay)
{
digitalWrite(pinLed, HIGH); //// turn on green LED
delay(nDelay);
digitalWrite(pinLed, LOW); // turn off green LED
}
// Функция мигает светодиодом с заданным полупериодом заданное число раз
void blink(
const int pinLed, // пин светодиода
const int nDelay, // полупериод мигания
const int nTimes // число миганий
)
{
for (int i = 0; i < nTimes; ++i) // blinks for 3 times
{
delay(nDelay);
lightUp(pinLed, nDelay);
}
}
// Главный цикл программы
void loop()
{
// Зажечь зеленый
lightUp(pinGrenLed, lightDelay * delayMultiply);
// Помигать зеленым
blink(pinGrenLed, blinkDelay * delayMultiply, blinkTimes);
// Ненадолго зажечь желтый
lightUp(pinYellowLed, yelloDelay * delayMultiply);
// Зажечь красный
lightUp(pinRedLed, lightDelay * delayMultiply);
}