¿Cómo apagar LEDs si necesitas obligatoriamente estar en un while(BRILLO > 0)?

Lo primero, el código:

//PROGRAMA DEFINITIVO!!
//Pines con PWM:3,5,6,9,10,11
int i;
int a;
int apagado;
const int PWM1 = 3;
const int PWM2 = 5;
const int PWM3 = 6;
const int PWM4 = 9;
const int PWM5 = 10;
const int PWM6 = 11;
unsigned long tanterior = 0;       
const long intervalo = 10;               
int BRILLO = 0;                   
int fadeAmount = 1;
int estadoluzacuario;
int hora;
int minutos;
int segundos;
int hdes;
int mdes;
int sdes;
String msg1 = "El sistema de iluminación necesita 2 horas.";
String msg2 = "Una, que será la actual.";
String msg3 = "Y otra, que será la deseada para que se ilumine el acuario.";
String msg4 = "Empecemos con la actual.";
String msg5 = "Introduzca la hora (solo 2 cifras).";
String msg6 = "Ahora escriba los minutos.";
String msg7 = "Por último, escriba los segundos.";
String msg8 = "Hora exacta elegida:";
String msg9 = "Vamos con la hora deseada.";
String msg10 = "¿Hora?";
String msg11 = "¿Minuto?";
String msg12 = "¿Segundo?";
String msg13 = "Si quiere apagar el sistema de iluminación, escriba '0'.";

void setup(){
  tanterior = millis();
  for(i = 1; i<= 13; i++){
    pinMode(i, OUTPUT);
  }
  Serial.begin(9600);
}
void loop(){
  Serial.println(msg1);
  delay(1500);
  Serial.println(msg2);
  delay(1500);
  Serial.println(msg3);
  delay(1500);
  Serial.println(msg4);
  delay(1500);
  Serial.println(msg5);
  while(Serial.available() == 0){
    
  }
  hora = Serial.parseInt();
  Serial.println(msg6);
  while(Serial.available() == 0){
    
  }
  minutos = Serial.parseInt();
  Serial.println(msg7);
  while(Serial.available() == 0){
    
  }
  segundos = Serial.parseInt();
  int comienzo = millis();
  Serial.println(msg8);
  Serial.println(hora);
  Serial.println(minutos);
  Serial.println(segundos);
  delay(1500);
  Serial.println(msg9);
  delay(1500);
  Serial.println(msg10);
  while(Serial.available() == 0){
    
  }
  hdes = Serial.parseInt();
  Serial.println(msg11);
  while(Serial.available() == 0){
    
  }
  mdes = Serial.parseInt();
  Serial.println(msg12);
  while(Serial.available() == 0){
    
  }
  sdes = Serial.parseInt();
  Serial.println(msg8);
  Serial.println(hdes);
  Serial.println(mdes);
  Serial.println(sdes);
  while(((millis())-comienzo) < (((hdes-hora)*3600000)+((mdes-minutos)*60000)+((sdes-segundos)*1000))){
    
  }
  while(((millis())-comienzo) >= (((hdes-hora)*3600000)+((mdes-minutos)*60000)+((sdes-segundos)*1000))){
  unsigned long currentMillis = millis();

  if (currentMillis - tanterior >= intervalo) 
  {
    tanterior = currentMillis;         // save the last state
    analogWrite(PWM1, BRILLO);        // Set the BRILLO
    analogWrite(PWM2, BRILLO);
    analogWrite(PWM3, BRILLO);
    analogWrite(PWM4, BRILLO);
    analogWrite(PWM5, BRILLO);
    analogWrite(PWM6, BRILLO);
    BRILLO = BRILLO + fadeAmount;   // change the BRILLO for next time through the loop
    while(BRILLO == 255){
      digitalWrite(PWM1, HIGH);
      digitalWrite(PWM2, HIGH);
      digitalWrite(PWM3, HIGH);
      digitalWrite(PWM4, HIGH);
      digitalWrite(PWM5, HIGH);
      digitalWrite(PWM6, HIGH);
        for(a = 1; a <= 13; a++){
        digitalWrite(a, HIGH);
        }
    }
  }
  }
}

Lo sé, es una basura ineficiente y se podría haber hecho en 400 líneas menos, pero no soy programador y soy novato todavía. Simplemente quiero poner un mensaje que diga que si se quiere apagar el sistema, se escriba 0. El problema es que con mi fantástico while(BRILLO == 255) creo que no puedo hacerlo. Si a alguien se le ocurre algo (no hace falta que me lo ponga currado en código, con que me diga cómo lo debo hacer va de sobra). A ver si consigo terminarlo, me falta eso y se acabó

Por favor ,lee las normas del foro,sobre todo en lo referente a la eleccion de un titulo adecuado para el post y haz las modificaciones oportunas.

jose:
Por favor ,lee las normas del foro,sobre todo en lo referente a la eleccion de un titulo adecuado para el post y haz las modificaciones oportunas.

Lo sé José, pero tampoco sabía enunciar el problema. Si ves el resto de mis títulos, dicen expresamente el problema. Pero es que no se me ocurre cómo decir este la verdad... Intentaré acercarme lo máximo posible en problemas como este.

Acabo de cambiarlo, dime si así se entiende mejor. Sé que me expreso como el orto xd

Hola!
Bueno primero que nada, viendo el titulo déjame decirte que no es obligatorio estar en el while, incluso tu problema es el uso indiscriminado del while, (eso sin contar los delay). While es un bucle bloqueante, y si no lo usas con cautela te ocasionará mas problemas que beneficios
Veo está parte en la que usaste millis() para evitar el uso de delay():

while(((millis())-comienzo) < (((hdes-hora)*3600000)+((mdes-minutos)*60000)+((sdes-segundos)*1000))){
   
  }

Bueno, pues lamento decirte que eso básicamente es lo que esta dentro de la función delay(), lo que significa que lo que esta arriba es lo mismo que esto: delay(hdes-hora)*3600000)+((mdes-minutos)*60000)+((sdes-segundos)*1000);

Bueno y ahora vamos a tu consulta:

Simplemente quiero poner un mensaje que diga que si se quiere apagar el sistema, se escriba 0. El problema es que con mi fantástico while(BRILLO == 255) creo que no puedo hacerlo

Bueno se me ocurren 2 formas de hacerlo, quiza alguna te sirva aunque debo aclarar que ese while() no me gusta(ni todos los anteriores) te dejo a continuación lo que puedes hacer:
Necesitas agregar dentro del while la lectura del puerto serial algo así:

while(BRILLO == 255){
   if(Serial.available())        //Esta
       if(Serial.parseint()==0){    // Esta
               break; }           //y esta

digitalWrite(PWM1, HIGH);
      digitalWrite(PWM2, HIGH);
      digitalWrite(PWM3, HIGH);
      digitalWrite(PWM4, HIGH);
      digitalWrite(PWM5, HIGH);
      digitalWrite(PWM6, HIGH);
        for(a = 1; a <= 13; a++){
        digitalWrite(a, HIGH);
        }

Con ese break; saldra del while() y continuara la ejecución del código, pero el valor de BRILLO seguirá siendo 255, ahora la otra manera, es que en lugar del break pongas a 0 la variable brillo

f(Serial.available())       
             if(Serial.parseint()==0)
                  BRILLO=0;

o, puedes combinar las 2 cosas:

 if(Serial.available())       
       if(Serial.parseint()==0){
              BRILLO=0 
              break; }

Por ultimo, repito: No es obligatorio estar en el while(), con una maquina de estados podrías eliminar todos los que tienes y tu código fluiría sin bloqueos

P.D. ¿Que funcion cumple esto:?

for(a = 1; a <= 13; a++){
        digitalWrite(a, HIGH);

Te hago caso en todo, muchísimas gracias por la ayuda. La verdad es que el tema de las máquinas de estado me cuesta, el usar variables, asignarlas a un valor cuando ocurra x y usar mucho if... Pero intentaré llegar a eso.
Y respecto a lo de la función, te explico. La iluminación progresiva que he sacado de Google (porque tenía que ser sin delay) aunque le haya quitado lo de iluminarse a menos, reinicia. Entonces con esa instrucción lo que hago es que cuando llegan los LEDs PWM a 255 de brillo, ilumino todos de golpe, y se quedan así. Así no vuelve a reiniciar y a iluminarse gradualmente de nuevo (y de forma repetitiva, cíclica).
Lo que se me ocurrió al final por la noche, era cambiar lo de dentro de ese while pero diciéndolo de otra manera. En vez de while(BRILLO == 255), puse while(tiempo que tarda en ponerse el LED a 255), y con eso pude poner que se apagaran los leds, pero tarda un rato. Ya digo, el código más ineficiente del universo :smiley: .
Te dejo el código que terminé anoche, pero todavía no he puesto tus mejoras.

//Pines con PWM: 3,5,6,9,10,11
int i;
int a;
int apagado;
int e;
const int PWM1 = 3;
const int PWM2 = 5;
const int PWM3 = 6;
const int PWM4 = 9;
const int PWM5 = 10;
const int PWM6 = 11;
unsigned long tanterior = 0;       
const long intervalo = 500;               
int BRILLO = 0;                   
int fadeAmount = 1;
int hora;
int minutos;
int segundos;
int hdes;
int mdes;
int sdes;
String msg1 = "El sistema de iluminación necesita 2 horas.";
String msg2 = "Una, que será la actual.";
String msg3 = "Y otra, que será la deseada para que se ilumine el acuario.";
String msg4 = "Empecemos con la actual.";
String msg5 = "Introduzca la hora (solo 2 cifras).";
String msg6 = "Ahora escriba los minutos.";
String msg7 = "Por último, escriba los segundos.";
String msg8 = "Hora exacta elegida:";
String msg9 = "Vamos con la hora deseada.";
String msg10 = "¿Hora?";
String msg11 = "¿Minuto?";
String msg12 = "¿Segundo?";
String msg13 = "Si quiere apagar el sistema de iluminación, escriba '0'.";
String msg14 = "El sistema está apagándose. Espere un momento.";
String msg15 = "Si desea activar la iluminación de nuevo, pulse el botón RESET de su placa Arduino UNO.";

void setup(){
  tanterior = millis();
  for(i = 1; i<= 13; i++){
    pinMode(i, OUTPUT);
  }
  Serial.begin(9600);
}
void loop(){
  Serial.println(msg1);
  delay(1500);
  Serial.println(msg2);
  delay(1500);
  Serial.println(msg3);
  delay(1500);
  Serial.println(msg4);
  delay(1500);
  Serial.println(msg5);
  while(Serial.available() == 0){
    
  }
  hora = Serial.parseInt();
  Serial.println(msg6);
  while(Serial.available() == 0){
    
  }
  minutos = Serial.parseInt();
  Serial.println(msg7);
  while(Serial.available() == 0){
    
  }
  segundos = Serial.parseInt();
  int comienzo = millis();
  Serial.println(msg8);
  Serial.println(hora);
  Serial.println(minutos);
  Serial.println(segundos);
  delay(1500);
  Serial.println(msg9);
  delay(1500);
  Serial.println(msg10);
  while(Serial.available() == 0){
    
  }
  hdes = Serial.parseInt();
  Serial.println(msg11);
  while(Serial.available() == 0){
    
  }
  mdes = Serial.parseInt();
  Serial.println(msg12);
  while(Serial.available() == 0){
    
  }
  sdes = Serial.parseInt();
  Serial.println(msg8);
  Serial.println(hdes);
  Serial.println(mdes);
  Serial.println(sdes);
  while(((millis())-comienzo) < (((hdes-hora)*3600000)+((mdes-minutos)*60000)+((sdes-segundos)*1000))){
    
  }
  while(((millis())-comienzo) >= (((hdes-hora)*3600000)+((mdes-minutos)*60000)+((sdes-segundos)*1000))){
  unsigned long currentMillis = millis();

  if (currentMillis - tanterior >= intervalo) 
  {
    tanterior = currentMillis;         // save the last state
    analogWrite(PWM1, BRILLO);        // Set the BRILLO
    analogWrite(PWM2, BRILLO);
    analogWrite(PWM3, BRILLO);
    analogWrite(PWM4, BRILLO);
    analogWrite(PWM5, BRILLO);
    analogWrite(PWM6, BRILLO);
    BRILLO = BRILLO + fadeAmount;   // change the BRILLO for next time through the loop
    while(millis() > 254 * intervalo){    //o while(BRILLO == 255){, pero como queremos apagar luego LEDs dentro de este while, no podríamos con la 2ª forma
      digitalWrite(PWM1, HIGH);
      digitalWrite(PWM2, HIGH);
      digitalWrite(PWM3, HIGH);
      digitalWrite(PWM4, HIGH);
      digitalWrite(PWM5, HIGH);
      digitalWrite(PWM6, HIGH);
      digitalWrite(1, HIGH);
      digitalWrite(2, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(7, HIGH);
      digitalWrite(8, HIGH);
      digitalWrite(12, HIGH);
      digitalWrite(13, HIGH);
      Serial.println(msg13);
      while(Serial.available() == 0){
        
      }
      apagado = Serial.parseInt();
      while(apagado == 0){
        Serial.println(msg14);
        Serial.println(msg15);
        for(e = 1; e <= 13; e++){
          digitalWrite(e, LOW);
          delay(864*10^5);
        }
      }
        }
    }
  }
}

Actualización de un delay estúpido, ahora meto todo lo tuyo y lo envío. Muchas gracias de verdad

//Pines con PWM: 3,5,6,9,10,11
int i;
int a;
int apagado;
int e;
const int PWM1 = 3;
const int PWM2 = 5;
const int PWM3 = 6;
const int PWM4 = 9;
const int PWM5 = 10;
const int PWM6 = 11;
unsigned long tanterior = 0;       
const long intervalo = 500;               
int BRILLO = 0;                   
int fadeAmount = 1;
int hora;
int minutos;
int segundos;
int hdes;
int mdes;
int sdes;
String msg1 = "El sistema de iluminación necesita 2 horas.";
String msg2 = "Una, que será la actual.";
String msg3 = "Y otra, que será la deseada para que se ilumine el acuario.";
String msg4 = "Empecemos con la actual.";
String msg5 = "Introduzca la hora (solo 2 cifras).";
String msg6 = "Ahora escriba los minutos.";
String msg7 = "Por último, escriba los segundos.";
String msg8 = "Hora exacta elegida:";
String msg9 = "Vamos con la hora deseada.";
String msg10 = "¿Hora?";
String msg11 = "¿Minuto?";
String msg12 = "¿Segundo?";
String msg13 = "Si quiere apagar el sistema de iluminación, escriba '0'.";
String msg14 = "El sistema está apagándose. Espere un momento.";
String msg15 = "Si desea activar la iluminación de nuevo, pulse el botón RESET de su placa Arduino UNO.";

void setup(){
  tanterior = millis();
  for(i = 1; i<= 13; i++){
    pinMode(i, OUTPUT);
  }
  Serial.begin(9600);
}
void loop(){
  Serial.println(msg1);
  delay(1500);
  Serial.println(msg2);
  delay(1500);
  Serial.println(msg3);
  delay(1500);
  Serial.println(msg4);
  delay(1500);
  Serial.println(msg5);
  while(Serial.available() == 0){
    
  }
  hora = Serial.parseInt();
  Serial.println(msg6);
  while(Serial.available() == 0){
    
  }
  minutos = Serial.parseInt();
  Serial.println(msg7);
  while(Serial.available() == 0){
    
  }
  segundos = Serial.parseInt();
  int comienzo = millis();
  Serial.println(msg8);
  Serial.println(hora);
  Serial.println(minutos);
  Serial.println(segundos);
  delay(1500);
  Serial.println(msg9);
  delay(1500);
  Serial.println(msg10);
  while(Serial.available() == 0){
    
  }
  hdes = Serial.parseInt();
  Serial.println(msg11);
  while(Serial.available() == 0){
    
  }
  mdes = Serial.parseInt();
  Serial.println(msg12);
  while(Serial.available() == 0){
    
  }
  sdes = Serial.parseInt();
  Serial.println(msg8);
  Serial.println(hdes);
  Serial.println(mdes);
  Serial.println(sdes);
  while(((millis())-comienzo) < (((hdes-hora)*3600000)+((mdes-minutos)*60000)+((sdes-segundos)*1000))){
    
  }
  while(((millis())-comienzo) >= (((hdes-hora)*3600000)+((mdes-minutos)*60000)+((sdes-segundos)*1000))){
  unsigned long currentMillis = millis();

  if (currentMillis - tanterior >= intervalo) 
  {
    tanterior = currentMillis;         // save the last state
    analogWrite(PWM1, BRILLO);        // Set the BRILLO
    analogWrite(PWM2, BRILLO);
    analogWrite(PWM3, BRILLO);
    analogWrite(PWM4, BRILLO);
    analogWrite(PWM5, BRILLO);
    analogWrite(PWM6, BRILLO);
    BRILLO = BRILLO + fadeAmount;   // change the BRILLO for next time through the loop
    while(millis() > 254 * intervalo){    //o while(BRILLO == 255){, pero como queremos apagar luego LEDs dentro de este while, no podríamos con la 2ª forma
      digitalWrite(PWM1, HIGH);
      digitalWrite(PWM2, HIGH);
      digitalWrite(PWM3, HIGH);
      digitalWrite(PWM4, HIGH);
      digitalWrite(PWM5, HIGH);
      digitalWrite(PWM6, HIGH);
      digitalWrite(1, HIGH);
      digitalWrite(2, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(7, HIGH);
      digitalWrite(8, HIGH);
      digitalWrite(12, HIGH);
      digitalWrite(13, HIGH);
      Serial.println(msg13);
      while(Serial.available() == 0){
        
      }
      apagado = Serial.parseInt();
      if(apagado == 0){
        Serial.println(msg14);
        Serial.println(msg15);
      }
      while(apagado == 0){
        for(e = 1; e <= 13; e++){
          digitalWrite(e, LOW);
        }
      }
        }
    }
  }
}