// Arduino Display Matricial
// Author: Fresno Gustavo
#include <LedControl.h> // https://github.com/wayoda/LedControl
const int dataPin = 3; // Pin de datos del MAX7219
const int clockPin = 4; // Pin de reloj del MAX7219
const int csPin = 5; // Pin de selección de chip del MAX7219
const int NUM_DEVICES = 6;
LedControl lc = LedControl(dataPin, clockPin, csPin, NUM_DEVICES); // Inicializamos la librería LedControl
const byte flechaD[] = {
0x0,
0x8,
0xC,
0xFE,
0xFF,
0xFE,
0xC,
0x8};
const byte flechaI[] = {
0x0,
0x10,
0x30,
0x7F,
0xFF,
0x7F,
0x30,
0x10};
const byte corriendoI[] = {
0x18,
0x18,
0x28,
0x3E,
0xA,
0x1C,
0x16,
0x32};
const byte corriendoD[] = {
0xC,
0xC,
0x28,
0x3E,
0xA,
0x1C,
0x34,
0x26};
const byte heart[] = {
0x6C,
0xFE,
0xFE,
0x7C,
0x38,
0x10,
0x0,
0x0};
const byte H[] = {
0b01100110,
0b01100110,
0b01100110,
0b01111110,
0b01111110,
0b01100110,
0b01100110,
0b01100110
};
const byte A[] = {
0b00111100,
0b01111110,
0b01100110,
0b01111110,
0b01111110,
0b01100110,
0b01100110,
0b01100110
};
const byte L[] = {
0b01100000,
0b01100000,
0b01100000,
0b01100000,
0b01100000,
0b01100000,
0b01111110,
0b01111110
};
const byte O[] = {
0b00111100,
0b01111110,
0b01100110,
0b01100110,
0b01100110,
0b01100110,
0b01111110,
0b00111100
};
void setup() {
for(int i = 0 ; i < 6 ; i++)
{
lc.shutdown(i, false); // Activamos el MAX7219
lc.setIntensity(i, 8); // Ajustamos la intensidad de los LEDs
lc.clearDisplay(i); // Limpiamos el display
lc.setScanLimit(i, 7); // Ajustamos el límite de barrido del display
}
}
void loop() {
/*lc.setRow(0, 0, heart[0]); // Mostramos la primera fila del corazón
lc.setRow(0, 1, heart[1]); // Mostramos la segunda fila del corazón
lc.setRow(0, 2, heart[2]); // Mostramos la tercera fila del corazón
lc.setRow(0, 3, heart[3]); // Mostramos la cuarta fila del corazón
lc.setRow(0, 4, heart[4]); // Mostramos la quinta fila del corazón
lc.setRow(0, 5, heart[5]); // Mostramos la sexta fila del corazón
lc.setRow(0, 6, heart[6]); // Mostramos la séptima fila del corazón
lc.setRow(0, 7, heart[7]); // Mostramos la octava fila del corazón*/
//lc.setRow(0, 3, 0b10000000>>1);
/*Display_Caracter(4, 0, L);
Display_Caracter(3, 0, O);
Display_Caracter(2, 0, L);
Display_Caracter(1, 0, A);*/
/* Display_Caracter(5, 0, flechaD);
Display_Caracter(4, 0, flechaD);
Display_Caracter(3, 0, flechaD);
Display_Caracter(2, 0, flechaI);
Display_Caracter(1, 0, flechaI);*/
Display_Caracter(0, 0, corriendoI);
delay(200); // Esperamos un segundo
Display_Caracter1(0, 0, corriendoD);
delay(200);
}
void Display_Caracter(char device, char col, byte data[])
{
for(int u = 0; u < 6; u++)
{ for(int i = 0; i < 8 ; i++)
{
lc.setRow(u, i, reverseBits(data[i])); // Mostramos la primera fila del corazón
}
delay(200);
lc.clearDisplay(u);
}
}
void Display_Caracter1(char device, char col, byte data[])
{
for(int u = 6; u >= 0; u--)
{ for(int i = 0; i < 8 ; i++)
{
lc.setRow(u, i, reverseBits(data[i])); // Mostramos la primera fila del corazón
}
delay(200);
lc.clearDisplay(u);
}
}
uint8_t reverseBits(uint8_t b) {
b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
return b;
}