c++ - 使用串行通信 C++ 发送和接收 float

标签 c++ c raspberry-pi3 serial-communication wiringpi

使用 WiringPi 库在 Raspberrypi 上进行串口通信 函数 serialPutchar(int fd, unsigned char c) 和 serialGetchar (int fd) 可以正常发送和接收整数值 但不显示 float

发送方

int main ()
{
int fd ;
int count ;
float val;

if ((fd = serialOpen ("/dev/ttyAMA0", 9600)) < 0)
{
fprintf (stderr, "Unable to open serial device: %s\n", strerror 
(errno)) ;
return 1 ;
}

if (wiringPiSetup () == -1)
{
fprintf (stdout, "Unable to start wiringPi: %s\n", strerror 
(errno)) ;
return 1 ;
}
for (count = 0 ; count < 256 ; ){
val=4.1;
fflush (stdout) ;
serialPutchar(fd,val);
++count ;
delay (500) ;
}
printf ("\n");
return 0;}

接收端

 int main ()
 {
 int fd ;

 if ((fd = serialOpen ("/dev/ttyUSB0", 9600)) < 0)
 {
fprintf (stderr, "Unable to open serial device: %s\n", strerror 
(errno)) ;
return 1 ;
}
if (wiringPiSetup () == -1)
{
fprintf (stdout, "Unable to start wiringPi: %s\n", strerror 
(errno)) ;
return 1 ;
}
while(true)

{

  printf ("%f", serialGetchar (fd)) ;
  fflush (stdout) ;
  printf ("\n") ;
}

return 0 ;
}

我预计输出为 4.100000 但实际输出为 0.000000

发送和接收 float 的任何帮助将不胜感激 提前致谢

最佳答案

您需要做的是将 float 分解成字节,然后一个一个地发送/接收它们。 注意:以下代码假定发送方和接收方使用相同的字节序系统。

//Sender
float f = 4.1;
int i = 0;
for (; i < sizeof(float); ++i)
    serialPutchar(fd, ((char*)& f)[i]);


// receiver
float f;
int i = 0;
for (; i < sizeof(float); ++i)
    ((char*)& f)[i]) = serialGetchar(fd);

关于c++ - 使用串行通信 C++ 发送和接收 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57308789/

相关文章:

c++ - 我如何使用树莓派获取ina219传感器数据

java - Raspberry Pi 上 Java 的线程性能问题

python - 在树莓派上使用 Opencv 显示视频流时出错

Variadic 模板的 C++ 错误

c++ - 并行化具有大量全局变量的库

计算c中二维数组的最小值和最大值

android - 无法将系统库链接到供应商二进制文件

c - 为什么 strcpy() 也在复制\n?我可以摆脱它吗?

c++ - 有没有办法检查 fmt::output_file 是否已成功打开进行写入

c++ - 使用 C++ makefile 链接文件