#include<RTClib.h>
#include<LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS1307 rtc;
int up = 2; //tombol +
int down = 3; //tombol -
int enter = 4; //tombol set menu
//----variabel-----
int hourupg;
int minupg;
int yearupg;
int monthupg;
int dayupg;
int menu =0;
char lcdbuff[16];
unsigned long millisSebelumnya;
bool blink;
void setup() {
pinMode (up, INPUT_PULLUP);
pinMode (down, INPUT_PULLUP);
pinMode (enter, INPUT_PULLUP);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("coba");
delay(1000);
lcd.clear();
Serial.begin(9600);
Wire.begin();
rtc.begin();
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
rtc.adjust(DateTime(__DATE__, __TIME__));// Set the date and time at compile time
}
// rtc.adjust(DateTime(__DATE__, __TIME__)); //removing "//" to adjust the time
// The default display shows the date and time
//int menu=0;
}
void loop() {
//DisplayDateTime();
if (digitalRead(enter)==LOW){menu=menu+1;}
else if(menu >=6){menu=0;}
delay(90);
Serial.println(menu);
switch(menu){
case 0: DisplayDateTime(); break;
case 1: DisplaySetHour(); break;
case 2: DisplaySetMinute(); break;
case 3: DisplaySetYear(); break;
case 4: DisplaySetMonth(); break;
case 5: DisplaySetDay(); break;
case 6: StoreAgg(); break;
default :DisplayDateTime();
}
}
// menampilkan waktu dan tanggal saat ini//
/*void DisplayDateTime (){
DateTime now = rtc.now();
lcd.setCursor(0, 1);
lcd.print("Hour:");
if (now.hour()<=9){lcd.print("0");}
lcd.print(now.hour(), DEC);
hourupg=now.hour();
lcd.print(":");
if (now.minute()<=9){lcd.print("0");}
lcd.print(now.minute(), DEC);
minupg=now.minute();
lcd.print(":");
if (now.second()<=9){lcd.print("0");}
lcd.print(now.second(), DEC);
//-----------------------------------
lcd.setCursor(0, 0);
lcd.print("Date: ");
if (now.day()<=9){lcd.print("0");}
lcd.print(now.day(), DEC);
dayupg=now.day();
lcd.print("/");
if (now.month()<=9){lcd.print("0");}
lcd.print(now.month(), DEC);
monthupg=now.month();
lcd.print("/");
lcd.print(now.year(), DEC);
yearupg=now.year();
}*/
void DisplayDateTime (){
DateTime now = rtc.now();
char* dot = " ";
if (!blink) dot = ":";
sprintf(lcdbuff, "%02i/%02i/%04i %02i%s%02i", now.day(), now.month(),now.year(), now.hour(), dot, now.minute());
lcd.setCursor(0,0);
lcd.print(lcdbuff);
dayupg = now.day();
monthupg = now.month();
yearupg = now.year();
hourupg = now.hour();
minupg = now.minute();
//blink
if(millis()-millisSebelumnya <250){blink=true;}
else if(millis()-millisSebelumnya >250 && millis()-millisSebelumnya <500){blink=false;}
else if(millis()-millisSebelumnya >500){millisSebelumnya=millis();}
}
//---seting hour ---------------------
void DisplaySetHour(){
lcd.clear();
DateTime now = rtc.now();
if(digitalRead(up)==LOW)
{
if(hourupg==23){hourupg=0;}
else{hourupg=hourupg+1;}
}
if(digitalRead(down)==LOW)
{
if(hourupg==0){hourupg=23;}
else {hourupg=hourupg-1;}
}
lcd.setCursor(0,0);
lcd.print("Set time:");
lcd.setCursor(0,1);
lcd.print(hourupg,DEC);
delay(90);
}
//------------------Setting the minutes-------
void DisplaySetMinute(){
lcd.clear();
if(digitalRead(up)==LOW)
{
if (minupg==59){minupg=0;}
else {minupg=minupg+1;}
}
if(digitalRead(down)==LOW)
{
if (minupg==0){minupg=59;}
else{minupg=minupg-1;}
}
lcd.setCursor(0,0);
lcd.print("Set Minutes:");
lcd.setCursor(0,1);
lcd.print(minupg,DEC);
delay(100);
}
void DisplaySetYear()
{
// setting the year
lcd.clear();
if(digitalRead(up)==LOW){yearupg=yearupg+1;}
if(digitalRead(down)==LOW){yearupg=yearupg-1;}
lcd.setCursor(0,0);
lcd.print("Set Year:");
lcd.setCursor(0,1);
lcd.print(yearupg,DEC);
delay(200);
}
void DisplaySetMonth()
{
// Setting the month
lcd.clear();
if(digitalRead(up)==LOW)
{
if (monthupg==12){monthupg=1;}
else{monthupg=monthupg+1;}
}
if(digitalRead(down)==LOW)
{
if (monthupg==1){monthupg=12;}
else{monthupg=monthupg-1;}
}
lcd.setCursor(0,0);
lcd.print("Set Month:");
lcd.setCursor(0,1);
lcd.print(monthupg,DEC);
delay(200);
}
void DisplaySetDay()
{
// Setting the day
lcd.clear();
if(digitalRead(up)==LOW)
{
if (dayupg==31){dayupg=1;}
else{dayupg=dayupg+1;}
}
if(digitalRead(down)==LOW)
{
if (dayupg==1){dayupg=31;}
else{dayupg=dayupg-1;}
}
lcd.setCursor(0,0);
lcd.print("Set Day:");
lcd.setCursor(0,1);
lcd.print(dayupg,DEC);
delay(200);
}
void StoreAgg()
{
// Variable saving
lcd.clear();
lcd.setCursor(0,0);
lcd.print("menyimpan");
rtc.adjust(DateTime(yearupg,monthupg,dayupg,hourupg,minupg,0));
delay(200);
}