IRModule の start と send について



  • IRModule の start と send について教えてください。

    赤外線リモコンのデータを受信して、記憶し、
    4秒後にそのデータを送信するプログラムを書いたのですが、うまく行きません。
    こちらが期待する動作としては、
    ①赤外線リモコンの操作があるまで待機。
    ②1回受信した後、そのデータを記憶。
    ③4秒待機して、②で記憶した受信データを送信。
    で①②③を繰り返すというものです。
    しかし、下記 Javascript を実行すると、
    最初のデータまでは待機状態なのですが、
    一度受信した後は、その後リモコン操作が無いにもかかわらず、
    ②③を延々と繰り返す動作になります。
    ちなみに、下記ソースの irmodule.send( ir_send ); の行のみコメントアウトして動作させないようにすると、
    ①②③と動作し、次のリモコン操作まで待機してくれます。

    irmodule.send()の有り無しで、どうして動作に違いが出るのか理解できません。
    ご教示のほどよろしくおねがいします。

    obniz ボードは obniz Board 1Y を使用し、
    IRユニットは Obniz IR Transceiver Module CBR-IR002 を使用しています。

    <script>
            $("#bploading").text("RUNNING...");
            (async function(){
              var obniz, irmodule, ir_rcv_col;
        
              obniz = new Obniz('XXXX-XXXX');
              await obniz.connectWait();
              irmodule = obniz.wired("IRModule",{"vcc":0, "send":1, "recv":2, "gnd":3});
              irmodule.duration = 800;
              irmodule.start();
    
             while(1){ 
                ir_rcv_col = (await new Promise(resolve=>{ irmodule.ondetect = resolve; })); 
                console.log('rcvd');
                console.log(ir_rcv_col);
                await obniz.wait(4000);  
                ir_send = ir_rcv_col;
                if ( ir_rcv_col.length != 0 ){
                  console.log('send');
                  console.log( ir_send );
                  irmodule.send( ir_send );
                }
    
                ir_rcv_col.length = 0;
                console.log(ir_rcv_col);
    
              }
    
            })();
        
    </script>
    


  • おそらく、ですが、自分で発した赤外線が時間差で受信されているような気がします。

    部屋の中とかだと、壁に反射した赤外線が戻ってくるので、send / recvを連続して行うと自分の発した赤外線を受信します。

    send直後に、たとえば4秒のwaitをいれると解決したりしないでしょうか。


Log in to reply
 

SUGGESTED TOPICS

  • 3
  • 2
  • 2
  • 7
  • 3
  • 2