#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