#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi objek LCD dengan modul I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Inisialisasi pin untuk sensor ultrasonik
const int trigPin = 9;
const int echoPin = 10;
void setup() {
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Water Level: ");
pinMode(13, OUTPUT);
// Inisialisasi pin untuk sensor ultrasonik
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Tunggu sebentar agar sensor ultrasonik stabil
delay(1000);
}
void loop() {
// Kirim sinyal ultrasonik
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Baca durasi pantulan gelombang ultrasonik
long duration = pulseIn(echoPin, HIGH);
// Hitung jarak dalam sentimeter
float distance = duration / 58.2; // Kalkulasi berdasarkan kecepatan suara
String waterStatus;
String waterPercent;
if (distance < 2) {
waterStatus = "Air Penuh";
waterPercent = "100%";
digitalWrite(13, LOW);
} else if (distance >= 2 && distance <= 80) {
int waterLevelPercent = map(distance, 2, 80, 100, 20);
waterStatus = "Terisi ";
waterPercent = String(waterLevelPercent) + "%";
digitalWrite(13, LOW);
} else {
int waterLevelPercent = map(distance, 81, 100, 19, 0);
waterStatus = "Air Kurang ";
waterPercent = String(waterLevelPercent) + "%";
digitalWrite(13, HIGH);
}
// Tampilkan status di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(waterStatus);
lcd.setCursor(0, 1);
lcd.print(waterPercent);
// Tunggu sebentar sebelum mengukur ulang
delay(1000);
}