#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int menuind = 0;
int levelind = 0;
int clicks = 0;
String menu[] = {"Play","Options","About Program","Exit"};
const int menuleght = sizeof(menu) / sizeof(menu[0]);
String options[] = {"Difficulty","Graphic","Show all clicks","Exit"};
const int optionsleght = sizeof(options) / sizeof(options[0]);
String aboutprog[] = {"FIO","Group","City","Exit"};
const int aboutprogleght = sizeof(aboutprog) / sizeof(aboutprog[0]);
unsigned long lpt = 0;
const unsigned long dd = 200;
void setup(){
lcd.init();
lcd.backlight();
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
display();
}
void display(){
lcd.clear();
if(levelind == 0){
lcd.setCursor(0,0);
lcd.print(">");
lcd.print(menu[menuind]);
if(menuind + 1 < menuleght){
lcd.setCursor(0,1);
lcd.print(" ");
lcd.print(menu[menuind + 1]);
}
}
else if (levelind == 1){
lcd.setCursor(0,0);
lcd.print(">");
lcd.print(options[menuind]);
if(menuind + 1 < optionsleght){
lcd.setCursor(0,1);
lcd.print(" ");
lcd.print(options[menuind + 1]);
}
}
else if (levelind == 2){
lcd.setCursor(0,0);
lcd.print(">");
lcd.print(aboutprog[menuind]);
if(menuind + 1 < aboutprogleght){
lcd.setCursor(0,1);
lcd.print(" ");
lcd.print(aboutprog[menuind + 1]);
}
}
}
void loop(){
if(millis() - lpt > dd){
if(digitalRead(2) == 0){
if(menuind > 0){
clicks++;
menuind--;
display();
}
lpt = millis();
}
if(digitalRead(3) == 0){
clicks++;
selectopt();
lpt = millis();
}
if(digitalRead(4) == 0){
clicks++;
if(levelind == 0 && menuind < menuleght - 1){
menuind++;
display();
} else if (levelind == 1 && menuind < menuleght - 1){
menuind++;
display();
} else if (levelind == 2 && menuind < menuleght - 1){
menuind++;
display();
}
lpt = millis();
}
}
}
void selectopt(){
if(levelind == 0){
if(menuind == 1){
levelind = 1;
menuind == 0;
display();
}
else if(menuind == 0){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Wokwi sim");
lcd.setCursor(0,1);
lcd.print("MircoSys Menu");
delay(2000);
display();
}
else if(menuind == 3){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Bye Bye");
delay(2000);
lcd.clear();
lcd.noBacklight();
}
else if (menuind == 2){
levelind = 2;
menuind = 0;
display();
}
}
else if ( levelind == 2){
if(menuind == 0){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Rudakov Andrew");
delay(1000);
display();
}
if(menuind == 1){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("73-KD9-3KCK");
delay(1000);
display();
}
if(menuind == 2){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Krasnodar");
delay(1000);
display();
}
if(menuind == 3){
levelind = 0;
menuind = 0;
display();
}
}
else if (levelind == 1){
if(menuind == 0){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Diff Setting");
delay(1000);
display();
}
if(menuind == 1){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Grap Settings");
delay(1000);
display();
}
if(menuind == 2){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("All clicks: ");
lcd.print (clicks);
delay(2000);
display();
}
if(menuind == 3){
levelind = 0;
menuind = 0;
display();
}
}
}