今度は、レリーズ中のパルスもしっかり発信するようにしてみる。
オシロスコープを見ているとレリーズ中のパルスは、大体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 件のコメント:
コメントを投稿