Hoje vou falar de outro display bastante comum utilizado nos mais variados projetos, mostrando como usar um display 7 segmentos com Arduino, como esse da imagem abaixo:

Display 7 segmentos FJ5101AH

O display de 7 segmentos, como o próprio nome diz, tem 7 partes, ou segmentos geralmente construidos com tecnologia LED, que podem ser agrupados de modo a formar números e letras.

Display - letras e numeros

Os segmentos são organizados de A a F:

Display 7 segmentos - Disposição dos segmentos

Assim, se você quiser mostrar o número 1, basta ativar os segmentos B e C. Para mostrar o número 3, os segmentos A, B, C, D e G, e assim por diante.

Conexão Display 7 segmentos com Arduino

A ligação ao Arduino Uno que vamos usar será com os pinos digitais de 2 a 9, mais o GND,  na seguinte sequência:

Pino ArduinoPino Display
2Pino Segmento A
3Pino Segmento B
4Pino Segmento C
5Pino Segmento D
6Pino Segmento E
7Pino Segmento F
8Pino Segmento g
9Pino Segmento PONTO
GNDPino 3 do Display (GND)

Um ponto importante é a utilização dos resistores de 220 ohms para cada pino. Como o display trabalha com 2V é necessário limitar a corrente, evitando queimar o componente:

Circuito Arduino Display 7 segmentos

Para o modelo de display que estou utilizando (FJ5101AH, catodo comum), a disposição dos pinos é mostrada na próxima imagem. Se o seu display for de outro modelo, basta descobrir qual pino corresponde a cada segmento.

Pinagem display

Isso pode ser feito utilizando-se um multimetro ou até mesmo uma pilha, tomando o cuidado de respeitar a voltagem máxima que comentei acima: 2 volts.

Programa Contador crescente

Finalmente o programa, baseado no código desenvolvido pelo site hacktronics. Fiz algumas alterações no mesmo, para que o display mostre não só os números de 0 a 9, mas também as letras de A a F, em ordem crescente:

// Programa: Contador crescente 0 a F
// Modificacoes e comentarios: Arduino e Cia
// Baseado no programa:
// Arduino 7 segment display example software
// http://www.hacktronics.com/Tutorials/arduino-and-7-segment-led.html
// License: http://www.opensource.org/licenses/mit-license.php (Go crazy)
// Define a ordem de ligação dos segmentos, dos digitos 0 a F
// Este padrão é para display de catodo comum
// Para display de anodo comum, modifique os valores de 0 para 1 e 
// de 1 para 0
// 1 = LED ligado, 0 = LED desligado, nessa ordem :
//                   Arduino pinos: 2,3,4,5,6,7,8

byte seven_seg_digits[16][7] = { { 1,1,1,1,1,1,0 },  // = Digito 0
                                 { 0,1,1,0,0,0,0 },  // = Digito 1
                                 { 1,1,0,1,1,0,1 },  // = Digito 2
                                 { 1,1,1,1,0,0,1 },  // = Digito 3
                                 { 0,1,1,0,0,1,1 },  // = Digito 4
                                 { 1,0,1,1,0,1,1 },  // = Digito 5
                                 { 1,0,1,1,1,1,1 },  // = Digito 6
                                 { 1,1,1,0,0,0,0 },  // = Digito 7
                                 { 1,1,1,1,1,1,1 },  // = Digito 8
                                 { 1,1,1,0,0,1,1 },  // = Digito 9
                                 { 1,1,1,0,1,1,1 },  // = Digito A
                                 { 0,0,1,1,1,1,1 },  // = Digito B
                                 { 1,0,0,1,1,1,0 },  // = Digito C
                                 { 0,1,1,1,1,0,1 },  // = Digito D
                                 { 1,0,0,1,1,1,1 },  // = Digito E
                                 { 1,0,0,0,1,1,1 }   // = Digito F
                                 };


void setup() 
{  
  pinMode(2, OUTPUT); //Pino 2 do Arduino ligado ao segmento A  
  pinMode(3, OUTPUT); //Pino 3 do Arduino ligado ao segmento B
  pinMode(4, OUTPUT); //Pino 4 do Arduino ligado ao segmento C
  pinMode(5, OUTPUT); //Pino 5 do Arduino ligado ao segmento D
  pinMode(6, OUTPUT); //Pino 6 do Arduino ligado ao segmento E
  pinMode(7, OUTPUT); //Pino 7 do Arduino ligado ao segmento F
  pinMode(8, OUTPUT); //Pino 8 do Arduino ligado ao segmento G
  pinMode(9, OUTPUT); //Pino 9 do Arduino ligado ao segmento PONTO
  writePonto(0);  // Inicia com o ponto desligado
}

void writePonto(byte dot)   //Funcao que aciona o ponto no display
{  
  digitalWrite(9, dot);
}

void sevenSegWrite(byte digit)  //Funcao que aciona o display
{
  byte pin = 2;

  //Percorre o array ligando os segmentos correspondentes ao digito
  for (byte segCount = 0; segCount < 7; ++segCount)  
  { 
    digitalWrite(pin, seven_seg_digits[digit][segCount]);
    ++pin;
  }
    writePonto(1);  //Liga o ponto
    delay(100);   //Aguarda 100 milisegundos
    writePonto(0);  //Desliga o ponto
}

void loop() 
{
  //Contador de 0 a 15, ligando os segmentos correspondentes
  //0 a 9 = liga os segmentos correspondentes aos numeros
  //10 a 15 = Forma as letras A,B,C,D,E,F
  for (byte count = 0; count < 16; count++)
  {
     delay(500);
     sevenSegWrite(count);
  }
  delay(4000);
}

Não encontrei o datasheet específico desse display FJ5101AH.Procurando modelos similares, encontrei as informações abaixo, que podem ser utilizadas como base:

Display 7 Segmentos - Pinagem e dimensões
Display 7 segmentos - Dados técnicos

No próximo artigo vou usar esse mesmo display de 7 segmentos com o Arduino, mas gerenciado por um circuito integrado específico para trabalhar com displays: o Max7219.

Atualizado: Controlando display 7 segmentos com o Max7219

Atualizado: Ligando 2 displays 7 segmentos ao Max7219

Gostou? Confira outros posts usando displays 7 segmentos aqui mesmo no Arduino e Cia!

Avalie este post!