c - 通过 XBee 从 Arduino 传输数据

标签 c ubuntu arduino ros xbee

  1. 通过XBee从Arduino传输数据到另一个 XBee(连接到 PC)。数据必须是char类型吗?假设我有兴趣传输的数据是 float 。在通过 Arduino 传输之前我必须将其转换为 char 吗?

  2. Arduino 上的数据传输协议(protocol)是什么?假设我已经有一个将 float 转换为字符串的函数。我可以输入这个字符以通过 XBee 传输到另一个 XBee 的协议(protocol)/功能是什么。我使用的Arduino是Arduino Uno我的 XBee 是 XBee PRO s1。

  3. 据我所知,在 C 语言中,浮点编程只能精确到小数点后 7 位。所以 double 总是比 float 更准确。但Arduino真的只接受float吗?但我还读到,Arduino 中的 float 可以精确到许多小数位。最后一句话有多真实?

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

最佳答案

如果您在“透明串行”或“AT 模式”下运行 XBee radio ,那么您只需将 8 位字节流从一个 radio 发送到另一个 radio 。此时如何解释数据取决于您。

  1. 数据不必是字符,因为 XBee 正在传输 8 位字节。尽管 float 存储为一系列字节,但它们在跨平台(例如,Arduino 到 PC)之间的存储可能不一致。因此,发送一系列字符(“0”到“9”,并使用“.”或“,”作为小数点分隔符)通常更安全。

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

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

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

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

关于c - 通过 XBee 从 Arduino 传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29191491/

相关文章:

linux - dpkg -L package_name 如何工作?

c++ - 使用 arduino 的 QT 上的 SerialCommunication 解析失败

python - 使用 pyserial 将数据发送到串行 - 在 Razor 9DOF IMU 上工作

c - 有什么好的免费库可以用 C 语言开发 Web 应用程序吗?

c - 在 Linux 上 undefined reference 但在 Mac 上工作正常

c - 抑制 C++ 代码中的 “printf” 而不是 R 中的 “message” 或 “warning” 显示的消息

java - Eclipse 在 Ubuntu 12 中无法找到 JVM

java - 将 jar 部署到 unix 服务器

指向字符串的指针的条件(if 语句)

c++ - 错误无效使用 void 表达式。试图将参数传递给函数