#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Alamat I2C LCD, sesuaikan dengan alamat yang sesuai dengan modul LCD Anda
int lcdAddress = 0x27;
// Jumlah kolom dan baris pada LCD
int lcdColumns = 16;
int lcdRows = 2;
// Inisialisasi objek LCD
LiquidCrystal_I2C lcd(lcdAddress, lcdColumns, lcdRows);
const int trigPin = 13; // Pin Trig
const int echoPin = 12; // Pin Echo
const int redLedPin = 27; // LED merah terhubung ke GPIO 27
const int yellowLedPin = 26; // LED kuning terhubung ke GPIO 26
const int greenLedPin = 25; // LED hijau terhubung ke GPIO 25
const int buzzerPin = 14; // Buzzer dua kabel terhubung ke GPIO 14
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(redLedPin, OUTPUT);
pinMode(yellowLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
// Inisialisasi komunikasi I2C
Wire.begin();
// Inisialisasi LCD
lcd.begin(lcdColumns, lcdRows);
lcd.backlight(); // Aktifkan backlight (jika modul mendukung)
lcd.print("Flood Monitoring:");
delay(2000);
lcd.clear();
lcd.print("Measuring...");
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
float distance_cm = duration * 0.034 / 2;
lcd.clear();
lcd.print("Distance: ");
lcd.print(distance_cm);
lcd.print(" cm");
// Menyalakan LED dan buzzer berdasarkan tinggi air
if (distance_cm >= 1 && distance_cm <= 7) {
digitalWrite(redLedPin, HIGH);
digitalWrite(yellowLedPin, LOW);
digitalWrite(greenLedPin, LOW);
tone(buzzerPin, 1500); // Nyalakan buzzer
lcd.setCursor(0, 1);
lcd.print("Level: BAHAYA");
delay(2000); // Buzzer menyala selama 2 detik
noTone(buzzerPin); // Matikan buzzer
delay(1000); // Tunggu sejenak sebelum mengulang
} else if (distance_cm > 7 && distance_cm <= 11) {
digitalWrite(redLedPin, LOW);
digitalWrite(yellowLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
noTone(buzzerPin); // Matikan buzzer
lcd.setCursor(0, 1);
lcd.print("Level: WASPADA");
} else if (distance_cm > 11 && distance_cm <= 19) {
digitalWrite(redLedPin, LOW);
digitalWrite(yellowLedPin, LOW);
digitalWrite(greenLedPin, HIGH);
noTone(buzzerPin); // Matikan buzzer
lcd.setCursor(0, 1);
lcd.print("Level: AMAN");
} else {
// Jika ketinggian air di luar rentang yang ditentukan
digitalWrite(redLedPin, LOW);
digitalWrite(yellowLedPin, LOW);
digitalWrite(greenLedPin, LOW);
noTone(buzzerPin); // Matikan buzzer
lcd.setCursor(0, 1);
lcd.print("level: AMAN");
}
delay(1000);
}