#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
#define a 2
#define b 3
#define c 4
//Variable Waktu untuk Stopwatch dan Countdown
int timer = 0;
int s;
int m;
int h;
//Variable EEPROM Stopwatch dan Countdown
int clk;
//Variable EEPROM LCD
int LCD;
//Variable EEPROM Buzzer
int BZR;
//variable Menu
int menu=0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup(){
pinMode(a, INPUT_PULLUP);
pinMode(b, INPUT_PULLUP);
pinMode(c, INPUT_PULLUP);
lcd.begin(16, 2);
lcd.clear();
buzzer();
lcd.backlight();
lcd.setCursor(1, 0);
lcd.println("SELAMAT DATANG");
lcd.setCursor(2, 1);
lcd.println("PROGRAM MENU");
if(EEPROM.read(LCD) == 1){
lcd.noBacklight();
}else{
lcd.backlight();
}
}
void loop(){
//main menu
if(digitalRead(a) == LOW){
menu++;
if(menu > 5){
menu = 1;
}
buzzer();
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("PILIH MENU : ");
switch(menu){
case 1:
lcd.setCursor(4, 1);
lcd.println("1. Start");
break;
case 2:
lcd.setCursor(4, 1);
lcd.println("2. Stop");
break;
case 3:
lcd.setCursor(4, 1);
lcd.println("3. Reset");
break;
case 4:
lcd.setCursor(4, 1);
lcd.println("4. Mode");
break;
case 5:
lcd.setCursor(4, 1);
lcd.println("5. Setting");
break;
}
delay(250);
}
if(digitalRead(b) == LOW){
menu--;
if(menu < 1){
menu = 5;
}
buzzer();
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("PILIH MENU : ");
switch(menu){
case 1:
lcd.setCursor(4, 1);
lcd.println("1. Start");
break;
case 2:
lcd.setCursor(4, 1);
lcd.println("2. Stop");
break;
case 3:
lcd.setCursor(4, 1);
lcd.println("3. Reset");
break;
case 4:
lcd.setCursor(4, 1);
lcd.println("4.Mode");
break;
case 5:
lcd.setCursor(4, 1);
lcd.println("5.Setting");
break;
}
delay(250);
}
if(digitalRead(c) == LOW){
if(menu == 1){
buzzer();
if(EEPROM.read(clk) == 5){
for(s = 30 ; s > 0 ; s--){
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Countdown :");
lcd.setCursor(2, 1);
lcd.print("0");
lcd.setCursor(4, 1);
lcd.println(" : ");
lcd.setCursor(7, 1);
lcd.println("0");
lcd.setCursor(9, 1);
lcd.println(" : ");
lcd.setCursor(12, 1);
lcd.println(s);
delay(1000);
menu = 0;
}
}
else if(EEPROM.read(clk) == 6){
for(s = 60 ; s > 0 ; s--){
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Countdown :");
lcd.setCursor(2, 1);
lcd.print("00");
lcd.setCursor(4, 1);
lcd.println(" : ");
lcd.setCursor(7, 1);
lcd.println("00");
lcd.setCursor(9, 1);
lcd.println(" : ");
lcd.setCursor(12, 1);
lcd.println(s);
delay(1000);
menu = 0;
}
}else if(EEPROM.read(clk) == 7){
for(s = 0 ; s < 60 ; s++){
for(m = 0 ; m < 60 ; m++){
for(h = 0 ; h < 60 ; h++){
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Stopwatch :");
lcd.setCursor(2, 1);
lcd.print(timer / 3600);
lcd.setCursor(4, 1);
lcd.println(" : ");
lcd.setCursor(7, 1);
lcd.println(timer / 60 % 60);
lcd.setCursor(9, 1);
lcd.println(" : ");
lcd.setCursor(12, 1);
lcd.println(timer % 60);
delay(1000);
timer++;
menu = 0;
}
}
}
}
}
if(menu == 4){
buzzer();
lcd.clear();
lcd.setCursor(2, 0);
lcd.println("1. Stopwatch");
lcd.setCursor(2, 1);
lcd.println("2. Countdown");
delay(250);
while(menu == 4){
if(digitalRead(a) == LOW){
buzzer();
lcd.clear();
lcd.setCursor(1, 0);
lcd.println("Anda Memilih :");
lcd.setCursor(3, 1);
lcd.println("Stopwatch");
EEPROM.write(clk, 7);
delay(250);
menu = 0;
}
if(digitalRead(b) == LOW){
buzzer();
menu = 500;
}
}
}
if(menu == 5){
buzzer();
lcd.clear();
lcd.setCursor(2, 0);
lcd.println("1. LCD");
lcd.setCursor(2, 1);
lcd.println("2. Buzzer");
delay(250);
while(menu == 5){
if(digitalRead(a) == LOW){
buzzer();
lcd.clear();
lcd.setCursor(2, 0);
lcd.println("LCD ON");
lcd.setCursor(2, 1);
lcd.println("LCD OFF");
delay(250);
menu = 1000;
}
if(digitalRead(b) == LOW){
buzzer();
lcd.clear();
lcd.setCursor(2, 0);
lcd.println("Buzzer ON");
lcd.setCursor(2, 1);
lcd.println("Buzzer OFF");
delay(250);
menu = 1500;
}
}
}
//sub menu
if (menu == 500) {
lcd.clear();
lcd.setCursor(2, 0);
lcd.println("1. 30 Detik");
lcd.setCursor(2, 1);
lcd.println("2. 1 Menit");
while (menu == 500) {
if (digitalRead(a) == LOW) {
buzzer();
lcd.clear();
lcd.setCursor(1, 0);
lcd.println("Anda Memilih :");
lcd.setCursor(4, 1);
lcd.println("30 Detik");
EEPROM.write(clk, 5);
delay(250);
menu = 0;
}
if (digitalRead(b) == LOW) {
buzzer();
lcd.clear();
lcd.setCursor(1, 0);
lcd.println("Anda Memilih :");
lcd.setCursor(4, 1);
lcd.println("1 Menit");
EEPROM.write(clk, 6);
delay(250);
menu = 0;
}
}
}
if(menu == 1000){
while(menu == 1000){
if(digitalRead(a) == LOW){
buzzer();
lcd.clear();
lcd.setCursor(1, 0);
lcd.println("Anda Memilih :");
lcd.setCursor(5, 1);
lcd.println("LCD ON");
lcd.backlight();
EEPROM.write(LCD, 0);
delay(100);
menu = 0;
}
if(digitalRead(b) == LOW){
buzzer();
lcd.clear();
lcd.setCursor(1, 0);
lcd.println("Anda Memilih :");
lcd.setCursor(5, 1);
lcd.println("LCD OFF");
lcd.noBacklight();
EEPROM.write(LCD, 1);
delay(100);
menu = 0;
}
}
}
if(menu == 1500){
while(menu == 1500){
if(digitalRead(a) == LOW){
buzzer();
lcd.clear();
lcd.setCursor(1, 0);
lcd.println("Anda Memilih :");
lcd.setCursor(3, 1);
lcd.print("Buzzer ON");
EEPROM.write(BZR, 3);
delay(100);
menu = 0;
}
if(digitalRead(b) == LOW){
buzzer();
lcd.clear();
lcd.setCursor(1, 0);
lcd.println("Anda Memilih :");
lcd.setCursor(3, 1);
lcd.print("Buzzer OFF");
EEPROM.write(BZR, 4);
delay(100);
menu = 0;
}
delay(100);
}
}
}
}
void buzzer(){
if(EEPROM.read(BZR) == 4){
noTone(12);
}else{
tone(12, 500);
delay(100);
noTone(12);
delay(100);
}
}