製作編29
前回作成したモーターボリュームAssy制御と表示処理を合体したソフトに赤外線リモコン処理を追加します。
リモコン機能追加準備
前回ミュート表示処理まで実装したソースdemo26に赤外線リモコン処理のソースを追加します。追加のベースは、別途パネル表示とリモコン処理の動作確認を行ったソースのリモコン処理部分のみを単純に追加しました。コンパイルを行い、通常のキー処理が正しく動作する事を事前に確認しました。
リモコン機能追加
まずは、通常のキー処理との競合を回避させます。赤外線リモコンの処理は、外部割り込み(INT0)を利用しています。割り込み処理の先頭で、通常のキー処理中の場合(k_stat != 0)なにもせずに割り込み処理を抜けます。これで通常のキー処理との競合を回避できます。リモコンの受信処理は、割り込み処理内でキーの確定まで行っています。メイン処理へ確定キー情報を反映するために、k_stat=20の処理を追加しました。割り込み処理から抜ける前にk_stat=20として、メインループ内で受信キー処理を実行します。改めてメインループの処理概要を整理します。
void main() {
ミュート減衰量表示点滅処理
k_stat= 0:キーオン検出
k_stat= 1:キーオンチャタリング処理
k_stat= 2:キーオフ検出
k_stat= 3:キーオフチャタリング処理
k_stat= 4:キー確定、減数量更新 or ミュート処理
k_stat= 5:モーター制御1
k_stat= 6:モーター制御2
k_stat= 20:リモコンキー処理
k_stat=100:減衰量表示切り替え処理
}
リモコンキー処理追加
k_stat=20へ以下のキー処理を追加しました。
VOL+:att_numを1減らす
VOL-:att_numを1増やす
>>| :att_numを2減らす
|<< :att_numを2増やす
▽ :ミュートオン
△ :ミュートオフ
main処理の構造がしっかりできていたので、上記の追加はわけなくできました。下記が追加したソースdemo27の実行画面です。
キーの競合もなく、想定どおり動作しています。時々キー受信が無視されている感じがしましたが、現状の仕様はモーターボリューム制御中はキー受信を無効としていて、処理が終わる前にキーを押しているようでした。これを回避する為に、モーターボリューム制御中を示す表示を追加する事にしました。キー確定したタイミングで、パネルのATT表示とLevel表示の間のスペースに「>>」表示を追加しました。
この表示でキーが正しく受信された事がわかり、操作性が上がりました。
イニシャライズ表示追加
電源オン後のモーターボリュームイニシャライズ処理ですが、ボリュームMaxとなっていると10秒程度時間がかかります。この間、デモ表示のままで正しく動作しているか不安になります。不安を無くすために、上記で追加したモーターボリューム制御中の表示をデモ画面にも追加してみました。イニシャライズ処理では、多少の処理時間増加や精度の悪化は問題ないので、「>>」を点滅表示させてみました。表示の位置は以下のとおりです。
モーター処理と同時の点滅処理ですが、点滅の間隔は全く問題ありませんでした。ますますいい感じになってきました。次回は、せっかくなので余ったリモコンキーにさらに機能を割付けます。
つづく(製作編30)