今回は、赤外線リモコンデータ受信解析処理、モータ制御処理、メイン処理の設計を行っていきます。
赤外線リモコンデータ受信解析処理では、前回解説しました赤外線リモコン受信処理で受信したデータについて、どのボタンを押されたかを解析します。
モータ制御処理では、前進、後退、右回り、左回り、停止の指示を受けて、モータを動作・停止させます。
メイン処理では、10ms周期毎に、赤外線リモコンデータ受信解析処理、ボタンに応じたモータ制御処理を呼び出したり、HALTモードを実行したりします。
メイン処理の設計
メイン処理では、10ms周期毎に、赤外線リモコン受信データ解析処理と、モータ制御処理を呼び出します。
そして、メイン処理では、30秒間、赤外線リモコンからの操作がない場合は、マイコンをHALTモードとし、消費電流を少なくさせます。30秒のタイマカウントもメイン処理が行います。
処理の流れとしては、入力・処理・出力の順が基本だと思うので、メイン処理の流れとしては、次のようにします。
- ウォッチドッグクリアを行う。
- 入力として、赤外線リモコン受信データ解析処理を呼び出す。
- 処理として、ボタンの種別と押下状態(押しっぱなしかどうか)を判定する。
- 押されているボタンに応じた、モータ制御処理を呼び出す。
- ボタンが押されていない場合は、7の処理を行い、押されている場合は、30s経過カウンタをクリアし、7 の10ms周期待ちに遷移する。
- 30s経過判定を行い、30s経過している場合は、HALTモードとする。
※HALTモードから復帰した場合は、30s経過カウンタをクリアする。 - 10ms周期待ちを行う。10ms周期になったら、30s経過カウンタをインクリメントし、1 へ遷移する。
赤外線リモコン受信データ解析処理
赤外線リモコン受信データ解析処理では、受信データの要素0にリーダーコードかリピートコードは格納されています。
リピートコードは、前回のデータが押され続けているということなので、特に新たに解析する必要はありません。
押され続けているかどうかの判断は、赤外線リモコン受信処理にて、リピートコードを受信した後、一定時間経過するまでの間、再度、リピートコードを受け取った場合に、押さ続けていると判断するため、ここの処理では押され続けているかの解析は行いません。
赤外線リモコン受信データ解析処理で行う処理は、赤外線リモコン受信処理で、受信が完了したことを確認して、完了していたら、受信データの要素0にリーダーコードが格納されているかを判定すます。
格納されている場合、その後に続く、0、1のビット情報から、4バイトデータ(long型)にシフトしながら格納していきます。
そして、格納したら、それが、どのボタンに該当するのかを判定し、ボタン情報として保持します。
赤外線リモコン受信データ解析処理の流れとしては、次のようになります。
- 赤外線リモコン受信処理の受信完了フラグを取得する。
- 受信完了フラグが受信完了となっていた場合、受信データを取得し、3~4の処理を行う。
- ボタンコードに受信データの要素1~32のビットデータをLSBファースト順に格納する。
- 受信完了フラグをクリアする。
モータ制御処理
モータ制御処理は、1つの関数ではなく、前進動作、後退動作、右回り動作、左回り動作、停止動作、それぞれに関数を用意します。
これにより、メイン処理では、進行させたい方向に該当するインターフェースを呼び出すことで、どのようにモータ制御を行うかは意識する必要がないようするために、関数を分けています。
基本的にマイコンのポート・レジスタへの書き込みと、PWM出力をおこなうため、RDタイマの開始を行います。
進方向によりモータドライバのIN1~IN4の設定と、PWM制御を開始します。
関数名 | 設定内容 | 備考 |
前進動作処理 | IN1=1 IN2=0 IN3=1 IN4=0 TRDSTR |= 0x03 | |
後退動作処理 | IN1=0 IN2=1 IN3=0 IN4=1 TRDSTR |= 0x03 | |
右回り動作処理 | IN1=0 IN2=1 IN3=1 IN4=0 TRDSTR |= 0x03 | |
左回り動作処理 | IN1=1 IN2=0 IN3=0 IN4=1 TRDSTR |= 0x03 |
簡単ではありますが、以上がメイン処理に関する設計でした。