Painel de LED Matriz 8x16 com Efeitos de Troca de Palavras no Arduino


Introdução

As matrizes de LED são uma forma divertida e criativa de exibir textos e animações com Arduino. Neste projeto, vamos montar um painel 8x16 (utilizando dois módulos 8x8 lado a lado, totalizando 4 módulos no MAX7219) para exibir a palavra ROBERTO, alternando entre duas partes: ROBE e RTO, criando um efeito visual interessante e dinâmico.

Este é um ótimo projeto para quem está começando a trabalhar com módulos MAX7219 e quer entender como manipular colunas e linhas de LEDs.


Materiais Necessários

  • 1 Arduino UNO ou similar

  • 4 módulos de matriz de LED 8x8 com driver MAX7219

  • Jumpers macho-macho

  • Protoboard (opcional)

  • Fonte de alimentação 5V (pode ser USB)


Esquema de Ligações

MAX7219Arduino
VCC5V
GNDGND
DIN11
CLK13
CS10






Código Arduino

#include <LedControl.h> // Pinos: DIN, CLK, CS, quantidade de módulos LedControl lc = LedControl(11, 13, 10, 4); // --- Função para inverter bits verticalmente --- byte inverterBits(byte b) { byte r = 0; for (int i = 0; i < 8; i++) { if (b & (1 << i)) { r |= (1 << (7 - i)); } } return r; } // --- Definição das letras (8x8) --- byte R[8] = {B01111100,B01000010,B01000010,B01111100,B01010000,B01001000,B01000100,B01000010}; byte O[8] = {B00111100,B01000010,B01000010,B01000010,B01000010,B01000010,B01000010,B00111100}; byte B_[8] = {B01111100,B01000010,B01000010,B01111100,B01000010,B01000010,B01000010,B01111100}; byte E[8] = {B01111110,B01000000,B01000000,B01111100,B01000000,B01000000,B01000000,B01111110}; byte T[8] = {B01111110,B00010000,B00010000,B00010000,B00010000,B00010000,B00010000,B00010000}; // --- Mostrar letra em um módulo específico --- void mostrarLetra(byte letra[8], int modulo) { for (int col = 0; col < 8; col++) { byte colData = 0; for (int row = 0; row < 8; row++) { if (letra[row] & (1 << col)) { colData |= (1 << (7 - row)); } } lc.setColumn(modulo, col, colData); } } // --- Mostrar palavra com até 4 letras --- void mostrarPalavra(byte* letras[], int qtd) { for (int i = 0; i < 4; i++) { if (i < qtd) { mostrarLetra(letras[i], 3 - i); // Módulo 3 = mais à esquerda } else { lc.clearDisplay(3 - i); } } } unsigned long tempoTroca = 0; bool mostraPrimeiraParte = true; void setup() { for (int i = 0; i < 4; i++) { lc.shutdown(i, false); lc.setIntensity(i, 5); lc.clearDisplay(i); } } void loop() { if (millis() - tempoTroca > 2000) { // troca a cada 2 segundos tempoTroca = millis(); if (mostraPrimeiraParte) { // Primeira parte: "ROBE" byte* palavra1[] = {R, O, B_, E}; mostrarPalavra(palavra1, 4); } else { // Segunda parte: "RTO" byte* palavra2[] = {R, T, O}; mostrarPalavra(palavra2, 3); } mostraPrimeiraParte = !mostraPrimeiraParte; } }

Como Funciona

  • O código define cada letra como uma matriz de 8 bits.

  • A função mostrarLetra() envia os bits para o módulo correto.

  • A função mostrarPalavra() posiciona cada letra no seu módulo.

  • A cada 2 segundos (millis()), o display alterna entre ROBE e RTO, simulando a exibição de um nome completo.


Possíveis Melhorias

  • Adicionar rolagem suave das letras

  • Criar animações entre as trocas

  • Controlar a intensidade do brilho com botões

  • Exibir hora ou contagem regressiva junto ao texto

Comentários

Postagens mais visitadas deste blog

contador 9999 com pic 16f628

CNC fotos cordenadas x y z dicas

codigo assembler braço mecanico para 5 motores