【问题标题】:Serial.read() - XBee - not firing 'else if'Serial.read() - XBee - 不触发'else if'
【发布时间】:2015-06-28 18:53:22
【问题描述】:

我目前正在尝试使用 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);
}

我可以在将字符“r”从 PC 发送到 XBee 时打开 LED。预期的结果也会被接收回来。当我尝试从 PC 发送字符“o”时,LED 一直亮着,我得到“NR”的响应。

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

我该如何解决这个问题?

【问题讨论】:

  • 您需要读取一次,将其存储在变量中,然后在 if/else if 条件中使用该变量。

标签: arduino xbee


【解决方案1】:

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

【讨论】:

  • 感谢您的快速回复,不知道为什么我没有这样做。我必须在循环的第一个嵌套中移动 read_value 才能正确触发条件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
相关资源
最近更新 更多