const int redLed = 8;
const int yellowLed = 9;
const int greenLed = 10;
const int buttonPin = 2;
bool trafficLightRunning = false;
unsigned long previousMillis = 0;
const long redInterval = 30000;
const long yellowInterval = 1000;
const long greenInterval = 30000;
void setup() {
pinMode(redLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(buttonPin), startTrafficLight, FALLING);
}
void loop() {
if (trafficLightRunning) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis < redInterval) {
digitalWrite(redLed, HIGH);
digitalWrite(yellowLed, LOW);
digitalWrite(greenLed, LOW);
} else if (currentMillis - previousMillis < redInterval + yellowInterval) {
digitalWrite(redLed, LOW);
digitalWrite(yellowLed, HIGH);
digitalWrite(greenLed, LOW);
} else if (currentMillis - previousMillis < redInterval + yellowInterval + greenInterval) {
digitalWrite(redLed, LOW);
digitalWrite(yellowLed, LOW);
digitalWrite(greenLed, HIGH);
} else {
previousMillis = currentMillis;
}
} else {
digitalWrite(redLed, LOW);
digitalWrite(yellowLed, LOW);
digitalWrite(greenLed, LOW);
}
}
void startTrafficLight() {
trafficLightRunning = !trafficLightRunning;
previousMillis = millis();
}