Не работают прерывания, как следует на stm32
brightproject opened this issue · 1 comments
brightproject commented
Добавил работу с кликами в шаблон примера и задержку в 2 секунды и все...код поплыл, тики считают только вращение энкодера.
Как быть с обработкой кнопки клика по энкодеру - ума не приложу.
// Пример с обработчиками в прерывании
#include <EncButton.h>
EncButton<EB_CALLBACK, PB4, PB3, PB10> enc; // энкодер с кнопкой <A, B, KEY>
void setup() {
Serial.begin(115200);
enc.attach(TURN_HANDLER, myTurn); // подключим поворот
enc.attach(CLICK_HANDLER, myClick); // подключим клик
// прерывание обеих фаз энкодера на функцию isr
attachInterrupt(PB4, isr, CHANGE);
attachInterrupt(PB3, isr, CHANGE);
attachInterrupt(PB10, isr, CHANGE);
}
void myTurn() {
Serial.print("TURN_HANDLER: ");
Serial.println(enc.counter);
Serial.print("DIR_HANDLER: ");
Serial.println(enc.dir()); // направление поворота
}
void myClick() {
Serial.print("CLICK_HANDLER: ");
Serial.println(enc.click());
}
void isr() {
enc.tickISR(); // тикер в прерывании
// Не вызывает подключенные коллбэки внутри прерывания!!!
}
void loop() {
enc.tick(); // дополнительный опрос таймаутов и коллбэков в loop
// вызов подключенных функций будет здесь,
// чтобы не грузить прерывание
delay(2000);
}
А вообще библиотека EncButton позволяет опрашивать энкодер из структуры?
void setup() {}
Например, хочу, чтобы в секции Setup было меню с дисклеймером, и нужно согласиться с ним или не сможешь устройством пользоваться.
Ни в одном из примеров не нашел, чтобы тикер был в секции Setup.
Сам пробовал опрашивать энкодер в этой секции и ничего не работало.