From 68dbff58d993afe29e1bef0880b5f63ccc321b1f Mon Sep 17 00:00:00 2001 From: Dkx <45234736+dkxmercury@users.noreply.github.com> Date: Fri, 17 Jul 2026 16:48:37 +0500 Subject: [PATCH] =?UTF-8?q?fix:=20=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE?= =?UTF-8?q?=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=20=D0=BF=D1=80=D0=BE=D0=BF=D1=83=D1=81?= =?UTF-8?q?=D0=BA=D0=B5=20=D1=81=D1=8D=D0=BC=D0=BF=D0=BB=D0=B0=20=D0=B2=20?= =?UTF-8?q?pollRaw?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Если между опросами изменились обе ноги, направление определить нельзя, но _e0/_e1 не обновлялись. Следующий переход считался от старых значений и давал щелчок в обратную сторону при вращении в одну сторону, а в Step2/Step4 сбивался счёт до детента и щелчки терялись. Теперь при пропуске сэмпла состояние ног синхронизируется, щелчок не выдаётся. Шаг теряется, но разворота нет. --- src/uEncoderVirt.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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;