Projeto 74 - Exibindo textos em um módulo matriz de leds MAX7219 com Arduino - otimização

Básico - Projeto 74

Módulo Matriz de Leds 8 X 8 - MAX7219 - otimizando o código

Objetivo

Mostraremos neste projeto como otimizar códigos para a utilização de um módulo matriz de leds 8 X 8 - MAX7219. Para isto, vamos utilizar a representação binária para cada linha da matriz e através do comando bitRead() podemos otimizar a programação para facilitar a exibição de caracteres alfanuméricos e símbolos no módulo.

No projeto Projeto 71 - Como usar o Módulo Matriz de Led 8X8 - MAX7219 com Arduino, utilizamos muitos códigos para representar a letra "M", por exemplo. Neste tutorial você verá como fazer isso de um forma bem mais simples.

Obs1: Para simplificarmos a programação utilizamos neste projeto a biblioteca LedControlMS.h.

Obs2: Como já mostramos no Projeto 71 - Como usar o Módulo Matriz de Led 8X8 - MAX7219 com Arduino, a biblioteca LedControlMS.h possui seus próprios caracteres alfanuméricos (caracteres nativos). Entretanto, este tutorial irá dar dicas para você criar novos tipos de letras e símbolos que poderão ser armazenados em uma biblioteca própria.

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

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 830 pontos

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 R3 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 a biblioteca pelo IDE do Arduino

Após fazer o download do arquivo Arduino_Led_matrix.zip com todos os arquivos da biblioteca compactados no formato zip, abra o IDE do Arduino e siga o tutorial: Como incluir uma biblioteca no IDE do Arduino.

Usando o módulo MAX7219 com a biblioteca LedControlMS.h

Para saber como utilizar a biblioteca LedControlMS.h leia o tutorial: Projeto 71 - Como usar o Módulo Matriz de Led 8X8 - MAX7219 com Arduino

Desenhando a letra "M" - utilizado a configuração binária

1. Como vimos nos projetos anteriores, a matriz de leds funciona com o cruzamento entre linhas e colunas.

1.1. A linhas devem ser identificadas de 0 a 7, de cima para baixo, e as colunas de 0 a 7 da esquerda para a direita:

2. Também vimos no projeto Projeto 71 - Como usar o Módulo Matriz de Led 8X8 - MAX7219 com Arduino que para exibir um caractere criado por nós precisávamos informar cada led aceso. (Obs.: quando não utilizamos os caracteres nativos da biblioteca LedControlMS.h).

3. Para identificar as linhas e colunas de um caractere qualquer vamos utilizar o aplicativo Led Matrix Editor.

3.1. Utilizamos o aplicativo para convertermos o desenho em valores binários. Veja a nossa letra "M" desenhada no aplicativo:

4. Entenda a baixo como é feita a transformação binária:

4.1. Lembre-se, o prefixo "B" deverá ser incluído em um número binário entre 0 (B0) e 255 (B11111111). Leia Constantes Inteiras - Documentação de Referência Arduino.

5. Com as informações acima, podemos definir a M como um array que contém todos valores binários de cada linha da matriz de leds, sendo:

6. Agora teremos apenas que fazer a leitura de cada bit, por linha, e informar para o módulo qual led deve ficar aceso. Para isso, vamos utilizar os operadores booleans true ou false (0 ou 1).

6.1. Utilizando a função bitRead():

6.1.1. A função bitRead() lê o valor do bit e retorna 0 ou 1.

6.1.1.1. Sintaxe da função: bitRead(x, y), onde:

a) x = byte onde está o bit. O byte no exemplo do Array "M" é definido pelas linhas da matriz, variando de 0 a 7, de cima para baixo.

b) y = bit a ser lido. Começando em 0 para o bit mais à direita.

7. Com as definições acima e com o método setLed() da biblioteca LedControlMS.h podemos varrer todas as linhas (bytes) e colunas (bits) da nossa letra "M". Veja como podemos otimizar o código para realizarmos a leitura de todos os bits, e ativar o led quando o valor for 1, sendo:

7.1 Sintaxe da função setLed(número do dispositivo, linha, coluna, 0 ou 1), se 1 o led é ativado:

8. Veja o código abaixo, onde utilizamos a representação binária com a função bitRead() para exibirmos a letra "M" em um módulo de matriz de leds:

/*******************************************************************************
*
*             Desenhando a letra "M"
*             Autor: Angelo Luis Ferreira
*             Data: 07/01/2020 (dd/mm/AA)
*                        http://squids.com.br/arduino
*
*******************************************************************************/
#include "LedControlMS.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 byte M[] = {
  B10000001,
  B11100111,
  B10111101,
  B10011001,
  B10000001,
  B10000001,
  B10000001,
  B10000001
};

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

void  drawScreen(byte 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
    }
  }
}

9. Nota do Autor:

9.1. Para ampliarmos o nosso conhecimento, é importante lembrar que podemos substituir a função bitRead() apresentada a cima, pelos operadores Bitwise (bit a bit):

9.1.1. Operadores Bitwise (bit a bit) são utilizados quando precisamos realizar operações a nível de bits com números inteiros, ou seja, trabalhar com sua representação binária. Para saber tudo sobre operadores bitwise, leia o artigo Operadores Bitwise (Bit-a-Bit) do blog Diogo Matheus.

9.1.1.1. No Projeto 69 - Exibindo frases em uma matriz de LEDs 8 X 8 com Arduino - operadores bit a bit fizemos uma breve explicação de como utilizar estes operadores.

9.1.2. Utilizando a sintaxe da função setLed(número do dispositivo, linha, coluna, 0 ou 1), podemos otimizar o código para realizarmos a leitura de todos os bits, e ativar o led quando o valor for 1, sendo:

9.2. É importante você fazer o teste com as duas soluções.

Criando e instalando o header file "alfa.h" - biblioteca com letras e símbolos

1. Para facilitar o trabalho para exibição de frases, podemos criamos uma biblioteca com todas letras do nosso alfabeto, números e até símbolos. Portanto, você poderá criar a sua própria biblioteca, ou, se desejar, utilizar a biblioteca "alfa,h" que já criamos no Projeto 69 - Exibindo frases em uma matriz de LEDs 8 X 8 com Arduino - operadores bit a bit.

2. 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 com operadores bitwise e biblioteca com caracteres, vamos ao nosso projeto principal onde exibiremos a frase: "APRENDA COM OS PROJETOS SQUIDS ARDUINO ".

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 projeto74.ino no IDE do Arduino:  DOWNLOAD - projeto74.ino

Ou se preferir, copie e cole o código abaixo no IDE do Arduino:

/*******************************************************************************
**                
*               Projeto 74 - Exibindo textos - Módulo Matriz MAX7219 - Código otimizado
*               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

const byte texto_len = sizeof(texto); // conta o número de caracteres do texto
int charachter;   
byte speedCount = 10; //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 < texto_len; count++) {
     for (byte a =0; a<=speedCount; a++) {
      getChar(texto[count]);                   
      drawScreen(charachter);   
      } 
  }
}

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
    }
  }
}

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 os caracteres da frase "APRENDA COM OS PROJETOS SQUIDS ARDUINO ".

Desafios

Com base neste projeto, resolva o seguinte desafio:  Desafio 61

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores