Display matricial 8x8 con Arduino SPI y MAX7219

Publicado por Victor Arrieta en

La matrices led de 8x8 son elementos extremadamente útiles para desplegar mensajes que puedan ser visibles desde la distancia. Estos elementos funcionan activando cada led en la matriz de forma secuencial, lo cual se logra multiplexando en tiempo las entradas. Esta multiplexación podemos lograrla "manualmente"  por medio de un microcontrolador o circuito de lógica secuencial para controlar  el display, pero existen circuitos integrados como el Max7219 que son capaces de llevar a cabo esta tarea y tiene un muy bajo costo.
Las matrices de leds disponibles en nuestra tienda vienen montadas sobre una placa de  circuito que incluye el circuito integrado Max7219, a la vez que nos permiten comunicarnos por medio de protocolos SPI, facilitándonos así la conexión de varios displays a vez con sólo 5 cables. El control de estos módulos podemos lograrlo por  medio de la librería Max72xxPanel que puedes descargar aquí. 
//Din - Mosi (Pin 11)
//Cs  - SS (Pin 10)
//Clk - Sck (Pin 13)
De esta forma podemos ver la presentación de 4 displays juntos que se puede controlar con la misma librería y con la misma facilidad de un sólo display y así mismo podemos juntar tantos displays consecutivos como se quiera para agrandar nuestra pantalla sólo conectando la salida de uno a la entrada del siguiente e incluso podemos colocar varios paneles de displays uno encima del otro y sólo modificando una par de líneas de código en nuestra librería podemos hacer que las letras sean tan grandes como lo las dos  líneas de matrices, la versatilidad entonces es total. Cabe mencionar que la librería también nos permite regular el brillo de los displays, cambiar el tamaño de las letras y representar caracteres especiales del alfabeto inglés.
A continuación te mostramos un mini proyecto basado en ejemplo de la librería, con el cual podrás implementar cualquier arreglo de estos displays y desplegar texto en ellos, el código está modificado para la presentación de los 4 displays consecutivos, sin embargo, puede ser utilizado para la presentación de un solo display sólo poniendo y quitando algunos comentarios marcados.
Código Arduino
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
//Vcc - Vcc
//Gnd - Gnd
//Din - Mosi (Pin 11)
//Cs  - SS (Pin 10)
//Clk - Sck (Pin 13)
const int pinCS = 10;
const int numberOfHorizontalDisplays = 4;
//const int numberOfHorizontalDisplays = 1; // retirar comentario para una sola matriz 
const int numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
String tape = "Arca Electronica";  //tu mensaje
const int wait = 100; // In milliseconds
const int spacer = 1;
const int width = 5 + spacer; // The font width is 5 pixels
void setup() {
   matrix.setIntensity(7); // Use a value between 0 and 15 for brightness
   //
   matrix.setPosition(0, 0, 0); // The first display is at <0, 0>
   matrix.setPosition(1, 1, 0); // The second display is at <1, 0>
   matrix.setPosition(2, 2, 0); // The third display is at <2, 0>
   matrix.setPosition(3, 3, 0); // And the last display is at <3, 0>
   matrix.setRotation(0, 1);    // Display is position upside down
   matrix.setRotation(1, 1);    // Display is position upside down
   matrix.setRotation(2, 1);    // Display is position upside down
   matrix.setRotation(3, 1);    // Display is position upside down
 
/* // retirar comentario a esto y comentar lo de arriba para una sola matriz
   matrix.setPosition(0, 0, 0); // The first display is at <0, 0>
   matrix.setRotation(0, 1);    // Display is position upside down
*/
}
void loop() {
   for (int i = 0; i < width * tape.length() + matrix.width() - 1 - spacer; i++) {
      matrix.fillScreen(LOW);
      int letter = i / width;
      int x = (matrix.width() - 1) - i % width;
      int y = (matrix.height() - 8) / 2; // center the text vertically
      while (x + width - spacer >= 0 && letter >= 0) {
         if (letter < tape.length()) {
            matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1);
         }
         letter--;
         x -= width;
      }
      matrix.write(); // Send bitmap to display
      delay(wait);
   }
}
 
Una ves subido el código y realizadas las conexiones, verás el mensaje desplazarse de derecha a izquierda en la pantalla.
 
FIN DEL POST

Compartir esta publicación



← Publicación más antigua Publicación más reciente →