我刚刚开始在JS中为Leap Motion编程。我正在开展一个项目,我可以根据从Leap Motion中读取的手势来控制电机。正在解析帧,然后使用johnny-five库通过Arduino Uno将命令发送到电机。 这是我从Leap Motion抓取帧的方式:
`var five = require('johnny-five'),
Leap = require('leapjs'),
board = new five.Board(),
motor, frame, hand;
board.on('ready', function()
{
var controller = Leap.loop({enableGestures: true}, function(frame)
{
checkData(frame);
});
});`
我从Leap Motion中取出帧并将帧发送到穿过帧的函数,读取手势,然后调用控制电机的新函数:
var motorA = new five.Motor([3, 0, 2]);
motorA.start(255);
while(!finished)
{
board.wait(5000, function()
{
motorA.stop();
runMotorB(number);
finsihed = true;
});
}
我的问题是我需要一个while循环来让程序在运行下一个电机之前等待第一个电机结束。 board.wait()似乎不会阻止程序继续运行到下一个电机而不等待第一个电机停止。我还需要能够在while循环中运行电机并等待它结束时从Leap Motion抓取帧。这是因为我希望能够看到电机运行时是否出现了新的手势。但是,每当我尝试使用controller.frame()调用来抓取一个新帧时,我只是从Leap Motion中获取前一帧开始while循环,而不是Leap Motion在那一秒看到的帧。 有没有办法看到Leap Motion在陷入while循环时看到了什么?或者有没有更好的方法让我停止程序进入下一个电机而不实际等待?
答案 0 :(得分:1)
嗯。如果控制器正在流式传输,controller.frame()
应始终获取最新的帧。这应与controller.lastConnectionFrame
同义。
我会为每个电机保持状态变量,然后从帧上回调中运行所有内容。
在电机周围有一个包装类甚至可能有意义,如果它本身不保持状态,可能有startUnlessStarted
tryStart
等方法。