15 agosto 2013

Módulo matriz de leds 8x8

Abordei anteriormente o uso do CI Max7219 para controle de display de 7 segmentos. Vimos que com ele é possível controlar até 8 displays de 7 segmentos por CI, e podemos ligar 8 CI's em série, ou seja, podemos utilizar o Arduino para controlar até 64 displays.

Outro uso interessante do Max7219 é o controle de matriz de leds 8x8. O uso desse tipo de matriz possibilita a montagem de painéis elaborados, onde podemos exibir números, letras e desenhos, e dependendo da configuração da matriz, mostrar tudo isso em várias formas, tamanhos e cores :


Painel de leds
Imagens : Blog Arduino Android  e Adafruit
A ligação da matriz de leds na protoboard costuma ser um pouco complexa e exige muita atenção para não danificar os componentes, principalmente a matriz de leds em si, que costuma ser um componente sensível.

Felizmente, existem módulos matriz de leds prontos para este fim, que consistem em um CI Max7219, uma matriz de leds 8x8 e alguns outros componentes, como capacitores e resistores. Pode ser encontrado em forma de kits, como esse :

modulo matriz leds 8x8
ou já montados e prontos para usar, como esse :

Módulo matriz de leds 8x8 Arduino

Repare que no lado esquedo do módulo, estão os pinos de entrada, nomeados como VCC, GND, DIN, CS e CLK. Os pinos do lado direito são utilizados para interligar vários módulos, e serão assunto para outro post. Hoje vamos ver como ligar este único módulo no Arduino e como mostrar caracteres na matriz em scroll horizontal. Fiz um pequeno vídeo de teste, onde além dos caracteres em scroll podem ser visualizadas outras figuras :



A ligação ao Arduino, da mesma forma que no post Controlando Display 7 Segmentos com o Max7219, usa apenas 3 portas da placa, o que dá bastante flexibilidade para usarmos sensores, leds, botões, etc. juntamente com o módulo :

matriz leds 8x8


 Ligação :

  • 5v do Arduíno ligado ao VCC do módulo
  • GND do Arduino ligado ao GND do módulo
  • Porta 4 do Arduino ligada ao pino DIN do módulo
  • Porta 5 do Arduino ligada ao pino CS do módulo
  • Porta 6 do Arduino ligada ao pino CLK do módulo

O programa foi baseado no livro Arduino Básico, do autor Michael McRoberts, com pequenas alterações e adaptações. Carregue o programa no Arduino alterando as linhas de mensagem, conforme indicado no final do programa, para exibir as informações que você quiser :

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
// Programa : Scrool horizontal com matriz de leds 8x8  
// Baseado no livro Arduino Basico, de Michael McRoberts  
// Alterações e comentários : Arduino e Cia  
   
#include <pgmspace.h>  
#include <TimerOne.h>  
   
int DataPin = 4;  //Ligar o pino 4 do Arduino ao DIN do modulo  
int ClockPin = 5; //Ligar o pino 5 do Arduino ao CLK do módulo  
int LoadPin = 6;  //Ligar o pino 6 do Arduinio ao pino CS/Load do módulo  
  
byte buffer[8];  
   
static byte font[][8] PROGMEM = {  
{B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000},   
{B00000100, B00000100, B00000100, B00000100, B00000100, B00000100, B00000000, B00000100},   
{B00001010, B00001010, B00001010, B00000000, B00000000, B00000000, B00000000, B00000000},   
{B00000000, B00001010, B00011111, B00001010, B00011111, B00001010, B00011111, B00001010},   
{B00000111, B00001100, B00010100, B00001100, B00000110, B00000101, B00000110, B00011100},   
{B00011001, B00011010, B00000010, B00000100, B00000100, B00001000, B00001011, B00010011},   
{B00000110, B00001010, B00010010, B00010100, B00001001, B00010110, B00010110, B00001001},   
{B00000100, B00000100, B00000100, B00000000, B00000000, B00000000, B00000000, B00000000},   
{B00000010, B00000100, B00001000, B00001000, B00001000, B00001000, B00000100, B00000010},   
{B00001000, B00000100, B00000010, B00000010, B00000010, B00000010, B00000100, B00001000},   
{B00010101, B00001110, B00011111, B00001110, B00010101, B00000000, B00000000, B00000000},   
{B00000000, B00000000, B00000100, B00000100, B00011111, B00000100, B00000100, B00000000},   
{B00000000, B00000000, B00000000, B00000000, B00000000, B00000110, B00000100, B00001000},   
{B00000000, B00000000, B00000000, B00000000, B00001110, B00000000, B00000000, B00000000},   
{B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000100},   
{B00000001, B00000010, B00000010, B00000100, B00000100, B00001000, B00001000, B00010000},   
{B00001110, B00010001, B00010011, B00010001, B00010101, B00010001, B00011001, B00001110},   
{B00000100, B00001100, B00010100, B00000100, B00000100, B00000100, B00000100, B00011111},   
{B00001110, B00010001, B00010001, B00000010, B00000100, B00001000, B00010000, B00011111},   
{B00001110, B00010001, B00000001, B00001110, B00000001, B00000001, B00010001, B00001110},   
{B00010000, B00010000, B00010100, B00010100, B00011111, B00000100, B00000100, B00000100},   
{B00011111, B00010000, B00010000, B00011110, B00000001, B00000001, B00000001, B00011110},   
{B00000111, B00001000, B00010000, B00011110, B00010001, B00010001, B00010001, B00001110},   
{B00011111, B00000001, B00000001, B00000001, B00000010, B00000100, B00001000, B00010000},   
{B00001110, B00010001, B00010001, B00001110, B00010001, B00010001, B00010001, B00001110},   
{B00001110, B00010001, B00010001, B00001111, B00000001, B00000001, B00000001, B00000001},   
{B00000000, B00000100, B00000100, B00000000, B00000000, B00000100, B00000100, B00000000},   
{B00000000, B00000100, B00000100, B00000000, B00000000, B00000100, B00000100, B00001000},   
{B00000001, B00000010, B00000100, B00001000, B00001000, B00000100, B00000010, B00000001},   
{B00000000, B00000000, B00000000, B00011110, B00000000, B00011110, B00000000, B00000000},   
{B00010000, B00001000, B00000100, B00000010, B00000010, B00000100, B00001000, B00010000},   
{B00001110, B00010001, B00010001, B00000010, B00000100, B00000100, B00000000, B00000100},   
{B00001110, B00010001, B00010001, B00010101, B00010101, B00010001, B00010001, B00011110},   
{B00001110, B00010001, B00010001, B00010001, B00011111, B00010001, B00010001, B00010001},   
{B00011110, B00010001, B00010001, B00011110, B00010001, B00010001, B00010001, B00011110},   
{B00000111, B00001000, B00010000, B00010000, B00010000, B00010000, B00001000, B00000111},   
{B00011100, B00010010, B00010001, B00010001, B00010001, B00010001, B00010010, B00011100},  
{B00011111, B00010000, B00010000, B00011110, B00010000, B00010000, B00010000, B00011111},   
{B00011111, B00010000, B00010000, B00011110, B00010000, B00010000, B00010000, B00010000},   
{B00001110, B00010001, B00010000, B00010000, B00010111, B00010001, B00010001, B00001110},   
{B00010001, B00010001, B00010001, B00011111, B00010001, B00010001, B00010001, B00010001},   
{B00011111, B00000100, B00000100, B00000100, B00000100, B00000100, B00000100, B00011111},   
{B00011111, B00000100, B00000100, B00000100, B00000100, B00000100, B00010100, B00001000},   
{B00010001, B00010010, B00010100, B00011000, B00010100, B00010010, B00010001, B00010001},   
{B00010000, B00010000, B00010000, B00010000, B00010000, B00010000, B00010000, B00011111},   
{B00010001, B00011011, B00011111, B00010101, B00010001, B00010001, B00010001, B00010001},   
{B00010001, B00011001, B00011001, B00010101, B00010101, B00010011, B00010011, B00010001},   
{B00001110, B00010001, B00010001, B00010001, B00010001, B00010001, B00010001, B00001110},   
{B00011110, B00010001, B00010001, B00011110, B00010000, B00010000, B00010000, B00010000},   
{B00001110, B00010001, B00010001, B00010001, B00010001, B00010101, B00010011, B00001111},   
{B00011110, B00010001, B00010001, B00011110, B00010100, B00010010, B00010001, B00010001},   
{B00001110, B00010001, B00010000, B00001000, B00000110, B00000001, B00010001, B00001110},   
{B00011111, B00000100, B00000100, B00000100, B00000100, B00000100, B00000100, B00000100},   
{B00010001, B00010001, B00010001, B00010001, B00010001, B00010001, B00010001, B00001110},   
{B00010001, B00010001, B00010001, B00010001, B00010001, B00010001, B00001010, B00000100},   
{B00010001, B00010001, B00010001, B00010001, B00010001, B00010101, B00010101, B00001010},   
{B00010001, B00010001, B00001010, B00000100, B00000100, B00001010, B00010001, B00010001},   
{B00010001, B00010001, B00001010, B00000100, B00000100, B00000100, B00000100, B00000100},   
{B00011111, B00000001, B00000010, B00000100, B00001000, B00010000, B00010000, B00011111},   
{B00001110, B00001000, B00001000, B00001000, B00001000, B00001000, B00001000, B00001110},   
{B00010000, B00001000, B00001000, B00000100, B00000100, B00000010, B00000010, B00000001},   
{B00001110, B00000010, B00000010, B00000010, B00000010, B00000010, B00000010, B00001110},   
{B00000100, B00001010, B00010001, B00000000, B00000000, B00000000, B00000000, B00000000},   
{B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00011111},   
{B00001000, B00000100, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000},   
{B00000000, B00000000, B00000000, B00001110, B00010010, B00010010, B00010010, B00001111},   
{B00000000, B00010000, B00010000, B00010000, B00011100, B00010010, B00010010, B00011100},   
{B00000000, B00000000, B00000000, B00001110, B00010000, B00010000, B00010000, B00001110},   
{B00000000, B00000001, B00000001, B00000001, B00000111, B00001001, B00001001, B00000111},   
{B00000000, B00000000, B00000000, B00011100, B00010010, B00011110, B00010000, B00001110},   
{B00000000, B00000011, B00000100, B00000100, B00000110, B00000100, B00000100, B00000100},   
{B00000000, B00001110, B00001010, B00001010, B00001110, B00000010, B00000010, B00001100},   
{B00000000, B00010000, B00010000, B00010000, B00011100, B00010010, B00010010, B00010010},   
{B00000000, B00000000, B00000100, B00000000, B00000100, B00000100, B00000100, B00000100},   
{B00000000, B00000010, B00000000, B00000010, B00000010, B00000010, B00000010, B00001100},   
{B00000000, B00010000, B00010000, B00010100, B00011000, B00011000, B00010100, B00010000},   
{B00000000, B00010000, B00010000, B00010000, B00010000, B00010000, B00010000, B00001100},   
{B00000000, B00000000, B00000000, B00001010, B00010101, B00010001, B00010001, B00010001},   
{B00000000, B00000000, B00000000, B00010100, B00011010, B00010010, B00010010, B00010010},   
{B00000000, B00000000, B00000000, B00001100, B00010010, B00010010, B00010010, B00001100},   
{B00000000, B00011100, B00010010, B00010010, B00011100, B00010000, B00010000, B00010000},   
{B00000000, B00001110, B00010010, B00010010, B00001110, B00000010, B00000010, B00000001},   
{B00000000, B00000000, B00000000, B00001010, B00001100, B00001000, B00001000, B00001000},   
{B00000000, B00000000, B00001110, B00010000, B00001000, B00000100, B00000010, B00011110},   
{B00000000, B00010000, B00010000, B00011100, B00010000, B00010000, B00010000, B00001100},   
{B00000000, B00000000, B00000000, B00010010, B00010010, B00010010, B00010010, B00001100},   
{B00000000, B00000000, B00000000, B00010001, B00010001, B00010001, B00001010, B00000100},   
{B00000000, B00000000, B00000000, B00010001, B00010001, B00010001, B00010101, B00001010},   
{B00000000, B00000000, B00000000, B00010001, B00001010, B00000100, B00001010, B00010001},   
{B00000000, B00000000, B00010001, B00001010, B00000100, B00001000, B00001000, B00010000},   
{B00000000, B00000000, B00000000, B00011111, B00000010, B00000100, B00001000, B00011111},   
{B00000010, B00000100, B00000100, B00000100, B00001000, B00000100, B00000100, B00000010},   
{B00000100, B00000100, B00000100, B00000100, B00000100, B00000100, B00000100, B00000100},   
{B00001000, B00000100, B00000100, B00000100, B00000010, B00000100, B00000100, B00001000},   
{B00000000, B00000000, B00000000, B00001010, B00011110, B00010100, B00000000, B00000000}   
};  
   
void clearDisplay() 
{
    for (byte x=0; x<8; x++) 
    {  
       buffer[x] = B00000000;  
    }  
    screenUpdate();  
}  
  
void initMAX7219() 
{  
    pinMode(DataPin, OUTPUT);  
    pinMode(LoadPin, OUTPUT);  
    pinMode(ClockPin, OUTPUT);  
    clearDisplay();  
    writeData(B00001011, B00000111);   
    writeData(B00001001, B00000000);   
    writeData(B00001100, B00000001);   
    intensity(1);   
}  
   
void intensity(int intensity) 
{  
    writeData(B00001010, intensity);   
}  
   
void writeData(byte MSB, byte LSB) 
{  
    byte mask;  
    digitalWrite(LoadPin, LOW);   
      
    for (mask = B10000000; mask>0; mask >>= 1) 
    {   
        digitalWrite(ClockPin, LOW);  
        if (MSB & mask)
        {   
           digitalWrite(DataPin,HIGH);   
        }  
        else
        {   
           digitalWrite(DataPin,LOW);   
        }  
        digitalWrite(ClockPin, HIGH);   
    }  
      
    for (mask = B10000000; mask>0; mask >>= 1) 
    {   
        digitalWrite(ClockPin, LOW);  
        if (LSB & mask)
        {   
           digitalWrite(DataPin,HIGH);   
        }  
        else
        {   
            digitalWrite(DataPin,LOW);   
        }  
        digitalWrite(ClockPin, HIGH);   
    }  
    digitalWrite(LoadPin, HIGH);   
    digitalWrite(ClockPin, LOW);  
}  
   
void scroll(char myString[], int speed) 
{  
    byte firstChrRow, secondChrRow;  
    byte ledOutput;  
    byte chrPointer = 0;   
    byte Char1, Char2;   
    byte scrollBit = 0;  
    byte strLength = 0;  
    unsigned long time;  
    unsigned long counter;  
       
    while (myString[strLength]) {strLength++;}  
    counter = millis();  
    while (chrPointer < (strLength-1)) 
    {  
       time = millis();  
       if (time > (counter + speed)) 
       { 
          Char1 = myString[chrPointer];  
          Char2 = myString[chrPointer+1];  
          for (byte y= 0; y<8; y++) 
          {  
            firstChrRow = pgm_read_byte(&font[Char1 - 32][y]);  
            secondChrRow = (pgm_read_byte(&font[Char2 - 32][y])) << 1;  
            ledOutput = (firstChrRow << scrollBit) | (secondChrRow >> (8 - scrollBit) );  
            buffer[y] = ledOutput;  
          }  
            scrollBit++;   
            if (scrollBit > 6) 
            {   
              scrollBit = 0;  
              chrPointer++;  
            }  
            counter = millis();  
        }  
    }  
}  
   
void screenUpdate() 
{  
   for (byte row = 0; row < 8; row++) 
   { 
      writeData(row+1, buffer[row]);  
   }  
}  
   
void setup() 
{  
   initMAX7219();  
   Timer1.initialize(10000);       
   Timer1.attachInterrupt(screenUpdate);   
}  
  
void loop() 
{  
   clearDisplay();    
   //Exibe a mensagem, com intervalo de scroll de 100
   scroll(" Arduino e Cia ", 100); 
   //Adicione mais linhas para mostrar outros caracteres
   scroll(" - 2013 ", 100);        
}  

Atualizado : Quer interligar dois ou mais módulos ? Veja o artigo Painel de Led com módulo Max7219



50 comentários:

  1. Onde eu acho os "includes" ??
    #include
    #include
    Eles vêm junto com o diretório do Arduino ??
    Dá um help por favor.
    Abraços

    ResponderExcluir
    Respostas
    1. Boa noite Alexandre !

      Esses includes se referem às bibliotecas, que na maioria das vezes você vai ter que baixar da internet e colocar na pasta "libraries", dentro da IDE do Arduino.

      A biblioteca pgmspace.h já vem junto com o Arduíno, você não precisa baixar. A biblioteca TimerOne você encontra nesse link :

      https://code.google.com/p/arduino-timerone/

      Se precisar de ajuda, volte aqui, por favor. Abraço e obrigado !


      Excluir
  2. Boa tarde amigo gostei muito do seu projeto estou tentando copilar o código mas esta dando erro nessa parte void setup() {
    initMAX7219();
    Timer1.initialize(10000);
    Timer1.attachInterrupt(screenUpdate)
    poderia me ajudar.Obrigado

    ResponderExcluir
  3. Decobri o erro,agora eu quero saber o que eu tenho que alterar no codigo para passar as msg em 5 modulo max

    ResponderExcluir
  4. Só uma ressalva , o clock fica no pino 5

    ResponderExcluir
  5. Boa tarde, gostaria de saber o que muda pra duas matrizes de LED. Abraços.

    ResponderExcluir
    Respostas
    1. Boa tarde !

      Acabou de sair um artigo sobre como interligar 2 módulos :

      http://www.arduinoecia.com.br/2014/04/Painel-de-led-max7219.html

      Abraço !

      Excluir
  6. Amigo, não consegui entender esse monte de código: {B00000000, etc.), sei que é binário, mas por exemplo, como eu mostraria em uma matriz destas o mome "Daniel e Sandra" com rolagem?
    Seria possível me dar uma dica, por favor?
    email: meuviolino@hotmail.com
    Obrigado

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Os códigos binários são os que formam as letras. Você não precisa alterar nada para mudar o texto na tela, porque os códigos binários já contém praticamente todas as letras que você precisa.

      A única linha que você tem que alterar é essa :

      scroll(" Arduino e Cia ", 100);

      Ali você troca o "Arduino e Cia" pelo texto que precisa mostrar. :-)

      Abraço !

      Excluir
  7. Desculpe, não tinha visto a resposta - muito obrigado mesmo!
    Deus lhe abençoe,
    abraço,

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Sem problemas. Eu poderia ter respondido por email também. rs.

      Abraço e obrigado !

      Excluir
  8. ola amigo, parabens pelo projeto, uma duvida como faço para mudar as figuras, tipo assim eu sei como criar um coraçao, mas qual linha eu posso apagar p/ colocar a sequencia do coraçao ?? obrigado, abraço

    ResponderExcluir
    Respostas
    1. Oi Lucas,

      Com esse código realmente a coisa é meio complicada. Eu tenho um outro que é um pouco mais fácil de mexer, e de alterar o que você precisa. inclusive usei para montar o vídeo desse post.

      Se puder, entre em contato usando o formulário de contato no lado direito da página, e eu te mando o código por email, ok ?

      Abraço !

      Excluir
  9. ok amigo, obrigado pelo retorno, quero sim sou novato nesse maravilhoso mundo do arduino, obrigado mesmo d coração,abraço

    ResponderExcluir
  10. O meu aparece esse erro:
    MAX7219.ino: In function 'void setup()':
    MAX7219:223: error: 'TimerOne' was not declared in this scope

    ResponderExcluir
    Respostas
    1. Boa noite,

      Qual versão da IDE você está usando ?

      Abraço !

      Excluir
  11. Amigo, como insiro textos animado com esse sketch base seu?... Poderia me ajudar? https://www.youtube.com/watch?v=bxUe58OxdBc

    ResponderExcluir
    Respostas
    1. Boa noite Hailton,

      Não tenho nada pronto nesse sentido, mas talvez exista até alguma biblioteca com esses efeitos pré-definidos.. vou dar uma pesquisada.

      Abraço !

      Excluir
  12. Boa noite amigo,
    Nesse exemplo, é possível começar do zero?
    No codigo acima sei que os binários são as letras, mas, é possível fazer os LEDs piscarem do meu jeito? Ex:. Pisca led da coluna x?

    Att!

    ResponderExcluir
    Respostas
    1. Boa tarde,

      É possível sim. Tente o código abaixo, que acende vai percorrendo as linhas e colunas, acendendo um led de cada vez, utilize a biblioteca Ledcontrol, ok ?

      //We always have to include the library
      #include "LedControl.h"

      /*Now we need a LedControl to work with.
      pin 4 is connected to the DataIn
      pin 5 is connected to the CLK
      pin 6 is connected to LOAD / CS
      We only have a single MAX7219 */

      LedControl lc=LedControl(4,6,5,1);

      /* we always wait a bit between updates of the display */
      unsigned long delaytime=500;
      void setup()
      {
      /* The MAX72XX is in power-saving mode on startup,
      we have to do a wakeup call */
      lc.shutdown(0,false); //* Set the brightness to a medium values */
      lc.setIntensity(0,8); //* and clear the display */
      lc.clearDisplay(0);
      }

      void loop()
      {
      lc.setIntensity(0,8);
      single();
      lc.clearDisplay(0);
      }


      /* This function will light up every Led on the matrix. The led will blink along with
      the row-number. row number 4 (index==3) will blink 4 times etc. */

      void single() {
      for(int row=0;row<8;row++)
      {
      for(int col=0;col<8;col++)
      {
      delay(50);
      lc.setLed(0,row,col,true);
      delay(50);
      for(int i=0;i<col;i++)
      {
      lc.setLed(0,row,col,false);
      delay(50);
      lc.setLed(0,row,col,true);
      delay(50);
      }
      }
      }
      }

      Abraço !

      Excluir
    2. compilou, mas quando eu carreguei no Arduíno não funcionou. Eu troquei os pinos para que fiquem compatíveis com o especificado. no caso a instrução "
      LedControl lc=LedControl(4,6,5,1);" define os comportamentos dos pinos. Porém não surgiu efeito. Não ligou. Como faço?

      Excluir
  13. como eu faço para inserir valores,como de sensores,ja vi muitos codigos mas todos para inserir texto,mensagens,alguem pode me ajudar

    ResponderExcluir
    Respostas
    1. Boa noite Sidnei,

      Realmente a maioria dos exemplos envolvem texto. Tente usar a biblioteca MD_MAX72xx.h. Eu falo dela neste artigo :

      http://www.arduinoecia.com.br/2014/04/Painel-de-led-max7219.html

      Abraço !

      Excluir
    2. Cara eu estou com uma dúvida semelhante, eu não quero que o texto se mova para a esquerda, eu quero que apareça um valor e fique fixo.
      Exemplo, acionou o sensor 1, ai aparece o número 1 e fica fixo no display...

      Se puder me ajudar eu agradeceria muito.
      meu e-mail é rafaelnobre21@terra.com.br

      Excluir
    3. Interessante. Todas as pesquisas que eu vejo é referente a textos se movendo. Eu quero desenhar definido pontos na tela do led 8x8. Sem movimentos. Mas eu geralmente só encontro referências a bibliotecas onde o texto aparecem e são especificados em um método passando uma String como parâmetro. Aguém pode me ajudar nisso?

      Excluir
  14. Boa noite
    Esta dando este erro

    Arduino: 1.6.5 (Windows XP), Placa:"Arduino Uno"

    In file included from Modulo_8x8_Matrix.ino:7:0:
    Modulo_8x8_Matrix:16: error: variable 'font' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
    variable 'font' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

    ResponderExcluir
    Respostas
    1. Estou usando o Windows 10 e o código também há erro de refer~encia nas bibliotecas. Onde informa que os valores de referência são incompatíveis. Eu não encontrei essa biblioteca no site do arduino. :-(

      Excluir
    2. Estou tendo este mesmo erro... vocês descobriram como corrigi-lo?

      Excluir
  15. pode me ajudar ja estou quebrando a cabeça a 3 semanas segue o erro

    Arduino: 1.6.5 (Windows 8.1), Placa:"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

    In file included from testeled.ino:7:0:
    C:\Users\Rafael\Documents\Arduino\libraries\galileo-Pgmspace.h-master/pgmspace.h:28:37: error: 'int sprintf' redeclared as different kind of symbol
    #define sprintf_P(s, f, ...) sprintf((s), (f), __VA_ARGS__)
    ^
    In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:24:0,
    from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26,
    from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29,
    from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:224,
    from testeled.ino:10:
    c:\program files (x86)\arduino\hardware\tools\avr\avr\include\stdio.h:669:12: error: previous declaration of 'int sprintf(char*, const char*, ...)'
    extern int sprintf(char *__s, const char *__fmt, ...);
    ^
    In file included from testeled.ino:7:0:
    c:\program files (x86)\arduino\hardware\tools\avr\avr\include\stdio.h:675:12: error: expected primary-expression before 'char'
    extern int sprintf_P(char *__s, const char *__fmt, ...);
    ^
    c:\program files (x86)\arduino\hardware\tools\avr\avr\include\stdio.h:675:12: error: expected ')' before 'char'
    Multiple libraries were found for "TimerOne.h"

    Used: C:\Users\Rafael\Documents\Arduino\libraries\TimerOne-v9

    Not used: C:\Users\Rafael\Documents\Arduino\libraries\TimerOne-r11

    Erro compilando.

    ResponderExcluir
    Respostas
    1. Oi Rafael,

      O que é essa biblioteca galileo-Pgmspace.h/pgmspace.h ?

      Abraço!

      Excluir
  16. Boa tarde, gostaria de saber o que é preciso mudar para que o texto se desloque na posição vertical.
    Obrigao

    ResponderExcluir
  17. Boa tarde!
    Sou novo neste mundo do Arduino e como toda a novidade, as dúvidas aparecem.
    Estou precisando montar um painel de leds (para deixar no vidro da minha sala onde trabalho), mas com 5 paineis, para deixar informações para os usuários do setor.
    Minhas dúvidas!
    Qual o Arduino utilizar? pode ser o UNO?
    Tem como deixar o scroll como no projeto que vi no yoputube (https://www.youtube.com/watch?v=FoHU6PrZcDg)?
    E por último eu acho!
    Tem como disponibilizar o código que tenho que gravar no arduino?
    Quanto a compilar e a gravar, vou tentar me virar sozinho, pois tenho que quebrar a cabeça também... não tem graça receber tudo mastigado!!!
    Desde já agradeço!

    ResponderExcluir
    Respostas
    1. Boa tarde Henrique,

      Vamos lá.

      - Sim, pode ser o Uno, pois você vai utilizar os módulos em "cascata", ou seja, a saída de dados de um vai ligado na entrada de dados do outro.
      - Eu tenho um projeto muito parecido com esse do vídeo, nesse link: http://www.arduinoecia.com.br/2014/04/Painel-de-led-max7219.html

      Quanto ao código, eu posso te ajudar a tirar alguma dúvida referente ao programa ou circuito. :)

      Abraço!

      Excluir
  18. Olá, eu fui compilar essa programação e apareceu o seguinte erro : fatal error: pgmspace.h: No such file or directory.
    O que eu faço para resolver esse problema ?

    ResponderExcluir
  19. boa noite,
    nao estou conseguindo descompactar o arquivo "TimerOne" do link, como devo proceder??

    ResponderExcluir
  20. Olá Amigo.
    Na minha IDE tambem esta dando esse erro na biblioteca pgmspace.h, ele não esta encontrando esta biblioteca no diretório, a minha versão da IDE é a 1.5.

    ResponderExcluir
  21. hi help me
    Arduino: 1.6.8 (Windows 10), Board: "Arduino/Genuino Uno"

    C:\Users\Bakhu\Documents\Arduino\sketch_apr04b\sketch_apr04b.ino:5:24: fatal error: pgmspace.h: No such file or directory

    #include

    ^

    compilation terminated.

    exit status 1
    Error compiling for board Arduino/Genuino Uno.

    ResponderExcluir
  22. quanto custa esse módulo de leds 8x8 ? Eu preciso de um, já tenho o Arduino.

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Eu tenho um disponível, já montado. Entre em contato utilizando o formulário de contato no lado direito da página. Te passo as informações por email.

      Abraço!

      Excluir
  23. Já estou com a matriz de led, estava trabalhando com Arduino 1.0.6 e atualizei para o Arduino 1.6.8 e agora o programa dá o seguinte erro:

    Error compiling for board Arduino/Genuino Uno.

    Será que vou ter que voltar para o 1.0.6? Peço uma ajuda, Rene.

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Não sei se o erro tem a ver com a versão da IDE. Você tentou algum outro programa ?

      Abraço!

      Excluir
  24. Bom dia! O Código está dando erro de compilação, queria saber qual o erro?

    compilation terminated

    exit status 1
    Erro compilando para placa Arduino/Genuino Uno
    necessito demais desse exemplo, me ajude por favor

    ResponderExcluir
  25. Oi amigo! Existe alguma função no código ou na biblioteca de forma que o texto gire 90º à esquerda ou à direita? A razão para isso é que eu quero encadear vários módulos verticalmente em relação aos pinos de saída do módulo pois, de outra forma, esses pinos atrapalham (não dá para juntar os módulos); Obrigado

    ResponderExcluir
    Respostas
    1. Bom dia !

      Desconheço uma função na biblioteca para fazer isso, mas estou fazendo um post para ligar os módulos do jeito que vc precisa... :)

      Abraço!

      Excluir
    2. OK! Fico no aguardo, obrigado

      Excluir
  26. oi eu gostaria de saber se pode me ajudar, eu estou querendo fazer um painel de leds pequeno de começo porem mais pra frente quero um bem grande de mais ou menos 2 metros por 70 ou 50 cm e eu gostaria de saber se exste um modo mais facil de eu fazer isso tipo eu quero de começo fazer um pequeno e controlar por CI ate ai beleza mas e se eu fizer um bem grande ? eu consigo controlar por CI junto do arduino ? eu terei que escrever em binario nele ?
    exste uma forma que eu possa escrever em decmal mesmo e ele converter para binario ?

    ResponderExcluir