当程序在raspberry pi 3上的rc.local中运行时,LED会自动点亮,但是一旦按下on按钮,它就会循环并正确运行。 LED需要在启动时关闭,然后在按下按钮时作出反应,而不是在启动后再打开。通过终端,一切正常。感谢您的帮助!
已经尝试过在rc.local中的一行之前放置一个sleep命令来运行该程序,以使系统完全启动,但是它仍然做同样的事情。在常开和常闭之间已将继电器颠倒了几次,并且代码仍然不起作用。
from time import sleep
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
buttonOn=16
buttonOff=12
LED1=22
GPIO.setup(buttonOn,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(buttonOff,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(LED1,GPIO.OUT,)
BS1=False
Default=1.2
def countdown(x):
while x > 0:
GPIO.output(LED1,True)
BS1=True
print x/5
x = x - 1
if (GPIO.input(buttonOff)==1 and BS1==True):
GPIO.output(LED1,False)
BS1=False
print("Off button pressed")
break
if x == 0:
GPIO.output(LED1,False)
print("Timer finished")
BS1=False
break
sleep(.2)
while(1):
if (GPIO.input(buttonOn)==1 and GPIO.input(buttonOff)==0 and BS1==False):
BS1=False
print("Power off")
sleep(.2)
elif (GPIO.input(buttonOn)==0 and BS1==False and Default==1.2):
print("Default")
countdown(50)
Default=1.1
elif (GPIO.input(buttonOn)==0 and BS1==False and Default!=1.2):
print("On button pressed")
Time=int(input('ENTER A TIME: '))
Time=Time*5
countdown(Time)
sleep(.2)
elif (GPIO.input(buttonOff)==1 and BS1==True):
print("Off button pressed")
BS1=False
sleep(.2)
预期结果是LED一直关闭直到按下开按钮,然后运行10秒钟计时器然后熄灭,但是,也可以在计时器期间通过按off按钮来关闭LED。这可以通过终端运行,但不能通过rc.local引导。通过rc.local,LED会自动点亮,直到按下“打开”按钮,然后计时器开始计时,并可能发生其他操作。