Professional Documents
Culture Documents
Ahora usted tiene una manera fcil de configurar los LED necesarios , ahora usando el cdigo
que tenemos de tutorial anterior vamos a hacer una animacin simple
Que necesitars
Arduino UNO (u otro tablero)
16 x LED (diodo emisor de luz)
Resistencia de 4 x 220 Ohm
Como funciona
Esta es la animacin que vamos a hacer (lo hice muy sencillo y solo con 2 marcos para que
sea ms fcil):
Figura 11 - Matriz Arduino 4x4 LED - Animacin
Para lograrlo, en la funcin loop () vamos a:
1) Borrar matriz - ajuste todos los pines a 0 (todos los LEDs apagados en el array) usando la
funcin clearArray ()
2) Ajuste los LED necesarios para animar el primer fotograma a ON (1) en el array 2D
) LED reales de la matriz - funcin drawMatrix ())
4) Repita el paso 3) por muchas veces, digamos 1000 como drawMatrix () slo encender los
LEDs por una pequea fraccin de tiempo, pero necesitamos que estn encendidos por ms
tiempo hora
5) Borrar matriz - ajuste todos los pines a 0 (todos los LEDs apagados en la matriz) utilizando
la funcin clearArray ()
6) Ajuste los LED necesarios para la animacin 2 fotograma a ON (1) en la matriz 2D
7) Dibuje la matriz Real de la matriz - drawMatrix () funcin)
8) Repita el paso 7) para muchas veces, digamos 1000 como drawMatrix () slo se encienden
los LEDs para una pequea fraccin de tiempo, pero necesitamos para que se encienda
durante ms tiempo hora
Programacin
Paso 1
Copie todo el cdigo del tutorial anterior y luego copie el contenido de la funcin loop () a una
funcin completamente nueva sobre el setup ():
Void drawMatrix ()
{
Para (i = 0; i <4; i ++) // cuenta i de 0 a 3
{
// 1)
ClearAllPins (); // hacer que todos los pins no hagan nada (apague todos los LED)
// 2), 3)
If (matriz [0] [i] == 1) // compruebe si la columna 'i' - la primera fila est
encendida
SetPinTo5V (nodos [0]) // suministra 5V a la 1 fila
If (matriz [1] [i] == 1) // compruebe si la columna 'i' - LED de la segunda fila est
encendida
SetPinTo5V (nodos [1]) // suministra 5V a la 2 fila
Si (matriz [2] [i] == 1)
SetPinTo5V (nodos [2]);
Si (matriz [3] [i] == 1)
SetPinTo5V (nodos [3]);
SetPinToGND (ctodos [i]) // fije el pilar de la columna 'i' en GND, de modo que
los LEDs necesarios estn completamente conectados y encendidos
// 4)
Retardo (1) // mantener los LED encendidos durante 1 ms
}
}
Ahora tienes una funcin clean loop (), donde escribiremos el cdigo de la animacin.
Paso 2
Limpie la matriz 'matriz' 2D (rellnela con 0's), no es realmente importante en este momento,
pero se ve mejor limpio.
Paso 3
Dado que ahora estamos utilizando una matriz 2D para almacenar informacin que puede
cambiar (que los LEDs estn encendidos y apagados), tambin sera til tener una funcin
que puede limpiar la matriz (poner todo a 0) en caso de que necesitamos escribir diferentes
valores en eso:
Etapa 4
En el tipo de funcin loop ():
// 1)
ClearArray ();
// 2)
Matriz [0] [0] = 1;
Matriz [0] [1] = 1;
Matriz [0] [2] = 1;
Matriz [0] [3] = 1;
Matriz [1] [0] = 1;
Matriz [1] [3] = 1;
Matriz [2] [0] = 1;
Matriz [2] [3] = 1;
Matriz [3] [0] = 1;
Matriz [3] [1] = 1;
Matriz [3] [2] = 1;
Matriz [3] [3] = 1;
// 3) y 4)
Para (int i = 0; i <1000; i ++) {
DrawMatrix ();
}
// 5)
ClearArray ()
// 6)
Matriz [1] [1] = 1;
Matriz [1] [2] = 1;
Matriz [2] [1] = 1;
Matriz [2] [2] = 1;
// 7) y 8)
Para (int i = 0; i <1000; i ++) {
DrawMatrix ();
}
Cdigo completo
Como se puede ver en el cdigo del paso 3, cada vez que realice un cambio en la matriz,
primero debe borrar la matriz usando clearArray (), luego hacer cambios en la matriz 2D y luego
llamar a la funcin drawMatrix () para pocos Cientos de veces, de lo contrario slo ver parpadeo
extrao.
Aqu est el cdigo completo:
Matriz de bytes [4] [4] = {
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}
};
Void setPinTo5V (byte pin) // establece un pin asignado a esta funcin a una fuente de tensin de 5V
{
PinMode (pin, OUTPUT);
DigitalWrite (alfiler, ALTO);
}
Void setPinToGND (byte pin) // establece un pin asignado a esta funcin a un GROUND (GND pin)
{
PinMode (pin, OUTPUT);
DigitalWrite (pin, LOW);
}
Void clearAllPins () // hacer que todos los pines floten - por lo que no hacen nada
{
Para (i = 0; i <4; i ++) // el cdigo dentro se ejecuta 4 veces con el valor 'i' aumentado cada
vez
{
PinMode (nodos [i], INPUT);
DigitalWrite (nodos [i], LOW);
PinMode (ctodos [i], INPUT);
DigitalWrite (ctodos [i], BAJO);
}
}
Void drawMatrix ()
{
Para (i = 0; i <4; i ++) // cuenta i de 0 a 3
{
// 1)
ClearAllPins (); // hacer que todos los pins no hagan nada (apague todos los LED)
// 2), 3)
If (matriz [0] [i] == 1) // compruebe si la columna 'i' - la primera fila est
encendida
SetPinTo5V (nodos [0]) // suministra 5V a la 1 fila
If (matriz [1] [i] == 1) // compruebe si la columna 'i' - LED de la segunda fila est
encendida
SetPinTo5V (nodos [1]) // suministra 5V a la 2 fila
Si (matriz [2] [i] == 1)
SetPinTo5V (nodos [2]);
Si (matriz [3] [i] == 1)
SetPinTo5V (nodos [3]);
SetPinToGND (ctodos [i]) // fije el pilar de la columna 'i' en GND, de modo que
los LEDs necesarios estn completamente conectados y encendidos
// 4)
Retardo (1) // mantener los LED encendidos durante 1 ms
}
}
Void clearArray () // establece cada valor en matriz 2D 'matriz' en 0
{
Para (i = 0; i <4; i ++) // el cdigo dentro se ejecuta 4 veces con el valor 'i' aumentado cada
vez
{
Matriz [i] [0] = 0;
Matriz [i] [1] = 0;
Matriz [i] [2] = 0;
Matriz [i] [3] = 0;
}
}
Void setup ()
{
}
Void loop ()
{
// 1)
ClearArray ();
// 2)
Matriz [0] [0] = 1;
Matriz [0] [1] = 1;
Matriz [0] [2] = 1;
Matriz [0] [3] = 1;
Matriz [1] [0] = 1;
Matriz [1] [3] = 1;
Matriz [2] [0] = 1;
Matriz [2] [3] = 1;
Matriz [3] [0] = 1;
Matriz [3] [1] = 1;
Matriz [3] [2] = 1;
Matriz [3] [3] = 1;
// 3) y 4)
Para (int j = 0; j <1000; j ++) {
DrawMatrix ();
}
// 5)
ClearArray ()
// 6)
Matriz [1] [1] = 1;
Matriz [1] [2] = 1;
Matriz [2] [1] = 1;
Matriz [2] [2] = 1;
// 7) y 8)
Para (int j = 0; j <1000; j ++) {
DrawMatrix ();
}
}