当サイトでは、iRemo2で利用しているリモコン・データをこちらのDBで公開しています。
で、それをiアプリで使う方法をちょっとだけ説明
リモコンアプリの作成を考えてる人は参考にして下さい。
長くなったので折りたたみ↓↓↓
iアプリでリモコンを扱うには、
パッケージ com.nttdocomo.device のクラス IrRemoteControl と IrRemoteControlFrame の2つのクラスを使います。
で
NECのTVの電源ボタンに割り当てられているデータは以下のようになっています。
割り当て信号 | |||||||||||||||||
|
割り当て信号は、上から順番に、フレーム1・フレーム2と一番下に、ボタンが押し続けられた場合の信号送信方法を示しています。
リモコンによっては、フレームが1つだけの物もあれば、複数フレームの物も有ります。
iアプリでは、複数のフレームを1度に指定して送信する事が可能です。
(ただし、キャリア / コード0 / コード1 は1つしか指定できないので、この3つの数値が異なるフレームは、複数回に分けて送信する必要が有ります。)
それでは、まず、IrRemoteControlFrameクラスで、データを用意します。
このデータの場合フレームは2つなので、2個の配列と実態を用意
IrRemoteControlFrame [] irf = new IrRemoteControlFrame[2]; irf[0]=new IrRemoteControlFrame(); irf[1]=new IrRemoteControlFrame();
フレーム1のヘッダー / ストップ / データ / ビット数 / 送信回数 をセットします。
// ヘッダー irf[0].setStartHighDuration(9000); irf[0].setStartLowDuration(4500); // ストップ irf[0].setStopHighDuration(600); irf[0].setFrameDuration(1072); // データ+ビット数 irf[0].setFrameData(new byte[] {(byte)0x18,(byte)0xE7,(byte)0x10,(byte)0xEF},32); // 送信回数 irf[0].setRepeatCount(1);
注意点は、setFrameDuration
これは、このフレーム全体の送信時間を指定する必要があって、自動で計算してくれないので自分で計算する必要があります。
ヘッダー時間+ストップ時間+データ送信時間
データ送信時間の計算が面倒。
18E710EFを2進に変換して、0の数 x コード0時間 + 1の数xコード1時間
16進 18E710EF > 2進 0001 1000 1110 0111 0001 0000 1110 1111
0 = 16個 / 1 = 16個
全部足すと
9000+4500+600+39200+16*(600+550)+16*(600+1620)
=107220us
指定は、0.1ms単位なので、1072が正解
続けて、次のフレームも設定します。
irf[1].setStartHighDuration(9000); irf[1].setStartLowDuration(2200); irf[1].setStopHighDuration(0); irf[1].setFrameDuration(1075); irf[1].setRepeatCount(IrRemoteControlFrame.COUNT_INFINITE); irf[1].setFrameData(new byte[] {(byte)0x00},1);
setRepeatCountには、無限を表すIrRemoteControlFrame.COUNT_INFINITEを指定。
これで、フレームのデータ設定は終了
続いて、IrRemoteControlクラスを使って用意したフレームデータの送信です。
IrRemoteControlクラスの宣言と、キャリア / コード0 / コード1のセット
IrRemoteControl ir = IrRemoteControl.getIrRemoteControl(); ir.setCarrier(132,132); ir.setCode0(0,600,550); ir.setCode1(0,600,1620);
後は、送信
ir.send(2,irf);
これでは、10秒間でっぱなしなので、適当な所で
ir.stop();
で止めると言った具合です。
リモコン送信 サンプル プログラム
参考用に、今回のプログラムのプロジェクトファイルをアップしておきます。
DoJa 3.5で作ってます。
※2つ目のフレームの指定の表示が間違っていましたので、修正しました。(2009/2/16)
こちらはとてもすばらしいアプリだと思います。
ただ会社の携帯がdocomoでなんとか使用かのうですが、私用の携帯がsoftbankのためこちらも対応することは可能でしょうか。
iRemoのことですよね?
僕自身、docomoの携帯しか持ってないので・・・難しいですね。ごめんなさい。
リモコンデータ公開してるので、誰か実機を持ってる人が作ってくれればいいのですがね
iRemoの記事を参考にdojaのプログラムで自宅のTVなどのリモコンをテストして遊ばせてもらっています。
LIRCからテストしたい型番のデータを確認することができました。
http://lirc.sourceforge.net/remotes/aiwa/RC-AAT11
ただ、上記の形式のデータですと、ストップ信号などFutabaさんのデータベースに記載されている項目が載っていないため困っています。
ストップ信号は算出できるものなのでしょうか。(gapの値から?)
また、上記サイトのデータでは「pre_data_bits 26」、「pre_data 0x381E3F」とありますが、pre_dataを単純にカウントすると24bitなのでは?と困惑しています。
勉強不足の致すところですが、ご教示もしくは参考になるURLなどご紹介いただけませんでしょうか。
よろしくお願いいたします。
>g19様
コメントありがとうございます。
申し訳無いですが、もう長くLIRCは触って無いので、データのフォーマットは忘れてしまいました。
ですので、以下は推測ですが・・・
ストップ信号については、逆算で求めるしか無いと思います。
多分、gapがsetFrameDurationで、ptrailがsetStopHighDurationの値かなと思われます。
pre_dataについては、「pre_data_bits」が正しくて、「pre_data 0×381E3F」は頭の0が省略されているだけでは無いかと思います。
コードのデータでは0が省略されずに「0x000000000000807F」等と表示されているので、「0x381E3F」は「0x0000000000381E3F」と同等かなと思われます。
以上、あくまでも推測ですので、正しいかどうかは自身がありません。
時間があれば、LIRCのソースを見てみるのですが・・・
>Futabaさん
早速のご回答ありがとうございます!
糸口ありがとうございます。確認してみます。
あともうちょい勉強もしときます。
ありがとうございました。
>Futabaさん
頂いた内容でリモコン、できました。
「0×381E3F」については、教えていただいたように26bitになるよう先頭に0を送信するように組んで解決しました。
gap、ptrailともに教えていただいた内容でいけました。
結果的には、データが「POWER 0x00000000000000FF」の場合には、
送信されたデータは「0E 07 8F C0 3F C0」の先頭42bitというようになりました。
これでうちのリモコンも本体側の音量つまみも壊れたコンポの音量を操作できるようになりました。
ありがとうございました!