#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
// Inisialisasi LCD I2C dengan alamat 0x27 dan ukuran 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Inisialisasi objek servo
Servo myServo;
// Pin definisi
const int potPin = A0; // Potensiometer
const int ldrPin = A1; // LDR
const int ldrDigitalPin = 13; // LDR Digital
const int servoPin = 3; // Servo
void setup() {
// Inisialisasi LCD
lcd.begin(16, 2);
lcd.backlight();
// Inisialisasi servo
myServo.attach(servoPin);
// Konfigurasi pin LDR digital sebagai input
pinMode(ldrDigitalPin, INPUT);
// Setup pesan awal di LCD
lcd.setCursor(0, 0);
lcd.print("Rain Detection");
lcd.setCursor(0, 1);
lcd.print("System Ready");
delay(2000);
lcd.clear();
}
void loop() {
// Baca nilai dari potensiometer
int potValue = analogRead(potPin);
// Baca nilai dari LDR
int ldrValue = analogRead(ldrPin);
int ldrDigitalValue = digitalRead(ldrDigitalPin);
// Konversi nilai potensiometer ke rentang tegangan
float voltage = potValue * (5.0 / 1023.0);
// Tampilkan nilai potensiometer dan LDR di LCD
lcd.setCursor(0, 0);
lcd.print("Pot: ");
lcd.print(voltage);
lcd.print("V ");
lcd.setCursor(0, 1);
lcd.print("LDR: ");
lcd.print(ldrValue);
lcd.print(" ");
// Cek apakah "hujan" berdasarkan nilai potensiometer
if (voltage > 2.0) {
// Jika hujan, tutup dengan menggerakkan servo
myServo.write(90); // Menggerakkan servo ke posisi 90 derajat
lcd.setCursor(10, 0);
lcd.print("Rain");
} else {
// Jika tidak hujan, buka dengan menggerakkan servo
myServo.write(0); // Menggerakkan servo ke posisi 0 derajat
lcd.setCursor(10, 0);
lcd.print("Dry ");
}
// Tambahkan delay untuk stabilitas
delay(500);
}