Control de 4 Matrices 8x8 con Arduino mediante UART

Este proyecto es uno de los mas simples de llevar a cabo ya que no requiere de muchas conexiones y con solo cargar el firmware en el Arduino podremos controlar la Matriz de 8x32, podremos escribir mensajes con desplazamiento Scroll de forma indeterminada (para que quede pasando continuamente a modo propaganda) también podremos enviarle mensajes a demanda para que la misma pueda mostrar estos.
El proyecto requiere de un Arduino (puede ser cualquiera, yo he implementado el UNO porque lo tenia aquí, pero puede ser cualquier otro) y matrices con controlador MAX7219, en mi caso he utilizado un modulo de 4 matrices interconectadas, pero es posible utilizar mas matrices o menos.
En este proyecto los mensajes podemos enviarlos por puerto serie del mismo arduino, pero podríamos emplear un modulo bluetooth serial, y de esta manera no necesitamos la PC conectada, solo un terminal bluetooth.

El programa utiliza la biblioteca de Adafruit GFX y la de MAX7219, debemos descargarlas, las dejare en mi sitio de GitHub para mayor facilidad.
Luego el resto viene por defecto en ArduinoIDE (como la de puerto SPI "Wire.h").

El programa es el Siguiente: 
  1. #include <SPI.h>
  2. #include <Adafruit_GFX.h>
  3. #include <Max72xxPanel.h>
  4.  
  5. //Vcc - Vcc
  6. //Gnd - Gnd
  7. //Din - Mosi (Pin 11)
  8. //Cs  - SS (Pin 10)
  9. //Clk - Sck (Pin 13)
  10.  
  11. const int pinCS = 10;
  12. const int numberOfHorizontalDisplays = 8;
  13. const int numberOfVerticalDisplays = 1;
  14.  
  15. Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
  16.  
  17. const int wait = 50; // Velocidad a la que realiza el scroll
  18.  
  19. const int spacer = 1;
  20. const int width = 5 + spacer; // Ancho de la fuente a 5 pixeles
  21.  
  22. void setup(){
  23.    Serial.begin(9600);
  24.    matrix.setIntensity(1); // Ajustar el brillo entre 0 y 15
  25.    matrix.setPosition(000); // El primer display esta en <0, 0>
  26.    matrix.setPosition(110); // El segundo display esta en <1, 0>
  27.    matrix.setPosition(220); // El tercer display esta en <2, 0>
  28.    matrix.setPosition(330); // El cuarto display esta en <3, 0>
  29.    matrix.setPosition(440); // El quinto display esta en <4, 0>
  30.    matrix.setPosition(550); // El sexto display esta en <5, 0>
  31.    matrix.setPosition(660); // El séptimo display esta en <6, 0>
  32.    matrix.setPosition(770); // El octavo display esta en <7, 0>
  33.    matrix.setPosition(880); // El noveno display esta en <8, 0>
  34.    matrix.setRotation(01);    // Posición del display
  35.    matrix.setRotation(11);    // Posición del display
  36.    matrix.setRotation(21);    // Posición del display
  37.    matrix.setRotation(31);    // Posición del display
  38.    matrix.setRotation(41);    // Posición del display
  39.    matrix.setRotation(51);    // Posición del display
  40.    matrix.setRotation(61);    // Posición del display
  41.    matrix.setRotation(71);    // Posición del display
  42.    matrix.setRotation(81);    // Posición del display
  43. }
  44.  
  45. void loop(){
  46.    String cadena = "";
  47.    long int time = millis();
  48.    while(Serial.available()){
  49.       cadena += char(Serial.read());
  50.    }
  51.    for(int i = 0; i < width * cadena.length() + matrix.width() - 1 - spacer; i++){
  52.       matrix.fillScreen(LOW);
  53.       int letter = i / width;
  54.       int x = (matrix.width() - 1) - i % width;
  55.       int y = (matrix.height() - 8) / 2; // Centrar el texto
  56.       while(+ width - spacer >= 0 && letter >= 0){
  57.          if(letter < cadena.length()){
  58.              matrix.drawChar(x, y, cadena[letter], HIGH, LOW, 1);
  59.          }
  60.          letter--;
  61.          x -= width;
  62.       }
  63.       matrix.write(); // Muestra loscaracteres
  64.       delay(wait);
  65.    }

El Circuito es el Siguiente: 
Conexiones: 
  1. //Vcc - Vcc
  2. //Gnd - Gnd
  3. //Din - Mosi (Pin 11)
  4. //Cs  - SS (Pin 10)
  5. //Clk - Sck (Pin 13)



¿Dónde fabricamos nuestros PCBs?
Nuestros PCBs los fabricamos con la empresa PCBWay, esta empresa nos permite realizar pequeñas cantidades como prototipos rápidos para nuestros desarrollos a medida.
También nos permite realizar grandes producciones para realizar proyectos comerciales.
Servicio de prototipo de PCB por tan solo $5 las 10 unidades.
Cada nuevo miembro recibirá un bono de $5, más servicio express de 24Hs o 48Hs.
Servicio de ensamblado de PCB por $88 más envió gratis en todo el mundo, más esténcil, más componentes.
Un servicio de calidad!