Python 当按下树莓皮上的按钮时,LED会持续闪烁吗?
我不懂Python,但我正在原型类中使用它。我想做的是使用RPi上的GPIO引脚点亮LED。我得到的那部分,没问题。但是现在我想添加一个按钮,当按下按钮时它会闪烁,然后在松开按钮后继续闪烁。这样地: LED灯亮起,按下按钮,LED灯熄灭,LED灯亮起,LED灯熄灭,LED灯亮起,LED灯熄灭,LED灯亮起,LED灯熄灭,LED灯亮起,一直亮起,一直亮起,直到永远。这就是我所拥有的:Python 当按下树莓皮上的按钮时,LED会持续闪烁吗?,python,raspberry-pi,raspbian,gpio,led,Python,Raspberry Pi,Raspbian,Gpio,Led,我不懂Python,但我正在原型类中使用它。我想做的是使用RPi上的GPIO引脚点亮LED。我得到的那部分,没问题。但是现在我想添加一个按钮,当按下按钮时它会闪烁,然后在松开按钮后继续闪烁。这样地: LED灯亮起,按下按钮,LED灯熄灭,LED灯亮起,LED灯熄灭,LED灯亮起,LED灯熄灭,LED灯亮起,LED灯熄灭,LED灯亮起,一直亮起,一直亮起,直到永远。这就是我所拥有的: import RPi.GPIO as GPIO import time def blink(pin):
import RPi.GPIO as GPIO
import time
def blink(pin):
GPIO.output(11, GPIO.LOW)
time.sleep(.2)
GPIO.output(11, GPIO.HIGH)
time.sleep(.2)
GPIO.output(11, GPIO.LOW)
time.sleep(.2)
GPIO.output(11, GPIO.HIGH)
time.sleep(.2)
GPIO.output(11, GPIO.LOW)
time.sleep(.2)
GPIO.output(11, GPIO.HIGH)
time.sleep(4)
def main():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
GPIO.setup(16, GPIO.IN)
GPIO.output(11, GPIO.HIGH)
while True:
if GPIO.input(16):
blink(11)
else:
pass
time.sleep(.1)
GPIO.cleanup()
if __name__ == "__main__":
main()
这似乎只会使它在按下按钮后立即闪烁,但不会持续闪烁
我怎样才能解决这个问题呢?你想让它停止闪烁吗?如果没有:
blinking = False
while True:
if GPIO.input(16):
blinking = True
if blinking:
blink(11)
time.sleep(.1)
最初您反复检查输入16(按钮状态),并在按钮关闭时调用blink()
函数一次;下次到达的顶部时,如果未设置输入16,则不会调用blink()
(如果您在不同的输入引脚上有第二个停止按钮,您可以添加另一个GPIO.input()
使用不同的数字进行检查,以将闪烁设置为false。)
请注意,您正在将输出管脚编号11传递给闪烁功能,但未使用传递的值;要使该功能更通用,您可以将其更改为:
def blink(pin):
GPIO.output(pin, GPIO.LOW)
time.sleep(.2)
GPIO.output(pin, GPIO.HIGH)
time.sleep(.2)
GPIO.output(pin, GPIO.LOW)
time.sleep(.2)
GPIO.output(pin, GPIO.HIGH)
time.sleep(.2)
GPIO.output(pin, GPIO.LOW)
time.sleep(.2)
GPIO.output(pin, GPIO.HIGH)
time.sleep(4)
你的问题很容易解释。当程序休眠时,它也会休眠。什么也不会发生。当您输入blink()
时,程序的其余部分将被阻止约5s。不会注意到按钮按下。此外,还将有一个4s的差距,什么也没有发生
您可以选择:
使用线程。线程可以同时运行代码。有关示例,请参见
在结束时以短时间(0.1s或更少)睡眠运行循环。在循环中检查按钮,每第n次重复按下并翻转LED引脚。将逻辑添加为仅在接通状态下闪烁
现在,我不想让它停止。最后,我会添加一个簧片开关,当它跳闸时会使它停止,但现在,我只希望它在我按下按钮后闪烁。给我一分钟试试这个。。。。