#include <Arduino.h>
// Define GPIO pins for the traffic lights
const int green1Pin = 27;
const int yellow1Pin = 25;
const int red1Pin = 23;
const int green2Pin = 14;
const int yellow2Pin = 12;
const int red2Pin = 22;
const int green3Pin = 32;
const int yellow3Pin = 17;
const int red3Pin = 21;
const int green4Pin = 33;
const int yellow4Pin = 16;
const int red4Pin = 19;
// Define timing constants
const unsigned long greenTime = 5000; // 10 seconds
const unsigned long yellowTime = 2000; // 3 seconds
enum TrafficState {
x_green,
x_yellow,
y_green,
y_yellow,
z_green,
z_yellow,
w_green,
w_yellow
};
TrafficState currentState;
void setup() {
// Initialize traffic light pins
pinMode(green1Pin, OUTPUT);
pinMode(yellow1Pin, OUTPUT);
pinMode(red1Pin, OUTPUT);
pinMode(green2Pin, OUTPUT);
pinMode(yellow2Pin, OUTPUT);
pinMode(red2Pin, OUTPUT);
pinMode(green3Pin, OUTPUT);
pinMode(yellow3Pin, OUTPUT);
pinMode(red3Pin, OUTPUT);
pinMode(green4Pin, OUTPUT);
pinMode(yellow4Pin, OUTPUT);
pinMode(red4Pin, OUTPUT);
// Start with x traffic green
currentState = x_green;
}
void loop() {
switch(currentState) {
case x_green:
digitalWrite(yellow4Pin, LOW);
digitalWrite(green4Pin, LOW);
digitalWrite(red1Pin, LOW);
digitalWrite(green1Pin, HIGH);
digitalWrite(red2Pin, HIGH);
digitalWrite(red3Pin, HIGH);
digitalWrite(red4Pin, HIGH);
delay(greenTime);
currentState = x_yellow;
break;
case x_yellow:
digitalWrite(green1Pin, LOW);
digitalWrite(yellow1Pin, HIGH);
delay(yellowTime);
currentState = y_green;
break;
// y traffic green on
case y_green:
digitalWrite(yellow1Pin, LOW);
digitalWrite(red2Pin, LOW);
digitalWrite(green2Pin, HIGH);
digitalWrite(red3Pin, HIGH);
digitalWrite(red1Pin, HIGH);
digitalWrite(red4Pin, HIGH);
delay(greenTime);
currentState = y_yellow;
break;
case y_yellow:
digitalWrite(green2Pin, LOW);
digitalWrite(yellow2Pin, HIGH);
delay(yellowTime);
currentState = z_green;
break;
// z traffic on green
case z_green:
digitalWrite(yellow2Pin, LOW);
digitalWrite(red3Pin, LOW);
digitalWrite(green3Pin, HIGH);
digitalWrite(red2Pin, HIGH);
digitalWrite(red1Pin, HIGH);
digitalWrite(red4Pin, HIGH);
delay(greenTime);
currentState = z_yellow;
break;
case z_yellow:
digitalWrite(green3Pin, LOW);
digitalWrite(yellow3Pin, HIGH);
delay(yellowTime);
currentState = w_green;
break;
// w traffic on
case w_green:
digitalWrite(yellow3Pin, LOW);
digitalWrite(red4Pin, LOW);
digitalWrite(green4Pin, HIGH);
digitalWrite(red2Pin, HIGH);
digitalWrite(red1Pin, HIGH);
digitalWrite(red3Pin, HIGH);
delay(greenTime);
currentState = w_yellow;
break;
case w_yellow:
digitalWrite(green4Pin, LOW);
digitalWrite(yellow4Pin, HIGH);
delay(yellowTime);
currentState = x_green;
break;
}
}