#include <Wire.h> // Library untuk komunikasi I2C
#include <LiquidCrystal_I2C.h> // Library untuk LCD I2C
#define ledmerah 19 // Pin LED merah
#define ledkuning 18 // Pin LED kuning
#define ledhijau 5 // Pin LED hijau
#define buttonPin 0 // Pin tombol
#define buzzerPin 4 // Pin buzzer
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi LCD dengan alamat I2C 0x27, dan ukuran 16x2
bool isCrossing = false; // Variabel untuk menyimpan status penyeberangan
void setup() {
// Mengatur pin-pin sebagai input atau output
pinMode(ledmerah, OUTPUT); // Mengatur pin LED merah sebagai output
pinMode(ledkuning, OUTPUT); // Mengatur pin LED kuning sebagai output
pinMode(ledhijau, OUTPUT); // Mengatur pin LED hijau sebagai output
pinMode(buttonPin, INPUT_PULLUP); // Mengatur pin tombol sebagai input dengan pull-up resistor
pinMode(buzzerPin, OUTPUT); // Mengatur pin buzzer sebagai output
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Mengaktifkan backlight LCD
Serial.begin(9600); // Memulai komunikasi serial dengan baud rate 9600
}
void loop() {
// Mengecek apakah tombol ditekan atau tidak
if (digitalRead(buttonPin) == HIGH) { // Jika tombol ditekan
crossing(); // Memanggil fungsi penyeberangan
} else { // Jika tombol tidak ditekan
noCrossing(); // Memanggil fungsi tanpa penyeberangan
}
}
void crossing() {
tone(buzzerPin, 0); // Mematikan bunyi buzzer
digitalWrite(ledmerah, HIGH); // Menyalakan LED merah
digitalWrite(ledkuning, HIGH); // Menyalakan LED kuning
digitalWrite(ledhijau, LOW); // Mematikan LED hijau
digitalWrite(buzzerPin, LOW); // Mematikan bunyi buzzer
lcd.setCursor(0, 0); // Pindahkan kursor ke kolom 0, baris 0
lcd.print("Dilarang Menyebe"); // Menampilkan pesan di LCD
lcd.setCursor(0, 1); // Pindahkan kursor ke kolom 0, baris 0
lcd.print("rang Jalan"); // Menampilkan pesan di LCD
Serial.println("Dilarang Menyeberang Jalan"); // Mencetak pesan di serial monitor
delay(500); // Menunggu selama 1 detik
digitalWrite(ledkuning, LOW); // Mematikan LED kuning
delay(500); // Menunggu selama 0.5 detik
}
void noCrossing() {
digitalWrite(ledmerah, LOW); // Mematikan LED merah
digitalWrite(ledkuning, LOW); // Mematikan LED kuning
digitalWrite(ledhijau, HIGH); // Menyalakan LED hijau
digitalWrite(buzzerPin, HIGH); // Menyalakan bunyi buzzer
tone(buzzerPin, 500); // Menghasilkan bunyi dengan frekuensi 500 Hz
lcd.clear(); // Membersihkan tampilan LCD
lcd.setCursor(0, 0); // Pindahkan kursor ke kolom 0, baris 0
lcd.print("Silahkan Menyebe"); // Menampilkan pesan di LCD
lcd.setCursor(0, 1); // Pindahkan kursor ke kolom 0, baris 0
lcd.print("rang Jalan"); // Menampilkan pesan di LCD
Serial.println("Silahkan Menyeberang Jalan"); // Mencetak pesan di serial monitor
delay(4000); // Menunggu selama 4 detik
digitalWrite(buzzerPin, LOW); // Mematikan bunyi buzzer
digitalWrite(ledhijau, LOW); // Mematikan LED hijau
}