我对 Python 和 Raspberry 业务还很陌生,目前正在开发我的第一个主要应用程序。我喜欢 gpiozero 以及自始至终处理事件的能力。
我想让我的代码“事件驱动”和“实际上”(也许)只有一个美丽的问题。 我想组合查询不同的状态。例子:
BTN1 + BTN2 => 活动 1
BTN1 + !BTN2 => 活动 2
BTN3 + BTN1 => 活动 3 等
有没有一种很好的方法来组合这里的信号?
我看到你可以做这样的事情:
led.source = all_values(btn1, btn2)
然而,这对我来说还不够;无论如何我都必须调用我自己的函数。
我目前唯一的想法是这样的:
button1 = Button(1)
button2 = Button(2)
def check_btns():
if button1.is_pressed && button2.is_pressed:
btn1_btn2_pressed()
def btn1_btn2_pressed():
print("Both pressed")
button1.when_pressed = check_btns
button2.when_pressed = check_btns
有人知道组合查询事件的更优雅的解决方案吗?
问候
不确定我是否理解这个问题,但这就是......
您可以使用位掩码,其中每个位代表每个按钮的状态。例如:
0b1010
|||^- button 1 state
||^-- button 2 state
|^--- button 3 state
^---- button 4 state
然后您可以使用这些值作为字典中的键,其中值是函数:
def four_and_one():
print("Buttons 1 and 4 pressed")
def two():
print("Button 2 pressed")
funcs = {
0b1001: four_and_one
0b0010: two
...
}
然后,在检查按钮时构建蒙版:
def check_btns():
mask = button1.is_pressed | \
button2.is_pressed << 1 | \
button3.is_pressed << 2 | \
button4.is_pressed << 3
if mask in funcs:
funcs[mask]()