2016-10-11 3 views
0

Я только что взял свой первый малиновый Pi и 2-канальное реле. Я пытаюсь научиться программировать на Python, поэтому я решил, что Pi для игры будет хорошей отправной точкой. У меня вопрос относительно времени моих реле через контакты GPIO.Raspberry Pi: Python try/except loop

Во-первых, я использую Raspbian Pixel и редактирую свои сценарии через Gedit. Пожалуйста, смотрите ниже для сценария у меня до сих пор:

# !/usr/bin/python 
import RPi.GPIO as GPIO 
import time 

GPIO.setmode(GPIO.BCM) 

# init list with pin numbers 
pinList = [14] 

# loop through pins and set mode and state to 'high' 
for i in pinList: 
    GPIO.setup(i, GPIO.OUT) 
    GPIO.output(i, GPIO.HIGH) 

# time to sleep between operations in the main loop 
SleepTimeL = 60 #1 minute 

# main loop 
try: 
    GPIO.output(14, GPIO.LOW) 
    print "open" 
    time.sleep(SleepTimeL); 
    GPIO.cleanup() 

#Reset GPIO settings 
    GPIO.cleanup() 

# end program cleanly 
except KeyboardInterrupt: 
    print "done" 

Теперь, работает довольно хорошо, она открывает реле, прикрепленные к контакту 14 без проблем. Он запрограммирован на 60 секунд, а затем завершает программу. Как только программа закончится, настройки GPIO будут сброшены, и реле закроется, но это конец программы, и именно там начинается моя проблема.

То, что я хочу, чтобы этот скрипт выполнял, - это открыть реле на 60 секунд, а затем закрыть его на 180 секунд. Как только он достигнет 180 секунд, он должен повторно запустить инструкцию «try» и открыть реле еще на 60 секунд и так далее. Короче говоря, мне нужен бесконечный цикл, который может быть прерван только путем отмены запуска скрипта. Я не уверен, как сказать Python закрыть реле в течение 180 секунд, а затем повторно запустить оператор try или как сделать его бесконечным циклом.

Я очень благодарен за вклад сообщества. Любая обратная связь или помощь приветствуются. Спасибо всем.

+0

Пожалуйста, отредактируйте ваше сообщение, чтобы исправить ваш отступ. –

+0

Просто используйте 'while True:' loop – reptilicus

+0

Hi Robᵩ, я отредактировал его в соответствии с запросом. – Safjoe

ответ

0

Просто используйте while True петлю, что-то вроде:

# main loop 
while True: 
    GPIO.output(14, GPIO.LOW) 
    print "open" 
    time.sleep(SleepTimeL); 
GPIO.cleanup() 
print "done" 
+0

Благодаря Рептиликус ... – Safjoe

+0

Благодаря Рептиликус, я получил его на работу следующим образом: # время сна между операциями в основном цикле Open = 60 Closed = 180 # основной цикл в то время как Правда: GPIO.output (14, GPIO.LOW) печать "Открыть" time.sleep (Open) GPIO.output (14, GPIO.HIGH) печать "Закрыто" time.sleep (Closed) Работа выполнена. Еще раз спасибо :-) – Safjoe

+0

Мои извинения, я не знаю, что там произошло :-) – Safjoe

0

Я согласен с Рептиликус, вам просто нужно добавить время цикла. «while True» будет работать вечно, пока вы не нажмете ctrl-C, чтобы сломаться. Вам просто нужно добавить вторую задержку, чтобы выключить реле на 180 секунд перед циклом. Вы можете создать другую переменную времени сна, или я просто умножу тот, который у вас есть на 2.

# main loop 
while True: 
    try: 
    GPIO.output(14, GPIO.LOW) 
    print "open" 
    time.sleep(SleepTimeL); 
    GPIO.cleanup() 

    #Reset GPIO settings 
    GPIO.cleanup() 
    time.sleep(2*SleepTimeL) 

    # end program cleanly 
    except KeyboardInterrupt: 
    print "done"