Я делаю устройство, которое будет контролировать параметры воды в моем аквариуме. но проблема в том, что когда мой датчик 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 не работают, если они находятся в одном резервуаре для воды. я не знаю, как решить эту проблему с точки зрения аппаратного обеспечения, поэтому я пришел к манипулированию кодом, но просто не могу.