#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#define DHTPIN 4
#define DHTTYPE DHT11
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHTPIN, DHTTYPE);
unsigned long previousMillis = 0;
bool showTempHumidity = false; // Memulai dengan menampilkan tanggal dan waktu
// WiFi credentials
const char* ssid = "B66";
const char* password = "M9RHEJN5";
// NTP configuration
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 28800, 60000); // UTC+8 (WITA)
// Array nama hari dalam bahasa Indonesia
const char* days[] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
dht.begin();
// Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to WiFi");
// Start NTP client
timeClient.begin();
}
void loop() {
timeClient.update();
unsigned long currentMillis = millis();
// Cek apakah sudah 5 detik berlalu
if (currentMillis - previousMillis >= 5000) {
previousMillis = currentMillis;
showTempHumidity = !showTempHumidity; // Bergantian antara tanggal dan suhu/kelembapan
}
if (showTempHumidity) {
// Tampilkan Suhu dan Kelembapan
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
lcd.setCursor(0, 0);
if (isnan(temperature) || isnan(humidity)) {
lcd.print("Error membaca DHT");
} else {
lcd.print("Suhu: ");
lcd.print(temperature, 0);
lcd.print((char)223); // Simbol derajat
lcd.print("C ");
lcd.print(humidity, 0);
lcd.print("% ");
}
} else {
// Ambil data waktu dari NTP
time_t rawTime = timeClient.getEpochTime();
struct tm *timeInfo = localtime(&rawTime);
// Format nama hari + tanggal "Senin 4-3-2025"
lcd.setCursor(0, 0);
lcd.print(days[timeInfo->tm_wday]);
lcd.print(" ");
lcd.print(timeInfo->tm_mday);
lcd.print("-");
lcd.print(timeInfo->tm_mon + 1);
lcd.print("-2025 ");
}
// Tampilkan waktu di baris kedua (konstan)
lcd.setCursor(0, 1);
lcd.print("Waktu: ");
lcd.print(timeClient.getHours());
lcd.print(":");
lcd.print(timeClient.getMinutes());
lcd.print(":");
lcd.print(timeClient.getSeconds());
lcd.print(" ");
delay(1000); // Perbarui setiap detik
}