#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define redLed 13 // Lampu Merah
#define yellowLed 12 // Lampu Kuning
#define greenLed 11 // Lampu Hijau
#define buttonPin 7 // Pin untuk push button
#define buzzer 4 // Pin untuk buzzer
// Inisialisasi LCD dengan alamat I2C 0x27 dan ukuran 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(redLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
digitalWrite(greenLed, HIGH);
digitalWrite(yellowLed, LOW);
digitalWrite(redLed, LOW);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.clear();
}
void displayMessage(const char* message) {
lcd.clear();
lcd.setCursor(0, 0); // Tampilkan pesan di baris pertama
lcd.print(message);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
digitalWrite(greenLed, LOW);
digitalWrite(yellowLed, HIGH);
displayMessage("Get Ready"); // Lampu kuning: Bersiap-siap
delay(2000); // Lampu kuning selama 2 detik
noTone(buzzer);
digitalWrite(yellowLed, LOW);
digitalWrite(redLed, HIGH);
displayMessage("Stop"); // Lampu merah: Berhenti
// Lampu merah (10 detik)
for (int i = 0; i < 5; i++) {
tone(buzzer, 1500);
delay(1000);
tone(buzzer, 1000);
delay(1000);
}
noTone(buzzer); // Matikan buzzer setelah 10 detik
// Setelah 10 detik, nyalakan lampu kuning selama 2 detik
digitalWrite(redLed, LOW);
digitalWrite(yellowLed, HIGH);
displayMessage("Get Ready"); // Lampu kuning: Bersiap-siap
delay(2000);
// Setelah lampu kuning, nyalakan lampu hijau
digitalWrite(yellowLed, LOW);
digitalWrite(greenLed, HIGH);
displayMessage("Go!"); // Lampu hijau: Silakan jalan
}
}