« 携帯でコントロール(2) | トップページ | 携帯でコントロール(4) »

携帯でコントロール(3)

今日は、実際にiアプリのテスト版を作ってみました。

《赤外線に関するAPI》

赤外線関連のクラスに関して、すべてではありませんが、覚え書き

  • public class IrRemoteControl
    • setCarrier(int highDuration, int lowDuration)
      キャリア情報を設定します。
    • setCode0(int pattern, int highDuration, int lowDuration)
      論理0パルス情報を設定します。
    • setCode1(int pattern, int highDuration, int lowDuration)
      論理1パルス情報を設定します。
  • public class IrRemoteControlFrame
    • setFrameData(byte[] data, int bitLength)
      フレームのデータ部を設定します。
    • setFrameDuration(int duration)
      フレームのリピート時間(0.1m sec)を設定します。
    • setRepeatCount(int count)
      フレームの繰り返し送信回数を設定します。
    • setStartHighDuration(int duration)
      フレームのスタート部のHigh時間(usec)を設定します。
    • setStartLowDuration(int duration)
      フレームのスタート部のLow時間(usec)を設定します。
    • setStopHighDuration(int duration)
      フレームのストップ部のHigh時間(usec)を設定します。

《テストiアプリを作ってみる》

とりあえず、「ハニービー(HoneyBee)を携帯電話のアプリで操作する」にあるソースコードを参考にロボザックのリモコンのID=1のボタン1の場合で、動くものを作ろうとあれこれやってみました。

  • int freq = 38; // KHz
    赤外線の点減の周波数:赤外線はHighの際、つきっぱなしでなく、38〜40KHzの周波数で点減させているらしい。
  • int base = 500; // usec
    ロボザックのリモコンは0.5msかな。
  • irc.setCarrier(10000/freq/2, 10000/freq/2);
    点減時の、発光時間と無発光時間を設定するみたい。一回の点減で光ってる時と消えてる時のそれぞれ時間が同じなら、上記のようになる。例えば、4対1とかだったら、
    (4*10000/freq/5, 10000/freq/5)にすればいいのかな。
  • irc.setCode0(IrRemoteControl.PATTERN_HL, base * 1, base * 1);
    irc.setCode1(IrRemoteControl.PATTERN_HL, base * 2, base * 1);
    「理論0」と「理論1」のパターンを設定します。
    第1引数は、PATTERN_HLとPATTERN_LHとがあり、それぞれ、High->Lowとなるのか、Low->Highとなるのかを選択。第2引数は、Highの時間、第3引数は、Lowの時間
  • frame.setFrameData(data, data.length * 8);
    送信するデータと、そのビットでの長さをセット
  • frame.setStartHighDuration(0);
    リーダーのHighの長さをセットすればいいのかな?
  • frame.setStartLowDuration(0);
    リーターのLowの長さをセットすればいいのかな?リーダ部分は5msなので、5000とすればいいのかな?
  • frame.setStopHighDuration(0);
  • frame.setFrameDuration(data.length * 8 * base * 4 / 100 + 60 + 85);
    なぜ、4倍して100で割っているのか?
    なぜ60と85を足しているのか?
    わからないsweat01

送信するデータは
String source = "001101111000000000100000"
の部分です。ロボザックの赤外線リモコンは、ID=1, ボタン1の場合、コードが10101で、データが0x00なので、

  1. String source = "1010100000000000"
    irc.setCode0(IrRemoteControl.PATTERN_HL, base * 1, base * 1);
    irc.setCode1(IrRemoteControl.PATTERN_HL, base * 2, base * 1);
    frame.setStartHighDuration(0);
    frame.setStartLowDuration(0);
  2. String source = "0101011111111000"
    irc.setCode0(IrRemoteControl.PATTERN_LH, base * 1, base * 1);
    irc.setCode1(IrRemoteControl.PATTERN_LH, base * 1, base * 2);
    frame.setStartHighDuration(5000);
    frame.setStartLowDuration(0);

と書き換え、試してみましたが、ダメでしたdown

ロボザック君は、なんの反応もしてくれないのですが、2の方のURLは以下です。
Rz1test

作ったアプリがどんな値を送信しているのか知りたいです。。。
観念して、PC-OP-RS1を買って、調べるしかないかなぁ〜〜

《今回新たに参考にした資料》


-----------------------------

----------------
にほんブログ村 科学ブログ 
ロボットへ
にほんブログ村

|

« 携帯でコントロール(2) | トップページ | 携帯でコントロール(4) »

工作・改造・解析」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/221673/41399254

この記事へのトラックバック一覧です: 携帯でコントロール(3):

« 携帯でコントロール(2) | トップページ | 携帯でコントロール(4) »