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


// Пины светодиодов
const uint8_t RED_PIN    = 8;
const uint8_t YELLOW_PIN = 9;
const uint8_t GREEN_PIN  = 10;

// Длительности фаз в миллисекундах
const unsigned long RED_TIME    = 5000;  // красный   5 сек
const unsigned long YELLOW_TIME = 2000;  // жёлтый    2 сек
const unsigned long GREEN_TIME  = 5000;  // зелёный   5 сек

// Текущее состояние светофора
enum State { RED, GREEN, YELLOW };
State state = RED;

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

void setup() {
  pinMode(RED_PIN, OUTPUT);
  pinMode(YELLOW_PIN, OUTPUT);
  pinMode(GREEN_PIN, OUTPUT);

  setLights(HIGH, LOW, LOW);  // старт с красного
  lastChange = millis();
}

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

  switch (state) {
    case RED:
      if (now - lastChange >= RED_TIME) {
        state = GREEN;
        setLights(LOW, LOW, HIGH);
        lastChange = now;
      }
      break;

    case GREEN:
      if (now - lastChange >= GREEN_TIME) {
        state = YELLOW;
        setLights(LOW, HIGH, LOW);
        lastChange = now;
      }
      break;

    case YELLOW:
      if (now - lastChange >= YELLOW_TIME) {
        state = RED;
        setLights(HIGH, LOW, LOW);
        lastChange = now;
      }
      break;
  }
}

// Функция включения нужных светодиодов
void setLights(uint8_t red, uint8_t yellow, uint8_t green) {
  digitalWrite(RED_PIN, red);
  digitalWrite(YELLOW_PIN, yellow);
  digitalWrite(GREEN_PIN, green);
}