Como usar o módulo Max7219 com 4 matrizes 8×8
Hoje vamos conhecer um módulo Max7219 diferente, composto por 4 matrizes de led 8×8, ideal para formação de painéis e letreiros, que podem ser usados para propaganda, painel de avisos, relógios, contadores e outras aplicações.
O módulo display 4 matrizes de led 8×8 com Max7219 que vamos usar aqui segue a mesma ideia de um outro painel que mostrei anteriormente, no post Painel de Leds com Max7219, mas na ocasião usei apenas 2 módulos, que foram interligados manualmente.
O módulo Max7219 com 4 matrizes
Neste módulo com 4 matrizes de led 8×8 temos também 4 CI´s Max7219, cada um controlando uma matriz. Se retirarmos a matriz do soquete, podemos ver logo embaixo dela o CI controlador:
Repare também na inscrição FC-16 gravada na placa. Ela será útil em breve.
As quatro partes do módulo estão interligadas, ou seja, compartilham os pinos Vcc, GND, DIN/DOUT, CS e CLK. Esses três últimos são os pinos de controle, e permitem o controle total das matrizes, que podem funcionar em conjunto ou individualmente.
As setas na parte de baixo, onde podemos ver a inscrição IN/OUT mostram o sentido dos dados do display (entram pelo DIN, saem pelo DOUT). No lado direito da imagem acima temos os pinos sem conexão, que podem ser usados para soldagem de uma barra de pinos e conectados à outro módulo Max7219 com 4 matrizes, formando painéis maiores.
Conexão do módulo Max7219 no Arduino Uno
A conexão do módulo é feita por 3 pinos de controle: DIN, CS e CLK, conectados aos pinos digitais 4, 5 e 6 respectivamente. O pino Vcc deve ser ligado à uma fonte de alimentação 5V (vamos utilizar o pino 5V do Arduino Uno), assim como o pino GND.
Essa parte de conexão não tem segredos, então vamos partir para a instalação da biblioteca e programação.
Instalação e configuração da biblioteca MD_MAX72XX
Nos programas a seguir, vamos usar a biblioteca MD_MAX72XX, baixando-a pela própria IDE do Arduino. Vá até o menu Sketch -> Instalar Biblioteca -> Gerenciar Bibliotecas e procure por MD_MAX72XX, clicando em seguida em Instalar:
Depois da instalação, temos que fazer uma pequena alteração nesta biblioteca para que ela funcione com o módulo que estamos utilizando, o tal FC-16 que vimos no início deste post.
Procure pelo arquivo MD_MAX72XX.h, que foi instalado (provavelmente) no caminho DocumentosArduinoLibrariesMD_MAX72XXsrc:
Com o editor de textos da sua preferência, abra esse arquivo e encontre a linha com o seguinte código:
#define USE_FC16_HW 0
Substitua o valor 0 por 1, salve o arquivo e a biblioteca estará pronta para ser utilizada.
Vamos agora testar o funcionamento do módulo Max7219 com Arduino realizando um teste com o bom e velho scroll.
Programa Scroll com módulo Max7219 4 matrizes
O programa abaixo realiza um scroll horizontal no display, ou seja, temos uma mensagem (configurável na linha 83 do programa) que se moverá do lado direito para o lado esquerdo do display.
Na linha 8 configuramos o número de matrizes de led que estamos usando (no caso, 4), e nas linhas de número 11, 12 e 13 indicamos os pinos de conexão que serão usados pelo Arduino para controlar o módulo: pinos digitais 4 (conectado ao DIN), 5 (conectado ao CS) e 6 (conectado ao CLK).
// Programa: Scroll com modulo Max7219 4 digitos // Autor: Arduino e Cia // Carrega a biblioteca MD_MAX72xx #include <MD_MAX72xx.h> // Numero de modulos utilizados #define MAX_DEVICES 4 // 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 120 // Colunas entre cada caracter #define CHAR_SPACING 1 #define BUF_SIZE 75 char curMessage[BUF_SIZE]; char newMessage[BUF_SIZE]; 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::TSL); 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(); }
Experimente usar também este módulo Max7219 com placas como Raspberry Pi e módulos ESP8266.
Olá. Excelente postagem . Muito importante a dica do FC-16. Seria bom também explicar o que diferencia de outros módulos.
Olá Adilson como vai?
Estou a vários dias tentando fazer esse.modilo funcionar pra escrever sobre ele no.meu site sem sucesso. Mas graças às suas informações consegui! Será que vc me autoriza a utilizar algumas informações daqui para que eu posso fazer o meu artigo? Desde já muito obrigado!
Oi Márcio!
Claro, fique à vontade. Se puder colocar um link para o artigo original, agradeço. 🙂
Abraço!
Adilson
Oi, ja tem varios dias que estou tentando configurar o meu e nao da certo, fica ao contrario o texto, ja tentei as dicas dos comentarios abaixo e nao consegui, talvez seja pq meu arduino é o leonardo e nao o uno, ou talvez seja pq o meu nao seja o fc16 como diz no post, mas tbm nao da para remover o display para ver qual é o chip , pq ele é soldado. 🙁
Olá Adilson tudo bem?
faz vários dias, que estou pelejando com essa matriz, pra escrever um artigo, finalmente consegui graças ao seu post.
você me daria permissão de publicar no meu site uma adaptação desse seu artigo? queria usar algumas imagens também, bem como mencionar um link pro seu artigo dando os créditos.
desde já agradeço!
Oi Márcio,
Antes de mais nada peço desculpas pela demora além do normal, pq o sistema não estava liberando os comentários.
Permissão concedida! 🙂
Abraço e obrigado!
Adilson
Estou utilizando 2 módulos não identificados com o 16 e sim display. ao ligar os caracteres estão invertidos com se espelhados. o que devo alterar tenho um versa anterior do Arduino e Cia que funciona porém, nao mostra todo o texto no display antes de concluir inicia outra impressão sem reséitar a qu está iniciada.
Oi Carlos,
Tente usar a dica do Sergio (comentário abaixo), e mudar o valor da variável #define USE_OTHER_HW 0.
Abraço!
Adilson
com 2 módulos de 4 ( 8 x 32 ) como ficariam as modificações. Retirei a matriz de leds e não tem impresso FC-16.
Grato pela atenção.
Tive que mudar "#define USE_OTHER_HW 0" senão o texto fica invertido.
Obrigado
Oi Sérgio,
Legal. Valeu a dica! 🙂
Abraço!
Adilson
Olpa, qual o programa que utilizam para fazer esta simulação de cores fantasia, como as das imagens que vocês postam???????w
Ola
Primeiramente, agradecer este seu post, muito bom, como todos os outros.
Queria colocar uma questão, para ligar o Esp 8266 NodeMcu, as únicas alterações ao código são…
#define DATA_PIN D2
#define CS_PIN D1
#define CLK_PIN D5
estive colocando assim pela relação dos pins, D2 —4 D1 — 5 o outro coloquei arbitrariamente, o que não teve resultado.. Pode ajudar Obrigado
Já funciona com o NodeMcu. Obgdo
Valeu Fernando! Abraço
Adilson
o meu sempre da o erro abaixo, alguem sabe o que é:
Como_usar_o_modulo_Max7219_em_4X8.ino:15:66: error: invalid conversion from 'int' to 'MD_MAX72XX::moduleType_t' [-fpermissive]
MD_MAX72XX mx = MD_MAX72XX(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
resolvi removendo as bibliotecas MD_MAX72XX e instalando de novo
Boa tarde estou com 2 problemas, no primeiro a mensagem fica limitada a 30 caracteres não consigo escrever mais simplesmente , caso escreva 31 caracteres simplesmente nada é apresentados nas matrizes de led ?
No segundo não consigo colocar os dois modulos em serie pois ao começar a escrever no segundo modulo a um emparalhamento nos caracteres , já cheguei a linha que define o número de modulos e esta correta 8 ?
Oi Luiz,
Estranho isso. Você está usando algum caracter especial no meio do texto? Quanto ao número de módulos, está correto. Coloque o número 8 na linha 8 do programa (#define MAX_DEVICES).
Abraço!
Adilson
Ola.
Souu novo nestas coisas embora velho na idade ja ca vou nos 70.agora na minha velhice resolvi passar o meu tempo tentando brincar com o arduino e tentar fazer um relogio mas ja ando a mais de um mes e nao consigo pogramar.estou a utilizar um arduino uno uma matriz de ledes 4×8×8.Alguem me poderia enviar o pograma ja pronto a eu colocar no arduino e pogramar o respetivo relogio?ficava agradecido.um abraço a todod
Eu tenho uma sugestão: Fazer esse mesmo projeto mas, usando um controle remoto IR; Obrigado
Oi Dancopy! 🙂
Legal. Cada botão mostrando um número? como um painel de senhas?
Abraço!
Adilson
Ou, definir algumas teclas para envio de mensagens diferentes.
Gostaria de aplicar num painel led 3 mensagens accionadas por um buton como faço isso….
Oi Nelson,
Dê uma olhada neste post, creio que tenha o que você precisa: https://www.arduinoecia.com.br/painel-de-senhas-com-arduino-max7219/
Saudações!
Adilson
Obrigado pelo post!!! Não estava compilando, alterei a linha para while (*p != ‘\0’) e agora está funcionando perfeitamente!!! 🙂
Valeu Messias!
Abraço! 🙂
Adilson
Bom dia. Estou recebendo o erro empty character constant na linha if (*p == ”);
Alguem pode me ajudar?
Oi Delfinson,
Era na linha 40, certo? Já arrumei o código, veja se funciona, por favor.
Abraço!
Adilson
Boa Tarde. Agora estou recebendo o erro “empty character constant” na linha 84 – newMessage[0] = ”; .Toda ajuda será bem-vinda.
Adilson, obrigado pela ajuda. a crescentei a \ antes do 0 na linha 84 e funcionou perfeitamente.
Obrigado Delfinson!
Vou corrigir o código. 🙂
Abraço!
Adilson
Parabéns pelo site e pelo post. Sou iniciante em arduíno e gostaria de saber como fazer uma placa de substituição de futebol (parecida com aquela que eles utilizam no jogos) com fita de led ou com vários leds. Vc conseguiria me dar uma explicação ou quem sabe fazer este projeto e postar no seu site?
Oi Itamar,
Boa sugestão de projeto, vou pesquisar.
Abraço!
Adilson
Gostaria de utilizar o scroll com minha frase e logo em seguida entrar a hora certa (relógio), e fazer esse loop. Como fazer para inserir o relógio nessa programação? Obrigado