Hello.
I've been working on a sketch to activate a water pump when moisture percentage level is below 35, the problem is that when moisture level starts to increase, the whole system hangs and relay never turns off, any help will be greatly appreciated.
#include <GyverOLED.h>
// Sensor pins
const int sensorPinS1 = A0; // CMS connected to analog pin A0
const int sensorPinS2 = A1; // CMS connected to analog pin A1
const int humedadAireS1 = 700;
const int humedadAguaS1 = 470;
const int humedadAireS2 = 700;
const int humedadAguaS2 = 500;
long unsigned diffTime;
GyverOLED<SSH1106_128x64, OLED_BUFFER> oled;
void setup() {
pinMode(4, OUTPUT); //Relay 1, pump 1
pinMode(7, OUTPUT); //Relay 2, pump 2
digitalWrite(4, HIGH); //Relay 1 Off
digitalWrite(7, HIGH); //Relay 2 Off
Serial.begin(9600);
oled.init();
oled.clear();
oled.setCursor(0, 0);
oled.setScale(3);
oled.print("P1");
oled.setCursor(0, 5);
oled.setScale(3);
oled.print("P2");
oled.fastLineH(31, 0, 128);
oled.update();
}
void waterPump1() {
int porcentajeHumedadS1;
do {
int humedadS1 = analogRead(sensorPinS1);
porcentajeHumedadS1 = map(humedadS1, humedadAireS1, humedadAguaS1, 0, 100);
if (porcentajeHumedadS1 > 100) porcentajeHumedadS1 = 100;
Serial.print("Lectura analógica Sensor P1: ");
Serial.println(humedadS1);
Serial.print("Porcentaje humedad P1: ");
Serial.print(porcentajeHumedadS1);
Serial.println("%");
oled.setScale(1);
oled.setCursor(40, 0);
oled.print("Sensor: ");
oled.print(humedadS1);
oled.setCursor(40, 1); //
oled.print("Humedad: ");
oled.print(porcentajeHumedadS1);
oled.print("%");
oled.setScale(1);
oled.setCursor(40, 2);
oled.print("Regando...");
oled.setCursor(100, 2);
oled.print(porcentajeHumedadS1);
oled.update();
digitalWrite(4, LOW);
} while (porcentajeHumedadS1 <= 80);
digitalWrite(4, HIGH);
Serial.println("Fin regado P1");
oled.setCursor(40, 2);
oled.print("Fin de regado");
oled.update();
return;
}
void waterPump2() {
int porcentajeHumedadS2;
do {
int humedadS2 = analogRead(sensorPinS2);
porcentajeHumedadS2 = map(humedadS2, humedadAireS2, humedadAguaS2, 0, 100);
if (porcentajeHumedadS2 > 100) porcentajeHumedadS2 = 100;
Serial.print("Lectura analógica P2: ");
Serial.println(humedadS2);
Serial.print("Porcentaje humedad P2: ");
Serial.print(porcentajeHumedadS2);
Serial.println("%");
oled.setScale(1);
oled.setCursor(40, 5); //
oled.print("Sensor: ");
oled.print(humedadS2);
oled.setCursor(40, 6); //
oled.print("Humedad: ");
oled.print(porcentajeHumedadS2);
oled.print("%");
oled.setScale(1);
oled.setCursor(40, 7);
oled.print("Regando...");
oled.setCursor(100, 7);
oled.print(porcentajeHumedadS2);
oled.update();
digitalWrite(7, LOW);
delay(6000);
Serial.println("Fin regado P2");
oled.setCursor(40, 7);
oled.print("Fin de regado");
oled.update();
} while (porcentajeHumedadS2 <= 80);
digitalWrite(7, HIGH);
Serial.println("Fin regado P2");
oled.setCursor(40, 7);
oled.print("Fin de regado");
oled.update();
return;
}
void loop() {
int humedadS1 = analogRead(sensorPinS1);
int porcentajeHumedadS1 = map(humedadS1, humedadAireS1, humedadAguaS1, 0, 100);
if (porcentajeHumedadS1 > 100) porcentajeHumedadS1 = 100;
Serial.print("loop Lectura analógica Sensor P1: ");
Serial.println(humedadS1);
Serial.print("loop Porcentaje humedad P1: ");
Serial.print(porcentajeHumedadS1);
Serial.println("%");
oled.setCursor(0, 0);
oled.setScale(3);
oled.print("P1");
oled.setScale(1);
oled.setCursor(40, 0); //
oled.print("Sensor: ");
oled.print(humedadS1);
oled.setCursor(40, 1); //
oled.print("Humedad: ");
oled.print(porcentajeHumedadS1);
oled.print("%");
oled.setCursor(40, 2);
oled.print("OK");
oled.update();
if (porcentajeHumedadS1 < 35) {
oled.setCursor(40, 2);
oled.print("Water");
oled.update();
//waterPump1();
}
//End of sensor 1
//Start sensor 2
int humedadS2 = analogRead(sensorPinS2);
int porcentajeHumedadS2 = map(humedadS2, humedadAireS2, humedadAguaS2, 0, 100);
if (porcentajeHumedadS2 > 100) porcentajeHumedadS2 = 100;
Serial.print("loop Lectura analógica Sensor P2: ");
Serial.println(humedadS1);
Serial.print("loop Porcentaje humedad P2: ");
Serial.print(porcentajeHumedadS2);
Serial.println("%");
oled.setScale(1);
oled.setCursor(40, 5); //
oled.print("Sensor: ");
oled.print(humedadS2);
oled.setCursor(40, 6); //
oled.print("Humedad: ");
oled.print(porcentajeHumedadS2);
oled.print("%");
oled.setCursor(40, 7);
oled.print("OK");
oled.update();
if (porcentajeHumedadS2 < 35) {
oled.setCursor(40, 7);
oled.print("Water");
oled.update();
//waterPump2();
}
Serial.println();
delay(1500);
}