// CASO 4
// DISPLAY ANODO COMUM
// USANDO VETOR e A FUNÇÃO ESCREVE DISPLAY

#define a 2 // conexão do pino 2 com o segmento a
#define b 3 // conexão do pino 3 com o segmento b
#define c 4 // conexão do pino 4 com o segmento c
#define d 5 // conexão do pino 5 com o segmento d
#define e 6 // conexão do pino 6 com o segmento e
#define f 7 // conexão do pino 7 com o segmento f
#define g 8 // conexão do pino 8 com o segmento g
#define dp 9 // conexão do pino 9 com o segmento dp
int tempo = 20; // variável tempo para o delay.
                // o valor 20 foi escolhido para 
                // que o display pareça aceso.

// declaração do vetor para controlar o estado dos pinos
const byte Pinos[8] = { 2, 3, 4, 5, 6, 7, 8, 9 };

// declaração do vetor que corresponde aos segmentos
// que devem ser acesos, os segmentos a, b , c
// o valor foi obtido considerenado o uso da função
// bitRead
// os valores estão em binário, hexadecimal e decimal
// apenas para exemplificar
const byte abc[3]=
{
0b11111000, // segmentos abc acesos - valor binário.
0xF8,       // segmentos abc acesos - valor hexadecimal.
248,        // segmentos abc acesos - valor decimal
};


void setup()
 {
    // contador crescente até 7 para configurar pinos como saida
   for(int i = 0; i < 8; i++)
     {
       pinMode(Pinos[i], OUTPUT);
     }
delay(10); //pequeno atraso

// o trecho abaixo garante que o display iniciará
// totalmente apagado
    for(int i = 0; i < 8; i++)
     {
       digitalWrite(Pinos[i], 1);
     }

 }
 // criação da função para escrever no display
void escreveDisplay(int num)
{
byte numBit = abc[num];
for (int i = 0; i < 8; i++)
{
int bit = bitRead(numBit, i);
digitalWrite(Pinos[i], bit);
}
}

void loop()
 {
// o conteudo da posição 0 do vetor abc
// que é o valor em binário para que os segmentos
// abc sejam acesos 
// será lido e escrito nas respectivas posições

 escreveDisplay(0); 
 delay(tempo); // pequeno atraso

// garante que o display esteja apagado
  for(int i = 0; i < 8; i++)
     {
       digitalWrite(Pinos[i], 1);
     }
  delay(300); // atraso 

// o conteudo da posição 1 do vetor abc
// que é o valor em hexadecimal para que os segmentos
// abc sejam acesos 
// será lido e escrito nas respectivas posições

escreveDisplay(1);
 delay(tempo);

// garante que o display esteja apagado
  for(int i = 0; i < 8; i++)
     {
       digitalWrite(Pinos[i], 1);
     }
  delay(300);

// o conteudo da posição 2 do vetor abc
// que é o valor em decimal para que os segmentos
// abc sejam acesos 
// será lido e escrito nas respectivas posições

escreveDisplay(2);
 delay(tempo);

// garante que o display esteja apagado
  for(int i = 0; i < 8; i++)
     {
       digitalWrite(Pinos[i], 1);
     }
  delay(300);

 }