Desvanecimiento leds...

Hola a todos y un cordial saludo. Esta es mi primera entrada. Vereis he empezado un curso de electrónica y estamos trabajando con arduino. Todavía estoy muy verde. Tenemos un led tricolor, de esos con plaquita integrada que tiene sus mini resistencia y GND. No logro conseguir que se enciendan paulatinamente los tres a la vez y se ponga blanco. Con el código que tengo ahora mismo se enciende paulatinamente primero rojo, luego verde y finalmente azul (led blanco).

¿Cómo se hace para encender los tres a la vez paulatinamente? He probado metiendo todo en un sólo for pero se me enciende el rojo y luego el verde y azul a lo bestia sin fade. Mi código ahora mismo está así:

#define ledRojo 11
#define ledVerde 12
#define ledAzul 13
int brillo;

void setup() {
pinMode(ledAzul, OUTPUT);
}

void loop() {
analogWrite(ledRojo, brillo);
analogWrite(ledVerde, brillo);
analogWrite(ledAzul, brillo);

for(brillo=1; brillo<=255; brillo++){
analogWrite(ledRojo, brillo);
delay(20);
}

for(brillo=1; brillo<=255; brillo++){
analogWrite(ledVerde, brillo);
delay(20);

}
for(brillo=1; brillo<=255; brillo++){
analogWrite(ledAzul, brillo);
delay(20);
}

}

Por cierto, el resto del ejercicio va así por si alguien quiere echarme una mano:

(Encender gradualmente todos los leds hasta llegar al BLANCO), apagamos progresivamente el VERDE y el AZUL hasta que se quede ROJO. Del ROJO vamos encendiendo el AZUL y cuando esté en MAGENTA apagamos el ROJO progresivamente. Ahora se va encendiendo el VERDE y después apagamos AZUL poco a poco para que se quede sólo el VERDE. Encendemos ROJO progresivamente y vamos bajando VERDE . Se va apagando gradualmente y vuelta a empezar.

Hola,

El problema es que tienes tres FOR y vas encendiendo un color por vez hasta que con el tercero logras llegar al blanco.

Debes poner todos los analogWrite (los tres) dentro del mismo bucle (FOR)

Para el resto es igual, tendras que poner otros bucles que hagan cada una de las cosas que quieres (incrementando o reduciendo la variable brillo en los pines correspondientes a los leds que quieras variar) pero todo lo que quieras que pase a la vez debera estar en el mismo bucle.

Suerte.

Es como dice el compañero,tendrias que hacer algo asi:

#define ledRojo  11
#define ledVerde 12
#define ledAzul  13
int brillo; 

void setup()  {
  pinMode(ledRojo, OUTPUT);
  pinMode(ledVerde, OUTPUT);
  pinMode(ledAzul, OUTPUT);
}

void loop()  { 
  for(brillo=0; brillo<=255; brillo++){
    analogWrite(ledRojo, brillo);
    analogWrite(ledVerde, brillo);
    analogWrite(ledAzul, brillo);
    delay(20); // Si la transicion es muy rapida aumenta el delay
   } 
   delay(3000);   // El led estara en blanco 3 segundos y luego volvera a empezar el loop de nuevo
}

Por cierto que arduino estas usando,porque si es el UNO los pines 12 y 13 no son pwm (los
que estan marcados con el simbolo ~ )

Hola. Muchas gracias por las respuestas, me han servido de mucho. Ya he puesto el led en los pines analógicos (error de novato) y he configurado el pin 12 como 0 voltios para que haga de GND. Lo he puesto todo en un mismo FOR y ya me funciona perfectamente. Muchísimas gracias. Os dejo el código terminado:

#define ledRojo 9
#define ledVerde 10
#define ledAzul 11
boolean GND = 12;

int brillo;

void setup() {
pinMode(ledRojo, OUTPUT);
pinMode(ledVerde, OUTPUT);
pinMode(ledAzul, OUTPUT);
pinMode(GND, HIGH);
}

void loop() {

for(brillo=1; brillo<=255; brillo++){ // Se encienden los 3 colores y se pone blanco

analogWrite(ledRojo, brillo);
delay(10);

analogWrite(ledVerde, brillo);
delay(10);

analogWrite(ledAzul, brillo);
delay(10);
}

for(brillo=255; brillo>=0; brillo–){ // Se apagan el VERDE y el AZUL (ROJO)

analogWrite(ledVerde, brillo);
delay(20);

analogWrite(ledAzul, brillo);
delay(20);
}

for(brillo=1; brillo<=255; brillo++){ // Se enciende el AZUL (AZUL Y ROJO → MAGENTA)

analogWrite(ledAzul, brillo);
delay(20);
}

for(brillo=255; brillo>=0; brillo–){ // apagamos ROJO y va encendiedo VERDE, apagando AZUL para q se vea solo VERDE

analogWrite(ledRojo, brillo);
delay(20);
}

for(brillo=1; brillo<=230; brillo++){ // Encendemos Verde y va quedando (AZUL Y VERDE → CYAN)

analogWrite(ledVerde, brillo);
delay(20);
}

for(brillo=255; brillo>=0; brillo–){ // Apago el AZUL (va quedando solo VERDE)

analogWrite(ledAzul, brillo);
delay(20);
}

for(brillo=1; brillo<=255; brillo++){ // Endendemos ROJO (ROJO y VERDE → AMARILLO)

analogWrite(ledRojo, brillo);
delay(20);
}

for(brillo=255; brillo>=0; brillo–){ // Apagamos los dos hasta que quede en OFF y vuelta a empezar

analogWrite(ledVerde, brillo);
delay(8);
analogWrite(ledRojo, brillo);
delay(8);

}

delay(3000);

}

no acabo de entender lo del pin 12 como gnd ,el esquema de conexion deberia ser algo como esto si estas usando un diodo de catodo comun :

Yo si.
Saca ese pin 12 que supuestamente usas como tierra. (el dibujo no dice eso, el dibujo dice que usas GND)

Qué sentido tiene?
Usa GND que para eso esta como dice TU DIBUJO!!!!

Ademas esta mal definido, como vas a definir
boolean GND = 12;

como minimo
byte GND = 12; o int GND = 12; pero no boolean que solo tiene dos valores 0 o 1.

Hola. Es cierto, ya he cambiado lo de boolean, no tenia sentido. En cuanto al esquema de jose es diferente al mío. Mi led viene integrado en una pequeña placa con 3 minusculas resistencias, una para cada led, y de esta placa salen los pines. El profesor quería que lo enganchásemos directamente al Arduino y no a la protoboard por eso lo he hecho así, ya que uno de los pines laterales era el de GND, y así he tenido que usar el pin 12 como 0V (también podría haber usado el pin 8 si lo hubiera puesto al revés)

Gracias a todos por la ayuda.

Ahhhh ya entiendo por comodidad y para poder insertarlo usaste el 12 no?
Pero hubieras dejado ese pin al aire, y usas un cable desde GND y lo unes con una pinza cocodrilo.
Pero bueno ya esta hecho.