programa sencillo se cuelga

Hola, hace ya unos meses que estuve por aquí haciendo unas consultas y debo decir que con muy buenos resultados. Por desgracia tuve que dejar un tiempo de aprender con arduino pero...... he vuelto a la carga!!. Quería preguntar por una cosa que me pasa con mi programa. El programa es muy sencillo: Las 6 salidas pwm con 1 led cada una y se van encendiendo y apagando secuencialmente 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2.......... Pues bien, al cabo de un rato, unos 15 minutos más o menos se queda colgado el programa. Se queda un poco encendido el primer led (pin3) y no hace nada. Edito: no siempre se queda en el mismo led. Hasta ahora había dado la casualidad de que siempre se quedaba encendido el primero, pero ahora mismo se acaba de volver a parar, pero esta vez en el quinto led(pin10). Había pensado en algo sobre los watch dog o algo así pero me parece tan sencillito el programa que no sé si alguna "protección" de esas le puede estar afectando. Os lo pongo por si no os importa echarle un vistazo. Aunque parezca muy largo para lo simple que es, es porque quiero hacer una matriz y además intentar que funcione más de un led a la vez para que aunque no se haya terminado de apagar el primero, que haga su programa el cuarto, por ejemplo. Muchas gracias de antemano.

int salipwm1= 3; int salipwm2 = 5; int salipwm3 = 6; int salipwm4 = 9; int salipwm5 = 10; int salipwm6 = 11; int salipwm ;

int masa1 = 2; int masa2 = 4; int masa3 = 7; int masa4 = 8; int masa5 = 12; int masa6 = 13;

int brightness = 1; // how bright the LED is int fadeAmount = 1; // how many points to fade the LED by int contador = 1;

void setup() { pinMode(salipwm1, OUTPUT); pinMode(salipwm2, OUTPUT); pinMode(salipwm3, OUTPUT); pinMode(salipwm4, OUTPUT); pinMode(salipwm5, OUTPUT); pinMode(salipwm6, OUTPUT);

pinMode(masa1, OUTPUT); pinMode(masa2, OUTPUT); pinMode(masa3, OUTPUT); pinMode(masa4, OUTPUT); pinMode(masa5, OUTPUT); pinMode(masa6, OUTPUT);

}

void loop() { digitalWrite(masa1, LOW); digitalWrite(masa2, LOW); digitalWrite(masa3, LOW); digitalWrite(masa4, LOW); digitalWrite(masa5, LOW); digitalWrite(masa6, LOW);

digitalWrite(salipwm1, LOW);

digitalWrite(salipwm2,LOW);

digitalWrite(salipwm3,LOW);

digitalWrite(salipwm4,LOW);

digitalWrite(salipwm5, LOW);

digitalWrite(salipwm6,LOW);

fade1();

}

void fade1(){

do{

analogWrite(salipwm1, brightness);

// change the brightness for next time through the loop: brightness = brightness + fadeAmount;

// reverse the direction of the fading at the ends of the fade: if (brightness == 1 || brightness == 150) { fadeAmount = -fadeAmount ; } // wait for 5 milliseconds to see the dimming effect delay(5); }while(1 !=brightness);//statement you need

contador = contador -1; if ((contador)!= 0){

fade1(); } else { digitalWrite(salipwm1,LOW); contador = 1 ; fade2(); }

}

void fade2(){

//statement you need do and while do{ // set the brightness of pin: analogWrite(salipwm2, brightness);

// change the brightness for next time through the loop: brightness = brightness + fadeAmount;

// reverse the direction of the fading at the ends of the fade: if (brightness == 1 || brightness == 150) { fadeAmount = -fadeAmount ; } // wait for 30 milliseconds to see the dimming effect delay(5); }while(1 !=brightness);//statement you need

contador = contador -1; if ((contador)!= 0){

fade2(); } else { digitalWrite(salipwm2,LOW); contador = 1 ; fade3(); }

}

void fade3(){

//statement you need do and wihle do{ // set the brightness of pin: analogWrite(salipwm3, brightness);

// change the brightness for next time through the loop: brightness = brightness + fadeAmount;

// reverse the direction of the fading at the ends of the fade: if (brightness == 1 || brightness == 150) { fadeAmount = -fadeAmount ; } // wait for 30 milliseconds to see the dimming effect delay(5); }while(1 !=brightness);//statement you need

contador = contador -1; if ((contador)!= 0){

fade3(); } else { digitalWrite(salipwm3,LOW); contador = 1 ; fade4(); } }

void fade4(){ do{

analogWrite(salipwm4, brightness);

// change the brightness for next time through the loop: brightness = brightness + fadeAmount;

// reverse the direction of the fading at the ends of the fade: if (brightness == 1 || brightness == 150) { fadeAmount = -fadeAmount ; } // wait for 5 milliseconds to see the dimming effect delay(5); }while(1 !=brightness);//statement you need

contador = contador -1; if ((contador)!= 0){

fade4(); } else { digitalWrite(salipwm4,LOW); contador = 1 ; fade5(); } }

void fade5(){

do{

analogWrite(salipwm5, brightness);

// change the brightness for next time through the loop: brightness = brightness + fadeAmount;

// reverse the direction of the fading at the ends of the fade: if (brightness == 1 || brightness == 150) { fadeAmount = -fadeAmount ; } // wait for 5 milliseconds to see the dimming effect delay(5); }while(1 !=brightness);//statement you need

contador = contador -1; if ((contador)!= 0){

fade5(); } else { digitalWrite(salipwm5,LOW); contador = 1 ; fade6(); }

}

void fade6(){

do{

analogWrite(salipwm6, brightness);

// change the brightness for next time through the loop: brightness = brightness + fadeAmount;

// reverse the direction of the fading at the ends of the fade: if (brightness == 1 || brightness == 150) { fadeAmount = -fadeAmount ; } // wait for 5 milliseconds to see the dimming effect delay(5); }while(1 !=brightness);//statement you need

contador = contador -1; if ((contador)!= 0){

fade6(); } else { digitalWrite(salipwm6,LOW); contador = 1 ; }

loop();

}

Nadie ? :disappointed_relieved:

Ni siquiera para ver cómo puedo hacer para que varios led vayan haciendo el desvanecimiento a al vez ?. Bueno, no exactamente a la vez, si no para que mientras que uno se va desvaneciendo otro empiece a hacerlo y otro led distinto empiece a encenderse. Como si fuera un efecto de disparos alternativos cada uno cuando le da la gana, aunque coincida con otro.

Saludos.