Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pigpio库与去盎司_Python_Raspberry Pi_Debouncing - Fatal编程技术网

Python pigpio库与去盎司

Python pigpio库与去盎司,python,raspberry-pi,debouncing,Python,Raspberry Pi,Debouncing,我使用一个简单的激光束报警电路,类似于 ... 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

我使用一个简单的激光束报警电路,类似于 ... 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库中使用去Bouncing。

我给您的建议中没有解释如何在pigpio中处理去Bouncing,因为我在这方面也有类似的问题

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

  • 检查一个全局标志(我们称之为“ImageCaptureRequested”),如果该标志已设置,则在回调中不执行任何操作,只返回。这意味着之前的图像捕获正在进行中
  • 如果该标志未设置为True,只需将其设置为True并从中断返回即可。这样可以使中断回调短而快。该过程的另一部分是有一个主循环(或线程)来监视该全局标志,当它被设置时,进行系统调用或库调用以进行图像捕获。一旦该图像被保存,您就可以清除全局标志,这样您的程序就可以为下一个“trip”中断做好准备。由于该标志可防止中断中的重复操作,因此不应再通过一次gpio更改获得多个图像捕获 我希望这是有帮助的,尽管我知道它没有回答在pigpio类库中处理硬件去抖动的相关问题。我正在为一个我正在从事的项目寻找关于这个问题的文档或帮助。这在RPIO中是很容易做到的,我的猜测是,一旦有人“了解”它,在pigpio中也很容易做到


    Marty C

    回答得很好,但很难读懂。你能把它编辑得更清楚吗?:)保罗-你的意见被采纳了,而且是真实的。希望编辑后的答案更清楚。Tnx!Marty CHey@Marty-我的意思是这都在一段中。尝试使用一些格式化工具来创建一些粗体的点、列表或仅使用标题将其拆分:)