简体   繁体   English

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

[英]How to put together two python script Pi3 Gpio

I need help coding with Python.我需要使用 Python 编码的帮助。

I have a Raspberry Pi3.我有一个树莓派3。 I have two scripts that perform different functions, but I want them to work together.我有两个执行不同功能的脚本,但我希望它们一起工作。

The first one drives a pir sensor with a LED as an output.第一个驱动带有 LED 作为输出的 pir 传感器。 When the pir goes high, it start to count down, given enough time to detect a person again.当 pir 变高时,它开始倒计时,有足够的时间再次检测到一个人。 During these time if it doesn't detect anything, the LED goes off.在这段时间内,如果它没有检测到任何东西,LED 就会熄灭。

The second one drives a LDR sensor.第二个驱动 LDR 传感器。 It reads the changing values of the LDR sensor and turns a LED on or off.它读取 LDR 传感器的变化值并打开或关闭 LED。 I already have all of the wiring set up for these.我已经为这些设置了所有接线。

The main question is how to put together these two scripts in order to make the pir sensor wait until it's dark (value from the LDR) to start driving a LED to turn on or off when it detects/does not detect a person.主要问题是如何将这两个脚本放在一起,以便让 pir 传感器等到天黑(来自 LDR 的值)才能在检测到/未检测到人时开始驱动 LED 开启或关闭。 This is just to turn off the pir sensor in order to not turn on the LED during daylight.这只是为了关闭 pir 传感器,以便在白天不打开 LED。

By the way I have only one pir sensor and one LED in this separate configuration, but I want to use just one Python code with one LDR as a global light sensor to manage 4 pir sensors and 4 LED's.顺便说一下,在这个单独的配置中,我只有一个 pir 传感器和一个 LED,但我只想使用一个 Python 代码和一个 LDR 作为全局光传感器来管理 4 个 pir 传感器和 4 个 LED。 For example, all of the pir sensors would wait until it's dark to start working as an input, and when it's dark, each pir sensor can control a specific LED例如,所有 pir 传感器会等到天黑才开始作为输入工作,当天黑时,每个 pir 传感器可以控制特定的 LED

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

here is the code for the pir sensor and the led:这是 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)

where is the code for the ldr sensor and the led: 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()

Any help is highly appreciated.任何帮助都受到高度赞赏。 Remember I am Really Noob with Python coding.请记住,我真的是 Python 编码的菜鸟。 All my work is by trial and error.我所有的工作都是通过反复试验。

I think the code bellow could work... I did not tried because I cannot test this, but give it a try.我认为下面的代码可以工作......我没有尝试过,因为我无法测试这个,但试一试。

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()


声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM