// 接收蓝牙传输的数据取出有用的数值编码
let num = "AAAA01400262007204041FCC".replace("AAAA","").replace("CC",""); //蓝牙回调数据
let sun = 0; //用来验证
let strArr = []; //字节数组
for(let i=0;i=8){
str=str.substring(i-8,i);
}else{let str0="00000000";
str=str0.substring(0,str0.length-i)+str;
}
return str;
},
// bit6-bit0 -- bit6-bit4
bit6_0bit6_4(str0,str1){
return ((parseInt(str0.substring(1,8) + str1.substring(1,4),2).toString(10))/10).toFixed(2)
},
// 解析撞击时间
bit3_0bit3_0(str0,str1){
return ((parseInt(str0.substring(4,8) + str1.substring(4,8),2).toString(10)))
},
// 解析电量
bit3_2bit3_0(str0,str1){
return ((parseInt(str0.substring(4,6) + str1.substring(4,8),2).toString(10))/10).toFixed(2)
},
// 解析出拳类型
bit1_0(str0){
return str0.substring(6,8)
},
以收到字符串AAAA01400262007204041FCC为例,所有字节都是16进制。
1,先去除起始字节AAAA和终止字节CC,有用的数据为:01,40,02,62,00,72,04,04,1F.共9个字节!
2,判断和校验是否正确,将前8个字节相加:01+40+02+62+00+72+04+04=11F,取低8位为1F,与第9字节相同,校验正确,进行下一步,不正确,这包字节丢弃。
3,上述前8个字节依次用Byte0~Byte7表示,速度值speed由Byte0的bit6-bit0 和 Byte1的bit6-bit4组成,即01的低7位(0000001)与40的bit6-bit4(100)组成,组合后为0000001100=0X0C=12,显示的数值要除以10,即显示1.2m/s.
4,加速度g值由Byte2的bit6-bit0 和 Byte3的bit6-bit4组成,即02的低7位(0000010)与62的bit6-bit4(110)组成,组合后为0000010110=0X16=22,显示的数值要除以10,即显示2.2m/s^2.
5,减速加速度值由Byte4的bit6-bit0 和 Byte5的bit6-bit4组成,即00的低7位(0000000)与72的bit6-bit4(111)组成,组合后为0000000111=0X07=7,显示的数值要除以10,即显示0.7m/s^2.
6,撞击次数由Byte6的bit6-bit0 和 Byte7的bit6-bit4组成,即04的低7位(0000100)与04的bit6-bit4(000)组成,组合后为0000100000=0X20=32,即显示32ms.
7,撞击时间由Byte1的bit3-bit0 和 Byte3的bit3-bit0组成,即40的低4位(0000)与62的低4位(0010)组成,组合后为00000010=0X02=2,即显示2.
8,电池电量Byte5的bit3-bit2 和 Byte7的bit3-bit0组成,即72的bit3-bit2位(00)与04的低4位(0100)组成,组合后为000100=0X04=4,显示的数值要除以10,即显示0.4v
9,出拳种类由Byte5的bit1-bit0表示,即72的低2位(10),即下勾拳。