O que Você vai precisar
Arduino UNO, Duemicila, Leonardo ou Mini
Matrix de LED 8x8
16 x resistores 220Ω colocar em cada entrada
16 x resistores 220Ω colocar em cada entrada
FrequencyTimer2 Para a Biblioteca do Arduino Click Download
Objetivo ?
Mostrar Mensagem Na Matrix de LED
__________________________________________________________________________________
Diagrama de Ligação
Portas correspondentes as LEDs
OBS: Para você acender um LED terá de coincidir o Valor HIGH da Coluna com a da linha
Exemplo COL 1 Pino 13 com ROW 1 Pino 9.
#include
<FrequencyTimer2.h>
/*
* Objetivo Mostrar mensagens em uma matriz de
led 8x8,
* Rolagem da direita para a esquerda.
*
* Usa FrequencyTimer2 da biblioteca sketch
import library frequencyTimer2
* Constantemente executar uma rotina de
interrupção
* em uma freqüência especificada. este
* Atualiza a exibição, sem a
* Loop principal ter que fazer nada.
*
*/
#define
SPACE { \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0} \
}
#define H {
\
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 1, 1, 1, 1, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0} \
}
#define
E { \
{0, 1, 1, 1, 1, 1, 1, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 1, 1, 1, 1, 1, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 1, 1, 1, 1, 1, 0} \
}
#define L {
\
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 1, 1, 1, 1, 1, 0} \
}
#define O {
\
{0, 0, 0, 1, 1, 0, 0, 0}, \
{0, 0, 1, 0, 0, 1, 0, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 0, 1, 0, 0, 1, 0, 0}, \
{0, 0, 0, 1, 1, 0, 0, 0} \
}
byte col =
0;
byte
leds[8][8];
// pin [xx]
na matriz levou ligado a nn em Arduino (-1 é manequim para fazer start matriz
em pos 1)
int
pins[17]= {-1, 5, 4, 3, 2, 14, 15, 16, 17, 13, 12, 11, 10, 9, 8, 7, 6};
// col [xx]
de leds = pino aa matriz em led
int cols[8]
= {pins[13], pins[3], pins[4], pins[10], pins[06], pins[11], pins[15],
pins[16]};
// row [xx]
de leds = pino yy matriz em led
int rows[8]
= {pins[9], pins[14], pins[8], pins[12], pins[1], pins[7], pins[2], pins[5]};
const
int numPatterns = 6;
byte
patterns[numPatterns][8][8] = {
H,E,L,L,O,SPACE
};
int pattern
= 0;
void setup()
{
// define os pinos como saída
for (int i = 1; i <= 16; i++) {
pinMode(pins[i], OUTPUT);
}
// configurar colunas e linhas
for (int i = 1; i <= 8; i++) {
digitalWrite(cols[i - 1], LOW);
}
for (int i = 1; i <= 8; i++) {
digitalWrite(rows[i - 1], LOW);
}
clearLeds();
// Desligue alternando de 11 pinos
FrequencyTimer2::disable();
// set taxa de atualização (tempo limite de
interrupção)
FrequencyTimer2::setPeriod(2000);
// Definir a rotina de interrupção a ser
chamado
FrequencyTimer2::setOnOverflow(display);
setPattern(pattern);
}
void
loop() {
pattern = ++pattern % numPatterns;
slidePattern(pattern, 60);
}
void
clearLeds() {
// Variedade exibição clara
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
leds[i][j] = 0;
}
}
}
void
setPattern(int pattern) {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
leds[i][j] = patterns[pattern][i][j];
}
}
}
void
slidePattern(int pattern, int del) {
for (int l = 0; l < 8; l++) {
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 8; j++) {
leds[j][i] = leds[j][i+1];
}
}
for (int j = 0; j < 8; j++) {
leds[j][7] = patterns[pattern][j][0 + l];
}
delay(del);
}
}
// a rotina
de interrupção
void
display() {
digitalWrite(cols[col], LOW); // Vire toda coluna anterior fora
col++;
if (col == 8) {
col = 0;
}
for (int row = 0; row < 8; row++) {
if (leds[col][7 - row] == 1) {
digitalWrite(rows[row], LOW); // Ligue este LED
}
else {
digitalWrite(rows[row], HIGH); //
Desativar esse led
}
}
digitalWrite(cols[col], HIGH); // Vire coluna
inteira de uma só vez (para tempos iguais de iluminação)
}
Nenhum comentário:
Postar um comentário