Configuración Leds Belen

Buenos días, para el Belen de este año próximo, ya he realizado el programa, hay dos dudas. la primera me trae de cabeza.

He realizado toda la secuencia de iluminación, incluso con iluminaciones que se desvanecen y otras van aumentando.
A rasgos generales, el ciclo es el siguiente:

Estos son los leds y el pulsador que lo pone en marcha hasta finalizar la secuencia.

pinMode (5, OUTPUT);//Azul
pinMode (6, OUTPUT);//Rojo
pinMode (10, OUTPUT);//6 leds
pinMode (11, OUTPUT);//4 leds
pinMode (12, OUTPUT);//2 leds
pinMode (pulsador, INPUT_PULLUP);

El programa que luego lo pongo, es: El rojo siempre encendido, pulsamos y el rojo se desvanece. Seguidamente se encienden 6 leds, luego 4 y luego 2. finalmente el azul se enciende poco a poco.
Todo funciona a la perfección.

El reto es conseguir que mientras se desvanece el rojo, ya empiecen a encenderse el ciclo de leds 10.11.12. Cuando acaba el 12, el rojo apagado y empieza a encenderse el Azul, que luego se apaga de golpe.

No consigo que me haga dos cosas a la vez, solo consigo que cuando acabe una cosa empiece otra.

Este es el programa funcionando

byte r;
#define pulsador 2
void setup() {
  // put your setup code here, to run once:
  pinMode (5, OUTPUT);//Azul
  pinMode (6, OUTPUT);//Rojo
  pinMode (10, OUTPUT);//6 leds
  pinMode (11, OUTPUT);//4 leds
  pinMode (12, OUTPUT);//2 leds
  pinMode (pulsador, INPUT_PULLUP);
  digitalWrite (6, 1); //rojo encendido
}
void loop() {
   // put your main code here, to run repeatedly:
  if (digitalRead (pulsador) == 0) { //Lee el pulsador
 r = 255;
    for (int i = 0; i < 255; i++) {
      delay (5);
      analogWrite (6, r); //decrementa el rojo
        delay(10);
      //analogWrite (10, i);
      r--;
    }
    
    digitalWrite (10, 1);
    delay(500);
    digitalWrite (10, 0);
    digitalWrite (11, 1);
    delay(500);
    digitalWrite (11, 0);
    digitalWrite (12, 1);
    delay(500);
    digitalWrite (12, 0);
    {
    r = 255;
    for (int i = 0; i < 255; i++) {
      //delay (35);
      //analogWrite (5, r);
        delay(10);
      analogWrite (5, i);
      r--;
    }
        delay(1000);
       digitalWrite (5, 0); 
    digitalWrite (6, 0);
    delay(50);
    digitalWrite (6, 1);
    }
  }
}

Hola otra vez, en otra fase del belen, he puesto un motorcillo de limpiaprabrisas de coche con dos salidas

Si el mortor esta bien polarizado, me saca agua por una boquilla, si está polarizado al reves, me saca agua por otra boquilla ( me ahorro poner dos motores). un pulsador hace un ciclo y el otro pulsador hace otro ciclo.
Actualmente el ciclo 1, es: Está encendida una luz roja, pulsamos y empieza a salir agua mientras se mantiene encendido un led azul y se apaga la roja. todo durante un tiempo. Esto esta programado y funcionando.

El lio está en colocar otro pulsador para que solo salga agua con la polaridad invertida. ( y desactive el pulsador anterior)

byte r;
#define pulsador 10
void setup() {
  // put your setup code here, to run once:
  pinMode (13, OUTPUT);//led rojo
  pinMode (12, OUTPUT); //motor bien polarizado
  pinMode (11, OUTPUT);//led azul
  pinMode (pulsador, INPUT_PULLUP);
  digitalWrite (13, 1);
}
void loop() {
  // put your main code here, to run repeatedly:
  if (digitalRead (pulsador) == 0) {
    delay(20);
    r = 255;
    for (int i = 0; i < 255; i++) {
      delay (15);
      analogWrite (11, i);
      analogWrite (13, r);
      r--;
    }
    digitalWrite (13, 0);
    digitalWrite (11, 1);
    digitalWrite (12, 1);
    delay(6000);
    digitalWrite (11, 0); digitalWrite (12, 0);
    digitalWrite (13, 1);
  }
}

Necesitas trabajar con millis en lugar de con delay. Millis es un cronómetro que marca los milisegundos transcurridos desde que se inició/reseteó el arduino. Hay muchos post escritos sobre ello. A grandes rasgos:

  • Tomo el momento de inicio al empezar la secuencia (guardo el valor de millis()).
  • Inicio del bucle.
  • Tomo millis y resto el momento de inicio, con lo que sé cuántos milisegundos han pasado.
  • Calculo y escribo el valor del led a correspondiente a los milisegundos transcurridos.
  • Calculo y escribo el valor del led b correspondiente a los milisegundos transcurridos.
  • Calculo y escribo el valor del led c correspondiente a los milisegundos transcurridos.- Fin del bucle. Salir si han finalizado los ciclos.

Para ambas tareas debes olvidar el uso de delay y seguir el consejo de noter.
Para el tema del motor usar un puente H con un controlador de motor que soporte la corriente del mismo. El puente H permite control de dirección y velocidad.