Error ciclo bombas

Estimados:

Luego de varias pruebas y correcciones de errores entregada por la gente del foro ya hace un año aprox, llegue a este código (Adjunto al final), este código funciona bien reconoce las fallas cambia de bomba pero cuando termina el ciclo de un mes no vuelve a empezar, el código debiera hacer lo siguiente:

Comienza el ciclo la bomba N°2 y debe trabajar 8 días, luego se cambia a la bomba N°3 y debe trabajar 8 días, luego se cambia a la bomba N°4 y debe trabajar 8 días, luego se cambia a la bomba N°1 y debe trabajar el saldo de días para completar un mes de 30 o 31 días. ademas agregué un código de error, cuando el presostato lance la señal de error se debe cambiar a la bomba siguiente, el tema es ue al completar un mes se apaga la ultima bomba y no vuelve a empezar el ciclo, a que se debe esto?

Cualquier ayuda me servirá de mucho y espero les sirva este código en sus proyectos.

Codigo:

#include <Wire.h>
#include "RTClib.h"
#include <Time.h>
#include <TimeLib.h>



RTC_DS1307 rtc;
int RELE1 = 8;
int RELE2 = 9;
int RELE3 = 10;
int RELE4 = 11;
int falla1=4;
int falla2=5;
int falla3=6;
int falla4=7;
int presostato=12;

void setup() {

Wire.begin();
Serial.begin(9600);
rtc.begin();
//nexInit();
//rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));  // para grabar la bora inicial solo se hace una vez.

pinMode (RELE1, OUTPUT);
pinMode (RELE2, OUTPUT);
pinMode (RELE3, OUTPUT);
pinMode (RELE4, OUTPUT);
pinMode (falla1, INPUT);
pinMode (falla2, INPUT);
pinMode (falla3, INPUT);
pinMode (falla4, INPUT);
pinMode (presostato, INPUT);

digitalWrite(RELE1, HIGH);
digitalWrite(RELE2, HIGH);
digitalWrite(RELE3, HIGH);
digitalWrite(RELE4, HIGH);

}
void loop() {

DateTime now= rtc.now();
Serial.println(now.day(),DEC);
Serial.println(now.hour(),DEC);
Serial.println(now.minute(),DEC);
int sensorfalla1= digitalRead(falla1);
int sensorfalla2= digitalRead(falla2);
int sensorfalla3= digitalRead(falla3);
int sensorfalla4= digitalRead(falla4);
int statepresostato=digitalRead(presostato);
Serial.println(statepresostato);

//----------------ACTIVANCIÓN BOMBA2-----------------------------------------

if ((now.day()>=1) &&  (now.day()<=8)) {

 if (statepresostato==1){
   statepresostato=0;
 }
 else {
   statepresostato=1;
 }
 digitalWrite(RELE1, HIGH);
 digitalWrite(RELE2, statepresostato);
Serial.println("FUNCIONANDO BOMBA2!");
  
  while(sensorfalla2==HIGH){
   Serial.println("FALLA BOMBA 2");
   digitalWrite(RELE2,HIGH);
   digitalWrite(RELE3,statepresostato);
  }
}

//----------------ACTIVACIÓN BOMBA3------------------------------------------
if ((now.day()>8) &&  (now.day()<=16)) {
 if (statepresostato==1){
   statepresostato=0;
 }
 else {
   statepresostato=1;
 }
 digitalWrite(RELE2, HIGH);
 digitalWrite(RELE3, statepresostato);
 Serial.println("FUNCIONANDO BOMBA3!");
 
 while(sensorfalla3==HIGH){
   Serial.println("FALLA BOMBA 2");
   digitalWrite(RELE3,HIGH);
   digitalWrite(RELE4,statepresostato);  
  }
  
}


//---------------ACTIVACIÓN BOMBA4-------------------------------------------

if ((now.day()>1) &&  (now.day()<=24)){
 if (statepresostato==1){
   statepresostato=0;
 }
 else {
   statepresostato=1;
 }
 digitalWrite(RELE3, HIGH);
 digitalWrite(RELE4, statepresostato);
 

  
while(sensorfalla4==HIGH){
   Serial.println("FALLA BOMBA 4");
   digitalWrite(RELE4,HIGH);
   digitalWrite(RELE1,statepresostato);  
  }  
}

//----------------ACTIVACIÓN BOMBA1------------------------------------------
if ((now.day()>24) &&  (now.day()<=31)){
 if (statepresostato==1){
   statepresostato=0;
 }
 else {
   statepresostato=1;
 }
 digitalWrite(RELE4, HIGH);
 digitalWrite(RELE1, statepresostato);
Serial.println("Funcionando bomba1!");

while(sensorfalla1==HIGH){
   Serial.println("FALLA BOMBA 1");
   digitalWrite(RELE1,HIGH);
   digitalWrite(RELE2,statepresostato);  
  }
}

delay (1000);
}

En el if dela bomba 4 te falta un 6. Estás comparando con el día 1 en lugar de con el día 16.

Tienes:

//---------------ACTIVACIÓN BOMBA4-------------------------------------------

if ((now.day()>1) &&  (now.day()<=24)){

Y debería de ser:

//---------------ACTIVACIÓN BOMBA4-------------------------------------------

if ((now.day()>16) &&  (now.day()<=24)){

Corrige esto y prueba a ver si funciona como se espera.

Otra cosa de la que acabo de darme cuenta. Creo que deberías de cambiar los while que tienes por if. Ya que si entra en uno de los while porque uno de los sensorfallaX lee un HIGH, no saldrá nunca del bucle y permanecerá en él hasta que se reinicie el Arduino. Y si el statepresostato dice que se debía de apagar la bomba, apagada se quedará. Si dice que se había de encender, encendida se quedará.