Tutorial 8×8 LED Matrix MAX7219 con texto desplazable y control Android vía Bluetooth

¿Te gustaría aprender a controlar un impresionante 8×8 LED Matrix utilizando el MAX7219 y además poder desplazar texto en él? ¡Este tutorial es perfecto para ti! Además, te enseñaremos a controlarlo de forma remota a través de Bluetooth con tu dispositivo Android. Sigue leyendo para descubrir cómo llevar tus proyectos de electrónica al siguiente nivel.

En este tutorial de Arduino, aprenderemos cómo controlar una matriz de LED de 8×8 utilizando el controlador MAX7219 y la placa Arduino. Para obtener más detalles, vea el vídeo a continuación o el tutorial escrito a continuación.

descripción general

Haremos tres ejemplos: en el primero explicaremos el principio de funcionamiento básico del MAX7219, en el segundo ejemplo veremos cómo funciona el texto desplazable sobre la matriz de LED de 8×8, y en el tercer ejemplo lo controlaremos mediante Bluetooth y una aplicación Android personalizada.

MAX7219

Ahora echemos un vistazo más de cerca al controlador MAX7219. El IC puede controlar 64 LED individuales y solo requiere 3 cables para comunicarse con Arduino. Además, podemos conectar en cadena varios controladores y matrices y seguir utilizando los mismos 3 cables.

Tutorial 8×8 LED Matrix MAX7219 con texto desplazable y control Android vía Bluetooth

Los>

Tutorial 8×8 LED Matrix MAX7219 con texto desplazable y control Android vía Bluetooth

Observe>

También tenga en cuenta que una placa de conexión común para el MAX7219 está equipada con una resistencia entre 5 V y el pin IC número 18. La resistencia se utiliza para ajustar el brillo o el flujo de corriente a los LED.

Tutorial 8×8 LED Matrix MAX7219 con texto desplazable y control Android vía Bluetooth

La>

Tutorial 8×8 LED Matrix MAX7219 con texto desplazable y control Android vía Bluetooth

diagrama de circuito


Ahora conectemos el módulo de matriz de LED de 8×8 a la placa Arduino. Aquí está el diagrama del circuito:

Tutorial 8×8 LED Matrix MAX7219 con texto desplazable y control Android vía Bluetooth

Los>

Puede obtener los componentes necesarios para este tutorial de Arduino a través de los siguientes enlaces:

  • Módulo de matriz de puntos 8 × 8 LED MAX7219….. Amazon / Banggood / AliExpress
  • Módulo Bluetooth HC-05 ……………………… Amazon / Banggood / AliExpress
  • Placa Arduino…………………………………….. Amazon / Banggood / AliExpress
  • Cables de puente y placa de pruebas…………………… Amazon / Banggood / AliExpress

Divulgación: estos son enlaces de afiliados. Como asociado de Amazon, gano con compras que califican.

Tutorial 8×8 LED Matrix MAX7219 con texto desplazable y control Android vía Bluetooth

Ver también
Cómo controlar LED WS2812B direccionables individualmente con Arduino

Código básico MAX7219 Arduino

Una vez que tenemos los módulos conectados, podemos fijarnos en el código Arduino del primer ejemplo. Usamos la biblioteca MaxMatrix, que se puede descargar aquí: GitHub.

/*
      8x8 LED Matrix MAX7219 Example 01

   by Dejan Nedelkovski, www.HowToMechatronics.com

   Based on the following library:
   GitHub | riyas-org/max7219  https://github.com/riyas-org/max7219
*/

#include <MaxMatrix.h>

int DIN = 7;   // DIN pin of MAX7219 module
int CLK = 6;   // CLK pin of MAX7219 module
int CS = 5;    // CS pin of MAX7219 module
int maxInUse = 1;


MaxMatrix m(DIN, CS, CLK, maxInUse); 

char A[] = {4, 8,
            B01111110,
            B00010001,
            B00010001,
            B01111110,
           };

char B[] = {4, 8,
            B01111111,
            B01001001,
            B01001001,
            B00110110,
           };

char smile01[] = {8, 8,
                  B00111100,
                  B01000010,
                  B10010101,
                  B10100001,
                  B10100001,
                  B10010101,
                  B01000010,
                  B00111100
                 };
char smile02[] = {8, 8,
                  B00111100,
                  B01000010,
                  B10010101,
                  B10010001,
                  B10010001,
                  B10010101,
                  B01000010,
                  B00111100
                 };
char smile03[] = {8, 8,
                  B00111100,
                  B01000010,
                  B10100101,
                  B10010001,
                  B10010001,
                  B10100101,
                  B01000010,
                  B00111100
                 };

void setup() {
  m.init(); // MAX7219 initialization
  m.setIntensity(8); // initial led matrix intensity, 0-15
}

void loop() {
  // Seting the LEDs On or Off at x,y or row,column position
  m.setDot(6,2,true); 
  delay(1000);
  m.setDot(6,3,true);
  delay(1000);
  m.clear(); // Clears the display
  for (int i=0; i<8; i++){
    m.setDot(i,i,true);
    delay(300);
  }
  m.clear();
  // Displaying the character at x,y (upper left corner of the character)  
  m.writeSprite(2, 0, A);
  delay(1000);

  m.writeSprite(2, 0, B);
  delay(1000);

  m.writeSprite(0, 0, smile01);
  delay(1000);
  
  m.writeSprite(0, 0, smile02);
  delay(1000);
  
  m.writeSprite(0, 0, smile03);
  delay(1000);
  
  for (int i=0; i<8; i++){
    m.shiftLeft(false,false);
    delay(300);
  }
  m.clear();

}
Code language: Arduino (arduino)

Descripción: Entonces, primero debemos incluir la biblioteca MaxMatrix.h, definir los pines a los que está conectado el módulo, determinar cuántos módulos usamos y definir el objeto MaxMatrix.

Para mostrar caracteres necesitamos definirlos en una matriz de caracteres o bytes y aquí tengo varios ejemplos. Podemos ver cómo los bits forman los caracteres, que en realidad son ceros y unos. En este caso, se giran 90 grados, pero el ejemplo de la biblioteca sugiere usarlos de esta manera para que luego sea más fácil implementar la función personalizada shiftLeft para desplazar un texto.

Tutorial 8×8 LED Matrix MAX7219 con texto desplazable y control Android vía Bluetooth

En>

Tutorial 8×8 LED Matrix MAX7219 con texto desplazable y control Android vía Bluetooth

Para>

Código Arduino de desplazamiento de matriz LED 8 × 8


A continuación, veamos el ejemplo del texto desplazable y veamos qué es diferente. Debajo del código encontrarás una descripción.

/*
      8x8 LED Matrix MAX7219 Scrolling Text Example

   Based on the following library:
   GitHub | riyas-org/max7219  https://github.com/riyas-org/max7219
*/


#include <MaxMatrix.h>
#include <avr/pgmspace.h>

PROGMEM const unsigned char CH[] = {
  3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
  1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
  3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
  5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
  4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
  5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
  5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
  1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
  3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
  3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
  5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
  5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
  2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
  4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
  2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
  4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
  4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
  3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
  4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
  4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
  4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
  4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
  4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
  4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
  4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
  4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
  2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // :
  2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
  3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // <
  3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // =
  3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
  4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
  5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
  4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
  4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
  4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
  4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
  4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
  4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
  4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
  4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
  3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
  4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
  4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
  4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
  5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
  5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
  4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
  4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
  4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
  4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
  4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
  5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
  4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
  5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
  5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
  5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
  5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
  4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
  2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
  4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, //  backslash
  2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
  3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
  4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
  2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
  4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
  4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
  4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
  4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
  4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
  3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
  4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
  4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
  3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
  4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
  4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
  3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
  5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
  4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
  4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
  4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
  4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
  4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
  4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
  3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
  4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
  5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
  5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
  5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
  4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
  3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
  3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
  1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
  3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
  4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
};

int DIN = 7;   // DIN pin of MAX7219 module
int CLK = 6;   // CLK pin of MAX7219 module
int CS = 5;    // CS pin of MAX7219 module
int maxInUse = 2;

MaxMatrix m(DIN, CS, CLK, maxInUse);

byte buffer[10];

char text[]= "HowToMechatronics.com  "; // Scrolling text

void setup() {
  m.init(); // module initialize
  m.setIntensity(15); // dot matix intensity 0-15
}

void loop() {

  printStringWithShift(text, 100); // (text, scrolling speed)

}
// Display=the extracted characters with scrolling
void printCharWithShift(char c, int shift_speed) {
  if (c < 32) return;
  c -= 32;
  memcpy_P(buffer, CH + 7 * c, 7);
  m.writeSprite(32, 0, buffer);
  m.setColumn(32 + buffer[0], 0);

  for (int i = 0; i < buffer[0] + 1; i++)
  {
    delay(shift_speed);
    m.shiftLeft(false, false);
  }
}
// Extract the characters from the text string
void printStringWithShift(char* s, int shift_speed) {
  while (*s != 0) {
    printCharWithShift(*s, shift_speed);
    s++;
  }
}Code language: Arduino (arduino)

Descripción: Aquí necesitamos incluir una biblioteca adicional para PROGMEN que es un modificador de variable y se usa para almacenar datos en la memoria flash en lugar de SRAM. Si tenemos una base de datos de variables estáticas más grande, como en este caso la definición de letras y caracteres, es mejor almacenarlas en una memoria flash ya que es mucho más grande con 32 Kbytes que los 2 Kbytes de SRAM.

Tutorial 8×8 LED Matrix MAX7219 con texto desplazable y control Android vía Bluetooth

A>

Aplicación de Android para controlar una matriz de LED de 8×8 mediante Bluetooth


Ahora que hemos aprendido cómo funciona el MAX7219, podemos crear el tercer ejemplo, un proyecto práctico de Arduino donde crearemos una aplicación de Android personalizada para controlar la matriz de LED mediante comunicación Bluetooth. Antes de continuar, le recomiendo que lea mis tutoriales detallados sobre cómo usar el módulo Bluetooth HC-05 y cómo crear una aplicación de Android personalizada usando la aplicación en línea MIT App Inventor.

Tutorial 8×8 LED Matrix MAX7219 con texto desplazable y control Android vía Bluetooth

Aquí>

/*
      8x8 LED Matrix MAX7219 Scrolling Text
          Android Control via Bluetooth

   by Dejan Nedelkovski, www.HowToMechatronics.com

   Based on the following library:
   GitHub | riyas-org/max7219  https://github.com/riyas-org/max7219
*/

#include <MaxMatrix.h>
#include <SoftwareSerial.h>
#include <avr/pgmspace.h>

PROGMEM const unsigned char CH[] = {
  3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
  1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
  3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
  5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
  4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
  5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
  5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
  1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
  3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
  3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
  5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
  5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
  2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
  4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
  2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
  4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
  4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
  3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
  4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
  4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
  4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
  4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
  4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
  4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
  4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
  4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
  2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // :
  2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
  3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // <
  3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // =
  3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
  4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
  5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
  4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
  4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
  4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
  4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
  4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
  4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
  4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
  4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
  3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
  4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
  4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
  4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
  5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
  5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
  4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
  4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
  4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
  4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
  4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
  5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
  4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
  5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
  5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
  5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
  5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
  4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
  2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
  4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, //  backslash
  2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
  3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
  4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
  2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
  4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
  4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
  4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
  4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
  4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
  3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
  4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
  4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
  3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
  4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
  4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
  3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
  5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
  4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
  4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
  4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
  4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
  4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
  4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
  3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
  4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
  5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
  5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
  5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
  4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
  3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
  3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
  1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
  3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
  4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
};

int dIn = 7;   // DIN pin of MAX7219 module
int clk = 6;   // CLK pin of MAX7219 module
int cs = 5;    // CS pin of MAX7219 module

int maxInUse = 2;    // Number of MAX7219's connected

MaxMatrix m(dIn, cs, clk, maxInUse);
SoftwareSerial Bluetooth(8, 7); // Bluetooth

byte buffer[10];
char incomebyte;
int scrollSpeed = 100;
char text[100] = "HowToMechatronics.com  "; // Initial text message
int brightness = 15;
int count = 0;
char indicator;

void setup() {
  m.init(); // MAX7219 initialization
  m.setIntensity(brightness); // initial led matrix intensity, 0-15
  Bluetooth.begin(38400); // Default communication rate of the Bluetooth module
}

void loop() {
  // Printing the text
  printStringWithShift(text, scrollSpeed);
  
  if (Bluetooth.available()) {   // Checks whether data is comming from the serial port
    indicator = Bluetooth.read();   // Starts reading the serial port, the first byte from the incoming data
    // If we have pressed the "Send" button from the Android App, clear the previous text
    if (indicator == '1') {
      for (int i = 0; i < 100; i++) {
        text[i] = 0;
        m.clear();
      }
      // Read the whole data/string comming from the phone and put it into text[] array.
      while (Bluetooth.available()) {
        incomebyte = Bluetooth.read();
        text[count] = incomebyte;
        count++;
      }
      count = 0;
    }
    // Adjusting the Scrolling Speed
    else if (indicator == '2') {
      String sS = Bluetooth.readString();
      scrollSpeed = 150 - sS.toInt(); // Milliseconds, subtraction because lower value means higher scrolling speed
    }
    // Adjusting the brightness
    else if (indicator == '3') {
      String sB = Bluetooth.readString();
      brightness = sB.toInt();
      m.setIntensity(brightness);
    }
  }

}

void printCharWithShift(char c, int shift_speed) {
  if (c < 32) return;
  c -= 32;
  memcpy_P(buffer, CH + 7 * c, 7);
  m.writeSprite(32, 0, buffer);
  m.setColumn(32 + buffer[0], 0);

  for (int i = 0; i < buffer[0] + 1; i++)
  {
    delay(shift_speed);
    m.shiftLeft(false, false);
  }
}

void printStringWithShift(char* s, int shift_speed) {
  while (*s != 0) {
    printCharWithShift(*s, shift_speed);
    s++;
  }
}

void printString(char* s)
{
  int col = 0;
  while (*s != 0)
  {
    if (*s < 32) continue;
    char c = *s - 32;
    memcpy_P(buffer, CH + 7 * c, 7);
    m.writeSprite(col, 0, buffer);
    m.setColumn(col + buffer[0], 0);
    col += buffer[0] + 1;
    s++;
  }
}Code language: Arduino (arduino)

Descripción: Primero necesitamos incluir la biblioteca SoftwareSerial.h, que permite la comunicación Bluetooth y define algunas variables necesarias para el programa. En la sección de configuración, necesitamos inicializar Bluetooth con su velocidad en baudios predeterminada de 38400 bits por segundo. Configuré el mensaje de texto inicial en «HowToMechatronics.com» para que tuviera una velocidad de desplazamiento de 100 milisegundos.

A continuación, en la sección de bucle, verificamos si hay datos entrantes del puerto serie usando la función Bluetooth.available(), y si es así, comenzamos a leer el puerto serie, un byte por, usando la función Bluetooth.read Iteración. Por lo tanto, el primer byte entrante siempre se almacena en la variable «indicador» y en consecuencia se toma una decisión si cambiamos el mensaje de texto, la velocidad de desplazamiento o el brillo de la matriz de LED.

Tutorial 8×8 LED Matrix MAX7219 con texto desplazable y control Android vía Bluetooth

Si>

Si la variable de visualización es “2”, significa que hemos cambiado la posición del control deslizante de velocidad de desplazamiento. Por lo tanto, leemos su nuevo valor usando la función Bluetooth.readString() y ajustamos la velocidad de desplazamiento. De la misma forma ajustamos el brillo de los LED.

Puedes descargar la aplicación para Android aquí:

Eso es prácticamente todo en este tutorial. Si tiene alguna pregunta, puede utilizar la sección de comentarios a continuación.

Categorías tutoriales de arduino
Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded

Tutorial 8×8 LED Matrix MAX7219 con texto desplazable y control Android vía Bluetooth

En este tutorial de Arduino aprenderemos a controlar una matriz de LED 8×8 utilizando el driver MAX7219 y la placa Arduino. Aprenderemos a hacer tres ejemplos, en el primero explicaremos el principio básico de funcionamiento del MAX7219, en el segundo veremos cómo funciona el texto desplazable en la matriz de LED 8×8, y en el tercer ejemplo los controlaremos a través de Bluetooth y una aplicación Android personalizada.

MAX7219

El driver MAX7219 es capaz de controlar 64 LEDs individuales usando solo 3 cables para la comunicación con Arduino. Además, podemos encadenar múltiples drivers y matrices y seguir usando los mismos 3 cables. Los 64 LEDs son controlados por 16 pines de salida del IC. El IC activa cada columna por un corto periodo de tiempo y al mismo tiempo también controla cada fila. Al alternar rápidamente entre las columnas y las filas, el ojo humano solo percibirá una luz continua.

Es importante tener en cuenta cómo están dispuestos internamente los pines de una matriz de LED 8×8 común. También se debe considerar que la tabla del datasheet del IC muestra el valor de la resistencia que debemos usar según la caída de voltaje directo de nuestros LEDs.

Esquemático del Circuito

Conectamos el módulo de matriz de LED 8×8 a la placa Arduino de la siguiente manera:

  • VCC y GND del módulo a los pines 5V y GND de la Arduino.
  • Los pines DIN, CLK y CS a cualquier pin digital de la placa.
  • Si queremos conectar más de un módulo, simplemente conectamos los pines de salida del módulo anterior a los pines de entrada del nuevo módulo.

Componentes necesarios para este tutorial:

Código Básico de Arduino para MAX7219

Ahora echemos un vistazo al código de Arduino del primer ejemplo donde usamos la librería MaxMatrix para controlar la matriz LED:

// Código de Arduino para el control básico de la matriz de LED 8x8 con MAX7219
#include <MaxMatrix.h>

int DIN = 7;   // Pin DIN del módulo MAX7219
int CLK = 6;   // Pin CLK del módulo MAX7219
int CS = 5;    // Pin CS del módulo MAX7219
int maxInUse = 1;

MaxMatrix m(DIN, CS, CLK, maxInUse); 

void setup() {
  m.init(); // Inicialización del MAX7219
  m.setIntensity(8); // Intensidad inicial de la matriz LED, 0-15
}

void loop() {
  m.setDot(6, 2, true); 
  delay(1000);
  m.setDot(6, 3, true);
  delay(1000);
  m.clear(); // Borra la pantalla
}

Código de Arduino para Texto Desplazable en la Matriz 8×8LED

Ahora veamos el código para el segundo ejemplo con texto desplazable en la matriz de LED 8×8:

// Código de Arduino para el texto desplazable en la matriz de LED 8x8 con MAX7219
#include <MaxMatrix.h>
#include <avr/pgmspace.h>

PROGMEM const unsigned char CH[] = {
  // Tabla de caracteres y sus bits correspondientes
};

int DIN = 7;   // Pin DIN del módulo MAX7219
int CLK = 6;   // Pin CLK del módulo MAX7219
int CS = 5;    // Pin CS del módulo MAX7219
int maxInUse = 2;

MaxMatrix m(DIN, CS, CLK, maxInUse);

byte buffer[10];
char text[]= "HowToMechatronics.com  "; // Texto desplazable

void setup() {
  m.init(); // Inicialización del módulo
  m.setIntensity(15); // Intensidad de la matriz LED, 0-15
}

void loop() {
  printStringWithShift(text, 100); // (texto, velocidad de desplazamiento)
}

void printCharWithShift(char c, int shift_speed) {
  // Lógica para imprimir un caracter con desplazamiento
}

void printStringWithShift(char* s, int shift_speed) {
  // Lógica para imprimir una cadena de texto con desplazamiento
}

Control de la Matriz de LED vía Bluetooth con una Aplicación Android

Por último, en el tercer ejemplo, crearemos una aplicación Android personalizada para controlar la matriz LED a través de la comunicación Bluetooth. Para más detalles sobre cómo usar el módulo Bluetooth HC-05 y construir una aplicación Android personalizada, te recomiendo revisar mis tutoriales detallados.

Puedes descargar la aplicación Android para controlar la matriz de LED aquí: AndrodApp for Arduino 8×8 LED Matrix Control

Con estos ejemplos, ahora puedes experimentar y aprender a controlar una matriz de LED 8×8 con el driver MAX7219 usando Arduino y controlarlo a través de Bluetooth con una aplicación Android personalizada. ¡Diviértete experimentando!

Deja un comentario