Raspberry Pi-使用线程回调来暂停主循环

时间:2016-12-15 03:45:44

标签: multithreading python-2.7 raspberry-pi gpio raspberry-pi3

这是我的代码:

    #import the GPIO and time package
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(3, GPIO.OUT)
def hold(channel):
    GPIO.output(3, True)
    time.sleep(5)
    GPIO.output(3, False)

GPIO.add_event_detect(2, GPIO.FALLING, callback=hold, bouncetime=300)
try:
    while True:
        GPIO.output(3, True)
        time.sleep(1)
        GPIO.output(3, False)
        time.sleep(1)

except KeyboardInterrupt:
    GPIO.cleanup()

所以,我要做的就是点亮一下,但按下按钮后立即打开5秒钟,然后再从中断处继续。我尝试使用if语句进行普通事件检测,但由于我的主循环中的sleep()函数,在该时间过去之后才会发生任何事情,我希望它立即发生。我的问题是,有没有办法暂停主循环的执行(因为否则LED看起来像正常一样闪烁),还是有其他方法使用事件检测来实现它?

编辑:如果不清楚,按钮连接到引脚2,LED连接到引脚3

1 个答案:

答案 0 :(得分:0)

想出来。在我的回调函数中创建了一个全局布尔变量。在主循环打开或关闭灯之前,它确保布尔值未设置为true