每当我的 Raspberry Pi 的 GPIO 引脚出现下降沿时,我都会创建一个事件。但是,我想在每次运行后禁用此事件一段时间(例如 5 秒)。我希望在该时间段之后再次启用该事件。
我的第一个想法就是使用 sleep(5)
在实际的事件函数中。但我相信这不会起作用,因为该事件是在单独的线程中运行的。
任何人都可以指出我正在努力完成的正确方向吗?这并不像我想象的那么简单。
import RPi.GPIO as GPIO
import time
from time import sleep
# wait 1 second at startup
sleep(1)
# event function
def event(ev=None):
print("Event was triggered! Should not run again for 5 seconds.")
# sleep(5)
# initialize GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
# setup the pin and the event
GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.add_event_detect(21, GPIO.FALLING, callback=event)
while 1:
continue
最佳答案
有一个switch bounce effect当我们使用只有两个触点连接到 GPIO 的简单廉价按钮时,就会发生这种情况。
在按下和按下时,会发生很多不属于数字领域的模拟事件。
有两种方法可以解决这些反弹:
Fortunaly python GPIO 库支持去抖动的软件实现。
当您为此类“中断”定义回调时,您可以指定监听器对指定引脚上的任何更改充耳不闻的时间。
您是否使用“坏”(嘈杂)按钮并不重要。
您可以使用此 debounce 内置函数来实现您的需要:
GPIO.add_event_detect(21, GPIO.FALLING, callback=event, bouncetime=5000 )
关于python - 在 Python 中运行后,如何在特定时间段内禁用 Raspberry Pi GPIO 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61515521/