#include <LiquidCrystal_I2C.h>
#include "DHTesp.h"
#include <Wire.h>
#include <RTClib.h>
// Inisialisasi LCD 20x4
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Inisialisasi DHT
const int DHT_PIN = 15;
const int pinled = 18;
DHTesp dhtSensor;
float suhu = 0;
float kelembaban = 0;
// Inisialisasi RTC
RTC_DS1307 rtc;
void setup() {
Serial.begin(115200);
// Setup DHT sensor
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// Setup pin untuk LED
pinMode(pinled, OUTPUT);
// Setup LCD
lcd.init();
lcd.backlight();
// Display welcome message
lcd.setCursor(3, 0);
lcd.print("Monitoring");
lcd.setCursor(2, 1);
lcd.print("Suhu & Kelembaban");
lcd.setCursor(8, 2);
lcd.print("By");
lcd.setCursor(5, 3);
lcd.print("Kelompok 4");
delay(3000);
lcd.clear();
// Setup RTC
if (!rtc.begin()) {
Serial.println("Couldn't find RTC!");
while (1);
}
if (!rtc.isrunning()) {
Serial.println("RTC tidak berjalan, atur waktu sekarang!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
// Baca suhu dan kelembaban dari sensor DHT
TempAndHumidity data = dhtSensor.getTempAndHumidity();
suhu = data.temperature;
kelembaban = data.humidity;
// Baca waktu dari RTC
DateTime now = rtc.now();
// Tampilkan data suhu dan kelembaban ke Serial Monitor
Serial.print("Temp: ");
Serial.print(suhu);
Serial.println("C");
Serial.print("Hum: ");
Serial.print(kelembaban);
Serial.println("%");
// Kontrol LED berdasarkan suhu
if (suhu < 25 && kelembaban > 60) {
digitalWrite(pinled, HIGH); // LED menyala jika suhu < 25°C dan kelembaban > 60%
Serial.println("LED menyala: Suhu rendah dan kelembaban tinggi");
} else {
digitalWrite(pinled, LOW); // LED mati jika suhu >= 25°C atau kelembaban <= 60%
Serial.println("LED mati: Suhu tinggi atau kelembaban rendah");
}
// Tampilkan data pada LCD tanpa clear agar tidak flicker
lcd.setCursor(0, 0);
lcd.print("Waktu: ");
if (now.hour() < 10) lcd.print("0"); // Menambahkan 0 jika jam kurang dari 10
lcd.print(now.hour());
lcd.print(":");
if (now.minute() < 10) lcd.print("0"); // Menambahkan 0 jika menit kurang dari 10
lcd.print(now.minute());
lcd.print(":");
if (now.second() < 10) lcd.print("0"); // Menambahkan 0 jika detik kurang dari 10
lcd.print(now.second());
lcd.setCursor(3, 1);
lcd.print("Smart Room Tech");
lcd.setCursor(2, 2);
lcd.print("Kelompok 4");
// Tampilkan suhu
lcd.setCursor(0, 2);
lcd.print("Suhu :");
lcd.setCursor(13, 2);
lcd.print(suhu);
lcd.print(" C");
// Tampilkan kelembaban
lcd.setCursor(0, 3);
lcd.print("Kelembaban :");
lcd.setCursor(13, 3);
lcd.print(kelembaban);
lcd.print(" %");
delay(2000); // Interval pembaruan data
}