2个XBee模块之间没有连接

时间:2013-09-17 14:12:14

标签: arduino xbee

我有两个arduinos,每个都配有一个arduino无线盾牌和一个xbee

通讯未按预期工作。我可以接收和发送字节,但模块之间的连接经常被中断,所以串行缓冲区正在增长很多。

此外,如果我将模块移动距离彼此超过1米,则完全拒绝连接。

我想知道,如果我的xbee模块可能是一种破坏,或者我可能错误配置它们。

有什么想法吗?

发件人的源代码:

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

void loop()
{
 int sensorValue = analogRead(0);
 int val = map(sensorValue, 0, 1023, 35, 160);
 Serial.write(char(val));
 delay(250);
}

接收者的源代码:

#include <Servo.h>

Servo motor1;
Servo motor2;
Servo motor3;
Servo motor4;

void setup()
{
  motor1.attach(9);
  motor2.attach(10);
  motor3.attach(3);
  motor4.attach(11);

  Serial.begin(9600);
}

void loop()
{ 
  if(Serial.available() > 0)
  {
    byte incoming = Serial.read();
    int inValue = constrain(incoming, 35, 160);
    motor1.write(inValue);
    motor2.write(inValue);
    motor3.write(inValue);
    motor4.write(inValue);
  }
  delay(250);
}

1 个答案:

答案 0 :(得分:3)

需要考虑的一些事项:

  • 确保无线电尚未在通道26(0x1A)上形成网络。 XBee模块必须在该通道上以较低功率运行,因此我通常将ATSC设置为0x7FFF以排除通道26.

  • 该型号的XBee使用位于模块锥形部分的PCB天线。确保其上方或下方没有任何金属(地平面,组件,电线),并且没有将其放在会限制信号的大金属外壳中。

  • 检查分组超时ATRO的值。如果您希望XBee在进入时传输字符,而不是等待更多数据可能在一个数据包中组合在一起,您可能希望将其设置为低值(3-5)或甚至0或1。

  • 如果您遇到范围问题,请检查ATPL(功率级别)和ATPM(超级模式)设置。启用升压模式(ATPM=1)和最高功率级别(ATPL=4)可能有助于解决范围问题。

  • 您可能希望更改接收代码以更频繁地轮询字节,或者甚至忽略多个字节并仅使用最后接收的值。这样可以防止接收端积压字节。

处理任何未完成的字节:

while (Serial.available() > 0)
{
    byte incoming = Serial.read();
    int inValue = constrain(incoming, 35, 160);
    motor1.write(inValue);
    motor2.write(inValue);
    motor3.write(inValue);
    motor4.write(inValue);
}

忽略缓冲的字节,只写最后一个值:

if (Serial.available() > 0)
{
    byte incoming;
    // read all bytes but only use the last value read
    while (Serial.available() > 0) incoming = Serial.read();
    int inValue = constrain(incoming, 35, 160);
    motor1.write(inValue);
    motor2.write(inValue);
    motor3.write(inValue);
    motor4.write(inValue);
}