这是我的代码:
#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 :(得分:0)
想出来。在我的回调函数中创建了一个全局布尔变量。在主循环打开或关闭灯之前,它确保布尔值未设置为true