#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int schetchik = 0;
int schetchik2 = 0;
void setup() {
//По дефолту все пины конфигурируются как входы, и
//при наличии внешних резисторов подтяжки всё, что ниже, можно не указывать
pinMode(11, INPUT);
pinMode(12, INPUT);
pinMode(9, INPUT);
pinMode(10, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
}
void loop() {
bool enc_A = digitalRead(11);
bool enc_B = digitalRead(12);
bool enc_C = digitalRead(9);
bool enc_D = digitalRead(10);
// Для первого энкодера
static bool enc_prev = enc_A; // Сохраняем текущее состояние энкодера A
if ( (!enc_A) && (enc_prev) ) {
if (enc_B) {
if (schetchik + 1)
schetchik += 1;
} else {
if (schetchik - 1 >= 0)
schetchik -= 1;
}
}
enc_prev = enc_A; // Обновляем сохраненное состояние энкодера A
float m = schetchik / 1.00;
lcd.setCursor(10, 1);
lcd.print(m);
// Для второго энкодера
static bool enc_prev2 = enc_C; // Сохраняем текущее состояние энкодера C
if ( (!enc_C) && (enc_prev2) ) {
if (enc_D) {
if (schetchik2 + 1)
schetchik2 += 1;
} else {
if (schetchik2 - 1 >= 0)
schetchik2 -= 1;
}
}
enc_prev2 = enc_C; // Обновляем сохраненное состояние энкодера C
float m2 = schetchik2 / 1.00;
lcd.setCursor(10, 0);
lcd.print(m2);
if (!digitalRead(7)) {
schetchik = 0; // Сброс счетчика schetchik при активации пина 7
}
if (!digitalRead(8)) {
schetchik2 = 0; // Сброс счетчика schetchik2 при активации пина 8
}
}