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

同様の質問があるため、ピグピオでのデバウンスの処理の説明は含まれていません。

ただし、問題を解決する 1 つの方法は、割り込みコールバック関数に 2 つの簡単な処理のいずれかのみを実行させることです。

  1. グローバル フラグ (「ImageCaptureRequested」と呼びましょう) を確認し、そのフラグが既に設定されている場合は、コールバックで何もせずに戻ります。これは、以前の画像キャプチャが進行中であることを意味します。
  2. フラグが True に設定されていない場合は、単純に True に設定して割り込みから戻ります。これにより、割り込みコールバックが短く迅速になります。プロセスの他の部分は、そのグローバル フラグを監視するメイン ループ (またはスレッド) を設定し、それが設定されたら、システム コールまたはライブラリ コールを実行してイメージ キャプチャを実行することです。その画像が保存されたら、グローバルフラグをクリアして、プログラムが次の「トリップ」割り込みの準備ができるようにすることができます。フラグは割り込みでの重複操作を防止するため、1 回の gpio 変更で複数の画像キャプチャを取得する必要がなくなります。

pigpio クラス ライブラリでハードウェア デバウンスを処理するという関連する質問に答えていないことはわかっていますが、これが役立つことを願っています。私が取り組んでいるプロジェクトのために、その問題に関するドキュメントやヘルプを探しています。RPIO での作業は簡単でした。私の推測では、「よく知っている」誰かがそれに光を当てると、pigpio での作業も簡単になると思います。

マーティC

于 2015-04-03T19:02:15.960 に答える