Обработка энкодера

Всем добра.
Помогите разобраться.

Сейчас в терминал прилетают данные только после того как произойдет изменение значения в С31.
А надо чтобы постоянно шли данные.

И не совсем понял про (PCINT и чтение из PINn). Не вижу где этот ту реализовано, либо не реализовано. Важна скорость опроса.

За ранее спасибо.

// алгоритм с "таблицей", позволяющий увеличить точность энкодера
// в 4 раза, работает максимально чётко даже с плохими энкодерами.
// Для увеличения скорости опроса используйте PCINT и чтение из PINn

#define CLK 13 //D6
#define DT 14  //D7
long C31 = 0;
byte lastState = 0;
const int8_t increment[16] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0};
void setup() {
  Serial.begin(9600);
}
void dol() {
  byte state = digitalRead(CLK) | (digitalRead(DT) << 1);
  if (state != lastState) {
    C31 += increment[state | (lastState << 2)];
    lastState = state;
    Serial.print("Канал 30= "); Serial.println(C31);
  }
}

void loop() {
  
  dol();
  
  }

Строку 18 переместить в loop();

Изначально так и было. Результат тот же.
Я так подозреваю что в прежде чем попасть в С31, что-то должно произойти в byte state.

void loop() {
  byte state = digitalRead(CLK) | (digitalRead(DT) << 1);
  if (state != lastState) {
    C31+= increment[state | (lastState << 2)];
    lastState = state;
 Serial.print("Канал 30= "); Serial.println(C31);
  }
}

Ну как что? Смотри в строку 3 и понимай - state должен измениться. А это значит, что должны поменяться уровни на выводах CLK и DT.
Если 15 и 19 строки за комментировать, то оно будет в монитор “сыпать” всегда, даже когда ничего не изменилось.

Как то он так некорректно считать стал, типа на месте топчется.

Решил вопрос по итогу вот так

static uint32_t tmr1;
void dol() {
  byte state = digitalRead(CLK) | (digitalRead(DT) << 1);
  if (state != lastState)   {
    C31 += increment[state | (lastState << 2)];
    lastState = state;
  }
 

    Serial.print("Канал 31= "); Serial.println(C31);

  
}

В вашем варианте данные идут 1 раз в 100 мс (что не соответствует вашему же вопросу).

Да уже вижу.
Если убрать все задержки, то перестает считать, опять же топчется на месте.
Думаю пока.

Не думай, это висит монитор порта.

1 лайк