Raspberry Pi python脚本没有关闭LED

时间:2017-01-11 15:27:59

标签: python raspberry-pi3

(第一篇文章) 我只是通过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()

2 个答案:

答案 0 :(得分:0)

您可能希望使用herehere所示的事件。

基本上,事件会中断正常操作。在这种情况下,我假设你的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破坏。