#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi LCD (Alamat 0x27, 16 Kolom, 2 Baris)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Definisi Pin Komponen Sesuai Alat KPI Kamu
const int trigPin = 9;
const int echoPin = 8;
const int ledHijau = 2; // Indikator Siaga
const int ledBiru = 3; // Indikator Darurat
const int ledMerah = 4; // Indikator Bahaya
const int buzzer = 5; // Alarm Suara
void setup() {
// Mengaktifkan Serial Monitor untuk memantau data mentah
Serial.begin(9600);
// Konfigurasi Input/Output Perangkat
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledHijau, OUTPUT);
pinMode(ledBiru, OUTPUT);
pinMode(ledMerah, OUTPUT);
pinMode(buzzer, OUTPUT);
// Memulai Layar LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Sistem Monitoring");
lcd.setCursor(0, 1);
lcd.print("Banjir Siap... ");
delay(2000);
lcd.clear();
}
void loop() {
long durasiGelombang;
float jarakMentahSensor;
// Memicu Sensor Ultrasonik untuk memancarkan gelombang
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Menghitung durasi pantulan gelombang
durasiGelombang = pulseIn(echoPin, HIGH);
jarakMentahSensor = durasiGelombang * 0.034 / 2; // Konversi ke satuan CM
// Menampilkan log data mentah ke Serial Monitor tanpa filter keamanan
Serial.print("Data Masuk: ");
Serial.print(jarakMentahSensor);
Serial.println(" cm");
// MENAMPILKAN LANGSUNG DATA MENTAH KE LAYAR LCD (TANPA MEKANISME KEAMANAN)
lcd.setCursor(0, 0);
lcd.print("Jarak: ");
lcd.print(jarakMentahSensor, 1);
lcd.print(" cm ");
// Penentuan Status Berdasarkan Batas Jarak Level Air
lcd.setCursor(0, 1);
if (jarakMentahSensor > 7) {
// Kondisi Aman
lcd.print("Status: AMAN ");
digitalWrite(ledHijau, LOW);
digitalWrite(ledBiru, LOW);
digitalWrite(ledMerah, LOW);
noTone(buzzer);
}
else if (jarakMentahSensor >= 4 && jarakMentahSensor <= 6) {
// Kondisi Siaga
lcd.print("Status: SIAGA ");
digitalWrite(ledHijau, HIGH);
digitalWrite(ledBiru, LOW);
digitalWrite(ledMerah, LOW);
noTone(buzzer);
}
else if (jarakMentahSensor == 3) {
// Kondisi Darurat
lcd.print("Status: DARURAT");
digitalWrite(ledHijau, LOW);
digitalWrite(ledBiru, HIGH);
digitalWrite(ledMerah, LOW);
noTone(buzzer);
}
else if (jarakMentahSensor >= 0 && jarakMentahSensor <= 2) {
// Kondisi Bahaya
lcd.print("Status: BAHAYA ");
digitalWrite(ledHijau, LOW);
digitalWrite(ledBiru, LOW);
digitalWrite(ledMerah, HIGH);
tone(buzzer, 1200); // Alarm aktif langsung
}
delay(1000); // Pembacaan berulang setiap 1 detik
}