1

A面:

  • Arduino Uno R3 带无线 Proto 扩展板,由 USB 供电
  • 使用 XBee Pro S1,DH 0 DL FFFF MY 0 API 0
  • Wireless Proto shield 在“micro”位置有串行选择开关

B面:

  • XBee Explorer USB 连接到带有 XCTU 软件的 PC
  • 使用 XBee Pro S1,DH 0 DL FFFF MY 0 API 0

(当我把两个XBee模块都放在 USB 浏览器板上,连接两台 PC 时,我可以毫无问题地来回发送数据,所以我认为 XBee 设置很好。)

问题

现在我想让 Arduino 从 B 端捕获输入(使用 XCTU 终端发送),但是当我在终端中输入任何内容时,A 侧的 RSSI LED 仅亮 5 秒,但 Arduino 似乎没有捕获任何数据,因为它不会像应有的那样发回数据(Serial.print("I received: ");

Arduino草图

int incomingByte = 0;

void setup() {
    Serial.begin(19200);  //Both XBee chips are configured at 19200 Baud
    Serial.print("start echo machine");  //This is received just fine on the B side
}


void loop() {
    if (Serial.available() > 0) {
        // Read the incoming byte:
        incomingByte = Serial.read();

        // Say what you got:
        Serial.print("I received: ");  //This never shows on the B-side
        Serial.println(incomingByte, DEC);
    }
}

我该如何解决这个问题?

4

2 回答 2

0

您必须使用 XBee 的 SoftwareSerial(RX,TX) 和将输出打印到 PC 的 Serial。SoftwareSerial 的 RX 和 TX 必须连接到模块的 DOUT 和 DIN 引脚到 Wireless Proto shield:

#include <SoftwareSerial.h>

// Connect pin 10 of Arduino to DOUT of Wireless Proto shield
uint8_t ssRX = 10;

// Connect pin 11 of Arduino to DIN of Wireless Proto shield
uint8_t ssTX = 11;

SoftwareSerial nss(ssRX, ssTX);

void setup() {
  Serial.begin(19200);
  nss.begin(19200);
  Serial.println("Serial works");
}

void loop() {

  if (nss.available()){
    Serial.println("received packet:");
    for(int i=0;i<25;i++){
      Serial.print(nss.read(),HEX);
      Serial.print(",");
    }
    Serial.println();
   }
于 2013-04-28T13:01:47.023 回答
0

许多电路板需要启用 DIN 上的上拉电阻。根据一些消息来源,Digi Xbee 模块默认启用此上拉。

要确保它已启用或启用它:

将您的 Xbee 模块放入 USB 资源管理器并使用 X-CTU 检查 PR 配置。Xbee Pro S1 的 DIN 位于第 7 位,因此在这种情况下,您需要最后一位为 1。

我这样说:00000001

然后将其转换为十六进制(在我的情况下为 01)并使用 X-CTU 将该值写入 Xbee 模块。

所以这是一个电子问题,而不是编程问题。

于 2013-04-29T09:12:50.387 回答