我对 Python 或多或少还是个新手,但在 OOP 方面仍然有些挣扎(来自 C - 而不是 C++)。 我想重用并扩展旋转编码器类,只想添加一个带有中断回调例程的开关。但它总是抛出错误:
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
你知道为什么它不起作用吗?
错误是: 类型错误:函数需要 1 个位置参数,但给出了 2 个
我尝试了几件事,但没有任何效果。 在另一个组件中,我在类中看到了一个没有(自身)参数的回调函数定义。这在这里也不起作用(顺便说一句,让我很困惑为什么类中的函数不是静态方法或类方法,而没有(自我)参数 - 但这是另一个主题:-)
我试过了
handler=self._rotary_switch_callback)
handler=_rotary_switch_callback)
def _rotary_switch_callback(self):
def _rotary_switch_callback():
我不知道什么是
self.switch.irq()
,但它似乎用一些额外的参数执行你的函数 - 例如PIN
- 你必须得到它
def _rotary_switch_callback(self, parameter):
如果您不知道它将发送多少参数以及是否会发送位置参数或命名参数,那么您可以使用流行的
*args, **kwargs
def _rotary_switch_callback(self, *args, **kwargs):
print('args:', args)
print('kwargs:', kwargs)