Hola a todos y gracias por tomarse el tiempo de pasar a mi post.
como casi todos los hilos que eh creado desde que inicie mi cuenta en el foro
mi duda en esta ocasión es sobre un pequeño temporizador que estoy desarrollando.
La característica de este proyecto es que a dif. de otros en los cuales el tiempo ya viene fijo, en el mio el tiempo es completamente personalizable esto por la diferencia de niveles que hay entre los alumnos de nivel principiante y los avanzados. El proyecto ya está casi terminado y digo casi porque hay algo que me esta dando problemas desde hace un par de días y como este es un proyecto al cual le dedico muy poco tiempo por cuestiones de trabajo,escuela y otras cosas, me ha llevado bastante tiempo terminarlo o llegar a la etapa en la que estoy hasta el momento.
Prueba del proyecto
En el vídeo, se puede apreciar como va el proyecto hasta el momento(Una disculpa por el cableado tan feo xD.) Bueno como se puede apreciar el proyecto anda bien hasta una parte, una vez que se acaba el tiempo del round y inicia el tiempo de descanso y una vez que termina este, debería volver a empezar la cuenta regresiva pero con la diferencia de que se debería descontar "rounds" en una unidad, eh intentado varias formas y siempre obtengo el mismo resultado el cual es que el programa se queda en ceros, es decir una vez que llega a 0, no hace nada, no reinicia el conteo, y tampoco decrementa la unidad "rounds".
Espero y alguien me pueda ayudar por favor, cualquier detalle que sea necesario y se me haya olvidado subir, lo haré al momento. Gracias

Anexo código fuente (Es algo extenso :s).
Actualización: Puesto que el código es bastante extenso, no me deja postearlo, lo dejo como descarga.
temp_gym_version_1.ino (8.59 KB)
Le he echado un ojo por encima.
No estoy seguro, pero a falta de profundizar un poco más, me ha parecido que guardas la configuración de tiempo en unas variables globales (TiempoTotal, TiempoDescanso y rounds), que son las mismas que después vas llevando a cero, sin guardar en ningún momento la configuración inicial.
Así, cuando llegan a cero, ahí se quedan, y en ningún momento tienes guardado el set inicial para empezar a contar tras el primer round.
Ya digo que ha sido tras una revisión inicial. Si no es así, me corriges, y miraré con más detalle.
Si es eso, bastaría con definir otras variables, que una vez ajustadas con los botones no deberías tocar, que inicialmente fueran igual a TiempoTotal y TiempoDescanso. Así, cuando llegues a cero con los dos, les asignas a TT y TD esos valores, y vuelves a empezar (ya con el round decrementado en uno. Ese daría más igual, puesto que al llegar a cero ya acabas programa.)
He podido simularlo, y aparte de esa asignación, en la parte final de bucle de while(TiempoTotal == 0), tienes un while(TiempoDescanso==0){TiempoDescanso=0;} que no deja al programa salir de ahí.
Sustituyéndolo por un if (TiempoDescanso==0){break;}, el flujo te saltará al siguiente while.
en ése será donde tengas que asignar las variables TiempoTotal y TiempoDescanso a las "de referencia: TT y TD" (que una vez configuradas con los botones ya no modificas) para poder empezar el siguiente round con los segundos correctos.
Podría quedar así:
while(TiempoTotal==0 && TiempoDescanso==0){
rounds = rounds -1;
TiempoTotal=TT;
TiempoDescanso=TD;
IniciaPrograma();
if(rounds==0){
lcd.clear();
lcd.print("Tiempo Agotado");
}
}
El modo de contar segundos, con delay te limita a no poder parar la cuenta, o dar efectos de parpadeo a los leds, pero eso es otra historia, y creo que con esos dos pequeños cambios, te debería funcionar.
Tampoco me gusta mucho la llamada recursiva a la función, antes de liberarla, pero como digo, puede que sean manías de viejo.