#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi objek LiquidCrystal_I2C dengan alamat I2C 0x27, 16 kolom, 2 baris
int redPin = 10; // Pin yang mengendalikan lampu merah
int yellowPin = 11; // Pin yang mengendalikan lampu kuning
int greenPin = 12; // Pin yang mengendalikan lampu hijau
int buzzerPin = 9;
int countdown = 0; // Inisialisasi timer countdown
void setup() {
lcd.init(); // Inisialisasi layar LCD
lcd.backlight(); // Aktifkan pencahayaan LCD
lcd.setCursor(0, 0); // Set kursor ke baris 1, kolom 1
pinMode(redPin, OUTPUT); // Set redPin sebagai output
pinMode(yellowPin, OUTPUT); // Set yellowPin sebagai output
pinMode(greenPin, OUTPUT); // Set greenPin sebagai output
pinMode(buzzerPin, OUTPUT);
}
void loop() {
// Mengontrol lampu merah
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Harap sabar...");
digitalWrite(greenPin, LOW);
digitalWrite(yellowPin, LOW);
digitalWrite(redPin, HIGH);
noTone(buzzerPin); // Memastikan buzzer mati
countdown = 10; // Set timer countdown ke 10 detik
for (int i = countdown; i > 0; i--) {
lcd.setCursor(0, 1);
lcd.print("Countdown: " + String(i) + "s "); // Tampilkan timer countdown pada layar LCD
if (i == 1) {
tone(buzzerPin, 500); // Bunyikan buzzer hanya pada detik terakhir
}
delay(1000); // Tunggu selama 1 detik
}
// Mengontrol lampu kuning
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("Hati-hati...");
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(yellowPin, HIGH);
noTone(buzzerPin); // Memastikan buzzer mati
// Menambahkan delay sebelum bunyi buzzer
delay(500);
{ // Bunyikan buzzer dua kali
tone(buzzerPin, 600);
delay(500);
noTone(buzzerPin);
delay(500);
tone(buzzerPin, 600);
delay(400);
}
delay(300);
// Mengontrol lampu hijau
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Jalan!!!");
digitalWrite(redPin, LOW);
digitalWrite(yellowPin, LOW);
digitalWrite(greenPin, HIGH);
noTone(buzzerPin); // Mematikan buzzer
countdown = 8; // Set timer countdown ke 8 detik
for (int i = countdown; i > 0; i--) {
lcd.setCursor(0, 1);
lcd.print("Countdown: " + String(i) + "s "); // Tampilkan timer countdown pada layar LCD
delay(1000); // Tunggu selama 1 detik
}
}