如何将两个 python 脚本放在一起 Pi3 Gpio

How to put together two python script Pi3 Gpio

我需要 Python 编码方面的帮助。

我有一个树莓派3。我有两个执行不同功能的脚本,但我希望它们一起工作。

第一个以 LED 作为输出驱动 pir 传感器。当 pir 变高时,它开始倒计时,有足够的时间再次检测到一个人。在这段时间里,如果它没有检测到任何东西,LED 就会熄灭。

第二个驱动一个LDR传感器。它读取 LDR 传感器的变化值并打开或关闭 LED。我已经为这些设置了所有接线。

主要问题是如何将这两个脚本放在一起,以使 pir 传感器等到天黑(来自 LDR 的值)开始驱动 LED 在 detects/does 时打开或关闭检测不到人。这只是为了关闭 pir 传感器,以便在白天不打开 LED。

顺便说一句,在这个单独的配置中我只有一个 pir 传感器和一个 LED,但我只想使用一个 Python 代码和一个 LDR 作为全局光传感器来管理 4 个 pir 传感器和 4 个LED。 例如,所有的 pir 传感器都会等到天黑时才开始作为输入工作,当天黑时,每个 pir 传感器可以控制特定的 LED

pir1=led1, pir2=led2, pir3=led3, pir4=led4

这里是 pir 传感器和 led 的代码:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(21, GPIO.IN) #pir sensor put as input
GPIO.setup(25, GPIO.OUT) # led put as output
GPIO.output(25, GPIO.LOW)

delay = 10 # set number of seconds delay before light turns off

while True:
#wait for pir to trigger.
print "waiting "
while GPIO.input(21) == 0:
time.sleep (0.5)

print "turn light on here"
GPIO.output(25, GPIO.HIGH)
count = 0

#start count down to turn off
print "count down started "
while count < delay:
count = count + 1

# here if the input goes high again we reset the counter to 0
if GPIO.input(21) == 1:
count = 0

print "count down now ", (delay - count)
time.sleep(1)

print "Turn light off"
GPIO.output(25, GPIO.LOW)

哪里是 ldr 传感器和 led 的代码:

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
delayt = .1
value = 0 # this variable will be used to store the ldr value
ldr = 12 #ldr is connected with pin number 12
led = 25 #led is connected with pin number 25

GPIO.output(led, False) # keep led off by default
def rc_time (ldr):
count = 0

#Output on the pin for
GPIO.setup(ldr, GPIO.OUT)
GPIO.output(ldr, False)
time.sleep(delayt)

#Change the pin back to input
GPIO.setup(ldr, GPIO.IN)

#Count until the pin goes high
while (GPIO.input(ldr) == 0):
count += 1

return count

#Catch when script is interrupted, cleanup correctly
try:
# Main loop
while True:
print("Ldr Value:")
value = rc_time(ldr)
print(value)
if ( value >= 70):
print("It is dark turn on led")
GPIO.output(led, True)
if (value < 69):
print("It is light turn off led")
GPIO.output(led, False)

except KeyboardInterrupt:
pass
finally:
GPIO.cleanup()

非常感谢任何帮助。请记住,我真的是 Python 编码的菜鸟。 我所有的工作都是通过反复试验。

我认为下面的代码可以工作...我没有尝试,因为我无法测试它,但试一试。

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(21, GPIO.IN) #pir sensor put as input
GPIO.setup(25, GPIO.OUT) # led put as output
GPIO.setup(12, GPIO.OUT)
GPIO.output(12, False)
GPIO.output(25, False) # keep led off by default

delayt = .1
ldr = 12 #ldr is connected with pin number 12
led = 25 #led is connected with pin number 25
delay = 10 # set number of seconds delay before light turns off

def is_dark():
  global ldr, led, delayt

  count = 0
  #Output on the pin for
  GPIO.setup(ldr, GPIO.OUT)
  GPIO.output(ldr, False)
  time.sleep(delayt)

  #Change the pin back to input
  GPIO.setup(ldr, GPIO.IN)

  #Count until the pin goes high
  while (GPIO.input(ldr) == 0):
    count += 1

  if count >= 70:
    return True

  return False

def has_someone():
  if GPIO.input(21) == 1:
    return True

  return False


def main():
  global delay

  while True:
    if has_someone() and is_dark():
      print "turn light on here"
      GPIO.output(25, GPIO.HIGH)
      count = 0
      while count < delay:
        count = count + 1

        # here if the input goes high again we reset the counter to 0
        if has_someone() == 1:
          count = 0

        print "count down now ", (delay - count)
        time.sleep(1)

      print "Turn light off"
      GPIO.output(25, GPIO.LOW)


if __name__ == "__main__":
  try:
    main()
  except KeyboardInterrupt:
    pass
  finally:
    GPIO.cleanup()