#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//menamai
#define LCD_ADDRESS 0X27
#define t1 2
#define t2 3
#define t3 4
int currentHour = 0;
int currentMinute = 0;
int currentSecond = 0;
int alarmHour = 0;
int alarmMinute = 0;
enum MenuMode {
DISPLAY_TIME,
SET_ALARM_HOUR,
SET_ALARM_MINUTE,
};
MenuMode menuMode = DISPLAY_TIME;
LiquidCrystal_I2C lcd(LCD_ADDRESS, 16, 2);
void setup() {
Wire.begin();
pinMode(t1, INPUT_PULLUP);
pinMode(t2, INPUT_PULLUP);
pinMode(t3, INPUT_PULLUP);
lcd.init();
lcd.backlight();
}
void loop() {
lcd.clear();
currentHour = 12;
currentMinute = 30;
currentSecond = 0;
switch(menuMode){
case DISPLAY_TIME:
lcd.setCursor(0, 0);
lcd.print("Time: ");
lcd.print(currentHour);
lcd.print(":");
if(currentMinute < 10){
lcd.print("0");
}
lcd.print(currentMinute);
lcd.print(":");
if(currentSecond < 10){
lcd.print("0");
}
lcd.print(currentSecond);
if(digitalRead(t3) == 0){
menuMode = SET_ALARM_HOUR;
delay(500);
}
break;
case SET_ALARM_HOUR:
//mengatur nilai alarm
lcd.setCursor(0, 0);
lcd.print("Set Alarm - Hour");
lcd.setCursor(0, 1);
lcd.print("Alarm: ");
lcd.print(alarmHour);
lcd.print(":");
if(alarmMinute < 10){
lcd.print("0");
}
lcd.print(alarmMinute);
if(digitalRead(t1) == 0){
//tombol 1 ditekan
alarmHour++;
if (alarmHour > 23){
alarmHour = 0;
}
delay(500); //menunggu tombol dilepas
}
if(digitalRead(t2) == 0){
//tombol 2 ditekan
alarmHour--;
if(alarmHour < 0){
alarmHour = 23;
}
delay(500);
}
if(digitalRead(t3) == 0){
menuMode = SET_ALARM_MINUTE;
delay(500);
}
break;
case SET_ALARM_MINUTE:
lcd.setCursor(0, 0);
lcd.print("Set Alarm - Minute");
lcd.setCursor(0, 1);
lcd.print("Alarm: ");
lcd.print(alarmHour);
lcd.print(":");
lcd.print(alarmMinute);
if(digitalRead(t1) == 0){
alarmMinute++;
if(alarmMinute > 59){
alarmMinute = 0;
}
delay(500);
}
if(digitalRead(t2) == 0){
alarmMinute--;
if(alarmMinute < 0){
alarmMinute = 59;
}
delay(500);
}
if(digitalRead(t3) == 0){
menuMode = DISPLAY_TIME;
delay(500);
}
}
delay(100);
}