Programar boton que inicie y apague Loop para fade en RGB?

Hola amigos, he fracasado muchas veces y no he encontrado la solución a esta petición

Como puedo configurar un boton en el programa, que al pulsar por primera vez inicie lo que hay en el loop y que al pulsarlo por segunda vez apague lo que se esta ejecutado en el Loop.

Les dejo el código por si gustan revisarlo, por favor

muchas gracias deantemano...

const int led1 = 3;     //led conectado al pin 3
const int led2 = 5;     //led conectado al pin 5
const int led3 = 6;     //led conectado al pin 6
int brillo1;
int brillo2;
int brillo3;

void setup() {
pinMode(led1, OUTPUT);    //declaramos led1 como salida
pinMode(led2, OUTPUT);    //declaramos led2 como salida
pinMode(led3, OUTPUT);    //declaramos led3 como salida
}

void loop() {
//fade in al brillo

  //Azul
  for(brillo2 = 0; brillo2 < 255; brillo2 ++){
    analogWrite(led2, brillo2);
    delay(10);
    }
  
  //Rojo
  for(brillo1 = 255; brillo1 >= 0; brillo1 --){
    analogWrite(led1, brillo1);
    delay(10);
    }
  
  //Verde
  for(brillo3 = 0; brillo3 < 255; brillo3 ++){
    analogWrite(led3, brillo3);
    delay(10);
    }

//fade out al brillo
  
  //Azul
  for(brillo2 = 255; brillo2 >= 0; brillo2 --){
    analogWrite(led2, brillo2);
    delay(10);
    }
  
  //Rojo
  for(brillo1 = 0; brillo1 < 255; brillo1 ++){
    analogWrite(led1, brillo1); 
    delay(10);
    }
  
  //Verde
  for(brillo3 = 255; brillo3 >= 0; brillo3 --){
    analogWrite(led3, brillo3);
    delay(10);
    }  

}

PWM3.ino (1.08 KB)

Usa funciones para separar el contenido de un ciclo. Ese es el punto de partida para realizar "multitareas" en arduino.

Solo hay que introducir el proceso para leer el estado del pulsador en un pin digital. Con esto en mente, queda convertir el sketch en una función:

const int led1 = 3;     //led conectado al pin 3
const int led2 = 5;     //led conectado al pin 5
const int led3 = 6;     //led conectado al pin 6
int brillo1;
int brillo2;
int brillo3;

const int inputPin = 2;  //Pulsador a Pin digital 2

void setup() {
pinMode(inputPin, INPUT);

pinMode(led1, OUTPUT);    //declaramos led1 como salida
pinMode(led2, OUTPUT);    //declaramos led2 como salida
pinMode(led3, OUTPUT);    //declaramos led3 como salida

  Control_Led();
}

void loop(){
 while(1) {
   value = digitalRead(inputPin);  //lectura digital de pin

  if (value == HIGH) {
      Control_Led();
      Serial.println("Encendido");
  }
  else {
      Serial.println("Apagado");
  }
 }
}

void Control_Led() {
//fade in al brillo

  //Azul
  for(brillo2 = 0; brillo2 < 255; brillo2 ++){
    analogWrite(led2, brillo2);
    delay(10);
    }
  
  //Rojo
  for(brillo1 = 255; brillo1 >= 0; brillo1 --){
    analogWrite(led1, brillo1);
    delay(10);
    }
  
  //Verde
  for(brillo3 = 0; brillo3 < 255; brillo3 ++){
    analogWrite(led3, brillo3);
    delay(10);
    }

//fade out al brillo
  
  //Azul
  for(brillo2 = 255; brillo2 >= 0; brillo2 --){
    analogWrite(led2, brillo2);
    delay(10);
    }
  
  //Rojo
  for(brillo1 = 0; brillo1 < 255; brillo1 ++){
    analogWrite(led1, brillo1); 
    delay(10);
    }
  
  //Verde
  for(brillo3 = 255; brillo3 >= 0; brillo3 --){
    analogWrite(led3, brillo3);
    delay(10);
    }  
}

Pulsador en arduino