О модуле

Этот модуль содержит функции для работы с цифровыми относительными поворотными энкодерами. Функции этого модуля организованы в следующие категории:
Ключевые концепции
Цифровой относительный поворотный энкодер - это электромеханическое устройство, которое преобразует угловое положение или движение вала или оси в цифровой сигнал. Выход предоставляет информацию о движении вала, которая обычно дополнительно обрабатывается в информацию о скорости, расстоянии и положении.
Энкодеры используются во многих приложениях, требующих точного неограниченного вращения вала, включая промышленное управление, робототехнику, специальные фотографические объективы, устройства ввода компьютера (такие как оптомеханические мыши и трекболы), реометры с управляемым напряжением и вращающиеся радарные платформы.
Цифровые относительные поворотные энкодеры используют два выхода, называемые A и B, которые называются квадратурными выходами, поскольку они сдвинуты по фазе на 90 градусов. Сигнал A известен как тактовый, а B как данные.

Две выходные формы волны сдвинуты по фазе на 90 градусов, что означает квадратуру. Эти сигналы декодируются для создания импульса счета вверх или импульса счета вниз. Для декодирования Lua RTOS использует прерывания и машинное состояние, которое фильтрует недопустимые комбинации.
Встроенные переключатели энкодера генерируют квадратурную форму волны во время вращения. В моменты замыкания и размыкания контактов возникает шум, из-за которого направление или шаг вращения могут определяться неверно без фильтрации.

Фильтрация шума с помощью дополнительного оборудования проще и останавливает шум у его источника.

Предлагаемые значения: подтягивающий резистор R = 10 K, R = 0, C = 100 нФ.
Функции настройки
instance = encoder.attach(A, B, SW, [callback])
Подключить энкодер.
Аргументы:
- A: GPIO, к которому подключен сигнал A энкодера. Используйте pio.GPIOx, определенный для этой цели.
- B: GPIO, к которому подключен сигнал B энкодера. Используйте pio.GPIOx, определенный для этой цели.
- SW: GPIO, к которому подключен сигнал SW (переключатель) энкодера. Используйте pio.GPIOx, определенный для этой цели. Используйте nil для этого аргумента, если вы не хотите использовать переключатель.
- callback (необязательно): функция обратного вызова для получения информации об изменениях энкодера. Эта функция принимает 3 аргумента: направление (целое число, которое сообщает нам, вращается ли энкодер по часовой стрелке = 1, против часовой стрелки = -1 или статичен = 0), счетчик (значение энкодера) и кнопка (целое число, которое сообщает нам, нажата ли кнопка, 1 = нажата, 0 = не нажата).
Возвращает: экземпляр энкодера или исключение. Вы должны сохранить этот экземпляр в переменную для дальнейших операций с ним.
function callback(dir, counter, button)
print("направление: "..dir..", счетчик: "..counter..", кнопка: "..button)
end
-- Подключить энкодер с A=pio.GPIO26, B=pio.GPIO14, SW=pio.GPIO21.
-- Использование обратного вызова для получения изменений энкодера.
enc = encoder.attach(pio.GPIO26, pio.GPIO14, pio.GPIO21, callback)
instance:detach()
Отключить энкодер и освободить все ресурсы, используемые энкодером.
Аргументы: нет. Возвращает: ничего или исключение.
enc:detach()
Операционные функции
instance:read()
Считать позицию энкодера и состояние переключателя. Когда энкодер подключен, позиция равна 0. Если энкодер вращается по часовой стрелке, позиция увеличивается на 1. Если энкодер вращается против часовой стрелки, позиция увеличивается на -1. Если состояние переключателя равно 1, он нажат, а если 0, то не нажат.
Аргументы: нет Возвращает: текущую позицию энкодера и состояние переключателя или ничего.
-- Считать позицию
enc:read()
instance:write(position)
Установить позицию энкодера в указанную позицию.
Аргументы: нет Возвращает: ничего
-- Установить позицию
enc:write(10)