A matriz 8×8 LED tem 8 filas e 8 colunas de LEDs controláveis individualmente. As matrizes LED podem ser utilizadas para sinalização publicitária, exposição de temperatura e outras aplicações.
Material
- Computador
- Arduino UNO
- Cabo USB A Masculino
- matriz de LEDs
Como funciona
O módulo de matriz LED contém uma placa de condutor com um registo MAX7219 que permite uma interface simples com um microcontrolador enquanto gere o estado de 64 LEDs. Existem vários tamanhos de matrizes, dependendo do número de registos de turnos utilizados.
Esquema
O módulo matricial utiliza 3 pinos do microcontrolador. Pode ser alimentado pela saída de 5V do microcontrolador.
Código
Para gerir a matriz LED, não existe uma biblioteca específica; é necessário seleccionar o estado do LED para cada pixel. Para este fim é possível enviar um valor hexadecimal para cada linha. Para obter os valores hexadecimais de acordo com o que deseja desenhar, pode utilizar esta ferramenta.
int DIN_pin = 11; int CS_pin = 10; int CLK_pin = 12; int D[8] = {0xC0, 0xA0, 0x90, 0x88, 0x84, 0x98, 0x90, 0xE0}; //afficher la lettre D int A[8] = {0x18, 0x24, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42}; //afficher la lettre A int M[8] = {0xC3, 0xA5, 0x99, 0x99, 0x81, 0x81, 0x81, 0x81}; //afficher la lettre M int I[8] = {0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C}; //afficher la lettre I int E[8] = {0x00, 0x7E, 0x40, 0x40, 0x7E, 0x40, 0x40, 0x7E}; //afficher la lettre E int N[8] = {0xC1, 0xA1, 0x91, 0x89, 0x85, 0x82, 0x80, 0x80}; //afficher la lettre N void write_pix(int data) { digitalWrite(CS_pin, LOW); for (int i = 0; i < 8; i++) { digitalWrite(CLK_pin, LOW); digitalWrite(DIN_pin, data & 0x80); // masquage de donnée data = data << 1; // on décale les bits vers la gauche digitalWrite(CLK_pin, HIGH); } } void write_line(int adress, int data) { digitalWrite(CS_pin, LOW); write_pix(adress); write_pix(data); digitalWrite(CS_pin, HIGH); } void write_matrix(int *tab) { for (int i = 0; i < 8; i++) write_line(i + 1, tab[i]); } void init_MAX7219(void) { write_line(0x09, 0x00); //decoding BCD write_line(0X0A, 0x01); //brightness write_line(0X0B, 0x07); //scanlimit 8leds write_line(0X0C, 0x01); //power-down mode 0, normalmode1; write_line(0X0F, 0x00); } void clear_matrix(void) { const int clean[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; write_matrix(clean); } int intToHex(int x) { switch (x) { case 0: return 0x01; break; //LED sur la première case case 1: return 0x02; break; //LED sur 2 case case 2: return 0x04; break; //LED sur 3 case case 3: return 0x08; break; //LED sur 4 case case 4: return 0x10; break; //LED sur 5 case case 5: return 0x20; break; //LED sur 6 case case 6: return 0x40; break; //LED sur 7 case case 7: return 0x80; break; //LED sur 8 case } } void setup() { pinMode(CS_pin, OUTPUT); pinMode(DIN_pin, OUTPUT); pinMode(CLK_pin, OUTPUT); delay(50); init_MAX7219(); clear_matrix(); } void loop() { write_matrix(D); delay(500); write_matrix(A); delay(500); write_matrix(M); delay(500); write_matrix(I); delay(500); write_matrix(E); delay(500); write_matrix(N); delay(500); }
Neste exemplo, descrevemos o primeiro nome “Damien” com valores hexadecimais para cada LED. Cabe-lhe a si definir os valores para poder exibir por ordem alfabética, numérica ou qualquer outro desenho que deseje.
Aplicações
- Criar uma interface gráfica com várias matrizes
- Criação de um jogo de vídeo com um único ecrã