quarta-feira, 23 de outubro de 2013

2 Displays de 7 Segmentos com Arduino

Um jeito facil de acender displays de 7 segmentos no arduino e atraves da funcao sevenSegWrite. O exemplo que irei postar foi feito para acender 2 displays.


#include <EEPROM.h>
// Declaracao das variaveis
int ledA = 2;                // Segmento A
int ledB = 3;                // Segmento B
int ledC = 4;                // Segmento C
int ledD = 5;                // Segmento D
int ledE = 6;                // Segmento E
int ledF = 7;                // Segmento F
int ledG = 8;                // Segmento G
int dsp1 = 9;                // Habilita Display 1
int dsp2 = 10;               // Habilita Display 2
int digD = 0;
int digU = 0;

// Declaracao da funcao sevenSegDigits
// Essa funcao serve para displays de ANODO COMUM, para utilizar com CATODO COMUM, substitua
//todos os 0 (ZEROS) por 1(UNS).
byte seven_seg_digits[10][7] ={ { 0,0,0,0,0,0,1 },  // = 0 - E D C B A F G
                                 { 1,1,0,0,1,1,1 },  // = 1
                                 { 0,0,1,0,0,1,0 },  // = 2
                                 { 1,0,0,0,0,1,0 },  // = 3
                                 { 1,1,0,0,1,0,0 },  // = 4
                                 { 1,0,0,1,0,0,0 },  // = 5
                                 { 0,0,0,1,1,0,0 },  // = 6
                                 { 1,1,0,0,0,1,1 },  // = 7
                                 { 0,0,0,0,0,0,0 },  // = 8
                                 { 1,1,0,0,0,0,0 }   // = 9
                                };
void setup(){
  pinMode(ledA, OUTPUT);      // Configura pinos Digital como saída Segmento Display
   pinMode(ledB, OUTPUT);      //
   pinMode(ledC, OUTPUT);      //
   pinMode(ledD, OUTPUT);      //
   pinMode(ledE, OUTPUT);      //
   pinMode(ledF, OUTPUT);      //
   pinMode(ledG, OUTPUT);      //
   pinMode(dsp1, OUTPUT);      //
   pinMode(dsp2, OUTPUT);      //
   pinMode(A0,INPUT);
   digU = EEPROM.read(0);
   digD = EEPROM.read(1);
}
// Declara Void SevenSegWrite
void sevenSegWrite(byte digit){
  byte pin = 2;
  for(byte segCount=0 ; segCount < 7;++segCount){
    digitalWrite(pin,seven_seg_digits[digit][segCount]);
    ++pin;
  }
}
//Ate esse ponto, todo o programa e "padrao", sendo necessarias todas as declaracoes feitas
//com mudancas apenas nos pinos que voce ira utilizar

//No loop e onde acendemos os displays, o programa abaixo le o valor de um botao e incrementa
//o valor de unidade ate q ele seja igual a 9, apos isso ele zera o valor da variavel que
//armazena a unidade(digU) e incrementa a variavel da dezena (digD), se os dois valores  forem
//iguais a 9 (FAZENDO ASSIM 99) ele zera os valores e recomeca a contagem.
// Tambem fiz uso da bibliteca EEPROM para armazenar os valores (digU e digD)mesmo quando
//o circuito for desligado.
void loop(){
  if(digitalRead(A0) == HIGH){
    digU = digU + 1;
    if(digU > 9){
      digU = 0;
      digD = digD + 1;
    }
  }
  if(digD ==9 and digU == 9 ){
    digU =0;
    digD =0;
  }
  EEPROM.write(0,digU);
  EEPROM.write(1,digD);
  for(int i = 0; i<20;i++){
    digitalWrite(dsp1,HIGH);
    digitalWrite(dsp2,LOW);
    sevenSegWrite(digD);
    delay(5);
    digitalWrite(dsp1,LOW);
    digitalWrite(dsp2,HIGH);
    sevenSegWrite(digU);
    delay(5);
  }
}

Em breve irei publicar uma versao que acende um valor desejado vindo da serial.

Nenhum comentário:

Postar um comentário