名称 MIRS1003 各種センサの値取得プログラムについて
番号 MIRS1003-SOFT-0006

最終更新日:2011.02.03

版数 更新日 作成 承認 改訂記事
A01 2011.02.03 斎藤秀人 斎藤秀人 初版

目次
  1. プログラムの概要
  2. フローチャート
  3. 備考
目次
  1. プログラムの概要
    これは、競技開始直後にスレッドとして作成され、超音波センサ、タッチセンサ、白線センサによる値取得を行うプログラムである。場合によってはモータ関連の初期化も行う。
    以下より、それぞれのセンサを 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はセンサの値を取得するのである。

    ごちゃごちゃと書いてしまったが、以下に具体的な手順を記述する。
    1. スレッドが作成され、無限ループに入る
    2. uss_fが"1"ならuss[0]~uss[3]の値を取得する
    3. uss_fが"1"でなく、uss_cが"1"ならuss[0]~uss[3]の値を初期化すし、uss_cを"1"にする
    4. ts_fかirs_fのどちらか片方でも"1"ならirs_ts_wsの値を取得する
    5. ts_fが"1"ならts[0]~ts[2]の値を取得する
    6. irs_fが"1"ならirs[0] , irs[1]の値を取得する
    7. ts_fが"1"でなく、ts_cが"1"ならta[0]~ts[2]の値を初期化し、ts_cを"1"にする
    8. irs_fが"1"でなく、irs_cが"1"ならirs[0] , irs[1]の値を初期化し、irs_cを"1"にする
    9. motor_errorが"1"ならモータの初期化を行う
    10. 1. へ

  2. フローチャート

    fig.1 フローチャート

  3. 備考
    モータのエラーを取り除く方法に関しては、
    • motor_restartを実行する
    • motor_send_stop_packet() → motor_send_start_packet()を実行する
    の2つが考えられたが、試験はしていないので成否は不明である。
    どちらにしろ前者は成功しないだろうと予測される。

    また、統合に際し、メンバー間の意思疎通が取れていなかったため使用しないこととなった。

関連文書


沼津工業高等専門学校 電子制御工学科