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.
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!
Olá amigo, muito obrigado pelo post; liguei com 2 módulos e funcionou perfeito! Tenho 3 perguntas:
1) Até com quantos módulos pode funcionar?
2) Como mostrar e rolar as mensagens lateralmente, visto que os 5 terminais (pernas) dos módulos impedem de encostá-los um ao outro, como vc mesmo mostrou no vídeo, me entendeu?
3) Tem como mostrar outros símbolos, por exemplo, setas, etc.?
Obrigado
Boa tarde,
1 – Não consegui testar ainda o número máximo de módulos, mas creio que o número máximo seja 8.
2 – Uma alternativa para melhorar essa rolagem lateral é você soldar diretamente os módulos, um ao lado do outro, retirando os pinos originais.
3 – É possível sim, mas aí seria necessário mexer no programa e criar o array de caracteres, como eu fiz nesse post :
http://www.arduinoecia.com.br/2013/08/modulo-matriz-de-leds-8×8.html
Infelizmente eu ainda não tenho isso pronto para funcionar com dois ou mais módulos, mas futuramente posso gerar um post com caracteres customizados.
Abraço !
Gostaria de agradecer pelo excelente post. Comprei 3 modulos e gerei o programa e tudo OK. Gostaria de enfatizar a 2 pergunta no dancopy, pois se juntarmos as matrizes, nao teria um "buraco" entre elas. Tem algum comando que faca o scrool na vertical ?
Boa tarde,
Eu que agradeço a visita, e espero que retorne. 🙂
Realmente esse tipo de módulo fica um pouco estranho se juntar, mas para fins didáticos, ele quebra o galho. Existe um outro tipo de módulo, que se não me engano o max7219 fica embaixo da matriz, o que facilitaria a criação de um painel mais "profissional".
Quanto ao scroll vertical, ainda não tenho nada, mas é uma ótima idéia para um novo post.
Abraço !
fica aqui um link em que é possivel colocar os modulos lado a lado com scoll no sentido " vertical"
do modulo
http://arduinobymyself.blogspot.com.br/2013/07/matriz-de-pontos-max7219.html
Gostei disso. 🙂
Abraço e obrigado !
Obrigado Anônimo!
Abraço
Parabéns pelo ótimo post. Alguém sabe como fazer a rolagem de texto pra cima, pra baixo e pra direita ? Tentei de várias formas e não obtive êxito . sou novato no mundo arduino. Desde já agradeço pela atenção de todos.
O MEU NÃO DEU CERTO.
parabéns pelo post, pode me dar uma força sou bem leigo e estou tentando fazer o seguinte, fazer com que seja escrito na Matrix um texto recebido de um cartao de memoria, não esta funcionando segue parte do codigo onde faz esta função;
myFile = SD.open("texto1.txt");
if (myFile) {
scrollText();
while (myFile.available()) {
texto = (myFile.read());
strcpy(curMessage,texto);
newMessage[0] = '