#include <DHT.h>
#include <RTClib.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 4 // Pin data sensor DHT22 terhubung ke GPIO 4
#define DHTTYPE DHT22 // Tipe sensor DHT 22
DHT dht(DHTPIN, DHTTYPE);
RTC_DS3231 rtc;
// // Alamat I2C LCD
// const int I2C_ADDR = 0x27;
// // Konfigurasi jumlah kolom dan baris LCD
// const int LCD_COLS = 20;
// const int LCD_ROWS = 4;
// Inisialisasi LCD
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
Serial.begin(9600);
// Inisialisasi sensor DHT dan RTC
dht.begin();
rtc.begin();
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// lcd.setCursor(0, 0);
// lcd.print("Raddyaarizaldy");
// lcd.setCursor(0, 1);
// lcd.print("IOT");
// lcd.setCursor(0,2);
// lcd.print("BLK SURABAYA");
// lcd.setCursor(0,3);
// lcd.print("2024");
}
void loop() {
// Membaca suhu dari sensor DHT
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Gagal membaca sensor DHT!");
} else {
// Tampilkan suhu dan kelembaban di Serial Monitor
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.print("°C, Kelembaban: ");
Serial.print(humidity);
Serial.println("%");
// Tampilkan suhu dan kelembaban di LCD
lcd.setCursor(0, 2);
lcd.print(temperature);
lcd.print(char(223)); lcd.print("C");
lcd.setCursor(0, 3);
lcd.print(humidity);
lcd.print("%");
}
// Baca waktu dari RTC dan tampilkan di Serial Monitor
DateTime now = rtc.now();
Serial.print(now.year(), DEC); Serial.print("/");
Serial.print(now.month(), DEC); Serial.print("/");
Serial.print(now.day(), DEC); Serial.println(".");
Serial.print(now.hour(), DEC); Serial.print(':');
Serial.print(now.minute(), DEC); Serial.print(':');
Serial.print(now.second(), DEC); Serial.println(".");
// Tampilkan waktu di LCD
lcd.setCursor(0, 0);
lcd.print(now.year(), DEC);
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.day(), DEC);
lcd.setCursor(0, 1);
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
delay(1000); // Delay 1 detik sebelum membaca sensor lagi
}