// Define states
enum TrafficLightState {
RED,
YELLOW,
GREEN
};
// Initialize the current state
TrafficLightState currentState = RED;
// Define timing constants
const unsigned long redDuration = 2000; // 2 seconds
const unsigned long yellowDuration = 1000; // 1 second
const unsigned long greenDuration = 2000; // 2 seconds
unsigned long previousMillis = 0;
void setup() {
pinMode(1, OUTPUT); // Red LED on pin 1
pinMode(2, OUTPUT); // Yellow LED on pin 2
pinMode(3, OUTPUT); // Green LED on pin 3
}
void loop() {
unsigned long currentMillis = millis();
switch (currentState) {
case RED:
digitalWrite(1, HIGH);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
if (currentMillis - previousMillis >= redDuration) {
currentState = YELLOW;
previousMillis = currentMillis;
}
break;
case YELLOW:
digitalWrite(1, LOW);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
if (currentMillis - previousMillis >= yellowDuration) {
currentState = GREEN;
previousMillis = currentMillis;
}
break;
case GREEN:
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
if (currentMillis - previousMillis >= greenDuration) {
currentState = RED;
previousMillis = currentMillis;
}
break;
}
}