2011年6月21日火曜日

Microsoft Flight Simulator用自動操縦パネルの製作・試作(その5)

ロータリーエンコーダの取りこぼし問題を根本解決しました。

解決方法は前回述べたように、

  1. ロータリエンコーダの回転にあわせたカウンター(1byte)をPCへ送る。
  2. PCではループでそれを受け取り、
    • 増えていれば設定高度増加イベント(EVENT_ALT_INC)を送る。
    • 減っていればその逆、EVENT_ALT_DECを送る。
というものです。

ただ、設定高度増加イベント自体を直接送れないためいったん自前のイベント番号に割り当てる必要がありました。
(このあたりはSDKのサンプルを参考にしました)

FSX自体は上記増減イベントがたくさん積まれてもちゃんと処理してくれるようです。
(カウンタの折り返し処理をミスって、一気に255増えてもちゃんと"25500feet"増えてました…)

プログラムは今のところ無限ループで動かしていますが、sleepを使った負荷軽減を図りました。
ただ、ロータリエンコーダを回す、という操作に対しLED表示の追従が遅れるのでsleep(10)にしています。(前述のように取りこぼす、というわけではない。)

これでフィージビリティスタディ終了(前回終了宣言してたけど…)です。

0 件のコメント:

コメントを投稿