Alarmduino
Alarmduino
// Init DS3231
DS3231 rtc(SDA, SCL);
uint32_t targetTime = 0;
uint8_t conv2d(const char* p) {
uint8_t v = 0;
if ('0' <= *p && *p <= '9')
v = *p - '0';
return 10 * v + *++p - '0';}
void setup()
{
// Setup Serial connection
//Serial.begin(115200);
pinMode (13, OUTPUT);
//digitalWrite (13, LOW); // jika menggunakan relay sebagai beban alarm
lcd.begin(); // memulai koneksi i2c dengan LCD
rtc.begin(); // memulai koneksi i2c dengan RTC
lcd.createChar(0, dgrsChar); //Membuat custom char derajat
lcd.setCursor (0,0);
lcd.print(F(" Dani's Clock "));
lcd.setCursor (0,1);
lcd.print(F("With RTC DS3231"));
delay (2000);
lcd.clear();
void loop()
{
t = rtc.getTime();
Day = rtc.getDOWStr(1);
if (setMode == 0){
hh = t.hour,DEC;
mm = t.min,DEC;
ss = t.sec,DEC;
dd = t.date,DEC;
bb = t.mon,DEC;
yy = t.year,DEC;
}
if (setAlarm <2){
lcd.setCursor(1,0);
if(setMode==0)lcd.print(Day); else {lcd.print(F("SET"));}
lcd.print(F(" "));
lcd.print(dd); lcd.print(F("-"));
lcd.print(bb); lcd.print(F("-"));
lcd.print(yy); lcd.print(F(" "));
lcd.setCursor(0,1);
if (hh<10){ lcd.print(F("0"));}
lcd.print(hh); lcd.print(F(":"));
if (mm<10){ lcd.print(F("0"));}
lcd.print(mm); lcd.print(F(":"));
if (ss<10){ lcd.print(F("0"));}
lcd.print(ss); lcd.print(F(" "));
lcd.print(rtc.getTemp());
lcd.print((char)0);
lcd.print(F("C"));
lcd.print(F(" "));
}
setupClock();
Alarm (alarmHH, alarmMM, alarmLONG);
Serial.print (setMode);
Serial.print (" ");
Serial.println (setAlarm);
}
if (setMode == 7){
lcd.setCursor (0,0);
lcd.print (F("Set Date Finish "));
lcd.setCursor (0,1);
lcd.print (F("Set Time Finish "));delay (1000);
rtc.setTime (hh, mm, ss);
rtc.setDate (dd, bb, yy);
lcd.clear();
setMode = 0;}
if (setAlarm == 5){
lcd.setCursor (0,0);
lcd.print (F("Set Alarm Finish"));
lcd.setCursor (0,1);
lcd.print (F("Alarm at : "));
lcd.print (alarmHH); lcd.print (F(":"));
lcd.print (alarmMM);
delay (1000); lcd.clear();
setAlarm=0;
alarmMode=1;}
switch (STATE) {
case WAIT:
if (btnSET.wasPressed())
{ setMode = setMode+1;}
if (btnALR.wasPressed())
{ setAlarm = setAlarm+1;}
if (btnUP.wasPressed())
STATE = INCR;
else if (btnDN.wasPressed())
STATE = DECR;
else if (btnUP.wasReleased())
rpt = REPEAT_FIRST;
else if (btnDN.wasReleased())
rpt = REPEAT_FIRST;
else if (btnUP.pressedFor(rpt)) {
rpt += REPEAT_INCR;
STATE = INCR;
}
else if (btnDN.pressedFor(rpt)) {
rpt += REPEAT_INCR;
STATE = DECR;
}
break;
case INCR:
if (setAlarm<2 && setMode==1 && dd<31)dd=dd+1;
if (setAlarm<2 && setMode==2 && bb<12)bb=bb+1;
if (setAlarm<2 && setMode==3 && yy<2050)yy=yy+1;
if (setAlarm<2 && setMode==4 && hh<23)hh=hh+1;
if (setAlarm<2 && setMode==5 && mm<59)mm=mm+1;
if (setAlarm<2 && setMode==6 && ss<59)ss=ss+1;
if (setMode==0 && setAlarm==2 && alarmHH<23)alarmHH=alarmHH+1;
if (setMode==0 && setAlarm==3 && alarmMM<59)alarmMM=alarmMM+1;
if (setMode==0 && setAlarm==4 && alarmLONG<59)alarmLONG=alarmLONG+1;
STATE = WAIT;
break;
case DECR:
if (setAlarm<2 && setMode==1 && dd>0)dd=dd-1;
if (setAlarm<2 && setMode==2 && bb>0)bb=bb-1;
if (setAlarm<2 && setMode==3 && yy>2000)yy=yy-1;
if (setAlarm<2 && setMode==4 && hh>0)hh=hh-1;
if (setAlarm<2 && setMode==5 && mm>0)mm=mm-1;
if (setAlarm<2 && setMode==6 && ss>0)ss=ss-1;
if (setMode==0 && setAlarm==2 && alarmHH>0)alarmHH=alarmHH-1;
if (setMode==0 && setAlarm==3 && alarmMM>0)alarmMM=alarmMM-1;
if (setMode==0 && setAlarm==4 && alarmLONG>0)alarmLONG=alarmLONG-1;
STATE = WAIT;
break;
}
}
if (alarmMode==1 && hh == alarmHH && (mm - alarmMM >= 0 ) && (mm - alarmMM <=
alarmLONG )) {
tone (13, 1200);
if(ss%2==0){lcd.noBacklight();}
else {lcd.backlight ();}
btnALR.read();
if (btnALR.wasPressed())
{ alarmMode = 0; lcd.backlight();}}