#define RED1 2
#define YELLOW1 3
#define GREEN1 4
#define RED2 5
#define YELLOW2 6
#define GREEN2 7
#define BUTTON 8
bool blinkMode = false;
unsigned long lastBlinkTime = 0;
bool blinkState = false;
void setup() {
pinMode(RED1, OUTPUT);
pinMode(YELLOW1, OUTPUT);
pinMode(GREEN1, OUTPUT);
pinMode(RED2, OUTPUT);
pinMode(YELLOW2, OUTPUT);
pinMode(GREEN2, OUTPUT);
pinMode(BUTTON, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
// Check if the button is pressed
if (digitalRead(BUTTON) == LOW) {
delay(200); // Debounce delay
blinkMode = !blinkMode; // Toggle blink mode
}
if (blinkMode) {
handleBlinkMode();
} else {
handleTrafficMode();
}
}
void handleTrafficMode() {
// Sequence for Intersection 1
digitalWrite(RED1, HIGH);
digitalWrite(GREEN1, LOW);
digitalWrite(YELLOW1, LOW);
digitalWrite(RED2, LOW);
digitalWrite(GREEN2, HIGH);
digitalWrite(YELLOW2, LOW);
delay(5000); // 5 seconds for green light
digitalWrite(RED2, LOW);
digitalWrite(GREEN2, LOW);
digitalWrite(YELLOW2, HIGH);
delay(2000); // 2 seconds for yellow light
digitalWrite(RED2, HIGH);
digitalWrite(GREEN2, LOW);
digitalWrite(YELLOW2, LOW);
digitalWrite(RED1, LOW);
digitalWrite(GREEN1, HIGH);
digitalWrite(YELLOW1, LOW);
delay(5000); // 5 seconds for green light
digitalWrite(RED1, LOW);
digitalWrite(GREEN1, LOW);
digitalWrite(YELLOW1, HIGH);
delay(2000); // 2 seconds for yellow light
}
void handleBlinkMode() {
unsigned long currentTime = millis();
if (currentTime - lastBlinkTime >= 500) { // Blink interval: 500ms
lastBlinkTime = currentTime;
blinkState = !blinkState;
digitalWrite(YELLOW1, blinkState);
digitalWrite(YELLOW2, blinkState);
// Turn off other lights
digitalWrite(RED1, LOW);
digitalWrite(GREEN1, LOW);
digitalWrite(RED2, LOW);
digitalWrite(GREEN2, LOW);
}
}