2014-11-03 86 views
0

我正试图用连接到Fio V3的湿度传感器完成一个小项目。 我还将Xbee S1模块连接到Fio的插座。Arduino Serial.read()from xbee if语句

我上传下面的代码吸入氧浓度:

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探险家我的电脑我收到的X-CTU正确的数据每5秒。 当传感器位于一杯水之外时为零(0),而传感器位于一杯水中时为零(1)。

我想阅读这些字节到一个Arduino Uno与液晶屏幕和Xbee盾。为此,我已经上传到欧诺下面的代码:

#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,而传感器是水的液晶显示器之外显示“干燥的环境中。 ”

但只要我把在水中的传感器,LCD是不工作的要求。 即使我离开了水的LCD仍显示传感器‘干燥的环境’。

我试着传感器直接连接到Uno并附带液晶显示器,并且可以工作! 我认为UNO上的serial.read()和/或我的If/loop语句有问题。

任何建议或意见?

+0

什么是您的串行读数?您有几行可以在那里打印调试类型信息。当你把它放在水里时,有没有变化? – djUniversal 2014-11-03 08:20:14

+0

或者(如果上面的输出总是相同的),您直接连接时使用了哪些代码? – djUniversal 2014-11-03 08:21:32

回答

0

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

在接收器上,您正在测试字符'1','0'String s以空字符结尾(/u0000),而字符不是。因此,情况总是失败。您只能尝试传输和测试字符。

+0

用a/b代替0/1,它工作。但是没有使用IF else语句。我尝试了2个IF,它效果很好!对你的专业水平印象深刻! – 2014-11-03 21:05:20