obnizのフォーラムは新しいシステムに移行しております。

新しいフォーラムはこちらになります

displayとconsole.logのずれ



  • /始めたばかりの初心者です。
    以下のコードで、超音波センサHC-SR04を駆動させましたが、console.logとdisplayで値を表示しますが、displayが数回分前の値が表示されます。なぜでしょうか
    /

    var obniz = new Obniz('1234-5678');
    obniz.onconnect = async function () {

          obniz.io0.output(false);
          obniz.io3.output(true);
          await obniz.wait(500);
    
          var A,B,C,D,E,eho_time3;
    
          while (true) {
            obniz.display.clear();
            obniz.measure.echo({
              io_pulse: 2, // io for generate pulse
              io_echo: 1, // io to be measured
              pulse: "positive", // generate pulse pattern
              pulse_width: 0.05,  // generate pulse width
              measure_edges: 2, // 1 to 4. maximum edges to measure
              timeout: 1000, // this is optional. 1000(1sec) is default
              callback: function(edges) {
                A=edges.length
                B=edges[0].edge
                C=edges[0].timing
                D=edges[1].edge
                E=edges[1].timing
                
                eho_time3=(E-C);
                eho_time3 *= 340;
                eho_time3 /= 2;
                eho_time3=Math.round(eho_time3);
                console.log(eho_time3);
              }
            });
            obniz.display.print(eho_time3+"mm"); 
            await obniz.wait(2000);
          }
        }


  • obniz.measure.echo 内のcallbackのタイミング(console.logしているタイミング)と、obniz.display.printをしているタイミングが異なるため、遅れて表示される可能性は十分にあるかと思います。

    スクリーンショット 2021-04-21 14.16.57.png

    おそらく、obniz.measure.echoの関数が、callbackがくるまでそこで止まる関数と勘違いされているのかと思います。こちらはバックグラウンドで実行されてしまうため、計測結果がcallbackで帰ってくるよりも先にdisplay.printが呼ばれます。

    callback内にてdisplay.printを行っていただければ、より近いタイミングで描画が可能になりそうです。



  • 待たない仕様なのですね。ありがとうございます



SUGGESTED TOPICS