#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Konfigurasi Pin
const int redLedPin = 32;
const int yellowLedPin = 33;
const int greenLedPin = 25;
const int soilMoisturePin = 34; // Pin analog untuk sensor kelembaban tanah
const int phSensorPin = A0; // Gunakan pin A0 untuk potensiometer sebagai sensor pH
void setup() {
Wire.begin(23, 22);
Serial.begin(9600);
lcd.init();
lcd.backlight();
// Inisialisasi pin LED
pinMode(redLedPin, OUTPUT);
pinMode(yellowLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
// Inisialisasi pin sensor pH
pinMode(phSensorPin, INPUT);
pinMode(soilMoisturePin, INPUT); // Inisialisasi pin sensor kelembaban
}
void loop() {
// Baca nilai dari sensor kelembaban tanah
int16_t sensorValue = analogRead(soilMoisturePin);
float humidityPercent = map(sensorValue, 0, 4095, 0, 100); // Rentang 0-4095
// Baca nilai dari potensiometer (sensor pH simulasi)
int phValue = analogRead(phSensorPin);
float pH = map(phValue, 0, 1023, 1, 14); // Peta nilai potensiometer ke skala pH 1-14
String msg;
// Logika penentuan kelembaban tanah
if (humidityPercent < 40) {
msg = "BASAH";
digitalWrite(redLedPin, HIGH);
digitalWrite(yellowLedPin, LOW);
digitalWrite(greenLedPin, LOW);
} else if (humidityPercent > 60) {
msg = "KERING";
digitalWrite(redLedPin, LOW);
digitalWrite(yellowLedPin, LOW);
digitalWrite(greenLedPin, HIGH);
} else {
msg = "BAIK";
digitalWrite(redLedPin, LOW);
digitalWrite(yellowLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
}
// Tampilkan pada LCD
lcd.clear();
lcd.print("Kelembapan Tanah ");
lcd.print(msg);
lcd.setCursor(0, 1); // Pindah ke baris kedua
lcd.print("pH: ");
lcd.print(pH);
lcd.print(" Humidity: ");
lcd.print(humidityPercent);
lcd.print("%");
delay(1000);
}