我的Python代码目前正在循环,在我想要它重新循环之前,我真的希望能够检测到两个按钮中的一个。根据按下的按钮,应该执行代码的不同部分。
对于一个按钮,这将是这样的:
while True:
time.sleep(0.2)
GPIO.wait_for_edge(button_1, GPIO.FALLING)
run_button_1_code()
我如何才能为两个按钮执行此操作?我正在思考这个问题:
while True:
time.sleep(0.2)
GPIO.wait_for_edge(button_1, button_2, GPIO.FALLING)
if button_1 is pressed:
run_button_1_code()
elif button_2 is pressed:
run_button_2_code()
或许可选择:
def button_1():
GPIO.remove_event_detect(button1)
print "doing my code here"
GPIO.add_event_detect(button1, GPIO.BOTH, callback=button_1, bouncetime=800)
def button_2():
GPIO.remove_event_detect(button2)
print "doing my code here"
GPIO.add_event_detect(button2, GPIO.BOTH, callback=button_2, bouncetime=800)
While True:
time.sleep(0.05)
print "waiting for button"
我想不出任何其他选择..请指教!
答案 0 :(得分:1)
一般来说,与硬件交互时,有两种方法可以实现。如果计算机/操作系统允许中断跟踪,这将是您最好的选择。你基本上设置了一个子程序,让操作系统知道如果发生了一些有趣的事情,它就会等待被唤醒。
如果你在Raspberry PI上开发它,那么有一个Python库可以帮助完成这项工作:
GPIO.add_event_detect(GPIO_ONOFF, GPIO.FALLING, callback=quit_loop, bouncetime=300)
如果您使用的是其他系统,或者您希望获得更多控制权,那么设置第二个线程/进程是显而易见的选择。线程的工作方式与中断处理的工作方式大致相同。您设置了一个方法,然后让操作系统知道它应该独立运行。关键的区别在于线程/进程始终处于活动状态,必须被视为独立程序,而中断例程处于空闲状态直到需要它为止。
Process(target=processMessages).start()
这两个解决方案都在一个相关的问题中进行了讨论:
Raspberry Pi Python pause a loop sequence, when button pushed