Fallas al activar bobinas de contactor.

Estoy en un proyecto que trata de la activación de dos bobinas de un contactor, para la alternancia de dos motores por un tiempo de dos horas, al momento de simularlo en Proteus, se me produce un salto, es decir cuenta un tiempo de arranque luego de un SWITCH, se activa la primera bobina, cuenta el tiempo pasa a la otra, al completar el tiempo de esta, se me produce como especie de un salto, me activa la otra bobina sin contar el tiempo y luego me queda activada de nuevo, la primera. El for esta en 6 (solo por motivos de aceleracion de tiempo para ver compartamiento).

int cuenta=0;
int j=1;
int i=1;
int Pinbomba1=12; // %pin de control bomba1%
int Pinbomba2=13; // %pin de control bomba2%
int Arranque=11;


int horas( int x)
{ if (cuenta!= x)
    {
      for (j=1; j< 6; j++)
          {
            for ( i=1; i<6;i++)
                {
                  delay (1000);
                }
          }
              cuenta = cuenta+1;
     }
    else {
    return (true);
     }
}



void setup() {
pinMode(Pinbomba1,OUTPUT);
pinMode(Pinbomba2,OUTPUT);
pinMode(Arranque,INPUT);
digitalWrite (Pinbomba1, LOW); // Normalmente cerrado
digitalWrite(Pinbomba2, LOW); //Normalmente cerrado

  

}

void loop() {
  // put your main code here, to run repeatedly:
  bool pulso= digitalRead(Arranque);
  
  if (pulso== false)
{
  delay(100);
  digitalWrite (Pinbomba1, HIGH);
  digitalWrite (Pinbomba2, LOW);
  horas (2);
 digitalWrite (Pinbomba1, LOW);
 digitalWrite (Pinbomba2, HIGH);
 horas (2);
}
else {
 digitalWrite (Pinbomba1, LOW);
 digitalWrite (Pinbomba2, LOW); 
      }
 

             }

Que me esta fallando?

Para la próxima por favor intenta usar un poco la sangria de modo que el que lo quiera leer pueda.
Tuve que reordenarlo para entender tu código.

Tu código mas allá de cuestiones de gusto esta bien. A mi no me gusta el uso o abuso de delay.
Ejemplo... cuando funcione eso de 2 horas, nunca responderá a tu pin en LOW hasta que transcrurran esas 2 horas o mas.

Tu problema tiene que ver con las bobinas de los contactores.
Si accionas una bobina y es seguro que generen un transitorio que provoque el problema de reinicio que tu arduino esta teniendo.

Tienes varias opciones :

  1. Usar snubbers una serie de Resistencia y capacitor
  2. Usar un SSR en lugar del rele. Es un Rele de estado solido que generalmente dispara por cruce por cero y entonces no genera el transitorio que provoca que el arduino se reinicie.
  3. Usar TVS es un diodo de transitorios.

Hay un tema donde se habla en extenso de esto, busca algo como
[OFFTOPIC] o casí, hablemos sobre los snubber

Aun no las he conectado a las bobinas de los contactores, solo las he simulado en Proteus, y poseo ese problema, si la idea es que se active, cuando transcurra el tiempo.

No entiendo la lógica de la función horas() ? es hacer perder tiempo al Arduino porque no usas delay() directamente ?

void loop() {
   // put your main code here, to run repeatedly:
   bool pulso = digitalRead(Arranque);

   if (pulso == false){
      delay(100);
      digitalWrite (Pinbomba1, HIGH);
      digitalWrite (Pinbomba2, LOW);
      //horas (2);
      delay(25000);
      digitalWrite (Pinbomba1, LOW);
      digitalWrite (Pinbomba2, HIGH);
      //horas (2);
      delay(25000);
   }else {
      digitalWrite (Pinbomba1, LOW);
      digitalWrite (Pinbomba2, LOW);
   }
}

En tu mensaje original hablabas de "alternancia". Querías decir que cada bomba funcione por 2 hrs es decir primero A, a las 2 hrs B y a las 2 hrs A nuevamente ?

Que debería pasa si presionas nuevamente el pulsador ? ahora no pasa nada porque Arduino se congela dos veces con delay(25000).