#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int trigPin = 12; // Pin Trigger sensor HC-SR04
const int echoPin = 13; // Pin Echo sensor HC-SR04
const int ledPin1 = 2; // Pin LED 1 (merah)
const int ledPin2 = 3; // Pin LED 2 (kuning)
const int ledPin3 = 4; // Pin LED 3 (hijau)
const int buzzerPin = 8; // Pin Buzzer
LiquidCrystal_I2C lcd(0x27, 16, 4); // Alamat I2C LCD 0x27, 16 kolom, 4 baris
void setup() {
Serial.begin(9600);
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan backlight LCD
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(buzzerPin, OUTPUT);
}
void loop() {
long duration, cm;
// Mengirim sinyal ultrasonik
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Menerima sinyal pulsa ultrasonik
duration = pulseIn(echoPin, HIGH);
// Menghitung jarak berdasarkan waktu
cm = duration / 29 / 2; // Mengubah waktu menjadi jarak (dibagi 29 karena 1 cm = 29 mikrodetik)
// Menampilkan hasil pengukuran pada serial monitor
// Serial.print(cm);
// Serial.println(" cm");
// Pengecekan jarak dan pengaturan LED serta tampilan pada LCD
if (cm > 50) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("AMAN");
Serial.println("AMAN");
digitalWrite(ledPin3, HIGH); // Hijau
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin1, LOW);
noTone(buzzerPin);
} else if (cm < 50 && cm > 15) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WASPADA!!!");
digitalWrite(ledPin2, HIGH); // Kuning
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin1, LOW);
tone(buzzerPin, 100);
delay(500);
noTone(buzzerPin);
delay(500);
} else if (cm < 15) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("BAHAYA!!!");
Serial.println("BAHAYA!!!");
digitalWrite(ledPin1, HIGH); // Merah
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
tone(buzzerPin, 1);
}
delay(1000); // Delay antara pengukuran
}