Javascript 解读/解析来自蓝牙心率监测器(Cordova)的数据

Javascript 解读/解析来自蓝牙心率监测器(Cordova)的数据,javascript,cordova,parsing,bluetooth,heartrate,Javascript,Cordova,Parsing,Bluetooth,Heartrate,我正在使用Cordova创建一个应用程序,它需要解释来自蓝牙HR监视器的数据(能够记录原始RR间隔,如Polar H7)。我正在使用 我很难理解从监视器接收到的数据,尽管我在互联网上搜寻答案并阅读了无数次 下面是我的函数,它在每次接收数据时运行: onData: function(buffer) { console.log(buffer); // var data8 = new Uint8Array(buffer); var data16 = new Uint16Ar

我正在使用Cordova创建一个应用程序,它需要解释来自蓝牙HR监视器的数据(能够记录原始RR间隔,如Polar H7)。我正在使用

我很难理解从监视器接收到的数据,尽管我在互联网上搜寻答案并阅读了无数次

下面是我的函数,它在每次接收数据时运行:

onData: function(buffer) {
    console.log(buffer);

    // var data8 = new Uint8Array(buffer);

    var data16 = new Uint16Array(buffer);
    var rrIntervals = data.slice(1);
    for (i=0; i<rrIntervals.length; i++) {
        rrInterval = rrIntervals[i];
        heartRate.addReading(rrInterval); // process RR interval elsewhere
    }
},
onData:函数(缓冲区){
日志(缓冲区);
//var data8=新的Uint8Array(缓冲区);
var data16=新的UINT16阵列(缓冲区);
var rIntervals=数据切片(1);

对于(i=0;i更新以获得更深入的解释,请查看

我已经弄明白了-这里有一个对遇到类似问题的人的快速解释:

传递到onData(缓冲区)的数据只是二进制数据,因此无论我们将其转换为UINT8数组还是Uint16数组,它都表示相同的二进制数据。当然,Uint16中的整数可能会更大,因为它们包含16位而不是8位

flags字段始终由第一个字节表示,因此我们可以通过将数据(作为缓冲区传入)转换为Uint8Array并访问该数组的第一个元素(即索引为0的元素)来获得该字段

然后,我们可以使用逐位操作检查各个位字段。例如,告诉我们第五位表示读数是否包含RR间隔(1)或不包含任何(0)

下面我们可以看到第五位是二进制数字16:

128 64  32  16  8   4   2   1
0   0   0   1   0   0   0   0  

因此,如果读数包含RR间隔,则操作16&flag(其中flag是包含flags字段的字节)将返回16(可提升为true),如果读数不包含RR间隔,则返回0(提升为false)。

guymclean.co.uk似乎已关闭。该博客文章在其他地方可用吗?
128 64  32  16  8   4   2   1
0   0   0   1   0   0   0   0