11. TVのリモコンが使えるようになった

今回のラズパイマガジン リモコン用コマンドの作者ブログに、「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