最初打开GPIO输出和GPIO.output

时间:2017-10-06 19:40:22

标签: python gpio

我是python的新手,正在尝试使用继电器,RPi,PIR传感器和python脚本来控制电磁阀。 I found a script在网上发布我用作基础并修改了一下以切换我的中继。一切似乎都在按预期工作,但我注意到以下几点:

  • 一旦我在终端中运行脚本,继电器开关就会打开。在第一次触发后,它们将一直保持关闭状态直到触发。他们为什么要开始?
  • 在我的代码中,我使用GPIO.output(<variable>,False)切换打开GPIO.output(<variable>,True)转动关闭,这似乎是落后的。不应该使用False参数关闭开关并打开True吗?

以下代码。任何指针或洞察力将不胜感激!谢谢!

# Import required Python libraries
import RPi.GPIO as GPIO
import time
import random

# Use BCM GPIO references
# instead of physical pin numbers
GPIO.setmode(GPIO.BCM)

# Define GPIO to use on Pi
pir = 17
arm_one = 23
arm_two = 24

print "PIR Module Test (CTRL-C to exit)"

# Set pin as input
GPIO.setup(pir,GPIO.IN)
GPIO.setup(arm_one,GPIO.OUT)
GPIO.setup(arm_two,GPIO.OUT)


current_state  = 0
previous_state = 0

def getRandomNum():
    random_sleep=random.uniform(0,1)
    return random_sleep;

try:

  print "Waiting for PIR to settle ..."

  # Loop until PIR output is 0
  while GPIO.input(pir)==1:
    current_state  = 0

  print "  Ready"

  # Loop until users quits with CTRL-C
  while True:

    # Read PIR state
    current_state = GPIO.input(pir)

    if current_state==1 and previous_state==0:
      # PIR is triggered
      print "  Motion detected!"
      for i in range(5):
          GPIO.output(arm_one,False)
          GPIO.output(arm_two,False)
          time.sleep(1)
          GPIO.output(arm_one,True)
          time.sleep(getRandomNum())
          GPIO.output(arm_two,True)
          time.sleep(getRandomNum())
          GPIO.output(arm_one,False)
          time.sleep(getRandomNum())
          GPIO.output(arm_one,True)
          GPIO.output(arm_two,False)
          time.sleep(getRandomNum())
          GPIO.output(arm_two,True)

      # Record previous state
      previous_state=1
    elif current_state==0 and previous_state==1:
      # PIR has returned to ready state
      print "  Ready"
      GPIO.output(arm_one,True)
      GPIO.output(arm_two,True)
      previous_state=0

    # Wait for 10 milliseconds
    time.sleep(0.01)

except KeyboardInterrupt:
  print "  Quit"
  # Reset GPIO settings
  GPIO.cleanup()

0 个答案:

没有答案