python - 在 Python 中运行后,如何在特定时间段内禁用 Raspberry Pi GPIO 事件?

标签 python embedded gpio

每当我的 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 的简单廉价按钮时,就会发生这种情况。

在按下和按下时,会发生很多不属于数字领域的模拟事件。

有两种方法可以解决这些反弹:

  • 硬件方式(添加 RC 滤波器)
  • 软件方式 - 等待一段时间来过滤掉那些模拟世界的影响(这可能是“虚拟延迟”、“状态机的使用”、“临时禁用中断”)

  • 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/

    相关文章:

    python - 权限被拒绝 (Errno 13) - wandb init - 在 docker 容器中

    embedded - 如何将程序写入XK-1A xmos Controller 闪存?

    python - 无法添加边缘检测 - Raspberry Pi 3 GPIO

    embedded - 工作站和嵌入式程序员的心态差异

    c - 如何更改当前代码以直接从 IDR 寄存器读取

    javascript - 很难理解 Javascript 中的 "Probably Equals"

    python - 带有 Tweepy 的 Twitter Streaming API 拒绝 oauth

    python - 在Alpine 3.9上设置mitmproxy时出错

    python - 如何解析nagios status.dat文件?

    c - c中stm32l中的数据损坏