#include <LiquidCrystal_I2C.h>
#include <Servo.h>
Servo myServo;
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define TRIG_PIN 13 // Pin untuk trig ultrasonic
#define ECHO_PIN 12 // Pin untuk echo ultrasonic
int buzzer = 4;
int servoPin = 11;
int ledHijau = 2;
int ledMerah = 3;
void setup() {
lcd.begin(16, 2);
lcd.backlight();
pinMode(buzzer, OUTPUT); // set pin buzzer sebagai output
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(ledMerah, OUTPUT);
pinMode(ledHijau, OUTPUT);
myServo.attach(servoPin);
lcd.print("Water Sensor Ready");
delay(2000);
lcd.clear();
}
void loop() {
long duration;
int distance;
int maxDistance = 400; // Maksimum jarak yang dianggap penuh (cm)
// Trigger sensor ultrasonik
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Baca echo dan hitung jarak
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2;
// Konversi ke persentase ketinggian air
int airLevel = map(distance, 0, maxDistance, 0, 400);
// Tampilkan ketinggian di LCD
lcd.setCursor(0, 0);
lcd.print("Ketinggian: ");
lcd.print(airLevel);
lcd.print("cm ");
// Kontrol LED, buzzer, dan servo berdasarkan ketinggian air
if (airLevel > 250) { // Ketinggian di atas 75%
digitalWrite(ledMerah, HIGH);
digitalWrite(ledHijau, LOW);
tone(buzzer, 1000); // Menghidupkan buzzer pada frekuensi 1000 Hz
myServo.write(90);
} else {
digitalWrite(ledMerah, LOW);
digitalWrite(ledHijau, HIGH);
noTone(buzzer); // Mematikan buzzer
myServo.write(0);
}
delay(500);
}