//Jared Jacob G. Pol
//Benedict Calbes
//Activity 5
//Intersection Traffic Light
// Define the durations for each phase
const int redDuration = 3000;
const int yellowDuration = 1000;
const int greenDuration = 3000;
// Define the current phase
enum TrafficPhase { RED, YELLOW, GREEN };
TrafficPhase currentPhase = RED;
void setup() {
// Set pin modes
pinMode(2, OUTPUT); // North road red
pinMode(3, OUTPUT); // North road yellow
pinMode(4, OUTPUT); // North road green
pinMode(5, OUTPUT); // South road red
pinMode(6, OUTPUT); // South road yellow
pinMode(7, OUTPUT); // South road green
pinMode(8, OUTPUT); // West road red
pinMode(9, OUTPUT); // West road yellow
pinMode(10, OUTPUT); // West road green
pinMode(11, OUTPUT); // East road red
pinMode(12, OUTPUT); // East road yellow
pinMode(13, OUTPUT); // East road green
// Initialize lights
northSouthGreen(); // Initially, let North and South have green lights
eastWestRed(); // Initially, let East and West have red lights
}
void loop() {
// Timing logic
if (currentPhase == RED) {
delay(redDuration);
currentPhase = YELLOW;
} else if (currentPhase == YELLOW) {
delay(yellowDuration);
currentPhase = GREEN;
} else if (currentPhase == GREEN) {
delay(greenDuration);
currentPhase = RED;
}
// Control traffic lights based on the current phase
if (currentPhase == RED) {
eastWestRed();
eastWestRede();
northSouthRede();
} else if (currentPhase == YELLOW) {
northSouthYellow();
eastWestYellow();
} else if (currentPhase == GREEN) {
northSouthGreen();
eastWestGreen();
northSouthRed();
eastWestGreene();
}
}
// Functions to control traffic lights for North and South roads
void northSouthRed() {
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
void northSouthYellow() {
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
}
void northSouthGreen() {
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
}
void northSouthRede() {
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
// Functions to control traffic lights for East and West roads
void eastWestRed() {
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
void eastWestYellow() {
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
}
void eastWestGreene() {
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
void eastWestRede() {
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
}
void eastWestGreen() {
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}