我正在用Ionic和它的蓝牙串行插件构建一个蓝牙应用程序,根据这方案,它可以从心率监控器读取3个字节。
插件以ArrayBuffer的形式返回数据,其中包含一个10位整数,分布在两个字节上。我不知道如何提取这10位,并将它们转换成整数,有人能帮我吗?
编辑:这是pdf中的数据结构:
当处于活动或模拟模式时,BITalino (R)演化固件实时地对获取的数据进行流,格式化为与以下内容对应的结构化比特序列: CRC: 4位循环冗余校验(CRC)码,用于评估接收端的数据包一致性. 由固件生成的4位序列号用于识别数据包,可用于接收端检测数据包丢失。 O1 & O2:设备上的数字输出端口O1和O2的状态。 I1 & I2:设备上的数字输入端口I1和I2的状态。 A1-A6: ADC为对应模拟输入端口a1-a6的电压产生的数字编码;前四个通道以10位分辨率(范围为0-1023)到达,而后两个通道以6位(范围为0-63)到达。
图:位图
干杯,
贾里德
发布于 2017-05-03 17:55:39
如果我正确地阅读图表,数据是字节的较低的4位和字节的更高的6位;
// (buffer[1] - 0) & 0x0f) // get the 4 bits from byte 1 // (((buffer[0] - 0) & 0xfc) << 2) // get the 6 bits from byte 0 and shift over twice result = ((buffer[1] - 0) & 0x0f) + ( ((buffer[0] - 0) & 0xfc) << 2 )
您有字节缓冲区外观的示例吗?
为了更好地理解0x,我们需要更详细地看一下图表。
前4位位于字节1,特别是位0-3上.位0-3为1+2+4+8= 15或0x0f.我本可以说(buffer1 - 0) & 15),但是使用十六进制表示法0x0f看起来更干净,并且可以反映数据。
对于字节0的数据,它来自位2-7,它加在一起等于252或0xfc。现在这个数据的问题是,它从位2开始,字节1的数据在位3结束。我们需要移动比特,所以它们从位4开始,没有任何重叠。随着位的移位,我们可以把这两个数字相加,得到合并的数字。
如果您需要知道,我会在整个地方减去0,因为这迫使JavaScript将这些操作作为数字来处理,而不是尝试执行字符串运算。
发布于 2017-05-03 18:20:44
我想你想要使用read函数,然后你应该做‘Michael’指出的事情。我会这样写(编辑):
let array = new Int8Array(3);
bluetoothSerial.read(function(data) {
array[0] = (data >> 16) & 0xff;
array[1] = (data >> 8) & 0xff;
array[2] = data & 0xff;
});
var bits6 = parseInt(array[0] & 0xfc);
bits6 <<= 2;
//0xfc=1111 1100, 0x0f=0000 1111
var decodedInteger = bits6 + parseInt(array[1] & 0x0f); https://stackoverflow.com/questions/43766485
复制相似问题