Я хочу повторно использовать и расширить класс вращающегося энкодера и просто хотел добавить переключатель с помощью процедура обратного вызова прерывания. Но всегда выдает ошибку:
Код: Выделить всё
from rotary_encoder.rotary_irq_esp import RotaryIRQ
from machine import Pin
class RotaryEncoder(RotaryIRQ):
# rotary options
RANGE_MODE = const(1) # 1->UNBOUNDED, 2->WRAP, 3->BOUNDED
PIN_CLK = const(7)
PIN_DT = const(8)
PULL_UP = True
# switch options
PIN_SWITCH = const(6)
PULL_UP_SWITCH = True
def __init__(self, pin_num_clk=PIN_CLK, pin_num_dt=PIN_DT, min_val=0, max_val=10, incr=1,range_mode=RANGE_MODE, pull_up=PULL_UP,pin_switch=PIN_SWITCH,pull_up_switch=PULL_UP_SWITCH):
super().__init__(pin_num_clk, pin_num_dt, min_val, max_val, incr, range_mode, pull_up)
# add switch
if pull_up_switch:
self.switch = Pin(pin_switch,Pin.IN, Pin.PULL_UP)
self.switch.irq(trigger=Pin.IRQ_FALLING, handler=self._rotary_switch_callback)
else:
self.switch = Pin(pin_switch,Pin.IN, Pin.PULL_DOWN)
self.switch.irq(trigger=Pin.IRQ_RISING, handler=self._rotary_switch_callback)
def _rotary_switch_callback(self):
pass
Ошибка:
TypeError: функция принимает 1 позиционный аргумент, но 2 были заданы
Я попробовал несколько вещей, но ничего не помогло.
В другом компоненте я увидел определение функции обратного вызова внутри класса без аргумента (self). Здесь это также не сработает (и, кстати, меня очень смущает, почему функция внутри класса, которая не является статическим методом или методом класса, существует без аргумента (self) - но это уже другая тема
Я пробовал
Код: Выделить всё
handler=self._rotary_switch_callback)
handler=_rotary_switch_callback)
def _rotary_switch_callback(self):
def _rotary_switch_callback():
Код: Выделить всё
def rotary_switch_callback(rotary_switch):
pass
rotary_switch = Pin(6,Pin.IN, Pin.PULL_UP)
rotary_switch.irq(trigger=Pin.IRQ_FALLING, handler=rotary_switch_callback)
Код: Выделить всё
self.switch = Pin(pin_switch,Pin.IN, Pin.PULL_DOWN)
self.switch.irq(trigger=Pin.IRQ_RISING, handler=self._rotary_switch_callback)
def _rotary_switch_callback(self, self.switch):
pass
Подробнее здесь: https://stackoverflow.com/questions/786 ... type-error