// i2c bisa di palarel jika alamat hardwarenya beda-beda
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
// variabel LCD
LiquidCrystal_I2C lcd(0x27,16,2);
// artinya membuat variabel yaitu lcd yan di ambil dari libary
// arti di dalam kurung adalah alamat lcd dan juag ukuran lcd
// variabel RTC
RTC_DS1307 rtc;
const int buzz = 11;
void setup() {
// memanggil proggram
lcd.init();
lcd.backlight();
rtc.begin();
lcd.setCursor (4,0);
// 0 pertama ke samping, nol ke dua ke bawah (x,y)
lcd.print("Project");
lcd.setCursor (2,1);
lcd.print("Jam Digital");
delay(1000);
lcd.clear(); // untuk menghapus tulisan di dalam lcd
pinMode(buzz, OUTPUT);
}
void loop() {
DateTime baca_rtc = rtc.now();
jamdigi();
int jam = 21;
int menit = 42;
if (baca_rtc.hour() == jam && baca_rtc.minute() == menit){
tone(buzz,500);
delay(3000);
// jika mengandung waktu yang berjalan lebih baik menggunakan millis
while (baca_rtc.hour() == jam && baca_rtc.minute() == menit){
jamdigi();
noTone(buzz);
}
}
else{
noTone(buzz);
}
// tone(buzz,500);
// tone merupakan sebuah pemanfaatan sinyal pwm dan nilai di dalam kurung tersebut merupakan nilai yang mewakili satuan hz
// semakin rendah nilai semakin ngebas, dan semakin tinggi nilai semakin cempreng
// buzzer ada yang pasif dan aktif
// buzzer aktif hanya berbunyi jika sinyal high
// buzzer pasih hanya berbunyi menggunakan sinyal berfrekuensi terntentu (pwm)
}
void jamdigi(){
DateTime baca_rtc = rtc.now();
// DateTime hanya berfungsi untuk syarat membuat variable, mengikuti apa yang ada di libarynya
lcd.setCursor (0,0);
lcd.print("DATE :");
lcd.print(baca_rtc.year());
lcd.print("/");
lcd.print(baca_rtc.month());
lcd.print("/");
lcd.print(baca_rtc.day());
lcd.setCursor (0,1);
lcd.print("TIME: ");
lcd.print(baca_rtc.hour());
lcd.print(":");
lcd.print(baca_rtc.minute());
lcd.print(":");
lcd.print(baca_rtc.second());
lcd.print(" "); // di gunakan untuk menghilankan bug untuk menit
}