diff --git a/src/uEncoderVirt.h b/src/uEncoderVirt.h index 36e12dd..724edcd 100644 --- a/src/uEncoderVirt.h +++ b/src/uEncoderVirt.h @@ -192,7 +192,13 @@ class uEncoderVirt { // опросить энкодер без смены состояния State pollRaw(bool e0, bool e1, bool pressed = false) { - if (!(_e0 ^ _e1 ^ e0 ^ e1)) return State::Idle; + // изменились обе ноги - сэмпл пропущен, направление неизвестно. + // синхронизируемся, иначе следующий переход посчитается от старых + // значений и даст поворот в обратную сторону + if (!(_e0 ^ _e1 ^ e0 ^ e1)) { + _e0 = e0, _e1 = e1; + return State::Idle; + } (_e1 ^ e0) ? ++_pos : --_pos; _e0 = e0, _e1 = e1;