Recientemente comencé a jugar con el control de leds RGB con Arduino para un proyecto que estoy construyendo, así que construí el siguiente esquema:
Esencialmente, lo que hace el código en Arduino es que tengo una matriz 3D de la siguiente manera:
int paterns [][4][4] = {{{255,0,255,255},{255,0,51,255},{255,255,51,255},{255,255,0,51}}};
donde la primera dimensión contiene arrays que contienen 4 sub-arrays. La matriz de la segunda capa contiene 4 valores int, el primero es la intensidad (brillo) del led, y los otros tres son Rojo, Verde, Azul respectivamente. De esta manera, cuando quiero colorear los 4 LEDs, accedo a la matriz principal y obtengo de ella la matriz 2D, que contiene valores de brillo, rojo, verde y azul para cada uno de los 4 leds.
Luego, estos valores se escriben usando la función analogWrite
para cada pin respectivamente. El brillo es esencialmente controlar el transistor como una resistencia variable.
Ahora, el problema es que después de crear el nuevo circuito (los LED se conectan con cables de cobre de núcleo sólido separados entre sí a 9 cm como se ve en el diagrama), los LED parecen parpadear mucho en ciertos colores. Por ejemplo, cuando se extrae lo siguiente de la matriz:
{{255,255,255,0},{255,153,153,0},{255,51,51,255},{255,0,255,0}}
los LED de color amarillo parpadean mucho, mientras que el azul y el verde son perfectamente estables, y por lo que puedo decir, el diodo rojo es el que causa el notable parpadeo. Dicho esto, desconecté el canal rojo y, aunque los colores están alterados, solo parpadearon muy poco. De hecho, era tan poco que se debe prestar mucha atención al diodo para notarlo.
Aquí está el código completo:
int oneGround = 11, twoGround = 13, threeGround = 12,fourGround = 10;
int red = 9, green = 8, blue = 7;
int dela = 100;
int paterns [][4][4] =
{{{255,255,102,102},{255,153,51,0},{255,255,255,0},{255,204,255,0}},
{{255,0,255,51},{255,0,255,204},{255,51,255,255},{255,0,204,204}},
{{255,255,255,255},{255,255,0,0},{255,204,0,204},{255,153,0,153}},
{{255,102,0,102},{255,102,102,0},{255,0,153,102},{255,0,255,51}},
{{255,0,153,51},{255,10,231,84},{255,10,231,84},{255,66,120,84}},
{{255,66,120,84},{255,66,41,255},{255,255,143,17},{255,30,186,237}},
{{255,153,0,204},{255,0,0,255},{255,204,51,0},{255,0,102,102}},
{{255,153,255,51},{255,153,153,0},{255,153,153,0},{255,153,153,0}},
{{255,153,153,0},{255,0,204,204},{255,0,204,204},{255,0,204,204}}};
void setup() {
pinMode(blue, OUTPUT);
pinMode(green, OUTPUT);
pinMode(red, OUTPUT);
pinMode(oneGround, OUTPUT);
pinMode(twoGround, OUTPUT);
pinMode(threeGround, OUTPUT);
pinMode(fourGround, OUTPUT);
}
int c = 0, d1 = 0;
void loop() {
lightUpValues(oneGround, paterns[d1][0][0], paterns[d1][0][1], paterns[d1][0][2], paterns[d1][0][3]);
lightUpValues(twoGround, paterns[d1][1][0], paterns[d1][1][1], paterns[d1][1][2], paterns[d1][1][3]);
lightUpValues(threeGround, paterns[d1][2][0], paterns[d1][2][1], paterns[d1][2][2], paterns[d1][2][3]);
lightUpValues(fourGround, paterns[d1][3][0], paterns[d1][3][1], paterns[d1][3][2], paterns[d1][3][3]);
if (c == 2000) {
d1++;
c = 0;
} else c++;
if (d1 == 5) {
d1 = 0;
}
}
void lightUpValues(int groundPin,int brightness, int r , int g, int b) {
analogWrite(groundPin, brightness);
analogWrite(red, r);
analogWrite(green, g);
analogWrite(blue, b);
delayMicroseconds(dela);
digitalWrite(groundPin, LOW);
}
Entonces, ¿cómo puedo detener el parpadeo de los LED?
Notas :
-
Todavía no he aprendido C, todo lo que sé proviene de Java. ¡Lo siento si mi código te hace daño a tus ojos!
-
También soy un novato en electrónica, solo conozco algunos conceptos básicos y eso es todo, ¡realmente quiero aprender más! :)
-
La matriz de color codificada está creada por un programa que hice, no se escribe bit a bit ...
¡Gracias por tu tiempo !