#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// --- DEFINISI PIN ---
const int pinSensorTanah = A0;
const int pinSensorLDR = A1;
const int pinRelay = 8;
const int pinLED = 13; // TAMBAHAN: Pin LED Indikator
// --- BATAS AMBANG (THRESHOLD) ---
const int batasKering = 600; // Tanah > 600 = Kering
const int batasGelap = 500; // LDR > 500 = Redup/Malam
// Variabel Data
int nilaiTanah = 0;
int nilaiCahaya = 0;
void setup() {
// Setup Mode Pin
pinMode(pinRelay, OUTPUT);
pinMode(pinLED, OUTPUT); // Set LED sebagai Output
pinMode(pinSensorTanah, INPUT);
pinMode(pinSensorLDR, INPUT);
// Matikan semua di awal
digitalWrite(pinRelay, LOW);
digitalWrite(pinLED, LOW);
// Setup LCD
lcd.init();
lcd.backlight();
// Intro
lcd.setCursor(0,0);
lcd.print("Sistem Siram");
lcd.setCursor(0,1);
lcd.print("Auto + LDR + LED");
delay(2000);
lcd.clear();
}
void loop() {
// 1. Baca Sensor
nilaiTanah = analogRead(pinSensorTanah);
nilaiCahaya = analogRead(pinSensorLDR);
// 2. Tampilkan Info di LCD Baris Atas
lcd.setCursor(0,0);
lcd.print("T:");
lcd.print(nilaiTanah);
lcd.print(" C:");
lcd.print(nilaiCahaya);
lcd.print(" ");
// 3. LOGIKA KONTROL
lcd.setCursor(0,1);
// KONDISI MENYIRAM: Tanah Kering (>600) DAN Redup (>500)
if (nilaiTanah > batasKering && nilaiCahaya > batasGelap) {
digitalWrite(pinRelay, HIGH); // Nyalakan Motor
digitalWrite(pinLED, HIGH); // Nyalakan LED Indikator
lcd.print("MENYIRAM... (ON)");
}
// KONDISI TUNDA: Tanah Kering TAPI Masih Terang/Panas
else if (nilaiTanah > batasKering && nilaiCahaya <= batasGelap) {
digitalWrite(pinRelay, LOW); // Motor Mati
digitalWrite(pinLED, LOW); // LED Mati
lcd.print("PANAS! TUNDA... ");
}
// KONDISI AMAN: Tanah Basah
else {
digitalWrite(pinRelay, LOW); // Motor Mati
digitalWrite(pinLED, LOW); // LED Mati
lcd.print("TANAH BASAH OK ");
}
delay(1000);
}