12chアッテネータ2検討(製作編26)

製作編26

赤外線リモコン用受信モジュールを接続して、リモコン機能の動作確認を行います。さらにOLEDパネル表示処理と合体させます。

赤外線リモコン

昨年、DACユニットにリモコン機能を追加しましたが、DACユニットにはHDMI切り替え器に添付されていた赤外線受信モジュールを外付けで接続しました。

オリジナルの赤外線受信モジュールは余っていたので、それを使用します。DACユニットは、現行の12chアッテネータの減衰量のステップの荒さを補う為に、1dBきざみで-3dBまでレベル調整をできるようにしました。今回製作している12chアッテネータでは不要の機能なので、リモコンの流用は問題ありません。使用するソフトは、昨年作成したリモコン単体動作確認用のものを使用します。受信は外部割り込み端子D2(INT0)に入力します。早速接続してみました。

ソフトの詳細は「赤外線リモコンの検討 2021-07-27」からの記事を参照ください。動作確認はarduino IDEのシリアルモニタ上で行います。リモコンの各キーを押して、そのキーがシリアルモニタ上に表示される事が確認できました。

1年経つと自分のコードも思い出すのに苦労しましたが、なんとか理解できました。

OLEDパネル表示と合体

せっかくなので、リモコン処理とOLEDパネル表示処理を合体してみます。使用している変数名のかぶりもなく、そのままソースを合体させるだけでほぼ済みました。シリアルの速度設定等、重複していた宣言を削除しただけです。この状態では、デモ表示後に通常画面表示に切り替わり、その後はシリアルモニタ上に押したキー情報が表示されるだけです。おもしろくないので、ミュート時に使用するブリンク表示を追加してみます。12chアッテネータ現行機で採用したタイマー割り込みで点滅させてみます。使用するライブラリはMsTimer2です。使い方は以下のとおりです。

MsTimer2::set(500, flash); //割り込み間隔500msと実行関数flashを設定

MsTimer2::start(); //タイマー割り込み有効

MsTimer2::stop(); //タイマー割り込み無効

上記のとおり簡単にタイマー割り込みが使用できます。ミュート時に「-xxdB」表示部分のみ点滅させるコードを作成し、実行してみましたが、暴走して正しく動作しません。もしやとおもい、割り込み処理関数内の冒頭に「interrupts();」関数を追加して多重割り込みを有効にしたところ、正しく動作するようになりました。実行画面は以下のとおりです。

作成後、MsTimer2の注意点をネット上で確認したところarduino UNOでは、Timer2の8bitタイマーが下記の機能で使用されている事がわかりました。

・tone()

・3,11番ピンのPWM

今回の製作ではPWMポート全6本を使用しているため、折角実装ができましたが、タイマー割り込みによる点滅処理はボツとしました。やれやれ。仕方がないので、点滅の時間精度は落ちるものの、ソフト処理で点滅を実装する事にします。リモコンキー「▽」でミュートオン、「△」でミュートオフの処理を追加しました。このサンプルソフトは、表示とリモコン処理しかないので、ソフト処理でも点滅の間隔に違和感はありませんでした。次回は、モーターボリュームAssyを接続してソフトの一体化を進めます。

 

つづく(製作編27)