Domina la matriz LED 8×8 con MAX7219: Texto desplazable y control Bluetooth Android
En este tutorial de Arduino aprenderemos a controlar una matriz LED 8×8 usando el driver MAX7219 y la placa Arduino. Puedes ver el siguiente vídeo o leer el tutorial escrito a continuación para más detalles. Haremos tres ejemplos: con el primero explicaremos el principio básico de funcionamiento del MAX7219, en el segundo veremos cómo funciona el texto desplazable en la matriz LED 8×8, y en el tercero los controlaremos vía Bluetooth y una aplicación Android personalizada. Veamos más de cerca el driver MAX7219. El IC es capaz de controlar 64 LEDs individuales usando solo 3 hilos para la comunicación con el Arduino, y lo que es más, podemos encadenar múltiples drivers y matrices y seguir usando los mismos 3 hilos. Los 64 LEDs son controlados por 16 pines de salida del IC. La pregunta ahora es cómo es eso posible. Bueno, el número máximo de LEDs encendidos al mismo tiempo es en realidad ocho. Los LEDs están dispuestos como un conjunto de 8×8 filas y columnas. Así que el MAX7219 activa cada columna por un período muy corto de tiempo y al mismo tiempo controla cada fila. Al cambiar rápidamente entre columnas y filas, el ojo humano solo notará una luz continua. Observa cómo están dispuestos internamente los pines de una matriz LED 8×8 común, así que si estás construyendo una matriz por tu cuenta deberías considerarlo. También ten en cuenta que una placa breakout común para el MAX7219 viene con una resistencia entre el 5V y el pin 18 del IC. La resistencia se usa para establecer el brillo o el flujo de corriente a los LEDs. La siguiente tabla del datasheet del IC muestra el valor de la resistencia que debemos usar según la caída de voltaje directa de nuestros LEDs. Ahora conectemos el módulo de matriz LED 8×8 a la placa Arduino. Aquí está el esquema del circuito: El VCC y GND del módulo van a los pines 5V y GND del Arduino y los otros tres pines, DIN, CLK y CS van a cualquier pin digital de la placa Arduino. Si queremos conectar más de un módulo, simplemente conectamos los pines de salida de la placa breakout anterior a los pines de entrada del nuevo módulo. En realidad, estos pines son todos iguales, excepto que el pin DOUT de la placa anterior va al pin DIN de la nueva placa. Puedes conseguir los componentes necesarios para este tutorial de Arduino en los enlaces a continuación: Una vez conectados los módulos, estamos listos para ver el código de Arduino del primer ejemplo. Usaremos la librería MaxMatrix que se puede descargar de GitHub. Descripción: Primero necesitamos incluir la librería MaxMatrix.h, definir los pines a los que está conectado el módulo, establecer cuántos módulos usamos y definir el objeto MaxMatrix. Para mostrar caracteres necesitamos definirlos en un array de caracteres o bytes, y aquí tengo varios ejemplos. Podemos notar cómo los bits forman los caracteres que en realidad son ceros y unos. En este caso están rotados 90 grados pero el ejemplo de la librería sugiere usarlos de esa manera para que sea más fácil implementar luego la función personalizada shiftLeft para desplazar un texto. En la sección setup solo necesitamos inicializar el módulo y establecer el brillo de los LEDs. En la sección loop, usando la función setDot() podemos encender cualquier LED individual en posición X, Y o Fila/Columna y usando la función clear() podemos limpiar la pantalla. Para mostrar los caracteres predefinidos usamos la función writeSprite(), y los dos primeros argumentos son la posición X e Y de la esquina superior izquierda del carácter. Al final, usando la función shiftLeft() movemos o desplazamos el carácter hacia la izquierda. Ahora veamos el ejemplo de texto desplazable y veamos qué es diferente. Debajo del código encontrarás su descripción. Descripción: Aquí tenemos que incluir una librería adicional para PROGMEM que es un modificador de variable y se usa para almacenar datos en la memoria flash en lugar de SRAM. Cuando tenemos una base de datos más grande de variables que son estáticas, como en este caso definiendo letras y caracteres, es mejor almacenarlas en la memoria flash porque es mucho más grande, 32K bytes, comparado con los 2K bytes de la SRAM. Luego, con un array de caracteres definimos el texto desplazable y en la sección loop la función personalizada printStringWithShift imprime el texto desplazable en la matriz LED con una velocidad de desplazamiento definida en milisegundos con el segundo argumento. Lo primero que hace esta función personalizada es extraer los caracteres de la cadena de texto y luego mostrar estos caracteres desplazándose en la matriz LED. Una vez que aprendimos cómo funciona el MAX7219, ahora podemos hacer el tercer ejemplo que es un proyecto práctico de Arduino donde construiremos una app Android personalizada para controlar la matriz LED vía comunicación Bluetooth. Antes de continuar, te sugiero que revises mis tutoriales detallados sobre cómo usar el módulo Bluetooth HC-05 y cómo construir una app Android personalizada usando la aplicación online MIT App Inventor. Aquí está el código de Arduino y ahora veamos las modificaciones comparado con el ejemplo anterior. Descripción: Primero necesitamos incluir la librería SoftwareSerial.h que habilitará la comunicación Bluetooth y definir algunas variables necesarias para el programa. En la sección setup necesitamos inicializar el Bluetooth a su velocidad en baudios por defecto de 38400 bits por segundo. Establecí el mensaje de texto inicial como "HowToMechatronics.com" con 100 milisegundos de retraso de velocidad de desplazamiento. Luego, en la sección loop, usando la función Bluetooth.available() comprobamos si hay datos entrantes del puerto serial y si es cierto, usando la función Bluetooth.read empezamos a leer el puerto serial, un byte cada iteración. Así que el primer byte entrante siempre se almacenará en la variable "indicator" y según ella elegiremos si cambiaremos el mensaje de texto, la velocidad de desplazamiento o el brillo de la matriz LED. Si echamos un vistazo a los bloques de código de la app Android, podemos notar que cuando se pulsa el botón "Enviar", primero enviamos el byte de indicación, en este caso "1", lo que significa que queremos cambiar el mensaje de texto. Para hacer eso, en el lado del Arduino, borraremos todo el array de caracteres y también limpiaremos la pantalla de la matriz LED. Luego, en el bucle "while", leeremos el resto de los datos en el puerto serial, y ese es el mensaje escrito en el cuadro de texto de la app Android. En caso de que la variable indicador sea "2", significa que hemos cambiado la posición del control deslizante de velocidad de desplazamiento, así que leeremos su nuevo valor usando la función Bluetooth.readString() y ajustaremos la velocidad de desplazamiento. De la misma manera ajustamos el brillo de los LEDs. Aquí puedes descargar la app Android: Eso es prácticamente todo para este tutorial, si tienes alguna pregunta puedes usar la sección de comentarios a continuación.Resumen
MAX7219




Esquema del Circuito

Código Básico MAX7219 Arduino
/* Matriz LED 8x8 MAX7219 Ejemplo 01 by Dejan Nedelkovski, www.HowToMechatronics.com Basado en la librería: GitHub | riyas-org/max7219 https://github.com/riyas-org/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);
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(); // Inicialización MAX7219
m.setIntensity(8); // Brillo inicial matriz LED, 0-15
}
void loop() {
// Encender/apagar LEDs en posición x,y o fila,columna
m.setDot(6,2,true); delay(1000);
m.setDot(6,3,true); delay(1000);
m.clear(); // Limpiar pantalla
for (int i=0; i<8; i++){
m.setDot(i,i,true); delay(300);
}
m.clear();
// Mostrar carácter en x,y (esquina sup. izq. del carácter)
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();
}Lenguaje: Arduino (arduino)

Código Arduino para Texto Desplazable en Matriz 8×8 LED
/* Matriz LED 8x8 MAX7219 Texto Desplazable Ejemplo Basado en la librería: 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, // espacio
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, // ^
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, B01010100, B01010100, 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
3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // s
4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // t
5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // u
5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // v
5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // w
4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // x
3, 8, B01100100, B01010100, B01001100, B00000000, 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;
int CLK = 6;
int CS = 5;
int maxInUse = 2;
MaxMatrix m(DIN, CS, CLK, maxInUse);
byte buffer[10];
char text[] = "HowToMechatronics.com "; // Texto desplazable
void setup() {
m.init();
m.setIntensity(15); // Intensidad matriz de puntos 0-15
}
void loop() {
printStringWithShift(text, 100); // (texto, velocidad desplazamiento)
}
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++;
}
}Lenguaje: Arduino (arduino)
App Android para Controlar Matriz 8×8 LED vía Bluetooth

/* Matriz LED 8x8 MAX7219 Texto Desplazable Control Android vía Bluetooth by Dejan Nedelkovski, www.HowToMechatronics.com Basado en la librería: 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, B01001001, B01110110, B00000000, // P
4, 8, B01111111, B00001001, B00001001, B01110110, 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, // ^
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, B01010100, B01010100, 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;
int clk = 6;
int cs = 5;
int maxInUse = 2;
MaxMatrix m(dIn, cs, clk, maxInUse);
SoftwareSerial Bluetooth(8, 7); // Bluetooth
byte buffer[10];
char incomebyte;
int scrollSpeed = 100;
char text[100] = "HowToMechatronics.com "; // Mensaje de texto inicial
int brightness = 15;
int count = 0;
char indicator;
void setup() {
m.init();
m.setIntensity(brightness);
Bluetooth.begin(38400); // Velocidad de comunicación por defecto del módulo Bluetooth
}
void loop() {
printStringWithShift(text, scrollSpeed);
if (Bluetooth.available()) {
indicator = Bluetooth.read();
if (indicator == '1') {
for (int i = 0; i < 100; i++) {
text[i] = 0;
m.clear();
}
while (Bluetooth.available()) {
incomebyte = Bluetooth.read();
text[count] = incomebyte;
count++;
}
count = 0;
} else if (indicator == '2') {
String sS = Bluetooth.readString();
scrollSpeed = 150 - sS.toInt(); // Milisegundos, resta porque valor menor = mayor velocidad
} 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++;
}
}Lenguaje: Arduino (arduino)
AndrodApp para Arduino 8x8 LED Matrix Control
1 archivo(s) 1.48 MB Descargar
AndrodApp para Arduino 8×8 LED Matrix Control .aia file
1 archivo(s) 34.06 KB Descargar
Proceso de manufactura
- Alcancía Inteligente: Controla un Aceptador de Monedas con Arduino Nano
- Construye una consola Pong 24×16 LED con Arduino Nano y MAX7219
- Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
- Controlar un LED de Arduino con Cortana vía Bluetooth en Windows 10
- Control de Matriz LED 8×8 con Arduino Uno: Guía Paso a Paso
- Control remoto de coche con Arduino Uno y Bluetooth: Guía paso a paso
- Controla tu brazo robótico Arduino con app Android dedicada
- Matriz LED 8x8 Bluetooth con Texto Desplazable - Proyecto Arduino
- Crea el Clásico Juego Asteroids con Arduino Mega y Matriz LED MAX72XX
- Controlar Múltiples Servos por Bluetooth: Arduino y App Android
- Juego Snake en Arduino con Matriz LED 8x8