Vamos montar um painel de led com módulo Max7219? Ok, não vai ser “aquele” painel de leds, afinal estou trabalhando apenas com dois módulos Max7219, mas vamos aproveitar a facilidade de ligação (apenas 3 pinos de dados) dessa matriz de leds 8×8 com o Arduino, e montar um painel com scroll (rolagem) de texto, muito fácil de ser expandido.

Para quem ainda não conhece o Módulo Matriz de leds 8×8 com Max7219, recomendo a leitura deste artigo. Lá eu falo um pouco mais sobre o componente e como utilizá-lo para realizar um scroll em um único módulo, com todo o array de caracteres definido no programa. Na montagem do painel deste post aqui, vou utilizar uma biblioteca para controlar os dois módulos.
Na foto abaixo eu retirei a matriz de leds para mostrar as conexões : do lado esquerdo (JP1), os pinos Vcc, GND, DIN, CS e CLK, que serão ligados ao Arduino.
Do lado direito (JP2), as conexões Vcc, GND, DOUT, CS e CLK, que serão utilizadas na ligação ao segundo módulo.
Conexão módulo Max7219 com Arduino
O circuito abaixo mostra que a ligação dos dois módulos não tem nenhum grande segredo: os 5 pinos de saída (lado direito – JP2) do primeiro módulo são conectados diretamente aos 5 pinos de entrada do segundo módulo, e apenas o primeiro módulo é ligado diretamente ao Arduino:
- Pino 5v do Arduino ligado ao Vcc
- Pino GND do Arduino ligado ao GND
- Porta 4 do Arduino ligada ao DIN
- Porta 5 do Arduino ligada ao CS
- Porta 6 do Arduino ligada ao CLK
Seguindo o esquema de ligação acima, você pode tranquilamente adicionar mais módulos e expandir o seu painel.
Programa painel de led com módulo Max7219
Para o programa, vamos utilizar a biblioteca MD_MAX72xx, que pode ser encontrada neste link. Descompacte o arquivo e coloque a pasta MD_MAX72xx dentro da pasta LIBRARIES da IDE do seu Arduino, não esquecendo de reiniciar a IDE para que a nova biblioteca seja reconhecida.
O programa está configurado para usar 2 módulos Max7219. Alterando o valor de MAX_DEVICES, adequamos o programa ao número de módulos conectados.
As variáveis DATA_PIN, CS_PIN e CLK_PIN definem os pinos do Arduino que serão utilizados para conexão. SCROLL_DELAY define a velocidade com que os caracteres serão mostrados, e CHAR_SPACING define o número de colunas que serão usadas como intervalo entre um caracter e outro. Por fim, o comando
mx.control(MD_MAX72XX::INTENSITY, 4);
determina o nível de luminosidade do display.
// Programa : Painel de leds com modulo Max7219
// Adaptacoes e comentarios : Arduino e Cia
// Carrega a biblioteca MD_MAX72xx
#include <MD_MAX72xx.h>
// Numero de modulos utilizados
#define MAX_DEVICES 2
// Ligacoes ao Arduino
#define DATA_PIN 4
#define CS_PIN 5
#define CLK_PIN 6
MD_MAX72XX mx = MD_MAX72XX(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
// Velocidade do scroll
#define SCROLL_DELAY 2000
// Colunas entre cada caracter
#define CHAR_SPACING 1
#define BUF_SIZE 75
char curMessage[BUF_SIZE];
char newMessage[BUF_SIZE];
// int scrollDelay;
uint8_t scrollDataSource(uint8_t dev, MD_MAX72XX::transformType_t t)
{
static char *p = curMessage;
static uint8_t state = 0;
static uint8_t curLen, showLen;
static uint8_t cBuf[8];
uint8_t colData;
switch(state)
{
case 0:
showLen = mx.getChar(*p++, sizeof(cBuf)/sizeof(cBuf[0]), cBuf);
curLen = 0;
state++;
if (*p == '\0')
{
p = curMessage;
}
case 1:
colData = cBuf[curLen++];
if (curLen == showLen)
{
showLen = CHAR_SPACING;
curLen = 0;
state = 2;
}
break;
case 2:
colData = 0;
curLen++;
if (curLen == showLen)
state = 0;
break;
default:
state = 0;
}
return(colData);
}
void scrollText(void)
{
static uint32_t prevTime = 0;
if (millis()-prevTime >= SCROLL_DELAY)
{
mx.transform(MD_MAX72XX::TSR);
prevTime = millis();
}
}
void setup()
{
mx.begin();
mx.setShiftDataInCallback(scrollDataSource);
// Define o nivel de luminosidade
mx.control(MD_MAX72XX::INTENSITY, 4);
// Mensagem a ser exibida
strcpy(curMessage, " Arduino e Cia ");
newMessage[0] = '\0';
}
void loop()
{
scrollText();
}
Abaixo, vídeo do projeto em funcionamento:
Gostou do painel de led com módulo Max7219? Confira outros posts usando módulos MAX7219 aqui mesmo no Arduino e Cia!