#include <LiquidCrystal_I2C.h>
#include <Encoder.h>
Encoder enc(2, 3);
LiquidCrystal_I2C lcd(0x27, 16, 2);
int menuind = 0;
int levelind = 0;
int clicks = 0;
int press = 0;
bool pressed;
int value = 0;
int oldpos = -999;
int val = 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();
Serial.begin(9600);
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){
int pos = enc.read()/4;
if (oldpos != pos){
value = pos - oldpos;
oldpos = pos;
if(value == 1){
menuind++;
}else if (value == -1){
menuind--;
}
if (menuind == 4){
menuind = 0;
}
if(menuind == -1){
menuind = 3;
}
Serial.println(menuind);
display();
}
if (digitalRead(4) == 0){
if (!pressed){
pressed = true;
press = millis();}
}else if (pressed){
unsigned long Duration = millis() - press;
Serial.println(Duration);
if (Duration > 500){
Serial.println("long");
levelind = levelind - 1;
if (levelind == -1){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Bye Bye");
delay(2000);
lcd.clear();
lcd.noBacklight();
}
display();
}else {
Serial.print("short");
clicks++;
selectopt();
}
pressed = false;
}
}
}
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();
}
}
}