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();
}