在while循环中刷新来自Leap Motion的帧

时间:2014-11-26 01:36:24

标签: javascript arduino leap-motion johnny-five

我刚刚开始在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循环时看到了什么?或者有没有更好的方法让我停止程序进入下一个电机而不实际等待?

1 个答案:

答案 0 :(得分:1)

嗯。如果控制器正在流式传输,controller.frame()应始终获取最新的帧。这应与controller.lastConnectionFrame同义。

我会为每个电机保持状态变量,然后从帧上回调中运行所有内容。

在电机周围有一个包装类甚至可能有意义,如果它本身不保持状态,可能有startUnlessStarted tryStart等方法。