1 简述

最近想做一个检测小孩或者是老人,在家摔倒项目。大致和大家说一下项目的框架。

要用到一个能检测运动姿态的传感器,最好是无线的。于是我在网上找了一款带蓝牙的姿态角度传感器。给大家看下这个模块。

下面和大家分享下代码

2 程序设计

串口读取简单分为两个部分。1、配置单片机的UART口。2、数据处理部分了。下面和大家一一分享。

2.1配置单片机的UART口
我使用的是UART2,这个是用来连接那个HC-06的蓝牙芯片的。使用时钟、模式、速度等。都在下面大家参考下

void Initial_UART2(unsigned long baudrate)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 | RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);USART_InitStructure.USART_BaudRate = baudrate;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No ;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART2, &USART_InitStructure); USART_ITConfig(USART2, USART_IT_TXE, DISABLE);    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);USART_ClearFlag(USART2,USART_FLAG_TC);    USART_Cmd(USART2, ENABLE);NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 8;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}

2.2 数据处理

2.2.1数据接收

编写思维是这样的。当我的UART2接受到数据后就会存在我的ucRxBuffer[250]里,根据这个BWT901CL的通讯协议。我就开始判断我接受的数据里面是不是有55包头的数据。然后我还加了一个计数ucRxCnt。加在一起我会判断。整个数据的长度是不是11位数据。最后,根据商家给的通讯协议里。50代表时间、51加速度、52角速度、53角度、54磁场等,我再判断我的这11位数据的第二位是上面的哪个值。就可以了。

void CopeSerial2Data(unsigned char ucData)
{static unsigned char ucRxBuffer[250];static unsigned char ucRxCnt = 0;    LED_REVERSE();              USB_TxWrite(&ucData,1);         ucRxBuffer[ucRxCnt++]=ucData;    if (ucRxBuffer[0]!=0x55) {ucRxCnt=0;return;}if (ucRxCnt<11) {return;}else{switch(ucRxBuffer[1]){case 0x50: memcpy(&stcTime,&ucRxBuffer[2],8);break;case 0x51:  memcpy(&stcAcc,&ucRxBuffer[2],8);break;case 0x52:   memcpy(&stcGyro,&ucRxBuffer[2],8);break;case 0x53:  memcpy(&stcAngle,&ucRxBuffer[2],8);break;case 0x54: memcpy(&stcMag,&ucRxBuffer[2],8);break;case 0x55:   memcpy(&stcDStatus,&ucRxBuffer[2],8);break;case 0x56:   memcpy(&stcPress,&ucRxBuffer[2],8);break;case 0x57: memcpy(&stcLonLat,&ucRxBuffer[2],8);break;case 0x58:    memcpy(&stcGPSV,&ucRxBuffer[2],8);break;case 0x59:  memcpy(&stcQ,&ucRxBuffer[2],8);break;}ucRxCnt=0;
}

2.2.2 数据解算

把上面处理的数据用UART1_Put_String(str);打印到NB或这个4G上。然后就直接传送到服务器上去了。你可以在服务器上做一些报警处理,然后再发送短信也好、或者你做个APP直接推送APP信息等都可以的,整个项目就完成了。

sprintf(str,"Time:20%d-%d-%d %d:%d:%.3f\r\n",stcTime.ucYear,stcTime.ucMonth,stcTime.ucDay,stcTime.ucHour,stcTime.ucMinute,(float)stcTime.ucSecond+(float)stcTime.usMiliSecond/1000);UART1_Put_String(str);        delay_ms(10);sprintf(str,"Acc:%.3f %.3f %.3f\r\n",(float)stcAcc.a[0]/32768*16,(float)stcAcc.a[1]/32768*16,(float)stcAcc.a[2]/32768*16);UART1_Put_String(str);delay_ms(10);sprintf(str,"Gyro:%.3f %.3f %.3f\r\n",(float)stcGyro.w[0]/32768*2000,(float)stcGyro.w[1]/32768*2000,(float)stcGyro.w[2]/32768*2000);UART1_Put_String(str);delay_ms(10);sprintf(str,"Angle:%.3f %.3f %.3f\r\n",(float)stcAngle.Angle[0]/32768*180,(float)stcAngle.Angle[1]/32768*180,(float)stcAngle.Angle[2]/32768*180);UART1_Put_String(str);delay_ms(10);sprintf(str,"Mag:%d %d %d\r\n",stcMag.h[0],stcMag.h[1],stcMag.h[2]);UART1_Put_String(str);     delay_ms(10);sprintf(str,"Pressure:%ld Height%.2f\r\n",stcPress.lPressure,(float)stcPress.lAltitude/100);UART1_Put_String(str); delay_ms(10);sprintf(str,"DStatus:%d %d %d %d\r\n",stcDStatus.sDStatus[0],stcDStatus.sDStatus[1],stcDStatus.sDStatus[2],stcDStatus.sDStatus[3]);UART1_Put_String(str);delay_ms(10);sprintf(str,"Longitude:%ldDeg%.5fm Lattitude:%ldDeg%.5fm\r\n",stcLonLat.lLon/10000000,(double)(stcLonLat.lLon % 10000000)/1e5,stcLonLat.lLat/10000000,(double)(stcLonLat.lLat % 10000000)/1e5);UART1_Put_String(str);delay_ms(10);sprintf(str,"GPSHeight:%.1fm GPSYaw:%.1fDeg GPSV:%.3fkm/h\r\n",(float)stcGPSV.sGPSHeight/10,(float)stcGPSV.sGPSYaw/10,(float)stcGPSV.lGPSVelocity/1000);UART1_Put_String(str);delay_ms(10);sprintf(str,"Four elements:%.5f %.5f %.5f %.5f\r\n\r\n",(float)stcQ.q[0]/32768,(float)stcQ.q[1]/32768,(float)stcQ.q[2]/32768,(float)stcQ.q[3]/32768);UART1_Put_String(str);delay_ms(10);

3 结果展示
我给大家看下我的结果,这个是用HC-06得到数据

STM32读取BWT901CL传感器数据相关推荐

  1. 基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计

    目录 1 项目概述 1.1 项目介绍 1.2 项目开发环境 1.3 小组人员及分工 2 需求分析 2.1 系统需求分析 2.2 可行性分析 2.3 项目实施安排 3 系统硬件设计 3.1 系统整体硬件 ...

  2. vb6编写dll读取dat文件_【STM32Cube_15】使用硬件I2C读取温湿度传感器数据(SHT30)...

    寻求更好的阅读体验,请移步Mculover666的个人博客: [STM32Cube_15]使用硬件I2C读取温湿度传感器数据(SHT30)​www.mculover666.cn 本篇详细的记录了如何使 ...

  3. ROS下Python读取ft_300传感器数据

    ROS下Python读取ft_300传感器数据 硬件条件: ur3 ft_300 ros:melodic #!/usr/bin/env python2 import rospy from geomet ...

  4. ESP32读取甲醛传感器数据

    ESP32读取甲醛传感器数据 本文提供了基于ESP32开发板快速完成甲醛传感器数据读取的方式,可以用于开发甲醛检测仪. 准备 传感器:达特WZ-S甲醛传感器 开发板:安信可ESP32 NodeMCU- ...

  5. STM32读取MQ4传感器、DHT11温湿度传感器、GP2Y1014AU0F夏普光学灰尘传感器数据

    1.功能 STM32测量MQ4.灰尘传感器.DHT11温湿度传感器,并在TFT上显示,超过浓度阈值蜂鸣器报警. 使用普中STM32F103ZET6开发板+2.8寸触摸屏. 2.MQ4天然气传感器 MQ ...

  6. vb6 串口同时读取写入数据怎么避免冲突_实例:S7-200 SMART通过Modbus-RTU读取温湿度传感器数据...

    本实例我们介绍下西门子S7-200 SMART PLC如何通过Modbus-RTU协议读取温湿度传感器的数值.实例使用的硬件如下: S7-200 SMART CPU ST20: 温湿度传感器(支持Mo ...

  7. stm32读取驾驶模拟器数据 stm32F407读取joystick数据

    需求 实习工作,老板要求用单片机读取驾驶模拟器(Joystick)返回的数据,驾驶模拟器usb输出,输出信息包括:方向盘转角.左右拨杆.按键等. 硬件 采用正点原子探索者开发板,即插即用,硬件不需要改 ...

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

    1 简述 最近在学习人体姿态设别的算法.想着买个角度传感器去尝试下.这个传感器最好是无线的带电池的,这样对我来说是比较方便使用的.我就在淘宝上找到一个一款BWT901CL,这个角度传感器.这个模块挺好 ...

  9. 西门子SMART200 通过Modbus 读取温湿度传感器数据实例

    文章目录 前言 一.温湿度传感器 二.传感器与Smart200接线 三.PLC程序 四.读取数据 以16位整数形式读取数据 以32位浮点形式读取数据 五.参考文献 前言 正在学习SMART200的Mo ...

最新文章

  1. “智源 — INSPEC 工业大数据质量预测赛” 上线,为硬核工业制造炼就 AI 之心...
  2. [Oracle] oracle统计信息
  3. MYSQL的binary解决mysql数据大小写敏感问题
  4. Vue中插槽slot的使用
  5. Python实践周 A卷 试题(不印刷)
  6. 数据结构笔记(三十六)-- 插入排序与直接插入排序
  7. 华南农业大学c语言上机实验答案,华南农业大学C语言上机实验答案.doc
  8. 统计学习方法读书笔记2-极大似然估计与梯度下降法
  9. 调用iphone客户端进行授权发微博的方法--使用友盟组件
  10. 360 android 应用市场,360应用市场
  11. ansys14.0安装教程
  12. 【struts2】继承ActionSupport类
  13. CAN和CAN FD
  14. 《Real-Time Rendering 4th Edition》读书笔记--简单粗糙翻译 第三章 图形处理单元 The Graphics Processing Unit
  15. (九)ThunderbirdMail配置QQ邮件服务
  16. 为什么很多人工资不高,却还是要拥挤在大城市生活?
  17. 商汤科技2020笔试题
  18. 三年级语文课外阅读赏析——心田花开
  19. office 365 PPT 如何关闭设计理念?
  20. 复合效应 达伦哈迪_帕特里克·麦克哈迪(Patrick McHardy)和版权暴利

热门文章

  1. 网页版个人介绍/简历
  2. C++11学习笔记: auto关键字
  3. 错误:Implicit super constructor Father() is undefined. Must explicitly invoke another constructor
  4. 苹果手机透明桌面_原来苹果手机辨别真假很简单!查看桌面1个图标,就能轻松分辨...
  5. 问卷与量表数据分析(SPSS+AMOS)学习笔记(七) : 多选题的频率、交叉分析及卡方检验
  6. 华为手机计算机删除了怎么找回,华为手机里的照片误删除了该怎么找回来?
  7. linux485串口发送状态,RS485自动方向切换模式
  8. 《视频解密》中文版(第四版)第十一章 家用DV
  9. 算法---比较排序算法
  10. Hybrid App开发之jQuery选择器