#include <Wire.h> // Library untuk komunikasi I2C
#include <LiquidCrystal_I2C.h> // Library untuk LCD I2C
#include <NewPing.h> // Library untuk sensor ultrasonic
#define TRIG_PIN 8 // Pin Trigger HC-SR04
#define ECHO_PIN 7 // Pin Echo HC-SR04
#define MAX_DISTANCE 200 // Jarak maksimum yang bisa diukur
#define SENSOR_HEIGHT 100 // Ketinggian sensor dalam cm (100 cm)
#define BUZZER_PIN 4 // Pin untuk buzzer
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE); // Inisialisasi sensor ultrasonic
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi LCD I2C dengan alamat 0x27
void setup() {
Serial.begin(115200); // Inisialisasi komunikasi serial
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan backlight LCD
lcd.setCursor(0, 0); // Set cursor pada posisi awal
lcd.print("Deteksi Banjir");
pinMode(BUZZER_PIN, OUTPUT); // Set buzzer sebagai output
digitalWrite(BUZZER_PIN, LOW); // Matikan buzzer saat awal
delay(2000); // Delay 2 detik sebelum mulai pengukuran
}
void loop() {
int distance = sonar.ping_cm(); // Mengambil jarak dalam cm
if (distance > 0) {
int waterHeight = SENSOR_HEIGHT - distance; // Hitung ketinggian air
lcd.clear();
lcd.setCursor(0, 0);
if (waterHeight >= 15) {
// Kondisi jika ketinggian air melebihi 15 cm
lcd.print("Air Naik: ");
lcd.print(waterHeight);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print("ALERT: BANJIR!");
digitalWrite(BUZZER_PIN, HIGH); // Nyalakan buzzer
} else if (waterHeight >= 5 && waterHeight < 15) {
// Kondisi jika ketinggian air 5-10 cm
lcd.print("Air Terdeteksi:");
lcd.setCursor(0, 1);
lcd.print(waterHeight);
lcd.print(" cm");
lcd.print(" Darurat!");
digitalWrite(BUZZER_PIN, LOW); // Matikan buzzer
} else {
// Kondisi jika air kurang dari 5 cm
lcd.print("Air Rendah:");
lcd.setCursor(0, 1);
lcd.print(waterHeight);
lcd.print(" cm");
digitalWrite(BUZZER_PIN, LOW); // Matikan buzzer
}
} else {
// Jika tidak ada air terdeteksi
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tidak Ada Air");
lcd.setCursor(0, 1);
lcd.print("Terdeteksi");
digitalWrite(BUZZER_PIN, LOW); // Matikan buzzer
}
delay(500); // Delay setengah detik sebelum pengukuran berikutnya
}