//include library NTP client
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <WiFi.h>
//include library untuk led matrix 7219
#include <SPI.h>
#include <MD_MAX72xx.h>
#include <MD_Parola.h>
//inisialisasi untuk wifi
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
//atur zona waktu untuk menentukan wilayah jam dan waktunya ( utcoffsetInSecond)
//wilayah indonesia barat = UTC+7 = 25200 (60*60*7), wilayah indonesia timur/tengah UTC+8
//UTC+8 = (60*60*8) = 28800; lain UTC+9 = 32400, UTC-3 = -10800
const long utcOffsetInSeconds = 28800;
//definisikan NTPclient yang akan dibaca jam dan tanggalnya
WiFiUDP ntpUDP;
NTPClient timeClient (ntpUDP, "id.pool.ntp.org", utcOffsetInSeconds);
//siapkan variabel array dalam bentuk nama nama bulan
String bulan[12] = {"Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul","Agt", "Sep","Okt", "Nop", "Des"};
//inisialisasi Type led matrix 7219
#define HARDWARE_TYPE MD_MAX72XX :: FC16_HW
//#define HARDWARE_TYPE MD_MAX72XX :: GENERIK_HW
//penentuan pin serial
#define DATA_PIN 23 //pin D23
#define CS_PIN 5 //pin D5
#define CLK_PIN 18 //pin D18
#define MAX_DEVICES 4 //jumlah led matrix 8x8 di 7219 yang digunakan
//buat obyek display led matrix 7219
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
void setup() {
Serial.begin(115200);
//aktifkan display
myDisplay.begin();
//setup untuk led matrix
myDisplay.setIntensity(0); //0-15
myDisplay.displayClear();
//koneksi node mcu ke WiFi
WiFi.begin(ssid,pass);
while (WiFi.status() != WL_CONNECTED)
{
Serial.println(".");
delay(500);
}
//apabila sudah terkoneksi, memulai mengaktifkan pembacaan jam dan tanggal
//melalui ntpClient
timeClient.begin();
}
void loop() {
baca_jam();
}
void baca_tanggal()
{
// update ntp client
timeClient.update();
//baca epochTime = Timestamp
unsigned long epochTime = timeClient.getEpochTime();
//ambil struktur tanggal
struct tm *ptm = gmtime ((time_t *)&epochTime);
//parsing tanggal, bulan, tahun
int tgl = ptm->tm_mday;
int bln = ptm->tm_mon + 1;
//baca array bulan, kemudian tampung dalam variabel
String array_bulan = bulan[bln-1];
int thn = ptm->tm_year+ 1900; //2021 = tm_year = 121 , 2022 = 122
//gabungkan dalam bentuk tanggal
String tanggal_sekarang = String(tgl) + " " + array_bulan + " " + String(thn) ;
//Tampilkan di serial monitor
Serial.println(tanggal_sekarang);
delay(1000);
}
void baca_jam() {
// update ntp client
timeClient.update();
//baca jam dari ntp client
String jam_lengkap = timeClient.getFormattedTime();
//parsing jam, menit, detik
String jam, menit, detik, jam_sekarang;
jam = String (timeClient.getHours());
menit = String (timeClient.getMinutes());
detik = String (timeClient.getSeconds());
jam_sekarang = jam + ":" + menit;
Serial.println("jam sekarang : "+jam_sekarang);
//Tampilkan jam di led matrix
//Tentukan perataan tulisan
myDisplay.setTextAlignment(PA_CENTER); //PA_LEFT/PA_RIGHT/PA_CENTER
myDisplay.print(jam_sekarang);
delay(1000);
}