terça-feira, 9 de junho de 2015

Matriz de LED 8x8 com Driver Max7219 e Arduino

Palavras-chave: Max7219, 7219, Arduino, Led, Matriz.

A ideia neste post é desenhar setas na matriz utilizando o teclado do computador.

MATERIAIS

Eletrônica:

- 1 Arduino Uno;
- 1 Matriz de Led 8x8 com driver Max7219.

Diversos:

- Fios (jumpers) para ligação em protoboard;
- 1 Protoboard ou proto shield.

MONTAGEM

As Figuras 1 e 2 mostram a matriz de led utilizada e o diagrama elétrico para montagem, respectivamente.
Fig. 1 - Matriz de Led com Driver Max7219.
A pinagem da matriz é: VCC (5V), GND, DIN, CS e CLK.

Fig. 2 - Diagrama elétrico.
PROGRAMAÇÃO - ARDUINO

Copie o código abaixo integralmente e faça o upload.
/*---------------------------------------------------------------------------------------------
 * DESENHAR SETAS NA MATRIZ DE LED 8x8 COM DRIVER MAX7219 E ARDUINO
 *
 * Codigo da Matriz de Led adaptado da lib LedControl.h (LCDemoMatrix.ino)
 *
 * --------------------------------------------------------------------------------------------
 * Comandos: c = cima / b = baixo / e = esquerda / d = direita / x = desliga
 * --------------------------------------------------------------------------------------------
 *
 * Cleber Moretti
 * www.binarycodec.blogspot.com
 * Data: 09/06/2015
 * v.1.0
 ---------------------------------------------------------------------------------------------*/

#include "LedControl.h"     

const byte DIN      = 12;   // Conectado ao DataIn - DIn
const byte CS       = 11;   // Conectado ao LOAD - CS
const byte CLK      = 10;   // Conectado ao CLOCK - CLK 
const byte DEVICES =  1;   // Somenta para MAX72XX -- DEVICES sao a quantidade de dispositivos que estao interligados

LedControl lc = LedControl(DIN, CLK, CS, DEVICES ); // Controle da Matriz de led (lc -> matriz de led)

char caracter; // Armazena caracteres do teclado

void setup() {

  Serial.begin(9600);    // Debug

  lc.shutdown(0, false);  // O MAX72XX esta em power-saving quando ligamos - fazer uma chamada para "acordar"
  lc.setIntensity(0, 4);  // Ajuste de brilho alterando o valor de dois (menos brilho) para 5 (mais brilho) - 0 a 15
  lc.clearDisplay(0);     // Limpar a Matriz

}

void loop() {
  
  
  if (Serial.available()) {

    caracter = Serial.read();
    
    switch (caracter) {

      //-----[Matriz de leds]-----

    case 'c': // Cima
      lc.clearDisplay(0);    
      lc.setColumn(0, 5, B01100110); 
      lc.setColumn(0, 6, B00100100);
      lc.setRow(0, 3, B11111111); 
      lc.setRow(0, 4, B11111111);
      break;

    case 'b': // Baixo
      lc.clearDisplay(0);    
      lc.setColumn(0, 1, B00100100); 
      lc.setColumn(0, 2, B01100110); 
      lc.setRow(0, 3, B11111111); 
      lc.setRow(0, 4, B11111111);
      break;

    case 'e': // Esquerda
      lc.clearDisplay(0);     
      lc.setColumn(0, 3, B10011111);   // Indica a linha (comencando de 0) --- baixo para cima
      lc.setColumn(0, 4, B10011111);   // Indica o primeiro led da esquerda para direita
      lc.setRow(0, 1, B00111100);      // Indica o primeiro led de cima para baixo
      lc.setRow(0, 2, B01111110); 
      break;

    case 'd': // Direita
      lc.clearDisplay(0);    
      lc.setColumn(0, 3, B11111001); 
      lc.setColumn(0, 4, B11111001); 
      lc.setRow(0, 5, B01111110); 
      lc.setRow(0, 6, B00111100);  
      break;

      // Outra forma (mais facil) de enviar as informacoes para a Matriz de Led

    case 'x': // Desliga matriz de leds
      lc.clearDisplay(0);    
      lc.setColumn(0, 0, B00000000); 
      lc.setColumn(0, 1, B00000000);
      lc.setColumn(0, 2, B00000000); 
      lc.setColumn(0, 3, B00000000); 
      lc.setColumn(0, 4, B00000000); 
      lc.setColumn(0, 5, B00000000); 
      lc.setColumn(0, 6, B00000000); 
      lc.setColumn(0, 7, B00000000);
      break;

    default: // Iniciar sempre com os leds desligados
      lc.clearDisplay(0);    
      lc.setColumn(0, 0, B00000000); 
      lc.setColumn(0, 1, B00000000);
      lc.setColumn(0, 2, B00000000); 
      lc.setColumn(0, 3, B00000000); 
      lc.setColumn(0, 4, B00000000); 
      lc.setColumn(0, 5, B00000000); 
      lc.setColumn(0, 6, B00000000); 
      lc.setColumn(0, 7, B00000000);

    }

  }

}
TESTE

Abra o Serial Monitor e pressione as teclas de comando descritas no cabeçalho do código.

Nenhum comentário: