Serial.read() - XBee - 不触发'else if'

时间:2015-06-28 18:53:22

标签: arduino xbee

我目前正尝试在PC和Arduino Uno之间使用AT模式下的XBee进行一些通信测试。

我的测试是将字符从计算机发送到XBee并通过条件语句处理。

我不相信这个问题与XBees的配置有关,因为我能够在观看串行监视器时成功通信。

以下是我在Arduino上运行的代码:

#include <SoftwareSerial.h>

SoftwareSerial xBee = SoftwareSerial(1, 0);

int Led = 9;

void setup()
{
  pinMode(Led, OUTPUT);
  xBee.begin(9600);
}

void loop()
{
  if (xBee.available()> 0)
  {
    if (xBee.read() == 'r')
    {
       digitalWrite(Led, HIGH);
       xBee.write("Led On");
       delay(10);
    }
    else if (xBee.read() == 'o')
    {
      digitalWrite(Led, LOW);
      xBee.write("Led Off");
      delay(10);
    }
    else
    {
      xBee.write("NR"); // Testing for not recognized characters
    }
    delay(10);
  }
  delay(10);
}

我可以在将个人'r'从PC发送到XBee时打开LED。也会收到预期的结果。当我尝试从PC发送字符“o”时,LED保持亮起,我得到“NR”的响应。

同样的结果发生在else if语句中的不同字符,发送字符'o'作为第一个字符,更改为if语句,并将初始条件更改为 - 而xBee.available()。

如何解决此问题?

1 个答案:

答案 0 :(得分:2)

您需要存储xBee.read()的输入值,然后在if条件下使用它。

你可以试试这个

#include <SoftwareSerial.h>

SoftwareSerial xBee = SoftwareSerial(1, 0);

int Led = 9;

void setup()  
{
  pinMode(Led, OUTPUT);
  xBee.begin(9600);  
}

void loop()
{ 
  char read_value = xBee.read();
  if(xBee.available()> 0) 
  {

    if ( read_value == 'r')
    {
       digitalWrite(Led, HIGH);
       xBee.write("Led On");
       delay(10);       
    }
    else if ( read_value == 'o')
    {
      digitalWrite(Led, LOW);   
      xBee.write("Led Off");
      delay(10);      
    }
    else
    {
      xBee.write("NR"); // Testing for not recognized characters
    }
    delay(10);
  }
  delay(10);

}

问题在于您使用xBee.read()进行输入,但未将其存储。

只有您的第一个if有效,即

 if ( read_value == 'r')
    {
       digitalWrite(Led, HIGH);
       xBee.write("Led On");
       delay(10);       
    }

控件甚至没有进入else if,因此没有测试o的条件。