[Brincadeiras de carnaval] Matriz de LEDs 8x8 c/ arduino UNO

Realmente para o hobbie o arduino é excelente. Em pouco mais de 1 hora de montagem e codificação consegui fazer um letreiro numa matriz de leds.
Fórum sobre desenvolvimento de sistemas embarcados: Hardware e Software, Tecnologias: Eletrônica digital e analógica, Microcontroladoras, Microprocessadores, Sistemas *NIX (Linux, BSD), Software embarcado Baremetal. Sem fins lucrativos.
http://www.asm51.com.br/phpbb/
tcpipchip escreveu:Ahhh ta!
------------------------
Não enviado com Iphone
tcpipchip escreveu:Sem latch sem nada ?
Usou o modulo da deal ?
/*
* Show messages on an 8x8 led matrix,
* scrolling from right to left.
*
* Uses FrequencyTimer2 library to
* constantly run an interrupt routine
* at a specified frequency. This
* refreshes the display without the
* main loop having to do anything.
*
*/
#include <FrequencyTimer2.h>
const unsigned char space[8] PROGMEM= {
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
}; // 0x20 32
const unsigned char Numbers[][8] PROGMEM= {
{0x0e,0x11,0x13,0x15,0x19,0x11,0x0e,0x00},
{ // 1
0x04,
0x0C,
0x04,
0x04,
0x04,
0x04,
0x0E,
0x00
},
{ // 2
0x0E,
0x11,
0x01,
0x02,
0x04,
0x08,
0x1F,
0x00
},
{ // 3
0x1F,
0x02,
0x04,
0x02,
0x01,
0x11,
0x0E,
0x00
},
{ // 4
0x02,
0x06,
0x0A,
0x12,
0x1F,
0x02,
0x02,
0x00
},
{ // 5
0x1F,
0x10,
0x1E,
0x01,
0x01,
0x11,
0x0E,
0x00
},
{ // 6
0x06,
0x08,
0x10,
0x1E,
0x11,
0x11,
0x0E,
0x00
},
{ // 7
0x1F,
0x01,
0x02,
0x04,
0x04,
0x04,
0x04,
0x00
},
{0x0e,0x11,0x11,0x1f,0x11,0x11,0x0e,0x00},
{ // 9
0x0E,
0x11,
0x11,
0x0F,
0x01,
0x02,
0x0C,
0x00
}
};
const unsigned char Font[][8] PROGMEM= {
{
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // !
0x04,
0x04,
0x04,
0x04,
0x00,
0x00,
0x04,
0x00
},
{ // "
0x0A,
0x0A,
0x0A,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // #
0x0A,
0x0A,
0x1F,
0x0A,
0x1F,
0x0A,
0x0A,
0x00
},
{ // $
0x04,
0x0F,
0x14,
0x0E,
0x05,
0x1E,
0x04,
0x00
},
{ // %
0x18,
0x19,
0x02,
0x04,
0x08,
0x13,
0x03,
0x00
},
{ // &
0x0C,
0x12,
0x14,
0x08,
0x15,
0x12,
0x0D,
0x00
},
{ // '
0x0C,
0x04,
0x08,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // (
0x02,
0x04,
0x08,
0x08,
0x08,
0x04,
0x02,
0x00
},
{ // )
0x08,
0x04,
0x02,
0x02,
0x02,
0x04,
0x08,
0x00
},
{ // *
0x00,
0x04,
0x15,
0x0E,
0x15,
0x04,
0x00,
0x00
},
{ // +
0x00,
0x04,
0x04,
0x1F,
0x04,
0x04,
0x00,
0x00
},
{ // ,
0x00,
0x00,
0x00,
0x00,
0x0C,
0x04,
0x08,
0x00
},
{ // -
0x00,
0x00,
0x00,
0x1F,
0x00,
0x00,
0x00,
0x00
},
{ // .
0x00,
0x00,
0x00,
0x00,
0x00,
0x0C,
0x0C,
0x00
},
{ // /
0x00,
0x01,
0x02,
0x04,
0x08,
0x10,
0x00,
0x00
},
{ // 0
0x0E,
0x11,
0x13,
0x15,
0x19,
0x11,
0x0E,
0x00
},
{ // 1
0x04,
0x0C,
0x04,
0x04,
0x04,
0x04,
0x0E,
0x00
},
{ // 2
0x0E,
0x11,
0x01,
0x02,
0x04,
0x08,
0x1F,
0x00
},
{ // 3
0x1F,
0x02,
0x04,
0x02,
0x01,
0x11,
0x0E,
0x00
},
{ // 4
0x02,
0x06,
0x0A,
0x12,
0x1F,
0x02,
0x02,
0x00
},
{ // 5
0x1F,
0x10,
0x1E,
0x01,
0x01,
0x11,
0x0E,
0x00
},
{ // 6
0x06,
0x08,
0x10,
0x1E,
0x11,
0x11,
0x0E,
0x00
},
{ // 7
0x1F,
0x01,
0x02,
0x04,
0x04,
0x04,
0x04,
0x00
},
{ // 8
0x0E,
0x11,
0x11,
0x0E,
0x11,
0x11,
0x0E,
0x00
},
{ // 9
0x0E,
0x11,
0x11,
0x0F,
0x01,
0x02,
0x0C,
0x00
},
{ // :
0x00,
0x0C,
0x0C,
0x00,
0x0C,
0x0C,
0x00,
0x00
},
{ // ;
0x00,
0x0C,
0x0C,
0x00,
0x0C,
0x04,
0x08,
0x00
},
{ // <
0x02,
0x04,
0x08,
0x10,
0x08,
0x04,
0x02,
0x00
},
{ // =
0x00,
0x00,
0x1F,
0x00,
0x1F,
0x00,
0x00,
0x00
},
{ // >
0x08,
0x04,
0x02,
0x01,
0x02,
0x04,
0x08,
0x00
},
{ // ?
0x0E,
0x11,
0x01,
0x02,
0x04,
0x00,
0x04,
0x00
},
{ // @
0x0E,
0x11,
0x01,
0x0D,
0x15,
0x15,
0x0E,
0x00
},
{ // A
0x0E,
0x11,
0x11,
0x11,
0x1F,
0x11,
0x11,
0x00
},
{ // B
0x1E,
0x09,
0x09,
0x0E,
0x09,
0x09,
0x1E,
0x00
},
{ // C
0x0E,
0x11,
0x10,
0x10,
0x10,
0x11,
0x0E,
0x00
},
{ // D
0x1E,
0x09,
0x09,
0x09,
0x09,
0x09,
0x1E,
0x00
},
{ // E
0x1F,
0x10,
0x10,
0x1F,
0x10,
0x10,
0x1F,
0x00
},
{ // F
0x1F,
0x10,
0x10,
0x1E,
0x10,
0x10,
0x10,
0x00
},
{ // G
0x0E,
0x11,
0x10,
0x13,
0x11,
0x11,
0x0F,
0x00
},
{ // H
0x11,
0x11,
0x11,
0x1F,
0x11,
0x11,
0x11,
0x00
},
{ // I
0x0E,
0x04,
0x04,
0x04,
0x04,
0x04,
0x0E,
0x00
},
{ // J
0x07,
0x02,
0x02,
0x02,
0x02,
0x12,
0x0C,
0x00
},
{ // K
0x11,
0x12,
0x14,
0x18,
0x14,
0x12,
0x11,
0x00
},
{ // L
0x10,
0x10,
0x10,
0x10,
0x10,
0x10,
0x1F,
0x00
},
{ // M
0x11,
0x1B,
0x15,
0x15,
0x11,
0x11,
0x11,
0x00
},
{ // N
0x11,
0x19,
0x19,
0x15,
0x13,
0x13,
0x11,
0x00
},
{ // O
0x0E,
0x11,
0x11,
0x11,
0x11,
0x11,
0x0E,
0x00
},
{ // P
0x1E,
0x11,
0x11,
0x1E,
0x10,
0x10,
0x10,
0x00
},
{ // Q
0x0E,
0x11,
0x11,
0x11,
0x15,
0x12,
0x1D,
0x00
},
{ // R
0x1E,
0x11,
0x11,
0x1E,
0x14,
0x12,
0x11,
0x00
},
{ // S
0x0E,
0x11,
0x10,
0x0E,
0x01,
0x11,
0x0E,
0x00
},
{ // T
0x1F,
0x04,
0x04,
0x04,
0x04,
0x04,
0x04,
0x00
},
{ // U
0x11,
0x11,
0x11,
0x11,
0x11,
0x11,
0x0E,
0x00
},
{ // V
0x11,
0x11,
0x11,
0x11,
0x11,
0x0A,
0x04,
0x00
},
{ // W
0x11,
0x11,
0x11,
0x15,
0x15,
0x1B,
0x11,
0x00
},
{ // X
0x11,
0x11,
0x0A,
0x04,
0x0A,
0x11,
0x11,
0x00
},
{ // Y
0x11,
0x11,
0x11,
0x0A,
0x04,
0x04,
0x04,
0x00
},
{ // Z
0x1F,
0x01,
0x02,
0x04,
0x08,
0x10,
0x1F,
0x00
},
{ // [
0x0E,
0x08,
0x08,
0x08,
0x08,
0x08,
0x0E,
0x00
},
{ // \
0x00,
0x10,
0x08,
0x04,
0x02,
0x01,
0x00,
0x00
},
{ // ]
0x0E,
0x02,
0x02,
0x02,
0x02,
0x02,
0x0E,
0x00
},
{ // ^
0x04,
0x0A,
0x11,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // _
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x1F,
0x00
},
{ // `
0x10,
0x08,
0x04,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // a
0x00,
0x00,
0x0E,
0x01,
0x0F,
0x11,
0x0F,
0x00
},
{ // b
0x10,
0x10,
0x16,
0x19,
0x11,
0x11,
0x1E,
0x00
},
{ // c
0x00,
0x00,
0x0E,
0x11,
0x10,
0x11,
0x0E,
0x00
},
{ // d
0x01,
0x01,
0x0D,
0x13,
0x11,
0x11,
0x0F,
0x00
},
{ // e
0x00,
0x00,
0x0E,
0x11,
0x1F,
0x10,
0x0E,
0x00
},
{ // f
0x02,
0x05,
0x04,
0x0E,
0x04,
0x04,
0x04,
0x00
},
{ // g
0x00,
0x0D,
0x13,
0x13,
0x0D,
0x01,
0x0E,
0x00
},
{ // h
0x10,
0x10,
0x16,
0x19,
0x11,
0x11,
0x11,
0x00
},
{ // i
0x04,
0x00,
0x0C,
0x04,
0x04,
0x04,
0x0E,
0x00
},
{ // j
0x02,
0x00,
0x06,
0x02,
0x02,
0x12,
0x0C,
0x00
},
{ // k
0x08,
0x08,
0x09,
0x0A,
0x0C,
0x0A,
0x09,
0x00
},
{ // l
0x0C,
0x04,
0x04,
0x04,
0x04,
0x04,
0x0E,
0x00
},
{ // m
0x00,
0x00,
0x1A,
0x15,
0x15,
0x15,
0x15,
0x00
},
{ // n
0x00,
0x00,
0x16,
0x19,
0x11,
0x11,
0x11,
0x00
},
{ // o
0x00,
0x00,
0x0E,
0x11,
0x11,
0x11,
0x0E,
0x00
},
{ // p
0x00,
0x16,
0x19,
0x19,
0x16,
0x10,
0x10,
0x00
},
{ // q
0x00,
0x0D,
0x13,
0x13,
0x0D,
0x01,
0x01,
0x00
},
{ // r
0x00,
0x00,
0x16,
0x19,
0x10,
0x10,
0x10,
0x00
},
{ // s
0x00,
0x00,
0x0F,
0x10,
0x1E,
0x01,
0x1F,
0x00
},
{ // t
0x08,
0x08,
0x1C,
0x08,
0x08,
0x09,
0x06,
0x00
},
{ // u
0x00,
0x00,
0x12,
0x12,
0x12,
0x12,
0x0D,
0x00
},
{ // v
0x00,
0x00,
0x11,
0x11,
0x11,
0x0A,
0x04,
0x00
},
{ // w
0x00,
0x00,
0x11,
0x11,
0x15,
0x15,
0x0A,
0x00
},
{ // x
0x00,
0x00,
0x11,
0x0A,
0x04,
0x0A,
0x11,
0x00
},
{ // y
0x00,
0x00,
0x11,
0x11,
0x13,
0x0D,
0x01,
0x0E
},
{ // z
0x00,
0x00,
0x1F,
0x02,
0x04,
0x08,
0x1F,
0x00
},
{ // {
0x02,
0x04,
0x04,
0x08,
0x04,
0x04,
0x02,
0x00
},
{ // |
0x04,
0x04,
0x04,
0x00,
0x04,
0x04,
0x04,
0x00
},
{ // }
0x08,
0x04,
0x04,
0x02,
0x04,
0x04,
0x08,
0x00
},
{ // ~
0x08,
0x15,
0x02,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 5F
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 60
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 61
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 62
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 63
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 64
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 65
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 66
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 67
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 68
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 69
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 6A
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 6B
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 6C
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 6D
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 6E
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 6F
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 70
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 71
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 72
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 73
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 74
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 75
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 76
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 77
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 78
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 79
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 7A
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 7B
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 7C
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 7D
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 7E
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
},
{ // 7F
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
}
};
byte col = 0;
byte leds[8][8];
const int rows[8] = {9,8,7,6,5,4,3,2};
const int cols[8] = {13,12,A5,A4,A3,A2,A1,A0};
// pin[xx] on led matrix connected to nn on Arduino (-1 is dummy to make array start at pos 1)
int pins[17]= {-1,2,3,4,5,6,7,8,9,A0,A1,A2,A3,A4,A5,12,13};
// col[xx] of leds = pin yy on led matrix
//int cols[8] = {pins[13], pins[3], pins[4], pins[10], pins[06], pins[11], pins[15], pins[16]};
// row[xx] of leds = pin yy on led matrix
//int rows[8] = {pins[9], pins[14], pins[8], pins[12], pins[1], pins[7], pins[2], pins[5]};
int numPatterns;
byte patterns[50][8];
int pattern = 0;
char frase[50];
void setup() {
// sets the pins as output
Serial.begin(115200);
Serial.println("Bem-vindo");
delay(1000);
loadPatterns("Daniela Moretti Dreher ");
for (int i = 1; i <= 16; i++) {
pinMode(pins[i], OUTPUT);
}
// set up cols and rows
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();
// Turn off toggling of pin 11
FrequencyTimer2::disable();
// Set refresh rate (interrupt timeout period)
FrequencyTimer2::setPeriod(2000);
// Set interrupt routine to be called
FrequencyTimer2::setOnOverflow(display);
setPattern(pattern);
}
int cont = 0;
void loop() {
while (Serial.available())
{
frase[cont]=Serial.read();
if (frase[cont]=='\n')
{
frase[++cont]=0;
loadPatterns(frase);
cont=0;
clearLeds();
pattern=0;
setPattern(pattern);
}
else
cont++;
}
pattern = ++pattern % numPatterns;
slidePattern(pattern, 100);
}
void loadPatterns(char *_patterns){
int i=0;
Serial.println(_patterns);
while (*_patterns)
{
for (int j=0; j<8; j++)
{
if (*_patterns>=' ' && *_patterns<=0x7F)patterns[i][j]=pgm_read_byte(&Font[*_patterns-' '][j]);
else patterns[i][j]=pgm_read_byte(&space[j]);
_patterns++;
i++;
if (i>25) break;
}
numPatterns=i;
}
void clearLeds() {
// Clear display array
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 < numPatterns; i++) {
for (int j = 0; j < 8; j++) {
leds[i][j] = bitRead(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];
leds[j][7] = bitRead(patterns[pattern][j],0 + l);
}
delay(del);
}
}
// Interrupt routine
void display() {
digitalWrite(cols[col], LOW); // Turn whole previous column off
col++;
if (col == 8) {
col = 0;
}
for (int row = 0; row < 8; row++) {
if (leds[col][7 - row] == 1) {
digitalWrite(rows[row], LOW); // Turn on this led
}
else {
digitalWrite(rows[row], HIGH); // Turn off this led
}
}
digitalWrite(cols[col], HIGH); // Turn whole column on at once (for equal lighting times)
}