繁体   English   中英

Raspberry Pi GPIO 事件在 Python 中运行后如何禁用一段时间?

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

每当我的 Raspberry Pi 的 GPIO 引脚有下降沿时,我都会创建一个事件。 但是,我想在每次运行后禁用此事件一段时间(例如 5 秒)。 我希望在该时间段之后再次启用该事件。

我的第一个想法就是在实际事件 function 中使用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滤波器)
  • 软件方式 - 等待一段时间以过滤掉那些模拟世界效果(这可能是“虚拟延迟”、“state 机器的使用”、“临时禁用中断”)

Fortunaly python GPIO 库支持软件实现去抖动。

当您为此类“中断”定义回调时,您可以指定监听器 go 对指定引脚上的任何更改充耳不闻的时间。

是否使用“坏”(嘈杂)按钮并不重要。 您可以使用这个去抖动内置 function 来实现您所需要的:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM