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

一、项目实现要求

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

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

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

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

传感器浮点数数据在串口通信中解包技术解析_第1张图片

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

 传感器浮点数数据在串口通信中解包技术解析_第2张图片

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

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

传感器浮点数数据在串口通信中解包技术解析_第3张图片

 

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

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

传感器浮点数数据在串口通信中解包技术解析_第4张图片

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

传感器浮点数数据在串口通信中解包技术解析_第5张图片 最后,在串口打印出温度和气压浮点数数据,并在OLED屏上显示,串口打印数据如下:

传感器浮点数数据在串口通信中解包技术解析_第6张图片

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

你可能感兴趣的:(单片机,嵌入式硬件)