1

我是node.js的新手,我正在尝试确定开关的开启和关闭事件之间的经过时间(使用BeagleBone Black),该脚本可以工作,有点使用.getTime()但是从我读到的不是特别准确。所以我做了一些研究并尝试使用console.time,但是从我读到的内容中,没有办法将时间值导出到这个特定应用程序中的变量中。

我正在尝试编写一个脚本来计时发动机的阀门打开和关闭事件,因此准确性至关重要。唯一的输入是一个簧片开关,它由连接到旋转飞轮的通过磁铁触发。

更简洁地说,有没有办法在 node.js 中准确地定时开/关事件?

var b = require('bonescript');

b.pinMode('P8_19', b.INPUT);
b.pinMode('P8_17', b.OUTPUT);
b.pinMode('USR3', b.OUTPUT);

b.attachInterrupt('P8_19', true, b.CHANGE, interruptCallback);

var cycle = 0;
//var t = 0;
var start, end;


function interruptCallback() {
     if (b.digitalRead('P8_19') == 1)
     {
    console.log('Magnetic field present!');
    cycle=cycle+1;
    console.log ('cycle: ' + cycle);
     }

    else
    {
    //console.time('t');
    start = (new Date()).getTime();
    }
    //console.timeEnd('t');
    //console.log(t);
    end = (new Date()).getTime();
    console.log('elapsed time: ' + (end - start));
}

这是我目前正在使用的完整代码。注意:我还展示了我如何尝试使用 console.time。

感谢您的帮助!

4

1 回答 1

3

要获得尽可能准确的时间测量,请使用process.hrtime(). 从文档中:

在 [seconds, nanoseconds] 元组数组中返回当前的高分辨率实时。它与过去的任意时间有关。它与一天中的时间无关,因此不受时钟漂移的影响。主要用途是测量间隔之间的性能。

该函数返回一个包含秒数和纳秒数的二元素数组。将一个时间对象传递给另一个对象将返回两个对象之间的差异。

对于您的情况:

function interruptCallback() {
  if (b.digitalRead('P8_19') == 1) {
    cycle = cycle + 1;
  } else {
    start = process.hrtime();
  }
  end = process.hrtime(start);
  console.log('elapsed time: ' end[0] + ' seconds and ' + end[1] + 'nanoseonds.');
};
于 2014-02-12T15:47:28.537 回答