[SOLUCIONADO] Ayuda con codigo

Hola comunidad, se me presento un problema a realizar una alarma domiciliaria, resulta que el codigo de la contraseña funciona perfectamente,pero lo que necesito que haga es que cuando se arma la alarma empiece a testear ( solo en ese momento) los sensores si son activados la salida del pin 18 quede activa hasta que se desactive la alarma , pero no logro que testee nada solo queda el lcd con la leyenda "Vigilando", nose lo que es que estoy haciendo mal, aclaro estoy muy verde con el arduino y estoy aprendiendo.

Pd: no pretendo que me hagan el codigo solo que me digan como hacerlo...

Desde ya muchas gracias

Aca el codigo:

#include <Password.h>
#include <Keypad.h>
#include <LiquidCrystal.h>

Password password = Password ("1234"); //Esta es la contraseña de armado y desarmado

LiquidCrystal lcd(14, 13, 12, 11, 10, 9);

const byte ROWS = 4;
const byte COLS = 3; 


char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};

byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {8, 7, 6};

// Creamos el KeyPad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

int estadoledarmado = 0; //Especificamos el estado inicial del led es 0(apagado)
int estadoleddesarmado = 1; //Especificamos el estado inicial del led es 1(encendido)
bool AlarmaArmada=false;









void setup()
{
  

  digitalWrite(19, LOW);
  pinMode(19,INPUT);
  pinMode(18,OUTPUT);
  pinMode(15, OUTPUT); //Buzzer
  lcd.begin(16, 2);
            lcd.setCursor(0,0);
            lcd.print("Iniciando");
            lcd.setCursor(0,1);
            lcd.print("alarma");
            delay(500);
            lcd.setCursor(6,1);
            lcd.print(".");
            delay(500);
            lcd.setCursor(7,1);
            lcd.print(".");
            delay(500);
            lcd.setCursor(8,1);
            lcd.print(".");
            delay(500);
            lcd.clear();
            lcd.setCursor(0,0);
            lcd.print("Chequeando");
            lcd.setCursor(0,1);
            lcd.print("alarma");
            
            lcd.clear();
            lcd.setCursor(0,0);
            lcd.print("Alarma chequeda"); 
            lcd.setCursor(0,1);
            lcd.print("con exito"); 
            delay(2000);
            lcd.clear();
            lcd.setCursor(3,0);
            lcd.print("BIENVENIDO"); 
            delay(2000);
            lcd.clear();



     

            
            
  keypad.addEventListener(keypadEvent); 
}

void loop()
  {
  lcd.setCursor(0, 1);
  keypad.getKey();
}

//check the keypad events
void keypadEvent(KeypadEvent keyPress)
{
  switch (keypad.getState())
  {
    case PRESSED:
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.write("Ingresando...");
    switch (keyPress)
    {
	  case '#':    //Presionando # se desarma la alarma
             checkPassword();
          break;

          case '*':   //Presionado * se arma la alarma
            checkPassword2(); 
          break;             
 

          break;    
          
          default:
          password.append(keyPress);
         
     }
  }

  }




//Chequea la contraseña cuando se ingresa el #

void checkPassword(){

  if (password.evaluate()) 
  {
    if (!AlarmaArmada)
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("ya desactiva");
      delay (3000);
      lcd.clear();
      lcd.setCursor(0,0);

    }
    else
    {
      AlarmaArmada=false;
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Password");
      lcd.setCursor(0,1);
      lcd.print("correcto");
      for (int i=0; i <= 12; i++)
            {
              delay(100);
              digitalWrite(15, HIGH);
              delay(100);
              digitalWrite(15, LOW);
            }
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("desactivada");
      delay (2000);
      lcd.clear();
     

      
    }
  }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("Password");
    lcd.setCursor(0,1);
    lcd.print("incorrecto");
    digitalWrite(15, HIGH);
              delay(3000);
              digitalWrite(15, LOW);

    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Reingrese Pass"); 
  }
  password.reset();
}




//Chequea la contraseña cuando se ingresa el *

void checkPassword2(){
  if (password.evaluate()) 
  {
    if (AlarmaArmada)
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("Ya armada");
      delay (2000);
      lcd.clear();        
      delay(4000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Vigilando...");
    }
    else
    {
      AlarmaArmada=true;                
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Password"); 
      lcd.setCursor(0,1);
      lcd.print("correcto");
      delay(1000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("activandose");
      delay (2000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("10"); digitalWrite(15, HIGH);
      delay(1000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("9"); digitalWrite(15, LOW);
      delay(1000);
      lcd.setCursor(0,0);
      lcd.print("8"); digitalWrite(15, HIGH);
      delay(1000);
      lcd.setCursor(0,0);
      lcd.print("7"); digitalWrite(15, LOW);
      delay(1000);
      lcd.setCursor(0,0);
      lcd.print("6"); digitalWrite(15, HIGH);
      delay(1000);
      lcd.setCursor(0,0);
      lcd.print("5"); digitalWrite(15, LOW);
      delay(1000);
      lcd.setCursor(0,0);
      lcd.print("4"); digitalWrite(15, HIGH);
      delay(1000);
      lcd.setCursor(0,0);
      lcd.print("3"); digitalWrite(15, LOW);
      delay(1000);
      lcd.setCursor(0,0);
      lcd.print("2"); digitalWrite(15, HIGH);
      delay(1000);
      lcd.setCursor(0,0);
      lcd.print("1"); digitalWrite(15, LOW);
      delay(1000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("activada");
      digitalWrite(15, HIGH);
      delay(4000);
      digitalWrite(15, LOW);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Vigilando...");
      {
Zona1();
      }
  }   
   
  }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("Password"); 
    lcd.setCursor(0,1);
    lcd.print("incorrecto");
        digitalWrite(18, HIGH);
              delay(3000);
              digitalWrite(15, LOW);
              
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Reingrese pass");
  }
  password.reset();
}

void Zona1(){

     if(digitalRead(19) == HIGH){
       digitalWrite(18, HIGH);   
 
         
         lcd.clear();         
         lcd.setCursor(0,0);
         lcd.print("zona activada");
         delay(50);
         }         
     }

prueba void loop(void) {........

Hola Derty-2 nose a que te referis con void loop(void) {........ ni donde ubicarlo

donde tienes void loop(){.... , en el código, pon void dentro de los corchetes

Bueno he probado poniendo void dentro de los parentesis y sigue igual

void loop(void)
  {
  lcd.setCursor(0, 1);
  keypad.getKey();
}

Pero resulta que estado experimentando y realice un codigo con boolean el cual si me detecta la si la entrada esta en algo solo cuando tengo la alarma activada pero, el problema es que si la entrada (19) la tengo LOW y apreto el teclado me deja poner la contraseña para poder desactivarla pero si la tengo HIGH no me deja desactivar la alarma, solo si apreto el # y me da el mensaje de contraseña incorrecta y ay puedo puedo desactivarla y otro problema es cuando se activa el sensor primero se activa el pin 18 y al rato aparece el mesaje en el lcd de la zona activada y empieza a parpadear el lcd, la verdad que ay nose que me esta faltando.

Aca el codigo:

#include <Password.h>
#include <Keypad.h>
#include <LiquidCrystal.h>

Password password = Password ("1234"); //Esta es la contraseña de armado y desarmado

LiquidCrystal lcd(14, 13, 12, 11, 10, 9);

const byte ROWS = 4;
const byte COLS = 3; 


char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};

byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {8, 7, 6};

// Creamos el KeyPad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

int estadoledarmado = 0; //Especificamos el estado inicial del led es 0(apagado)
int estadoleddesarmado = 1; //Especificamos el estado inicial del led es 1(encendido)
bool AlarmaArmada=false;
bool Testeo=false;









void setup()
{
  

  digitalWrite(19, LOW);
  pinMode(19,INPUT);
  pinMode(18,OUTPUT);
  pinMode(15, OUTPUT); //Buzzer
  lcd.begin(16, 2);
            lcd.setCursor(0,0);
            lcd.print("Iniciando");
            lcd.setCursor(0,1);
            lcd.print("alarma");
            delay(500);
            lcd.setCursor(6,1);
            lcd.print(".");
            delay(500);
            lcd.setCursor(7,1);
            lcd.print(".");
            delay(500);
            lcd.setCursor(8,1);
            lcd.print(".");
            delay(500);
            lcd.clear();
            lcd.setCursor(0,0);
            lcd.print("Chequeando");
            lcd.setCursor(0,1);
            lcd.print("alarma");
            
            lcd.clear();
            lcd.setCursor(0,0);
            lcd.print("Alarma chequeda"); 
            lcd.setCursor(0,1);
            lcd.print("con exito"); 
            delay(2000);
            lcd.clear();
            lcd.setCursor(3,0);
            lcd.print("BIENVENIDO"); 
            delay(2000);
            lcd.clear();



     

            
            
  keypad.addEventListener(keypadEvent); 
}

void loop()
  {
  lcd.setCursor(0, 1);
  keypad.getKey();      
zona1();
}

//check the keypad events
void keypadEvent(KeypadEvent keyPress)
{
  switch (keypad.getState())
  {
    case PRESSED:
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.write("Ingresando...");
    switch (keyPress)
    {
	  case '#':    //Presionando # se desarma la alarma
             checkPassword();
          break;

          case '*':   //Presionado * se arma la alarma
            checkPassword2(); 
          break;             
 

          break;    
          
          default:
          password.append(keyPress);
         
     }
  }

  }




//Chequea la contraseña cuando se ingresa el #

void checkPassword(){

  if (password.evaluate()) 
  {
    if (!AlarmaArmada)
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("ya desactiva");
      delay (3000);
      lcd.clear();
      lcd.setCursor(0,0);

    }
    else
    {
      AlarmaArmada=false;
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Password");
      lcd.setCursor(0,1);
      lcd.print("correcto");
      digitalWrite(18, LOW); //Al ingresa el codigo de desarme la salida del pin 18 queda LOW
            Testeo=false;
      for (int i=0; i <= 12; i++)
            {
              delay(100);
              digitalWrite(15, HIGH);
              delay(100);
              digitalWrite(15, LOW);
            }
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("desactivada");
      delay (2000);
      lcd.clear();
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("!!Bienvenida");
      lcd.setCursor(0,1);
      lcd.print("familia Bau!!");
      delay(5000);
      lcd.clear();

      
    }
  }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("Password");
    lcd.setCursor(0,1);
    lcd.print("incorrecto");
    digitalWrite(15, HIGH);
              delay(3000);
              digitalWrite(15, LOW);

    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Reingrese Pass"); 
  }
  password.reset();
}




//Chequea la contraseña cuando se ingresa el *

void checkPassword2(){
  if (password.evaluate()) 
  {
    if (AlarmaArmada)
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("Ya armada");
      delay (2000);
      lcd.clear();        
      delay(4000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Vigilando...");
    }
    else
    {
      AlarmaArmada=true;                
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Password"); 
      lcd.setCursor(0,1);
      lcd.print("correcto");
      delay(1000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("activandose");
      delay (2000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("10"); digitalWrite(15, HIGH);
      delay(1000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("9"); digitalWrite(15, LOW);
      delay(1000);
      lcd.setCursor(0,0);
      lcd.print("8"); digitalWrite(15, HIGH);
      delay(1000);
      lcd.setCursor(0,0);
      lcd.print("7"); digitalWrite(15, LOW);
      delay(1000);
      lcd.setCursor(0,0);
      lcd.print("6"); digitalWrite(15, HIGH);
      delay(1000);
      lcd.setCursor(0,0);
      lcd.print("5"); digitalWrite(15, LOW);
      delay(1000);
      lcd.setCursor(0,0);
      lcd.print("4"); digitalWrite(15, HIGH);
      delay(1000);
      lcd.setCursor(0,0);
      lcd.print("3"); digitalWrite(15, LOW);
      delay(1000);
      lcd.setCursor(0,0);
      lcd.print("2"); digitalWrite(15, HIGH);
      delay(1000);
      lcd.setCursor(0,0);
      lcd.print("1"); digitalWrite(15, LOW);
      delay(1000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("activada");
      digitalWrite(15, HIGH);
      delay(4000);
      digitalWrite(15, LOW);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Vigilando...");
      {
      Testeo=true;

      }
  }   
   
  }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("Password"); 
    lcd.setCursor(0,1);
    lcd.print("incorrecto");
        digitalWrite(15, HIGH);
              delay(3000);
              digitalWrite(15, LOW);
              
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Reingrese pass");
  }
  password.reset();
}

void zona1(){
   if (digitalRead(19) == HIGH){         //Lee el estado de la entrada 19

if (Testeo)                              //Ve si la variable es verdadera o falsa
  {
    
    
         lcd.setCursor(0, 0);
         lcd.print("Zona 1 activada"); 
         lcd.setCursor(0, 1);            //Despliega el mensaje en el lcd
         lcd.print("Confir. Pres");
  delay(8000);                           //Da 8 seg para poder desactivar la alarma 
         digitalWrite(18, HIGH);         //Pasados los 8 seg pone a la salida 18 en estado alto


 }

  }
}

Yo creo que el problema es que estés haciendo tu programa "en cima" del ejemplo de "password". Hace unos días oro usuario hacia una pregunta muí parecida y lo que le aconseje fue que hiciera la lectura de otra forma sin utilizar los "eventos":

#include <Password.h> //http://www.arduino.cc/playground/uploads/Code/Password.zip
#include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip

Password password = Password( "1234" ); // Senha utilizada

const byte ROWS = 4; //quatro linhas - Fios Laranja
const byte COLS = 4; //quatro colunas - Fios Brancos

//Define o Keypad (mapa do circuito do teclado).
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins[ROWS] = { 9, 8, 7, 6 }; //ligar as linhas do teclado
byte colPins[COLS] = {12, 11, 10, 5}; //ligar as colunas do teclado


// Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

boolean estado = false;

void setup() {

  Serial.begin(9600);
}

void loop() {

  char Key = keypad.getKey();

  if (estado == false && Key != NO_KEY)
  {
    switch (Key) {
      case '*':
        if (password.evaluate()) {
          Serial.println("Success");
          estado = true;
          //Add code to run if it works  
        }
        break;
      case '#': password.reset(); break;
      default: password.append(Key);
    }
  }
  else if (estado == true && Key != NO_KEY) {
    Serial.println(Key);
    if (Key)                                                                                                 
    {
      switch (Key)
      {
        case '1' :                                                                                         
          break;                                                                                     
        case '2' :                                                                                      
          break;                                                                                   
        case '3' :                                                                                      
          break;                                                                                 
        case 'A' :                                                                             
          break;
        case '4' :                                                                                 
          break;                                                                                
        default:
          estado = false;
      }
    }
  }
}

La variable "estado" indicaba si el sistema estaba esperando la "password" o estaba "desbloqueado". En tu caso quizás no sea exactamente lo mismo, pero la idea de no leer la password por evento si es igual.

prueba algo asi:

#include <Password.h>
#include <Keypad.h>
#include <LiquidCrystal.h>

Password password = Password ("1234"); //Esta es la contraseña de armado y desarmado

LiquidCrystal lcd(14, 13, 12, 11, 10, 9);

const byte ROWS = 4;
const byte COLS = 3; 

char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};

byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {8, 7, 6};

// Creamos el KeyPad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

bool AlarmaArmada=false;
bool AlarmaSalto=false;

void setup()
{
  pinMode(19,INPUT);
  pinMode(18,OUTPUT);
  pinMode(15, OUTPUT); //Buzzer
  digitalWrite(19, LOW);
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print("Iniciando");
  lcd.setCursor(0,1);
  lcd.print("alarma");
  delay(500);
  lcd.setCursor(6,1);
  lcd.print(".");
  delay(500);
  lcd.setCursor(7,1);
  lcd.print(".");
  delay(500);
  lcd.setCursor(8,1);
  lcd.print(".");
  delay(500);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Chequeando");
  lcd.setCursor(0,1);
  lcd.print("alarma");         
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Alarma chequeda"); 
  lcd.setCursor(0,1);
  lcd.print("con exito"); 
  delay(2000);
  lcd.clear();
  lcd.setCursor(3,0);
  lcd.print("BIENVENIDO"); 
  delay(2000);
  lcd.clear();          
  keypad.addEventListener(keypadEvent); 
}

void loop()
{
  lcd.setCursor(0, 1);
  keypad.getKey();
  if (AlarmaArmada && !AlarmaSalto) {Zona1();}
  if (AlarmaSalto)
  {
      // Codigo para alarma saltada
  }
}

//check the keypad events
void keypadEvent(KeypadEvent keyPress)
{
  switch (keypad.getState())
  {
    case PRESSED:
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.write("Ingresando...");
    switch (keyPress)
    {
	  case '#':    //Presionando # se desarma la alarma
             checkPassword();
          break;
          case '*':   //Presionado * se arma la alarma
            checkPassword2(); 
          break;                     
          default:
          password.append(keyPress);
          break;
     }
  }
}

//Chequea la contraseña cuando se ingresa el #
void checkPassword()
{
  if (password.evaluate()) 
  {
    if (!AlarmaArmada)
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("ya desactiva");
      delay (3000);
      lcd.clear();
      lcd.setCursor(0,0);
    }
    else
    {
      AlarmaArmada=false;
      AlarmaSalto=false;
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Password");
      lcd.setCursor(0,1);
      lcd.print("correcto");
      for (int i=0; i <= 12; i++)
      {
        delay(100);
        digitalWrite(15, HIGH);
        delay(100);
        digitalWrite(15, LOW);
      }
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("desactivada");
      delay (2000);
      lcd.clear(); 
    }
  }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("Password");
    lcd.setCursor(0,1);
    lcd.print("incorrecto");
    digitalWrite(15, HIGH);
    delay(3000);
    digitalWrite(15, LOW);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Reingrese Pass"); 
  }
  password.reset();
}

//Chequea la contraseña cuando se ingresa el *
void checkPassword2()
{
  if (password.evaluate()) 
  {
    if (AlarmaArmada)
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("Ya armada");
      delay (2000);
      lcd.clear();        
      delay(4000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Vigilando...");
    }
    else
    {
      AlarmaArmada=true;                
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Password"); 
      lcd.setCursor(0,1);
      lcd.print("correcto");
      delay(1000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("activandose");
      delay (2000);
      bool Led=true;
      for (int i=10; i > 0; i--)
      {
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print(i); digitalWrite(15, Led);
        delay(1000);
        Led=!Led;
      } 
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("activada");
      digitalWrite(15, HIGH);
      delay(4000);
      digitalWrite(15, LOW);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Vigilando...");
    }   
  }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("Password"); 
    lcd.setCursor(0,1);
    lcd.print("incorrecto");
    digitalWrite(18, HIGH);
    delay(3000);
    digitalWrite(15, LOW);         
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Reingrese pass");
  }
  password.reset();
}

void Zona1()
{
   if(digitalRead(19) == HIGH)
   {
     digitalWrite(18, HIGH);   
     AlarmaSalto=true;  
     lcd.clear();         
     lcd.setCursor(0,0);
     lcd.print("zona activada");
     delay(50);
   }         
}

Una correccion :*

#include <Password.h>
#include <Keypad.h>
#include <LiquidCrystal.h>

Password password = Password ("1234"); //Esta es la contraseña de armado y desarmado

LiquidCrystal lcd(14, 13, 12, 11, 10, 9);

const byte ROWS = 4;
const byte COLS = 3; 

char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};

byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {8, 7, 6};

// Creamos el KeyPad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

bool AlarmaArmada=false;
bool AlarmaSalto=false;

void setup()
{
  pinMode(19,INPUT);
  pinMode(18,OUTPUT);
  pinMode(15, OUTPUT); //Buzzer
  digitalWrite(19, LOW);
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print("Iniciando");
  lcd.setCursor(0,1);
  lcd.print("alarma");
  delay(500);
  lcd.setCursor(6,1);
  lcd.print(".");
  delay(500);
  lcd.setCursor(7,1);
  lcd.print(".");
  delay(500);
  lcd.setCursor(8,1);
  lcd.print(".");
  delay(500);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Chequeando");
  lcd.setCursor(0,1);
  lcd.print("alarma");         
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Alarma chequeda"); 
  lcd.setCursor(0,1);
  lcd.print("con exito"); 
  delay(2000);
  lcd.clear();
  lcd.setCursor(3,0);
  lcd.print("BIENVENIDO"); 
  delay(2000);
  lcd.clear();          
  keypad.addEventListener(keypadEvent); 
}

void loop()
{
  lcd.setCursor(0, 1);
  keypad.getKey();
  if (AlarmaArmada && !AlarmaSalto) {Zona1();}
  if (AlarmaSalto)
  {
      // Codigo para alarma saltada
  }
}

//check the keypad events
void keypadEvent(KeypadEvent keyPress)
{
  switch (keypad.getState())
  {
    case PRESSED:
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.write("Ingresando...");
    switch (keyPress)
    {
	  case '#':    //Presionando # se desarma la alarma
             checkPassword();
          break;
          case '*':   //Presionado * se arma la alarma
            checkPassword2(); 
          break;                     
          default:
          password.append(keyPress);
          break;
     }
  }
}

//Chequea la contraseña cuando se ingresa el #
void checkPassword()
{
  if (password.evaluate()) 
  {
    if (!AlarmaArmada)
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("ya desactiva");
      delay (3000);
      lcd.clear();
      lcd.setCursor(0,0);
    }
    else
    {
      AlarmaArmada=false;
      AlarmaSalto=false;
     digitalWrite(18, LOW);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Password");
      lcd.setCursor(0,1);
      lcd.print("correcto");
      for (int i=0; i <= 12; i++)
      {
        delay(100);
        digitalWrite(15, HIGH);
        delay(100);
        digitalWrite(15, LOW);
      }
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("desactivada");
      delay (2000);
      lcd.clear(); 
    }
  }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("Password");
    lcd.setCursor(0,1);
    lcd.print("incorrecto");
    digitalWrite(15, HIGH);
    delay(3000);
    digitalWrite(15, LOW);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Reingrese Pass"); 
  }
  password.reset();
}

//Chequea la contraseña cuando se ingresa el *
void checkPassword2()
{
  if (password.evaluate()) 
  {
    if (AlarmaArmada)
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("Ya armada");
      delay (2000);
      lcd.clear();        
      delay(4000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Vigilando...");
    }
    else
    {
      AlarmaArmada=true;                
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Password"); 
      lcd.setCursor(0,1);
      lcd.print("correcto");
      delay(1000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("activandose");
      delay (2000);
      bool Led=true;
      for (int i=10; i > 0; i--)
      {
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print(i); digitalWrite(15, Led);
        delay(1000);
        Led=!Led;
      } 
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("activada");
      digitalWrite(15, HIGH);
      delay(4000);
      digitalWrite(15, LOW);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Vigilando...");
    }   
  }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("Password"); 
    lcd.setCursor(0,1);
    lcd.print("incorrecto");
    digitalWrite(18, HIGH);
    delay(3000);
    digitalWrite(15, LOW);         
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Reingrese pass");
  }
  password.reset();
}

void Zona1()
{
   if(digitalRead(19) == HIGH)
   {
     digitalWrite(18, HIGH);   
     AlarmaSalto=true;  
     lcd.clear();         
     lcd.setCursor(0,0);
     lcd.print("zona activada");
     delay(50);
   }         
}

Muchas gracias comunidad.... Marcial anda perfecto el codigo, con este codigo y investigando voy a tratar de hacer algo con menu para programar horarios, contraseñas, desactivar zonas, pero todo eso lo voy a hacer en un tiempo cuando tenga el Arduino mega, ya que ahora dispongo solo del Arduino Uno... Muchisimassssss Gracias :smiley: :smiley: :smiley:

Se presento un problema que no habia visto, resulta que esta zona es la que tiene un tiempo de desarme para poder entrar en la casa y desactivar la alarma, pero con este codigo ay que esperar que termine toda la secuencia ( active la sirena exterior) para poder desarmarla necesito que cuando dice Conf. Presencia me deje desactivarla pero no me toma el teclado hasta que termine el bucle...

void Zona1()
{
   if(digitalRead(19) == HIGH)
   { 
         digitalWrite(15, HIGH);   
     AlarmaSalto=true;  
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Zona 1 activada");
     lcd.setCursor(0,1);
     lcd.print("Conf. presencia");      ACAAA TENDRIA QUE DEJARME INGRESAR LA CONTRASEÑA ASI DESACTIVARLA
                                                                  ANTES DE QUE SUENE LA SIRENA
           for (int i=0; i <= 30; i++)
      {
        delay(100);
        digitalWrite(15, LOW);
        delay(100);
        digitalWrite(15, HIGH);
      }
   

     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Zona 1 activada");
     lcd.setCursor(0,1);
     lcd.print("Aviso enviado");
      digitalWrite(18, HIGH);
     delay(50);
   }         
}

Puedes poner el código completo?

Aca el codigo

#include <Password.h>
#include <Keypad.h>
#include <LiquidCrystal.h>



byte CandadoCerrado[8] = {        //Caracter de candado cerrado
    B01110,
    B10001,
    B10001,
    B10001,
    B11111,
    B11111,
    B11111,
    B11111
};

byte CandadoAbierto[8] = {         //Caracter de candado abierto
    B01110,
    B10001,
    B10000,
    B10000,
    B11111,
    B11111,
    B11111,
    B11111
};



Password password = Password ("1234"); //Esta es la contraseña de armado y desarmado

LiquidCrystal lcd(14, 13, 12, 11, 10, 9);

const byte ROWS = 4;
const byte COLS = 3; 

char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};

byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {8, 7, 6};

// Creamos el KeyPad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

bool AlarmaArmada=false;
bool AlarmaSalto=false;

void setup()
{
  time = millis();
     lcd.createChar(1,CandadoCerrado);
   lcd.createChar(2,CandadoAbierto);
  pinMode(19,INPUT);
  pinMode(18,OUTPUT);
  pinMode(15, OUTPUT); //Buzzer
  digitalWrite(19, LOW);
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print("Iniciando");
  lcd.setCursor(0,1);
  lcd.print("alarma");
  delay(500);
  lcd.setCursor(6,1);
  lcd.print(".");
  delay(500);
  lcd.setCursor(7,1);
  lcd.print(".");
  delay(500);
  lcd.setCursor(8,1);
  lcd.print(".");
  delay(500);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Chequeando");
  lcd.setCursor(0,1);
  lcd.print("alarma");         
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Alarma chequeda"); 
  lcd.setCursor(0,1);
  lcd.print("con exito"); 
  delay(2000);
  lcd.clear();
  lcd.setCursor(3,0);
  lcd.print("BIENVENIDO"); 
  delay(2000);
  lcd.clear(); 
lcd.setCursor(15, 0);
  lcd.write(2);  
  keypad.addEventListener(keypadEvent); 
}

void loop()
{
  lcd.setCursor(0, 1);
  keypad.getKey();
  if (AlarmaArmada && !AlarmaSalto) {Zona1();}
  if (AlarmaSalto)
  {
      // Codigo para alarma saltada
  }
}

//check the keypad events
void keypadEvent(KeypadEvent keyPress)
{
  switch (keypad.getState())
  {
    case PRESSED:
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.write("Ingresando...");
    switch (keyPress)
    {
	  case '#':    //Presionando # se desarma la alarma
             checkPassword();
          break;
          case '*':   //Presionado * se arma la alarma
            checkPassword2(); 
          break;                     
          default:
          password.append(keyPress);
          break;
     }
  }
}

//Chequea la contraseña cuando se ingresa el #
void checkPassword()
{
  if (password.evaluate()) 
  {
    if (!AlarmaArmada)
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("ya desactiva");
      delay (3000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.setCursor(15, 0);
  lcd.write(2); 
    }
    else
    {
      AlarmaArmada=false;
      AlarmaSalto=false;
     digitalWrite(18, LOW);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Password");
      lcd.setCursor(0,1);
      lcd.print("correcto");
      for (int i=0; i <= 12; i++)
      {
        delay(80);
        digitalWrite(15, HIGH);
        delay(80);
        digitalWrite(15, LOW);
      }
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("desactivada");
      delay (2000);
      lcd.clear(); 
      lcd.setCursor(15, 0);
  lcd.write(2); 
    }
  }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("Password");
    lcd.setCursor(0,1);
    lcd.print("incorrecto");
 
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Reingrese Pass"); 
    delay(3000);
    lcd.clear();
    lcd.setCursor(15, 0);
  lcd.write(2); 
  }
  password.reset();
}

//Chequea la contraseña cuando se ingresa el *
void checkPassword2()
{
  if (password.evaluate()) 
  {
    if (AlarmaArmada)
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("Ya armada");
      delay (2000);
      lcd.clear();        
      delay(4000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Vigilando...");
      lcd.clear();
      lcd.setCursor(15, 0);
  lcd.write(1); 
    }
    else
    {
      AlarmaArmada=true;                
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Password"); 
      lcd.setCursor(0,1);
      lcd.print("correcto");
      delay(1000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("activandose");
      delay (2000);
      bool Led=true;
      for (int i=10; i > 0; i--)
      {
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print(i); digitalWrite(15, Led);
        delay(1000);
        Led=!Led;
      } 
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("activada");
      digitalWrite(15, HIGH);
      delay(4000);
      digitalWrite(15, LOW);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Vigilando...");
      lcd.clear();
      lcd.setCursor(15, 0);
  lcd.write(1); 
    }   
  }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("Password"); 
    lcd.setCursor(0,1);
    lcd.print("incorrecto");
    digitalWrite(18, HIGH);
    delay(3000);
    digitalWrite(15, LOW);         
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Reingrese pass");
    
  }
  password.reset();
}

void Zona1()
{
   if(digitalRead(19) == HIGH)
   { 
         digitalWrite(15, HIGH);   
     AlarmaSalto=true;  
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Zona 1 activada");
     lcd.setCursor(0,1);
     lcd.print("Conf. presencia");

delay(10000);
   Sirena();

     
   }         
}

void Sirena(){
  
  lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Zona 1 activada");
     lcd.setCursor(0,1);
     lcd.print("Aviso enviado");
      digitalWrite(18, HIGH);
     delay(50);
  
}

prueba esto:

#include <Password.h>
#include <Keypad.h>
#include <LiquidCrystal.h>



byte CandadoCerrado[8] = {        //Caracter de candado cerrado
    B01110,
    B10001,
    B10001,
    B10001,
    B11111,
    B11111,
    B11111,
    B11111
};

byte CandadoAbierto[8] = {         //Caracter de candado abierto
    B01110,
    B10001,
    B10000,
    B10000,
    B11111,
    B11111,
    B11111,
    B11111
};



Password password = Password ("1234"); //Esta es la contraseña de armado y desarmado

LiquidCrystal lcd(14, 13, 12, 11, 10, 9);

const byte ROWS = 4;
const byte COLS = 3; 

char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};

byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {8, 7, 6};

// Creamos el KeyPad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

bool AlarmaArmada=false;
bool AlarmaSalto=false;
bool AvisoEnviado=false;

unsigned long T_espera=10000;  // Tiempo de espera para desarmar la alarma en milis
unsigned long T_Control=0;     // Para controlar el tiempo de espera

void setup()
{
  lcd.createChar(1,CandadoCerrado);
  lcd.createChar(2,CandadoAbierto);
  pinMode(19,INPUT);
  pinMode(18,OUTPUT);
  pinMode(15, OUTPUT); //Buzzer
  digitalWrite(19, LOW);
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print("Iniciando");
  lcd.setCursor(0,1);
  lcd.print("alarma");
  delay(500);
  lcd.setCursor(6,1);
  lcd.print(".");
  delay(500);
  lcd.setCursor(7,1);
  lcd.print(".");
  delay(500);
  lcd.setCursor(8,1);
  lcd.print(".");
  delay(500);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Chequeando");
  lcd.setCursor(0,1);
  lcd.print("alarma");         
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Alarma chequeda"); 
  lcd.setCursor(0,1);
  lcd.print("con exito"); 
  delay(2000);
  lcd.clear();
  lcd.setCursor(3,0);
  lcd.print("BIENVENIDO"); 
  delay(2000);
  lcd.clear(); 
  lcd.setCursor(15, 0);
  lcd.write(2);  
  keypad.addEventListener(keypadEvent); 
}

void loop()
{
  lcd.setCursor(0, 1);
  keypad.getKey();
  if (AlarmaArmada && !AlarmaSalto) {Zona1();}
  if (AlarmaSalto && T_Control>millis() && !AvisoEnviado)
  {
    AvisoEnviado=true;
    Sirena(); 
  }
}

//check the keypad events
void keypadEvent(KeypadEvent keyPress)
{
  switch (keypad.getState())
  {
    case PRESSED:
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.write("Ingresando...");
    switch (keyPress)
    {
      case '#':    //Presionando # se desarma la alarma
        checkPassword();
      break;
      case '*':   //Presionado * se arma la alarma
        checkPassword2(); 
      break;                     
      default:
        password.append(keyPress);
      break;
     }
  }
}

//Chequea la contraseña cuando se ingresa el #
void checkPassword()
{
  if (password.evaluate()) 
  {
    if (!AlarmaArmada)
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("ya desactiva");
      delay (3000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.setCursor(15, 0);
      lcd.write(2); 
    }
    else
    {
      AlarmaArmada=false;
      AlarmaSalto=false;
      AvisoEnviado=false;
      T_Control=0;
      digitalWrite(18, LOW);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Password");
      lcd.setCursor(0,1);
      lcd.print("correcto");
      for (int i=0; i <= 12; i++)
      {
        delay(80);
        digitalWrite(15, HIGH);
        delay(80);
        digitalWrite(15, LOW);
      }
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("desactivada");
      delay (2000);
      lcd.clear(); 
      lcd.setCursor(15, 0);
      lcd.write(2); 
    }
  }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("Password");
    lcd.setCursor(0,1);
    lcd.print("incorrecto");
 
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Reingrese Pass"); 
    delay(3000);
    lcd.clear();
    lcd.setCursor(15, 0);
    lcd.write(2); 
  }
  password.reset();
}

//Chequea la contraseña cuando se ingresa el *
void checkPassword2()
{
  if (password.evaluate()) 
  {
    if (AlarmaArmada)
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("Ya armada");
      delay (2000);
      lcd.clear();        
      delay(4000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Vigilando...");
      lcd.clear();
      lcd.setCursor(15, 0);
      lcd.write(1); 
    }
    else
    {
      AlarmaArmada=true;                
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Password"); 
      lcd.setCursor(0,1);
      lcd.print("correcto");
      delay(1000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("activandose");
      delay (2000);
      bool Led=true;
      for (int i=10; i > 0; i--)
      {
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print(i); digitalWrite(15, Led);
        delay(1000);
        Led=!Led;
      } 
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("activada");
      digitalWrite(15, HIGH);
      delay(4000);
      digitalWrite(15, LOW);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Vigilando...");
      lcd.clear();
      lcd.setCursor(15, 0);
      lcd.write(1); 
    }   
  }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("Password"); 
    lcd.setCursor(0,1);
    lcd.print("incorrecto");
    digitalWrite(18, HIGH);
    delay(3000);
    digitalWrite(15, LOW);         
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Reingrese pass"); 
  }
  password.reset();
}

void Zona1()
{
   if(digitalRead(19) == HIGH)
   { 
     digitalWrite(15, HIGH);   
     AlarmaSalto=true;  
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Zona 1 activada");
     lcd.setCursor(0,1);
     lcd.print("Conf. presencia"); 
     T_Control=millis()+T_espera;   // Tiempo en el que ha de saltar la alarma
   }         
}

void Sirena()
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Zona 1 activada");
  lcd.setCursor(0,1);
  lcd.print("Aviso enviado");
  digitalWrite(18, HIGH);
  delay(50); 
}

Hola Marcial, no funciona el codigo, cuando el pin 19 esta alto directamente salta al void sirena es como si el T_control empezara a hacer el conteo desde que inicia el programa y no cuando se activa el pin, he intentado modificarlo pero sin resultados positivos, voy a ver si logro dar con el problema

Que pin controla la sirena, el 15 o el 18?
para que es cada uno?

pin 19 sensor
pin 18 sirena exterior
pin 15 buzzer en panel de control interior

:blush:

#include <Password.h>
#include <Keypad.h>
#include <LiquidCrystal.h>



byte CandadoCerrado[8] = {        //Caracter de candado cerrado
    B01110,
    B10001,
    B10001,
    B10001,
    B11111,
    B11111,
    B11111,
    B11111
};

byte CandadoAbierto[8] = {         //Caracter de candado abierto
    B01110,
    B10001,
    B10000,
    B10000,
    B11111,
    B11111,
    B11111,
    B11111
};



Password password = Password ("1234"); //Esta es la contraseña de armado y desarmado

LiquidCrystal lcd(14, 13, 12, 11, 10, 9);

const byte ROWS = 4;
const byte COLS = 3; 

char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};

byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {8, 7, 6};

// Creamos el KeyPad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

bool AlarmaArmada=false;
bool AlarmaSalto=false;
bool AvisoEnviado=false;

unsigned long T_espera=10000;  // Tiempo de espera para desarmar la alarma en milis
unsigned long T_Control=0;     // Para controlar el tiempo de espera

void setup()
{
  lcd.createChar(1,CandadoCerrado);
  lcd.createChar(2,CandadoAbierto);
  pinMode(19,INPUT);
  pinMode(18,OUTPUT);
  pinMode(15, OUTPUT); //Buzzer
  digitalWrite(19, LOW);
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print("Iniciando");
  lcd.setCursor(0,1);
  lcd.print("alarma");
  delay(500);
  lcd.setCursor(6,1);
  lcd.print(".");
  delay(500);
  lcd.setCursor(7,1);
  lcd.print(".");
  delay(500);
  lcd.setCursor(8,1);
  lcd.print(".");
  delay(500);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Chequeando");
  lcd.setCursor(0,1);
  lcd.print("alarma");         
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Alarma chequeda"); 
  lcd.setCursor(0,1);
  lcd.print("con exito"); 
  delay(2000);
  lcd.clear();
  lcd.setCursor(3,0);
  lcd.print("BIENVENIDO"); 
  delay(2000);
  lcd.clear(); 
  lcd.setCursor(15, 0);
  lcd.write(2);  
  keypad.addEventListener(keypadEvent); 
}

void loop()
{
  lcd.setCursor(0, 1);
  keypad.getKey();
  if (AlarmaArmada && !AlarmaSalto) {Zona1();}
  if (AlarmaSalto && millis() > T_Control && !AvisoEnviado)
  {
    AvisoEnviado=true;
    Sirena(); 
  }
}

//check the keypad events
void keypadEvent(KeypadEvent keyPress)
{
  switch (keypad.getState())
  {
    case PRESSED:
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.write("Ingresando...");
    switch (keyPress)
    {
      case '#':    //Presionando # se desarma la alarma
        checkPassword();
      break;
      case '*':   //Presionado * se arma la alarma
        checkPassword2(); 
      break;                     
      default:
        password.append(keyPress);
      break;
     }
  }
}

//Chequea la contraseña cuando se ingresa el #
void checkPassword()
{
  if (password.evaluate()) 
  {
    if (!AlarmaArmada)
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("ya desactiva");
      delay (3000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.setCursor(15, 0);
      lcd.write(2); 
    }
    else
    {
      AlarmaArmada=false;
      AlarmaSalto=false;
      AvisoEnviado=false;
      T_Control=0;
      digitalWrite(18, LOW);
      digitalWrite(15, LOW);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Password");
      lcd.setCursor(0,1);
      lcd.print("correcto");
      for (int i=0; i <= 12; i++)
      {
        delay(80);
        digitalWrite(15, HIGH);
        delay(80);
        digitalWrite(15, LOW);
      }
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("desactivada");
      delay (2000);
      lcd.clear(); 
      lcd.setCursor(15, 0);
      lcd.write(2); 
    }
  }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("Password");
    lcd.setCursor(0,1);
    lcd.print("incorrecto");
 
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Reingrese Pass"); 
    delay(3000);
    lcd.clear();
    lcd.setCursor(15, 0);
    lcd.write(2); 
  }
  password.reset();
}

//Chequea la contraseña cuando se ingresa el *
void checkPassword2()
{
  if (password.evaluate()) 
  {
    if (AlarmaArmada)
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("Ya armada");
      delay (2000);
      lcd.clear();        
      delay(4000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Vigilando...");
      lcd.clear();
      lcd.setCursor(15, 0);
      lcd.write(1); 
    }
    else
    {
      AlarmaArmada=true;                
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Password"); 
      lcd.setCursor(0,1);
      lcd.print("correcto");
      delay(1000);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("activandose");
      delay (2000);
      bool Led=true;
      for (int i=10; i > 0; i--)
      {
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print(i); digitalWrite(15, Led);
        delay(1000);
        Led=!Led;
      } 
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Alarma");
      lcd.setCursor(0,1);
      lcd.print("activada");
      digitalWrite(15, HIGH);
      delay(4000);
      digitalWrite(15, LOW);
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Vigilando...");
      lcd.clear();
      lcd.setCursor(15, 0);
      lcd.write(1); 
    }   
  }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("Password"); 
    lcd.setCursor(0,1);
    lcd.print("incorrecto");
    digitalWrite(18, HIGH);
    delay(3000);
    digitalWrite(15, LOW);         
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Reingrese pass"); 
  }
  password.reset();
}

void Zona1()
{
   if(digitalRead(19) == HIGH)
   { 
     digitalWrite(15, HIGH);   
     AlarmaSalto=true;  
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Zona 1 activada");
     lcd.setCursor(0,1);
     lcd.print("Conf. presencia"); 
     T_Control=millis()+T_espera;   // Tiempo en el que ha de saltar la alarma
   }         
}

void Sirena()
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Zona 1 activada");
  lcd.setCursor(0,1);
  lcd.print("Aviso enviado");
  digitalWrite(18, HIGH);
  delay(50); 
}

:stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: FUNCIONA PERFECTOOOO....

Gracias Marcial...

Ahora que veo los dos codigo vi el error, en el codigo anterior pusiste que T_Control sea mayor que millis pero en realidad era al reves millis mayor que T_control...

Muchas gracias...

PD: Otro karma...

:blush:

Amigo, buenas.
Me gustó tu programa, al igual que tú estoy recién aprendiendo a trabajar con arduino y quiero practicar más...podrías compartirme el layout (circuito) de tu alarma...porfa??? (mi correo es samegon74@gmail.com)...desde ante mano, gracias.