Como controlar uma Matriz de LEDs 8 x 8 com Arduino

Neste post será mostrado como como controlar uma Matriz de LEDs 8 x 8 com Arduino, serão apresentados dois exemplos de código de forma a permitir que se utilize o mesmo código para outros projetos com matriz de LEDs, e a mesma lógica pode ser aplicada para quando for necessário a utilização de outros microcontroladores. Para esse projeto será utilizado a plataforma do Arduino e também ser utilizado a Matrix de LEDs 8 x 8 Wantronics.

A primeira coisa que devemos analisar é o diagrama esquemático da matriz de LEDs, que é mostrado abaixo:

Observem que as linhas estão ligadas em todos os catodos dos LEDs e os anodos estão ligados nas colunas da matriz.

Para que a matriz de LEDs funcione corretamente não basta apenas aplicar uma tensão na linha e coluna desejadas, é preciso fazer uma varredura pelas linhas e colunas da matriz, de forma a permitir que apenas o LED desejado seja acionado. Com isso em mente vamos para o nosso primeiro exemplo.

Primeiro exemplo

Neste primeiro exemplo vamos apenas fazer com que os LEDs liguem de forma sequencial, ligando a linha um coluna um, depois linha um coluna dois, e assim sucessivamente até passar por todos os LEDs.

Na tabela abaixo é mostrado a ligação dos terminais do Arduino a Matrix de LEDs 8 x 8 Wantronics.

Observem que quando utilizamos a Matrix de LEDs 8 x 8 Wantronics não é necessário adicionar resistores para limitar a corrente. Outra observação importante é que estamos usando duas entradas analógicas como saídas digitais por falta de GPIOs.

Abaixo é mostrado o código que será gravado no Arduino para controle da matriz de LEDs.

/*
 * Wantronics Matriz de LEDs 8 x 8
 * Ligação das linhas da matriz no Hardware do Arduino
 * L1 -> D0; L8 -> D7
 * 
 * Ligação das colunas da matriz no Hardware do Arduino
 * C1 -> 8; C6 -> 13/ C7 - A0; C87 - A1
 * 
 */

// Linhas
#define row1 0
#define row2 1
#define row3 2
#define row4 3
#define row5 4
#define row6 5
#define row7 6
#define row8 7

// Colunas
#define column1 8
#define column2 9
#define column3 10
#define column4 11
#define column5 12
#define column6 13
#define column7 A0
#define column8 A1

// Variáveis para os laços de repetição
int i = 0;
int j = 0;

// Variáveis das linhas e colunas
int row[] = {row1, row2, row3, row4, row5, row6, row7, row8};
int column[] = {column1, column2, column3, column4, column5, column6, column7, column8};

void setup() {
  // Configuração dos GPIOs como saídas
  pinMode (row1, OUTPUT);
  pinMode (row2, OUTPUT);
  pinMode (row3, OUTPUT);
  pinMode (row4, OUTPUT);
  pinMode (row5, OUTPUT);
  pinMode (row6, OUTPUT);
  pinMode (row7, OUTPUT);
  pinMode (row8, OUTPUT);

  pinMode (column1, OUTPUT);
  pinMode (column2, OUTPUT);
  pinMode (column3, OUTPUT);
  pinMode (column4, OUTPUT);
  pinMode (column5, OUTPUT);
  pinMode (column6, OUTPUT);
  pinMode (column7, OUTPUT);
  pinMode (column8, OUTPUT);

  // Laço que faz com que limpa a matriz
  for (i = 0; i < 8; i++) {
    digitalWrite (row[i], LOW);
    digitalWrite (column[i], HIGH);
  }
}

void loop() {

  for (j = 0; j < 8; j++){
    digitalWrite (row[j], HIGH);
    for (i = 0; i < 8; i++){
      digitalWrite (column[i], LOW);
      delay(50);
      digitalWrite (column[i], HIGH);
      delay(50);
    }
    digitalWrite (row[j], LOW);
    delay (50);
  }
  
 // Laço que faz com que limpa a matriz
  for (i = 0; i < 8; i++) {
    digitalWrite (row[i], LOW);
    digitalWrite (column[i], HIGH);
  }
}

Abaixo é mostrado a simulação no Tinkercad.

abaixo é mostrado o vídeo com os resultados obtidos.

Segundo exemplo

Neste segundo exemplo vamos fazer com que sejam ligados mais LEDs, algo semelhante a um tabuleiro de xadrez. Abaixo é mostrado o código fonte para esse projeto.

/*
 * Ligação das linhas da matriz no Hardware do Arduino
 * L1 -> D0; L8 -> D7
 * 
 * Ligação das colunas da matriz no Hardware do Arduino
 * C1 -> 8; C6 -> 13/ C7 - A0; C87 - A1
 * 
 */

// Linhas
#define row1 0
#define row2 1
#define row3 2
#define row4 3
#define row5 4
#define row6 5
#define row7 6
#define row8 7

// Colunas
#define column1 8
#define column2 9
#define column3 10
#define column4 11
#define column5 12
#define column6 13
#define column7 A0
#define column8 A1

// Variáveis para os laços de repetição
int i = 0;
int j = 0;

// Variáveis das linhas e colunas
int row[] = {row1, row2, row3, row4, row5, row6, row7, row8};
int column[] = {column1, column2, column3, column4, column5, column6, column7, column8};

// Displays numbers
int matrix[8][8] { // A  B  C  D  E  F  G
                     {0, 1, 0, 1, 0, 1, 0, 1}, // 0
                     {1, 0, 1, 0, 1, 0, 1, 0}, // 1
                     {0, 1, 0, 1, 0, 1, 0, 1}, // 2
                     {1, 0, 1, 0, 1, 0, 1, 0}, // 3
                     {0, 1, 0, 1, 0, 1, 0, 1}, // 4
                     {1, 0, 1, 0, 1, 0, 1, 0}, // 5
                     {0, 1, 0, 1, 0, 1, 0, 1}, // 6
                     {1, 0, 1, 0, 1, 0, 1, 0}, // 7
                  };

void setup() {
  // Configuração dos GPIOs como saídas
  pinMode (row1, OUTPUT);
  pinMode (row2, OUTPUT);
  pinMode (row3, OUTPUT);
  pinMode (row4, OUTPUT);
  pinMode (row5, OUTPUT);
  pinMode (row6, OUTPUT);
  pinMode (row7, OUTPUT);
  pinMode (row8, OUTPUT);

  pinMode (column1, OUTPUT);
  pinMode (column2, OUTPUT);
  pinMode (column3, OUTPUT);
  pinMode (column4, OUTPUT);
  pinMode (column5, OUTPUT);
  pinMode (column6, OUTPUT);
  pinMode (column7, OUTPUT);
  pinMode (column8, OUTPUT);

  // Laço que faz com que limpa a matriz
  for (i = 0; i < 8; i++) {
    digitalWrite (row[i], LOW);
    digitalWrite (column[i], HIGH);
  }
}

void loop() {

  for (j = 0; j < 8; j++){
    digitalWrite (row[j], HIGH);
    for (i = 0; i < 8; i++){
      digitalWrite (column[i], !matrix[j][i]);
    }
    for (i = 0; i < 8; i++){
      digitalWrite (column[i], HIGH);
    }
    digitalWrite (row[j], LOW);
  }
  
 // Laço que faz com que limpa a matriz
  for (i = 0; i < 8; i++) {
    digitalWrite (row[i], LOW);
    digitalWrite (column[i], HIGH);
  }
  

}

Abaixo é mostrado a simulação no Tinkercad.

abaixo é mostrado o vídeo com os resultados obtidos.

Com isso concluímos nosso post, em um próximo post será mostrado como escrever uma mensagem na matriz de LEDs.

https://www.tinkercad.com/