#include <Arduino.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <WiFi.h>
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
RTC_DS3231 rtc;
const char* ssid = "Wokwi-GUEST"; // Nama jaringan WiFi
const char* password = ""; // Kata sandi jaringan WiFi
#define BUTTON_PIN 13 // Pin yang terhubung dengan push button
LiquidCrystal_I2C lcd(0x27, 16, 2);
bool backlightState = false;
void setup() {
Serial.begin(115200);
Wire.begin();
rtc.begin();
pinMode(BUTTON_PIN, INPUT_PULLUP); // Mengatur pin push button sebagai input dengan pull-up resistor
// Inisialisasi LCD
lcd.init();
lcd.backlight(); // Nyalakan backlight LCD
// Inisialisasi WiFi
WiFi.begin(ssid, password);
Serial.print("Connecting to ");
Serial.println(ssid);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Establishing connection to WiFi..");
}
Serial.println("Connected to WiFi");
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// Buat dan jalankan task RTOS
xTaskCreatePinnedToCore(wifiRtcTask,"WifiRtcTask",10000,NULL,1,NULL,0);
xTaskCreatePinnedToCore(back,"back",10000,NULL,1,NULL,0);
}
void loop() {
delay(1000);
}
void wifiRtcTask(void *parameter) {
(void) parameter;
for (;;) {
DateTime now = rtc.now();
lcd.setCursor(0,0);
lcd.print(now.timestamp(DateTime::TIMESTAMP_FULL));
//vTaskDelay(pdMS_TO_TICKS(500)); // Tunggu 10 detik sebelum membaca ulang waktu
}
}
void back(void *parameter) {
(void) parameter;
for (;;) {
int buttonState = digitalRead(BUTTON_PIN);
if (buttonState == LOW) {
backlightState = !backlightState;
if (backlightState) {
lcd.backlight(); // Nyalakan backlight LCD
} else {
lcd.noBacklight(); // Matikan backlight LCD
}
vTaskDelay(pdMS_TO_TICKS(250));
}
}
}