// Traffic lights
#define GREEN1 32
#define ORANGE1 17
#define RED1 18
#define GREEN2 23
#define ORANGE2 21
#define RED2 19
// Pedestrian lights
#define PED_RED 16
#define PED_GREEN 4
// 7-Segment display pins
int segPins[7] = {25, 26, 27, 14, 12, 33, 22};
const byte digits[10][7] = {
{1,1,1,1,1,1,0}, // 0
{0,1,1,0,0,0,0}, // 1
{1,1,0,1,1,0,1}, // 2
{1,1,1,1,0,0,1}, // 3
{0,1,1,0,0,1,1}, // 4
{1,0,1,1,0,1,1}, // 5
{1,0,1,1,1,1,1}, // 6
{1,1,1,0,0,0,0}, // 7
{1,1,1,1,1,1,1}, // 8
{1,1,1,1,0,1,1} // 9
};
void displayDigit(int num) {
for (int k = 0; k < 7; k++) {
digitalWrite(segPins[k], digits[num][k]);
}
}
// NEW: Countdown function for pedestrian crossing
void Countdown(int seconds) {
for (int i = seconds; i >= 0; i--) {
displayDigit(i); // Show countdown on 7-segment display
delay(1000); // Wait 1 second
}
}
void setup() {
// Initialize traffic lights
pinMode(RED1, OUTPUT);
pinMode(ORANGE1, OUTPUT);
pinMode(GREEN1, OUTPUT);
pinMode(RED2, OUTPUT);
pinMode(ORANGE2, OUTPUT);
pinMode(GREEN2, OUTPUT);
// Initialize pedestrian lights
pinMode(PED_RED, OUTPUT);
pinMode(PED_GREEN, OUTPUT);
// Initialize 7-segment display
for (int k = 0; k < 7; k++) {
pinMode(segPins[k], OUTPUT);
}
// Start with all lights off (safety)
allLightsOff();
}
void allLightsOff() {
digitalWrite(RED1, LOW);
digitalWrite(ORANGE1, LOW);
digitalWrite(GREEN1, LOW);
digitalWrite(RED2, LOW);
digitalWrite(ORANGE2, LOW);
digitalWrite(GREEN2, LOW);
digitalWrite(PED_RED, LOW);
digitalWrite(PED_GREEN, LOW);
}
void loop() {
// Phase 1: Traffic light 1 green, traffic light 2 red, pedestrians red
digitalWrite(RED1, LOW);
digitalWrite(GREEN1, HIGH);
digitalWrite(RED2, HIGH);
digitalWrite(PED_RED, HIGH); // Pedestrian red
digitalWrite(PED_GREEN, LOW);
delay(5000); // 5 seconds green light
// Phase 2: Traffic light 1 yellow, traffic light 2 red, pedestrians red
digitalWrite(GREEN1, LOW);
digitalWrite(ORANGE1, HIGH);
delay(2000); // 2 seconds warning
// Phase 3: All traffic lights red for safety
digitalWrite(ORANGE1, LOW);
digitalWrite(RED1, HIGH);
delay(100); // 1 second all-red
// Phase 4: Traffic light 1 red, traffic light 2 green, pedestrians green with countdown
digitalWrite(RED2, LOW);
digitalWrite(GREEN2, HIGH);
digitalWrite(PED_RED, LOW);
digitalWrite(PED_GREEN, HIGH);
Countdown(9); // 9-second pedestrian crossing
// Blink pedestrian green before turning red
for (int i = 0; i < 3; i++) {
digitalWrite(PED_GREEN, LOW);
delay(50);
digitalWrite(PED_GREEN, HIGH);
delay(50);
}
digitalWrite(PED_GREEN, LOW);
digitalWrite(PED_RED, HIGH);
// Phase 5: Traffic light 1 red, traffic light 2 yellow
digitalWrite(GREEN2, LOW);
digitalWrite(ORANGE2, HIGH);
delay(2000); // 2 seconds warning
// Phase 6: All traffic lights red for safety
digitalWrite(ORANGE2, LOW);
digitalWrite(RED2, HIGH);
delay(100); // 1 second all-red
}