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);
    }
  }
}