Módulo Matriz 8x8 - CI MAX7219
Podemos ligar 8 CI's em série, ou seja, podemos utilizar o Arduino para controlar até 8 Matriz de 64 Leds
Diagrama com as ligações interna s de uma Matrix 8x8
Diagrama da simulação usando apenas 3 portas do Arduino.
Porta 10 do Arduino ligada ao pino LOAD
Porta 11 do Arduino ligada ao pino DIN
Porta 13 do Arduino ligada ao pino CLK
Demonstração
Sketch
/*
Painel de leds com modulo de Matriz Max7219
Zedequias Fonseca
http://vfeletronica.blogspot.com.br/
10/10/2014
*/
// Carrega a biblioteca MD_MAX72xx
#include <MD_MAX72xx.h>
// Numero de modulos suportados de 1 a 8 Devices
#define MAX_DEVICES 3 // Usaremos 3 Modulos
// Portas do Arduino
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
// Cria matriz ( mx )
MD_MAX72XX mx = MD_MAX72XX(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
#define SCROLL_DELAY 200 // Velocidade do scroll
#define CHAR_SPACING 1 // Colunas entre cada caracter
#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::TSR);
prevTime = millis();
}
}
void setup()
{
mx.begin(); // inicia a matriz
mx.setShiftDataInCallback(scrollDataSource);
mx.control(MD_MAX72XX::INTENSITY, 4); // Define o nivel de luminosidade
// Mensagem a ser exibida
strcpy(curMessage, "Zedequias Fonseca - 1 2 3 4 5 6 7 8 9 0 - A B C D E F . ");
newMessage[0] = '\0';
}
void loop()
{
scrollText();
}
MD_MAX72XX mx = MD_MAX72XX(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
#define SCROLL_DELAY 200 // Velocidade do scroll
#define CHAR_SPACING 1 // Colunas entre cada caracter
#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::TSR);
prevTime = millis();
}
}
void setup()
{
mx.begin(); // inicia a matriz
mx.setShiftDataInCallback(scrollDataSource);
mx.control(MD_MAX72XX::INTENSITY, 4); // Define o nivel de luminosidade
// Mensagem a ser exibida
strcpy(curMessage, "Zedequias Fonseca - 1 2 3 4 5 6 7 8 9 0 - A B C D E F . ");
newMessage[0] = '\0';
}
void loop()
{
scrollText();
}
Link Caido "Download - Biblioteca MD_MAX72xx" !!!
ResponderExcluirO link foi atualizado, Obrigado....
ExcluirOlá Zedequias, olhei um exemplo que fizestes em seu blog, se trata da tela matricial. porém na simulação as letras aparecem na vertical, mas quando carrega o código em um arduino e se faz as ligações corretamente a tela exibe as letras na forma horizontal, poderia me explicar se é possivel usar essa mesma biblioteca e exibir as letras na forma vertical?
ResponderExcluirAirton, olhe o vídeo no link abaixo estão usando a biblioteca MaxMatrix. Testei com Arduino 106.
ResponderExcluirhttps://www.youtube.com/watch?v=0eGALqU0Ld0&feature=youtu.be
Gostei muito do seu trabalho e testei para meu aprendizado eu gostaria de saber como eu faço para inverter o modo de exibição da letra quando carrego o código ele escreve na vertical e gostaria de escrever na horizontal como no outro vídeo como faço isso poderia me ajudar por favor, Muito obrigado desde já contato Email: callfraga@gmail.com
ResponderExcluirAinda não consegui rodar. Aparece a mensagem abaixo:
ResponderExcluirC:\Program Files (x86)\Arduino\libraries\MD_MAX72xx\src/SPI.h:45:21: fatal error: variant.h: No such file or directory
#include "variant.h"
Antonio, realmente a versão atual da library MD_MAX72xx apresentou alguns erros da compilação nos testes que fiz. Faça download do projeto novamente e reinstale a lib MD_MAX72xx. Agora inclui a versão da lib MD_MAX72xx que estou usando. Testado com sucesso nas seguintes IDEs do Arduino : 105, 106, 158, 161, 162Rc1, 164, 165r2, 167 e 168. Obrigado observação.
ResponderExcluirOlá,
ResponderExcluirTentámos este projeto funcionando muito bem em hardware e software tanto :) Mas eu quero perguntar como eu posso parar a rolagem de texto ? se eu quiser colocar um texto estático em dotmatrix ! Por favor ajude.
Antonio posso enviar um exemplo que talvez ajude. Segue meu e-mail para contato:
ResponderExcluirzedequias.fonseca@gmail.com
Abraços.
i lhe enviou verifique caixa de entrada
ExcluirOk. Enviei o exemplo.
ResponderExcluirO meu projeto funciona porém está repetindo a mesma frase em cada um dos displays ao mesmo tempo. Estou com 4 displays que são interligados entre si de fábrica. Alguma solução?
ResponderExcluirInfelizmente não posso ajuda-lo, pois os meus testes foram somente com o módulo das fotos acima.
ExcluirParabéns, funciona bem.
ResponderExcluirParabéns e sucesso.Atitude nobre compartilhar conecimento.
ResponderExcluir