我目前正尝试在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()。
如何解决此问题?
答案 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的条件。