串口通讯中接收和发送float类型数据

使用共用体来解决数据的编解码问题,共用体可以使不同的数据类型来共享相同的地址空间。

#include <stdio.h>
#include <string.h>

int main(void)
{

     union result
     {
         float d;
         unsigned char data[4];
     }r1,r2;
// 特别需要注意的是在单片机中int float double 类型的字长和PC机中是不一样的,需要注意
     r1.d=7.215487 23131;
     r2.data[0]=r1.data[0];
     r2.data[1]=r1.data[1];
     r2.data[2]=r1.data[2];
     r2.data[3]=r1.data[3];
    printf("byte0= %d byte1= %d byte2= %d byte3= %d r1=%f r2=%f \n",r1.data[0],r1.data[1],r1.data[2],r1.data[3],r1.d,r2.d);
   getchar();
   getchar();
   return 0;

}

使用上述的方法,如果需要在PC与MCU之间通过串口来传送浮点数double/float就可以了,两边都使用共用体,一次传输一个BYTE,然后依次放入char型数组中,使用的时候直接使用对应的浮点数就可以了。

原文:https://blog.csdn.net/wilylcyu/article/details/51848166

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Arduino Mega2560和CS5530进行通讯采集数据的代码示例。请注意,这只是一个简单的示例,可能需要根据您的具体要求进行修改。 ```c++ #include <SPI.h> //定义CS5530的引脚 const int CS = 10; const int CLK = 11; const int DIO = 12; // 定义数据接收的变量 unsigned long data = 0; void setup() { Serial.begin(9600); pinMode(CS, OUTPUT); pinMode(CLK, OUTPUT); pinMode(DIO, INPUT); digitalWrite(CS, HIGH); digitalWrite(CLK, LOW); } void loop() { // 选择CS5530 digitalWrite(CS, LOW); // 发送指令,读取数据 SPI.transfer(0x80); // 读取第一个字节,控制位为10000000 SPI.transfer(0x00); // 读取第二个字节,控制位为00000000 SPI.transfer(0x00); // 读取第三个字节,控制位为00000000 SPI.transfer(0x00); // 读取第四个字节,控制位为00000000 // 读取数据 for(int i=0; i<4; i++){ data = (data << 8) | SPI.transfer(0x00); } // 去除符号位 if(data & 0x80000000){ data = ~(data) + 1; } // 转换为实际值 float voltage = (float)data / 0x7FFFFF * 2.5; // 打印结果 Serial.println(voltage); // 取消选择CS5530 digitalWrite(CS, HIGH); // 延迟一段时间 delay(1000); } ``` 在这个示例,我们使用SPI库来与CS5530通信,并读取采集到的数据。我们将CS、CLK和DIO引脚定义为10、11和12。在setup()函数,我们设置这些引脚的模式和状态,并打开串口通信。在loop()函数,我们首先选择CS5530,然后发送指令读取数据。然后我们读取四个字节的数据,并将其转换为实际值。最后,我们取消选择CS5530,并延迟一段时间以进行下一次采集。 请注意,这只是一个简单的示例,可能需要根据您的具体要求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值