Go Down

Topic: Reloj Digital Programable. (Read 1 time) previous topic - next topic

Patruchowski

[font=Verdana]Hola amigos. Estoy realizando un reloj programable con 6 display 7 segmentos. El problema con el multiplexeo es que los displays parpadean. Ademas de eso quiero anexarle unos pulsadores para programar cada Hora-Minuto-Segundo. Agradezco su ayuda ..

PD: No se como detener el display de las horas (El del pin 3 de tal manera que el reloj llegue hasta 12 am o pm y salte a 1 am o pm de nuevo)

Gracias! :P Anexo codigo:
[/font]



int contador1=0; // Contadores para Aumentar el tiempo
int contador2=0;
int contador3=0;
int contador4=0;
int contador5=0;
int contador6=0;

int retener=0;// Retiene cada digito el tiempo (segundo, minuto, hora)
int segundo=5;//TIEMPO DE MULTIPLEXEO
int minuto=4;//
int hora=3;//


void setup() {  
 pinMode(2,OUTPUT);// Display horas
 pinMode(3,OUTPUT); // Display horas
 pinMode(4, OUTPUT);  // Display minutos
 pinMode(5, OUTPUT);// Display minutos
 pinMode(6, OUTPUT);// Display segundos
 pinMode (7, OUTPUT);//Display segundos
 pinMode(8, OUTPUT);// BCD
 pinMode(9, OUTPUT);// BCD
 pinMode(10,OUTPUT);// BCD
 pinMode(11,OUTPUT);// BCD
 }
void loop(){
 // Ciclos Para que empieze a pasar el tiempo
 for (int contador5=0;contador5<2;contador5++){
  for(int contador6=0;contador6<10;contador6++){
   for(int contador1=0;contador1<7; contador1++){  
     for(int contador2=0; contador2<10; contador2++){
       for(int contador3=0;contador3<6; contador3++){
          for (int contador4=0;contador4<10; contador4++){
            for (int retener=0;retener<1;retener++){
// Encendiendo los displays
  digitalWrite(3,HIGH);
  display6(contador6);
  digitalWrite(3,LOW);   
  digitalWrite(2,HIGH);
  display5(contador5);
  digitalWrite(2,LOW);  
  digitalWrite(5,HIGH);
  display2(contador2);
  digitalWrite(5,LOW);
  digitalWrite(4,HIGH);
  display1(contador1);
  digitalWrite(4,LOW);
  digitalWrite(7,HIGH);
  display4(contador4);
  digitalWrite(7,LOW);
  digitalWrite(6,HIGH);
  display3(contador3);
  digitalWrite(6,LOW);
}
}          
}
}
}
}
}
}
void display6(int contador6){
if(contador6==0)
{
    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
    digitalWrite(11,LOW);
    delay(hora);
  }
     if(contador6==1)
  {
    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
    digitalWrite(11,HIGH);
    delay(hora);
  }
     if(contador6==2)
  {
    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    digitalWrite(10,HIGH);
    digitalWrite(11,LOW);
    delay(hora);
  }
     if(contador6==3)
  {
    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    digitalWrite(10,HIGH);
    digitalWrite(11,HIGH);
    delay(hora);
  }
     if(contador6==4)
  {
    digitalWrite(8,LOW);
    digitalWrite(9,HIGH);
    digitalWrite(10,LOW);
    digitalWrite(11,LOW);
    delay(hora);
  }
     if(contador6==5)
  {
    digitalWrite(8,LOW);
    digitalWrite(9,HIGH);
    digitalWrite(10,LOW);
    digitalWrite(11,HIGH);
    delay(hora);
  }
     if(contador6==6)
  {
    digitalWrite(8,LOW);
    digitalWrite(9,HIGH);
    digitalWrite(10,HIGH);
    digitalWrite(11,LOW);
    delay(hora);
  }
     if(contador6==7)
  {
    digitalWrite(8,LOW);
    digitalWrite(9,HIGH);
    digitalWrite(10,HIGH);
    digitalWrite(11,HIGH);
    delay(hora);
  }
     if(contador6==8)
  {
    digitalWrite(8,HIGH);
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
    digitalWrite(11,LOW);
    delay(hora);
  }
     if(contador6==9)
  {
    digitalWrite(8,HIGH);
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
    digitalWrite(11,HIGH);
    delay(hora);
  }
}
void display5(int contador5){
    if(contador5==0)
  {
    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
    digitalWrite(11,LOW);
    delay(hora);
  }
     if(contador5==1)
  {
    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
    digitalWrite(11,HIGH);
    delay(hora);
  }
}


Patruchowski

Continuacion de codigo:

void display2(int contador2){
     if(contador2==0)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,LOW);
     digitalWrite(11,LOW);
     delay(minuto);
   }
      if(contador2==1)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,LOW);
     digitalWrite(11,HIGH);
     delay(minuto);
   }
      if(contador2==2)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,HIGH);
     digitalWrite(11,LOW);
     delay(minuto);
   }
      if(contador2==3)
   {
     digitalWrite(9,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,HIGH);
     digitalWrite(11,HIGH);
     delay(minuto);
   }
      if(contador2==4)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,HIGH);
     digitalWrite(10,LOW);
     digitalWrite(11,LOW);
     delay(minuto);
   }
      if(contador2==5)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,HIGH);
     digitalWrite(10,LOW);
     digitalWrite(11,HIGH);
     delay(minuto);
   }
      if(contador2==6)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,HIGH);
     digitalWrite(10,HIGH);
     digitalWrite(11,LOW);
     delay(minuto);
   }
      if(contador2==7)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,HIGH);
     digitalWrite(10,HIGH);
     digitalWrite(11,HIGH);
     delay(minuto);
   }
      if(contador2==8)
   {
     digitalWrite(8,HIGH);
     digitalWrite(9,LOW);
     digitalWrite(10,LOW);
     digitalWrite(11,LOW);
     delay(minuto);
   }
      if(contador2==9)
   {
     digitalWrite(14,HIGH);
     digitalWrite(15,LOW);
     digitalWrite(16,LOW);
     digitalWrite(17,HIGH);
    delay(minuto);
   }
}
void display1(int contador1){
     if(contador1==0)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,LOW);
     digitalWrite(11,LOW);
     delay(minuto);
   }
      if(contador1==1)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,LOW);
     digitalWrite(11,HIGH);
     delay(minuto);
   }
      if(contador1==2)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,HIGH);
     digitalWrite(11,LOW);
      delay(minuto);
   }
      if(contador1==3)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,HIGH);
     digitalWrite(11,HIGH);
     delay(minuto);
   }
      if(contador1==4)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,HIGH);
     digitalWrite(10,LOW);
     digitalWrite(11,LOW);
     delay(minuto);
   }
      if(contador1==5)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,HIGH);
     digitalWrite(10,LOW);
     digitalWrite(11,HIGH);
     delay(minuto);
   }
      if(contador1==6)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,HIGH);
     digitalWrite(10,HIGH);
     digitalWrite(11,LOW);
    delay(minuto);
   }
      if(contador1==7)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,HIGH);
     digitalWrite(10,HIGH);
     digitalWrite(11,HIGH);
    delay(minuto);
   }
      if(contador1==8)
   {
     digitalWrite(8,HIGH);
     digitalWrite(9,LOW);
     digitalWrite(10,LOW);
     digitalWrite(11,LOW);
     delay(minuto);
   }
      if(contador1==9)
   {
     digitalWrite(8,HIGH);
     digitalWrite(9,LOW);
     digitalWrite(10,LOW);
     digitalWrite(11,HIGH);
     delay(minuto);
   }
}


void display4(int contador4){
     if(contador4==0)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,LOW);
     digitalWrite(11,LOW);
     delay(segundo);
   }
      if(contador4==1)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,LOW);
     digitalWrite(11,HIGH);
     delay(segundo);
   }
      if(contador4==2)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,HIGH);
     digitalWrite(11,LOW);
     delay(segundo);
   }
      if(contador4==3)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,HIGH);
     digitalWrite(11,HIGH);
     delay(segundo);
   }
      if(contador4==4)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,HIGH);
     digitalWrite(10,LOW);
     digitalWrite(11,LOW);
     delay(segundo);
   }
      if(contador4==5)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,HIGH);
     digitalWrite(10,LOW);
     digitalWrite(11,HIGH);
     delay(segundo);
   }
      if(contador4==6)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,HIGH);
     digitalWrite(10,HIGH);
     digitalWrite(11,LOW);
     delay(segundo);
   }
      if(contador4==7)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,HIGH);
     digitalWrite(10,HIGH);
     digitalWrite(11,HIGH);
     delay(segundo);
   }
      if(contador4==8)
   {
     digitalWrite(8,HIGH);
     digitalWrite(9,LOW);
     digitalWrite(10,LOW);
     digitalWrite(11,LOW);
     delay(segundo);
   }
      if(contador4==9)
   {
     digitalWrite(8,HIGH);
     digitalWrite(9,LOW);
     digitalWrite(10,LOW);
     digitalWrite(11,HIGH);
     delay(segundo);
   }
}

void display3(int contador3){
     if(contador3==0)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,LOW);
     digitalWrite(11,LOW);
     delay(segundo);
   }
      if(contador3==1)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,LOW);
     digitalWrite(11,HIGH);
     delay(segundo);
   }
      if(contador3==2)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,HIGH);
     digitalWrite(11,LOW);
     delay(segundo);
   }
      if(contador3==3)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,HIGH);
     digitalWrite(11,HIGH);
     delay(segundo);
   }
      if(contador3==4)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,HIGH);
     digitalWrite(10,LOW);
     digitalWrite(11,LOW);
     delay(segundo);
   }
      if(contador3==5)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,HIGH);
     digitalWrite(10,LOW);
     digitalWrite(11,HIGH);
     delay(segundo);
   }
      if(contador3==6)
   {
     digitalWrite(8,LOW);
     digitalWrite(9,HIGH);
     digitalWrite(10,HIGH);
     digitalWrite(11,LOW);
      delay(segundo);
   } 
}



Heke

Es que esa programacion es un "churro" del 20  :smiley-sad-blue:

Debias de aprender a crear "defines" y "matrices" por un lado y el empleo de bucles "for" y evitar la redundancia.

Por otro lado, estas multiplexando, no puedes emplear delays...

Por otro lado mas tienes un conversor bcd a 7 segmentos, emplea el latch

Por cierto, para poner codigo en el foro emplea el boton que pone "insert Code" cuando escribes el post.
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

American2020

Como consejo, aunque no soy experto ni mucho menos, pero mi consejo sería que uses unos ShiftRegister, con 1 por cada display de 7 Segmentos, no sólo optimizarás el código, sino que será mucho más rápido y no tendrás necesidad de liarte con la "multiplexión"
My 3x3x3 Led Cube

[url=http://arduino.cc/forum/index.php/topic,1642

Go Up