// Segment pins for 7-segment display (Common Cathode)
const int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8}; // a–g
// Traffic light LEDs
const int redLED = 9;
const int yellowLED = 10;
const int greenLED = 11;
// Segment patterns for digits 0–9 [A,B,C,D,E,F,G]
const byte digitSegments[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 setup() {
// 7-segment pins
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
digitalWrite(segmentPins[i], LOW);
}
// LED pins
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
// Start with all LEDs off
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
// Serial for debugging
Serial.begin(9600);
Serial.println("Traffic Light Countdown Initialized");
}
void loop() {
for (int i = 8; i >= 0; i--) {
displayDigit(i); // show digit on 7-segment
updateLEDs(i); // light LEDs based on countdown
Serial.print("Countdown: ");
Serial.println(i);
delay(1000); // wait 1 second
}
delay(3000); // pause before repeating
// 👉 ADDITIONAL 8-second countdown with only pin 11 ON
for (int i = 8; i >= 1; i--) {
displayDigit(i); // Show countdown digit
digitalWrite(redLED, HIGH); // Ensure other LEDs are OFF
digitalWrite(yellowLED,HIGH);
digitalWrite(greenLED, LOW); // Only pin 11 ON
Serial.print("Red");
Serial.println(i);
delay(1000);
}
// Turn off all LEDs after extra countdown
digitalWrite(greenLED, LOW);
}
// Light up 7-segment for a digit
void displayDigit(int digit) {
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], digitSegments[digit][i]);
}
}
// Set LED state based on countdown
void updateLEDs(int i) {
if (i == 0) {
digitalWrite(redLED, HIGH);
digitalWrite(yellowLED, HIGH);
digitalWrite(greenLED, LOW);
Serial.println("Red ON");
} else {
digitalWrite(greenLED, HIGH); // 8–1
if (i <= 3 && i >= 1) {
digitalWrite(yellowLED, LOW); // 3–1
} else {
digitalWrite(yellowLED, HIGH);
}
digitalWrite(redLED, LOW); // Only ON at 0
Serial.print("Green ON");
if (i <= 3 && i >= 1) Serial.print(" | Yellow ON");
Serial.println();
}
}