Sphero.js で、指定した時間だけ orb.roll をしたい

TOC

  1. コード
  2. コードの解説
  3. 解決法

しばらく投稿してなくてすみません。

Cities Skylines にハマっていました。
え? 動かないんじゃないのだって?
VAIO の設定で、CPU を静かさ優先 -> パフォーマンス優先にしたら、なんとか動きました。
こんなに違うんだ・・
その代わり、パソコンがあったかい~☆し、めっちゃうなっています。
めっちゃ重いけど、めっちゃ面白いです。

さて、今回は、Sphero を Node.js から動かせるというすぐれもの、
Sphero.js に関する Tips ですー。
内容はタイトルの通り!

コード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var sphero = require("sphero");
var orb = sphero("xxx");

orb.connect(function() {
function a() {
orb.color("blue");
orb.roll(100, 0);
setTimeout(b, 100);
}
function b() {
orb.color("red");
orb.roll(0, 0);
setTimeout(c, 100);
}
function c() {
orb.color("green");
orb.roll(100, 180);
setTimeout(d, 100);
}
function d() {
orb.color("yellow");
orb.roll(0, 180);
setTimeout(a, 100);
}
orb.color("black");
setTimeout(a, 1000);
});

コードの解説

0.1 秒毎に、orb.roll を動かす or 止めると、
色を変えています。

最初は正常に動くのですが、だんだん遅れて、
最終的には止まってしまいました。

これでは、正確に 0.1 秒動くことができなくなってしまいます。

解決法

orb.roll で Sphero を動かす前に orb.ping をして、
通信ができるかどうか確認するとできました。

止まる前は orb.ping はしません。
してしまうと、0.1 秒後に止まると出来無いからです。

止まるときに通信できてなくて、
遅れてしまったらもうしょうがないですが・・

ぼくが試した感じでは、
そういうトラブルはなかったです。