encerrar programa

Olá Maurizio,

Existem muitas formas de fazer o mesmo, até mesmo sem os dalays usando arrays, etc. Mas não sei o quanto você sabe de programação.

Você tem um relê para cada tubo ou é o mesmo relê?

Mantendo o teu código, você pode adicionar uma variável global para definir o início do processo, após pressionamento do botão.

Depois de apertado o botão o processo inicia (mancando a variável como true) e quando termina marcamos a variável como false.

então, abaixo o teu código alterado com a idéia acima, lembrando que não cmpilei para saber se funciona mesmo ^^

int pin = 13;
Rodando int state = LOW;

void setup() {                
  pinMode(10, OUTPUT);  
  pinMode(9, OUTPUT); 
  pinMode(13, OUTPUT); 
  
  pinMode(pin, OUTPUT);
  attachInterrupt(0, IniciaProcesso, CHANGE); //Liga o push button na porta digital 0 para chamar esse interrupt
}

void Start()
{
  Rodando = HIGH
}

void loop() {
  if(Rodando) //Se o botão foi pressionado
  {
    delay(100);
    
    digitalWrite(10, HIGH);   // 12 
    delay(4000);
    
    digitalWrite(13, HIGH);   // 12 
    delay(20);              // 
    digitalWrite(13, LOW);    //
    delay(500); 
    
    digitalWrite(13, HIGH);   // 1
    delay(20);              
    digitalWrite(13, LOW);    
    delay(500);    
     
    digitalWrite(13, HIGH);   // 2
    delay(20);              
    digitalWrite(13, LOW);    
    delay(500);   
    
    digitalWrite(13, HIGH);   // 3
    delay(20);              
    digitalWrite(13, LOW);    
    delay(500);  
    
    digitalWrite(13, HIGH);   // 4
    delay(20);             
    digitalWrite(13, LOW);    
    delay(500);  
    
    digitalWrite(13, HIGH);   // 5
    delay(20);              
    digitalWrite(13, LOW);    
    delay(500);  
    
    digitalWrite(13, HIGH);   // 6
    delay(20);              
    digitalWrite(13, LOW);    
    delay(500);  
    
    digitalWrite(13, HIGH);   // 7
    delay(20);              // 
    digitalWrite(13, LOW);    // 
    delay(500);  
    
    digitalWrite(13, HIGH);   // 8
    delay(20);              // 
    digitalWrite(13, LOW);    // 
    delay(500);  
    
    digitalWrite(13, HIGH);   // 9
    delay(20);              // 
    digitalWrite(13, LOW);    // 
    delay(500);  
    
    digitalWrite(13, HIGH);   // 10
    delay(20);              // 
    digitalWrite(13, LOW);    // 
    delay(500);  
    
    digitalWrite(13, HIGH);   // 11
    delay(20);              // 
    digitalWrite(13, LOW);    // 
    delay(500);  
    
    digitalWrite(13, HIGH);   // 12 
    delay(20);              // 
    digitalWrite(13, LOW);    //
    delay(500);  
    
    digitalWrite(13, HIGH);   // 13
    delay(20);              // 
    digitalWrite(13, LOW);    //
    delay(500);  
    
    digitalWrite(13, HIGH);   // 14
    delay(20);              // 
    digitalWrite(13, LOW);    //
    delay(500); 
    
    digitalWrite(13, HIGH);   // 15
    delay(20);              // 
    digitalWrite(13, LOW);    //
    delay(500); 
    
    digitalWrite(13, HIGH);   // 16
    delay(10);              // 
    digitalWrite(13, LOW);    //
    delay(10); 
    
    digitalWrite(9, HIGH);   // 17
    delay(2000);              // 
    digitalWrite(9, LOW);    //
    delay(100); 
    
    digitalWrite(13, HIGH);   // 18
    delay(10);              // 
    digitalWrite(13, LOW);    //
    delay(1000); 
    digitalWrite(10, LOW);
    delay(2500);
    
    //no final marcamos Rodando como LOW
    Rodando = LOW;
  }
}

Lembrando que o uso de delays não é nada indicado, o ideal seria usar o método millis. Mas agora preciso sair e a noite volto para ver se a fase um esta ok e se der te dou um exemplo de intervalo usando o millis para substituir o delay

Até