我正在尝试通过蓝牙读取心率监视器传输的数据,但我真的不知道如何读取心率监视器返回的字节。
每个供应商可能都有自己的将数据包装成字节的方法。但是如何将这些字节转换为某种可读格式,以便我可以分析其中的变化?
例如 ASCII 值或某些十六进制值。
我尝试了 My Track 应用程序的代码,但这对我不起作用。
MyTrack 解析心率数据 http://code.google.com/p/mytracks/source/browse/MyTracks/src/com/google/android/apps/mytracks/services/sensors/PolarMessageParser.java
我正在尝试读取 Android 中的字节,到目前为止我正在获取这些数据,但不知道哪个字段代表什么。
55 04 00 38 00 15 af
14 b0 00 38 00 13 b1
55 04 00 38 00 13 b1
55 04 00 38 00 12 b2
希望您的心率监测器遵循此处定义的数据规范:
Bluetooth.org 上的心率测量 https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.heart_rate_measurement.xml
据我所知,以下是如何应用该文档中的信息:
- 获取第一个十六进制字节 55,并将其转换为二进制:01010101。
- 由于蓝牙数据是小尾数,因此将该序列的右端视为位 0,左端视为位 7。
- 现在您可以查看蓝牙消息的 Flags 字段的文档。标志字段的位 0 告诉您心率数据是 8 位还是 16 位。在你的例子中,位 0 是 1,所以你有 16 位数据。
- 查看第一个示例中接下来的两个十六进制字节:04 00。
- 将其转换为十进制。现在这部分我不确定。如果我将 04 00 转换为十进制,我会得到 1024,所以我一定做错了什么。也许巧合的是,如果我反转这些数字并将 00 40 转换为十进制,我会得到 64,这可能是坐在电脑前的人的心率值(我现在是 62)。也许有人可以评论如何解释这部分。
就我而言,使用 Wahoo Blue HR,返回的数据如下:
14 46 59 03 58 03
将 14 转换为二进制 (00010100) 并查看位 0 (0) 告诉我心率是 8 位,因此我只需要第二个十六进制字节 (46)。将其转换为十进制得到 70。
不幸的是,我不知道如何解释你的第二个样本。第一个十六进制字节 14 表示一个 8 位值,但这将使心率值 B0 或 176——对于坐在计算机前的人来说这不是一个可能的值。我也不希望单个设备在传输 8 位和 16 位值之间切换,但我认为这是可能的。
这个问题 https://stackoverflow.com/questions/14038906/apples-heart-rate-monitoring-example-and-byte-order-of-bluetooth-heart-rate-mea包含进行这些转换的代码,它对我有用。我只是想在实施之前尝试理解文档。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)