Início
/
Projetos Arduino
/
Projetos Squids
/
Básico
/
Projeto 76 - Exibir textos com rolagem horizontal (módulo matriz de leds) - Arduino
Projeto 76 - Exibir textos com rolagem horizontal (módulo matriz de leds) - Arduino
Angelo Luis Ferreira | 23/01/2020
Acessos: 4.049
Básico - Projeto 76
Módulo Matriz de Leds MAX7219 - texto com rolagem horizontal
Objetivo
Neste projeto vamos mostrar como criar um efeito "scroll" na exibição de textos em um módulo matriz de leds 8 X 8 - MAX7219. Para isto, vamos alterar o Projeto 74 - Exibindo textos em um módulo matriz de leds MAX7219 com Arduino - otimização, acrescentando o efeito de rolagem horizontal.
Obs1: Para facilitar a programação utilizamos também a biblioteca LedControlMS.h no projeto.
Obs.2: Recomendamos que faça primeiro os projetos Projeto 71 - Como usar o Módulo Matriz de Led 8X8 - MAX7219 com Arduino e Projeto 74 - Exibindo textos em um módulo matriz de leds MAX7219 com Arduino - otimização.
Definições
Módulo Matriz de Led 8X8 - MAX7219 - O módulo Matriz de led 8x8 é um módulo que permite controlar displays de led e transmitir informações para o Arduino de uma forma fácil e prática, ocupando poucas portas do microcontrolador (3 portas + VCC e GND). O módulo possuí um circuito integrado MAX7219 projetado para o acionamento de diversos tipos de displays de led, como uma matriz de led 8X8 por exemplo. Utilizando módulos MAX7219 você poderá ligar vários módulos em série (até 8) criando displays de leds de vários tamanhos.
Aplicação
Para fins didáticos e projetos com efeitos visuais, exibição de textos, imagens ou números.
Componentes necessários
Referência
|
Componente
|
Quantidade
|
Imagem
|
Observação
|
Jumpers |
Kit cabos ligação macho / macho |
1 |
|
|
Módulo Matriz de led |
Módulo Matriz de LED 8 X 8 modelo MAX7219 |
1 |
|
Cor emissão do led: vermelha
Circuito Integrado: MAX7219
Tensão de operação: 5V
Qde. de leds: 64 (8X8)
Matriz: modelo 1088AS com organização interna Linhas (catodo comum) | Colunas (anodo comum)
(datasheet)
Poderá ser utilizado qualquer modelo de matriz 8 X 8
|
Arduino UNO |
Arduino UNO |
1 |
|
Você poderá utilizar uma placa Arduino UNO original ou similar
|
Montagem do Circuito
Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.
Atenção
1. Para a montagem do módulo matriz de leds 8 X 8 basta conectar o módulo com os pinos do Arduino, conforme tabela abaixo:.
Ardunino |
Módulo |
VCC |
VCC |
GND |
GND |
Pino 2 |
DIN |
Pino 3 |
CLK |
Pino 4 |
CS |
2. Veja abaixo como realizamos a montagem do nosso projeto.
Incluindo biblioteca LedControlMS.h no IDE do Arduino
Para obtermos o máximo de funcionalidade do módulo MAX7219 podemos adicionar a biblioteca LedControlMS.h no IDE do Arduino. Com ela podemos acender e apagar leds específicos, criar caracteres, números e até frases de forma muito simples.
Uma das grandes vantagens das placas Arduino é a diversidade de bibliotecas disponíveis que podem ser utilizadas em seus programas. Estas bibliotecas podem ser criadas para a linguagem "C" ou especificamente para o Arduino, reduzindo drasticamente o tempo gasto com programação. Veja a tabela Coletânea de bibliotecas para sensores.
Download dos arquivos da biblioteca LedControlMS.h
DOWNLOAD - Arduino_Led_matrix.zip
Para saber detalhes desta biblioteca clique aqui.
Instalando o header file "alfa.h" - biblioteca com letras e símbolos
1. Para facilitar o trabalho para exibição de frases vamos instalar a biblioteca "alfa,h" que criamos no Projeto 69 - Exibindo frases em uma matriz de LEDs 8 X 8 com Arduino - operadores bit a bit. Esta biblioteca possui o alfabeto alfabeto completo, mas se desejar, crie a sua própria biblioteca.
Para baixar clique no botão abaixo:
DOWNLOAD - alfa.h
3. Coloque o arquivo alfa.h na mesma pasta onde está o sketch principal:
4. No IDE do Arduino, faça a verificação e o upload para o microcontrolador.
Atenção: Observe que deverá aparecer uma aba com o header file alfa.h, como mostra a figura acima. Para visualizar ou alterar o código no IDE basta clicar sobre a aba alfa.h.
5. Para verificar o alfabeto criado pela biblioteca alfa.h, rode o código Arduino abaixo:
/*******************************************************************************
*
* Ler Alfabeto - Matriz de leds 8X8 - MAX7219
* Autor: Angelo Luis Ferreira
* Data: 08/01/2020 (dd/mm/AA)
* http://squids.com.br/arduino
*
*******************************************************************************/
#include "LedControlMS.h"
#include "alfa.h" // incluimos a biblioteca alfa.h
/* Criando o objeto lc
***** Definindo os pinos de conexão do módulo MAX7219 *****
pino 2 conectado no DIN
pino 3 conectado no CLK
pino 4 conectado no CS
N_MTX = 1 - Número de dispositivos (Máximo de 8 módulos MAX7219)
*/
const byte N_MTX = 1;
LedControl lc=LedControl(2,3,4, N_MTX);
const int letters[] = {A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,
COL,DASH,BRA2,_,FULL,CHECK,B2,TEMP,LINE,SMILE,DOT,COLDOT};
const byte letter_len = sizeof(letters)/sizeof(letters[0]); // conta o nº de elementos do array
byte speedCount = 40; //altere para aumentar ou diminuir a velocidade de exibição
void setup() {
for (int i=0; i< N_MTX; i++){
lc.shutdown(i,false);
lc.setIntensity(i,8); /* define o brilho dos leds - médio */
lc.clearDisplay(i); /* limpa o display */
}
}
void loop() {
for(byte count = 0; count < letter_len; count++) {
for (byte a =0; a<=speedCount; a++) {
drawScreen(letters[count]);
}
}
}
void drawScreen(int buffer[]) {
for (int i = 0; i < 8; i++) { // linhas
for (int j = 0; j < 8; j++) { // colunas
lc.setLed(0, i, j, bitRead(buffer[i], 7 - j)); // usando bitRead()
//lc.setLed(0, i, j, (buffer[i] >> 7-j) & 0X01); // usando operador bitwise
}
}
}
6. Veja o vídeo abaixo que mostra como deve ficar a exibição do nosso alfabeto criado pela biblioteca alfa.h:
Sketch do projeto
1. Agora que já vimos como utilizar o módulo matriz de leds MAX7219, vamos ao nosso projeto principal onde exibiremos a frase: "APRENDA COM OS PROJETOS SQUIDS ARDUINO " com efeito de rolagem horizontal
2. Não esqueça de incluir a biblioteca alfa.h no IDE como já mostramos anteriormente.
3. Faça o dowload e abra o arquivo projeto76.ino no IDE do Arduino: DOWNLOAD - projeto76.ino
Ou se preferir, copie e cole o código abaixo no IDE do Arduino:
/*******************************************************************************
**
* Projeto 76 - Exibindo textos com rolagem horizontal - Módulo Matriz MAX7219
* Autor: Angelo Luis Ferreira
* Data: 08/01/2020 (dd/mm/AA)
* http://squids.com.br/arduino
*
*******************************************************************************/
#include "LedControlMS.h"
#include "alfa.h" // incluimos a biblioteca alfa.h
/* Criando o objeto lc
***** Definindo os pinos de conexão do módulo MAX7219 *****
pino 2 conectado no DIN
pino 3 conectado no CLK
pino 4 conectado no CS
N_MTX = 1 - Número de dispositivos (Máximo de 8 módulos MAX7219)
*/
const byte N_MTX = 3;
LedControl lc=LedControl(2,3,4, N_MTX);
char texto[] = " APRENDA COM OS PROJETOS SQUIDS ARDUINO. "; // colocque qualquer frase aqui
// Variáveis usadas para rolagem ambas começam em 0
int index = 0; // Caractere atual a ser mostrado
int shift = 0; // Quantidade de colunas de deslocamento
// Array para armazenar o mapa de bists a ser mostrado
int bitsMap[] = {0,0,0,0,0,0,0,0};
// Vetor contendo a potência de 2 para calcular o que mostrar
const int twoPowers[] = {1,2,4,8,16,32,64,128};
int charachter;
byte speedCount = 2; //altere para aumentar ou diminuir a velocidade de exibição (0 a 20)
void setup() {
for (int i=0; i< N_MTX; i++){
lc.shutdown(i,false);
lc.setIntensity(i,8); /* define o brilho dos leds - médio */
lc.clearDisplay(i); /* limpa o display */
}
}
void loop() {
loadMatrix();
drawScreen(bitsMap);
}
// Carrega o mapa de bits da matriz
void loadMatrix(){
getChar(texto[index]); // Lê o caracter corrente da frase
int currentChar = charachter;
getChar(texto[index+1]); // Lê o próximo caractere
int nextChar = charachter;
executeMatrix(currentChar, nextChar);
}
// Monta o mapa de bits da matriz
void executeMatrix(int currentBuffer[], int nextBuffer[]) {
for(int r=0; r < 8; r++){ // incrementa r para r de 0 a 7 (row - linha)
bitsMap[r] = 0; // resetar a linha
for(int c=0; c < 8; c++){ // incrementa c para c de 0 a 7 (column - coluna)
bitsMap[r] = bitsMap[r] + ((twoPowers[c] & (currentBuffer[r] << shift))); // Carrega o caractere atual compensado pelo deslocamento
bitsMap[r] = bitsMap[r] + (twoPowers[c] & (nextBuffer[r] >> (8 - shift) )); // Carrega o próximo caractere compensado pelo deslocamento
}
}
shift++; // incrementa a variável shift responsável pelo deslocamento de um linha
if(shift==8){
shift = 0;
index++;
if(index == sizeof(texto)-2){
index=0;
}
} // Se shift for igual a 8, carraga o próximo par de carcateres (currentChar e nextCahr)
}
void drawScreen(int buffer[]) {
for (int v = 0; v < speedCount; v++) {
for (int i = 0; i < 8; i++) { // linhas
for (int j = 0; j < 8; j++) { // colunas
lc.setLed(0, i, j, bitRead(buffer[i], 7 - j)); // usando bitRead()
//lc.setLed(0, i, j, (buffer[i] >> 7-j) & 0X01); // usando operador bitwise
}
}
}
}
void getChar(char msgChar) {
switch(msgChar){
case 'A': charachter = A; break;
case 'a': charachter = A; break;
case 'B': charachter = B; break;
case 'b': charachter = B; break;
case 'C': charachter = C; break;
case 'c': charachter = C; break;
case 'D': charachter = D; break;
case 'd': charachter = D; break;
case 'E': charachter = E; break;
case 'e': charachter = E; break;
case 'F': charachter = F; break;
case 'f': charachter = F; break;
case 'G': charachter = G; break;
case 'g': charachter = G; break;
case 'H': charachter = H; break;
case 'h': charachter = H; break;
case 'I': charachter = I; break;
case 'i': charachter = I; break;
case 'J': charachter = J; break;
case 'j': charachter = J; break;
case 'K': charachter = K; break;
case 'k': charachter = K; break;
case 'L': charachter = L; break;
case 'l': charachter = L; break;
case 'M': charachter = M; break;
case 'm': charachter = M; break;
case 'N': charachter = N; break;
case 'n': charachter = N; break;
case 'O': charachter = O; break;
case 'o': charachter = O; break;
case 'P': charachter = P; break;
case 'p': charachter = P; break;
case 'Q': charachter = Q; break;
case 'q': charachter = Q; break;
case 'R': charachter = R; break;
case 'r': charachter = R; break;
case 'S': charachter = S; break;
case 's': charachter = S; break;
case 'T': charachter = T; break;
case 't': charachter = T; break;
case 'U': charachter = U; break;
case 'u': charachter = U; break;
case 'V': charachter = V; break;
case 'v': charachter = V; break;
case 'W': charachter = W; break;
case 'w': charachter = W; break;
case 'X': charachter = X; break;
case 'x': charachter = X; break;
case 'Y': charachter = Y; break;
case 'y': charachter = Y; break;
case 'Z': charachter = Z; break;
case 'z': charachter = Z; break;
case ' ': charachter = _; break;
case '3': charachter = B2; break;
case '<': charachter = TEMP; break;
case '*': charachter = FULL; break;
case '|': charachter = LINE; break;
case '_': charachter = _; break;
case ':': charachter = COL; break;
case '-': charachter = DASH; break;
case ')': charachter = BRA2; break;
case '%': charachter = SMILE; break;
case '.': charachter = DOT; break;
case '^': charachter = COLDOT; break;
}
}
ATENÇÃO: Se a matriz de leds não acender verifique todas as conexões com o Arduino.
Vídeo
Como o projeto deve funcionar
1. Ao iniciar o programa, o módulo matriz de leds MAX7219 irá exibir repetidamente e com rolagem horizontal os caracteres da frase "APRENDA COM OS PROJETOS SQUIDS ARDUINO ".
Desafios
Com base neste projeto, resolva o seguinte desafio: Desafio 63
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários