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

Serial.read() - XBee - not firing 'else if'

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

我的测试是从电脑发送字符到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);
}

我可以在从 PC 发送字符 'r' 到 XBee 时打开 LED。预期的结果也被接收回来。当我尝试从 PC 发送字符 'o' 时,LED 保持亮起,我得到 "NR".

的响应

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

我该如何解决这个问题?

你需要存储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 的条件。