#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define LED_HIJAU 8
#define LED_KUNING 9
#define LED_MERAH 10
#define TRIG_PIN 7
#define ECHO_PIN 6
#define BUZZER 11
LiquidCrystal_I2C lcd(0x27, 16, 2);
long duration;
int distance;
int waterLevel;
bool isBuzzerOn;
void setup() {
pinMode(LED_HIJAU, OUTPUT);
pinMode(LED_KUNING, OUTPUT);
pinMode(LED_MERAH, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER, OUTPUT);
lcd.begin(16, 2);
lcd.backlight();
lcd.print("Water Level");
delay(2000);
isBuzzerOn = false;
}
void loop() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2;
if (distance < 5) {
waterLevel = 3;
} else if (distance >= 5 && distance <= 10) {
waterLevel = 2;
} else {
waterLevel = 1;
}
lcd.clear();
lcd.print("Water Level: ");
if (waterLevel == 1) {
lcd.print("Low");
digitalWrite(BUZZER, LOW);
digitalWrite(LED_HIJAU, LOW);
digitalWrite(LED_KUNING, LOW);
digitalWrite(LED_MERAH, HIGH);
isBuzzerOn = false;
} else if (waterLevel == 2) {
lcd.print("Medium");
digitalWrite(BUZZER, LOW);
digitalWrite(LED_HIJAU, LOW);
digitalWrite(LED_KUNING, HIGH);
digitalWrite(LED_MERAH, LOW);
isBuzzerOn = false;
} else if (waterLevel == 3) {
lcd.print("High");
digitalWrite(LED_HIJAU, HIGH);
digitalWrite(LED_KUNING, LOW);
digitalWrite(LED_MERAH, LOW);
if (!isBuzzerOn) {
digitalWrite(BUZZER, HIGH);
isBuzzerOn = true;
}
}
lcd.setCursor(0, 1);
lcd.print("Dist: ");
lcd.print(distance);
lcd.print(" cm ");
delay(500);
}