Buenos días compañeros,
Escribo porque he escrito el código para un sistema similar al reloj de una partida de ajedrez, pero no tengo arduino aquí para simularlo, de todas formas creo que me falla en algo. A ver si me podéis echar una mano por favor.
El funcionamiento consiste en que cuando se da al boton de empezar aparecen los dos tiempos y cuando un equipo pulsa su botón su temporizador empieza a descender (ambos empiezan en 1h). Si el otro equipo pulsa su botón se para el tiempo enemigo y empieza a descender el suyo. Si ambos equipos pulsan su botón a la vez, se pausan ambos tiempos. Si alguno de los dos llega a 00:00, suena un pitido mas largo.
Os pongo el código y os adjunto las librerias:
#include <LiquidCrystal.h>
#include <CountUpDownTimer.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // ( RS, EN, d4, d5, d6, d7)
CountUpDownTimer T1(LOW); // CuentaAtrasACeroTiempo1
CountUpDownTimer T2(LOW); // CuentaAtrasACeroTiempo2
String mensaje1 = "Eq.Verde: ";
String mensaje2 = "Eq.Rojo: ";
void setup()
{
Serial.begin(115200);
pinMode(2, INPUT); // BotonEquipo1
pinMode(3, INPUT); // BotonEquipo2
pinMode(4, INPUT); // BotonEmpezar
pinMode(5,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
}
void loop() {
// Si le damos a empezar iniciamos secuencia
if(digitalRead(4) == HIGH){
T1.Timer(); // LeDamosTiempo1
T2.Timer(); // LeDamosTiempo2
T1.PauseTimer(); // PausamosTiempo1
T2.PauseTimer(); // PausamosTiempo2
}
// Si se pulsa el pulsador del Equipo 1 y el Equipo 2 a la vez pausamos ambos
if (digitalRead(2) == HIGH && digitalRead(3) == HIGH )
{
T1.PauseTimer();
T2.PauseTimer();
}
// -------------------------------------------Tiempo1-------------------------------------------
// Si se pulsa el pulsador del Equipo1, retomamos la cuenta atras
if(digitalRead(2) == HIGH && digitalRead(3) == LOW ){
T2.PauseTimer(); // PausamosTiempo2
T1.ResumeTimer(); // TiempoActual
tone(5, 2000);
}
// -------------------------------------------Tiempo2-------------------------------------------
// Si se pulsa el pulsador del Equipo2, retomamos la cuenta atras
if(digitalRead(3) == HIGH && digitalRead(2) == LOW && !T2.TimeHasChanged() ){
T1.PauseTimer(); // PausamosTiempo1
T2.ResumeTimer(); // TiempoActual
tone(5, 1000);
}
// -------------------------------------------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);
}
//Actualizamos los mensajes
mensaje1 = "Eq.Verde: " + T1.ShowMinutes() + ":" + T1.ShowSeconds() ;
mensaje2 = "Eq.Rojo: " + T2.ShowMinutes() + ":" + T2.ShowSeconds() ;
// Imprimimos mensajes
lcd.setCursor(0,0);
lcd.print(mensaje1); // Enviar el mensaje
lcd.setCursor(0,1);
lcd.print(mensaje2); // Enviar el mensaje
}
Muchas gracias y un saludo.
CountUpDownTimer.h (5.53 KB)
LiquidCrystal.h (3.4 KB)