数据通过XBee从Arduino传输到另一个XBee(连接到PC)。数据必须以char表示吗?因此,假设我要传输的数据是浮点数。在通过Arduino传输之前,是否必须将其转换为char?
Arduino上的数据传输协议是什么?假设我已经有一个将浮点数转换为字符串的函数。我可以输入什么字符才能通过XBee传输到另一个XBee的协议/功能是什么。我正在使用的Arduino是Arduino Uno,而我拥有的XBee是XBee PRO s1。
我知道在C语言中,编程浮点数最多只能精确到7位小数。因此,双精度总是比浮点精度更高。但是Arduino仅接受float是真的吗?但是我也读到Arduino中的float可以精确到许多小数位。最后的陈述有多正确?
我需要通过XBee将此信息传输到另一个XBee。接收XBee已连接到在Ubuntu / ROS上运行的PC。我是否有任何协议可以解码此字符以获得Arduino端的初始浮点数?
最佳答案
如果您在“透明串行”或“ AT模式”下运行XBee无线电,则只有一个8位字节的流从一个发送到另一个。此时,您如何解释数据取决于您。
数据不必是字符,因为XBee正在传输8位字节。尽管浮点数存储为一系列字节,但它们在平台之间(例如Arduino到PC)的存储方式可能不一致。因此,发送一系列字符(以'。'或','作为小数点分隔符的'0'至'9')通常更安全。
您要发送的值范围是多少?您可以使用定点存储值-32位整数可以存储大约+/- 20亿。如果需要8位小数,则该数字可以表示+/- 20.00000000。
您只是在发送串行数据流,就像将数据输出到控制台以供他人读取一样。
我不确定Arduino浮点数的精度。如果要在较小的值范围内表示数字,请考虑使用定点。
在接收端,您只需打开串行端口并获取数据流。处理它取决于您在Arduino上的编码方式。如果使用sprintf()
将float
或double
转换为人类可读的文本,则可以使用sscanf()
将其转换回PC上的float。
关于c - 通过XBee从Arduino传输数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29191491/