#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
RTC_DS1307 RTC;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD dan jumlah kolom dan baris
int ledPin = 8;
int buzzerPin = 7;
int tombolNaik = 1;
int tombolTurun = 2;
void setup() {
lcd.init(); // Menghidupkan lcd
lcd.backlight(); // Menghidupkan lampu lcd
lcd.setCursor(0,0);
lcd.print(" Sensor Lampu");
lcd.setCursor(0,1);
lcd.print(" Jam Digital");
delay(2000);
RTC.begin();
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(tombolNaik, INPUT_PULLUP);
pinMode(tombolTurun, INPUT_PULLUP);
}
void loop() {
lcd.clear();
DateTime now=RTC.now();
int naik = digitalRead((tombolNaik));
int turun = digitalRead((tombolTurun));
int tahun = now.year();
int bulan = now.month();
int hari = now.day();
int jam = now.hour(); // 0-23
int menit = now.minute(); // 0-59
int detik = now.second(); //0-59
if (naik == LOW) {
// Untuk atur jam manual
jam++;
// menit = 39;
// detik = 58;
RTC.adjust(DateTime(tahun,bulan,hari,jam,menit,detik));
}
if (turun == LOW) {
jam--;
RTC.adjust(DateTime(tahun,bulan,hari,jam,menit,detik));
}
// ALARM SHALAT
lcd.setCursor(0,1);
if(jam == 4 && menit == 40){
replay();
lcd.setCursor(0,1);
lcd.print(" Subuh");
delay(1000);
}else if(jam == 12 && menit == 2){
replay();
lcd.setCursor(0,1);
lcd.print(" Zhuhur");
delay(1000);
}else if(jam == 15 && menit == 20){
replay();
lcd.setCursor(0,1);
lcd.print(" Ashar");
delay(1000);
}else if(jam == 18 && menit == 2){
replay();
lcd.setCursor(0,1);
lcd.print(" Maghrib");
delay(1000);
}else if(jam == 19 && menit == 12){
replay();
lcd.setCursor(0,1);
lcd.print(" 'isya");
delay(1000);
}else{
noTone(buzzerPin);
lcd.setCursor(0,1);
if (jam > 17 || jam < 7){
digitalWrite(ledPin, HIGH);
lcd.print(" Malam");
}else{
digitalWrite(ledPin, LOW);
lcd.print(" Siang");
}
}
// Menampilkan Jam
lcd.setCursor(0,0); lcd.print("JAM: ");
if (jam < 10) {
lcd.print("0");
}
lcd.print(jam); lcd.print(":");
if (menit < 10) {
lcd.print("0");
}
lcd.print(menit);lcd.print(":");
if (detik < 10) {
lcd.print("0");
}
lcd.print(detik);
delay(900); // Berikan sedikit delay untuk stabilitas
}
// fungsi untuk mengulang buzzer
void replay(){
for(int i = 0; i < 5;i++){
tone(buzzerPin, 1000);
delay(300);
noTone(buzzerPin);
}
}