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

    技术2022-07-10  162

    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

    Processed: 0.015, SQL: 9