Como usar um display de LED de sete segmentos com Arduino
Usando um display de LED de sete segmentos com Arduino
Um display de LEDs é um componente utilizado para exibir informação em um painel por meio do emprego de múltiplos segmentos de LEDs que emitem luz, acionados por tensões entre 2 e 5VCC geralmente.
Esse tipo de display pode exibir caracteres alfanuméricos, apenas números, ou ainda símbolos, além de formas geométricas e pontos em alguns modelos.
O tipo de display de LED mais simples é o Display de Sete Segmentos que, como o próprio nome diz, é composto por sete segmentos (LEDs) que podem ser acionados individualmente; geralmente, há também um oitavo segmento, que aciona um LED para representação de um ponto decimal.
A figura a seguir mostra um display de sete segmentos típico, que possui também um LED extra para representar o ponto decimal:
Neste tutorial vou mostrar como acionar um display de 7 segmentos típico, criando um contador numérico de 0 a 9, usando o Arduino.
Diagrama esquemático
Na figura a seguir temos o diagrama esquemático do circuito que vamos utilizar:
Lista de componentes
Precisaremos dos seguintes componentes para elaborar o circuito:
- 1 Arduino Uno (ou Mega)
- 8 Resistores de 220Ω
- 1 Display de LED de sete segmentos, catodo comum (pode ser utilizado anodo comum, porém deverão ser feitas alterações simples no circuito e no código)
- Matriz de contatos
- Fios (jumpers) diversos.
Código do sketch
Abaixo temos o código do programa que será executado neste circuito:
// Matriz de bits para representar os números de 0 a 9: int numero[11][8] = { // 11 linhas, 8 colunas { 1,1,1,1,1,1,0,0 }, //0 { 0,1,1,0,0,0,0,0 }, //1 { 1,1,0,1,1,0,1,0 }, //2 { 1,1,1,1,0,0,1,0 }, //3 { 0,1,1,0,0,1,1,0 }, //4 { 1,0,1,1,0,1,1,0 }, //5 { 0,0,1,1,1,1,1,0 }, //6 { 1,1,1,0,0,0,0,0 }, //7 { 1,1,1,1,1,1,1,0 }, //8 { 1,1,1,0,0,1,1,0 }, //9 { 0,0,0,0,0,0,0,1 } //ponto decimal }; // Array de configuração dos pinos digitais associados a cada segmento: const int segmentos[8] = { 2,3,4,5,6,7,8,9 }; // 2 = segmento a // 3 = segmento b // 4 = segmento c // 5 = segmento d // 6 = segmento e // 7 = segmento f // 8 = segmento g // 9 = ponto decimal void setup() { // Configurar os pinos de cada segmento para saída: for (int i = 0; i <= 7; i++) { pinMode(segmentos[i], OUTPUT); } } void loop() { // Displays de catodo comum: acendem com valor 1 nos pinos digitais // chamar função mostraNumero, que exibe os números em sequência a cada 0,5 segundo (500ms): for (int i = 0; i <=10; i++) { mostraNumero(i); delay(500); } } // Função mostraNumero, que acende os LEDs correspondentes para exibir os números: void mostraNumero(int valor) { // valor é a linha (número a mostrar) int pino = 2; // começar contagem no pino 2 for (int i = 0; i < 8; i++) { digitalWrite(pino, numero[valor][i]); // fixa na linha e aciona os bits de cada coluna (0 ou 1) pino++; } } |
Funcionamento do Código
Matriz de Bits
A primeira parte do código é uma matriz chamada numero. Essa matriz é usada para representar os números de 0 a 9 e um ponto decimal (usando o último elemento da matriz). A matriz é uma matriz bidimensional com 11 linhas e 8 colunas, na qual cada linha representa um dígito (0 a 9 e o ponto decimal, com 8 bits), e cada coluna representa um segmento do display de 7 segmentos.
Sendo assim, cada elemento da matriz (numero[i][j]) é um valor binário (0 ou 1) que determina se um determinado segmento do display deve estar aceso (1) ou apagado (0) para exibir o número correspondente.
Configuração dos Pinos
Na sequência temos a configuração dos pinos digitais associados a cada segmento do display de 7 segmentos, usando um array de números. Os pinos serão configurados como saída usando a função pinMode na função setup().
Função setup()
Dentro da função setup(), todos os pinos digitais associados aos segmentos são configurados como saída, para que seja possível controlá-los.
Função loop()
A função loop() é onde o programa principal é executado continuamente. Nesse caso, ele exibe os números de 0 a 9 e o ponto decimal em sequência a cada 500 milissegundos (0,5 segundos). Isso é feito chamando a função mostraNumero(i) em um loop for que varia de 0 a 10.
Função mostraNumero(int valor)
Esta função recebe um valor inteiro que representa o número que você deseja exibir. O valor é usado como índice para acessar a matriz numero e determinar quais segmentos do display de 7 segmentos devem ser acesos ou apagados para exibir o número correspondente.
O loop for dentro da função mostraNumero percorre cada coluna da matriz numero (cada segmento do display) e usa a função digitalWrite para definir o estado (ligado ou desligado) de cada segmento com base nos valores na matriz numero.
Visualização
Veja o circuito montado em ação, realizando a contagem de números de 0 a 9 (e o ponto decimal também):
Se preferir, assista a um vídeo que mostra os procedimentos descritos em ação:
É isso aí! Nos próximos tutoriais vamos explorar mais a fundo o uso de displays de sete segmentos, incluindo displays de dois ou mais dígitos, e também o uso de bibliotecas do Arduino para esse componente.
Até!
Olá, preciso de uma dica para a programação do Java em comando ao arduino para acender led
Olá Moraes!
Você quer acionar um LED usando uma aplicação escrita em Java? Acho que isso pode te ajudar:
https://odelotstuff.wordpress.com/2013/12/20/6-controlar-arduino-por-um-programa-externo-app-java-conversando-via-porta-serial/
Se conseguir poste aqui!
Abraço!
Óla, gostaria de saber como faço para inverter a contagem do display de 9 para 0. a alteração deve ser feita no void loop?
Sim, você deve inverter a contagem no laço for, começando no valor maior e terminando em zero.
VOCE É O CARA! ou MeLhor VOCE É O MÁXIMO !
Obrigado Maurício!
Show! Excelente trabalho e linguagem de fácil acesso a todos.
Obrigado Tiago!
Ola
como posso visualizar valores do potenciometro em 4 displays 7 seg individuais auxiliado pelo CI multiplexador MAX 7219
Isso é um pouco mais complexo Adilson, e vou escrever um artigo a respeito em breve. Abraço!
olá!
Eu posso usar o display led de 7 segmentos 4 dígitos anodo para medir temperatura de um forno usando o arduino?
Você pode me ajudar a montar o projeto?
obrigado!
olá!
Eu posso usar o display led de 7 segmentos 4 dígitos anodo para medir temperatura de um forno usando o arduino?
Você pode me ajudar a montar o projeto?
obrigado!
quando eu pus a programação e mandeia para o arduino nada de luz ascendo.
O que se passa?
Ola
como posso visualizar valores do potenciometro em 4 displays 7 seg individuais auxiliado pelo CI multiplexador MAX 7219
Erro:Arduino: 1.8.9 (Windows 10), Placa:”Arduino/Genuino Uno”
C:\Users\UTILIZ~1\AppData\Local\Temp\ccNNIYoT.ltrans0.ltrans.o: In function `main’:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:43: undefined reference to `setup’
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:46: undefined reference to `loop’
collect2.exe: error: ld returned 1 exit status
exit status 1
Erro ao compilar para a placa Arduino/Genuino Uno.
Este relatório teria mais informação com a
opção «Mostrar mensagens detalhadas durante a
compilação» seleccionada nas Preferências.
Olá, Fábio! Parabéns pela explicação. Você foi muito didático. Até o velho aprendiz entendeu! Abraços!
Muito obrigado João, fico feliz em ajudar!
acrescentando um botão para fazer o incremento da contagem, como ficaria a programação disso?
Meus sinceros parabéns Professor Fábio: Você explica bem detalhado. Muito obrigado!
Obrigado José!
o programa está bem didático, mas, vc poderia explicar um pouco mais a função mostranumero.
Olá, parabéns pelo projeto, eu montei e ficou ótimo, eu gostaria de saber como adicionar um buzzer no lugar do ponto decimal,obrigado.