0

我正在使用类似于 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 库去抖动。

4

1 回答 1

0

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

但是 - 解决您的问题的一种方法是让您的中断回调函数只做两件快速的事情之一。

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

我希望这会有所帮助,尽管我知道它不能回答在 pigpio 类库中处理硬件去抖动的相关问题。我正在为我正在从事的项目寻找有关该问题的文档或帮助。在 RPIO 中很容易做到,我的猜测是,一旦“知情者”对此有所了解,在 pigpio 中也很容易。

马蒂·C

于 2015-04-03T19:02:15.960 回答