int btnM = 2;
int btnT = 3;
int btnK = 4;
uint8_t AB;
uint8_t ABOld;
void setup() {
// put your setup code here, to run once:
pinMode(btnM, INPUT); //переводим пин в режим входа
pinMode(btnT, INPUT); //переводим пин в режим входа
pinMode(btnK, INPUT); //переводим пин в режим входа
}
uint8_t GetAB() { // Функция устраняющая дребезг
static int count;
static int oldKeyValue; // Переменная для хранения предыдущего значения состояния кнопок
static int innerKeyValue;
uint8_t actualKeyValue = (digitalRead(btnM) || digitalRead(btnT) || digitalRead(btnK)); // Получаем актуальное состояние
if (innerKeyValue != actualKeyValue) { // Пришло значение отличное от предыдущего
count = 0; // Все обнуляем и начинаем считать заново
innerKeyValue = actualKeyValue; // Запоминаем новое значение
} else {
count += 1; // Увеличиваем счетчик
}
if ((count >= 100) && (actualKeyValue != oldKeyValue)) { // Счетчик преодолел барьер, можно иницировать смену состояний
oldKeyValue = actualKeyValue; // Присваиваем новое значение
}
return oldKeyValue;
}
void loop() {
// put your main code here, to run repeatedly:
AB = GetAB();
if (AB == 0) ABOld = 0;
if (AB != ABOld) {
// запоминаем значение кнопки
ABOld = AB;
if (digitalRead(btnM) != 0) Serial.println("M");
if (digitalRead(btnT) != 0) Serial.println("T");
if (digitalRead(btnK) != 0) Serial.println("K");
}
}