Uma sugestão de módulo para quem precisa utilizar display 7 segmentos sem ter que ligar um monte de fios, é esse módulo display 7 segmentos de 8 dígitos, com CI MAX7219.
Como você pode ver pela imagem, podemos imprimir alguns caracteres nesse display além, é claro, de mostrar os números.
Uma outra maneira de acionar o display, que veremos adiante, é utilizar uma sequência de bits para acionar os segmentos correspondentes no display e criarmos nossos próprios símbolos.
O módulo display Max7219
Aqui no Arduino e Cia já usamos o MAX7219 para controlar tanto módulos matriz de leds 8×8 como displays 7 segmentos:
Da mesma forma que vimos nesses posts, o funcionamento do módulo de 8 dígitos é muito semelhante, pois ele também usa apenas três pinos (lado esquerdo) para conexão ao Arduino ou outro microcontrolador.
No lado direito, encontramos os pinos que permitem a ligação de vários módulos em cascata.
Conexão do módulo display 7 segmentos Max7219 no Arduino
O circuito para ligação ao Arduino fica então dessa maneira, com os pinos 5, 6 e 7 conectados respectivamente aos pinos LOAD, CLK e DIN:
Programa utilizando a biblioteca LedControl
A biblioteca LedControl, que pode ser baixada nesse link é quem vai controlar o acionamento do display. Comandos principais do LedControl utilizados no programa:
// Programa : Display 7 segmentos - 8 digitos MAX7219 // Autor : Arduino e Cia // Carrega a biblioteca LedControl #include "LedControl.h" // Definicoes dos pinos e quantidade de modulos no circuito LedControl lc=LedControl(7,6,5,1); void setup() { // Inicializa o modulo lc.shutdown(0,false); // Ajuste do brilho do display lc.setIntensity(0,3); // Apaga o display lc.clearDisplay(0); } void loop() { // Envia Arduino e Cia para o display writeArduinoOn7Segment(); // Contagem regressiva contagem_regressiva(); // Mostra numeros no lado esquerdo e direito do display numeros_separados(); // Inicia contador de 0 a 1 milhao for (long i=0; i < 1000000; i++) { printNumber(i); } delay(500); } void printNumber(long v) { // Variavel valor digitos int digito1; int digito2; int digito3; int digito4; int digito5; int digito6; int digito7; int digito8; // Calcula o valor de cada digito digito1 = v%10; digito2 = (v / 10) % 10; digito3 = (v/ 100) % 10; digito4 = (v/1000) %10; digito5 = (v/10000) %10; digito6 = (v/100000) %10; digito7 = (v/1000000) %10; digito8 = (v/10000000) %10; // Mostra o valor de cada digito no display lc.setDigit(0,7,(byte)digito8,false); lc.setDigit(0,6,(byte)digito7,false); lc.setDigit(0,5,(byte)digito6,false); lc.setDigit(0,4,(byte)digito5,false); lc.setDigit(0,3,(byte)digito4,false); lc.setDigit(0,2,(byte)digito3,false); lc.setDigit(0,1,(byte)digito2,false); lc.setDigit(0,0,(byte)digito1,false); delay(00); } void writeArduinoOn7Segment() { // Escreve Arduino e Cia no display for (int i =0; i<21; i++) { lc.setChar(0,i,'a',false); lc.setRow(0,i-1,0x05); lc.setChar(0,i-2,'d',false); lc.setRow(0,i-3,0x1c); lc.setRow(0,i-4,B00010000); lc.setRow(0,i-5,0x15); lc.setRow(0,i-6,0x1D); lc.setChar(0,i-7,' ',false); lc.setChar(0,i-8,'e',false); lc.setChar(0,i-9,' ',false); lc.setRow(0,i-10,B1001110); lc.setRow(0,i-11,B0010000); lc.setChar(0,i-12,'a',false); lc.setChar(0,i-13,' ',false); delay(300); } } void contagem_regressiva() { for (int x = 8; x >-1;x--) { lc.setDigit(0,x,x+1, false); lc.setChar(0,x+1,' ',false); delay(300); } lc.clearDisplay(0); } void numeros_separados() { for (int i =0 ; i<10 ; i++) { lc.setDigit(0,0,i,false); lc.setDigit(0,1,i,false); lc.setDigit(0,6,i,false); lc.setDigit(0,7,i,false); delay(300); } lc.clearDisplay(0); }
Vamos dar uma olhada nos principais comandos dessa biblioteca?
Principais comandos da biblioteca LedControl
LedControl lc=LedControl(7, 6, 5 , 1) = Define os pinos que serão ligados ao módulo. Pino 7 do Arduino ao DIN, pino 6 ao CLK e pino 5 ao LOAD. O último valor se refere à quantidade de módulos que estão conectados ao Arduino.
lc.shutdown(0, false) = Esse comando, além de servir para inicializar o display, também serve para apagar o display sem perder os dados em memória. Ele é especialmente útil quando o módulo estiver sendo alimentado por baterias, já que podemos mostrar os dados no display apenas quando for acionado um botão, por exemplo. Nesse caso, basta alterar o último parâmetro para TRUE quando não quisermos que o display permaneça ligado.
lc.setIntensity(modulo, valor) = Regula o brilho do display. O primeiro parâmetro é o número do módulo, e valor pode ser um número entre 0 (mínimo) à 15 (brilho máximo).
lc.setIntensity(modulo, valor) = Regula o brilho do display. O primeiro parâmetro é o número do módulo, e valor pode ser um número entre 0 (mínimo) à 15 (brilho máximo).
lc.setDigit(modulo, digito, valor, ponto_decimal) = Utilizamos para enviar diretamente um número ou o valor de uma variável para determinado digito no display. O parâmetro ponto_decimal pode receber os valores TRUE (exibe o ponto decimal), ou FALSE (desativa o ponto decimal).
Por último, para acionar apenas determinados segmentos do display, usamos o comando lc.setRow(), que tem a seguinte sintaxe :
lc.setRow(numero_modulo, digito,valor)
Desse modo podemos definir valores em decimal, hexa ou binário, mas o comando fica mais fácil de entender se utilizarmos binário. Veja por exemplo a letra “R”, que escrevemos no display usando esse comando:
lc.setRow(0, digito, 0x05)
Em binário, o comando fica assim:
lc.setRow(0, digito, B00000101)
Que significa que estamos acionando apenas os segmentos E e G do display. A figura abaixo mostra exatamente como isso funciona:
Assim, escolha os segmentos que você deseja ligar ou desligar alterando o valor do bit correspondente para 1 ou 0.
Abaixo, vídeo mostrando o funcionamento do programa mostrado acima:
Gostou? Confira mais posts usando o Max7219 aqui mesmo no Arduino e Cia!