我有一个低能量蓝牙设备,可以获取与心脏监测设备相当的信号。该数据在单独的绘图屏幕上实时绘制。
我的问题是我认为我从硬件获得的值是错误的。
在我的方法didUpdateValueForCharacteristic中有几行相关信息:
case TI_KEYFOB_ACCEL_X_UUID: // x value characteristic
{
UInt8 xval[20];
[characteristic.value getBytes:&xval length:TI_KEYFOB_ACCEL_READ_LEN];
然后我继续对数组中的每个值进行一些计算,每个值都应该是一个字节。通过每次迭代(我认为256赫兹),我得到20个字节的数据,并将其推送到大小为20的数组中。
这些是characteristic.value
的值,我得到的所有20个字节:
[0] UInt8 '\x9b'
[1] UInt8 '\xe1'
[2] UInt8 '\xba'
[3] UInt8 '9'
[4] UInt8 '\x01'
[5] UInt8 '\0'
[6] UInt8 '\0'
[7] UInt8 '\0'
[8] UInt8 '\x01'
[9] UInt8 '\0'
[10] UInt8 '\0'
[11] UInt8 '\0'
[12] UInt8 '\b'
[13] UInt8 'M'
[14] UInt8 '\xd5'
[15] UInt8 '''
[16] UInt8 '\x1f'
[17] UInt8 '\xe6'
[18] UInt8 '\xbb'
[19] UInt8 '9'
我不确定这些值实际代表什么。看起来部分是二进制的,部分是可能地址的十六进制值。 我所知道的是,我可以将这些值乘以其他整数,并以某种方式得到一个相同数字的常量字符串。
1,0,0,0,1,0,0,0,8,125,214,39,31,230,187,57,49,225,186,57
但这不是我想要的价值。我有点迷茫,我已经尝试将characteristic.value切换到characteristic.valueHandle和其他东西,但我认为它应该将数据导入值的部分,所以它的编写方式应该是好的。
我也尝试将TI_KEYFOB_ACCEL_X_UUID
更改为其他特性,例如... Y_UUID,但我很确定它应该从X_UUID获取相关数据。
无论如何,任何帮助或指向正确的方向都会有所帮助。
答案 0 :(得分:0)
环顾四周,我发现TI_KEYFOB_ACCEL_READ_LEN应该只有1.
case TI_KEYFOB_ACCEL_X_UUID: {
char xval;
[characteristic.value getBytes:&xval length:TI_KEYFOB_ACCEL_READ_LEN];
float x = (float)xval;
...