#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
// Inisialisasi pin
const int trigPin = 5;
const int echoPin = 18;
const int ledMerah = 25;
const int ledHijau = 27;
const int servoPin = 26;
const int lcdAddress = 0x27; // Alamat I2C LCD
const int pushButtonPin = 35;
// Inisialisasi objek
LiquidCrystal_I2C lcd(lcdAddress, 16, 2);
Servo myServo;
// Fungsi untuk mengukur jarak menggunakan sensor ultrasonik
long duration, distance;
void bacaSensor() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
}
void setup() {
// Set pin mode
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledMerah, OUTPUT);
pinMode(ledHijau, OUTPUT);
pinMode(pushButtonPin, INPUT_PULLUP);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// Inisialisasi servo
myServo.attach(servoPin);
myServo.write(0); // Posisi awal servo (sesuaikan dengan kebutuhan Anda)
}
void loop() {
bacaSensor();
lcd.setCursor(0, 0);
lcd.print("Tinggi air: ");
lcd.print(distance);
lcd.print(" cm");
int buttonState = digitalRead(pushButtonPin);
// Jika push button ditekan, prioritaskan kontrol manual
if (buttonState == LOW) {
lcd.setCursor(0, 1);
lcd.print("valve: tertutup");
digitalWrite(ledMerah, HIGH);
digitalWrite(ledHijau, LOW);
myServo.write(90); // Tutup valve (sesuaikan dengan konfigurasi Anda)
} else {
if (distance >= 100) {
lcd.setCursor(0, 1);
lcd.print("valve: tertutup");
digitalWrite(ledMerah, HIGH);
digitalWrite(ledHijau, LOW);
myServo.write(90); // Posisi servo menutup (sesuaikan dengan kebutuhan Anda)
} else {
lcd.setCursor(0, 1);
lcd.print("valve: terbuka");
digitalWrite(ledMerah, LOW);
digitalWrite(ledHijau, HIGH);
myServo.write(0); // Posisi servo membuka (sesuaikan dengan kebutuhan Anda)
}
}
delay(1000);
}