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:

Display de LED de Sete Segmentos

Figura 01 – Display de LED de Sete Segmentos

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:

Diagrama esquemático do display de 7 segmentos com Arduino

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.

Pinagem do display de 7 segmentos de LED

 

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):

Arduino

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é!

 

Sobre Fábio dos Reis (1195 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

22 Comentários em Como usar um display de LED de sete segmentos com Arduino

  1. Olá, preciso de uma dica para a programação do Java em comando ao arduino para acender led

  2. Ó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?

  3. VOCE É O CARA! ou MeLhor VOCE É O MÁXIMO !

  4. Show! Excelente trabalho e linguagem de fácil acesso a todos.

  5. Adilson Andrade // 21/02/2018 em 1:30 // Responder

    Ola
    como posso visualizar valores do potenciometro em 4 displays 7 seg individuais auxiliado pelo CI multiplexador MAX 7219

  6. Leandro Dessi de Paula // 24/10/2018 em 20:36 // Responder

    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!

  7. Carlos Montalvao // 27/06/2019 em 12:34 // Responder

    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!

  8. Carlos Montalvao // 27/06/2019 em 12:42 // Responder

    quando eu pus a programação e mandeia para o arduino nada de luz ascendo.
    O que se passa?

  9. Carlos Montalvao // 27/06/2019 em 12:43 // Responder

    Ola
    como posso visualizar valores do potenciometro em 4 displays 7 seg individuais auxiliado pelo CI multiplexador MAX 7219

  10. Carlos Montalvao // 27/06/2019 em 12:51 // Responder

    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.

  11. Joao Garcia // 06/05/2020 em 17:08 // Responder

    Olá, Fábio! Parabéns pela explicação. Você foi muito didático. Até o velho aprendiz entendeu! Abraços!

  12. acrescentando um botão para fazer o incremento da contagem, como ficaria a programação disso?

  13. José Garcia Martins // 10/07/2020 em 13:31 // Responder

    Meus sinceros parabéns Professor Fábio: Você explica bem detalhado. Muito obrigado!

  14. Antonio Carlos da Silva Fernandes // 08/08/2020 em 13:55 // Responder

    o programa está bem didático, mas, vc poderia explicar um pouco mais a função mostranumero.

  15. Gino Bataiote // 14/04/2022 em 19:03 // Responder

    Olá, parabéns pelo projeto, eu montei e ficou ótimo, eu gostaria de saber como adicionar um buzzer no lugar do ponto decimal,obrigado.

Escreva um comentário

Seu e-mail não será divulgado


*