XBee PRO S1始终使用API​​ MODEM_STATUS_RESPONSE而不是任何内容获得响应

时间:2013-12-30 12:13:29

标签: c++ xbee mbed

我的布线是这样的: XBee wiring

XBee在API模式1中配置,mbed(LPC1768)运行此代码:

Serial terminal(USBTX, USBRX);

wait_ms(1000);

while(!terminal.readable()) {
  wait_ms(10);
}
terminal.getc();
mbed_led1 = 1;

while(1) {
  xbee.readPacketUntilAvailable();
  terminal.puts("Packet available\r\n");
  XBeeResponse response = xbee.getResponse();
  if (response.isAvailable()) {

    char tmp[20];
    int c = response.getApiId();
    sprintf(tmp, "%d", c);
    terminal.puts("Response available at API: ");
    terminal.puts(tmp);
    terminal.puts("\r\n");

    if (response.getApiId() == RX_16_RESPONSE) {
      Rx16Response rx16 = Rx16Response();
      response.getRx16Response(rx16);

      uint8_t len = rx16.getDataLength();
      char l[20];
      sprintf(l, "%d", len);

      terminal.puts("We have data: ");
      terminal.puts(l);
      terminal.puts("\r\n");
    }
  }
  wait(1);
}

用于mbed的XBee库本质上是广受欢迎的Arduino XBee库的一个端口。来源在这里:http://mbed.org/users/okini3939/code/XBee/

当前面提到的代码运行时,我的输出就是:

Terminal ready
Packet available
Response available at API: 138
Packet available
Response available at API: 138
...

138 是十六进制0x8A的十进制表示形式,后者又映射到MODEM_STATUS_RESPONSE。

这个XBee模块是唯一一个供电的模块。

我的问题是为什么我会有这种奇怪的行为?为什么这个XBee成功读取了数据包?

1 个答案:

答案 0 :(得分:1)

XBee模块将调制解调器状态帧发送给主机,这不是模块接收数据包的结果。尝试转储调制解调器状态帧的其余部分,以查看XBee模块尝试报告的状态。它可能是报告硬件重置(0x00),然后是协调器启动(0x06)。

XBee Series 1 documentation包含所有可能的调制解调器状态值列表。

BTW,更新sprintf(tmp, "%d", c);以使用"0x%02X"作为格式字符串将以十六进制格式打印帧类型,并使文档中的帧类型更容易查找。