我目前正在开发Node-RED网络应用程序,通过切换按钮控制多个LED。接下来,使用Python脚本读取LDR值。该值将用于确定外部是亮还是暗。当天黑时,必须启用一个led,其他人禁用,反之则相反。
#!/usr/bin/env python
import cgitb ; cgitb.enable()
import spidev
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.setup(18, GPIO.OUT)
GPIO.setup(27, GPIO.OUT)
GPIO.setup(22, GPIO.OUT)
spi = spidev.SpiDev() # create spi object
spi.open(0,0) # open spi port 0, device CS0 pin 24
# read SPI data 8 possible adc's (0 thru 7)
def readadc(adcnum):
if ((adcnum > 7) or (adcnum < 0)):
return -1
r = spi.xfer2([1,(8+adcnum)<<4,0])
adcout = ((r[1]&3) << 8) + r[2]
return adcout
正如您所看到的,由于while循环,此脚本的其余部分将继续运行。
while True:
tmp0 = readadc(0) # read channel 0
if(tmp0 > 500):
msg = "LIGHT"
GPIO.output(17, False)
else:
msg = "DARK"
GPIO.output(17, True)
GPIO.output(18, False)
GPIO.output(22, False)
GPIO.output(27, False)
time.sleep(0.3)
print msg
最后,我不能同时使用这两者。一旦我点击一个开关,LED将持续1秒钟。我需要找到一种方法来结合两种方法。有什么提示吗?
答案 0 :(得分:0)
IF 您想要的是光照条件决定初始LED状态,以及在光照条件发生变化时更新状态;但是在光照条件发生变化之前,开关要覆盖它们,这应该有所帮助:
light_set = None
while True:
tmp0 = readadc(0) # read channel 0
if(tmp0 > 500) and light_set != "LIGHT":
msg = "LIGHT"
light_set = msg
GPIO.output(17, False)
else if light_set != "DARK":
msg = "DARK"
light_set = msg
GPIO.output(17, True)
GPIO.output(18, False)
GPIO.output(22, False)
GPIO.output(27, False)
time.sleep(0.3)
print msg
这应该&#34;记住&#34;这个代码部分最后设置的是什么,所以如果用交换机改变了它,它就不会继续设置它。当目前的光照条件不是它最后设定的时候,它仍会改变它。