Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 如何更换传感器的功能?_Arduino_Scheduling_Sensors - Fatal编程技术网

Arduino 如何更换传感器的功能?

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

我正在制作一个设备,可以监测我的水族馆的水参数。但问题是,当我的pH计传感器(dfrobot)和溶解氧传感器(dfrobot)位于同一水体中时,pH传感器似乎接地(idk如何称呼错误),它读取的pH值较低。几乎为负值。但当我把它们放在不同的容器中时,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-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(doValuedoTH_H){ //接力 数字写入(relayPin,高); 数码写入(do_led_绿色,高); 数字写入(do_led_红色,低); } if(doValuedoTH_L_SMS){ hasTextedDO=假; } ///////DO逻辑结束////////////////// ////////////////哲学逻辑/////////////////// 如果(PH值phTH_H){ digitalWrite(ph_led_绿色,低电平); 数码写入(PHU led红色,高); 如果(!hasTextedPH){ hasTextedPH=true; Serial.println(“PH值过高”); SendMessage(“PH值高于8.5”,数值1);延迟(2000); SendMessage(“PH值高于8.5”,数值2);延迟(2000); SendMessage(“PH值高于8.5”,数值3);延迟(2000); SendMessage(“PH值高于8.5”,数值4);延迟(2000); 数字写入(buzzPin,高); 延迟(10 000); 数字写入(buzzPin,低电平); } }
否则如果((phValue>phTH_L)和(phValue)您是否尝试过将传感器的探头进一步分开?如果它们以某种方式通过水连接,这应该会解决或至少会降低效果,我也在考虑。明天将尝试,因为d.o传感器的导线更长。我也在考虑使用rtc使其基于时间,以防止另一个同时运行。这不可能在代码中解决,所以我可能会使用rtc来实现它。