カスタムオフロード車用のデータ収集システムを作成する作業。 RPMを測定するためにラズベリーパイとカスタムタコメータを使用しました。次のコードで割り込みを使用してRPM値を取得します。点火プラグの作動に基づいて燃焼機関の状態を得るためにPythonを使用する
def get_rpm():
GPIO.wait_for_edge(17, GPIO.FALLING)
start = time.time()
GPIO.wait_for_edge(17, GPIO.FALLING)
end = time.time()
duration = end - start
rpm = (1/duration)*60
return rpm
このコードは、エンジンが動作してスパークを生成している場合にのみ機能します。スパークがなければ、コードはその縁を待って座って進み、進まない。コードget_rpm()
を呼び出すとき、コードがエッジを待っている場合、これにより他のプロセスがハングします。
これは、別のプロセスでエンジンの状態を取得することを目的としています。私はそれが2つの部分で一番うまくいくと思います。別のスレッドで
パート1、実行されている(ループ型):必要に応じて
GPIO.wait_for_edge(17, GPIO.RISING)
last = time.time
パート2は、関数と呼ばれる実行:パート1では
def get_state():
while time.time - last < .5:
engine_state = true
else:
engine_state = false
return engine_state
がにアクセス可能なメモリにlast
を保存します第2部、第2部では、スパークプラグが最後に発火したときに車両が走行しているかどうかを判断します。比較器としてengine_state
を使用すると、engine_state
が真の場合にのみ、データ収集システムはget_rpm()
からRPM値を取得して格納します。
パート2でlast
変数を使用できるようにパート1を実装するにはどうすればよいですか? last
は非常に迅速に変更されます。私はlast
が更新されるたびに、それをラズベリーパイのSDカードのテキストファイルに保存したくありません。 last
をRAMに保存します。
ありがとうございます!
'last'はRAMに既にある、私は' .. –
'time.time'は、')( 'time.timeする必要がありますあなたが必要とするすべては' GET_STATE(最後)の変数として、それを渡すことだと思います私は思う。 – jDo
あなたはどこか他の場所にピン配置を設定していますか、まったく設定していませんか?代わりに割り込みコールバックを使用できませんでしたか?それらは本質的にスレッド化されており、ブロックされません。私はあなたがエッジを待つ必要はないと思う。面白いプロジェクトbtw。 :) – jDo