#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <Wire.h>
#include "RTClib.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <U8g2_for_Adafruit_GFX.h>
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);
U8G2_FOR_ADAFRUIT_GFX u8g2_for_adafruit_gfx;
RTC_DS1307 rtc;
char days[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"};
const long utcOffsetInSeconds = 7 * 3600; // Adjust this based on your timezone.... 7 is for WIB +7
const char* ssid = "Wokwi-GUEST";
const char* password = "";
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);
void setup() {
Serial.begin(115200);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
u8g2_for_adafruit_gfx.begin(display); // connect u8g2 procedures to Adafruit GFX
delay(2000);
WiFi.begin(ssid, password);
delay(3000);
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
while (1) delay(10);
}
timeClient.begin();
timeClient.update();
if (WiFi.status() == WL_CONNECTED) {
//rtc.adjust(DateTime(2023, 6, 18, 13, 59, 0));
rtc.adjust(DateTime(2023, 6, 18, (timeClient.getHours()), (timeClient.getMinutes()), (timeClient.getSeconds())));
}
delay(1000);
display.clearDisplay();
display.clearDisplay();
u8g2_for_adafruit_gfx.setFontMode(1);
u8g2_for_adafruit_gfx.setFontDirection(0);
u8g2_for_adafruit_gfx.setForegroundColor(WHITE);
u8g2_for_adafruit_gfx.setCursor(7,35);
u8g2_for_adafruit_gfx.setFont(u8g2_font_lubI18_tf);
u8g2_for_adafruit_gfx.print("Bismillah");
display.display();
delay(3000);
display.clearDisplay();
}
void loop() {
DateTime now = rtc.now();
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
//Serial.println(now.day(), DEC);
//Serial.println(String("DateTime::TIMESTAMP_DATE:\t")+now.timestamp(DateTime::TIMESTAMP_DATE));
display.clearDisplay();
u8g2_for_adafruit_gfx.setFontMode(1);
u8g2_for_adafruit_gfx.setFontDirection(0);
u8g2_for_adafruit_gfx.setForegroundColor(WHITE);
u8g2_for_adafruit_gfx.setCursor(1,29);
u8g2_for_adafruit_gfx.setFont(u8g2_font_logisoso26_tn);
if (now.hour() < 10) u8g2_for_adafruit_gfx.print('0');
u8g2_for_adafruit_gfx.print(now.hour(), DEC);
u8g2_for_adafruit_gfx.print(':');
if(now.minute() < 10) u8g2_for_adafruit_gfx.print('0');
u8g2_for_adafruit_gfx.print(now.minute(), DEC);
u8g2_for_adafruit_gfx.print(':');
if(now.second() < 10) u8g2_for_adafruit_gfx.print('0');
u8g2_for_adafruit_gfx.println(now.second(), DEC);
u8g2_for_adafruit_gfx.setCursor(1,45);
u8g2_for_adafruit_gfx.setFont(u8g2_font_ncenB10_tf);
u8g2_for_adafruit_gfx.println(days[now.dayOfTheWeek()]);
//u8g2_for_adafruit_gfx.print(" ");
u8g2_for_adafruit_gfx.setCursor(1,60);
u8g2_for_adafruit_gfx.setFont(u8g2_font_ncenB10_tf);
if(now.day() < 10) u8g2_for_adafruit_gfx.print('0');
u8g2_for_adafruit_gfx.print(now.day());
u8g2_for_adafruit_gfx.print(" ");
if(now.month() < 10) u8g2_for_adafruit_gfx.print('0');
u8g2_for_adafruit_gfx.print(now.month());
u8g2_for_adafruit_gfx.print(" ");
u8g2_for_adafruit_gfx.print(now.year());
display.display();
delay(1000);
}