每当我的 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
有一个开关弹跳效果当我们使用简单廉价的按钮且只有两个触点连接到 GPIO 时,就会发生这种情况。
在压力和压抑期间,会发生很多不属于数字领域的模拟事情。
有两种方法可以解决这些退回问题:
- 硬件方式(加RC滤波器)
- 软件方式 - 等待一段时间来过滤掉那些模拟世界的影响(这可能是“虚拟延迟”,“状态机的使用”,“临时禁用中断”)
幸运的是,Python GPIO 库支持软件实现去抖动。
当您为此类“中断”定义回调时,您可以指定侦听器对指定引脚上的任何更改充耳不闻的时间。
您是否使用“坏”(嘈杂)按钮并不重要。
您可以使用这个去抖动内置函数来实现您所需要的:
GPIO.add_event_detect(21, GPIO.FALLING, callback=event, bouncetime=5000 )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)