XBee/ZigBee 打断 Arduino

XBee/ZigBee interrupt Arduino

我有 2 个 XBee Serie 2 模块 运行 ZigBee Pro (2007) 连接在 2 个不同的 Arduinos Unos 上。

由于 Arduino Uno 是单线程的,我尝试使用中断来暂停主函数并在 XBee 模块接收到数据时做一些事情。

我尝试使用 Arduino 的 attachinterrupt 函数并将引脚 2 (int0) 连接到 XBee 模块的 Rx 但我没有任何中断,无论是来自 RISING 状态、DOWN 状态还是 FALLING 状态。

attachInterrupt(0, interruptXBee, RISING);

我使用 Rx 引脚是否做错了,我应该使用另一个引脚吗? (我见过 RTS/CTS 个引脚,但我的有效负载比缓冲区小,所以我无法使用这些引脚)。

谢谢!

在典型的应用程序中,您会让串行端口驱动程序处理串行中断,缓冲传入的字节,然后在您的主循环中定期检查缓冲区中的数据以进行处理。

在具有单线程的嵌入式平台上,我喜欢用 tick() 函数对程序的每个部分进行编码。每个 tick 都会做一些工作,记住它的状态,然后 returns 到主线程。根据您的程序需要的响应速度,您可能希望将滴答函数每次调用的工作时间限制为 20 毫秒到 100 毫秒。有时 tick 会立即 return 因为它没有任何事情可做。

此外,您可能有快速服务中断的中断服务例程,将数据存储在下一个滴答可以找到并处理它的地方。

因此,在您的情况下,您将在主循环中调用 xbee_tick()。它在串行接收缓冲区中查找数据,对其进行处理,然后 returns 到主循环。