Raspberry Pi:Python try / except循环

时间:2016-10-11 19:39:10

标签: python exception try-catch gpio

我刚刚拿起了我的第一个Raspberry Pi和2个频道转播。我试图学习如何使用Python进行编码,因此我认为使用Pi会是一个很好的起点。我有一个关于通过GPIO引脚进行继电器定时的问题。

首先,我使用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秒,它必须重新运行'尝试'声明并打开继电器另外60秒等等。简而言之,我想要一个无限循环,只能通过取消运行脚本来中断。我不确定如何告诉Python关闭继电器180秒然后重新运行try语句,或者如何使它成为无限循环。

我非常感谢社区的一些意见。非常感谢任何反馈或帮助。谢谢大家。

2 个答案:

答案 0 :(得分:0)

只需使用while True循环,例如:

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

答案 1 :(得分:0)

我同意reptilicus,你只需要添加一个while循环。 “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"