#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2);
const int buttonUp=2;
const int buttonDown=3;
const int buttonSel=4;
int menuIndex=0;
const int menuLength=4;
int currentIndex=0;
int menuLevel=0;//0-glav 1-podmenu
unsigned long lastPressTime=0;
const unsigned long debounceDelay=220;
String settingsMenu[]={
"light",
"contr",
"exit",
};
const int settingsMenuLength=sizeof(settingsMenu)/sizeof(settingsMenu[0]);
String menuItems[]={
"Temperatur",
"Vada",
"settings",
"Golda",
};
const int menuItemsLength=sizeof(menuItems)/sizeof(menuItems[0]);
//bool upPressed=false;
//bool downPressed=false;
//bool buttonSelect=false;
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
pinMode(buttonUp, INPUT_PULLUP);
pinMode(buttonDown, INPUT_PULLUP);
pinMode(buttonSel, INPUT_PULLUP);
displayMenu();
}
void loop() {
if(millis()-lastPressTime>debounceDelay){
if(digitalRead(buttonUp)==LOW){
moveUp();
lastPressTime=millis();
}
if(digitalRead(buttonDown)==LOW){
moveDown();
lastPressTime=millis();
}
if(digitalRead(buttonSel)==LOW){
selectOption();
lastPressTime=millis();
}
}
}
void displayMenu(){
if(menuIndex==0){
lcd.setCursor(0,0);
lcd.print("");
lcd.print(""+ menuItems[menuIndex]);
if(menuIndex+1<menuLength){
lcd.setCursor(0,1);
lcd.print("");
lcd.print(""+ menuItems[menuIndex+1]);
}
}
else if(menuLevel==1){
lcd.setCursor(0,1);
lcd.print(">");
lcd.print(">"+ settingsMenu[menuIndex]);
if(menuIndex+1<settingsMenuLength){
lcd.setCursor(0,1);
lcd.print(" ");
lcd.print(settingsMenu[menuIndex+1]);
}
}
/*
lcd.setCursor(0,0);
lcd.print(">"+ menuItems[menuIndex]);
lcd.setCursor(0,1);
int nextIndex=(menuIndex + 1) % menuLength;
lcd.print(" " + menuItems[nextIndex]);
Serial.print("Index = ");
Serial.println(menuIndex);
Serial.print("Next Index = ");
Serial.println(nextIndex);
*/
}
void selectOption(){
if(menuLevel==0){
if(menuIndex==0){
menuLevel=1;
menuIndex=0;
displayMenu();
}else if(menuIndex==1){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("wokwi sim");
lcd.clear();
lcd.setCursor(0,1);
lcd.print("micro menu");
displayMenu();
}else if(menuIndex==2){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("good bay");
lcd.noBacklight();
}
}else if(menuLevel==1){
if(menuIndex==0){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("set light");
delay(1000);
displayMenu();
}else if(menuLevel==1){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("set contr");
delay(1000);
displayMenu();
}else if(menuIndex==2){
menuLevel=0;
menuIndex=0;
displayMenu();
}
}
}
void moveUp(){
menuIndex--;
if(menuIndex<0)menuIndex=menuLength-1;{
menuIndex=3;
}
displayMenu();
}
void moveDown(){
menuIndex++;
if(menuIndex>=menuLength){
menuIndex=0;
}
displayMenu();
}