#include <LiquidCrystal.h>
// Inisialisasi pin LCD: RS, E, D4, D5, D6, D7
const int rs = 23, en = 22, d4 = 19, d5 = 18, d6 = 5, d7 = 17;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Definisi tombol
const int upButton = 32;
const int downButton = 33;
const int selectButton = 25;
const int backButton = 34;
int menuIndex = 0;
int subMenuIndex = 0;
int currentMenu = 0;
bool inSubMenu = false;
String Type[] = {" ","Continuous","Burst","slow","fast"};
void setup() {
lcd.begin(16, 2);
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(selectButton, INPUT_PULLUP);
pinMode(backButton, INPUT_PULLUP);
displayMenu();
}
void loop() {
if (digitalRead(upButton) == LOW) {
navigateUp();
delay(200);
}
if (digitalRead(downButton) == LOW) {
navigateDown();
delay(200);
}
if (digitalRead(selectButton) == LOW) {
selectMenu();
delay(200);
}
if (digitalRead(backButton) == LOW) {
backMenu();
delay(200);
}
}
void displayMenu() {
lcd.clear();
if (!inSubMenu) {
switch (menuIndex) {
case 0: lcd.print("#MODE"); break;
case 1: lcd.print("#FREQ"); break;
case 2: lcd.print("#PERIOD"); break;
case 3: lcd.print("#TIMER"); break;
}
} else {
if(menuIndex==0){
lcd.print("MODE ");
//int x = currentMenu + 1;
lcd.setCursor(0, 1);
lcd.print("Type: ");
int s = subMenuIndex + 1;
lcd.print(Type[s]);
}
}
}
void navigateUp() {
if (!inSubMenu) {
menuIndex = (menuIndex > 0) ? menuIndex - 1 : 3;
} else {
subMenuIndex = (subMenuIndex > 0) ? subMenuIndex - 1 : getSubMenuCount(currentMenu) - 1;
}
displayMenu();
}
void navigateDown() {
if (!inSubMenu) {
menuIndex = (menuIndex < 3) ? menuIndex + 1 : 0;
} else {
subMenuIndex = (subMenuIndex < getSubMenuCount(currentMenu) - 1) ? subMenuIndex + 1 : 0;
}
displayMenu();
}
void selectMenu() {
if (!inSubMenu) {
currentMenu = menuIndex;
inSubMenu = true;
subMenuIndex = 0;
} else {
// Aksi untuk sub-menu yang dipilih
}
displayMenu();
}
void backMenu() {
if (inSubMenu) {
inSubMenu = false;
subMenuIndex = 0;
}
displayMenu();
}
int getSubMenuCount(int menu) {
switch (menu) {
case 0: return 3;
case 1: return 10;
case 2: return 10;
case 3: return 60;
default: return 0;
}
}