#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
#include <Arduino_FreeRTOS.h>
void TaskRTC(void *pvParameters);
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C tampilan LCD 16x2
const int buttonPin1 = 2; // Tombol 1 untuk mengatur jam
const int buttonPin2 = 3; // Tombol 2 untuk mengatur menit
void setup() {
Serial.begin(9600);
Wire.begin();
lcd.init();
lcd.backlight();
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
rtc.begin();
if (!rtc.begin()) {
Serial.println("RTC tidak ditemukan! Set waktu melalui kode.");
rtc.adjust(DateTime(__DATE__, __TIME__));
}
xTaskCreate(TaskRTC, "TaskRTC", 128, NULL, 5, NULL);
}
void loop() {
DateTime now = rtc.now();
int buttonState1 = digitalRead(buttonPin1);
int buttonState2 = digitalRead(buttonPin2);
if (buttonState1 == LOW) {
delay(100); // Debouncing
rtc.adjust(now + TimeSpan(0, 1, 0, 0)); // Menambah 1 jam
}
if (buttonState2 == LOW) {
delay(100); // Debouncing
rtc.adjust(now + TimeSpan(0, 0, 1, 0)); // Menambah 1 menit
}
lcd.setCursor(0, 0);
lcd.print("Waktu: ");
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
lcd.setCursor(0, 1);
lcd.print("Tgl: ");
lcd.print(now.year(), DEC);
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.day(), DEC);
delay(1000);
}