Boas a todos...
O meu projecto de hoje tinha o objectivo de implementar um contador de 2 dígitos usando 2 displays de 7 segmentos.
Eis o meu material:
- Condensador 100nF
- CI 74HC138N - Descodificador/multiplexer
- 2 displays 7 Segmentos
- 2 Transistores VN2222L
Para aumentar a rentabilidade das linhas do Arduino usei o multiplexer... para facilitar liguei o Y0 e o Y7 pois têm a combinação mais fácil.
Como o multiplexer tem as saídas negadas tive de as ligar ao ground dos displays, ou seja os displays só funcionam quando Y0 e Y7 estão a zero.
Esquema eléctrico não coloco aqui porque também não fiz nenhum... Fiz tudo de cabeça lol...
Problema: Apenas imprime em um display de cada vez. Ajudem a melhorar o código!
Vídeo: (Conta até 99)
Código:
int Selects = 13; // A B C Selects
int EnAB = 12; // Enables G2A G2B
int G1 = 11; // Enable G1
// Pinos para os displays 10,9,8,7,6,5,4,3
unsigned int cont = 0;
// Pinos
int todos[]={10,9,8,7,6,5,4,3};
void setup()
{
pinMode(Selects,OUTPUT);
pinMode(EnAB,OUTPUT);
pinMode(G1,OUTPUT);
for(int i=0; i<sizeof(todos);i++)
{
pinMode(todos[i],OUTPUT);
}
}
void loop() // Melhorar este loop para que imprima um valor constante enquanto o contador nao mudar
{
lesssig(cont);
delay(500);
moresig(cont);
delay(500);
if(cont<99)
cont++;
else
cont=0;
}
void lesssig(unsigned int num)
{
// Escrita no display menos significativo
unsigned int right;
unsigned int conv;
right = num%10;
switch(right)
{
case 0:
{
digitalWrite(Selects,LOW);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(10,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(7,LOW);
digitalWrite(3,LOW);
break;
}
case 1:
{
digitalWrite(Selects,LOW);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
digitalWrite(7,LOW);
digitalWrite(5,LOW);
digitalWrite(4,LOW);
digitalWrite(3,LOW);
break;
}
case 2:
{
digitalWrite(Selects,LOW);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(3,HIGH);
digitalWrite(10,HIGH);
digitalWrite(9,HIGH);
digitalWrite(7,LOW);
digitalWrite(4,LOW);
digitalWrite(8,LOW);
break;
}
case 3:
{
digitalWrite(Selects,LOW);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(3,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(7,LOW);
digitalWrite(4,LOW);
digitalWrite(10,LOW);
break;
}
case 4:
{
digitalWrite(Selects,LOW);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(4,HIGH);
digitalWrite(6,HIGH);
digitalWrite(3,HIGH);
digitalWrite(8,HIGH);
digitalWrite(7,LOW);
digitalWrite(5,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
break;
}
case 5:
{
digitalWrite(Selects,LOW);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(5,HIGH);
digitalWrite(4,HIGH);
digitalWrite(3,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(7,LOW);
digitalWrite(6,LOW);
digitalWrite(10,LOW);
break;
}
case 6:
{
digitalWrite(Selects,LOW);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(5,HIGH);
digitalWrite(4,HIGH);
digitalWrite(3,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(7,LOW);
digitalWrite(6,LOW);
digitalWrite(10,HIGH);
break;
}
case 7:
{
digitalWrite(Selects,LOW);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(7,LOW);
digitalWrite(4,LOW);
digitalWrite(3,LOW);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
break;
}
case 8:
{
digitalWrite(Selects,LOW);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(5,HIGH);
digitalWrite(4,HIGH);
digitalWrite(3,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(7,LOW);
digitalWrite(6,HIGH);
digitalWrite(10,HIGH);
break;
}
case 9:
{
digitalWrite(Selects,LOW);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(5,HIGH);
digitalWrite(4,HIGH);
digitalWrite(3,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(7,LOW);
digitalWrite(6,HIGH);
digitalWrite(10,LOW);
break;
}
default:
{
digitalWrite(Selects,LOW);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(7,HIGH);
}
}
}
void moresig(unsigned int num)
{
// Escrita no display mais significativo
digitalWrite(Selects,HIGH);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
unsigned int left;
unsigned int div;
div=cont/10;
switch(div)
{
case 0:
{
digitalWrite(Selects,HIGH);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(10,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(7,LOW);
digitalWrite(3,LOW);
break;
}
case 1:
{
digitalWrite(Selects,HIGH);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
digitalWrite(7,LOW);
digitalWrite(5,LOW);
digitalWrite(4,LOW);
digitalWrite(3,LOW);
break;
}
case 2:
{
digitalWrite(Selects,HIGH);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(3,HIGH);
digitalWrite(10,HIGH);
digitalWrite(9,HIGH);
digitalWrite(7,LOW);
digitalWrite(4,LOW);
digitalWrite(8,LOW);
break;
}
case 3:
{
digitalWrite(Selects,HIGH);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(3,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(7,LOW);
digitalWrite(4,LOW);
digitalWrite(10,LOW);
break;
}
case 4:
{
digitalWrite(Selects,HIGH);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(4,HIGH);
digitalWrite(6,HIGH);
digitalWrite(3,HIGH);
digitalWrite(8,HIGH);
digitalWrite(7,LOW);
digitalWrite(5,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
break;
}
case 5:
{
digitalWrite(Selects,HIGH);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(5,HIGH);
digitalWrite(4,HIGH);
digitalWrite(3,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(7,LOW);
digitalWrite(6,LOW);
digitalWrite(10,LOW);
break;
}
case 6:
{
digitalWrite(Selects,HIGH);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(5,HIGH);
digitalWrite(4,HIGH);
digitalWrite(3,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(7,LOW);
digitalWrite(6,LOW);
digitalWrite(10,HIGH);
break;
}
case 7:
{
digitalWrite(Selects,HIGH);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(7,LOW);
digitalWrite(4,LOW);
digitalWrite(3,LOW);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
break;
}
case 8:
{
digitalWrite(Selects,HIGH);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(5,HIGH);
digitalWrite(4,HIGH);
digitalWrite(3,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(7,LOW);
digitalWrite(6,HIGH);
digitalWrite(10,HIGH);
break;
}
case 9:
{
digitalWrite(Selects,HIGH);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(5,HIGH);
digitalWrite(4,HIGH);
digitalWrite(3,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(7,LOW);
digitalWrite(6,HIGH);
digitalWrite(10,LOW);
break;
}
default:
{
digitalWrite(Selects,HIGH);
digitalWrite(EnAB,LOW);
digitalWrite(G1,HIGH);
digitalWrite(7,HIGH);
}
}
}