pigpio 库和去抖动

pigpio library and debounce

我使用的是一个简单的激光束报警电路,类似于 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

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

我给你的建议不包括在 pigpio 中处理去抖动的解释,因为我也有类似的问题。

但是 - 解决您的问题的一种方法是让您的中断回调函数仅执行两项快速操作中的一项。

  1. 检查全局标志(让我们称之为 "ImageCaptureRequested"),如果该标志已经设置 - 在回调中什么都不做,但 return。这将意味着先前的图像捕获正在进行中。
  2. 如果标志未设置为真,只需将其设置为真并从中断中return。这使您的中断回调简短而快速。该过程的另一部分是有一个主循环(或线程)来监视该全局标志,当它被设置时,进行系统调用或库调用以进行图像捕获。保存该图像后,您可以清除全局标志,以便您的程序为下一个 "trip" 中断做好准备。由于该标志可防止在您的中断中进行重复操作,因此您不应再通过更改一个 gpio 来获取多个图像捕获。

虽然我知道它没有回答 pigpio class 库中处理硬件去抖动的相关问题,但我希望这对您有所帮助。我正在为我正在从事的项目寻找有关该问题的文档或帮助。在 RPIO 中很容易做到,我猜想在 pigpio 中也很容易,一旦有人 "in the know" 阐明了它。

马蒂·C