#include <LiquidCrystal_I2C.h>
// Definisikan alamat I2C LCD
const int lcdAddr = 0x27;
// Inisialisasi objek LiquidCrystal_I2C
LiquidCrystal_I2C lcd(lcdAddr, 20, 4);
// Definisikan pin untuk lampu merah, kuning, hijau
const int pinMerah = 2;
const int pinKuning = 3;
const int pinHijau = 4;
// Definisikan durasi menyala untuk lampu merah, kuning, hijau
const unsigned long durasiMerah = 120000; // 120 detik
const unsigned long durasiKuning = 60000; // 60 detik
const unsigned long durasiHijau = 160000; // 160 detik
void setup() {
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// Inisialisasi pin untuk lampu merah, kuning, hijau sebagai output
pinMode(pinMerah, OUTPUT);
pinMode(pinKuning, OUTPUT);
pinMode(pinHijau, OUTPUT);
}
void loop() {
// Menyala lampu merah dan tampilkan teks "Berhenti"
digitalWrite(pinMerah, HIGH);
displayText("Berhenti ");
delay(durasiMerah);
digitalWrite(pinMerah, LOW);
// Menyala lampu kuning dan tampilkan teks "Hati-hati"
digitalWrite(pinKuning, HIGH);
displayText("Hati-hati ");
delay(durasiKuning);
digitalWrite(pinKuning, LOW);
// Menyala lampu hijau dan tampilkan teks "Berjalan"
digitalWrite(pinHijau, HIGH);
displayText("Berjalan ");
delay(durasiHijau);
digitalWrite(pinHijau, LOW);
// Tampilkan running text "Berhenti, Hati-hati, dan Berjalan"
displayRunningText("Berhenti, Hati-hati, dan Berjalan");
}
// Fungsi untuk menampilkan teks di LCD
void displayText(String text) {
lcd.setCursor(0, 0);
lcd.print(text);
}
// Fungsi untuk menampilkan running text
void displayRunningText(String text) {
String displayText = text + " "; // Tambahkan spasi untuk scrolling
for (int i = 0; i < displayText.length() - 20; i++) {
lcd.setCursor(0, 3);
lcd.print(displayText.substring(i, i + 20)); // Tampilkan 20 karakter
delay(500); // Delay untuk kecepatan scroll yang lebih lambat
}
delay(1000); // Delay sebelum memulai siklus lagi
}