Raspberry Pi GPIO 事件在Python 运行后的某个时间段内如何禁用?

How to disable Raspberry Pi GPIO event for certain time period after it runs in Python?

只要我的 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 的简单廉价按钮时,会发生 switch bounce effect

在新闻和萧条期间,发生了很多不属于数字领域的模拟内容。

有两种方法可以解决这些退回问题:

  • 硬件方式(添加RC滤波器)
  • 软件方式 - 等待一些时间来过滤掉那些模拟世界效果(这可能是 "dummy delay"、"usage of state machines"、"temporary disable interrupt")

幸运的是python GPIO 库支持去抖动的软件实现。

当您为此类 "interrupt" 定义回调时,您可以指定侦听器对指定引脚上的任何更改充耳不闻的时间。

用不用"bad"(嘈杂)按钮并不重要。 您可以使用这个去抖动内置函数来实现您需要的功能:

GPIO.add_event_detect(21, GPIO.FALLING, callback=event, bouncetime=5000 )