Eu fiz a ligação de 2 displays de 7 segmentos (ANODO COMUM) com transistor PNP, mas não estou conseguindo fazer o código para transformá-lo num contador de 00 a 99.
Se alguém puder me ajudar
Codigo para o arduino
Soluções para a tarefa
Utilize as entradas do display e do transistor conforme o especificado, se necessário, apenas mude a numeração no cabeçalho.
O código tem a escrita dos números no display por função lá na parte inferior.
Segue abaixo:
//======= CODIGO =======
//Define as variáveis e em qual portas do Arduino estarão
int transistor1 = 2;
int transistor2 = 3;
int a = 4;
int b = 5;
int c = 6;
int d = 7;
int e = 8;
int f = 9;
int g = 10;
//Variável de controle da unidade e dezena
int contUnidade = 0;
int contDezena = 0;
int repete = 0;
//Definindo como as portas serão usadas, no caso, todas de saída (OUTPUT)
void setup() {
pinMode(transistor1, OUTPUT);
pinMode(transistor2, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
}
void loop() {
//repete controla o tempo entre a transição dos números
//quanto maior for, mais lento será o contador
repete = 0;
while (repete < 50){
//liga e desliga os transistores de unidade e dezena, respectivamente
digitalWrite(transistor1, 0);
digitalWrite(transistor2, 1);
//Os if verificam em qual número a unidade deve estar
if(contUnidade == 0)
zero();
if(contUnidade == 1)
um();
if(contUnidade == 2)
dois();
if(contUnidade == 3)
tres();
if(contUnidade == 4)
quatro();
if(contUnidade == 5)
cinco();
if(contUnidade == 6)
seis();
if(contUnidade == 7)
sete();
if(contUnidade == 8)
oito();
if(contUnidade == 9)
nove();
delay(9);
//Inverte os transistores
digitalWrite(transistor1, 1);
digitalWrite(transistor2, 0);
//Os if verificam em qual número a dezena deve estar
if(contDezena == 0)
zero();
if(contDezena == 1)
um();
if(contDezena == 2)
dois();
if(contDezena == 3)
tres();
if(contDezena == 4)
quatro();
if(contDezena == 5)
cinco();
if(contDezena == 6)
seis();
if(contDezena == 7)
sete();
if(contDezena == 8)
oito();
if(contDezena == 9)
nove();
delay(9);
repete++;
}
//Caso a unidade seja menor que 10, ela continuará a somar
if(contUnidade < 10)
contUnidade++;
//Caso a unidade chegue em 10, zeramos ela e aumentamos 1 na dezena (de 9 para 10, por exemplo)
if(contUnidade == 10) {
contUnidade = 0;
contDezena++;
}
//Caso a dezena chegue em 10, volta para 0 (fazendo o 99 retornar a 00)
if(contDezena == 10)
contDezena = 0;
}
void zero(){
digitalWrite(a,0);
digitalWrite(b,0);
digitalWrite(c,0);
digitalWrite(d,0);
digitalWrite(e,0);
digitalWrite(f,0);
digitalWrite(g,1);
}
void um(){
digitalWrite(a,1);
digitalWrite(b,0);
digitalWrite(c,0);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,1);
digitalWrite(g,1);
}
void dois(){
digitalWrite(a,0);
digitalWrite(b,0);
digitalWrite(c,1);
digitalWrite(d,0);
digitalWrite(e,0);
digitalWrite(f,1);
digitalWrite(g,0);
}
void tres(){
digitalWrite(a,0);
digitalWrite(b,0);
digitalWrite(c,0);
digitalWrite(d,0);
digitalWrite(e,1);
digitalWrite(f,1);
digitalWrite(g,0);
}
void quatro(){
digitalWrite(a,1);
digitalWrite(b,0);
digitalWrite(c,0);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,0);
digitalWrite(g,0);
}
void cinco(){
digitalWrite(a,0);
digitalWrite(b,1);
digitalWrite(c,0);
digitalWrite(d,0);
digitalWrite(e,1);
digitalWrite(f,0);
digitalWrite(g,0);
}
void seis(){
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,0);
digitalWrite(d,0);
digitalWrite(e,0);
digitalWrite(f,0);
digitalWrite(g,0);
}
void sete(){
digitalWrite(a,0);
digitalWrite(b,0);
digitalWrite(c,0);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,1);
digitalWrite(g,1);
}
void oito(){
digitalWrite(a,0);
digitalWrite(b,0);
digitalWrite(c,0);
digitalWrite(d,0);
digitalWrite(e,0);
digitalWrite(f,0);
digitalWrite(g,0);
}
void nove(){
digitalWrite(a,0);
digitalWrite(b,0);
digitalWrite(c,0);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,0);
digitalWrite(g,0);
}