Problema con Subrutinas void y millis

Hola!

estoy intentando desarrollar un proyecto y la verdad que por poco que avanzo tengo bastantes imprevistos…

La idea es crear subrutinas void para que me haga una serie secuencia dependiendo de la subrutina creada y llamarla desde el puerto serie, esto lo he conseguido, el problema es que no se como pararla, o simplemente llamando a otra de paro por ejemplo ya me serviría? me refiero como en los PLC que llamas a una subrutina y después la dejas de llamar.

la otra duda es que cuando estoy dentro de una subrutina necesito arrancar una salida y a los 30 segundos arrancar otra y lo mismo para pararla cuando deje de llamar a esa subrutina.

la función Millis para el envio por el puerto serie me funciona lo que he visto que me da problemas en activar al mismo tiempo en subrutinas distintas…
os pongo el programa para que podáis entenderlo mejor:

La función temp122() se arranca nada mas empezar el programa y es para enviar por el puerto serie las temperaturas, la idea es enviar sondas de temperatura y verlas por el PC pero como no las tengo el hw lo simulo con esa función o con valores fijos o con valores alternos.

// Declaración de constantes, salidas digitales:

int Com507DO = 8;                
int Fan507DO = 10;                 
int SVCond = 48;                  
int SVDefr = 9;                    

// Declaración de constantes, comunicación Arduino-PC:

char FRIO_START;                     // Variable del SCADA 
char VAC_START;                      // Variable del SCADA 
char PARAR_OFF;		        // Variable del SCADA 

int estado;
String comando;
char caracter;
  

// delay para envio de temp.
unsigned long previousMillis = 0;  
const long interval = 50;          // Intervalo de envio milisegundos
const long interval1 = 5000;          // Intervalo de envio milisegundos 
String envia="";


void setup(){
  
  
  // Declaracion de salidas digitales
  
  pinMode(Com507DO, OUTPUT);
  pinMode (SVCond, OUTPUT);
  pinMode (SVDefr, OUTPUT);

  
  Serial.begin(9600); // Velocidad de comunicación.
}
void vacio122(){                   // Subrutinao 1
  
  digitalWrite(SVDefr, HIGH); Serial.println("D30");
}
void parar122(){                   // Subrutina para parar todo
 digitalWrite(Com507DO, LOW); Serial.println("D23");
  digitalWrite(SVDefr, LOW); Serial.println("D31");
}
void congelacion122() {            // Subrutina 2
 
unsigned long currentMillis = millis(); 
   
  digitalWrite(Com507DO, HIGH); Serial.println("D22");
 if (Com507DO == HIGH); digitalWrite (Fan507DO, HIGH); Serial.println("D32");
 if (Com507DO == HIGH); {
  if (currentMillis - previousMillis >= interval1) 
  {previousMillis = currentMillis; 
 digitalWrite (SVCond, HIGH); Serial.println ("D28");}

}
}


void temp122(){                    // Subrutina para la lectura de las entradas analogicas

  
   unsigned long currentMillis = millis();
for (int j = 0; j < 360; j++)
  
  if (currentMillis - previousMillis >= interval) {
     // save the last time you blinked the L
     previousMillis = currentMillis;

// Serial.print("T");
 //Serial.println (sin(j*(PI/180)));
//Serial.print("V");
//Serial.println (sin(j*(PI/100)));
//Serial.print ("T");
//Serial.println("40");
//Serial.print ("V");
//Serial.println("100");

   }


}
void loop(){
  while (Serial.available()>0){
    
    caracter = Serial.read();
    comando.concat(caracter); 
    delay(2);
 
  }
  
   // Marcha de las subrutinas
   if (comando.equals ("FRIO_START") == true) {congelacion122();} 
   if (comando.equals ("VAC_START") == true) {vacio122();} 
   if (comando.equals ("PARAR_OFF") == true) {parar122();}
  comando="";

  temp122();


}

Usa un flag!
Una variable bool que pones en true o false según corresponda.

Gracias por contestar!

Podrias ponerme algun ejemplo?? He estado mirando y no he tengo nada claro!

bool flag = false;

void setup() {
    flag = true;   // al activarlo le indico que funcionara 
}

void loop() {

     if (flag) {
        temp122();
        flag = false;   // al desactivarlo controlo cuando quiero que vuelva a funcionar
     }                      // lo hará cuando algun evento se cumpla, ejemplo tiempo 
                             // o algun pin que cambie de estado x dar un ejemplo