SSブログ

ゲイテッドレーザーサイト その2 (動作状態遷移) [PIC]

deli氏により、とってもナイスな提案をしていただいたが、部品代が上がってしまうので、今回はパスをさせていただくことにした。実際に作るところまで行ってどうしてもほかに手がなかったら、それも含めて再検討するかもしれない。

3軸加速度センサからのデータを、銃身方向の回転、銃身に水平方向の回転を検出し、ある程度の範囲に来たときに、すべての動作を許容する事になるが、今回使用予定のコンピュータは、8pinの格安仕様で、メモリ容量が少ないので、難しいかなと判断したためである。

18F14k50 位のサイズが使えれば、もう少しいけると思うんだけど。

今回のお題は、なるべく小さく作らないといけないので、サイズも結構重要。

ということで、今回使用するコンピュータは、PIC12F683というもの。初めて使うものなので、うまく動かせるかどうかも不明ではあるが。

それでは、話を戻そう。

昨日、提示した状態遷移を表に起こすと以下のようになる。

GatedLaserSightStates.png

ここで、横軸は、状態、縦軸はそのとき入力された信号を示し、それぞれ、

名前意味動作
stIdleアイドル状態。すべての処理の基底状態音声入力があるまで待機する
stGateゲート状態。レーザを発光させた状態レーザを発光させ、フォロースルータイマを開始する
stGuardガード状態。レーザ消灯後、すべてのイベントから動作を保護するレーザを消灯させ、ガードタイマ満了を待ち、ガードタイマ満了を持って、アイドル状態に移行する
stCancel検出禁止状態すべての動作をキャンセルタイマ満了するまで無視する。
evSound音声入力検出された音声。アイドル状態では、ゲート状態に移行し、ゲート状態では、検出禁止状態に移行する
evGateフォローする時間満了レーザを発光を停止し、ガード状態に移行する
evGuardガード時間満了ゲート時間中に音声を検出したときは、しばらく のイベント検出を無効化するガード状態が満了したことを示す。アイドル状態に移行する


状態遷移型プログラムとして、上記を記述するといいことになる。
stGuardとstGateは良く見ると時間だけが異なるだけで、タイマー以外のイベントをすべて無視するという動作は同じなので、状態によりタイマー値を変更することも可能であるが、プログラムの構造を簡単にするために、別々の状態として考えることにしよう。



コメント(0) 
共通テーマ:趣味・カルチャー

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。