Загрузка данных



#define RED     8
#define YELLOW  9
#define GREEN   10

#define T_RED     5000   // красный  — 5 сек
#define T_GREEN   5000   // зелёный  — 5 сек
#define T_YELLOW  2000   // жёлтый   — 2 сек

enum { S_RED, S_GREEN, S_YELLOW };
byte state = S_RED;

unsigned long timer = 0;   // момент последнего переключения

void setup() {
  pinMode(RED, OUTPUT);
  pinMode(YELLOW, OUTPUT);
  pinMode(GREEN, OUTPUT);

  digitalWrite(RED, HIGH);      // старт — красный
  timer = millis();
}

void loop() {
  unsigned long now = millis();

  switch (state) {

    case S_RED:
      if (now - timer >= T_RED) {
        digitalWrite(RED, LOW);
        digitalWrite(GREEN, HIGH);
        state = S_GREEN;
        timer = now;
      }
      break;

    case S_GREEN:
      if (now - timer >= T_GREEN) {
        digitalWrite(GREEN, LOW);
        digitalWrite(YELLOW, HIGH);
        state = S_YELLOW;
        timer = now;
      }
      break;

    case S_YELLOW:
      if (now - timer >= T_YELLOW) {
        digitalWrite(YELLOW, LOW);
        digitalWrite(RED, HIGH);
        state = S_RED;
        timer = now;
      }
      break;
  }
}