#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
int redLED = 13;
int yellowLED = 12;
int greenLED = 11;
void setup() {
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
// Start LCD
lcd.begin(16, 2);
lcd.print("Traffic Light");
lcd.setCursor(0, 1);
lcd.print("System Ready");
delay(2000);
lcd.clear();
}
void countdown(int totalSeconds, const char* message, bool showTime = true) {
for (int i = totalSeconds; i >= 0; i--) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(message);
if (showTime) {
lcd.setCursor(0, 1);
lcd.print("Time: ");
int minutes = i / 60;
int seconds = i % 60;
if (minutes > 0) {
lcd.print(minutes);
lcd.print(":");
if (seconds < 10) lcd.print("0");
lcd.print(seconds);
} else {
if (seconds < 10) lcd.print("0");
lcd.print(seconds);
lcd.print(" s");
}
}
delay(1000);
}
}
void loop() {
// RED LIGHT - 10 seconds (without time display)
digitalWrite(redLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
countdown(5, "RED-STOP", true);
// GREEN LIGHT - 10 seconds (without time display)
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, HIGH);
countdown(15, "GREEN-GO", false);
// YELLOW LIGHT - 10 seconds (with time display)
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(greenLED, LOW);
countdown(15, "YELLOW-WAIT", true);
digitalWrite(yellowLED, LOW);
}