来自xbee if语句的Arduino Serial.read()

时间:2014-11-03 01:37:10

标签: 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("0");     // Send OK to xbee

} 
else {
Serial1.println("1");     // Send NOT OK to xbee
}
delay(5000);
}

在使用Xbee USB浏览器的计算机上,我每隔5秒就会在X-CTU上收到正确的数据。 当传感器在一杯水中时,传感器位于一杯水中时为零(0)。

我想将这些字节读取到附带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!"); 

}


}

 }

它没有正常工作: - ( 我有正确的0功能,而传感器在水外。液晶显示器显示&#34;干燥的环境&#34;。

但是,只要将传感器放入水中,LCD就不能按要求工作。 即使我将传感器留在水中,液晶显示屏仍会显示&#34;干燥的环境&#34;。

我尝试将传感器直接连接到Uno,并连接了LCD,它可以工作! 我想在UNO上的serial.read()和/或我的If / loop语句出了问题。

有任何建议或意见吗?

1 个答案:

答案 0 :(得分:0)

当您传输数据时,您将其作为String "1""0"发送。

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