#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
// 1. Konfigurasi Pin
#define ONE_WIRE_BUS 3 // Pin Data Sensor DS18B20 di D3
const int pinPompa = 7; // Pin IN/Sinyal Relay di D7
// 2. Setup Objek Sensor dan LCD
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// --- TRICK ANTI-ERROR UPLOAD ---
// Pastikan pin relay langsung MATI (HIGH) saat pertama kali menyala
pinMode(pinPompa, OUTPUT);
digitalWrite(pinPompa, HIGH);
// Inisialisasi Sensor dan LCD
sensors.begin();
lcd.init();
lcd.backlight();
// Menampilkan pesan loading selama 5 detik
// Memberikan waktu aman untuk upload jika ke depan kodenya ingin diubah lagi
for (int i = 5; i > 0; i--) {
lcd.setCursor(0, 0);
lcd.print("Memulai Sistem..");
lcd.setCursor(0, 1);
lcd.print("Tunggu: ");
lcd.print(i);
lcd.print(" detik ");
delay(1000);
}
lcd.clear();
}
void loop() {
// Perintahkan sensor untuk membaca suhu
sensors.requestTemperatures();
float suhu = sensors.getTempCByIndex(0);
// --- TAMPILKAN DI LCD BARIS 1 ---
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(suhu, 1);
lcd.print((char)223); // Simbol derajat (°)
lcd.print("C ");
// --- LOGIKA KONTROL POMPA & LCD BARIS 2 (TARGET 40 STABIL) ---
lcd.setCursor(0, 1);
if (suhu >= 40.0) {
// JIKA SUHU JADI 40°C ATAU LEBIH -> POMPA NYALA
digitalWrite(pinPompa, LOW); // Menyala (Active Low)
lcd.print("Pompa: NYALA ");
}
else {
// JIKA SUHU DI BAWAH 38°C -> POMPA MATI
digitalWrite(pinPompa, HIGH); // Mati (Active Low)
lcd.print("Pompa: MATI ");
}
delay(1000); // Update data setiap 1 detik
}