【问题标题】:Refreshing the frame coming from the Leap Motion when in a while loop在 while 循环中刷新来自 Leap Motion 的帧
【发布时间】:2014-11-26 01:36:24
【问题描述】:

我刚刚开始用 JS 为 Leap Motion 编程。我正在做一个项目,我可以根据从 Leap Motion 读取的手势来控制电机。正在解析帧,然后使用 johnny-5 库通过 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 循环中时看到的内容?或者有没有更好的方法让我在不等待的情况下阻止程序移动到下一个电机上?

【问题讨论】:

    标签: javascript arduino leap-motion johnny-five


    【解决方案1】:

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

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

    如果电机本身不保持状态,它甚至可能有一个包装类,它可能有诸如startUnlessStartedtryStart之类的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      相关资源
      最近更新 更多