Как я могу изменить функцию моего датчика? - PullRequest
0 голосов
/ 16 октября 2019

Я делаю устройство, которое будет контролировать параметры воды в моем аквариуме. но проблема в том, что когда мой датчик pH-метра (dfrobot) и датчик растворенного кислорода (dfrobot) находятся в одном и том же объеме воды, датчик pH кажется заземленным (то есть, как назвать ошибку), он считывает низкое значение pH. почти отрицательное значение. но когда я помещаю их в другой резервуар, датчик pH работает нормально.

У меня нет проблем с датчиком DO.

, как указала проблема. Мне удается создать алгоритм, который будет чередовать показания двух датчиков, чтобы они просто работали за другим. Я попытался добавить задержку и если еще условие чередовать показания датчиков, но это не сработало. я ищу что-то вроде непланирующего планирования, но проблема в том, что они должны повторить цикл после того, как очередь другого сделана. и мой плохой, я не могу этого сделать.

Вот грубая логика датчика 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 //////////////////

Может кто-нибудь помочь мне заставить эту логику чередовать друг друга в блоке исправленийвремени (например, каждые 20 секунд)

что я пытаюсь сделать, это примерно так ...

"Датчик pH активен в течение 20 секунд. После этого он будет неактивен, затем егоВремя, в течение которого датчик растворенного кислорода считывает данные в течение 20 секунд. Снова, после поворота датчика DO, датчик pH снова станет активным еще на 20 секунд, а затем переходит в неактивное состояние, уступая место датчику DO еще на 20 секунд. "

потому что в моем случае датчик pH и датчик DO не работают, если они находятся в одном резервуаре для воды. я не знаю, как решить эту проблему с точки зрения аппаратного обеспечения, поэтому я пришел к манипулированию кодом, но просто не могу.

...