Найти тему
Электроника, ESP32, Arduino

Подключение энкодера к аналоговому входу ESP32 - часть 2.

Подробности работы схемы подключения энкодера были описаны в прошлой статье, а здесь мы разберемся как обработать полученную информацию.

Схема подключения
Схема подключения

Как запендюрить энкодер на аналоговый вход ESP32 - часть 1

Для этого необходимо проанализировать данные получаемые при работе схемы и программы:

Набор чисел
Набор чисел

Ступенька возникающая при одновременном замыкании контактов AB-CB совсем короткая, а поскольку схема работает в режиме постоянного опроса её можно иногда и пропустить - тогда:

  • Последовательность чисел при вращении туда: 3-2-1 или 3-1;
  • Последовательность чисел при вращении обратно: 1-2-3 или 1-3;
  • Нажата кнопка: 0;
  • Ничего не нажато: 2;

Затолкаем последовательности для вращения в одно 1 байтовое число. (по 2 бита на каждое значение).

Последовательности для определения направления вращения ручки
Последовательности для определения направления вращения ручки

Получается четыре различных комбинации, однозначно определяющих куда повернули ручку. От кнопки будем получать событие "клац" (т.е. при нажатии кнопки код выполняется ТОЛЬКО ОДИН раз).

Засунуть анализ стояния удобно в процедуру void - ведь определив, что именно произошло с энкодером оттуда можно вывалиться в любой момент используя оператор return; и встроить её в дальнейшем в механизм прерываний по таймеру.

Алгоритм работы программы
Алгоритм работы программы

При повороте энкодера выяснился один неприятный момент - поворачивая ручку до щелчка, можно её чуть-чуть перекрутить, что закинет 1 лишний ложный (3-2 или 1-2) импульс в систему. При этом ручка может неожиданно сменить направление вращения. Чтобы избавиться от этого неприятного момента, в программу пришлось добавить таймер, который будет удалять этот "чутьНедоПерекрут, примерно через 100 мс. после того как ручку оставили в покое.

Код процедуры получился не сильно сложный,

Переменные
Переменные
Код процедуры
Код процедуры

Для того, чтобы не пропустить события при вращении энкодера рукой, вызывать процедуру необходимо примерно каждые 1-2 мс.

Установки и главный цикл
Установки и главный цикл

Результат работы программы:

-8

Теперь можно попробовать встроить процедуру в прерывание по таймеру, но это уже в следующей статье.

-9

Код доступен тут - у кого есть энкодер и ESP32 можете побаловаться.

analog_encoder_v5.zip

Оглавление канала тут:

Всем удачи!