![](/img/trans.png)
[英]How to control a GPIO pin on the raspberry pi (general use) (python script)
[英]How to put together two python script Pi3 Gpio
我需要使用 Python 编码的帮助。
我有一个树莓派3。 我有两个执行不同功能的脚本,但我希望它们一起工作。
第一个驱动带有 LED 作为输出的 pir 传感器。 当 pir 变高时,它开始倒计时,有足够的时间再次检测到一个人。 在这段时间内,如果它没有检测到任何东西,LED 就会熄灭。
第二个驱动 LDR 传感器。 它读取 LDR 传感器的变化值并打开或关闭 LED。 我已经为这些设置了所有接线。
主要问题是如何将这两个脚本放在一起,以便让 pir 传感器等到天黑(来自 LDR 的值)才能在检测到/未检测到人时开始驱动 LED 开启或关闭。 这只是为了关闭 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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.