problemilla con boton para START-STOP

Buenas, estoy haciendo un temporizador "bomba para juego de paintball" y estoy teniendo un par de problemillas. uso 4 botones en las respectivas entradas analógicas, en el programa se puede intuir el conexionado. ¿como puedo conseguir que el mismo boton que hace que comience la cuenta atrás la detenga para sacara por ele lcd otro mensaje?
Dejo el codigo en el txt adjunto.

Gracias de antemano

#include <LiquidCrystal.h> //Libreria del display LCD

LiquidCrystal lcd(8,9,4,5,6,7); //Inicializamos la libreria con el numero de los pines a utilizar



int ahoras = 0;            //Variable a mostrar por LCD de las horas
int aminutos = 0;          //Variable a mostrar por LCD de los minutos
int asegundos = 0;         //Variable a mostrar por LCD de los segundos
int segundostotal = 0;     //Tiempo total
int msg= 0;                //Barrera para el mensaje de bienvenida


int start = A2;            //Pulsador de arranque-parada
int empieza = 1024;        // Variable para almacenaje del pulsador de arranque


int buth = A3;             //Pulsador de Horas
int butm = A4;             //Pulsador de Minutos
int buts = A5;             //Pulsador de segundos


int varbuth = 0;           //Variable para almacenar el valor del pulsador de horas
int varbutm = 0;           //Variable para almacenar el valor del pulsador de minutos
int varbuts = 0;           //Variable para almacenar el valor del pulsador de segundos

int pito=3;                //Pin de  salida 3 PWM
int frecuencia=220;         //frecuencia del pito

int led=2;                  //pin led
void setup()
{
   lcd.begin(16, 4);         // Configuramos el numero de columnas y filas del LCD. 

   pinMode(buth, INPUT);     //Pin de pulsador de horas --> Entrada
   pinMode(butm, INPUT);     //Pin de pulsador de minutos --> Entrada
   pinMode(buts, INPUT);     //Pin de pulsador de segundos --> Entrada
   pinMode(start, INPUT);    //Pin de pulsador de arranque --> Entrada
   pinMode(pito, OUTPUT);    //Pin para sonido-->Salida
   pinMode(led, OUTPUT);     //Pin para led-->Salida
   
   msg = 0;                  //Barrera del mensaje de bienvenida
   empieza = 1024;           //Barrera de arranque
  
   varbuth = 1;              //Barrera de horas
   varbutm = 1;              //Barrera de minutos
   varbuts = 1;              //Barrera de segundos
 
   Serial.begin(9600);
}


void loop()
{
     if(msg==0)             //Mostramos el mensaje de bienvenida solo una vez
     {
       lcd.setCursor(0,0);
       lcd.print("Tiempo para explosion");
        delay(1000);
       lcd.setCursor(1,1);
       lcd.print("bomba");
        delay(1000);
       lcd.setCursor(5,3);
       lcd.print("CONFIGURE");
        delay(1000);
       tone(pito,frecuencia);
       delay(100);
       noTone(pito);
       msg = 1;
       lcd.clear();
     }
    
     //-------------------------------------------------------------------------------------------------    
     // LECTURA DE LOS BOTONES Y ELECCIÓN DEL TIEMPO, NO SALE DEL BUCLE HASTA PULSAR
     // EL BOTON DE ARRANQUE
     //-------------------------------------------------------------------------------------------------
    
     do                  
     {
      
       varbuth = analogRead(buth);   //Leemos boton de horas
       varbutm = analogRead(butm);   //Leemos boton de minutos
       varbuts = analogRead(buts);   //Leemos boton de segundos
      
       if(varbuth > 0)              //Si el boton ha sido pulsado, aumentamos las horas en una unidad
       {
        ahoras = ahoras + 1 ;
         delay(250);
         {  digitalWrite (led,HIGH);
         tone(pito,frecuencia);
     delay(100);
     noTone(pito);
     digitalWrite (led,LOW);
     delay(100);}
       
       } 
      
        if(varbutm > 0)            //Si el boton ha sido pulsado, aumentamos los minutos en una unidad
       {
         aminutos = aminutos + 1;
         if(aminutos == 60) aminutos = 0;
          delay(250);
          { digitalWrite (led,HIGH);
         tone(pito,frecuencia);
     delay(100);
     noTone(pito);
     digitalWrite (led,LOW);
     delay(100);}
        
       } 
      
        if(varbuts > 0)            //Si el boton ha sido pulsado, aumentamos los segundos en una unidad
       {
         asegundos = asegundos + 1;
         if(asegundos == 60) asegundos = 0;
          delay(250);
          {  digitalWrite (led,HIGH);
         tone(pito,frecuencia);
     delay(100);
     noTone(pito);
     digitalWrite (led,LOW);
     delay(100);}
      
       } 
            
       lcd.setCursor(1,0);
       lcd.print("Elige el tiempo");  //Muestra mensaje y las HH:MM:SS que vayamos aumentando
      
       lcd.setCursor(4,1);    


      if (ahoras < 10) lcd.print("0");    // Si las horas son menor que 10, pone un "0" delante.
       lcd.print(ahoras);                 // Sin este codigo, se muestra asi: H:M:S  (1:M:S)
       lcd.print(":");


      if (aminutos < 10) lcd.print("0");  // Si los minutos son menor que 10, pone un "0" delante.
       lcd.print(aminutos);               // Sin este codigo, se muestra asi: H:M:S  (H:1:S)


       lcd.print(":");
      if (asegundos < 10) lcd.print("0"); // Si los segundos son menor que 10, pone un "0" delante.
       lcd.print(asegundos);              // Sin este codigo, se muestra asi: H:M:S  (H:M:1)
      
      
     } 
     while(analogRead(start) == 0);  // Se repite el menu de elegir tiempo hasta que pulsemos el boton de arranque.

   
    
     segundostotal = asegundos + (aminutos * 60) + (ahoras * 60 * 60);  //Convierte el tiempo elegido en segundos
      
      //-------------------------------------------------------------------------------------------------
      // UNA VEZ PULSADO EL BOTON DE ARRANQUE Y ACUMULADO EL TIEMPO, ENTRA EN EL SIGUIENTE WHILE
      // Y NO FINALIZA HASTA TERMINAR LA CUENTA.
      //-------------------------------------------------------------------------------------------------

      while (segundostotal > 0)
      {
        delay (1000);          //Descontamos en periodos de 1 segundo
        segundostotal--;    
  
        ahoras = ((segundostotal / 60)/ 60);   //Convertimos los segundos totales en horas
        aminutos = (segundostotal / 60) % 60;  //Convertimos los segundos totales en minutos
        asegundos = segundostotal % 60;        //Convertimos los segundos totales en periodos de 60 segundos

        lcd.setCursor(1,0);
        lcd.print("Tiempo restante");        //Mostramos mensaje de tiempo restante

        lcd.setCursor(4,1);
        if (ahoras < 10) lcd.print("0");     // Si las horas son menor que 10, pone un "0" delante.
        lcd.print(ahoras);                   // Sin este codigo, se muestra asi: H:M:S  (1:M:S)
        lcd.print(":");


        if (aminutos < 10) lcd.print("0");   // Si los minutos son menor que 10, pone un "0" delante.
        lcd.print(aminutos);                 // Sin este codigo, se muestra asi: H:M:S  (H:1:S)


        lcd.print(":");
        if (asegundos < 10) lcd.print("0");  // si el valor de segundo esta por debajo de 9 (unidad) antepone un cero
        lcd.print(asegundos);                // Sin este codigo, se muestra asi: H:M:S  (H:M:1)

   
          if (segundostotal == 0)            //Si finaliza el tiempo
          {          
             while(1)                        //Bucle infinito mostrando mensaje y haciendo parpadear un led
             {              
                  lcd.clear();
                  lcd.setCursor(5,0);
                  lcd.print("XXXXX");
                  lcd.setCursor(5,1);
                  lcd.print("XXXXX");
                 tone(pito,300);
                 delay(5000);
                 noTone(pito);
                return (0);

             }     
          }
     }
    
}

Nuevo documento de texto.txt (7.37 KB)

Simplemente debes añadir una variable tipo temporizador_on= false/true. Añades a la comparativa de botón pulsado la variable y ya sabes si al pulsar el botón tienes que parar o encender el temporizador. Si pulsas botón y variable es false entonces variable=true. Y al revés.