C言語

メイン処理と受信解析処理、モータ制御処理の設計

今回は、赤外線リモコンデータ受信解析処理、モータ制御処理、メイン処理の設計を行っていきます。
赤外線リモコンデータ受信解析処理では、前回解説しました赤外線リモコン受信処理で受信したデータについて、どのボタンを押されたかを解析します。
モータ制御処理では、前進、後退、右回り、左回り、停止の指示を受けて、モータを動作・停止させます。
メイン処理では、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

簡単ではありますが、以上がメイン処理に関する設計でした。


-C言語