#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 15, 2); // Alamat I2C LCD, jumlah kolom, jumlah baris
// Deklarasi PIN sensor jarak ultrasonik
const int trigPin = 6;
const int echoPin = 7;
// Deklarasi PIN LED dan buzzer
const int redLED = 12;
const int yellowLED = 8;
const int greenLED = 9;
const int buzzerPin = 5;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(buzzerPin, OUTPUT);
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan backlight LCD
lcd.setCursor(0,0);
lcd.print("Jarak kendaraan:"); // Teks awal di LCD
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW); // Memicu sensor
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); // Mendapatkan waktu perjalanan gelombang ultrasonik
distance = duration * 0.034 / 2; // Menghitung jarak dalam centimeter
lcd.setCursor(0, 1); // Pindah ke baris kedua LCD
lcd.print(distance); // Menampilkan jarak pada LCD
// Mematikan semua LED dan buzzer terlebih dahulu
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
noTone(buzzerPin);
// Memeriksa jarak dan menyalakan LED / buzzer sesuai dengan kondisi
if (distance >= 15) {
digitalWrite(greenLED, HIGH); // Jarak
lcd.print(" cm ");
} else if (distance > 10 && distance < 15) {
digitalWrite(yellowLED, HIGH); // cm
lcd.print(" cm ");
tone(buzzerPin, 500); // Aktifkan buzzer dengan frekuensi 500 Hz
} else if (distance > 5 && distance <= 10) {
digitalWrite(redLED, HIGH); // cm
lcd.print(" cm ");
tone(buzzerPin, 1000); // Aktifkan buzzer dengan frekuensi 1000 Hz
} else {
digitalWrite(redLED, HIGH); // !!!!
lcd.print(" cm ");
// Tidak aktifkan buzzer
}
delay(500); // Delay untuk mengurangi frekuensi pembacaan sensor
}