#include <LiquidCrystal_I2C.h>
#define ECHO_PIN 2
#define TRIG_PIN 3
#define BUZZER_PIN 4
#define LED_RED 13
#define LED_YELLOW 12
#define LED_GREEN 11
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(LED_RED, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcdPrintWelcomeMessage();
}
void lcdPrintWelcomeMessage() {
digitalWrite(LED_RED, HIGH);
digitalWrite(LED_YELLOW, HIGH);
digitalWrite(LED_GREEN, HIGH);
tone(BUZZER_PIN, 300, 500);
lcd.setCursor(0, 0);
lcd.print("Detektor Banjir");
lcd.setCursor(5, 1);
lcd.print("oleh");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" - ");
lcd.setCursor(0, 1);
lcd.print(" - ");
delay(3000);
turnOffLEDsAndBuzzer();
}
void turnOffLEDsAndBuzzer() {
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_GREEN, LOW);
noTone(BUZZER_PIN);
lcd.clear();
}
float measureDepth() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
return 100 - (pulseIn(ECHO_PIN, HIGH) * 0.034 / 2);
}
void displayDepthStatus(float depth) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kdlmn :");
lcd.setCursor(7, 0);
lcd.print(depth);
lcd.setCursor(14, 0);
lcd.print("cm");
}
void loop() {
float depth = measureDepth();
displayDepthStatus(depth);
if (depth > 10) {
showFloodDanger();
} else if (depth <= 10 && depth >= 0) {
showFloodAlert();
} else {
showSafe();
}
}
void showFloodDanger() {
digitalWrite(LED_RED, HIGH);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_GREEN, LOW);
lcd.setCursor(0, 1);
lcd.print("Satus : Bahaya");
tone(BUZZER_PIN, 800, 1000);
delay(1000);
lcd.clear();
delay(100);
}
void showFloodAlert() {
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YELLOW, HIGH);
digitalWrite(LED_GREEN, LOW);
lcd.setCursor(0, 1);
lcd.print("Satus : Siaga");
delay(1000);
lcd.clear();
delay(100);
}
void showSafe() {
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_GREEN, HIGH);
lcd.setCursor(0, 1);
lcd.print("Satus : Aman");
delay(1000);
lcd.clear();
delay(100);
}