C++读取BWT901CL传感器的数据

news/2024/11/13 3:54:10/

1 简述

最近在学习人体姿态设别的算法。想着买个角度传感器去尝试下。这个传感器最好是无线的带电池的,这样对我来说是比较方便使用的。我就在淘宝上找到一个一款BWT901CL,这个角度传感器。这个模块挺好用的,有加速度、角速度、角度。而且都是三个轴的。精度的话呢加速度0.01g、角速度0.63°/s、角度静态是0.05、动态是0.1。精度是满足我的需求的。给大家看下模块。
在这里插入图片描述

2 程序设计

2.1数据处理

根据商家给的通讯协议(如下图)。写了一个接收程序。
在这里插入图片描述
根据这个协议就很好理解我写的数据处理程序。这个BWT901CL蓝牙输出的角度的一共是11位数据。所以,我先判断数据 的长度是不是11位,然后再判断包头是不是55。如果不是55在判断下一位是不是55。直到我找到了55这个包头,然后才进行11位数据的第二位的数据的判断,是不是50、51、52、53、54这种商家定义的代表时间、加速度、角速度、角度、磁场的数。

void CJY901 ::CopeSerialData(char ucData[],unsigned short usLength)
{static unsigned char chrTemp[2000];static unsigned char ucRxCnt = 0;	static unsigned short usRxLength = 0;memcpy(chrTemp,ucData,usLength);usRxLength += usLength;while (usRxLength >= 11){if (chrTemp[0] != 0x55){usRxLength--;memcpy(&chrTemp[0],&chrTemp[1],usRxLength);                        continue;}switch(chrTemp[1]){case 0x50:	memcpy(&stcTime,&chrTemp[2],8);break;case 0x51:	memcpy(&stcAcc,&chrTemp[2],8);break;case 0x52:	memcpy(&stcGyro,&chrTemp[2],8);break;case 0x53:	memcpy(&stcAngle,&chrTemp[2],8);break;case 0x54:	memcpy(&stcH,&chrTemp[2],8);break;}usRxLength -= 11;memcpy(&chrTemp[0],&chrTemp[11],usRxLength);                     }
}

2.2 UART打印程序

int _tmain(int argc, _TCHAR* argv[])
{char chrBuffer[2000];unsigned short usLength=0,usCnt=0;unsigned long ulBaund=9600,ulComNo=3;signed char cResult= 1;	printf("请输入串口号:\r\nCom = ");scanf("%ld",&ulComNo);printf("请输入波特率:(9600、115200或其他)\r\nBaud = ");scanf("%ld",&ulBaund);printf("等待打开串口%d...\r\n",ucComNo);while(cResult!=0){cResult = OpenCOMDevice(ulComNo,ulBaund);}while(1){usLength = CollectUARTData(ulComNo,chrBuffer);if (usLength>0){JY61.CopeSerialData(chrBuffer,usLength);}Sleep(100);if (usCnt++>=0){usCnt=0;printf("Time:20%d-%d-%d %d:%d:%.3f\r\n",(short)JY901.stcTime.ucYear,(short)JY901.stcTime.ucMonth,(short)JY61.stcTime.ucDay,(short)JY901.stcTime.ucHour,(short)JY901.stcTime.ucMinute,(float)JY901.stcTime.ucSecond+(float)JY901.stcTime.usMiliSecond/1000);printf("Acc:%.3f %.3f %.3f\r\n",(float)JY901.stcAcc.a[0]/32768*16,(float)JY901.stcAcc.a[1]/32768*16,(float)JY901.stcAcc.a[2]/32768*16);printf("Gyro:%.3f %.3f %.3f\r\n",(float)JY901.stcGyro.w[0]/32768*2000,(float)JY901.stcGyro.w[1]/32768*2000,(float)JY901.stcGyro.w[2]/32768*2000);printf("Angle:%.3f %.3f %.3f\r\n",(float)JY901.stcAngle.Angle[0]/32768*180,(float)JY901.stcAngle.Angle[1]/32768*180,(float)JY901.stcAngle.Angle[2]/32768*180);	}	}return 0;
}

3 结果展示
在这里插入图片描述
链接:https://pan.baidu.com/s/1CMRtfp-c0YPSKOqC_aAFPA


http://www.ppmy.cn/news/669510.html

相关文章

学习 STM32之九轴姿态传感器(BWT901CL)串口通信读取数据

由于个人应用到3轴传感器,所以买了直接买了一个9轴的,用于学习STM32Core平台串口2连接维特智能串口Normal协议,然后通过串口1直接打印数据,接收传感器数据和与传感器进行通信;需要看产品文档的可以直接官网搜索文档&am…

BWT压缩算法及FM搜索算法详解

BWT压缩算法其经典地位无可撼动, 思想真是个奇妙的东西, 废话不多说, 让我们来看看她的奇妙之处吧。 假设有一串字符串S"acaacg", 长度为6, 如果直接对此串进行压缩, 可能是a 1, c 1, a 2, c 1, …

Spring计时器StopWatch

文章目录 StopWatch介绍StopWatch属性详解StopWatch方法详解StopWatch使用示例 StopWatch介绍 StopWatch类是Spring框架中用于测量代码执行时间的工具类,它提供了一系列属性来记录监测信息。 本文基于spring-boot-starter-web:2.2.2RELEASE版本。 源码&#xff1…

BWA/BWT 比对软件

名称 bwa – Burrows-Wheeler Alignment Tool 内容 摘要 描述 命令行与选项 SAM 比对格式 短序列比对注意事项 比对精确性 估计插入大小分布 内存需求 速度 Bwa-0.6中的改变 其他 作者 引用与授权 历史 摘要 b w a i n d e x r e f . f a b w a m e m r e f . f …

STM32读取BWT901CL传感器数据

1 简述 最近想做一个检测小孩或者是老人,在家摔倒项目。大致和大家说一下项目的框架。 要用到一个能检测运动姿态的传感器,最好是无线的。于是我在网上找了一款带蓝牙的姿态角度传感器。给大家看下这个模块。 下面和大家分享下代码 2 程序设计 串口…

BWT算法解码

博文复制了原博客,做了少许修改 将原始序列经过BWT转换后, 可以更方便的进行压缩;而且BWT转换是一个可逆的转换,能够根据转换后的序列还原出原始序列; BWT转换首先将序列进行在序列的末尾插入一个字符,并…

双正交小波基 BWT

Berkeley小波变换(BWT)由四个方向上的四对母小波组成。在每对中,一个小波具有奇数对称性,另一个具有偶数对称性。通过对整个集合(加上一个常数项)的平移和缩放,小波在二维中形成一个完整的正交基…

MATLAB读取BWT901BLECL5.0

MATLAB读取BWT901BLECL5.0 这个太简单了,使用BWT901CL的MATLAB程序改了一下参数。 代码 clear all; close all; clc; instrreset; disp(Press CtrlC to stop collecting data!) sserial(com4,baudrate,115200); fopen(s) ;%Open Com Port 请将COM19换成电脑识别…