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 的条件。
我目前正在尝试使用 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 的条件。