pigpio库和去抖

时间:2015-03-30 02:07:55

标签: python raspberry-pi debouncing

我使用类似的简单激光束报警电路 http://2.bp.blogspot.com/-DlpGa_yyJ0Y/U ... iagram.png

我使用4k7电阻而不是蜂鸣器从该电路输入到Pi,并在光束受阻时捕获图像。 我使用pigpio库回调函数来捕获图像

import pigpio
import os 
pi=pigpio.pi()
pi.set_mode(4,pigpio.INPUT)
pi.set_pull_up_down(4,pigpio.PUD_DOWN)
i=0
def capture(gpio,level,ticks):
  global i
  i=i+1
  os.system(("raspistill -o img%s.png -md 6 -t 500")%i)

callf=pi.callback(4, pigpio.RISING_EDGE, capture)
while True:
  pass

但问题是有时会捕获单个障碍的多个图像。我发现去抖是这种情况的解决方案。如何使用pigpio库进行去抖动。

1 个答案:

答案 0 :(得分:0)

我向你推荐的内容并未包括处理pigpio中的去抖动的解释,因为我也有类似的问题。

然而 - 解决问题的一种方法是让你的中断回调函数只执行两个快速操作中的一个。

  1. 检查一个全局标志(让我们称之为“ImageCaptureRequested”)并且如果该标志已经设置 - 在回调中什么都不做但返回。这意味着之前的图像捕获正在进行中。
  2. 如果该标志未设置为True,只需将其设置为True并从中断返回。这使您的中断回调变得短而快。该过程的另一部分是拥有一个监视全局标志的主循环(或线程),当它被设置时,进行系统调用或库调用以进行图像捕获。保存该图像后,您可以清除全局标志,以便程序为下一次“跳闸”中断做好准备。由于该标志可防止中断中的重复操作,因此您不应再通过一次gpio更改获得多个图像捕获。
  3. 我希望这有用,虽然我知道它没有回答在pigpio类库中处理硬件去抖的相关问题。我正在为我正在进行的项目寻找文档或帮助解决该问题。在RPIO中很容易做到,而我的猜测是,一旦“知情人士”对它有所了解,它在猪圈中也很容易。

    Marty C

相关问题