Código de Pesquisa

Como Usar um Display de LED de Sete Segmentos com Arduino

Como Usar um Display de LED de Sete Segmentos com Arduino

Displays de LED de sete segmentos estão por toda parte ao nosso redor - desde relógios digitais e eletrodomésticos até indicadores de andares de elevadores e placares. Eles são uma das formas mais intuitivas de exibir informações numéricas, e aprender a controlá-los com um Arduino é uma habilidade fundamental para qualquer entusiasta de eletrônica. Este tutorial irá guiá-lo na construção de um driver de display de sete segmentos simples, mas versátil, que pode contar de 0 a 9, e foi projetado para funcionar com displays de cátodo comum e ânodo comum. Você pode usar este projeto como base para construir uma variedade de dispositivos práticos, como um contador digital para sua oficina, uma leitura de temperatura para uma estação meteorológica, um cronômetro para um jogo de tabuleiro ou um simples marcador de pontos para a sua próxima noite de jogos em família.

Como usar um display LED de sete segmentos com Arduino
Como usar um display LED de sete segmentos com Arduino

Componentes de Hardware

Para acompanhar este projeto, você precisará dos seguintes componentes. A fiação é simples e a lista de componentes é mínima, tornando isso uma construção perfeita para iniciantes.

  • Arduino Uno (ou qualquer cartão compatível)
  • display LED de 7 segmentos (cátodo comum ou ânodo comum)
  • 8 resistores de 1kΩ (560Ω a 1kΩ funciona bem)
  • Fios jumper
  • Placa de ensaio
    Como usar um display LED de sete segmentos com Arduino
    Como usar um display LED de sete segmentos com Arduino

Guia de Fiação

A fiação para este projeto conecta cada segmento do display a um pino digital no Arduino, com um resistor limitador de corrente em série para cada segmento. A principal diferença na fiação depende de você ter um display de cátodo comum ou ânodo comum. Em um display de ânodo comum, todos os ânodos (pernas positivas) dos LEDs internos estão conectados juntos e devem ser conectados à fonte de 5V. Em um display de cátodo comum, todos os cátodos (pernas negativas) estão conectados juntos e devem ser conectados à terra. O código lida automaticamente com a inversão lógica necessária para o seu tipo de display específico, então você só precisa garantir que a fiação física esteja correta.

Arduino code to update the I2C address on the VL53L0X
Código Arduino para atualizar o endereço I2C no VL53L0X — Arduino code to update the I2C address on the VL53L0X

Conforme demonstrado no vídeo, conecte os pinos de segmento do display (A a G e o ponto decimal) aos pinos 2 a 9 do Arduino na ordem. Cada pino de segmento deve ter um resistor de 1kΩ em série. O pino comum (ánodo ou cátodo, dependendo do seu display) deve ser conectado a 5V ou GND, respectivamente. É importante usar resistores individuais para cada segmento em vez de um único resistor compartilhado. Isso garante um brilho consistente em todos os segmentos, independentemente de quantos estejam acesos ao mesmo tempo. Com um único resistor, a corrente seria dividida de maneira desigual, fazendo com que alguns números pareçam mais fracos do que outros.

Explicação do Código

O código deste projeto foi escrito do zero e não requer nenhuma biblioteca externa. Ele foi projetado para ser simples de configurar e adaptar ao seu display específico. As principais partes configuráveis pelo usuário estão na parte superior do arquivo.

#define type 1 // 0 for common cathode and 1 for common anode

const int displayPins[7] = {2,3,4,5,6,7,8}; // define pins
const int dicimalPoint = 9;// decimal point

A primeira linha é a configuração mais crítica. Você deve definir otypevariável para1se você está usando um display de ânodo comum e0se você estiver usando um display de cátodo comum. Este único valor informa ao código se deve inverter os sinais lógicos, garantindo que os segmentos corretos se acendam.

As duas próximas linhas definem os pinos do Arduino conectados ao display. AdisplayPinso array contém os números dos pinos para os segmentos A a G, edicimalPointdefine o pino para o ponto decimal. Se você desejar usar pinos diferentes, pode modificar esses valores, mas é recomendado mantê-los em ordem sequencial para simplicidade.

O código inclui uma função personalizada,writeDigit(int digit), que é a maneira primária de exibir um número. Você pode chamar esta função do seu próprio código para mostrar qualquer dígito de 0 a 9. Por exemplo, para exibir o número 5, você simplesmente chamariawriteDigit(5);A função lida com a tarefa complexa de procurar o padrão de segmento correto e configurar os pinos de acordo. Outra função auxiliar,convertHighLow(int v), lida com a conversão lógica entre displays de ânodo comum e cátodo comum, para que você não precise se preocupar com a lógica interna.

Demonstração de Projeto Ao Vivo

Uma vez que a fiação esteja completa e o código tenha sido carregado, o Arduino começará a contar de 0 a 9, exibindo cada dígito por um segundo no display de sete segmentos. Depois de alcançar 9, o ponto decimal acenderá por três segundos antes que a contagem reinicie. Conforme mostrado no vídeo, o uso de resistores individuais garante que o brilho dos dígitos se mantenha consistente, seja exibindo um único segmento (como o número 1) ou todos os sete segmentos (como o número 8). Esta é uma melhoria significativa em relação ao uso de um único resistor, que causaria variações perceptíveis no brilho.

Capítulos

  • [00:00] Introdução ao Display de Sete Segmentos
  • [00:22] Compreendendo Displays de Sete Segmentos
  • [01:09] Fiação de Anodo Comum vs. Catodo Comum
  • [03:25] Fiação Passo a Passo com Resistores
  • [06:07] Considerações sobre Demonstração e Brilho
  • [08:26] Explicação e Configuração do Código
  • [14:25] Funções de Configuração e Loop Principal
  • [16:33] Conclusão e Aplicações

Imagens

Como usar um display de sete segmentos LED com Arduino
Como usar um display de sete segmentos LED com Arduino
Código Arduino para atualizar o endereço I2C no VL53L0X
Código Arduino para atualizar o endereço I2C no VL53L0X
Como usar um display LED de sete segmentos com Arduino
Como usar um display LED de sete segmentos com Arduino
Como usar um display LED de sete segmentos com Arduino
Como usar um display LED de sete segmentos com Arduino
Display de LED 74HC595: Segmento Sete explicado
Display de LED 74HC595: Segmento Sete explicado
558-Lesson 21: Using a Seven-Segment Display | Arduino Step-by-Step Course
Idioma: C++
/*
 *  Robojax Arduino Step-by-Step Course
 * Lesson 21: Seven-Segment Display
 * Display number on seven-segment display with Arduino

   Please watch video instruction here: https://youtu.be/pxUjEsJQW2M
   or watch this https://youtu.be/f3GqRMQ8jYs

 * Written by Ahmad Shamshiri for Robojax (Robojax.com)
 * on December 07, 2018 at 22:34 in Ajax, Ontario, Canada

 * 
  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */


#define type 1 // 0 for common cathode and 1 for common anode

const int displayPins[7] = {2,3,4,5,6,7,8}; // define pins
const int dicimalPoint = 9;// decimal point

// array for seven-segment LED values. Do not change. 
//This is used for both common anode and common cathode
byte displayLEDs[10][7] = { 
        { 0,0,0,0,0,0,1 },  // = 0
        { 1,0,0,1,1,1,1 },  // = 1
        { 0,0,1,0,0,1,0 },  // = 2
        { 0,0,0,0,1,1,0 },  // = 3
        { 1,0,0,1,1,0,0 },  // = 4
        { 0,1,0,0,1,0,0 },  // = 5
        { 0,1,0,0,0,0,0 },  // = 6
        { 0,0,0,1,1,1,1 },  // = 7
        { 0,0,0,0,0,0,0 },  // = 8
        { 0,0,0,0,1,0,0 }   // = 9     
        }; 
/*
 * 
 * @brief Writes digit to display 
 * @param digit (integer)
 * @return no return value
 * Written by Ahmad Shamshiri on Friday, December 7, 2018 for Robojax.com
 */        
void writeDigit(int digit) {
  // Robojax Seven-Segment Display for Arduino
  Serial.print(digit);
  Serial.print(" ");

   int digitValue;
  for (int i=0; i < 7; i++) 
  {

      digitalWrite(displayPins[i], convertHighLow(displayLEDs[digit][i]));// write the HIGH or LOW (depending on the type) to output pin
      Serial.print(convertHighLow(displayLEDs[digit][i]));// print the result to the Serial monitor

  }// for i
}//writeDigit ends here

/*
 * 
 * @brief Converts HIGH and LOW based on the "type" variable value
 * if type is 1, converts the "V" to LOW, or returns it as it is if type is 0 (zero)
 * @param v (integer)
 * @return the convertedValue
 * Written by Ahmad Shamshiri (Robojax.com) on Friday, December 8, 2018 for Robojax.com
 */  
int convertHighLow(int v)
{
  int convertedValue;
    if(type ==0)
    {
      convertedValue = 1 - v;// if common anode, change the HIGH to LOW and LOW to HIGH
    }else{
      convertedValue = v;// if common cathode, keep it the same
    } 

    return convertedValue;
}

void setup() {
  // Robojax Seven-Segment Display for Arduino
//Robojax Arduino Step-by-Step Course http://robojax.com/L/?id=338  
  for(int d=0; d<8; d++)
  {
    pinMode(displayPins[d], OUTPUT);// set pin as output
    
  }
   pinMode(dicimalPoint,OUTPUT);// define a pin for decimal point
   digitalWrite(dicimalPoint,HIGH);// turn decimal point OFF. Set to LOW if common Anode and HIGH for common cathode

  Serial.begin(9600);// initialize serial monitor with 9600 baud
}// setup ends here


void loop() {
  // Robojax Seven-Segment Display for Arduino
//Robojax Arduino Step-by-Step Course http://robojax.com/L/?id=338  
 for (int i=0; i<=9 ; i++) {
   writeDigit(i); 
   Serial.println("=====");
   delay(1000);
  }
  digitalWrite(dicimalPoint,LOW);// turn decimal point ON
  delay(3000);
 // writeDigit(4);
  // delay(3000);

}// loop ends here

Coisas que você pode precisar

Arquivos📁

Outros arquivos