xbee if语句中的Arduino Serial.read()

xbee if语句中的Arduino Serial.read(),arduino,xbee,Arduino,Xbee,我试图完成一个小项目与水分传感器连接到Fio V3。 我还将Xbee S1模块连接到Fio的插座上 我已将以下代码上载到Fio: int igrasia = 7; void setup() { Serial1.begin(9600); pinMode(igrasia, INPUT_PULLUP); } void loop(){ int sensorVal = digitalRead(igrasia); if (sensorVal == HIGH) { Serial1.println("

我试图完成一个小项目与水分传感器连接到Fio V3。 我还将Xbee S1模块连接到Fio的插座上

我已将以下代码上载到Fio:

int igrasia = 7;

void setup()

{
Serial1.begin(9600);
pinMode(igrasia, INPUT_PULLUP);

}

void loop(){
int sensorVal = digitalRead(igrasia);

if (sensorVal == HIGH) {
Serial1.println("0");     // Send OK to xbee

} 
else {
Serial1.println("1");     // Send NOT OK to xbee
}
delay(5000);
}
在我使用Xbee USB浏览器的电脑上,我每5秒接收一次X-CTU上的正确数据。 当传感器在一杯水外时为零(0),当传感器在一杯水内时为一(1)

我想把这些字节读到一个带有LCD屏幕和Xbee屏蔽的Arduino Uno上。因此,我已将以下代码上载到Uno:

#include <SPI.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x38,16,2); // set the LCD address to 0x20 for a 16 chars

void setup(){

Serial.begin(9600);

//configure pin2 as an input and enable the internal pull-up resistor
//  pinMode(8, INPUT_PULLUP);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
lcd.init(); // initialize the lcd

}

void loop(){

if(Serial.available())

 {

char getData = Serial.read();
if (getData == '1')
{
Serial.print(getData);
digitalWrite(13, HIGH);

lcd.clear();
lcd.setCursor (0,0);        // go to start of 1st line
lcd.print("ATTENTION  !!!!"); 
lcd.setCursor (0,1);        // go to start of 1st line
lcd.print("WET environment"); 

} 
else {
Serial.print(getData);
digitalWrite(13, LOW);

lcd.clear();
lcd.setCursor (0,0);        // go to start of 1st line
lcd.print("dry environment"); 
lcd.setCursor (0,1);        // go to start of 1st line
lcd.print("all looks good!"); 

}


}

 }
#包括
#包括
#包括
液晶I2C液晶显示器(0x38,16,2);//将16个字符的LCD地址设置为0x20
无效设置(){
Serial.begin(9600);
//将pin2配置为输入,并启用内部上拉电阻器
//pinMode(8,输入\上拉);
pinMode(13,输出);
数字写入(13,低);
lcd.init();//初始化lcd
}
void循环(){
if(Serial.available())
{
char getData=Serial.read();
如果(getData='1')
{
串行打印(getData);
数字写入(13,高);
lcd.clear();
lcd.setCursor(0,0);//转到第1行的开头
lcd.print(“注意!!”);
lcd.setCursor(0,1);//转到第1行的开头
lcd打印(“潮湿环境”);
} 
否则{
串行打印(getData);
数字写入(13,低);
lcd.clear();
lcd.setCursor(0,0);//转到第1行的开头
lcd.打印(“干燥环境”);
lcd.setCursor(0,1);//转到第1行的开头
lcd.print(“一切看起来都很好!”);
}
}
}
它不能正常工作:-( 当传感器在水外时,我有正确的0功能。LCD显示器显示“干燥环境”

但当我把传感器放在水中时,LCD就不能按要求工作了。 即使我将传感器留在水中,LCD仍显示“干燥环境”

我尝试了传感器直接连接到Uno与液晶显示器连接,它的工作! 我想serial.read()和/或UNO上的If/loop语句有问题


有任何建议或建议吗?

当您传输数据时,您将以
字符串的形式发送数据


在接收器上,您正在测试字符
'1'
'0'
字符串
以空字符(
/u0000
)结尾,而字符不是。因此该条件始终失败。您可以尝试仅传输和测试字符。

串行读数究竟是什么?您有几行打印调试类型信息。当您将其放入水中时,是否有任何更改?或者(如果上述输出始终相同),您在直接连接时使用了什么代码?将0/1替换为a/b,它可以工作。但是,它不能使用IF-else语句。我尝试了2个IF,效果非常好!您的专业水平令人印象深刻!