#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi LCD I2C dengan alamat 0x27 dan ukuran 16x2
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
#define NTP_SERVER "pool.ntp.org" // NTP server untuk mendapatkan waktu
#define UTC_OFFSET 0 // Offset waktu UTC
#define UTC_OFFSET_DST 0 // DST offset (daylight saving)
void spinner() {
static int8_t counter = 0;
const char* glyphs = "\xa1\xa5\xdb";
LCD.setCursor(15, 1); // Menempatkan spinner di pojok kanan bawah
LCD.print(glyphs[counter++]);
if (counter == strlen(glyphs)) {
counter = 0;
}
}
// Fungsi untuk mendapatkan waktu lokal dari NTP server
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
LCD.setCursor(0, 1);
LCD.println("Connection Err");
return;
}
// Menampilkan waktu (jam, menit, detik) pada baris pertama, mulai dari kolom 8
LCD.setCursor(8, 0);
LCD.printf("%02d:%02d:%02d", timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec);
// Menampilkan tanggal (hari, bulan, tahun) pada baris kedua
LCD.setCursor(0, 1);
LCD.printf("%02d/%02d/%04d", timeinfo.tm_mday, timeinfo.tm_mon + 1, timeinfo.tm_year + 1900); // bulan dimulai dari 0
}
void setup() {
Serial.begin(115200);
// Inisialisasi LCD
LCD.init();
LCD.backlight();
// Menampilkan pesan "Selamat pagi..."
LCD.setCursor(0, 0);
LCD.print("Selamat pagi");
LCD.setCursor(0, 1);
LCD.print("Semoga hari mu");
delay(3000); // Tampilkan pesan selama 3 detik
LCD.clear(); // Bersihkan layar untuk pesan berikutnya
LCD.setCursor(0, 0);
LCD.print("Menyenangkan :)");
LCD.setCursor(0, 1);
LCD.print("Dunia Kodingan");
delay(3000); // Tampilkan pesan selama 3 detik lagi
// Koneksi ke WiFi
LCD.clear();
LCD.setCursor(0, 0);
LCD.print("Connecting to");
LCD.setCursor(0, 1);
LCD.print("WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
spinner();
}
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// Saat WiFi terhubung, siapkan waktu dari NTP server
LCD.clear();
LCD.setCursor(0, 0);
LCD.print("Online");
LCD.setCursor(0, 1);
LCD.print("Updating time...");
configTime(UTC_OFFSET, UTC_OFFSET_DST, NTP_SERVER);
}
void loop() {
// Menampilkan waktu dan tanggal pada LCD
LCD.clear(); // Bersihkan layar setiap kali waktu di-update
LCD.setCursor(0, 0);
LCD.print("Selamat pagi :)");
printLocalTime();
delay(1000); // Update waktu setiap detik
}