如何通过LDR和按钮控制LED?

时间:2016-03-08 21:52:43

标签: python raspberry-pi2

我目前正在开发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秒钟。我需要找到一种方法来结合两种方法。有什么提示吗?

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;这个代码部分最后设置的是什么,所以如果用交换机改变了它,它就不会继续设置它。当目前的光照条件不是它最后设定的时候,它仍会改变它。