// обработать кнопки
void keysRoutine() {
uint8_t a;
if (millis()-t5 > 20) {
t5 = millis();
a = pressKey();
if ((a == 1) && (pressed == 0)) { pressed = 1; alarmTimeInc(); t3 = millis(); }
if ((a == 0) && (pressed == 1)) { pressed = 0; }
if (a == 2) { modeHM = !modeHM; t3 = millis(); }
if (millis()-t3 > 5000) { modeAlarm = 0; modeKeyT = 1; } // выключаем режим установления времение будильника
}
}
uint8_t pressKey() {
int keyRead;
int static code;
if (millis()-t6 > 5) {
t6 = millis();
keyRead = analogRead(keyPin); // прочитали значение
if (keyRead < 128) code = 1;
if ((keyRead > 128) && (keyRead < 812)) code = 2;
return code;
}
}
Смотрю на гитхабе и ничего не вижу. Ни в GyverButton ни в EncButton.@Esteriman, гайвербатон вполне себе работает с аналоговыми кнопками, там даже примеры есть.
uint32_t tsKey = 0;
int keyRead, keyCode, oldCode;
void loop(){
keyRead = analogRead(keyPin);
if(keyRead < 128) keyCode = 0;
if(keyRead >= 128 && keyRead < 520) keyCode = 1;
if(keyRead >= 520 && keyRead < 620) keyCode = 2;
if(keyRead >= 620 && keyRead < 820) keyCode = 3;
if(keyCode != oldCode){ tsKey = millis(); oldCode = keyCode; } // Фиксируем изменение на входе
if(tsKey > 0 && millis() - tsKey > 50){ // Есть нажатие или отпускание, если keyCode = 0
switch(keyCode){ // обработаем
case 0: break;
case 1: break;
case 2: break;
case 3: break;
}
tsKey = 0; // Ждем нового изменения кода на входе
}
}
// Пример использования библиотеки GyverButton с аналоговой клавиатурой
// аналоговая клавиатура подключена на А7
// Схему смотри на странице библиотеки https://alexgyver.ru/gyverbutton/
// также она есть в папке с примером
#include "GyverButton.h"
// создаём кнопки без привязки к пину
GButton myButt1;
GButton myButt2;
GButton myButt3;
void setup() {
Serial.begin(9600);
// меняем тип на LOW_PULL, потому что по умолчанию стоит HIGH_PULL
myButt1.setType(LOW_PULL);
myButt2.setType(LOW_PULL);
myButt3.setType(LOW_PULL);
}
void loop() {
// читаем значение
int analog = analogRead(7);
// для начала нужно вывести и запомнить значение для каждой кнопки
//Serial.println(analog);
// проверяем у каждой кнопки свой диапазон (+- 20 от полученного значения)
myButt1.tick(analog < 860 && analog > 820);
myButt2.tick(analog < 740 && analog > 700);
myButt3.tick(analog < 650 && analog > 600);
// проверка на удержание, например
if (myButt1.isHolded()) {
Serial.println("hold 1");
}
if (myButt2.isHolded()) {
Serial.println("hold 2");
}
if (myButt3.isHolded()) {
Serial.println("hold 3");
}
delay(10); // задержка тут не нужна, чисто для вывода
}