// Пины светодиодов
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);
}