c++ - XBee PRO S1 总是通过 API MODEM_STATUS_RESPONSE 获得响应而不是什么都没有

标签 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怎么就读包成功了?

最佳答案

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

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

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

关于c++ - XBee PRO S1 总是通过 API MODEM_STATUS_RESPONSE 获得响应而不是什么都没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20839347/

相关文章:

c++ - 多个 qml 窗口在 linux 上不能正确刷新

c++ - 无法成功安装Boost.Python

API 模式下的 XBee sleep ​​模式

python - 网状网络 Xbee、Python

python - uTensor 模型输出不等于预期输出

compiler-errors - Arm mbed在线编译器错误230(或-230?)

c++ - static_assert 依赖于非类型模板参数(gcc 和 clang 的不同行为)

c++ - 如何从管道中读取 long ?

android - 如何从 Android 发现 XBee 并在两者之间发送数据

http - 如何判断 HTTP 响应是否在 C 中终止