//这个就是将浮点数转换成4个字节的代码,具体怎么实现大家还自行研究,我也没深刻研究。
复制代码
- /**************************************************************************
- *功 能: 将浮点数转换成四个单字节数值
- *输 入: f:浮点数 byte储存空间(4个字节)
- *返回值: none
- **************************************************************************/
- //VOFA通讯协议
- void Float_to_Byte(float f,uint8_t byte[]) //参考[url]https://blog.csdn.net/ls667/article/details/50811519[/url]博客
- {
- FloatLongType fl;
- fl.fdata=f;
- byte[0]=(unsigned char)fl.ldata;
- byte[1]=(unsigned char)(fl.ldata>>8);
- byte[2]=(unsigned char)(fl.ldata>>16);
- byte[3]=(unsigned char)(fl.ldata>>24);
- }
第四步、单片机通信协议复制代码
- typedef union //定义结构
- {
- float fdata;
- unsigned long ldata;
- }FloatLongType;
以下是这个协议的规则,我们需要严格执行。
因此我们定义一个数组进行存放帧尾复制代码
- uint8_t Send_tail[4]={0x00, 0x00, 0x80, 0x7f};//帧尾
- JustrFloat以小端的0x7f80000,也就是{ 0x00, 0x00, 0x80, 0x7f }作为帧结束标志,所以遇到{ 0x00, 0x00, 0x80, 0x7f }才会开启一帧的解析,判断它是采样数据帧、图片前导帧还是其他数据;没有开启数据解析,就不会打印文本;
- 图片前导帧加上后续图片数据,被并称为图片数据包,图片数据会缩略打印;
- 点击字节接收区设置按钮,可以设置是否单独隐藏样数据帧、图片数据包,也可以设置隐藏包括其他数据在内的所有数据;
- 字节接收区请勾选十六进制,以十六进制方式打印字符,否则只能打印乱码;
- 如果你发送的数据一直没有{ 0x00, 0x00, 0x80, 0x7f },那么JustFloat无法解析消耗缓冲区内的数据,会造成缓冲区爆满,软件卡死;
那么我们绘制曲线的方法是什么思路呢?
--->data1 data2 .... datan 帧尾 data1 data2 .... datan 帧尾 data1 data2 .... datan 帧尾 data1 data2 .... datan 帧尾这样即可
下面附上我的代码:PID_Test.7z (5.18 MB, 下载次数: 9)
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |