#include <LiquidCrystal_I2C.h>
const int pinTrigger = 3;
const int pinEcho = 2;
const int buzzer = 4;
const int lampuMerah = 7;
const int lampuKuning = 6;
const int lampuHijau = 5;
int kolom = 16;
int baris = 2;
LiquidCrystal_I2C lcd(0x27, kolom, baris);
void setup() {
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// Inisialisasi sensor jarak dan lampu
Serial.begin(115200);
pinMode(pinTrigger, OUTPUT);
pinMode(pinEcho, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(lampuMerah, OUTPUT);
pinMode(lampuKuning, OUTPUT);
pinMode(lampuHijau, OUTPUT);
}
void loop() {
// Mengirimkan sinyal ultrasonik
digitalWrite(pinTrigger, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrigger, LOW);
// Mengukur jarak berdasarkan waktu sinyal pantulan
int jarak = pulseIn(pinEcho, HIGH);
int realJarak = jarak / 58; // Konversi ke cm
Serial.println(realJarak);
// Kondisi berdasarkan jarak yang terdeteksi
if (realJarak >= 300) {
// Lampu hijau menyala, buzzer berbunyi normal, dan menampilkan pesan di LCD
delay(1000);
digitalWrite(buzzer, HIGH);
tone(buzzer, 2000);
digitalWrite(lampuHijau, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Selamat Datang");
lcd.setCursor(0, 1);
lcd.print("Jarak >= 300 cm");
delay(400);
noTone(buzzer);
digitalWrite(buzzer, LOW);
digitalWrite(lampuHijau, LOW);
} else if (realJarak >= 200) {
// Lampu kuning menyala, buzzer berbunyi lebih cepat, dan menampilkan pesan di LCD
delay(600);
digitalWrite(buzzer, HIGH);
tone(buzzer, 2000);
digitalWrite(lampuKuning, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Perhatian");
lcd.setCursor(0, 1);
lcd.print("Jarak 200-300 cm");
delay(200);
noTone(buzzer);
digitalWrite(buzzer, LOW);
digitalWrite(lampuKuning, LOW);
} else if (realJarak >= 100) {
// Lampu merah menyala, buzzer berbunyi cepat, dan menampilkan pesan di LCD
delay(200);
digitalWrite(buzzer, HIGH);
tone(buzzer, 2000);
digitalWrite(lampuMerah, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hati-hati");
lcd.setCursor(0, 1);
lcd.print("Jarak < 200 cm");
delay(50);
noTone(buzzer);
digitalWrite(buzzer, LOW);
digitalWrite(lampuMerah, LOW);
} else {
// Skenario tambahan: Peringatan jika jarak sangat dekat, kurang dari 100 cm
delay(100);
digitalWrite(buzzer, HIGH);
tone(buzzer, 2500); // Frekuensi buzzer lebih tinggi untuk peringatan
digitalWrite(lampuMerah, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hati-Hati");
lcd.setCursor(0, 1);
lcd.print("Menabrak!");
delay(50);
noTone(buzzer);
digitalWrite(buzzer, LOW);
digitalWrite(lampuMerah, LOW);
}
delay(100); // Jeda singkat
}