代码调试,为什么LED在操作后不会关闭?

时间:2016-09-03 06:45:16

标签: python raspberry-pi raspbian led raspberry-pi3

我想了一个代码,通过txt文件中的日期和颜色来打开LED。如果日期是正确的,则LED会亮起,但是当正确的时间过去时,LED不会关闭,它们仍会发光直到下一个日期。 那么,为什么LED不会关闭,问题出在哪里?请帮助,我几乎尝试了一切。

import sys
import time
import datetime
import RPi.GPIO as GPIO
import SDL_DS1307

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)



LED_R = 17
LED_G = 27
LED_B = 22


GPIO.setup(17, GPIO.OUT)
GPIO.setup(27, GPIO.OUT)
GPIO.setup(22, GPIO.OUT)


filename = time.strftime("%Y-%m-%d%H:%M:%SRTCTest") + ".txt"
starttime = datetime.datetime.utcnow()

ds1307 = SDL_DS1307.SDL_DS1307(1, 0x68)
ds1307.write_now()

while True:
    currenttime = datetime.datetime.utcnow()
    deltatime = currenttime - starttime
    data=time.strftime("%Y"+"%m"+"%d"+"%H"+"%M")
    with open('data.txt') as f:
            for line in f:
                    parts=line.split()                               
                    if parts[0]<=(data)<=parts[1]:
                            if parts[2]=='raudona':
                                    GPIO.putput(LED_R, False)
                                    GPIO.putput(LED_G, True)
                                    GPIO.putput(LED_B, True)
                            elif parts[2]=='zalia':
                                    GPIO.putput(LED_R, True)
                                    GPIO.putput(LED_G, False)
                                    GPIO.putput(LED_B, True)
                            elif parts[2]=='melyna':
                                    GPIO.putput(LED_R, True)
                                    GPIO.putput(LED_G, True)
                                    GPIO.putput(LED_B, False)
                            elif parts[2]=='geltona':
                                    GPIO.putput(LED_R, False)
                                    GPIO.putput(LED_G, True)
                                    GPIO.putput(LED_B, False) 
                            elif parts[2]=='zydra':
                                    GPIO.putput(LED_R, True)
                                    GPIO.putput(LED_G, False)
                                    GPIO.putput(LED_B, False)
                            elif parts[2]=='violetine':
                                    GPIO.putput(LED_R, False)
                                    GPIO.putput(LED_G, False)
                                    GPIO.putput(LED_B, True)
                            elif parts[2]=='balta':
                                    GPIO.putput(LED_R, False)
                                    GPIO.putput(LED_G, False)
                                    GPIO.putput(LED_B, False)

            time.sleep(10.0)

2 个答案:

答案 0 :(得分:2)

使用for-else construct的好机会。

如果找到关闭LED指示灯的指令,请打开指示灯,然后从循环中断,因为任务已完成。

对于这种情况,没有找到任何指令,即没有执行break,将else套件添加到循环并关闭那里的所有LED。

            for line in f:
                parts=line.split()
                if parts[0]<=(data)<=parts[1]:
                    if parts[2]=='raudona':
                        GPIO.putput(LED_R, False)
                        GPIO.putput(LED_G, True)
                        GPIO.putput(LED_B, True)
                        break
                    elif parts[2]=='zalia':
                        GPIO.putput(LED_R, True)
                        GPIO.putput(LED_G, False)
                        GPIO.putput(LED_B, True)
                        break
                    # elif .....
            else:
                 GPIO.putput(LED_R, False)
                 GPIO.putput(LED_G, False)
                 GPIO.putput(LED_B, False)

(代码未经过测试,我所有的覆盆子都在花园里)

答案 1 :(得分:0)

嘿兄弟我相信我找到了你问题的答案。好的,这就是你要做的。 THIS IS A THOROUGH GUIDE ON DEBUGGING A BLINKING LED

努力浏览指南,因为它包含有关解决您遇到的问题的有用信息。

你看,Raspberry Pi是一款非常有趣且独特的设备