Até agora, nós ligamos LEDs individualmente. Mas se quisermos formar um número com esses LEDs?

Com base nessa ideia simples, vamos aprender a mexer em um componente que possui vários LEDs embutidos que, quando ligados corretamente, nos mostram um número.  Esse componente chama-se Display de Sete Segmentos.

Como esses display é feito com vários LEDs, eles funcionam da mesma aforma que os LEDs da aula anterior. Só que desta vez eles são menores e estão todos juntos dentro da mesma caixinha. Para entender o funcionamento desse display, você deve lembrar, da aula passada, como funciona os terminais dos LEDs. O terminal conectado na base do triangulo deitado chama-se Anodo e nós o conectamos no pino de 5 V do Arduíno. Enquanto isso, o Catodo foi conectado, não diretamente, no pino GND do Arduíno. Além disso, você deve lembrar que cada triangulo deitado representa um LED.

Existem dois tipos de Displays de Sete segmentos, o anodo comum e o Catodo Comum. A diferença entre eles está no terminal conectado em comum com todos os LEDs internos. Perceba que no Display de Anodo comum, todos os fios que saem da base dos triângulos estão conectados diretamente. Analogamente, no display de catodo comum, a ponta do triangulo de todos os LEDs estão conectados por fios, ou seja, estão conectados diretamente.

Vamos precisar de:

  • 1 Display de sete segmentos de anodo comum.
  • 7 resistores de 470 Ω e 1 Resistor de 1kΩ.
  • Protoboard.
  • Arduíno.

Esses displays de sete segmentos são utilizados desde 1910. No entanto, naquela época, como não haviam inventado o LED, usava-se lampadas incandescentes para representar cada segmento.

Como era muito difícil de usar esse modelo com lâmpadas, esse tipo de display de sete segmentos nunca foi tão utilizado. Mas, com a invenção do LED nos anos 70, o display de sete segmentos tornou-se mais comum. Até hoje, ele pode ser encontrado na construção de alguns relógios.

Nossos circuitos vão utilizar o display de sete segmentos como uma forma de mostrar números para o usuário. Por exemplo, queremos saber quantas vezes uma senha foi digitada incorretamente. Assim, podemos usar nosso Arduíno para nos mostrar quantas vezes tentaram abrir nosso cofre!

No circuito que vamos montar, a seguir, cada pino do display representa um LED e, por isso, vamos conectar cada LED em uma porta diferente do Arduíno. Assim, vamos utilizar 7 portas para controlar todos os LEDs. Devemos, portanto, colocar um resistor para cada porta do Arduíno e mais um resistor na entrada comum para proteger o display. De forma semelhante aos LEDs, é necessário colocar um resistor por que a voltagem de 5 V do Arduíno é muito alta e o display pode queimar se conectado diretamente com o Arduíno.

A imagem abaixo ilustra qual pino controla cada segmento. O pino central representa o pino comum a todos os LEDs internos e o pino DP representa o ponto no display de sete segmentos. Para que o circuito mantenha-se organizado e fácil de programar, é importante que você conecte, na mesma ordem, os pinos do display nas portas do Arduíno.

Simulação

Para começar a  montar o circuito básico do display, escreva visor na barra de pesquisa ao lado e coloque-o na protoboard. Lembre-se que é necessário colocar o display bem no meio da protoboard, já que cada LED precisa ser conectada em uma trilha vertical diferente. Em seguida, escolha qual vai ser a polaridade do pino comum, ou seja, se o pino comum vai ser do tipo anodo ou catodo. Nesse exemplo, vamos usar o display de anodo comum, já que ele é mais fácil de ser encontrado.

Seguindo o mesmo procedimento da aula anterior, conecte um resistor na mesma trilha de cada pino do display. Dessa forma, você estará ligando um resistor na saída de cada LED do display.

Repita o procedimento para cada LED e coloque um resistor de 1 kΩ na entrada comum do display, ou seja, no pino central do display. Agora, faça as conexões de cada LED com o Arduíno e a conexão do pino central do display com a entrada de 5 V do Arduíno. Se precisar, revise, no conteúdo da primeira aula, como funciona as conexões internas de cada trilha da Protoboard. Assim, terminamos a montagem do circuito. Por isso,é importante que você entenda por que as ligações foram feitas dessa maneira antes de começar a programar.

Como terminamos de montar o circuito, vamos começar a programar!!

Para que o código fique mais fácil de ser analisado, vamos colocar, ao lado da definição dos pinos, quais segmentos estão conectados em cada pino. Essa forma é interessante para que, no futuro, fique mais fácil de analisar o código.

Como o display de sete segmentos é composto,internamente, por LEDs, definimos os pino de 2 a 8 como saídas do Arduíno no “setup()”, isto é, nas configurações iniciais. Em seguida, no “loop()”, desligamos o LED escrevendo, dentro do “digitalWrite()”, o pino que queremos desligar e a palavra HIGH. Na imagem abaixo, escolhemos desligar o LED A.

Nota:  Ao contrário da aula com LEDs convencionais, a palavra HIGH vai desligar o display de sete segmentos de anodo comum. Se o seu display  for de catodo comum, HIGH  vai ligar os LEDs.

void setup(){
  pinMode(2, OUTPUT); //PINO 2 -> SEGMENTO A  
  pinMode(3, OUTPUT); //PINO 3 -> SEGMENTO B
  pinMode(4, OUTPUT); //PINO 4 -> SEGMENTO C
  pinMode(5, OUTPUT); //PINO 5 -> SEGMENTO D
  pinMode(6, OUTPUT); //PINO 6 -> SEGMENTO E
  pinMode(7, OUTPUT); //PINO 7 -> SEGMENTO F
  pinMode(8, OUTPUT); //PINO 8 -> SEGMENTO G
}

void loop(){
  digitalWrite(A,HIGH);
}

Até agora, nós usamos a palavra HIGH ou LOW para ligar ou desligar um LED. O Arduíno, entretanto, não trabalha com palavras. Ele traduz HIGH para o número 1 e LOW para Zero. Dentro dele, o número 1 mostra que ele deve mandar uma tensão de 5 V para o pino que você indicar. De forma similar, se você escolher um pino e escrever Zero, ele entende que deve deixar a tensão do pino em 0 V. Na imagem abaixo, mostramos que você pode fazer a mesma coisa que a imagem anterior. Mas falando na mesma linguagem do Arduíno.

void setup(){
  pinMode(2, OUTPUT); //PINO 2 -> SEGMENTO A  
  pinMode(3, OUTPUT); //PINO 3 -> SEGMENTO B
  pinMode(4, OUTPUT); //PINO 4 -> SEGMENTO C
  pinMode(5, OUTPUT); //PINO 5 -> SEGMENTO D
  pinMode(6, OUTPUT); //PINO 6 -> SEGMENTO E
  pinMode(7, OUTPUT); //PINO 7 -> SEGMENTO F
  pinMode(8, OUTPUT); //PINO 8 -> SEGMENTO G
}

void loop(){
  digitalWrite(A,1);
}

Agora, individualmente, desligue os LEDs do display de sete segmentos até que eles formem os números de Zero a Nove. Na imagem abaixo, começamos desligando o LED central para ter o Zero.

DICA: Para desligar mais LEDs, basta adicionar mais linhas de “digitalWrite();” e desligar quem você desejar.

void setup(){
  pinMode(2, OUTPUT); //PINO 2 -> SEGMENTO A  
  pinMode(3, OUTPUT); //PINO 3 -> SEGMENTO B
  pinMode(4, OUTPUT); //PINO 4 -> SEGMENTO C
  pinMode(5, OUTPUT); //PINO 5 -> SEGMENTO D
  pinMode(6, OUTPUT); //PINO 6 -> SEGMENTO E
  pinMode(7, OUTPUT); //PINO 7 -> SEGMENTO F
  pinMode(8, OUTPUT); //PINO 8 -> SEGMENTO G
}

void loop(){
  digitalWrite(G,1);
}

Para saber mais:

Existe uma outra forma desligar e ligar os LEDs. Para isso, criamos um vetor computacional na linha 1 da imagem acima. Esse vetor tem as seguintes características:

  • A palavra “int” diz para o Arduíno que o vetor é feito de números inteiros.
  • O “numero_zero_display” é o nome do vetor.
  • “[7]” diz para o Arduíno quanto números eu vou colocar dentro do vetor.Assim, dentro do vetor tem 7 números. Eles vão de Zero a Seis.
  • “{0,0,0,0,0,0,1}” diz para o Arduíno quais números estarão em cada posição. Assim, na posição Zero temos zero. Nas demais posições temos, também, zeros. Mas, na posição Seis temos o número 1.

A estratégia desses código é associar cada posição desse vetor a um segmento de LED do display de sete segmentos. O Arduíno é indexado em zero, ou seja, toda contagem começa em Zero. Desse jeito, se você quer acessar a segunda posição de um vetor, por exemplo, deve pegar o número 1. Assim, a posição Zero do vetor é equivalente ao segmento A, a posição 1 é equivalente ao segmento B e, assim, por diante. Dessa forma, vamos criar duas variáveis e usar o Loop “for” para acessar as posições desse vetor que criamos.  Esse Loop “for” tem as seguintes características:

  • Linha 17: “pino = 2” faz com que a variável pino comece com o valor 2.
  • Linha 17:”pino < 9″ faz com que esse loop acabe quando o valor de pino chegar a 8. Assim, as instruções dentro do loop “for” vão ser executadas 7 vezes. Exatamente a quantidade pinos do display.
  • Linha 17:”pino++” faz com que a variável pino some uma unidade cada vez que as instruções dentro do loop acabarem.
  • Linha 18: “digitalWrite(pino, numero_zero_display [contador])” escreve na porta do Arduíno o valor que está dentro da posição “contador”  no vetor numero_zero_display. Assim, no display de anodo comum, se dentro de uma posição do vetor ter o valor zero, o LED do segmento ligado na porta do Arduino vai permanecer acesso. Analogamente, se dentro da posição do vetor tem o número 1, o LED vai ser desligado. Na primeira vez que esse código for executado, o valor do pino é 2 e ele vai pegar o número da posição zero do vetor.
  • Linha 19: “contador++” soma uma unidade no valor do contador. Isso faz com que o “digitalWrite” acesse a próxima posição do vetor quando esse comando for executado novamente. Assim, a segunda vez que o “digitalWrite” for executado, ele vai escolher a posição 1 do vetor e vai associar o valor dentro dessa posição a porta 3 do Arduíno.
int numero_zero_display [7] = {0,0,0,0,0,0,1};

void setup(){
  pinMode(2, OUTPUT); //PINO 2 -> SEGMENTO A  
  pinMode(3, OUTPUT); //PINO 3 -> SEGMENTO B
  pinMode(4, OUTPUT); //PINO 4 -> SEGMENTO C
  pinMode(5, OUTPUT); //PINO 5 -> SEGMENTO D
  pinMode(6, OUTPUT); //PINO 6 -> SEGMENTO E
  pinMode(7, OUTPUT); //PINO 7 -> SEGMENTO F
  pinMode(8, OUTPUT); //PINO 8 -> SEGMENTO G
}

void loop(){
  int pino = 0;
  int contador = 0;
  
  for(pino = 2; pino < 9; pino++ ){
    digitalWrite(pino,numero_zero_display[contador]);
    contador++;
  }
}