Да, заменить энкодер кнопками очень просто. Особенно на библиотеках Гайвера
Что надо понимать:
1) Надо найти все обработчики событий энкодера и заменить их соответствующими событиями кнопок.
2) События обработки энкодера могут быть в разных местах!
Все.
По примеру. есть переменная , которая меняет свое значение от 0 до 255 , после 255 дает 0 - циклично, и так же в обратную сторону.
Поворот энкодера в одну сторону увеличивает на 1 значение переменной, в другую уменьшает. Физическим представлением для переменной может быть пункт меню, значение для яркости светодиода, скорость вращения двигателем и т.п.
Изменение происходит в строках 33 и 34. строка 32 обрабатывает состояние энкодера. Именно эти строки надо заменить на строки обработки кнопок (строки 38 и 39) и на действия по нажатию кнопок (строки 40 и 41). В строках 40 и 41 в условие я еще добавил событие isStep -на мой взгляд очень удобная штука, позволяет менять значение переменных не кликами , а удержанием кнопки. Интервал изменения настраивается в строках 26-27.
Да, пример "за уши притянут" , пины я использую разные у кнопок и энкодера, не обрабатываю кучу событий, типа поворота с нажатием. Поверьте, это не сложно добавить, комбинируя состояния кнопок.
В начале кода стоит 2 строки, которые позволяют отдельно использовать либо кнопки, либо энкодер. Закоментировав любую из них получится полностью удалить выбранные элементы из конечного кода программы.
PS. Такие вопросы встречаются часто. Не знаю стоит ли на них отвечать, но решил ответить. Это только один пример КАК сделать такое. Для других библиотек с энкодером может потребоваться несколько другая тактика, можно попробовать продолжить тему на реальных примерах.
Что надо понимать:
1) Надо найти все обработчики событий энкодера и заменить их соответствующими событиями кнопок.
2) События обработки энкодера могут быть в разных местах!
Все.
По примеру. есть переменная , которая меняет свое значение от 0 до 255 , после 255 дает 0 - циклично, и так же в обратную сторону.
Поворот энкодера в одну сторону увеличивает на 1 значение переменной, в другую уменьшает. Физическим представлением для переменной может быть пункт меню, значение для яркости светодиода, скорость вращения двигателем и т.п.
Изменение происходит в строках 33 и 34. строка 32 обрабатывает состояние энкодера. Именно эти строки надо заменить на строки обработки кнопок (строки 38 и 39) и на действия по нажатию кнопок (строки 40 и 41). В строках 40 и 41 в условие я еще добавил событие isStep -на мой взгляд очень удобная штука, позволяет менять значение переменных не кликами , а удержанием кнопки. Интервал изменения настраивается в строках 26-27.
Да, пример "за уши притянут" , пины я использую разные у кнопок и энкодера, не обрабатываю кучу событий, типа поворота с нажатием. Поверьте, это не сложно добавить, комбинируя состояния кнопок.
В начале кода стоит 2 строки, которые позволяют отдельно использовать либо кнопки, либо энкодер. Закоментировав любую из них получится полностью удалить выбранные элементы из конечного кода программы.
C++:
#define USE_BUTTON
#define USE_ENCODER
// эта часть отвечает за кнопки
#define BTN_L_PIN 3
#define BTN_R_PIN 9
#include "GyverButton.h"
GButton Btn_L(BTN_L_PIN, HIGH_PULL);
GButton Btn_R(BTN_R_PIN , HIGH_PULL);
// эта часть отвечает за поворот энкодера
#define CLK 4
#define DT 5
#include "GyverEncoder.h"
Encoder enc1(CLK, DT);
uint8_t per = 0;
uint8_t old_per = 1;
void setup() {
Serial.begin(115200);
// настройка энкодера
enc1.setType(TYPE2);
// настройка кнопок
Btn_L.setStepTimeout(100);
Btn_R.setStepTimeout(100);
}
void loop() {
// изменение переменной энкодером
enc1.tick();
if (enc1.isRight()) per++;
if (enc1.isLeft()) per--;
// изменение переменной кнопками
Btn_R.tick();
Btn_L.tick();
if (Btn_R.isClick() || Btn_R.isStep()) per++;
if (Btn_L.isClick() || Btn_L.isStep()) per--;
// общая для всех типпо изменения переменной обработка результатов
if (old_per != per)
{
old_per = per;
Serial.println(per);
}
}