2008年9月17日水曜日

iアプリ作成2

調子にのって、リモコンのテストの続き。
今度は、レリーズ中のパルスもしっかり発信するようにしてみる。


オシロスコープを見ているとレリーズ中のパルスは、大体250msに1回の頻度で発生しているみたい。
第1フレームは450msで開始プロトコルを発生させて、
第2フレームは250msで一番最初に4msの1パルスを発生させればいいだけなんだね。
てなわけで、ごにょごにょと。
 
import com.nttdocomo.device.*;
import com.nttdocomo.ui.*;

public class RemoteTest2 extends IApplication {

int freq = 38; // KHz
int base = 1000; // usec

IrRemoteControl irc;

public void start() {
irc = IrRemoteControl.getIrRemoteControl();

Dialog dia = new Dialog(Dialog.BUTTON_OK, "IRリモコンテスト");
try {
dia.setText("送信します\n");
dia.show();

irc.setCarrier(5000/freq, 5000/freq ); //一般的なキャリア
//0:High=1ms,Low=1ms
irc.setCode0(IrRemoteControl.PATTERN_HL, base*1, base*1);
//1:High=3ms,Low=3ms
irc.setCode1(IrRemoteControl.PATTERN_HL, base*3, base*3);

//開始フレーム
IrRemoteControlFrame frame1 = new IrRemoteControlFrame();
frame1.setFrameData(new byte[]{(byte)0x80}, 8);
frame1.setStartHighDuration(base*10); //スタートは10ms
frame1.setStartLowDuration(0); //1とあわせて13ms+3ms
frame1.setStopHighDuration(0); //ストップパルスは使わない
frame1.setFrameDuration(450 * 10); //フレーム長(0.1ms)
frame1.setRepeatCount(1);

//レリーズ用パルスフレーム
IrRemoteControlFrame frame2 = new IrRemoteControlFrame();
frame2.setFrameData(new byte[]{(byte)0x0}, 0);
frame2.setStartHighDuration(base*4); //4msパルス
frame2.setStartLowDuration(0);
frame2.setStopHighDuration(0);
frame2.setFrameDuration(250 * 10);
frame2.setRepeatCount(IrRemoteControlFrame.COUNT_INFINITE);

IrRemoteControlFrame[] ircf =
new IrRemoteControlFrame[] {frame1,frame2};
irc.send(ircf.length, ircf, 30); //送信

Thread.sleep(3000); //3秒間

irc.stop();

dia.setText("送信しました\n");
dia.show();

} catch (Exception e) {
dia.setText("エラー"+ e.getMessage());
dia.show();
}
this.terminate();
return;
}
}

こんな感じかな?

とりあえず、出力してみると、


いい感じにリモートコントロールFと同じになりました。

0 件のコメント: