#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // LCD 20x4
int tombol[3]; // 0: turun, 1: naik, 2: menu
int demmenu = 0; // Indeks menu aktif
bool isSubMenu = false; // Status: apakah sedang di sub-menu atau tidak
int subMenuIndex = 0; // Indeks untuk sub-menu
// Nama menu utama
const char *menuNames[] = {
"MENU 1 (Heater Blower)",
"MENU 2 (Prediksi %)",
"MENU 3 (My Info)"
};
// Nama sub-menu
const char *subMenuNames[3][4] = {
{ "Setting Blower", "Kondisi Sensor", "Running Program", "Exit" }, // Sub-menu untuk Menu 1
{ "Kondisi Berat", "Kondisi Sensor", "Running Program", "Exit" }, // Menu 2
{ "Info Kondisi Dome", "Info apa", "Spesifikasi Alat", "Exit" } // Menu 3
};
void setup() {
lcd.init();
lcd.backlight();
pinMode(27, INPUT_PULLUP); // Tombol turun
pinMode(26, INPUT_PULLUP); // Tombol naik
pinMode(25, INPUT_PULLUP); // Tombol pilih
// menucapnhat(); // Tampilkan menu awal
}
void loop() {
// Membaca status tombol
tombol[0] = digitalRead(27) == LOW; // Tombol turun
tombol[1] = digitalRead(26) == LOW; // Tombol naik
tombol[2] = digitalRead(25) == LOW; // Tombol pilih
if (!isSubMenu) {
// Navigasi di menu utama
if (tombol[0]) {
demmenu = (demmenu + 1) % 3; // Rotasi menu utama
tampilkanMenu(menuNames, 3, demmenu);
delay(300); // Delay untuk debounce
}
if (tombol[1]) {
demmenu = (demmenu - 1 + 3) % 3; // Rotasi menu utama
tampilkanMenu(menuNames, 3, demmenu);
delay(300); // Delay untuk debounce
}
if (tombol[2]) {
// Masuk ke submenu berdasarkan menu yang dipilih
isSubMenu = true;
subMenuIndex = 0; // Reset sub-menu ke awal
tampilkanSubMenu(demmenu); // Tampilkan sub-menu berdasarkan menu yang dipilih
delay(500); // Delay untuk debounce
}
} else {
// Navigasi di sub-menu
if (tombol[0]) {
subMenuIndex = (subMenuIndex + 1) % 4; // Rotasi sub-menu
tampilkanSubMenu(demmenu); // Tampilkan sub-menu berdasarkan menu yang aktif
delay(300); // Delay untuk debounce
}
if (tombol[1]) {
subMenuIndex = (subMenuIndex - 1 + 4) % 4; // Rotasi sub-menu
tampilkanSubMenu(demmenu); // Tampilkan sub-menu berdasarkan menu yang aktif
delay(300); // Delay untuk debounce
}
if (tombol[2]) {
if (subMenuIndex == 3) {
// Pilih Exit dari sub-menu
keluarDariSubMenu();
delay(300); // Delay untuk debounce
} else {
// Pilih opsi sub-menu lainnya dan tampilkan konten
tampilkanKonten(demmenu, subMenuIndex);
delay(300); // Delay untuk debounce
}
}
}
}
void tampilkanMenu(const char **menu, int menuCount, int currentIndex) {
lcd.clear();
// Tampilkan nama alat di baris 0
lcd.setCursor(0, 0);
lcd.print("Smart Conctrol & Prediction"); // Ganti [Nama Alat] dengan nama alat yang sesuai
// Tampilkan menu utama dimulai dari baris 1
for (int i = 0; i < menuCount; i++) { // Menu 1-3 mulai di baris 1, 2, dan 3
lcd.setCursor(0, i + 1); // Geser menu ke baris 1, 2, dan 3
if (i == currentIndex) {
lcd.print(">");
} else {
lcd.print(" ");
}
lcd.print(menu[i]);
}
}
void tampilkanSubMenu(int menuIndex) {
lcd.clear();
for (int i = 0; i < 4; i++) { // Total sub-menu = 4
lcd.setCursor(0, i);
if (i == subMenuIndex) {
lcd.print(">");
} else {
lcd.print(" ");
}
lcd.print(subMenuNames[menuIndex][i]);
}
}
void chonmenu() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(menuNames[demmenu]);
lcd.setCursor(0, 1);
lcd.print("NOI DUNG ");
lcd.print(menuNames[demmenu]);
delay(5000); // Tampilkan konten selama 5 detik
}
void tampilkanKonten(int menuIndex, int subMenuIndex) {
lcd.clear();
lcd.setCursor(0, 0);
switch (menuIndex) {
case 0: // Menu 1
switch (subMenuIndex) {
case 0: lcd.print("Setting Blower"); break;
case 1: lcd.print("Kondisi Sensor"); break;
case 2: lcd.print("Running Program"); break;
}
break;
case 1: // Menu 2
switch (subMenuIndex) {
case 0: lcd.print("Kondisi Berat");break;
case 1: lcd.print("Kondisi Sensor"); break;
case 2: lcd.print("Running Program"); break;
}
break;
case 2: // Menu 3
switch (subMenuIndex) {
case 0: lcd.print("Info Kondisi Dome"); break;
case 1: lcd.print("Info apa"); break;
case 2: lcd.print("Spesifikasi Alat"); break;
}
break;
}
delay(1000); // Tampilkan konten selama 1 detik
}
void keluarDariSubMenu() {
// Kembali ke menu utama
isSubMenu = false;
tampilkanMenu(menuNames, 3, demmenu);
}
void fuzzy_blower(){
//program
}
void fuzzy_prediction(){
//program
}
void program_sensor_suhu(){
//program
}