Código para un cronometro de leds en tablero de futbol

Saludos amigos...
Habría alguna posibilidad que me compartan el código, para incorporar un cronometro en un tablero de leds con 2 numeros de 7 segmentos?

Que incremente desde 00 hasta 99

un boton de inicio y reinicio que continue desde el ultimo numero, despues de reiniciarlo.
un boton de reset a 00

Se los agradecería en el alma...
:slight_smile:

Esta claro @Foxchile que no has leído las normas del foro.
El foro no da códigos, o los buscas por tu cuenta o te pones a estudiar arduino.
El foro responde dudas, ayudar a resolver cosas que no puedes entender o que fallan, etc, etc.
Lo que pides entra en el terreno de que alguien te lo haga por un costo, y esta contemplado en las normas esto que te menciono.

Hay numeros códigos en el foro que te pueden poner en tema.
Arriba derecha la lupa y buscas cronómetro, contador, 7 segmentos, y palabras similares.

Tu problemas son los Delay()

Y tu problema sigue siendo que no lees las normas del foro.
Edita ese código usando etiquetas.
Segunda advertencia FoxChile.
Lee las normas, no lo voy a repetir.

Existen librerias para el manejo de 7 segumentos.
No reinventes la rueda.

Busca Arduino seven segments y veras de que hablo.

SevSeg Library

Foxchile:
Habría alguna posibilidad que me compartan el código, para incorporar un cronometro en un tablero de leds con 2 numeros de 7 segmentos?

Tienes que dar mas datos sobre el tablero. Por ejemplo un tema importante es el tamaño y tipo de los display 7 segmentos.

Son comerciales o tu los fabricaras ? que usaras tiras LED, o serán mecánicos ?

Los usaras en exterior o interior ?

De que alimentación dispones ? 220Vac, bateria 12V.

Display de 7 segmentos gigante

Display 7 segmentos mecanico

Hola Foxchile, como bien dice PeterKantTropus, tu problema son los delay(). Has de utilizar milis() y “máquinas de estado”. Los consejos que te han dado, de utilizar librerías para controlar los displays, te harán más cómo el uso de los displays pero no resolverán tu mayor problema. Estás “mezclando” dos problemas, controlar el multiplexado de los displays y controlar el cronómetro. Has de tratarlos por separado y te será mucho más fácil.

En cuanto a los displays: veo muy lento tener cada uno de ellos encendido 100 milisegundos. Para el ojo humano eso parpadea demasiado. Mejor 40 milisegundos cada uno y así la frecuencia será de unos 25 herzios. Para que no parpadeen a la vista del ojo humano. Para ello nos ayudamos de los millis() y de la variable instanteAnteriorDisplay, entre otras cosas.

He tratado de tocar lo menos posible el código de los displays, manteniendo el nombre de algunas variables y siguiendo un poco con la filosofía de tu control de los displays. Aún así he hecho un par de cambios y como verás el cálculo del tiempo del cronómetro no depende ahora del tiempo de los displays.

En cuanto al control del cronómetro: me he tomado la licencia de implementar con una máquina de estados la puesta en marcha, pausa y reinicio del cronómetro. Para reiniciarlo hay que mantener pulsado un mínimo de dos segundos el botón de parada (se puede cambiar la constante TIEMPO_PULSADO_PARA_REINICIAR para cambiar ese tiempo). Verías que el tiempo lo calcula y guarda en milisegundos, así que si quieres podrías mostrar las décimas, centésimas o milésimas de segundo en sus respectivos displays.

He definido unas cuantas constantes para que el código sea más legible y fácil de ajustar. Dos de ellas son VALOR_PULSADO_INICIO y VALOR_PULSADO_PARADA para indicar si cada botón se lee un HIGH o un LOW cuando está pulsado. Lo he definido para que se lea un LOW cuando están pulsados. Creo que ese era tu caso. Supongo que tendrás puesto a los pulsadores resistencias PULL-UP externas. Te las podrías ahorrar si declaras las entradas con pinMode(PIN_INICIO, INPUT**_PULLUP**), en lugar de pinMode(PIN_INICIO, INPUT).

Tambíen verás muchos números o ceros con el sufijo UL. Es para indicar que son enteros largos sin signos (unsigned long). No es necesario a no ser que el valor que quieras indicar sea superior a 65535, pero es aconsejable que te acostumbres a usarlos, no sea que un día te lleves un disgusto al ver que los tiempos no se contabilizan como tú esperabas.

Nota: no lo he podido probar los displays, así que no estoy seguro de si funcionará bien.

En caso de dudas, preguntar por este mismo foro o consultar a San Google.

Debido a los comentarios que he puesto, el código ha quedado demasiado grande como para poder ponerlo en un post. Así que lo he tenido que adjuntar.

foro_cronometro.ino (10.3 KB)