传感器浮点数数据在串口通信中解包技术解析

一、项目实现要求

     根据项目要求,我们需要在多台机器人间进行数据通信,系统搭建如下:在机器人A上搭载大气压模块传感器和zigbee通信模块,在机器人B上搭载手势传感器和zigbee通信模块,在机器人C上搭载zigbee通信模块,要求A和B的传感器数据能够通过zigbee模块传输到机器人C并用以做进一步的控制处理。

二、由于A机器人发送端串口发送数来的数据为字节类型,见《传感器浮点数数据串口通信封包技术解析》,在C机器人上接收到数据后,需要将字节数据解包为浮点数数据,具体实现如下说明:

三、机器人C接收大气压数据及解包转化过程

(1)该过程对应串口3接收程序,工程代码结构如下:

(2)串口3接收数据处理函数在USART3.c中,具体代码如下:

 

当串口接收数据后触发该中断函数,进入中断后首先将收到的第一字节数据存入接收数组table_data[count]中,并判断接收到的数据是否为帧头0x80,如果是则计数count++。接着判断收到的第二个数是否为0x81,如果是则存入接收数组,并计数count++。当计数count在1和20之间时,数据全部存入接收数组,并判断计数是否大于20,如果大于20则计数清零,同时设置接收一包数据完成标志位为1,最后每接收一包数据清除接收中断标志位。

(3)串口中断函数将接收到的每一包20个字节的数据存入数组后,在main函数中将字节数据转化为温度和大气压浮点数数据,具体如下:

 

首先,判断是否收到了一整包数据,收到后则在串口打印出来收到的该整包数据。

接着,转化处理数据如下:

定义两个8个字节的数组array1[8]、array2[8],先将温度字节数据和气压字节数据从通信包中提取出来存放在array1[8]、array2[8]中。然后,定义指针pf1指向double型温度变量temperature,定义指针px1指向温度字节数组,在for循环中,将温度字节数组的数据依次存入temperature变量所占的8个字节存储空间,即讲字节数据转化为了浮点数数据。同理,将气压字节数据转化为浮点数数据pressure。

 最后,在串口打印出温度和气压浮点数数据,并在OLED屏上显示,串口打印数据如下:

可以看到数据每隔1秒钟刷新变化显示一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jacklood

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值