Contador de 5 digitos

Hola Amigos: queria comentarles quee hice un cronometro de 5 digitos el cual indica hasta las milesimas…hice este programa para que funcione:

int pinLatch = 10;     //Pin para el latch de los 74CH495
int pinDatos = 11;    //Pin para Datos serie del 74CH495
int pinReloj = 12;     //Pin para reloj del 74CH495
int i=0;                    //Número de las decenas
int j=0;                    //Número de las unidades
int k=0;                    //Numero de las decimas
int l=0;                    //Numero de las centesimas
int m=0;                    //numero de las milesimas

byte digitOne[10]= {
 // Codificación hexadecimal de los dígitos decimales en el display de 7 segmentos
 0xEE, 0x82, 0xDC, 0xD6, 0xB2, 0x76, 0x7E, 0xC2, 0xFE, 0xF6};

void setup(){
 pinMode(pinLatch,OUTPUT);
 pinMode(pinDatos,OUTPUT);
 pinMode(pinReloj,OUTPUT);
}

void loop(){
 // Para que imprima 
for(m=0; m<10; m++){  //Aumneta en uno, hasta que llegue a 10, el numero de las milesimas
 for(l=0; l<10; l++){  //Aumneta en uno, hasta que llegue a 10, el numero de las centesimas
   for(k=0; k<10; k++){  //Aumneta en uno, hasta que llegue a 10, el numero de las decimas
     for(i=0; i<10; i++){      //Aumneta en uno, hasta que llegue a 10, el numero de las decenas
       for(j=0; j<10; j++){    //Aumneta en uno, hasta que llegue a 10, el numero de las unidades
     
  
     digitalWrite(pinLatch, LOW);
     shiftOut(pinDatos, pinReloj, LSBFIRST, digitOne[m]);  // digitOne unidades
     shiftOut(pinDatos, pinReloj, LSBFIRST, digitOne[l]);  //digitOne decenas
     shiftOut(pinDatos, pinReloj, LSBFIRST, digitOne[k]);  //digitOne decimas
     shiftOut(pinDatos, pinReloj, LSBFIRST, digitOne[i]);  //digitOne centesimas
     shiftOut(pinDatos, pinReloj, LSBFIRST, digitOne[j]);  //digitOne milesimas
     digitalWrite(pinLatch, HIGH);
     delay(1);
         }
       }
     }
   }
 }
}

pero tiene el problema de que arrastra un error en el tiempo …ya que lo comparo con un cronometro de un celular y cuenta mas lento…intente con el tiempo del delay pero funciona muy rapido o muy lento…es por esto mi duda …uso interrupciones???en el caso de usarlas como hago??? desde ya agraddeceria su ayuda ya que es un proyecto para la facu!!!

Moderador: Código editado con etiquetas

y tu reloj es delay(1) ? mal. Porque esta mal? porque delay(1) no es la maravilla de la precisión para empezar, y segundo arrastras la ejecución de toda la presentación asi que tu ciclo es aprox 1mseg del delay mas todo lo demas. Algo siemple sería que uses millis() o mejor micros() micros() retorna los microsegundos desde que arranca el arduino. Máximo antes que desborde es 70 minutos. Mira aca micros()

Otra opción es que uses uno los timer del Arduino a 1khz o 10khz .. llevar la cuenta e ir presentando los digitos.

y como tendria que hacer para usar essaas funciones ya que soy un principiante en esto...agradeceria algun manual .pdf donde me explique como hacerlo para arreglar este problema.!!

Bueno a mi manera te hice algo. Lo estuve haciendo con un timer a 1khz pero luego desistí porque era mas facil con millis()
Asi que usé un demo de la pagina de www.arduino.cc y le agregué los diplays con los 595
Adjunto las soluciones.

Contador5Digitos.ino es el sketch.

Contador5Digitos.ino (5.72 KB)

Mil Gracias funciona ala perfeccion!!!

Hola soy totalmente nuevo y novato con arduino y quisiera haceros una pregunta que seguramente para vosotros será una tontería pero mejor preguntar que quedarme con la duda,en el esquema anterior los pines TXD y RXD para que se utilizan? Y una segunda pregunta como realiza el paro y la vuelta a cero el cronometro? a lo mejor es algo muy básico pero estoy intentando aprender con arduino Gracias de antemano

Los pines TX y RX se usan para ver en lo que ahi aparece como TERMINAL que hace las veces de un Monitor Serial en el Simulador.

Y este programa no tiene un paro y vuelta a cero, solo un paro que es presionando de nuevo el mismo boton. En otras versiones se implementó el paro, se implementó el avance cada 5min hasta 60 min en un caso y luego hasta 95:00 minutos.

Y todas las variantes que se le fueron ocurriendo. Solo hay que buscarlo pero esta hecho.

Muchas gracias amigo buscare a ver si lo encuentro que me gustaria montar algo parecido

Estimado Surbyte: como te habia dicho anteriormente,soy un principiante en esto...estoy cada dia aprendiendo sobre arduino..e lprograma del cronometro funciona a la perfeccion pero cuando le doy el pulso para que empiiece a contar,arranca,ycuando le doy otro pulso frena la cuenta ,y con un ultimo pulso vuelve a cero y nuevamente comienza a contar...

Necesitaria una mano para que cuando le doy el pulso para cuando se resetea quede en cero, y en espera de un nuevo pulo para que arranque..y no que arranque solo como esta ahora..podrias darme una mano??

estoy inetesado en el codigo de este cronometro pero no puedo descargarlo me podrian ayudar

el código esta en el post#3.