首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试从极地H10 (蓝牙低能样本UWP)中获取心率变异性

尝试从极地H10 (蓝牙低能样本UWP)中获取心率变异性
EN

Stack Overflow用户
提问于 2018-10-24 13:51:10
回答 1查看 2.2K关注 0票数 2

我正在与极地H10合作,从它得到心率变异性。

我正在运行微软的蓝牙低能采样

我用这个样本从另一个极地设备(极地OH1)获得心率,它工作得很好。

但是现在我想从极地H10得到HRV。但是BLE样本代码并没有真正地向我展示HRV的特性,它应该像心率一样。

这是我所看到的唯一特点:

代码语言:javascript
运行
复制
 // first layer keys are serviceUuid's
// second layer keys are characteristicUuid's
// with their respective name/description as values
{
    "1800"    /* Generic Access */                      : {
    "2a00": "Device Name",
    "2a01": "Appearance",
    "2a02": "Peripheral Privacy Flag",
    "2a03": "Reconnection Address",
    "2a04": "Peripheral Preferred Connection Parameters"
},
"1801"    /* Generic Attribute */                   : {
    "2a05": "Service Changed"
},
"180d"    /* Heart Rate */                          : {
    "2a37": "Heart Rate Measurement",
    "2a38": "Body Sensor Location"
   // This is where it should show Heart Rate Variability //
},
"180a"    /* Device Information */                  : {
    "2a23": "System ID",
    "2a24": "Model Number String",
    "2a25": "Serial Number String",
    "2a26": "Firmware Revision String",
    "2a27": "Hardware Revision String",
    "2a28": "Software Revision String",
    "2a29": "Manufacturer Name String"
},
"180f"    /* Battery Service */                     : {
    "2a19": "Battery Level"
},
"6217ff4b-fb31-1140-ad5a-a45545d7ecf3" /* unknown */: {
    "6217ff4c-c8ec-b1fb-1380-3ad986708e2d": "unknown", /* read:true */ // value = 
     uInt16Array [3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    "6217ff4d-91bb-91d0-7e2a-7cd3bda8a1f3": "unknown" /* write:true, 
     indicate:true, descriptors:{ descriptorUuid: "2902" }*/
 {
     /* 6172 */
     this service has all the numbers which I have no idea about. 
     Example: 10905, 10906, and etc.  
  }
}

有人知道我应该对代码做什么调整才能得到HRV吗?

代码语言:javascript
运行
复制
                 **EDIT::** 


           private static ushort ParseHeartRateValue(byte[] data)
    {

        // Heart Rate profile defined flag values
        const byte heartRateValueFormat = 0x01;

        byte flags = data[0];
        bool isHeartRateValueSizeLong = ((flags & heartRateValueFormat) != 0);

        if (isHeartRateValueSizeLong)
        {
            return BitConverter.ToUInt16(data, 1);
        }
        else
        {
            return data[1];
        }
    }

/在更新上述方法/之后

代码语言:javascript
运行
复制
          private static ushort ParseHeartRateValue(byte[] data)
    {
        ushort offset = 1;
        // Heart Rate profile defined flag values
        const byte heartRateValueFormat = 0x01;

        byte flags = data[0];
        bool rr = (flags & (1 << 4)) != 0;
        if (rr)
        {
            int count = (data.Length - offset) / 2;
            for (int i = 0; i < count; i++)
            {

                ushort value = BitConverter.ToUInt16(data, offset);

                double intervalLengthInSeconds = value / 1024.0;
                offset += 2;
            }
        }
        bool isHeartRateValueSizeLong = ((flags & heartRateValueFormat) != 0);

        if (isHeartRateValueSizeLong)
        {
            return BitConverter.ToUInt16(data, 1);
        }
        else 
        {
            return data[1];
        }

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-24 15:03:13

您使用的设备遵循心率蓝牙规范。所以它发送的数据应该遵守这个标准。如果您引用这份文件,您将阅读0x2A37特性,这是您在问题中列出的,但您不应该将其作为int来接收。

特性给出的不同值列在我所链接的文档中。我想你们会对“RR-区间”感兴趣,它的分辨率是1/1024秒。

您需要从值中检索所需的字节。注意字节顺序。如文件所述:

上表中的字段按LSO到MSO的顺序排列。其中LSO =最小的八进制,MSO =最重要的八位。

因此,您正在寻找值的最后两个字节,因为RR-间隔是一个uint16。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52970763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档