int Red = 13;
int Yellow = 12;
int Green = 11;
// Определяем состояния светофора
enum TrafficState {RED, RED_YELLOW, GREEN, YELLOW};
TrafficState currentState = RED;
unsigned long previousMillis = 0;
// Длительности состояний в миллисекундах
const unsigned long RED_DURATION = 1000;
const unsigned long RED_YELLOW_DURATION = 1000;
const unsigned long GREEN_DURATION = 1000;
const unsigned long YELLOW_DURATION = 1000;
void setup() {
pinMode(Red, OUTPUT);
pinMode(Yellow, OUTPUT);
pinMode(Green, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
switch(currentState) {
case RED:
digitalWrite(Red, HIGH);
digitalWrite(Yellow, LOW);
digitalWrite(Green, LOW);
if (currentMillis - previousMillis >= RED_DURATION) {
currentState = RED_YELLOW;
previousMillis = currentMillis;
}
break;
case RED_YELLOW:
digitalWrite(Red, HIGH);
digitalWrite(Yellow, HIGH);
digitalWrite(Green, LOW);
if (currentMillis - previousMillis >= RED_YELLOW_DURATION) {
currentState = GREEN;
previousMillis = currentMillis;
}
break;
case GREEN:
digitalWrite(Red, LOW);
digitalWrite(Yellow, LOW);
digitalWrite(Green, HIGH);
if (currentMillis - previousMillis >= GREEN_DURATION) {
currentState = YELLOW;
previousMillis = currentMillis;
}
break;
case YELLOW:
digitalWrite(Red, LOW);
digitalWrite(Yellow, HIGH);
digitalWrite(Green, LOW);
if (currentMillis - previousMillis >= YELLOW_DURATION) {
currentState = RED;
previousMillis = currentMillis;
}
break;
}
}