#include <LiquidCrystal_I2C.h>
#define sw1 2
#define sw2 3
#define sw3 4
#define sw4 5
#define buzz 7
int next, back, menu, enter, home, mode, st ,sub_menu, sub_st, next_st, back_st;
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
Serial.begin(115200);
lcd.init();
lcd.clear();
lcd.backlight();
pinMode(sw1, INPUT_PULLUP);
pinMode(sw2, INPUT_PULLUP);
pinMode(sw3, INPUT_PULLUP);
pinMode(sw4, INPUT_PULLUP);
}
void loop() {
next = digitalRead(sw1);
back = digitalRead(sw2);
enter = digitalRead(sw3);
home = digitalRead(sw4);
if (next == 0) {
if (menu == 4 && sub_menu == 1) {
//stopwatch
} else if (menu == 4 && sub_menu == 2) {
//CD
} else if (menu == 5 && sub_menu == 1) {
// Proses setting LCD
} else if (menu == 5 && sub_menu == 2) {
// Proses setting buzzer
} else {
menu = menu + 1;
}
}
if (back == 0) {
if (menu == 3 && sub_menu > 0) {
sub_menu = 0;
lcd.clear();
} else if (menu == 4 && sub_menu > 0) {
sub_menu = 0;
lcd.clear();
} else if (menu == 5 && sub_menu > 0) {
sub_menu = 0;
lcd.clear();
} else {
menu = menu - 1;
}
}
if (next == 0 && menu > 5) {
menu = 1;
}
if (back == 0 && menu <= 1) {
menu = 5;
}
switch (menu) {
case 1:
lcd.setCursor(0,0);
lcd.print("Menu:");
lcd.setCursor(6,0);
lcd.print("1. Start ");
break;
case 2:
lcd.setCursor(0,0);
lcd.print("Menu:");
lcd.setCursor(6,0);
lcd.print("2. Stop ");
break;
case 3:
lcd.setCursor(0,0);
lcd.print("Menu:");
lcd.setCursor(6,0);
lcd.print("3. Reset ");
break;
case 4:
lcd.setCursor(0,0);
lcd.print("Menu:");
lcd.setCursor(6,0);
lcd.print("4. Mode ");
if (enter == 0 && sub_menu == 0) {
lcd.setCursor(0,1);
lcd.print("1. Stopwatch ");
sub_menu = 1;
}
else if (next == 0 && sub_menu == 1) {
lcd.setCursor(0,1);
lcd.print("2. Countdown ");
sub_menu = 2;
mode = 0;
}
else if (enter == 0 && mode == 0 && sub_menu == 2) {
lcd.setCursor(0,1);
lcd.print("2.1. 30 detik ");
mode = 1;
/* if (enter == 0) {
for(int i = 0; i <= 30; i++){
lcd.setCursor(8,0);
lcd.print(i);
delay(1000);
lcd.clear();
}
} */
}
else if (next == 0 && mode == 1 && sub_menu == 2){
lcd.setCursor(0,1);
lcd.print("2.2. 1 menit ");
mode = 2;
}
break;
case 5:
lcd.setCursor(0,0);
lcd.print("Menu:");
lcd.setCursor(6,0);
lcd.print("5. Setting");
st = 0;
sub_st = 0;
next_st = 0;
back_st = 0;
switch(st) {
case 0:
lcd.setCursor(0,1);
lcd.print("1. LCD Backlight");
if (enter == 0 && sub_st == 0) {
lcd.setCursor(0,1);
lcd.print("1.1. LED OFF ");
sub_st = 1;
}
else if (next == 0 && sub_st == 1) {
lcd.setCursor(0,1);
lcd.print("1.2. LED ON ");
sub_st = 2;
}
else if (back == 0 && sub_st > 0) {
lcd.setCursor(0,1);
lcd.print("1. LCD Backlight");
sub_st = 0;
}
else if (enter == 0 && sub_st == 2) {
lcd.backlight();
}
else if (next == 0 && sub_st == 2) {
st = 1;
sub_st = 0;
}
break;
case 1:
lcd.setCursor(0,1);
lcd.print("2. Buzzer ON/OFF");
if (enter == 0 && sub_st == 0) {
lcd.setCursor(0,1);
lcd.print("2.1. Buzzer OFF ");
sub_st = 1;
}
else if (next == 0 && sub_st == 1) {
lcd.setCursor(0,1);
lcd.print("2.2. Buzzer ON ");
sub_st = 2;
}
else if (back == 0 && sub_st > 0) {
lcd.setCursor(0,1);
lcd.print("2. Buzzer ON/OFF");
sub_st = 0;
}
else if (enter == 0 && sub_st == 2) {
tone(buzz, 1000, 1000);
}
else if (next == 0 && sub_st == 2) {
st = 2;
sub_st = 0;
}
break;
}
// Tampilkan sub-menu ketika button enter ditekan
if (enter == 0 && sub_st == 0) {
sub_st = 1;
}
else if (enter == 0 && sub_st == 1 && st == 0) {
lcd.setCursor(0,1);
lcd.print("1.2. LED ON ");
sub_st = 2;
}
else if (enter == 0 && sub_st == 1 && st == 1) {
lcd.setCursor(0,1);
lcd.print("2.2. Buzzer ON ");
sub_st = 2;
}
}
Serial.println(menu);
Serial.println(sub_menu);
Serial.println(mode);
delay(100);
}