使用 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/