Projeto 76 - Exibir textos com rolagem horizontal (módulo matriz de leds) - Arduino

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

×

Infomações do site / SEO








×

Adicionar Marcadores