2016-09-03 1 views
1

Я искал код, whitch включает светодиоды по дате и цвету из txt-файла. Если дата верна, светодиоды включаются, но когда правильное время проходит, светодиоды не выключаются, они все еще светятся до следующей даты. Итак, почему светодиоды не выключаются, где проблема? Пожалуйста, помогите, я попробовал почти все.Отладка кода, почему светодиоды не выключаются после операции?

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) 

ответ

0

Эй, брат, я считаю, что нашел ответ на вашу проблему. Хорошо, вот что вы будете делать. THIS IS A THOROUGH GUIDE ON DEBUGGING A BLINKING LED

Поручите пройти руководство, поскольку оно содержит полезную информацию по решению проблемы, которую вы испытываете.

Вы видите Raspberry Pi очень интересный и уникальный кусок устройства

2

Какая хорошая возможность использовать for-else construct.

Если инструкция по включению светодиодных индикаторов включена, включите светодиоды, а затем выйдите из цикла, потому что задача завершена.

Для случая не было найдено никакой инструкции, т. Е. Не было выполнено break, добавьте в петлю комплект else и выключите все светодиоды.

  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) 

(код не проверял, все мои малина в саду)

+0

Похоже "перерыв" помог, большое спасибо :) 'еще: GPIO.output (LED_R, False). ..' Был добавкой к коду, но, похоже, я забыл поставить его здесь, извините :) – Vettehra

+0

@Vettehra Удачи тогда с вашим проектом. Существует много повторяющихся кодов, вы можете улучшить код. – VPfB

Смежные вопросы