2016-12-15 33 views
0

这里是我的代码:树莓丕使用线程回调暂停主循环

#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

回答

0

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