Olá,
Mas isso já acontece no teu código. Estás a usar a variável "estado" para selecionar o próximo estado que corresponde a um determinado "case".
No estado 1 manténs o mesmo estado ou seleccionas o estado 200, dependendo da média de humidade obtida. Dizes que queres ir do estado 1 para o estado 3, no entanto não existe esse estado 3? Não parece fazer sentido
. Também não existe estado 12... Para quê ir do estado 3 para o 12 se ambos não existem? Primeiro tens de fazer um case para o 3 e outro para o 12. Depois é seleccionar esses estados dependendo de uma determinada condição noutro estado... Algo como o já está a ser feito no estado 1...
Suponho que te referes ao código do "case" em que "estado==2"? Este código nunca é executado porque em nenhum outro estado é seleccionado o "estado" 2...
Neste "case" em que "estado==2" parece haver um erro na situação em que "leituraSensor > 500". A condição "(tempoAtual - tempoAnterior >= 5000)" só é verdadeira a primeira vez quando "tempoAnterior" é zero. Depois "tempoAnterior" é sempre maior que o "tempoActual". Tens de actualizar o "tempoActual" e não o "tempoAnterior":
tempoAtual = millis();
tempoAnterior = tempoAtual; <------ Inicializa o tempoAnterior
...
if (leituraSensor > 500) {
Serial.println("aguardando fluxo de água...");
digitalWrite(pinoRele, LOW);
//-- tempo(15s) do while para a água chegar até o sensor de água---
while (tempoAtual - tempoAnterior >= 5000) { // tempo de 5s para teste
if (leituraSensor < 500) {
digitalWrite(pinoRele, LOW); //o pino já esta ligado antes desse comando...
estado = 20; //5minutos de irrigação
tempoAnterior = millis(); <------ Devias actualizar o tempoActual?
break;
}
if (leituraSensor > 500) {
digitalWrite(pinoRele, HIGH);
estado = 200; // tempo de reinicio da irrigação
tempoAnterior = millis(); <------ Devias actualizar o tempoActual?
break;
}
}
}