#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include "RTClib.h"
#define DHTPIN 2 // Pin data sensor DHT22
#define DHTTYPE DHT22 // Tipe sensor DHT
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD (umumnya 0x27 atau 0x3F)
RTC_DS3231 rtc;
void setup() {
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
if (!rtc.begin()) {
Serial.println("RTC tidak ditemukan!");
while (1);
}
if (rtc.lostPower()) {
Serial.println("RTC kehilangan daya, set waktu sekarang!");
// Atur waktu sesuai saat upload (hanya sekali, lalu bisa dikomen)
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
// Baca suhu & kelembaban
float h = dht.readHumidity();
float t = dht.readTemperature();
// Baca waktu dari RTC
DateTime now = rtc.now();
// Tampilkan ke Serial Monitor
Serial.print("Suhu: "); Serial.print(t); Serial.print(" °C ");
Serial.print("Kelembaban: "); Serial.print(h); Serial.println(" %");
Serial.print(now.year(), DEC); Serial.print('/');
Serial.print(now.month(), DEC); Serial.print('/');
Serial.print(now.day(), DEC); Serial.print(' ');
Serial.print(now.hour(), DEC); Serial.print(':');
Serial.print(now.minute(), DEC); Serial.print(':');
Serial.println(now.second(), DEC);
// Tampilkan ke LCD
lcd.clear();
lcd.setCursor(0,0);
lcd.print("T:"); lcd.print(t); lcd.print("C ");
lcd.print("H:"); lcd.print(h); lcd.print("%");
lcd.setCursor(0,1);
lcd.print(now.year()); lcd.print("/");
if (now.month() < 10) lcd.print("0");
lcd.print(now.month()); lcd.print("/");
if (now.day() < 10) lcd.print("0");
lcd.print(now.day());
lcd.print(" ");
if (now.hour() < 10) lcd.print("0");
lcd.print(now.hour()); lcd.print(":");
if (now.minute() < 10) lcd.print("0");
lcd.print(now.minute()); lcd.print(":");
if (now.second() < 10) lcd.print("0");
lcd.print(now.second());
delay(1000);
}