Controle de Matriz de LED 8×8 com Arduino Nano — Sem Drivers ou Bibliotecas
Componentes e Materiais
- Arduino Nano R3 × 1
- Display Matriz de LED 8×8 (Cátodo Comum 1088AS) × 1
- Resistor 330 Ω (furo passante) × 1
Sobre este Projeto
Este tutorial mostra como controlar uma matriz de LED 8×8 1088AS de cátodo comum sem chips drivers como MAX7219 e sem bibliotecas correspondentes.
Em breve criarei um segundo tutorial usando MAX7219 para comparação.
Tutorial completo: Patreon | PayPal
Código
1. Testando todos os 64 LEDs da matriz 8×8
// Mario's Ideas
// Testando todos os 64 LEDs da matriz 8x8 acendendo um a um
// Linhas
#define R1 2 #define R2 3 #define R3 4 #define R4 5
#define R5 6 #define R6 7 #define R7 8 #define R8 9
// Colunas
#define C1 10 #define C2 11 #define C3 12 #define C4 13
#define C5 A0 #define C6 A1 #define C7 A2 #define C8 A3
void setup() {
// Configura todos os pinos como saída
for (int p = 2; p <= 13; p++) pinMode(p, OUTPUT);
for (int p = A0; p <= A3; p++) pinMode(p, OUTPUT);
// Apaga todos os LEDs no início (cátodo comum: linha HIGH=off, coluna LOW=off)
for (int p = 2; p <= 9; p++) digitalWrite(p, HIGH);
for (int p = 10; p <= 13; p++) digitalWrite(p, LOW);
for (int p = A0; p <= A3; p++) digitalWrite(p, LOW);
}
void SelectRow(int row) {
// Ativa uma linha (LOW) e desativa as outras (HIGH)
for (int r = 1; r <= 8; r++) {
int pin = (r <= 8) ? (r + 1) : 0; // R1=2, R2=3... R8=9
digitalWrite(pin, (r == row) ? LOW : HIGH);
}
}
void SelectColumn(int column) {
// Ativa uma coluna (HIGH) e desativa as outras (LOW)
int pins[8] = {10, 11, 12, 13, A0, A1, A2, A3};
for (int c = 0; c < 8; c++) {
digitalWrite(pins[c], (c + 1 == column) ? HIGH : LOW);
}
}
void loop() {
for (int i = 1; i < 9; i++) {
for (int j = 1; j < 9; j++) {
SelectRow(i);
SelectColumn(j);
delay(100);
}
}
}
2. Exibindo imagem de gato na matriz 8×8 (Multiplexação)
// Mario's Ideas - Exibindo imagem de gato na matriz 8x8 (Multiplexação)
#define R1 2 #define R2 3 #define R3 4 #define R4 5
#define R5 6 #define R6 7 #define R7 8 #define R8 9
#define C1 10 #define C2 11 #define C3 12 #define C4 13
#define C5 A0 #define C6 A1 #define C7 A2 #define C8 A3
int pause = 300;
int Cat[8][8] = {
{1,0,0,0,1,0,0,0},
{1,1,1,1,1,0,0,0},
{1,0,1,0,1,0,0,0},
{0,1,1,1,0,0,0,1},
{0,0,1,0,0,0,0,1},
{0,1,1,1,1,0,0,1},
{0,1,1,1,1,1,0,1},
{1,0,1,1,1,1,1,0}
};
void setup() {
for (int p = 2; p <= 13; p++) pinMode(p, OUTPUT);
for (int p = A0; p <= A3; p++) pinMode(p, OUTPUT);
for (int p = 2; p <= 9; p++) digitalWrite(p, HIGH);
for (int p = 10; p <= 13; p++) digitalWrite(p, LOW);
for (int p = A0; p <= A3; p++) digitalWrite(p, LOW);
}
void SelectRow(int row) {
int pins[8] = {2,3,4,5,6,7,8,9};
for (int r = 0; r < 8; r++) digitalWrite(pins[r], (r == row-1) ? LOW : HIGH);
}
void Set_LED_in_Active_Row(int column, int state) {
int pins[8] = {10,11,12,13,A0,A1,A2,A3};
digitalWrite(pins[column-1], state);
}
void loop() {
for (int j = 0; j < 8; j++) {
SelectRow(j+1);
for (int i = 0; i < 8; i++) {
Set_LED_in_Active_Row(i+1, Cat[j][i]);
}
delay(2 + pause);
}
if (pause != 0 && pause > 100) pause -= 100;
else if (pause != 0 && pause <= 100) pause -= 10;
}
3. Texto rolante na matriz 8×8 (Multiplexação)
// Mario's Ideas - Texto rolante na matriz 8x8 (Multiplexação)
#define R1 2 #define R2 3 #define R3 4 #define R4 5
#define R5 6 #define R6 7 #define R7 8 #define R8 9
#define C1 10 #define C2 11 #define C3 12 #define C4 13
#define C5 A0 #define C6 A1 #define C7 A2 #define C8 A3
int position = 0;
// Matriz 8x54 com padrão de texto "Marios_ideas"
int Marios_ideas[8][54] = { /* dados omitidos por brevidade */ };
void setup() {
for (int p = 2; p <= 13; p++) pinMode(p, OUTPUT);
for (int p = A0; p <= A3; p++) pinMode(p, OUTPUT);
for (int p = 2; p <= 9; p++) digitalWrite(p, HIGH);
for (int p = 10; p <= 13; p++) digitalWrite(p, LOW);
for (int p = A0; p <= A3; p++) digitalWrite(p, LOW);
}
void SelectRow(int row) {
int pins[8] = {2,3,4,5,6,7,8,9};
for (int r = 0; r < 8; r++) digitalWrite(pins[r], (r == row-1) ? LOW : HIGH);
}
void Set_LED_in_Active_Row(int column, int state) {
int pins[8] = {10,11,12,13,A0,A1,A2,A3};
digitalWrite(pins[column-1], state);
}
void loop() {
for (int x = 0; x < 5; x++) {
for (int j = 0; j < 8; j++) {
SelectRow(j+1);
for (int i = 0; i < 8; i++) {
int idx = (i + position) - abs((i + position) / 54) * 54;
Set_LED_in_Active_Row(i+1, Marios_ideas[j][idx]);
}
delay(2);
}
}
position++;
}
Esquemático
Processo de manufatura
- Diodos Emissores de Luz: Da Incepção a Vida Útil de 100 Anos
- Drivers LED MAX25610A/B da Maxim: Compactos, Alta Eficiência, Otimizados para EMI em Iluminação Automotiva e Industrial
- Projeto Arduino: Melodia Coffin Dance – Construa e Toque a Música Viral
- Construa um Console Pong 24×16 LED com Arduino Nano e MAX7219
- Display Interativo de Matriz LED na Porta com Sensor PIR – Saudação de Férias Arduino
- Display de Luz com 8 LEDs Ativado por Som
- Construa um Robô Quadrúpede Inteligente com Arduino: Guia Passo a Passo
- Lâmpada Matriz LED DIY com Bastões de Cola Quente – Crie Seu Próprio Display Colorido
- Controle Suave de Brilho de LED com Bolt IoT e Arduino UNO
- Controle de Matriz de LED 8×8 com Arduino Nano — Sem Drivers ou Bibliotecas