Secuencia de reles distintas con dos pulsadores "Ayuda"

Hola por primera vez a todos. en mi trabajo necesito mezclar cuatro fluidos a partes iguales, tengo dos pulsadores uno para llenar al 100% y otro para llenar al 50%. Me funciona bien pero a los tres días de funcionamiento, de tanto en tanto se quedaba colgado el arduino , estoy un poco verde en esto de programación, podéis ayudarme? muchas gracias de antemano ;)

 int CH1 = 7;                  // pin de CH1  
 int CH2 = 6;                  // pin de CH2  
 int CH3 = 5;                  // pin de CH3 
 int CH4 = 4;                  // pin de CH4 
 
 
 int pulsador1 = 12;               // pin deposito lleno
 int pulsador2 = 13;               // pin deposito medio
 
 int val = 0;                  
 
void setup() {
 
 
 pinMode(CH1, OUTPUT);            
 digitalWrite(CH1, HIGH);        //rele off 
 pinMode(CH2, OUTPUT);            
 digitalWrite(CH2, HIGH);        //rele off 
 pinMode(CH3, OUTPUT);            
 digitalWrite(CH3, HIGH);        //rele off 
 pinMode(CH4, OUTPUT);            
 digitalWrite(CH4, HIGH);        //rele off 
 
 pinMode(pulsador1, INPUT);       //pulsador lleno
 pinMode(pulsador2, INPUT);       //pulsador medio

       }

void loop(){
 
 
 delay(5000);           //5seg espera de inicio lectrura de pulsador
                        //para que no detecte al minimo roce del pulsador
 
 val = digitalRead(pulsador1);         // lectura de pulsador
  
 
 
 if (val == HIGH) {                
   

   
 digitalWrite(CH1, LOW);            // CH1 on  
 delay(500);                        // tiempo para evitar salpicadura
 digitalWrite(CH2, LOW);            // CH2 on
 delay(500);                        // tiempo para evitar salpicadura
 
 
 delay(60000);                      // 1 minuto tiempo de apertura 2 circuitos
 
 
 digitalWrite(CH1, HIGH);           // CH1 off
 delay(500);                        // tiempo para evitar salpicadura
 digitalWrite(CH2, HIGH);           // CH2 off
 delay(500);                        // tiempo para evitar salpicadura
 
 digitalWrite(CH3, LOW);            // CH3 on  
 delay(500);                        // tiempo para evitar salpicadura
 digitalWrite(CH4, LOW);            // CH4 on
 delay(500);                        // tiempo para evitar salpicadura
 
 delay(60000);                      // 1 minuto tiempo de apertura 2 circuitos
 
 
 digitalWrite(CH3, HIGH);           // CH3 off
 delay(500);                        // tiempo para evitar salpicadura
 digitalWrite(CH4, HIGH);           // CH4 off
 delay(500);                        // tiempo para evitar salpicadura
 
 
 }
 
  val = digitalRead(pulsador2);       // read input value 
  
 if (val == HIGH) {                   // check the input state
   
 
digitalWrite(CH1, LOW);             // CH1 on  
 delay(500);                        // tiempo para evitar salpicadura
 digitalWrite(CH2, LOW);            // CH2 on
 delay(500);                        // tiempo para evitar salpicadura
 
 
 delay(30000);                      // 30 seg tiempo de apertura 2 circuitos
 
 
 digitalWrite(CH1, HIGH);           // CH1 off
 delay(500);                        // tiempo para evitar salpicadura
 digitalWrite(CH2, HIGH);           // CH2 off
 delay(500);                        // tiempo para evitar salpicadura
 
 digitalWrite(CH3, LOW);            // CH3 on  
 delay(500);                        // tiempo para evitar salpicadura
 digitalWrite(CH4, LOW);            // CH4 on
 delay(500);                        // tiempo para evitar salpicadura
 
 delay(30000);                      // 30 seg tiempo de apertura 2 circuitos
 
 
 digitalWrite(CH3, HIGH);           // CH3 off
 delay(500);                        // tiempo para evitar salpicadura
 digitalWrite(CH4, HIGH);           // CH4 off
 delay(500);                        // tiempo para evitar salpicadura
 
 
  
  

 }
}

en una ocasión realizaba la secuencia bien pero los tiempos se modificaron muy cortos

Hola mustang, creo que debes leer las Normas del Foro mientras arreglo tu programa. Lo que me preocupa es que se cuelgue, tu programa, la unica explicación que creo lo explique es que estas alimentando los reles con el arduino? Es asi?

Mas alla que usar tantos delays no me gusta a ti te funciona. Una corrección con los pulsadores. Asi como estan no estan bien deberia ser

  if (val == HIGH && valAnt == LOW) {
  // todos los delay
  
  }  // termina el if
   valAnt = val;   // define valAnt del mismo modo que val.

idem con el segundo pulsador. Al menos no es perfecto pero es mucho mejor que lo que tienes

Para mi tu problema tiene que ver con la alimentación del arduino y/o los reles. Tienes ruido, o algo genera ruido y afecta el arduino.

Dime con que alimentas el arduino y a que conector o entrada lo conectas. De que valor es la fuente tensión y corriente.

Hola surbyte, gracias por contestar. :) No termine de leer las normas del foro lo siento, :confused:

Utilizo un arduino nano, se alimenta por el pin +5 Sacando una salida +5v de una placa de reles que tiene salida +5v, la paca de reles se alimenta con un transformador de 12v 2 amperio.

Otra cosa los pulsadores 12 y 13 los activo utilizando otro arduino, tengo mucha distancia unos 50 m, Utilizo tres cables de una manguera de 50 cables de teléfono con adsl, Los tres cables son :

gnd=gnd

pulsador1=12

pulsador2=13

Podria tener el problema con la distancia y el cable telefónico?

mustang_shelby: Hola surbyte, gracias por contestar. :) No termine de leer las normas del foro lo siento, :confused:

Utilizo un arduino nano, se alimenta por el pin +5 Sacando una salida +5v de una placa de reles que tiene salida +5v, la paca de reles se alimenta con un transformador de 12v 2 amperio.

Otra cosa los pulsadores 12 y 13 los activo utilizando otro arduino, tengo mucha distancia unos 50 m, Utilizo tres cables de una manguera de 50 cables de teléfono con adsl, Los tres cables son :

gnd=gnd

pulsador1=12

pulsador2=13

Podria tener el problema con la distancia y el cable telefónico?

el positivo deberia ir al pin vin no al 5v.si lo alimentas con los 5v de la placa de reles no te va a funcionar bien ,puesto que la entrada vin pasa por el regulador que rebaja un poco el voltaje entrante dejandolo en menos de 5v.podrias usar los 12v del transformador, positivo al pin vin y negativo a un pin gnd del nano.los 50 metros podrian ser un problema por la caida de tension y posiblemente interferencias por el tema de la telefonia

Probare lo que dice el Jose, Al utilizar una conexión tipo cable plano de tipo (disco duro) utilice el +5 por ubicación, pero tienes mucha razón mejor el VIN...

El tema de los 50 metros tenía pensado de utilizar comunicación por serial, pero la caída de tensión y las ADSL seguirán estando.

Probaré y comento, muchas gracias!

De momento parece que funciona alimentando por el vin, esperemos que no falle, gracias por los comentarios!