首页 文章

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

提问于
浏览
1

我刚刚开始在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 回答

  • 1

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

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

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

相关问题