#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <Servo.h>
Servo myservo;
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2);
char daysOfTheWeek[7][12] = {
"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"
};
void setup() {
myservo.attach(3);
myservo.write(0);
Serial.begin(9600);
lcd.begin(16, 2);
lcd.backlight();
if (!rtc.begin()) {
lcd.print("RTC tdk ditemukan!");
while (1);
}
if (!rtc.isrunning()) {
lcd.clear();
lcd.print("RTC blm jalan!");
// Kalau RTC baru dipasang, aktifkan baris di bawah ini sekali saja
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // set waktu dari komputer
}
lcd.clear();
}
void loop() {
DateTime now = rtc.now();
// ==== TAMPILKAN HARI & TANGGAL ====
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
lcd.print(" ");
lcd.print(now.day());
lcd.print('/');
lcd.print(now.month());
lcd.print('/');
lcd.print(now.year());
// ==== TAMPILKAN JAM ====
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
if (now.hour() < 10) lcd.print('0');
lcd.print(now.hour());
lcd.print(':');
if (now.minute() < 10) lcd.print('0');
lcd.print(now.minute());
lcd.print(':');
if (now.second() < 10) lcd.print('0');
lcd.print(now.second());
// ==== KONTROL SERVO ====
// Servo akan bergerak ke 90° tepat jam 08:23:00
// dan kembali ke 0° setelah 5 detik
if (now.hour() == 8 && now.minute() == 37 && now.second() == 0) {
myservo.write(90);
delay(5000); // tahan posisi 5 detik
myservo.write(0);
}
delay(1000);
}