Скетч. Светофор на ардуино. V2

/**
 * (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);
}

Добавить комментарий