Sphero.js で、指定した時間だけ orb.roll をしたい
しばらく投稿してなくてすみません。
Cities Skylines にハマっていました。
え? 動かないんじゃないのだって?
VAIO の設定で、CPU を静かさ優先 -> パフォーマンス優先にしたら、なんとか動きました。
こんなに違うんだ・・
その代わり、パソコンがあったかい~☆し、めっちゃうなっています。
めっちゃ重いけど、めっちゃ面白いです。
さて、今回は、Sphero を Node.js から動かせるというすぐれもの、
Sphero.js に関する Tips ですー。
内容はタイトルの通り!
コード
1 | var sphero = require("sphero"); |
コードの解説
0.1 秒毎に、orb.roll を動かす or 止めると、
色を変えています。
最初は正常に動くのですが、だんだん遅れて、
最終的には止まってしまいました。
これでは、正確に 0.1 秒動くことができなくなってしまいます。
解決法
orb.roll で Sphero を動かす前に orb.ping をして、
通信ができるかどうか確認するとできました。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var sphero = require("sphero"); | |
| var orb = sphero("COM7"); // 自分の Sphero の ID に置き換える | |
| orb.connect(function() { | |
| function setSpheroTimeout(fn, time) { | |
| setTimeout(function() { | |
| orb.ping(function() { | |
| fn(); | |
| }); | |
| }, time); | |
| } | |
| function a() { | |
| orb.color("blue"); | |
| orb.roll(100, 0); | |
| setTimeout(b, 100); | |
| } | |
| function b() { | |
| orb.color("red"); | |
| orb.roll(0, 0); | |
| setSpheroTimeout(c, 100); | |
| } | |
| function c() { | |
| orb.color("green"); | |
| orb.roll(100, 180); | |
| setTimeout(d, 100); | |
| } | |
| function d() { | |
| orb.color("yellow"); | |
| orb.roll(0, 180); | |
| setSpheroTimeout(a, 100); | |
| } | |
| orb.color("black"); | |
| setTimeout(function() { | |
| isCheckSphero = true; | |
| streamCallback = a; | |
| }, 100); | |
| }); |
止まる前は orb.ping はしません。
してしまうと、0.1 秒後に止まると出来無いからです。
止まるときに通信できてなくて、
遅れてしまったらもうしょうがないですが・・
ぼくが試した感じでは、
そういうトラブルはなかったです。