今回のラズパイマガジン リモコン用コマンドの作者ブログに、「2018-07-08 赤外線解析の機能追加」との記載が有り、getIR2コマンドで連続でデータ解析する機能が追加されて、setIR2コマンドもリピートコード送信が可能になったとの記述が有った。
早速、ダウンロードして最新版で今まで安定しなかったTVのON/OFFを試してみた。
しかし、まるで反応無し。
そこで、getIR2コマンドの新機能でTVリモコンの信号を確認して見たところ、同じコードが連続3回出力されていた。
それならばと、自前pythonプログラムでTV信号は3回出力するようにしたがダメで、それどころか、前setIR2では問題無く動作していたシーリングライトまで動作しなくなっていた。アンプや扇風機は問題無く動作したので、違いを確認したところ、リモコン信号のNEC方式がOKで家電製品協会方式(AEHA)がNGであることが分かった。
取り敢えず、pythonプログラムは元に戻し、setIR2コマンドも前バージョンに戻し、当然ながらシーリングライトは動作した。
ダウンロードしたデータには、C言語のソースファイル(setIR2.c)も含まれていたので、新旧バージョンの違いを調べたら、信号幅を決めるため(?)の定数が変更されていた。
コンパイル用シェルも含まれていたので、プログラムを少し修正してみる。
定数は、NEC、AEHAとSONYの3方式とも変更されていたが、先ずは影響の出ているAEHAの値を'21'から旧バージョンの'19'に戻し、ついでに、「main」ルーチン内でTV信号は3回送信するように変更して、コンパイル後にテスト。
シーリングライトのON/OFF OK
TVのON/OFF OFFはOK、ONはOFFした直後はOKだが、OFF後、暫くしてからはNG
「う〜む、あともう少しなんだけど。定数は大きくなったらダメになったので、少なくしてみよう」と思い、'17'に変更してコンパイル後、再テストしたら……(^o^)/
TVのON/OFFも漸くOKになり、これで、全対象機器のリモコン操作が出来るようになった。
「setIR2.c」
#define AEHA 17 // 21 change to 19 to 17
:
:
int main(int argc, char *argv[])
{
:
:
setIR();
// if SONY try 3 times
if(mode==3){
setIR();
setIR();
} else if(mode==2 && buf[0]==2 && buf[1]==32 && buf[2]==128){
// Panasonic TV
setIR();
setIR();
}
return 0;
}
2018/09/04