hola, con mi hijo estamos aprendiendo a programar con arduino. 
estamos en una parte muy basica. pero nos topamos con una alarma, que ahora a mi me intereso, pero no le encuentro la vuelta. 
lo que quiero lograr es esto: 
que cuando se active, me de la opcion de desarmarla, sin necesidad de esperar a que suene por intrusion. 
otra, muy relacionada, que cuando por ejemplo, vuelvo a mi casa, y la alarma me detecte, me de un tiempo para ingresar la clave y desarmarla. 
se que es una pavada, pero no le encuentro la vuelta. 
estoy usando un display 16x2 I2C, y un teclado matrical 4x4. 
aca dejo el codigo. espero darme a entender. 

#include <LiquidCrystal_I2C.h> // includes the LiquidCrystal Library 
#include <Keypad.h>
#include <Wire.h> 
#define sensorA 11
#define buzzer1 A0
#define rele A1
int sensorReed_alarma = 10; 
int screenOffMsg =0;
String password="1234";
String tempPassword;
boolean activated = false; // State of the alarm
boolean isActivated;
boolean activateAlarm = false;
boolean alarmActivated = false;
boolean enteredPassword; // State of the entered password to stop the alarm
boolean passChangeMode = false;
boolean passChanged = false;

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
byte rowPins[ROWS] = {9, 8, 7, 6}; //Row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //Column pinouts of the keypad
char keypressed;
//define the cymbols on the buttons of the keypads
char keyMap[ROWS][COLS] =
{
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS, COLS); 
LiquidCrystal_I2C lcd(0x03f, 16, 2); // Creates an LC object.  
void setup() { 
  lcd.begin(); 
  pinMode(buzzer1, OUTPUT); // define A0, buzzer1 como una salida
  pinMode(rele, OUTPUT); // Sets the rele as an Output (A1)
  pinMode(sensorReed_alarma, INPUT); // Sets the sensorReed_alarma as an Input ( pin 11)
}
void loop() {
  if (activateAlarm) {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("A");lcd.print("c");lcd.print("t");lcd.print("i");lcd.print("v");lcd.print("a");lcd.print("n");lcd.print("d");lcd.print("o");lcd.print(" ");lcd.print("a");lcd.print("l");lcd.print("a");lcd.print("r");lcd.print("m");lcd.print("a");
    lcd.setCursor(0,1);
  
    tone(buzzer1, 2000, 100);
    lcd.print(" ");lcd.print("A");lcd.print("c");lcd.print("t");lcd.print("i");lcd.print("v");lcd.print("a");lcd.print("d");lcd.print("a");lcd.print(" ");lcd.print("e");lcd.print("n");lcd.print(":");
  
   tone(buzzer1, 2000, 100);
    int countdown = 3; // espera 6 segundos para activar alarma. 
    while (countdown != 0) {
      lcd.setCursor(13,1);
      lcd.print(countdown);
      countdown--;
      tone(buzzer1, 1000, 200);
      delay(1000);
    }
    lcd.clear(); // alarma armada
      lcd.print(" ");lcd.print(" ");lcd.print(" ");lcd.print(" ");lcd.print(" ");lcd.print("A");lcd.print("l");lcd.print("a");lcd.print("r");lcd.print("m");lcd.print("a");
      lcd.setCursor(2,1);
      lcd.print("*");lcd.print("*");lcd.print("*");lcd.print("A");lcd.print("r");lcd.print("m");lcd.print("a");lcd.print("d");lcd.print("a");lcd.print("*");lcd.print("*");lcd.print("*");  
      activateAlarm = false;
      alarmActivated = true;
  }
  if (alarmActivated == true){
        if(digitalRead(sensorA) == HIGH){ 
        lcd.clear();
        lcd.print("!");lcd.print("!");lcd.print("!");lcd.print("I");lcd.print("N");lcd.print("T");lcd.print("R");lcd.print("U");lcd.print("S");lcd.print("I");lcd.print("O");lcd.print("N");lcd.print("!");lcd.print("!");lcd.print("!");
        enterPassword();
        tone(buzzer1, 800, 500); 
        lcd.clear();
        }
 }
   if (!alarmActivated) {
    if (screenOffMsg == 0 ){
      lcd.clear();
          digitalWrite(rele, HIGH);
         lcd.setCursor(0,0);
      lcd.print("A");lcd.print("");lcd.print("-");lcd.print("a");lcd.print("c");lcd.print("t");lcd.print("i");lcd.print("v");lcd.print("a");lcd.print("r");
      lcd.setCursor(0,1);
      lcd.print("B");lcd.print("");lcd.print("-");lcd.print("c");lcd.print("a");lcd.print("m");lcd.print("b");lcd.print("i");lcd.print("a");lcd.print("r");lcd.print(" ");lcd.print("c");lcd.print("l");lcd.print("a");lcd.print("v");lcd.print("e");
      screenOffMsg = 1;
      
    }
    keypressed = myKeypad.getKey() ;
     if (keypressed =='A'){        //If A is pressed, activate the alarm
      tone(buzzer1, 1000, 200);
      activateAlarm = true;            
    
    }
    else if (keypressed =='B') {  // cambio de clave
      lcd.clear();
      int i=1;
      tone(buzzer1, 2000, 100);
      tempPassword = "";
      lcd.setCursor(0,0);
      lcd.print("c");lcd.print("l");lcd.print("a");lcd.print("v");lcd.print("e");lcd.print(" ");lcd.print("a");lcd.print("c");lcd.print("t");lcd.print("u");lcd.print("a");lcd.print("l");lcd.print(":");
      lcd.setCursor(0,1);
      lcd.print(">");
      passChangeMode = true;
      passChanged = true;   
      while(passChanged) {      
      keypressed = myKeypad.getKey();
      if (keypressed != NO_KEY){
        if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
           keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
           keypressed == '8' || keypressed == '9' ) {
         tempPassword += keypressed;
         lcd.setCursor(i,1);
         lcd.print("*");
         i++;
         tone(buzzer1, 2000, 100);
        }
      }
      
      if ( keypressed == '*') { // cuando se ingresa nueva clave
        i=1;
        tone(buzzer1, 2000, 100);
        if (password == tempPassword) {
          tempPassword="";
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("n");lcd.print("u");lcd.print("e");lcd.print("v");lcd.print("a");lcd.print(" ");lcd.print("c");lcd.print("l");lcd.print("a");lcd.print("v");lcd.print("e");lcd.print("?");lcd.print("?");
          lcd.setCursor(0,1);
          lcd.print(">");
          while(passChangeMode) {
            keypressed = myKeypad.getKey();
            if (keypressed != NO_KEY){
              if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
                  keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
                  keypressed == '8' || keypressed == '9' ) {
                tempPassword += keypressed;
                lcd.setCursor(i,1);
                lcd.print("*");
                i++;
                tone(buzzer1, 2000, 100);
              }
            }
            
            if ( keypressed == '*') {
              i=1;
              tone(buzzer1, 2000, 100);
              password = tempPassword;
              passChangeMode = false;
              passChanged = false;
              screenOffMsg = 0;
            }            
          }
        }
      }
    }
   }
 }
}
void enterPassword() {
  int k=5;
  tempPassword = "";
  activated = true;
  lcd.clear();
  lcd.setCursor(2,0);
  lcd.print("*");lcd.print("*");lcd.print("*");lcd.print("A");lcd.print("L");lcd.print("A");lcd.print("R");lcd.print("M");lcd.print("A");lcd.print("*");lcd.print("*");lcd.print("*");
  lcd.setCursor(0,1);
  delay(3000);
  digitalWrite(rele, LOW); // Send 1KHz sound signal
  lcd.print("w");lcd.print("a");lcd.print("s");lcd.print("s");lcd.print(">");
      while(activated) {
       keypressed = myKeypad.getKey();
      if (keypressed != NO_KEY){
        if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
            keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
            keypressed == '8' || keypressed == '9' ) {
          tempPassword += keypressed;
          lcd.setCursor(k,1);
          lcd.print("*");
          k++;
        }
      }
      if (k > 9 || keypressed == '#') {
        tempPassword = "";
        k=5;
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("*");lcd.print("*");lcd.print("*");lcd.print("A");lcd.print("L");lcd.print("A");lcd.print("R");lcd.print("M");lcd.print("A");lcd.print("*");lcd.print("*");lcd.print("*");
        lcd.setCursor(0,1);
        lcd.print("P");lcd.print("a");lcd.print("s");lcd.print("s");lcd.print(">");
      }
      if ( keypressed == '*') {
        if ( tempPassword == password ) {
          activated = false;
          alarmActivated = false;
          noTone(buzzer1);
          screenOffMsg = 0; 
        }
        else if (tempPassword != password) {
          lcd.setCursor(0,1);
          lcd.print("i");lcd.print("n");lcd.print("c");lcd.print("o");lcd.print("r");lcd.print("e");lcd.print("c");lcd.print("o");lcd.print(" ");lcd.print("r");lcd.print("e");lcd.print("i");lcd.print("n");lcd.print("g");lcd.print("r");lcd.print("e");lcd.print("s");lcd.print("e");
          delay(2000);
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("*** ALARM ***");
          lcd.setCursor(0,1);
          lcd.print("P");lcd.print("a");lcd.print("s");lcd.print("s");lcd.print(">");
        }
      }    
    }
  }