fbpixel
Etiquetas: ,
0
(0)

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ã

Fontes

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?