GyverLibs/EncButton

Не работают прерывания, как следует на stm32

brightproject opened this issue · 1 comments

Добавил работу с кликами в шаблон примера и задержку в 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.
Сам пробовал опрашивать энкодер в этой секции и ничего не работало.

библиотека EncButton позволяет опрашивать энкодер из void setup

Это не от библиотеки зависит, а от программиста

void setup() {
  while(true) {
    enc.tick();
    // if (click hold ..) break;
  }
}