Tutorial: Matriz de LEDs de 8×8

Matriz de leds de 8×8

En el tutorial de hoy vamos a programar una matriz de Leds de 8×8. 

Para ello el material a utilizar será el siguiente:

– Arduino UNO

– Matriz de Leds de 8×8

Como comenta el programa que sigue a esta explicación las conexiones serán:

  • pin DIN de la matriz con Pin 4 del Arduino.
  • pin CLK de la matriz con Pin 5 del Arduino.
  • pin CS/Load de la matriz con Pin 6 del Arduino.
  • pin VCC de la matriz con Pin de 5V del Arduino.
  • pin GND de la matriz con Pin de GND del Arduino.

El programa que debemos implementar en nuestro Arduino será el siguiente:

// Programa para matriz 8×8  

 // Basado en el libro Arduino Basico, de Michael McRoberts  

   

 #include <pgmspace.h>  

 #include <TimerOne.h>  

   

 int DataPin = 4;  //Pin 4 con la clavija DIN de la matriz  

 int ClockPin = 5; //Pin 5 con la clavija CLK de la matriz  

 int LoadPin = 6;  //Pin 6 con la clavija CS/Load de la matriz  

  //Declaramos la matriz que vamos a rellenar inicializando en binario cada led   

 byte buffer[8];  

   

 static byte font[][8] PROGMEM = {  

   

 {B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000},   

 {B00000100, B00000100, B00000100, B00000100, B00000100, B00000100, B00000000, B00000100},   

 {B00001010, B00001010, B00001010, B00000000, B00000000, B00000000, B00000000, B00000000},   

 {B00000000, B00001010, B00011111, B00001010, B00011111, B00001010, B00011111, B00001010},   

 {B00000111, B00001100, B00010100, B00001100, B00000110, B00000101, B00000110, B00011100},   

 {B00011001, B00011010, B00000010, B00000100, B00000100, B00001000, B00001011, B00010011},   

 {B00000110, B00001010, B00010010, B00010100, B00001001, B00010110, B00010110, B00001001},   

 {B00000100, B00000100, B00000100, B00000000, B00000000, B00000000, B00000000, B00000000},   

 {B00000010, B00000100, B00001000, B00001000, B00001000, B00001000, B00000100, B00000010},   

 {B00001000, B00000100, B00000010, B00000010, B00000010, B00000010, B00000100, B00001000},   

 {B00010101, B00001110, B00011111, B00001110, B00010101, B00000000, B00000000, B00000000},   

 {B00000000, B00000000, B00000100, B00000100, B00011111, B00000100, B00000100, B00000000},   

 {B00000000, B00000000, B00000000, B00000000, B00000000, B00000110, B00000100, B00001000},   

 {B00000000, B00000000, B00000000, B00000000, B00001110, B00000000, B00000000, B00000000},   

 {B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000100},   

 {B00000001, B00000010, B00000010, B00000100, B00000100, B00001000, B00001000, B00010000},   

 {B00001110, B00010001, B00010011, B00010001, B00010101, B00010001, B00011001, B00001110},   

 {B00000100, B00001100, B00010100, B00000100, B00000100, B00000100, B00000100, B00011111},   

 {B00001110, B00010001, B00010001, B00000010, B00000100, B00001000, B00010000, B00011111},   

 {B00001110, B00010001, B00000001, B00001110, B00000001, B00000001, B00010001, B00001110},   

 {B00010000, B00010000, B00010100, B00010100, B00011111, B00000100, B00000100, B00000100},   

 {B00011111, B00010000, B00010000, B00011110, B00000001, B00000001, B00000001, B00011110},   

 {B00000111, B00001000, B00010000, B00011110, B00010001, B00010001, B00010001, B00001110},   

 {B00011111, B00000001, B00000001, B00000001, B00000010, B00000100, B00001000, B00010000},   

 {B00001110, B00010001, B00010001, B00001110, B00010001, B00010001, B00010001, B00001110},   

 {B00001110, B00010001, B00010001, B00001111, B00000001, B00000001, B00000001, B00000001},   

 {B00000000, B00000100, B00000100, B00000000, B00000000, B00000100, B00000100, B00000000},   

 {B00000000, B00000100, B00000100, B00000000, B00000000, B00000100, B00000100, B00001000},   

 {B00000001, B00000010, B00000100, B00001000, B00001000, B00000100, B00000010, B00000001},   

 {B00000000, B00000000, B00000000, B00011110, B00000000, B00011110, B00000000, B00000000},   

 {B00010000, B00001000, B00000100, B00000010, B00000010, B00000100, B00001000, B00010000},   

 {B00001110, B00010001, B00010001, B00000010, B00000100, B00000100, B00000000, B00000100},   

 {B00001110, B00010001, B00010001, B00010101, B00010101, B00010001, B00010001, B00011110},   

 {B00001110, B00010001, B00010001, B00010001, B00011111, B00010001, B00010001, B00010001},   

 {B00011110, B00010001, B00010001, B00011110, B00010001, B00010001, B00010001, B00011110},   

 {B00000111, B00001000, B00010000, B00010000, B00010000, B00010000, B00001000, B00000111},   

 {B00011100, B00010010, B00010001, B00010001, B00010001, B00010001, B00010010, B00011100},  

 {B00011111, B00010000, B00010000, B00011110, B00010000, B00010000, B00010000, B00011111},   

 {B00011111, B00010000, B00010000, B00011110, B00010000, B00010000, B00010000, B00010000},   

 {B00001110, B00010001, B00010000, B00010000, B00010111, B00010001, B00010001, B00001110},   

 {B00010001, B00010001, B00010001, B00011111, B00010001, B00010001, B00010001, B00010001},   

 {B00011111, B00000100, B00000100, B00000100, B00000100, B00000100, B00000100, B00011111},   

 {B00011111, B00000100, B00000100, B00000100, B00000100, B00000100, B00010100, B00001000},   

 {B00010001, B00010010, B00010100, B00011000, B00010100, B00010010, B00010001, B00010001},   

 {B00010000, B00010000, B00010000, B00010000, B00010000, B00010000, B00010000, B00011111},   

 {B00010001, B00011011, B00011111, B00010101, B00010001, B00010001, B00010001, B00010001},   

 {B00010001, B00011001, B00011001, B00010101, B00010101, B00010011, B00010011, B00010001},   

 {B00001110, B00010001, B00010001, B00010001, B00010001, B00010001, B00010001, B00001110},   

 {B00011110, B00010001, B00010001, B00011110, B00010000, B00010000, B00010000, B00010000},   

 {B00001110, B00010001, B00010001, B00010001, B00010001, B00010101, B00010011, B00001111},   

 {B00011110, B00010001, B00010001, B00011110, B00010100, B00010010, B00010001, B00010001},   

 {B00001110, B00010001, B00010000, B00001000, B00000110, B00000001, B00010001, B00001110},   

 {B00011111, B00000100, B00000100, B00000100, B00000100, B00000100, B00000100, B00000100},   

 {B00010001, B00010001, B00010001, B00010001, B00010001, B00010001, B00010001, B00001110},   

 {B00010001, B00010001, B00010001, B00010001, B00010001, B00010001, B00001010, B00000100},   

 {B00010001, B00010001, B00010001, B00010001, B00010001, B00010101, B00010101, B00001010},   

 {B00010001, B00010001, B00001010, B00000100, B00000100, B00001010, B00010001, B00010001},   

 {B00010001, B00010001, B00001010, B00000100, B00000100, B00000100, B00000100, B00000100},   

 {B00011111, B00000001, B00000010, B00000100, B00001000, B00010000, B00010000, B00011111},   

 {B00001110, B00001000, B00001000, B00001000, B00001000, B00001000, B00001000, B00001110},   

 {B00010000, B00001000, B00001000, B00000100, B00000100, B00000010, B00000010, B00000001},   

 {B00001110, B00000010, B00000010, B00000010, B00000010, B00000010, B00000010, B00001110},   

 {B00000100, B00001010, B00010001, B00000000, B00000000, B00000000, B00000000, B00000000},   

 {B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00011111},   

 {B00001000, B00000100, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000},   

 {B00000000, B00000000, B00000000, B00001110, B00010010, B00010010, B00010010, B00001111},   

 {B00000000, B00010000, B00010000, B00010000, B00011100, B00010010, B00010010, B00011100},   

 {B00000000, B00000000, B00000000, B00001110, B00010000, B00010000, B00010000, B00001110},   

 {B00000000, B00000001, B00000001, B00000001, B00000111, B00001001, B00001001, B00000111},   

 {B00000000, B00000000, B00000000, B00011100, B00010010, B00011110, B00010000, B00001110},   

 {B00000000, B00000011, B00000100, B00000100, B00000110, B00000100, B00000100, B00000100},   

 {B00000000, B00001110, B00001010, B00001010, B00001110, B00000010, B00000010, B00001100},   

 {B00000000, B00010000, B00010000, B00010000, B00011100, B00010010, B00010010, B00010010},   

 {B00000000, B00000000, B00000100, B00000000, B00000100, B00000100, B00000100, B00000100},   

 {B00000000, B00000010, B00000000, B00000010, B00000010, B00000010, B00000010, B00001100},   

 {B00000000, B00010000, B00010000, B00010100, B00011000, B00011000, B00010100, B00010000},   

 {B00000000, B00010000, B00010000, B00010000, B00010000, B00010000, B00010000, B00001100},   

 {B00000000, B00000000, B00000000, B00001010, B00010101, B00010001, B00010001, B00010001},   

 {B00000000, B00000000, B00000000, B00010100, B00011010, B00010010, B00010010, B00010010},   

 {B00000000, B00000000, B00000000, B00001100, B00010010, B00010010, B00010010, B00001100},   

 {B00000000, B00011100, B00010010, B00010010, B00011100, B00010000, B00010000, B00010000},   

 {B00000000, B00001110, B00010010, B00010010, B00001110, B00000010, B00000010, B00000001},   

 {B00000000, B00000000, B00000000, B00001010, B00001100, B00001000, B00001000, B00001000},   

 {B00000000, B00000000, B00001110, B00010000, B00001000, B00000100, B00000010, B00011110},   

 {B00000000, B00010000, B00010000, B00011100, B00010000, B00010000, B00010000, B00001100},   

 {B00000000, B00000000, B00000000, B00010010, B00010010, B00010010, B00010010, B00001100},   

 {B00000000, B00000000, B00000000, B00010001, B00010001, B00010001, B00001010, B00000100},   

 {B00000000, B00000000, B00000000, B00010001, B00010001, B00010001, B00010101, B00001010},   

 {B00000000, B00000000, B00000000, B00010001, B00001010, B00000100, B00001010, B00010001},   

 {B00000000, B00000000, B00010001, B00001010, B00000100, B00001000, B00001000, B00010000},   

 {B00000000, B00000000, B00000000, B00011111, B00000010, B00000100, B00001000, B00011111},   

 {B00000010, B00000100, B00000100, B00000100, B00001000, B00000100, B00000100, B00000010},   

 {B00000100, B00000100, B00000100, B00000100, B00000100, B00000100, B00000100, B00000100},   

 {B00001000, B00000100, B00000100, B00000100, B00000010, B00000100, B00000100, B00001000},   

 {B00000000, B00000000, B00000000, B00001010, B00011110, B00010100, B00000000, B00000000}   

 };  

 //fijamos a 0 todas las posiciones de la matriz con el siguiente bucle   

 void clearDisplay() {  

     for (byte x=0; x<8; x++) {  

         buffer[x] = B00000000;  

     }  

     screenUpdate();  

 }  

 //Inicializamos el microcontrolador de la matriz llamando a los pines antes declarados como salida y definimos los pines de salida.   

 void initMAX7219() {  

     pinMode(DataPin, OUTPUT);  

     pinMode(LoadPin, OUTPUT);  

     pinMode(ClockPin, OUTPUT);  

     clearDisplay();  

     writeData(B00001011, B00000111);   

     writeData(B00001001, B00000000);   

     writeData(B00001100, B00000001);   

     intensity(1);   

 }  

 //Programamos que la matriz haga el scroll traduciendo de binario a leds encendidos y apagados    

 void intensity(int intensity) {  

     writeData(B00001010, intensity);   

     }  

   

 void writeData(byte MSB, byte LSB) {  

     byte mask;  

     digitalWrite(LoadPin, LOW);   

       

     for (mask = B10000000; mask>0; mask >>= 1) {   

         digitalWrite(ClockPin, LOW);  

         if (MSB & mask){   

             digitalWrite(DataPin,HIGH);   

         }  

         else{   

             digitalWrite(DataPin,LOW);   

         }  

         digitalWrite(ClockPin, HIGH);   

     }  

       

      for (mask = B10000000; mask>0; mask >>= 1) {   

         digitalWrite(ClockPin, LOW);  

         if (LSB & mask){   

             digitalWrite(DataPin,HIGH);   

         }  

         else{   

             digitalWrite(DataPin,LOW);   

         }  

         digitalWrite(ClockPin, HIGH);   

     }  

     digitalWrite(LoadPin, HIGH);   

     digitalWrite(ClockPin, LOW);  

 }  

   

   

 void scroll(char myString[], int speed) {  

     byte firstChrRow, secondChrRow;  

     byte ledOutput;  

     byte chrPointer = 0;   

     byte Char1, Char2;   

     byte scrollBit = 0;  

     byte strLength = 0;  

     unsigned long time;  

     unsigned long counter;  

   

       

     while (myString[strLength]) {strLength++;}  

   

     counter = millis();  

      while (chrPointer < (strLength-1)) {  

         time = millis();  

         if (time > (counter + speed)) {  

             Char1 = myString[chrPointer];  

             Char2 = myString[chrPointer+1];  

             for (byte y= 0; y<8; y++) {  

                 firstChrRow = pgm_read_byte(&font[Char1 – 32][y]);  

                 secondChrRow = (pgm_read_byte(&font[Char2 – 32][y])) << 1;  

                 ledOutput = (firstChrRow << scrollBit) | (secondChrRow >>  

  (8 – scrollBit) );  

                 buffer[y] = ledOutput;  

             }  

             scrollBit++;   

             if (scrollBit > 6) {   

             scrollBit = 0;  

             chrPointer++;  

             }  

             counter = millis();  

         }  

     }  

 }  

   

 void screenUpdate() {  

     for (byte row = 0; row < 8; row++) {  

         writeData(row+1, buffer[row]);  

     }  

 }  

   

 void setup() {  

     initMAX7219();  

     Timer1.initialize(10000);       

     Timer1.attachInterrupt(screenUpdate);   

 }  

   

 void loop() {  

     clearDisplay();    

     scroll(» El cajon «, 100); //Escribir el mensaje a mostrar con intervalo de 100

     scroll(» de Arduino «, 100);        //Añada m´s lineas para mostrar mas texto

 }

Vídeo de nuestros inicios usando la matriz de leds.

Como siempre, para cualquier duda no dudéis en consultar con nosotros más abajo.

Un saludo.

C.

4 comentarios en «Tutorial: Matriz de LEDs de 8×8»

  1. problemas con
    static byte font[][8] PROGMEM = {

    Arroja lo siguiente:
    variable 'font' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

    Responder

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.