Javascript 解读/解析来自蓝牙心率监测器(Cordova)的数据
我正在使用Cordova创建一个应用程序,它需要解释来自蓝牙HR监视器的数据(能够记录原始RR间隔,如Polar H7)。我正在使用 我很难理解从监视器接收到的数据,尽管我在互联网上搜寻答案并阅读了无数次 下面是我的函数,它在每次接收数据时运行: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
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