热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

BLE中的心率值

我很难从HR特征中获得有效值。我显然没有在Dart中正确处理这些值。示例数据:List<int>value=[22,56

我很难从 HR 特征中获得有效值。我显然没有在 Dart 中正确处理这些值。

示例数据:

List value = [22, 56, 55, 4, 7, 3];

标志字段:

我将主字节数组中的第一项转换为二进制以获取标志

22 = 10110 (as binary)

这让我相信它是 U16 (bit[0] is == 1)

人力资源价值:

因为它是 16 位,所以我试图获取 1 和 2 索引中的字节。然后我尝试将它们缓冲到 ByteData 中。从那里我将它们转换为 Uint16,并将 Endian 设置为 Little。这给了我 14136 的值。显然我缺少关于它应该如何工作的一些基本知识。

任何帮助清除我不了解如何处理 16 位 BLE 值的帮助将不胜感激。

谢谢你。

/*
Constructor - constructs the heart rate value from a BLE message
*/
HeartRate(List values) {
var flags = values[0];
var s = flags.toRadixString(2);
List flagsArray = s.split("");
int offset = 0;
//Determine whether it is U16 or not
if (flagsArray[0] == "0") {
//Since it is Uint8 i will only get the first value
var hr = values[1];
print(hr);
} else {
//Since UTF 16 is two bytes I need to combine them
//Create a buffer with the first two bytes after the flags
var buffer = new Uint8List.fromList(values.sublist(1, 3)).buffer;
var hrBuffer = new ByteData.view(buffer);
var hr = hrBuffer.getUint16(0, Endian.little);
print(hr);
}
}

回答


您更新后的数据看起来好多了。这是解码它的方法,以及你用来从头开始解决这个问题的过程。

确定格式

该蓝牙网站最近已改组(〜2020年),特别是他们摆脱了一些文件浏览器,这使得事情更难找到并阅读IMO的。所有文档都在心率服务(HRS) 文档中,从GATT 主页面链接,但为了解析格式,我所知道的最佳来源是org.bluetooth.characteristic.heart_rate_measurement的 XML 。(重组之后,不搜索不知道怎么找到这个页面,好像没有链接了。)

字节 0 - 标志:22 (0001 0110)

位从 LSB (0) 到 MSB (7) 编号。


  • 位 0 - 心率值格式:0 => UINT8 每分钟心跳

  • 位 1-2 - 传感器接触状态:11 => 支持并检测到

  • 位 3 - 能量消耗状态:0 => 不存在

  • 位 4 - RR 间隔:1 => 存在一个或多个值

RR 间隔的含义在上面链接的 HRS 文档中进行了解释。听起来你只是想要心率值,所以我不会在这里讨论它们。

字节 1 - UINT8 BPM:56

由于标志的位 0 为 0,因此这是每分钟的节拍数。56.

字节 2-5 - UINT16 RR 间隔:55、4、7、3

您可能不关心这些,但这里有两个 UINT16 值(可以有任意数量的 RR-Interval 值)。BLE 总是小端的,所以 [55, 4] 是 1,079 (55 + 4<<8),而 [7, 3] 是 775 (7 + 3<<8)。

我相信文档对这个有点混乱。XML 建议这些值以秒为单位,但注释说“分辨率为 1/1024 秒”。表达这一点的正常方式是-10,我确定这就是他们的意思。所以这些将是:


  • RR0:1.05 秒 (1079/1024)

  • RR1:0.76s (775/1024)




  • @Emanuel UINT8 表示 8 位无符号整数,因此如果您看到负值,则仅意味着您已将其转换为有符号整数数据类型。确保您使用的是无符号整数。





推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 配置IPv4静态路由实现企业网内不同网段用户互访
    本文介绍了通过配置IPv4静态路由实现企业网内不同网段用户互访的方法。首先需要配置接口的链路层协议参数和IP地址,使相邻节点网络层可达。然后按照静态路由组网图的操作步骤,配置静态路由。这样任意两台主机之间都能够互通。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
author-avatar
天蝎騎著豬狂奔
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有