gpt4 book ai didi

Python:每秒运行一次循环并触发函数5秒

转载 作者:太空宇宙 更新时间:2023-11-04 02:45:51 25 4
gpt4 key购买 nike

我试图让我的树莓派使用红外传感器检测运动,然后打开 LED 5 秒,同时仍然每 0.5 秒轮询一次红外传感器。到目前为止,这是我的代码,但它会等待 LED 关闭,然后再再次检查红外传感器...

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
PIR_PIN = 18
GPIO.setup(PIR_PIN, GPIO.IN)
LED_PIN = 17
GPIO.setup(LED_PIN, GPIO.OUT)
def light():
GPIO.output(LED_PIN, GPIO.input(PIR_PIN))
time.sleep(5)
GPIO.output(LED_PIN, False)
try:
while True:
if GPIO.input(PIR_PIN):
print("Motion Detected!")
light()
time.sleep(0.5)
except KeyboardInterrupt:
GPIO.cleanup()

最佳答案

根据您的代码,这正是正确的行为。为了让它不阻塞 light() def,你不能有像 time.sleep 这样的阻塞语句。

解决这个问题的一种方法是使用线程:

from threading import Thread
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
PIR_PIN = 18
GPIO.setup(PIR_PIN, GPIO.IN)
LED_PIN = 17
GPIO.setup(LED_PIN, GPIO.OUT)
def light():
GPIO.output(LED_PIN, GPIO.input(PIR_PIN))
time.sleep(5)
GPIO.output(LED_PIN, False)
try:
while True:
if GPIO.input(PIR_PIN):
print("Motion Detected!")
t = Thread(target=light) # Create thread
t.start() # Start thread
time.sleep(0.5)
except KeyboardInterrupt:
GPIO.cleanup()

Threading允许你在你的程序中同时运行多个东西。虽然,这现在打开了另一个需要线程同步的蠕虫病毒。

我强烈建议在实现上述代码之前进一步阅读 python 多线程,如果操作不当,线程是非常危险的。

关于Python:每秒运行一次循环并触发函数5秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45171565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com