Arduino 如何更换传感器的功能?
我正在制作一个设备,可以监测我的水族馆的水参数。但问题是,当我的pH计传感器(dfrobot)和溶解氧传感器(dfrobot)位于同一水体中时,pH传感器似乎接地(idk如何称呼错误),它读取的pH值较低。几乎为负值。但当我把它们放在不同的容器中时,pH传感器工作正常 我的DO传感器没有问题Arduino 如何更换传感器的功能?,arduino,scheduling,sensors,Arduino,Scheduling,Sensors,我正在制作一个设备,可以监测我的水族馆的水参数。但问题是,当我的pH计传感器(dfrobot)和溶解氧传感器(dfrobot)位于同一水体中时,pH传感器似乎接地(idk如何称呼错误),它读取的pH值较低。几乎为负值。但当我把它们放在不同的容器中时,pH传感器工作正常 我的DO传感器没有问题 ///////////// DISSOLVE OXYGEN LOGICS //////////////// if(doValue < doTH_L){ //relay ON digitalWrit
///////////// DISSOLVE OXYGEN LOGICS ////////////////
if(doValue < doTH_L){
//relay ON
digitalWrite(relayPin, LOW);
digitalWrite(do_led_green, LOW);
digitalWrite(do_led_red, HIGH);
}
else if(doValue > doTH_H){
//relay OFF
digitalWrite(relayPin, HIGH);
digitalWrite(do_led_green, HIGH);
digitalWrite(do_led_red, LOW);
}
if(doValue < doTH_L_SMS){
//doTH_L_SMS
digitalWrite(do_led_green, LOW);
digitalWrite(do_led_red, HIGH);
if(!hasTextedDO){
hasTextedDO = true;
//send SMS
Serial.println("OXYGEN LEVEL TOO LOW");
SendMessage("OXYGEN LEVEL is below 3mg/L", num_1); delay(2000);
SendMessage("OXYGEN LEVEL is below 3mg/L", num_2); delay(2000);
SendMessage("OXYGEN LEVEL is below 3mg/L", num_3); delay(2000);
SendMessage("OXYGEN LEVEL is below 3mg/L", num_4); delay(2000);
digitalWrite(buzzPin, HIGH);
delay(10000);
digitalWrite(buzzPin, LOW);
}
}
else if(doValue > doTH_L_SMS){
hasTextedDO = false;
}
///////END OF DO LOGICS //////////////////
//////////////// pH LOGICS ///////////////////
if(phValue < phTH_L){
digitalWrite(ph_led_green, LOW);
digitalWrite(ph_led_red, HIGH);
if(!hasTextedPH){
hasTextedPH = true;
Serial.println("PH LEVEL TOO LOW");
SendMessage("PH LEVEL is below 6.5", num_1); delay(2000);
SendMessage("PH LEVEL is below 6.5", num_2); delay(2000);
SendMessage("PH LEVEL is below 6.5", num_3); delay(2000);
SendMessage("PH LEVEL is below 6.5", num_4); delay(2000);
digitalWrite(buzzPin, HIGH);
delay(10000);
digitalWrite(buzzPin, LOW);
}
}
else if(phValue > phTH_H){
digitalWrite(ph_led_green, LOW);
digitalWrite(ph_led_red, HIGH);
if(!hasTextedPH){
hasTextedPH = true;
Serial.println("PH LEVEL TOO HIGH");
SendMessage("PH LEVEL is higher than 8.5", num_1); delay(2000);
SendMessage("PH LEVEL is higher than 8.5", num_2); delay(2000);
SendMessage("PH LEVEL is higher than 8.5", num_3); delay(2000);
SendMessage("PH LEVEL is higher than 8.5", num_4); delay(2000);
digitalWrite(buzzPin, HIGH);
delay(10000);
digitalWrite(buzzPin, LOW);
}
}
else if((phValue > phTH_L) && (phValue <phTH_H)){
digitalWrite(ph_led_green, HIGH);
digitalWrite(ph_led_red, LOW);
hasTextedPH = false;
}
////////// END of pH LOGICS //////////////////
正如问题所述。我设法做了一个算法,可以交替读取两个传感器的读数,这样它们就可以在另一个传感器之后工作。
我曾尝试添加延迟和if-else条件来交替传感器读数,但没有成功。
我在寻找一些类似于非提前调度的东西,但问题是,他们必须在另一个轮到他们后再次循环。我的错是我不能让它发生
这是pH传感器和DO传感器的原始逻辑
///////////// DISSOLVE OXYGEN LOGICS ////////////////
if(doValue < doTH_L){
//relay ON
digitalWrite(relayPin, LOW);
digitalWrite(do_led_green, LOW);
digitalWrite(do_led_red, HIGH);
}
else if(doValue > doTH_H){
//relay OFF
digitalWrite(relayPin, HIGH);
digitalWrite(do_led_green, HIGH);
digitalWrite(do_led_red, LOW);
}
if(doValue < doTH_L_SMS){
//doTH_L_SMS
digitalWrite(do_led_green, LOW);
digitalWrite(do_led_red, HIGH);
if(!hasTextedDO){
hasTextedDO = true;
//send SMS
Serial.println("OXYGEN LEVEL TOO LOW");
SendMessage("OXYGEN LEVEL is below 3mg/L", num_1); delay(2000);
SendMessage("OXYGEN LEVEL is below 3mg/L", num_2); delay(2000);
SendMessage("OXYGEN LEVEL is below 3mg/L", num_3); delay(2000);
SendMessage("OXYGEN LEVEL is below 3mg/L", num_4); delay(2000);
digitalWrite(buzzPin, HIGH);
delay(10000);
digitalWrite(buzzPin, LOW);
}
}
else if(doValue > doTH_L_SMS){
hasTextedDO = false;
}
///////END OF DO LOGICS //////////////////
//////////////// pH LOGICS ///////////////////
if(phValue < phTH_L){
digitalWrite(ph_led_green, LOW);
digitalWrite(ph_led_red, HIGH);
if(!hasTextedPH){
hasTextedPH = true;
Serial.println("PH LEVEL TOO LOW");
SendMessage("PH LEVEL is below 6.5", num_1); delay(2000);
SendMessage("PH LEVEL is below 6.5", num_2); delay(2000);
SendMessage("PH LEVEL is below 6.5", num_3); delay(2000);
SendMessage("PH LEVEL is below 6.5", num_4); delay(2000);
digitalWrite(buzzPin, HIGH);
delay(10000);
digitalWrite(buzzPin, LOW);
}
}
else if(phValue > phTH_H){
digitalWrite(ph_led_green, LOW);
digitalWrite(ph_led_red, HIGH);
if(!hasTextedPH){
hasTextedPH = true;
Serial.println("PH LEVEL TOO HIGH");
SendMessage("PH LEVEL is higher than 8.5", num_1); delay(2000);
SendMessage("PH LEVEL is higher than 8.5", num_2); delay(2000);
SendMessage("PH LEVEL is higher than 8.5", num_3); delay(2000);
SendMessage("PH LEVEL is higher than 8.5", num_4); delay(2000);
digitalWrite(buzzPin, HIGH);
delay(10000);
digitalWrite(buzzPin, LOW);
}
}
else if((phValue > phTH_L) && (phValue <phTH_H)){
digitalWrite(ph_led_green, HIGH);
digitalWrite(ph_led_red, LOW);
hasTextedPH = false;
}
////////// END of pH LOGICS //////////////////
溶解氧逻辑////////////////
if(doValue否则如果((phValue>phTH_L)和(phValue)您是否尝试过将传感器的探头进一步分开?如果它们以某种方式通过水连接,这应该会解决或至少会降低效果,我也在考虑。明天将尝试,因为d.o传感器的导线更长。我也在考虑使用rtc使其基于时间,以防止另一个同时运行。这不可能在代码中解决,所以我可能会使用rtc来实现它。