Para este articulo se utiliza una matrix led de 5×7 columnas, 5 resistencias de 470 ohmios (para limitar la corriente en las 5 columnas, cátodo en cada fila) y un Arduino UNO.
La matriz led tiene físicamente 14 pins (7 en cada lado), pero debemos saber leer qué pines representan las columnas y filas. Los pines tiene una numeración y a continuación se muestra la correspondiente distribución:
Para controlar la matriz se debe encender primero una fila y se va prendiendo cada bit de la columna. Si quiero mostrar una imagen en la matriz debo hacer esto de forma muy rápida. Lo primero que se debe hacer en el programa de arduino es configurar los pines de cada fila y columna, para esto utilizamos un arreglo, tal como se muestra abajo
/ Pines de las columnas (C0 a C4)
const int rowPins[7] = { 7, 8, 9, 10, 11, 12, 13};
// Pines de las filas (R0 a R6)
const int colPins[5] = { 2, 3, 4, 5, 6};
El pin 7 controla la fila 1, el pin 8 controla la fila 8 y así sucesivamente. Lo mismo ocurre con las columnas, el pin 2 controla la columna 1, el pin 3 la columna 2, etc.
Para configurar los pines como salidas digitales, se utiliza una instrucción "for" para indicar en cada numero de los arreglos rowPins y colPins que tipo de señal deben tener, como se muestra abajo:
for (int i = 0; i < 7; i++) { // Inicializa los pines como salidas:
pinMode(colPins[i], OUTPUT);
pinMode(rowPins[i], OUTPUT);
A continuación se muestra el código completo que se usa para controlar la matriz led.
// Pines de las columnas (C0 a C4)
const int rowPins[7] = { 7, 8, 9, 10, 11, 12, 13};
// Pines de las filas (R0 a R6)
const int colPins[5] = { 2, 3, 4, 5, 6};
// Animación de la flecha (12 pasos)
const byte Flechas[13][7] = {
{0x00,0x04,0x0E,0x15,0x04,0x04,0x04},
{0x04,0x0E,0x15,0x04,0x04,0x04,0x00},
{0x0E,0x15,0x04,0x04,0x04,0x00,0x00},
{0x15,0x04,0x04,0x04,0x00,0x00,0x00},
{0x04,0x04,0x04,0x00,0x00,0x00,0x00},
{0x04,0x04,0x00,0x00,0x00,0x00,0x00},
{0x04,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x04},
{0x00,0x00,0x00,0x00,0x00,0x04,0x0E},
{0x00,0x00,0x00,0x00,0x04,0x0E,0x15},
{0x00,0x00,0x00,0x04,0x0E,0x15,0x04},
{0x00,0x00,0x04,0x0E,0x15,0x04,0x04},
};
void setup() {
// inicializa los pines como salidas iterando sobre los pines:
for (int i = 0; i < 7; i++) {
// Inicializa los pines como salidas:
pinMode(colPins[i], OUTPUT);
pinMode(rowPins[i], OUTPUT);
//Lleve los pines colPins (los cátodos) a un nivel alto para garantizar que los LED estén apagados:
digitalWrite(colPins[i], HIGH);
}
}
void loop()
{
for (int i = 0; i < 13; i++) // Mostrar la animación completa
{
mostrarFigura(Flechas[i]);
}
}
void mostrarFigura(const byte figura[]) // Función para mostrar una imagen en la matriz LED
{
for (int t = 0; t < 50; t++) // Repetir varias veces para persistencia
{
for (int row = 0; row < 7; row++)
{
for (int i = 0; i < 7; i++) // Apagar todas las filas antes de encender una
{
digitalWrite(rowPins[i], LOW);
}
digitalWrite(rowPins[row], HIGH); // Activar la fila actual
for (int col = 0; col < 5; col++) // Encender las columnas según el patrón
{
if (figura[row] & (1 << col)) //verifica si el bit especifico de la columna "col" esta en "1"
{
digitalWrite(colPins[col], LOW);
}
else
{
digitalWrite(colPins[col], HIGH);
}
}
delayMicroseconds(2000); // Pequeño retardo para multiplexado
digitalWrite(rowPins[row], LOW); //Apaga el pin de la fila
}
}
}
En el siguiente vídeo puede ver la prueba del código con la matriz led
Aprenda a Programar con el curso de Arduino