gpt4 book ai didi

arduino - 通过串行 Arduino 和 XBee 读取数据

转载 作者:行者123 更新时间:2023-12-04 18:46:02 25 4
gpt4 key购买 nike

我有以下几点:

两个Arduinos和两个 XBees .我想将数据从一个发送到另一个。 XBee 通信,因为我有建议测试(将一个 XBee 与 Arduino 连接,另一个连接到 PC,从一个写入,并在另一个终端上观察另一个)。

现在我想将数据从一个发送到另一个:

这是我的两个脚本:

对于发送(在发送所有信件的前一个测试中进行了测试):

#include <SoftwareSerial.h>

SoftwareSerial xbee(2, 3); // RX, TX
char c = 'A';
int pingPong = 1;

void setup()
{
Serial.begin(9600);

Serial.println( "Arduino started sending bytes via XBee" );

//Set the data rate for the SoftwareSerial port
xbee.begin(9600);
}

void loop() {
// Send character via XBee to other XBee connected to Mac
// via USB cable.
xbee.write( c );

//--- Display the character just sent on console. ---
Serial.println( c );

//--- Get the next letter in the alphabet, and reset to ---
//--- 'A' once we have reached 'Z'.
c = c + 1;
if ( c>'Z' )
c = 'A';

//--- Switch LED on Arduino board for every character sent---
if ( pingPong == 0 )
digitalWrite(13, LOW);
else
digitalWrite(13, HIGH);
pingPong = 1 - pingPong;
delay( 1000 );
}

问题是当我连接一个 Arduino 以从另一个 XBee 接收数据时。

这是我的代码:

#include <SoftwareSerial.h>

SoftwareSerial xbee(2, 3); // RX, TX

void setup()
{
Serial.begin(9600);

Serial.println( "Arduino started receiving bytes via XBee" );

// Set the data rate for the SoftwareSerial port.
xbee.begin(9600);
}

void loop() {
int temp = xbee.read();

Serial.print("Character received:");
Serial.println(temp);
delay(1000);
}

输出总是:
Character received: -1.

如果我更改 temp来自 intbyte我看到 Character received: (a non-[ASCII][3] symbol) .

我正在使用 XBee 系列 1。

它们是通过 X-CTU 配置的,基于 Ladyada.net 上的一个教程。

然后我将 XBee 连接到 Arduino(TX 连接到引脚 3,RX 分别连接到 2,Vcc 和 GND),另一个 XBee 通过 FTDI 连接到 PC电缆。我能够从 Arduino 发送字符并在 X-CTU 的串行监视器中看到它们。这是否意味着它们配置正确?

然后我想将 Arduino 连接到我的接收器。你可以看到上面的代码。我总是没有可用的数据。

返回-1 表示串口中没有数据。

最佳答案

intbyte真的是把 int 改成 char .非ASCII符号是尝试渲染字符( 0b11111111 )的结果。十进制中的负一( -1 )在二进制中都是 1,因为 int 's 是默认签名的。退房 Bin/Dec/Hex Converter验证。

所有这些都是说xbee.read()返回 byte/char .我在 the documentation 中找不到任何内容,但我认为 -1是由于错误(基于硬件 Serial documentation )。这是因为没有什么可阅读的。

您可以尝试以下操作:

  • 确保 RX/TX 线正确。相信我,它会发生。
  • 在阅读之前检查 XBee 是否有可用数据。 (你会得到更少的打印行数,因为它会等到一个字节准备好被读取。)

  • if (xbee.available()) {
    byte temp= xbee.read();
    Serial.print(temp);
    }
  • 使用内置(硬件)。 SoftwareSerial 应该可以工作,但根据我的经验,硬件串行要可靠得多。
  • 根据您的 Arduino 型号,您可能需要 ( Disable Auto Reset on Serial Connection )。这似乎仅在您尝试从 IDE 的串行监视器(一般来说)以外的其他地方通过 FTDI 芯片发送数据时才需要。
  • 本帖 Arduino to Arduino XBee Serial Communication有一个非常相似的设置,似乎可以正常工作。尽可能简化您的工作,然后慢慢添加功能。
  • 将 XBee RX & TX 线直接连接到 USB-to-FTDI 连接器,例如 this cable或此 breakout board .

  • 在你有一个可行的概念证明之前,你应该让它尽可能简单。一旦它工作,然后一次添加一个功能。这似乎是您已经在做的事情,但这可能会进一步简化(通过仅使用 FTDI、使用硬件串行等将 Arduinos 排除在等式之外)。

    这听起来是一个很酷的项目。祝你好运!

    关于arduino - 通过串行 Arduino 和 XBee 读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14199279/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com