Esto es lo mejor que he logrado. Basicamente tu programa estaba bien salvo por que T1.timer() y T2.timer() deben estar siempre en el loop
#include "Wire.h" // necesario para mi librería LiquidCrystal
#include <LiquidCrystal.h>
#include "CountUpDownTimer.h"
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // ( RS, EN, d4, d5, d6, d7)
CountUpDownTimer T1(DOWN); // CuentaAtrasACeroTiempo1
CountUpDownTimer T2(DOWN); // CuentaAtrasACeroTiempo2
const byte pinEq1 = 2;
const byte pinEq2 = 3;
const byte pinEmpezamos = 4;
const byte pinBuzzer = 5;
bool inicioLCD = false;
void setup() {
Serial.begin(115200);
pinMode(pinEq1 , INPUT); // BotonEquipo1
pinMode(pinEq2 , INPUT); // BotonEquipo2
pinMode(pinEmpezamos, INPUT); // BotonEmpezar
pinMode(pinBuzzer , OUTPUT); // Buzzer
T1.SetTimer(1,0,0); // SetTiempo1HoraTiempo1
T2.SetTimer(1,0,0); // SetTiempo1HoraTiempo2
T1.StartTimer(); // EmpezamosTiempo1
T2.StartTimer(); // EmpezamosTiempo2
lcd.begin(16, 2); // Fijar el numero de caracteres y de filas
Serial.begin(9600);
}
void loop() {
bool eq1, eq2, empezar;
bool eq1Ant = false, eq2Ant = false, empezarAnt = false;
T1.Timer(); // LeDamosTiempo1
T2.Timer(); // LeDamosTiempo2
eq1 = digitalRead(pinEq1);
eq2 = digitalRead(pinEq2);
empezar = digitalRead(pinEmpezamos);
// Si le damos a empezar iniciamos secuencia
if (empezar && !empezarAnt){
T1.PauseTimer(); // PausamosTiempo1
T2.PauseTimer(); // PausamosTiempo2
Serial.println("Empezamos!");
inicioLCD = true;
}
empezarAnt = empezar;
// Si se pulsa el pulsador del Equipo 1 y el Equipo 2 a la vez pausamos ambos
if (eq1 && eq2) {
T1.PauseTimer();
T2.PauseTimer();
Serial.println("Eq.1 y 2 pausados");
}
// -------------------------------------------Tiempo1-------------------------------------------
// Si se pulsa el pulsador del Equipo1, retomamos la cuenta atras
if (eq1 && !eq1Ant){ // && !eq2){
T2.PauseTimer(); // PausamosTiempo2
T1.ResumeTimer(); // TiempoActual
//tone(5, 2000);
Serial.println("Eq.1 timer");
}
eq1Ant = eq1;
// -------------------------------------------Tiempo2-------------------------------------------
// Si se pulsa el pulsador del Equipo2, retomamos la cuenta atras
if (eq2 && !eq2Ant){ // && !eq1) { // && !T2.TimeHasChanged() ){
T1.PauseTimer(); // PausamosTiempo1
T2.ResumeTimer(); // TiempoActual
//tone(5, 1000);
Serial.println("Eq.2 timer");
}
eq2Ant = eq2;
// -------------------------------------------Final-------------------------------------------
// Si alguno llega a 00:00 suena la sirena
if (T1.TimeCheck(0,0,0) || T2.TimeCheck(0,0,0)) {
//tone(5, 5000, 10000);
Serial.println("Partida terminada por tiempo");
}
//Actualizamos los mensajes
// Imprimimos mensajes
char mensaje[20];
if (T1.TimeHasChanged() || inicioLCD) { // this prevents the time from being constantly shown.
lcd.setCursor(0,0);
sprintf(mensaje, "Eq.Verde: %02d:%02d", (int) T1.ShowMinutes(), (int) T1.ShowSeconds()) ;
Serial.println(mensaje);
lcd.print(mensaje); // Enviar el mensaje
}
if (T2.TimeHasChanged() || inicioLCD) {// this prevents the time from being constantly shown.
lcd.setCursor(0,1);
sprintf(mensaje, "Eq. Rojo: %02d:%02d", (int) T2.ShowMinutes(), (int) T2.ShowSeconds()) ;
lcd.print(mensaje); // Enviar el mensaje
Serial.println(mensaje);
inicioLCD = false; // solo 1 vez
}
}