milis() e outros timers
O milis() funciona bem para aplicacoes que desligam a placa, mas nao funciona muito bem quando a placa fica ligado direto. O problem e' que ele reseta a cada 50 dias (mais ou menos) e faz com que o teu calculo na linha 95 e 98 se perca:
void loop(){
tempoFinal = millis();
if ((tempoFinal - tempoInicial) > INTERVALO_ENTRE_LEITURAS){
tempoInicial = millis();
Talvez seja melhor usar uma biblioteca para cuidar do tempo e ter formas mais precisas de calcular os intervalos de irrigacao (por examplo, todo dia as seis da tarde, se nao choveu... e se a umidade do solo nao estiver alta.)
Uma alternativa ao milis() seria a funcao delay()
, mas ela tem problemas tambem.
Ela nao nao garante precisao de tempo e pode acontecer de alguns segundos serem adicionados diariamente ao calculo do intervalo. Imagine a aplicacao rodando o mes todo (tu vais ter um desvio muito grande).
A melhor opcao mesmo e' de usar um timer com um RTC (relogio de tempo real): DS3231