Seu Curso

  • Full Screen
  • Wide Screen
  • Narrow Screen
  • Increase font size
  • Default font size
  • Decrease font size

Multiplexando 2 displays de 7 segmentos no Arduino

Imprimir
Avaliação do Usuário: / 13
PiorMelhor 

No tutorial em http://www.seucurso.com.br/index.php?option=com_content&view=article&id=118:acionando-um-display-de-7-segmentos-no-arduino&catid=901:arduino&Itemid=65 vemos como acionar um display de 7 segmentos usando o Arduino, com poucas alterações, neste veremos como acionar dois displays usando técnica de multiplexação. Isso é necessário, pois para cada display de 7 segmentos usamos pelo menos 7 pinos do Arduino, se fosse usá-los separados precisaríamos de 14 pinos, mas o Arduino tem apenas 13. A multiplexação consiste em usar dois transistores como chaveadores e ligar apenas o display no qual desejamos mostrar o número escolhido, desliga-lo e ligar o outro display com um segundo número escolhido, mas tudo tão rápido que o olho nem perceberá que os displays estão sendo ligados e desligados a todo instante.

Para isso você vai precisar:

 

2 displays de 7 segmentos com anodo comum:

 

Quatro resistores de 560 ohms (verde-azul-marrom):

 

 

Dois resistores de 1k ohm (marrom-preto-vermelho):

 

Dois transistores BC 337 ou equivalente:

 

 

 

 

Sendo:

1 –(C) Coletor

2 – (B) Base

3 – (E) Emissor

 

 

Coloque um display de 7 segmentos na placa de ensaios, próximo a ele coloque o transistor BC 337, ao emissor do transistor ligue os resistores de 560 ohms e aos dois pinos comuns (GND) do display, ao coletor do transistor ligue a um dos GND do Arduino.

 

 

Coloque o segundo display de 7 segmentos na placa de ensaio e repita as ligações do primeiro.

 

 

Agora ligue o pino base do transistor que ficou à esquerda a um resistor de 1K ohm e ao pino 11 do Arduino, para o transistor que ficou à direita, ligue o pino base a um resistor de 1K ohm também e depois ao pino 12 do Arduino.

 

 

Lembrando que os segmentos do display são:

 

 

Ligaremos os pinos digitais do Arduino aos dois displays ao mesmo tempo, na seguinte ordem:

Pino

Segmento

3

A

4

B

5

C

6

D

7

E

8

F

9

G

 

 

 

 

Com o código abaixo enviamos os números de zero até nove para os dois displays de 7 segmentos, deixando os transistores no pino 11 e 12 ligados. Dessa forma vemos o mesmo número em ambos os displays:


int a = 3, b = 4, c = 5, d = 6, e = 7, f = 8, g = 9;
int num[10][7] = {
{a,b,c,d,e,f},
{b,c},
{a,b,e,d,g},
{a,b,c,d,g},
{b,c,f,g},
{a,c,d,g,f},
{a,c,d,e,f,g},
{a,b,c},
{a,b,c,d,e,f,g},
{a,b,c,f,g}
};
 
void setup() {
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
}
 
void loop() {
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
apaga();
delay(3000);
for(int i=0;i<10;i++) {
apaga();
numero(i);
delay(1000);
}
}
 
void apaga() {
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
 
void numero(int n) {
for(int i=0;i<7;i++) digitalWrite(num[n][i]);
}

 

 

 

Para escrever dois números diferentes, um em cada display, precisamos alternar o transistor ligado rapidamente, de forma que cada display seja ligado com seu respectivo número, mas o olho não perceba que o outro está desligado. Com algumas alterações temos o código abaixo, que faz exatamente isso:

 

 
int a = 3, b = 4, c = 5, d = 6, e = 7, f = 8, g = 9;
int num[10][7] = {
{a,b,c,d,e,f},
{b,c},
{a,b,e,d,g},
{a,b,c,d,g},
{b,c,f,g},
{a,c,d,g,f},
{a,c,d,e,f,g},
{a,b,c},
{a,b,c,d,e,f,g},
{a,b,c,f,g}
};
 
void setup() {
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
}
 
void loop() {
apaga();
delay(3000);
for(int i=0;i<10;i++)
{
for(int j=0;j<100;j++) {
apaga();
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
numero(i);
delay(10);
apaga();
digitalWrite(11,LOW);
digitalWrite(12,HIGH);
numero(9-i);
delay(10);
}
}
}
 
void apaga() {
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
 
void numero(int n) {
for(int i=0;i<7;i++) digitalWrite(num[n][i]);
}

 

 

 

Com mais dois displays e o tutorial http://www.seucurso.com.br/index.php?option=com_content&view=article&id=90:programando-um-relogio-no-arduino&catid=901:arduino&Itemid=65 fica fácil construir um relógio usando o Arduino!

 

Comentários  

 
0 #6 Errocaio a 07-08-2016 02:12
Por favor gostaria que arruma-se essa programações pois elas estão dando erro na linha
"for(int i=0;i
Citar
 
 
0 #5 ErroFernando Bryan Frizzarin 12-07-2016 17:55
Danilobrr mude a linha:

digitalWrite(nu m[n]);

Para:

digitalWrite(nu m[n],HIGH);
Citar
 
 
0 #4 olha aiDanilobrr 12-07-2016 08:27
serial:57: error: expected constructor, destructor, or type conversion before ';' token



^

C:\Users\Labora torio\Documents \Arduino\serial \serial.ino: In function 'void numero(int)':

serial:59: error: too few arguments to function 'void digitalWrite(ui nt8_t, uint8_t)'

for(int i=0;i
Citar
 
 
0 #3 DanilobrrFernando Bryan Frizzarin 11-07-2016 18:32
Qual o erro?
Citar
 
 
0 #2 Ta dando erroDanilobrr 11-07-2016 11:25
Ta dando erro no numero()
Citar
 
 
+8 #1 Faltando argumento na funçãoThiago de Souza Rios 21-12-2012 08:02
Na função void numero(int n), falta passar o segundo parâmetro para a função digitalWrite(pi no, valor).
Citar
 

Adicionar comentário


Código de segurança
Atualizar

You are here: