#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define b1 7
#define b2 6
#define b3 5
LiquidCrystal_I2C lcd(0x27,16,2);
int menuindex=0;
int menulev=0;
int upCounter = 0;
int downCounter = 0;
int selectCounter = 0;
int allCounter = 0;
String menu[]{
"settings",
"information",
"noBlackLight",
};
const int menulength = sizeof(menu) / sizeof(menu[0]);
String menuInfo[]{
"FIO",
"Group",
"Buttons",
"back",
};
const int menuInfolength = sizeof(menuInfo) / sizeof(menuInfo[0]);
String menuSettings[]{
"Light.set",
"Contrast",
"back",
};
const int menuSettingslength = sizeof(menuSettings) / sizeof(menuSettings[0]);
unsigned long lastPressTime = 0;
unsigned long currentTime = 0;
const unsigned long debounceDelay = 300;
void setup() {
lcd.init();
lcd.backlight();
Serial.begin(115200);
pinMode(7, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
dis();
}
void loop() {
currentTime = millis();
if (currentTime - lastPressTime >= debounceDelay) {
if (digitalRead(b2) == LOW) {
DW();
lastPressTime = currentTime;
downCounter++;
allCounter++;
Serial.println(menuindex);
}
}
if (currentTime - lastPressTime >= debounceDelay) {
if (digitalRead(b1) == LOW) {
UP();
lastPressTime = currentTime;
upCounter++;
allCounter++;
Serial.println(menuindex);
}
}
if (currentTime - lastPressTime >= debounceDelay) {
if (digitalRead(b3) == LOW) {
sel();
lastPressTime = currentTime;
allCounter++;
selectCounter++;
Serial.println(menuindex);
}
}
}
void dis(){
lcd.clear();
if(menulev==0){
lcd.setCursor(0,0);
lcd.print(">"+ menu[menuindex]);
if(menuindex+1<menulength){
lcd.setCursor(0,1);
lcd.print(" " + menu[menuindex+1]);
}
}
else if(menulev==1){
lcd.setCursor(0,0);
lcd.print(">"+ menuSettings[menuindex]);
if(menuindex+1<menuSettingslength){
lcd.setCursor(0,1);
lcd.print(" "+ menuSettings[menuindex+1]);
}
}
else if(menulev==2){
lcd.setCursor(0,0);
lcd.print(">"+ menuInfo[menuindex]);
if(menuindex+1<menuInfolength){
lcd.setCursor(0,1);
lcd.print(" "+ menuInfo[menuindex+1]);
}
}
}
void UP(){
delay(200);
menuindex--;
if(menuindex<0){
menuindex=3;
}
dis();
}
void DW(){
delay(200);
menuindex++;
if(menuindex>=4){
menuindex=0;
}
dis();
}
void sel(){
if(menulev==0){
if(menuindex==0){
menulev=1;
menuindex=0;
dis();
}
if(menuindex==2){
//menulev=1;
//menuindex=0;
lcd.noBacklight();
} if(menuindex==1){
menulev=2;
menuindex=0;
dis();
}
}
//
else if(menulev==1){
if(menuindex==0){
dis();
}if(menuindex==2){
menulev=0;
menuindex=0;
dis();
}
}
else if(menulev==2){
if(menuindex==0){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Terehov");
delay(500);
dis();
}if(menuindex==1){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("63-D9-KCK");
delay(500);
dis();
}else if(menuindex==2){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("UP="+String(upCounter)+" DW="+String(downCounter));
lcd.setCursor(0,1);
lcd.print("all="+String(allCounter)+" sel="+String(selectCounter));
}
if(menuindex==3){
lcd.clear();
menulev=0;
menuindex=0;
dis();
}
}
}//до сюда работает вход меню первого массива