找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3034|回复: 9
收起左侧

请教NRF24L01怎么传输MPU6050数据?float类型

[复制链接]
ID:511520 发表于 2019-10-28 19:45 | 显示全部楼层 |阅读模式
已经完成两个NRF24L01可以发送u8的数据,接收u8的数据。
但是我想利用NRF24L01发送角度他是float类型的。
产生角度得是MPU6050.
我只会把他强制转换例如:
u8 hw[0];float yaw;
hw[0]=(u8)yaw;
把hw[0]放到NRF24L01发送的函数中,想把他发送的u8数据转换成float;
float acc[3];u8 hw[0];
acc[0]=float(hw[0]);
将acc[0]放到printf函数中,可是他只是加了小数点(1.0000...2.0000)这样。
请大佬指教一下,怎么传输MPU6050数据?
谢谢!
回复

使用道具 举报

ID:616759 发表于 2019-10-29 09:02 | 显示全部楼层
单片机应该是可以直接发送和输出float类型的,或者你把数值*100000,这样应该是整形,传输过去后再做处理
回复

使用道具 举报

ID:395176 发表于 2019-10-29 09:09 | 显示全部楼层
放大,然后分数组存取
回复

使用道具 举报

ID:94031 发表于 2019-10-29 09:46 | 显示全部楼层
最简单办法,把浮点数扩大变成整数发送,收到后缩小同样的倍数。
回复

使用道具 举报

ID:511520 发表于 2019-10-29 11:29 来自手机 | 显示全部楼层
bai_yun_123 发表于 2019-10-29 09:02
单片机应该是可以直接发送和输出float类型的,或者你把数值*100000,这样应该是整形,传输过去后再做处理

可以举个例子吗?
回复

使用道具 举报

ID:511520 发表于 2019-10-29 11:30 来自手机 | 显示全部楼层
xuyaqi 发表于 2019-10-29 09:46
最简单办法,把浮点数扩大变成整数发送,收到后缩小同样的倍数。

可以举个例子吗?
回复

使用道具 举报

ID:511520 发表于 2019-10-29 11:31 来自手机 | 显示全部楼层
飞机翻筋斗 发表于 2019-10-29 09:09
放大,然后分数组存取

可以举个例子吗?
回复

使用道具 举报

ID:123289 发表于 2019-10-29 16:59 | 显示全部楼层
1、浮点数一般有4个字节组成,有规定的次序及格式。
2、如果直接发送浮点数,也就是发送这4个字节。那么接收时必须有办法准确地按序接收并放置于你的目标浮点数的内存中(变量),不能有错位。这就需要收发双方协议一下。
3、假设你收到了一个字节,你如何知道这个字节是不是属于某个浮点数,它是浮点数中的第几个字节呢? 这就是为何要进行传输协议。
回复

使用道具 举报

ID:94031 发表于 2019-10-30 16:45 | 显示全部楼层
阿杜666 发表于 2019-10-29 11:30
可以举个例子吗?

16位 int整数会用串口发送吗,先把 int整数分成高8位与低8位,然后串口先发送高八位,再发送低八位,
回复

使用道具 举报

ID:155507 发表于 2019-10-30 18:18 | 显示全部楼层
用c语言关键字union来解决。

union xxx
{
  char c[4];
  float f;
}y;

定义一个“共用体”xxx,y作为“共用体变量”,里面再定义一个char类型的变量数组c[4]和float类型的变量f。

根据union的定义,里面的变量占用同一个内存地址。所以,c[4]和f的内存地址是一样的,说的再通俗一点,就是c[4]的4个数实际上就是f的四个字节。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表