#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
bool FLAG_SELECT = false;
bool FLAG_BTN = false;
#define BTN_UP 1
#define BTN_DOWN 2
#define BTN_LEFT 3
#define BTN_RIGHT 4
#define BTN_SELECT 5
#define BTN_NONE 10
int keyButtons = A0;
//----- Определение кнопок -----
int detectButton(int analog) {
int keyAnalog = analogRead(analog);
Serial.println(keyAnalog);
if (keyAnalog == 1003 && !FLAG_BTN) {
//нажата кнопка right
FLAG_BTN = true;
return BTN_RIGHT;
} else if(keyAnalog !=1003 && FLAG_BTN){
FLAG_BTN = false;
}
if (keyAnalog ==1020 && !FLAG_BTN) {
// нажата кнопка UP
FLAG_BTN = true;
return BTN_UP;
} else if(keyAnalog !=1020 && FLAG_BTN){
FLAG_BTN = false;
}
if (keyAnalog ==1016 && !FLAG_BTN) {
// нажата кнопка DOWN
FLAG_BTN = true;
return BTN_DOWN;
} else if(keyAnalog !=1016 && FLAG_BTN){
FLAG_BTN = false;
}
if (keyAnalog == 1013 && !FLAG_BTN) {
// нажата кнопка LEFT
FLAG_BTN = true;
return BTN_LEFT;
} else if(keyAnalog !=1013 && FLAG_BTN){
FLAG_BTN = false;
}
if (keyAnalog ==990 && !FLAG_BTN) {
// нажата кнопка SELECT
FLAG_BTN = true;
return BTN_SELECT;
} else if(keyAnalog !=990 && FLAG_BTN){
FLAG_BTN = false;
}
/*else {
// Все остальные значения будут означать, что нажатий не было
return BTN_NONE;
}*/
return BTN_NONE;
}
void clearLine(int line){
lcd.setCursor(0, line);
lcd.print(" ");
}
void printDisplay(String message){
clearLine(0);
Serial.println(message);
lcd.setCursor(0, 0);
lcd.print(message);
}
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
Serial.begin(9600);
}
void loop() {
int button = detectButton(keyButtons);
switch (button) {
case BTN_UP:
printDisplay("UP");
break;
case BTN_DOWN:
printDisplay("DOWN");
break;
case BTN_LEFT:
printDisplay("LEFT");
break;
case BTN_RIGHT:
printDisplay("RIGHT");
break;
case BTN_SELECT:
printDisplay("SELECT");
break;
default:
//printDisplay("Press any key");
break;
}
}