Cuenta atras para alarma Nuevo PROBLEMA

Si buenas, me refiero al reloj en tiempo real, al final no se puso el codigo final no se que ha pasado.

// Alarma Chalet
#include <Wire.h>                   // Libreria para I2C
#include <LiquidCrystal_I2C.h>      // Libreria para LCD
#define DS1307_I2C_ADDRESS 0x68     // Direccion bus Reloj

LiquidCrystal_I2C lcd(0x27,16,2);  // Direccion de bus pantalla

const int zumbador = 7;        // Pin Zumbador de aviso
const int pir1 = 2;            // Pin de entrada señal Pir 1
const int pir2 = 4;            // Pin de entrada señal Pir 2
const int ledEstado = 13;      // Led en pin 13 salto Pir 1 y Pir 2
int estadoPir1 = 0;            // Estado de Pir 1 "0"
int estadoPir2 = 0;            // Estado de Pir 2 "0"

byte decToBcd(byte val)
{
  return ( (val/10*16) + (val%10) );
}

// Convierte BCD (binario decimal codificado) a números normales decimales 
byte bcdToDec(byte val)
{
  return ( (val/16*10) + (val%16) );
}

// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock

void setDateDs1307(byte second,        // 0-59
                   byte minute,        // 0-59
                   byte hour,          // 1-23
                   byte dayOfWeek,     // 1-7
                   byte dayOfMonth,    // 1-28/29/30/31
                   byte month,         // 1-12
                   byte year)          // 0-99
{
   Wire.beginTransmission(DS1307_I2C_ADDRESS);
   Wire.send(0);
   Wire.send(decToBcd(second));    
   Wire.send(decToBcd(minute));
   Wire.send(decToBcd(hour));      
   Wire.send(decToBcd(dayOfWeek));
   Wire.send(decToBcd(dayOfMonth));
   Wire.send(decToBcd(month));
   Wire.send(decToBcd(year));
   Wire.endTransmission();
}

// Establece la fecha y la hora del reloj
void getDateDs1307(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfWeek,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{
  // Resetea el registro puntero
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  // Alguno de estos necesitan enmascarar porque ciertos bits son bits de control    

  *second     = bcdToDec(Wire.receive() & 0x7f);
  *minute     = bcdToDec(Wire.receive());
  *hour       = bcdToDec(Wire.receive() & 0x3f);  
  *dayOfWeek  = bcdToDec(Wire.receive());
  *dayOfMonth = bcdToDec(Wire.receive());
  *month      = bcdToDec(Wire.receive());
  *year       = bcdToDec(Wire.receive());
}

void setup()

{
  
  lcd.init();                  // Inicializacion LCD
  lcd.backlight();             // Iluminacion LCD
  pinMode(zumbador, OUTPUT);   // Funcion de salida Zumbador pin 9
  pinMode(ledEstado, OUTPUT);  // Funcion de salida LedEstado pin 13
  pinMode(pir1, INPUT);        // Funcion de entrada Pir 1 pin 2 
  pinMode(pir2, INPUT);        // Funcion de entrada Pir 2 pin 4
  Serial.begin(9600);          // Puerto serie configurado a 9600 baudios.
  
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  Wire.begin();
  
  
 
  // la primera vez debemos poner en hora, active esta parte y luego vuelva a quitarla
  /*second = 00;
  minute = 33;
  hour = 15;
  dayOfWeek = 6;
  dayOfMonth = 11;
  month = 2;
  year = 12;
  
  setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); */
   
  
}

void loop()
{
  
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);  

  lcd.setCursor(6,0);
    lcd.print(year, DEC);
  lcd.setCursor(2,0);
  lcd.print("/");
  lcd.setCursor(3,0);
    if (month < 10) lcd.print("0");
  lcd.print(month, DEC);  
  lcd.setCursor(5,0);
  lcd.print("/");   
  lcd.setCursor(0,0);
    if (dayOfMonth < 10) lcd.print("0");
  lcd.print(dayOfMonth, DEC); 
  lcd.print("");
  lcd.setCursor(0,1);
    if (hour < 10) lcd.print("0");
  lcd.print(hour, DEC);
  lcd.setCursor(2,1);
  lcd.print(":");  
  lcd.setCursor(3,1);
    if (minute < 10) lcd.print("0");
  lcd.print(minute, DEC);
  lcd.setCursor(5,1);
  lcd.print(":");
    if (second < 10) lcd.print("0");
  lcd.print(second, DEC);  
  
     switch (dayOfWeek)
    
    {
     
    case 1:
      lcd.setCursor(9,0);
      lcd.print("Lunes"); 
      break;
    case 2:
      lcd.setCursor(9,0);
      lcd.print("Martes"); 
      break;
    case 3:
      lcd.setCursor(9,0);
      lcd.print("Miercoles"); 
      break;
    case 4:
      lcd.setCursor(9,0);
      lcd.print("Jueves"); 
      break;
    case 5:
      lcd.setCursor(9,0);
      lcd.print("Viernes"); 
      break;
    case 6:
      lcd.setCursor(9,0);
      lcd.print("Sabado"); 
      break;
    case 7:
      lcd.setCursor(9,0);
      lcd.print("Domingo"); 
      break;
   }
   
   

  delay(1000); //Pausa durante 1 segundo
  
  
  
  estadoPir1 = digitalRead(pir1);  // Leer estado Pir 1
  estadoPir2 = digitalRead(pir2);  // Leer estado Pir 2
  
  lcd.backlight();                // Iluminacion LCD
 
  if (estadoPir1 == HIGH) {        // Si esta sl sensor Pir 1 activado activa led Pin 13
  for ( int i=20; i>=0; i-- ){     // Se inicia bucle cuenta atras desde 35s
  Serial.println(i);               // Se imprime bucle en puerto serie
  lcd.setCursor (13,1);            // Se establece el curso en el LCD
  lcd.print(i);                    // Se imprime el valor de i por donde va.
     if (i < 10) lcd.print("  ");  // Imprime 2 espacios en blanco para eleminar numero residual.
     digitalWrite(zumbador, HIGH);
     delay(250);
     digitalWrite(zumbador, LOW);
     
  delay(1000);                      // Tiempo que esta en cada variable del bucle
  }
  
  digitalWrite(ledEstado, HIGH);    //Pone led Estado pin 13 a nivel alto
  digitalWrite(zumbador, HIGH);
  lcd.setCursor(9,1);
  lcd.print("Pir 1");               // Aparece en pantalla Pir 1
   delay(1500);
  digitalWrite(zumbador, LOW);
  }
 
  else {                           // Si no se da las condiciones anteriores pone led Estado a nivel bajo
  digitalWrite(ledEstado, LOW);
    lcd.setCursor(9,1);
       
    if (estadoPir2 == HIGH) {        // Si esta sl sensor Pir 1 activado activa led Pin 13
  for ( int i=20; i>=0; i-- ){     // Se inicia bucle cuenta atras desde 35s
  Serial.println(i);               // Se imprime bucle en puerto serie
  lcd.setCursor (13,1);            // Se establece el curso en el LCD
  lcd.print(i);                    // Se imprime el valor de i por donde va.
     if (i < 10) lcd.print("  ");  // Imprime 2 espacios en blanco para eleminar numero residual.
     digitalWrite(zumbador, HIGH);
     delay(250);
     digitalWrite(zumbador, LOW);
     
  delay(1000);                      // Tiempo que esta en cada variable del bucle
  }
  
  digitalWrite(ledEstado, HIGH);    //Pone led Estado pin 13 a nivel alto
  digitalWrite(zumbador, HIGH);
  lcd.setCursor(9,1);
  lcd.print("Pir 2");               // Aparece en pantalla Pir 2
   delay(1500);
  digitalWrite(zumbador, LOW);
  }
 
  else {                           // Si no se da las condiciones anteriores pone led Estado a nivel bajo
  digitalWrite(ledEstado, LOW);
    lcd.setCursor(9,1);
    lcd.print("OK   ");             // Aparece en pantalla OK
   

 
  }
      
 }
}

Tambien estoy intentando parar la cuenta atras una vez iniciada simulando la desconexion de la alarma y no se como hacerlo, ni como empezar a ver si me podeis orientar un poco, porque mirando el manual del arduino no he visto nada que pueda aplicar...

Puse un pin digital como entrada e intente que usando if cuando ese pin este a nivel alto se desconecte la cuenta atras pero no lo consegui, creo que no es lo adecuado.