HOla!!
Espero que alguien me pueda ayudar, porque llevo tiempo sin encontrar la solución y he quemado ya varias placas Nano clonicas. En cambio cuando uso una placa UNO R3 para este mismo proyecto funciona perfectamente. Pero necesito usar esta aplicación con placa Nano.
Este proyecto consiste en tener un led RGB ánodo común (positivo en común) haciendo un efecto fading conectado a los pines PWM 11(rojo), 10(verde) y 9(azul).
Por otro lado 8 leds en paralelo conectados al pin PWM 5 y otros 4 leds en paralelo conectados al pin PWM 3 haciendo cada grupo un efecto de fading.
Lo tengo conectado así:
Y el código es el siguiente:
#define BLUE 9
#define GREEN 10
#define RED 11
#define LEDS_INT 5
#define LEDS_EXT 3
#define interval 10
int potencia_e = 0;
int potencia_i = 0;
int potencia_r = 0;
int potencia_g = 0;
int potencia_b = 0;
long previousMillis = 0;
long cont_interval_e = 0;
long cont_interval_i = 0;
long cont_interval_c = 0;
int tarea = 0;
unsigned long startMillis = millis();
void setup() {
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
pinMode(RED, OUTPUT);
pinMode(LEDS_INT, OUTPUT);
pinMode(LEDS_EXT, OUTPUT);
analogWrite( RED, 255 - potencia_r );
analogWrite( GREEN, 255 - potencia_g );
analogWrite( BLUE, 255 - potencia_b );
analogWrite(LEDS_EXT, potencia_e);
analogWrite(LEDS_INT, potencia_i);
Serial.begin(9600);
Serial.println("reset");
}
void loop() {
unsigned long currentMillis = millis(); // Se toma el tiempo actual
if (currentMillis - previousMillis > interval){
previousMillis = currentMillis;
if(tarea == 0){ // tarea centro
cont_interval_c++;
analogWrite( RED, 255 - potencia_r );
analogWrite( GREEN, 255 - potencia_g );
analogWrite( BLUE, 255 - potencia_b );
if(cont_interval_c > 20 && cont_interval_c < 275 && potencia_r < 255 && potencia_g < 255 && potencia_b < 255){ //suben todos
potencia_r++;
potencia_g++;
potencia_b++;
}
if(cont_interval_c > 276 && cont_interval_c < 531 && potencia_r > 0){ //baja R
potencia_r = potencia_r - 2;
}
if(cont_interval_c > 531 && cont_interval_c < 786 &&potencia_r < 253){ //sube R
potencia_r = potencia_r + 2;
}
if(cont_interval_c > 786 && cont_interval_c < 1041 && potencia_b > 0){ //baja B
potencia_b = potencia_b - 2;
}
if(cont_interval_c > 1041 && cont_interval_c < 1296 &&potencia_b < 253){ //sube B
potencia_b = potencia_b + 2;
}
if(cont_interval_c > 1200 && cont_interval_c < 1455 && potencia_g > 0){ //baja G
potencia_g = potencia_g - 2;
}
if(cont_interval_c > 1455 && cont_interval_c < 1710 && potencia_g < 253){ //sube G
potencia_g = potencia_g + 2;
}
if(cont_interval_c == 1712){
potencia_r = 255;
potencia_g = 255;
potencia_b = 255;
Serial.println("--------- ++++++++ 1712 +++++++ ---------");
}
if(cont_interval_c > 1712 && cont_interval_c < 1969 && potencia_r > 0 && potencia_g > 0 && potencia_b > 0){ //baja todos
potencia_r--;
potencia_g--;
potencia_b--;
}
if(cont_interval_c == 1970){
potencia_r = 0;
potencia_g = 0;
potencia_b = 0;
}
Serial.print("r:"); Serial.print(potencia_r); Serial.print(" g:"); Serial.print(potencia_g); Serial.print(" b:"); Serial.print(potencia_b);
Serial.println();
Serial.print("in:"); Serial.print(potencia_i); Serial.print(" ex:"); Serial.print(potencia_e);
Serial.println();
Serial.println(cont_interval_c);
}
if(tarea == 1){ // tarea interior
cont_interval_i++;
analogWrite(LEDS_INT, potencia_i);
if(cont_interval_i > 270 && cont_interval_i < 525 && potencia_i < 255){
potencia_i++;
}
if(cont_interval_i > 1750 && cont_interval_i < 2005 && potencia_i > -1){
potencia_i--;
}
}
if(tarea == 2){ // tarea exterior
cont_interval_e++;
analogWrite(LEDS_EXT, potencia_e);
if(cont_interval_e > 350 && cont_interval_e < 605 && potencia_e < 255){
potencia_e++;
}
if(cont_interval_e > 1800 && cont_interval_e < 2055 && potencia_e > -1){
potencia_e--;
}
}
if(tarea != 2)
tarea++;
else
tarea = 0;
}
if (cont_interval_c > 2060){
cont_interval_e = 0;
cont_interval_i = 0;
cont_interval_c = 0;
}
}
Creo que mas que de código debe de ser problema de como lo conecto, pero lo he probado ya varias veces, por partes y lo mismo, se termina estropeando cada placa.
Ayuda por favor!!
Gracias