sexta-feira, 28 de setembro de 2018

7-seg LED Display

Nessa atividade utilizando o simulador Proteus vimos um pouco do display de 7 segmentos. Há dois tipos de display, anodo comum e catodo comum, onde o que muda é o nível do sinal para ligar o LED. Cada pino do display é referente à um led e é especificado no diagrama de cada peça.


A atividade desenvolvida em sala pedia que fosse criado um contador de 0 a 9. Mas primeiro eu precisava definir o sinal para o display. Segue o código:

byte seven_seg_digits[10][7] = { { 1,1,1,1,1,1,0 },  // = 0
                                 { 0,1,1,0,0,0,0 },  // = 1
                                 { 1,1,0,1,1,0,1 },  // = 2
                                 { 1,1,1,1,0,0,1 },  // = 3
                                 { 0,1,1,0,0,1,1 },  // = 4
                                 { 1,0,1,1,0,1,1 },  // = 5
                                 { 1,0,1,1,1,1,1 },  // = 6
                                 { 1,1,1,0,0,0,0 },  // = 7
                                 { 1,1,1,1,1,1,1 },  // = 8
                                 { 1,1,1,0,0,1,1 }   // = 9
                               };

void sevenSegWrite(byte var) {
  byte pin = 1;
  for (byte cont = 0; cont < 7; ++cont) {
     digitalWrite(pin, seven_seg_digits[var][cont]);
     ++pin;   
   } 




Depois disso bastou colocou um FOR para fazer a contagem:

 void setup() {
  pinMode(1, OUTPUT);   
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);

}

void loop() {
  for (byte var = 0; var < 10; var++) {
    delay(1000);
    sevenSegWrite(var); 
  }

Em seguida a atividade pediu que o mesmo contador ao bater 9 fizesse a contagem inversa, o que foi mais simples ainda de se fazer com outro FOR no código.

   for (byte var = 10; var > 0; --var) {
    delay(1000);
    sevenSegWrite(var - 1); 
  }

E para finalizar criar uma função com dois botões para incrementar e decrementar o valor.

void loop() {
    sevenSegWrite(control);
    button_1 = digitalRead(8);
    button_2 = digitalRead(9);
    

    if (button_1 == 0 && control < 9) {
      ++control;  
      
             
      }
      
    if (button_2 == 0 && control > 0) {
      --control;         
      }
    delay(200);
    
}


0 comentários:

Postar um comentário