#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#define alarm 7
#define set 8
#define up 9
#define down 10
int menitalarm = 0;
int jamalarm = 0;
int pagealarm = 0;
int realjam = true;
int pagejam = 0;
int jamReal;
int menitReal;
int jamm=0;
int menitt=0;
RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C LCD 16x2
void setup() {
Serial.begin(9600);
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__))); // Ambil data jam
}
lcd.begin(16, 2);
lcd.print("Digital Clock");
delay(2000);
lcd.setCursor(0, 1);
delay(1000);
lcd.clear();
pinMode(up, INPUT_PULLUP);
pinMode(down, INPUT_PULLUP);
pinMode(set, INPUT_PULLUP);
pinMode(alarm, INPUT_PULLUP);
}
void loop() {
DateTime now = rtc.now();
jamReal = now.hour() + jamm;
menitReal = now.minute() + menitt;
if(realjam == true){
if(digitalRead(set)==LOW){
pagejam +=1;
if(pagejam == 3){
pagejam = 0;
}
if(pagejam == -1){
pagejam = 0;
}
}
if(pagejam == 0){
if(jamalarm == jamReal && menitalarm == menitReal){
pinMode(3, OUTPUT);
analogWrite(3, HIGH);
}
lcd.setCursor(0, 0);
lcd.print("Time : ");
lcd.print(jamReal, DEC);
lcd.print(':');
printDigits(menitReal);
lcd.print(':');
printDigits(now.second());
lcd.setCursor(0, 1);
lcd.print("Date : ");
lcd.print(now.year(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.day(), DEC);
delay(500);
}
if(pagejam == 1){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Time : ");
lcd.setCursor(9, 0);
lcd.print(':');
printDigits(menitReal);
if(digitalRead(up) == LOW){
menitt +=1;
if(menitReal == 60){
menitt = 0;
}
if(menitReal == -1){
menitt = 0;
}
}
if(digitalRead(down) == LOW){
menitt -=1;
if(menitReal == -1){
menitt = 0;
}
if(menitReal == 60){
menitt = 0;
}
if(menitt == -1){
menitt = 0;
}
}
}
if(pagejam == 2){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Time : ");
lcd.print(jamReal, DEC);
if(digitalRead(up) == LOW){
jamm +=1;
if(jamReal == 25){
jamm = 0;
}
if(jamReal == -1){
jamm = 0;
}
}
if(digitalRead(down) == LOW){
jamm -=1;
if(jamReal == -1){
jamm = 0;
}
if(jamReal == 25){
jamm = 0;
}
if(jamm == -1){
jamm = 0;
}
}
}
}
if(digitalRead(alarm) == LOW){
realjam = false;
pagealarm +=1;
if(pagealarm == 3){
pagealarm = 0;
}
if(pagealarm == -1){
pagealarm = 2;
}
}
if(pagealarm == 0){
realjam = true;
}
if(pagealarm == 1){
realjam = false;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarm : ");
lcd.setCursor(9,0);
lcd.print(':');
printDigits(menitalarm);
if(digitalRead(up) == LOW){
menitalarm +=1;
if(menitalarm == 60){
menitalarm = 0;
}
if(menitalarm == -1){
menitalarm = 59;
}
}
if(digitalRead(down) == LOW){
menitalarm -=1;
if(menitalarm == -1){
menitalarm = 59;
}
if(menitalarm == 60){
menitalarm = 0;
}
}
}
if(pagealarm == 2){
realjam = false;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarm :");
lcd.print(jamalarm, DEC);
if(digitalRead(up) == LOW){
jamalarm +=1;
if(jamalarm == 25){
jamalarm = 0;
}
if(jamalarm == -1){
jamalarm = 24;
}
}
if(digitalRead(down) == LOW){
jamalarm -=1;
if(jamalarm == -1){
jamalarm = 24;
}
if(jamalarm == 25){
jamalarm = 0;
}
}
}
delay(500);
}
void printDigits(int digits) {
// Utility function for printing two digits
if (digits < 10)
lcd.print('0');
lcd.print(digits);
}