#define ENCODER_CLK 2
#define ENCODER_DT 3
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
int lastClk = HIGH; // Отклик энкодера
int menuPos = 1; // Переменная меню
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("TESTING");
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
}
void loop() {
int newClk = digitalRead(ENCODER_CLK); // Читаем новое значение с энкодера
if (newClk != lastClk) { // Если оно отличается от старого то
lastClk = newClk; // присваиваем новое в старое
int dtValue = digitalRead(ENCODER_DT); // Считываем направление
if (newClk == LOW && dtValue == HIGH) { // Если отклик был и dtValue высокое, то это лево
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("LEFT");
menuPos++;
if (menuPos > 3) {
menuPos = 1;
}
if (menuPos < 1) {
menuPos = 3;
}
lcd.setCursor(0, 1);
lcd.print(menuPos);
}
if (newClk == LOW && dtValue == LOW) { // Если отклик был и dtValue низкое, то это право
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("RIGHT");
menuPos--;
if (menuPos > 3) {
menuPos = 1;
}
if (menuPos < 1) {
menuPos = 3;
}
lcd.setCursor(0, 1);
lcd.print(menuPos);
}
}
}