- プログラムの概要
- フローチャート
- 備考
- プログラムの概要
これは、競技開始直後にスレッドとして作成され、超音波センサ、タッチセンサ、白線センサによる値取得を行うプログラムである。場合によってはモータ関連の初期化も行う。
以下より、それぞれのセンサを uss , ts , irs と書くことにする。
このプログラムは、外部変数としてint型変数の uss[4] , ts[3] , irs[2] , uss_f , ts_f , irs_f , uss_c , ts_c , irs_c , motor_error の9つを持ち、各障害突破プログラムで使用する。
前から3つがセンサから取得した値が入る変数、次の3つがそのセンサの値を取得するか否かのフラグ、次の3つが取得した値を初期化する変数、最後の1つがモータのエラーの有無を検知する変数である。
処理の流れだが、まず、uss → ts → irs の順に値取得のフラグが立っているかをチェックし、フラグが立っていれば値を取得しそれを外部変数へ入れる。
また、各センサの処理が終わったらモータにエラーが出ていないかチェックし、エラーが出ていたらそれに対応した処理を行い、エラーを取り除く。
そして、この流れをwhile(1)もしくはfor( ; ; )の無限ループで回す。
このようにしてMIRS1003はセンサの値を取得するのである。
ごちゃごちゃと書いてしまったが、以下に具体的な手順を記述する。- スレッドが作成され、無限ループに入る
- uss_fが"1"ならuss[0]~uss[3]の値を取得する
- uss_fが"1"でなく、uss_cが"1"ならuss[0]~uss[3]の値を初期化すし、uss_cを"1"にする
- ts_fかirs_fのどちらか片方でも"1"ならirs_ts_wsの値を取得する
- ts_fが"1"ならts[0]~ts[2]の値を取得する
- irs_fが"1"ならirs[0] , irs[1]の値を取得する
- ts_fが"1"でなく、ts_cが"1"ならta[0]~ts[2]の値を初期化し、ts_cを"1"にする
- irs_fが"1"でなく、irs_cが"1"ならirs[0] , irs[1]の値を初期化し、irs_cを"1"にする
- motor_errorが"1"ならモータの初期化を行う
- 1. へ
- フローチャート
fig.1 フローチャート - 備考
モータのエラーを取り除く方法に関しては、- motor_restartを実行する
- motor_send_stop_packet() → motor_send_start_packet()を実行する
どちらにしろ前者は成功しないだろうと予測される。
また、統合に際し、メンバー間の意思疎通が取れていなかったため使用しないこととなった。