c-通过XBee从Arduino传输数据


  1. 通过XBee将数据从Arduino传输到另一个XBee(连接到PC)。数据必须是字符吗?假设我感兴趣传输的数据是一个浮点值。在通过Arduino传输之前,我必须将其转换为char吗?

  2. Arduino上的数据传输协议是什么?假设我已经有了一个函数,可以将浮点值转换为字符串。我可以输入这个字符以通过XBee将其传输到另一个XBee的协议/函数是什么。我使用的Arduino是Arduino Uno,我的XBee是XBee PRO s1。

  3. 我知道,在C语言中,编程浮点值只能精确到小数点后7位。所以双精度总是比浮点精度高。但Arduino只接受浮动是真的吗?但我也读到Arduino中的float精确到小数点后许多位。最后一句话的真实性如何?

  4. 我需要通过XBee将此信息传输给另一个XBee。接收XBee连接到运行在Ubuntu/ROS上的PC。有没有任何协议可以让我解码这个字符,以获得我在Arduino一侧的初始浮点值?

如果你在"透明串行"或"AT模式"下运行XBee无线电,那么你只需要从一个发送到另一个的8位字节流。在这一点上,你如何解释数据取决于你自己。

  1. 数据不一定是字符,因为XBee传输的是8位字节。尽管浮点数字存储为一系列字节,但它们可能不会在不同平台上一致存储(例如,Arduino到PC)。因此,发送一系列字符(从"0"到"9",以"."或","作为小数分隔符)通常更安全。

    您发送的值范围是多少?您可以使用不动点来存储这些值——一个32位的整数可以存储大约+/-20亿。如果你需要8位小数,你可以让这个数字代表+/-20.000000。

  2. 您只是发送一个串行数据流,就像您将数据输出到控制台供某人读取一样。

  3. 我不确定Arduino浮点数的精度。如果您表示的数值范围很窄,请考虑使用不动点。

  4. 在接收端,您只需打开串行端口即可获得数据流。处理它将取决于你在Arduino上对它的编码方式。如果使用sprintf()floatdouble转换为人类可读文本,则可以使用sscanf()将其转换回PC上的浮点。

最新更新