Painel de led com módulo Max7219 e matriz 8×8

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.

Painel de Led Max7219

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:

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!

3/5 - (2 votos)

Related posts

5 Projetos com o Shield Arduino Multifunções

by Arduino e Cia
7 anos ago

Medidor de distância com sensor ultrassônico HC-SR04

by Arduino e Cia
12 anos ago

Como programar o módulo wireless APC220 com Arduino

by Arduino e Cia
6 anos ago
Sair da versão mobile