Ayuda para control de compresores y cambiar maestro.

estado 1:
Bueno yo no dije nada porque la , en tu if me sorprendió. No conocía ni conozco como se comporta.
Para mi conviene usar && o || (and o OR) para lo que sea conveniente.

estado 4. que pasa si la presion queda entre 100 y 350 es justamente lo que te esta sucediendo del bucle infinito
MIra tu código,

if (tiempo >= sumaOFFcab){ // si la presion de consigna ha bajado volverá a estado 3.
      if (presion < 100){
        estado = 3;
      } // tenemos que hace si es menor a 100
      if (presion>=350){ // si la presion no se modifica en esos x segundos pasará a estado 1 = espera.
        digitalWrite (motor,LOW);
        estado = 1;
      }  // tenemos que hace si es mayor o igual a 350
       else {
            // aca resolvemos que hacer entre > 100 y < 350
       }
    }

vffgaston:
¿Cuántas son continuas -analógicas- y cuántas ON-OFF?

no entiendo muy bien esa pregunta pero analógicas son la temperatura y la presión, la temperatura solo la utilizo para alarma de sobrecalentamiento y la presión la utilizo para controlar todo el proceso en general.

PD. antes me preguntaste como estaban cableados los sensores del compresor, yo aun no he probado nada pero de fabrica vienen los hilos metidos en un tubo corrugado de pvc, nada de mallazos ni blindaje.

surbyte:
estado 1:
Bueno yo no dije nada porque la , en tu if me sorprendió. No conocía ni conozco como se comporta.
Para mi conviene usar && o || (and o OR) para lo que sea conveniente.

ya me di cuenta que no funcionaba bien así, solo le hacía caso a la primera variable. Creo que me confundí al ver algún tutorial y probablemente fuese de otro tipo de función.

surbyte:
estado 4. que pasa si la presión queda entre 100 y 350 es justamente lo que te esta sucediendo del bucle infinito
MIra tu código,

ya veo, no me había fijado.
Y si lo pusiera así, ¿estaría resuelto no?

if (tiempo >= sumaOFFcab){ // si la presion de consigna ha bajado volverá a estado 3.
      if (presion < 350){
        estado = 3;
      }
      if (presion>=350){ // si la presion no se modifica en esos x segundos pasará a estado 1 = espera.
        digitalWrite (motor,LOW);
        estado = 1;
      }
    }

Asi esta perfecto pero ojo con el umbral de 350, hará que tengas una situación de basculamiento del RELE.
usa una histérsis que asegure que algo menos, digamos 5 por dar un número, lo que de nuevo nos dejaría un bucle infinito entre 345 y 350
que tal si lo sigues obligando a que siga en el estado 4 hasta alcanzar esa posición que asegure que no haya basculamiento.
Algo asi

if (tiempo >= sumaOFFcab){ // si la presion de consigna ha bajado volverá a estado 3.

    if (presion < 345){
        estado = 3;
    }
     else  
        estado = 4;   // si vale 345 hasta 349.99.
       if (presion>=350){ // si la presion no se modifica en esos x segundos pasará a estado 1 = espera.
        digitalWrite (motor,LOW);
        estado = 1;
      }
    }

Perfecto entonces :)

Me pondre ahora con la pantalla a ver que tal queda (suponiendo que no me altere las lecturas ninguna perturbacion electromagnetica, una vez lo tenga todo lo provaré con un compresor y osciloscopio para asegurarme).

Mil gracias señores, le veo salida gracias a vosotros.

Un saludo.

Buenas compis

En principio ya tengo el control del compresor hecho pero tengo un follón con el contador de horas de funcionamiento del motor y de la cabeza de aspiracion que no me aclaro, Surbyte seguí las intrucciones que me propusiste al principio del post para contabilizar las horas de cada compresor:

surbyte: De nuevo, cuando enciendas cada compresor harás TempCompresor1 = milllis(); Cuando detengas un compresor haras

TONCompresor1 += millis()-TempCompresor1;

y lo implemento así en mi programa:

   if (digitalRead (motor) == HIGH){
    TempCompresor1 = millis();
   }
   
   if (digitalRead(motor) == LOW){
    TONCompresor1 += millis()-TempCompresor1;
   }

Pero el problema es que al estar en estado parado( motor == LOW), la variable TONCompresor1 me esta sumando ya los millis y no se por que. En resumen que no funciona como debería de ser.

Hay alguna forma de solucionarlo? yo he supuesto que debería de ser un "pulso" el que le diga a la variable TempCompresor1 que sea millis cuando arranque y que no siga el if en activo, y otro "pulso" cuando el motor se ha parado para que realice el calculo y me lo devuelva a TONCompresor1 los millis que ha estado funcionando pero el if no siga activo, pero por mucho que pienso no soy capaz de programarlo.

A ver si me podéis echar una manita compis, un saludo.