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.