リモコンでのコントロールが出来るように赤外線受光センサーを追加しました。場所が無い為、写真の様な位置になっています。
0ボタン:MUTE
↑ ボタン:音量大
↓ ボタン:音量小
上記の制御のみです。↑ ボタン:音量大、↓ ボタン:音量小はボタンを押すたびに1dBずつ上下します。長押しで連続にすればいいのですが、面倒でやっていません。
ロータリーエンコーダはタイマー割り込みで1ms毎にポーリングしていましたが、これだとvoid loop(){ }内のプログラムが実行されません。タイマーの時間を長くするとエンコーダの取りこぼしが出てきます。
割り込みは止めてloop()内に入れて実行しています。それでもエンコーダの取りこぼしが時々出ます。エンコーダを確実に操るのは結構大変です。
Arduinoはそれなりにプログラミングが楽なのですが、割り込みの制約があったりで、より細かい動きをさせるにはやはりCやC++で書くほうが良さそうです。
今回プログラム作りで混乱したのは、
音量ーー>大 LCD表示は-95dBーー>94--> ---- 0dB
音量ーー>小は上記の逆。
音量の大小でデータのインクリメント、デクリメントさせる事にしたのですが、LCDの標示数字は逆、エンコーダのパルス数との絡みで頭の中が混乱していやはや大変でした。
リモコンのボタンを押している間音量を上げ下げ出来れば1dBずつよりは早くていいのですが、これが意外とむずかしい。と云うのはリモコンはボタンを押し続けると同じコードが連続して出てきません。リーピートビットとか云うコードげ出ています。
ボタンを押したときだけボタン対応のコードが出ますが、其のまま押していても同じコードは押しなおさない限りでません。
出るリモコンもあるようですが。