(第一篇文章) 我只是通过wifi连接在笔记本电脑上设置了一个带有监视器视图的覆盆子pi 3。
我在面包板上设置了两个LED灯和一个按钮开关。
我可以打开闪烁的灯,但不能用同一个按钮关闭序列。
我感觉我没有正确地结束我的while循环。仍然学习所以任何帮助将不胜感激。
这是我的代码:
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT, initial=0) # Blue LED
GPIO.setup(17, GPIO.OUT, initial=0) # Orange LED
GPIO.setup(7, GPIO.IN) # Button switch
onoff = 0
try:
while onoff ==1:
if onoff==1:
GPIO.output(25, 1)
GPIO.output(17, 0)
time.sleep(0.2)
GPIO.output(25, 0)
GPIO.output(17, 1)
time.sleep(0.2)
if GPIO.input(7)==1:
if onoff==0:
onoff = 1
else:
onoff = 0
except KeyboardInterrupt:
GPIO.cleanup()
答案 0 :(得分:0)
基本上,事件会中断正常操作。在这种情况下,我假设你的onoff
变量代码用作“开关”开关,以确定是否用输出执行代码的那一部分。
解决方案是无限循环您想要执行的代码,但只有在onoff
为1(True)时才执行它。每次按下7中的按钮,您的代码将被“中断”,并且将调用另一个函数,将onoff
切换到相反的状态。您的代码可能看起来像这样:
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT, initial=0) # Blue LED
GPIO.setup(17, GPIO.OUT, initial=0) # Orange LED
GPIO.setup(7, GPIO.IN) # Button switch
onoff = 0
def on_off_switch(channel):
# Flip between 0 (False) and 1 (True)
onoff = not onoff
# This "event" calls on_off_switch whenever it detects a rising edge on 7
GPIO.add_event_detect(7, GPIO.RISING, callback=on_off_switch)
try:
# Infinite loop
while True:
# Only do stuff if onoff is 1 (True)
if (onoff):
GPIO.output(25, 1)
GPIO.output(17, 0)
time.sleep(0.2)
GPIO.output(25, 0)
GPIO.output(17, 1)
time.sleep(0.2)
except KeyboardInterrupt:
GPIO.cleanup()
答案 1 :(得分:0)
while
循环仅在onoff == 1
时运行。第一次按下按钮时,它会设置为0
,因此循环退出,并且不再检查按钮输入。你希望你的循环是无限的(即while True:
),因此只能由KeyBoardInterrupt
破坏。