我刚刚开始在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()调用来获取新帧时,我只是从启动while循环的Leap Motion获取前一帧,而不是Leap Motion在那一秒看到的帧 . 有没有办法看到Leap Motion在陷入while循环时看到了什么?或者,有没有更好的方法让我停止程序进入下一个电机而不实际等待?
1 回答
嗯 . 如果控制器正在流式传输,
controller.frame()
应始终获取最新帧 . 这应该是controller.lastConnectionFrame
的同义词 .我会为每个电机保持状态变量,然后从你的帧回调中运行所有内容 .
在电机周围有一个包装类甚至可能是有意义的,如果它本身不保持状态,那可能有诸如
startUnlessStarted
tryStart
之类的方法 .