#define sw1 3
#define sw2 2
#define sw3 4
#define sw4 5
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
//button
int up, down, enter, back;
// menu
int menu = 0;
int mode = 0;
int setting = 0;
// sub menu
int CountDown = 0;
int LedLcd = 0;
int Buzzer = 0;
// Untuk Menyimpan Suatu Data
int dataCountDown = 1;
int dataLedLcd = 1;
int dataBuzzer = 1;
void setup() {
pinMode(sw1, INPUT_PULLUP);
pinMode(sw2, INPUT_PULLUP);
pinMode(sw3, INPUT_PULLUP);
pinMode(sw4, INPUT_PULLUP);
lcd.init();
lcd.backlight();
}
void loop() {
tombolMenu();
while (mode >= 1) {
tombolMode();
while (CountDown >= 1) {
tombolCountDown();
tampilCountDown();
}
tampilMode();
}
while (setting >= 1) {
tombolSetting();
while(LedLcd >= 1) {
tombolLedLcd();
tampilLedLcd();
}
while(Buzzer >= 1) {
tombolBuzzer();
tampilBuzzer();
}
tampilSetting();
}
tampilMenu();
}
//==============TOMBOL==============
void tombolMenu() {
down = digitalRead(sw1);
up = digitalRead(sw2);
enter = digitalRead(sw3);
if (up == 0)
{
delay(200);
menu++;
lcd.clear();
}
if (up == 0 && menu >= 5)
{
menu = 0;
}
if (down == 0)
{
delay(200);
menu--;
lcd.clear();
}
if (down == 0 && menu < 0)
{
menu = 4;
}
if (enter == 0 && menu == 3)
{
delay(200);
mode++;
lcd.clear();
}
if (enter == 0 && menu == 4)
{
delay(200);
setting++;
lcd.clear();
}
}
void tombolMode() {
down = digitalRead(sw1);
up = digitalRead(sw2);
enter = digitalRead(sw3);
back = digitalRead(sw4);
if (up == 0)
{
delay(200);
mode++;
lcd.clear();
}
if (up == 0 && mode >= 3)
{
mode = 1;
}
if (down == 0)
{
delay(200);
mode--;
lcd.clear();
}
if (down == 0 && mode < 1)
{
mode = 2;
}
if (back == 0) {
delay(200);
mode = mode - mode;
lcd.clear();
menu = 3;
tampilMenu();
}
// Menuju ke sub menu
if (enter == 0 && mode == 2)
{
delay(200);
CountDown++;
lcd.clear();
}
}
void tombolSetting() {
down = digitalRead(sw1);
up = digitalRead(sw2);
enter = digitalRead(sw3);
back = digitalRead(sw4);
if (up == 0)
{
delay(200);
setting++;
lcd.clear();
}
if (up == 0 && setting >= 3)
{
setting = 1;
}
if (down == 0)
{
delay(200);
setting--;
lcd.clear();
}
if (down == 0 && setting < 1)
{
setting = 2;
}
if (back == 0) {
delay(200);
setting = setting - setting;
lcd.clear();
menu = 4;
tampilMenu();
}
// Menuju ke sub menu
if (enter == 0 && setting == 1)
{
delay(200);
LedLcd++;
lcd.clear();
}
if (enter == 0 && setting == 1)
{
delay(200);
LedLcd++;
lcd.clear();
}
if (enter == 0 && setting == 2)
{
delay(200);
Buzzer++;
lcd.clear();
}
}
//==========TOMBOL SUB MENU==========
void tombolCountDown() {
down = digitalRead(sw1);
up = digitalRead(sw2);
enter = digitalRead(sw3);
back = digitalRead(sw4);
if (up == 0)
{
delay(200);
dataCountDown++;
lcd.clear();
}
if (up == 0 && dataCountDown >= 3)
{
dataCountDown = 1;
}
if (down == 0)
{
delay(200);
dataCountDown--;
lcd.clear();
}
if (down == 0 && dataCountDown < 1)
{
dataCountDown = 2;
}
if (back == 0) {
delay(200);
CountDown = CountDown - CountDown;
mode = 2;
}
}
void tombolLedLcd() {
down = digitalRead(sw1);
up = digitalRead(sw2);
enter = digitalRead(sw3);
back = digitalRead(sw4);
if (up == 0)
{
delay(200);
dataLedLcd++;
lcd.clear();
}
if (up == 0 && dataLedLcd >= 3)
{
dataLedLcd = 1;
}
if (down == 0)
{
delay(200);
dataLedLcd--;
lcd.clear();
}
if (down == 0 && dataLedLcd < 1)
{
dataLedLcd = 2;
}
if (back == 0) {
delay(200);
LedLcd = LedLcd - LedLcd;
setting = 1;
}
}
void tombolBuzzer() {
down = digitalRead(sw1);
up = digitalRead(sw2);
enter = digitalRead(sw3);
back = digitalRead(sw4);
if (up == 0)
{
delay(200);
dataBuzzer++;
lcd.clear();
}
if (up == 0 && dataBuzzer >= 3)
{
dataBuzzer = 1;
}
if (down == 0)
{
delay(200);
dataBuzzer--;
lcd.clear();
}
if (down == 0 && dataBuzzer < 1)
{
dataBuzzer = 2;
}
if (back == 0) {
delay(200);
Buzzer = Buzzer - Buzzer;
setting = 2;
}
}
//==============TAMPILAN==============
void tampilMenu() {
if (menu == 0) {
lcd.setCursor(0, 0);
lcd.print("-> 0.START ");
lcd.setCursor(0, 1);
lcd.print(" 1.STOP ");
} else if (menu == 1) {
lcd.setCursor(0, 0);
lcd.print(" 0.START ");
lcd.setCursor(0, 1);
lcd.print("-> 1.STOP ");
} else if (menu == 2) {
lcd.setCursor(0, 0);
lcd.print("-> 2.RESET ");
lcd.setCursor(0, 1);
lcd.print(" 3.MODE ");
} else if (menu == 3) {
lcd.setCursor(0, 0);
lcd.print(" 2.RESET ");
lcd.setCursor(0, 1);
lcd.print("-> 3.MODE ");
} else if (menu == 4) {
lcd.setCursor(0, 0);
lcd.print("-> 4.SETTING ");
}
}
void tampilMode() {
if (mode == 1) {
lcd.setCursor(0, 0);
lcd.print("-> 1.STOP WATCH ");
lcd.setCursor(0, 1);
lcd.print(" 2.COUNT DOWN ");
} else if (mode == 2) {
lcd.setCursor(0, 0);
lcd.print(" 1.STOP WATCH ");
lcd.setCursor(0, 1);
lcd.print("-> 2.COUNT DOWN ");
}
}
void tampilSetting() {
if (setting == 1) {
lcd.setCursor(0, 0);
lcd.print("-> 1.LED LCD ");
lcd.setCursor(0, 1);
lcd.print(" 2.BUZZER ");
} else if (setting == 2) {
lcd.setCursor(0, 0);
lcd.print(" 1.LED LCD ");
lcd.setCursor(0, 1);
lcd.print("-> 2.BUZZER ");
}
}
//==========TAMPIL SUB MENU==========
void tampilCountDown() {
if (dataCountDown == 1) {
lcd.setCursor(0, 0);
lcd.print("-> 1.30 Detik ");
lcd.setCursor(0, 1);
lcd.print(" 2. 1 Menit ");
} else if (dataCountDown == 2) {
lcd.setCursor(0, 0);
lcd.print(" 1.30 Detik ");
lcd.setCursor(0, 1);
lcd.print("-> 2. 1 Menit ");
}
}
void tampilLedLcd() {
if (dataLedLcd == 1) {
lcd.setCursor(0, 0);
lcd.print("LED LCD :-> OFF ");
lcd.setCursor(0, 1);
lcd.print(" ON ");
} else if (dataLedLcd == 2) {
lcd.setCursor(0, 0);
lcd.print("LED LCD : OFF ");
lcd.setCursor(0, 1);
lcd.print(" -> ON ");
}
}
void tampilBuzzer() {
if (dataBuzzer == 1) {
lcd.setCursor(0, 0);
lcd.print("BUZZER :-> OFF ");
lcd.setCursor(0, 1);
lcd.print(" ON ");
} else if (dataBuzzer == 2) {
lcd.setCursor(0, 0);
lcd.print("BUZZER : OFF ");
lcd.setCursor(0, 1);
lcd.print(" -> ON ");
}
}