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をしているタイミングが異なるため、遅れて表示される可能性は十分にあるかと思います。
おそらく、obniz.measure.echoの関数が、callbackがくるまでそこで止まる関数と勘違いされているのかと思います。こちらはバックグラウンドで実行されてしまうため、計測結果がcallbackで帰ってくるよりも先にdisplay.printが呼ばれます。
callback内にてdisplay.printを行っていただければ、より近いタイミングで描画が可能になりそうです。
-
待たない仕様なのですね。ありがとうございます