#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BUTTON_RED 2
#define BUTTON_YELLOW 3
#define BUTTON_GREEN 4
// LED pins
#define LED_RED 10
#define LED_YELLOW 11
#define LED_GREEN 12
#define BUZZER 15
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Wire.setSDA(0);
Wire.setSCL(1);
Wire.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("System Ready");
pinMode(BUTTON_RED, INPUT_PULLUP);
pinMode(BUTTON_YELLOW, INPUT_PULLUP);
pinMode(BUTTON_GREEN, INPUT_PULLUP);
pinMode(LED_RED, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(BUZZER, OUTPUT);
}
void loop() {
if (digitalRead(BUTTON_RED) == LOW) {
showMessage("STOP", LED_RED, 1000);
}
else if (digitalRead(BUTTON_YELLOW) == LOW) {
showMessage("READY", LED_YELLOW, 500);
}
else if (digitalRead(BUTTON_GREEN) == LOW) {
showMessage("GO", LED_GREEN, 300);
}
else {
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_GREEN, LOW);
noTone(BUZZER);
}
}
void showMessage(const char* message, int ledPin, int toneFreq) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Traffic Light:");
lcd.setCursor(0, 1);
lcd.print(message);
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_GREEN, LOW);
digitalWrite(ledPin, HIGH);
tone(BUZZER, toneFreq);
}