从Arduino通过XBee传输数据

时间:2015-03-22 05:57:26

标签: c ubuntu arduino ros xbee

  1. 将数据从Arduino传输到XBee到另一个XBee(连接到PC)。数据必须是char吗?所以,让我们说我感兴趣的数据是一个浮点数。在我通过Arduino传输之前,我是否必须将其转换为char?

  2. Arduino上的数据传输协议是什么?让我们说我已经有了一个将float转换为字符串的函数。我可以输入此字符的协议/功能是什么,以便通过XBee传输到另一个XBee。我使用的Arduino是Arduino Uno,而我的XBee是XBee PRO s1。

  3. 据我所知,在C语言中,编程float只能精确到小数点后7位。因此,double总是比float更准确。但Arduino只接受浮动是真的吗?但我也读到Arduino中的float精确到多个小数位。最后一次陈述的真实情况如何?

  4. 我需要通过XBee将此信息传输到另一个XBee。接收XBee连接到在Ubuntu / ROS上运行的PC。有没有协议让我解码这个角色来获得我在Arduino那边的初始浮动?

1 个答案:

答案 0 :(得分:1)

如果您正在"透明序列"中运行XBee无线电。或者" AT模式",那么你只需要一个8位字节的流,你可以从一个到另一个发送。您在此时如何解释数据取决于您。

  1. 由于XBee正在传输8位字节,因此数据不必是字符。尽管浮点数存储为一系列字节,但它们可能无法跨平台(例如,Arduino到PC)一致地存储。因此,发送一系列字符通常更安全(' 0'''''或'或',& #39;作为小数点分隔符。)

    您发送的值的范围是什么?您可以使用固定点来存储值 - 一个32位整数可以存储大约+/- 20亿。如果您需要8位小数,则可以将该数字表示为+/- 20.00000000。

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

  3. 我不确定Arduino浮点数的精确度。如果您要在较窄的值范围内表示数字,请考虑使用固定点。

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