Alarma con acceso remoto... problema con Reed Switch

Buenas, Saludos desde Venezuela para toda la comunidad Arduino.

Hoy me trae por aca, un problemita que me gustaria me puedan ayudar a solucionar, estoy realizando una alarma para el hogar con acceso remoto, es mi proyecto de la universidad, estoy trabajando con un Arduino UNO, un Ethernet Shield, un sensor Pir, un Reed Switch, un Buzzer y un par de led. ya casi lo tengo listo… solo que al momento de activar y desactivar la alarma no encuentro la forma de que el Reed Switch detenga su funcionamiento para que el usuario pueda ingresar a la vivienda sin que se active la sirena… es decir siempre esta activo… y el reed switch esta instalado en la puerta principal… les voy a dejar el código…

De ante manos Gracias por su atencion…

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,50); //Asingamos la IP al Arduino
IPAddress gateway(192,168,0, 1);
IPAddress subnet(255, 255, 255, 0);
EthernetServer server(80);

Twitter twitter("2190487330-BeyZh9esv5PDKgFMcplrJ4P1rCHmIAPatx79iBK"); 

// Variables
char msg[140]; // Mensaje para Twitter
byte sensorpir = 0; // Control on / off del Pir
//byte reedSwitch = 1;
int pirPin = 2;    //PIR sensor's output
int ledPin = 7; // led que enciende con el pir
int BUZZER = 9; // SIRENA
int lampara=6; // Luz de la sala
int i;
int ct = 15;    //calibration time Sensor Pir

const int pinSwitch = 5;  //Pin SENSOR ReedSwitch

int estadoSwitch = 1;

String estado="OFF"; // Alarma inicia Apagada
String estado2="OFF";// Luz inicia Apagada
String estado3="OFF"; // buzzer apagado
String estado4="OFF"; // estado de ReedSwitch


void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  server.begin();
 
  //digitalWrite(pinSwitch,HIGH);
  digitalWrite(lampara,LOW);
  pinMode(pirPin, INPUT);
  pinMode(pinSwitch, INPUT);
  pinMode(lampara,OUTPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  

Serial.println("Espere, ahora calibrando el sensor....");
    for(int i = 0; i <= ct; i++){
      Serial.print(((i*100)/ct));
      Serial.print("% ");
      Serial.println("COMPLETADO.....");
      delay(1000);
      }
    Serial.println("Calibracion Completada Satisfactoriamente.");
    Serial.println("** SENSOR ACTIVO **");
    delay(50);
}
 
void loop()
{ 

time_t t = now();//Declaramos la variable time_t t
  // Se configura el Web Server
  EthernetClient client = server.available(); 


 
 
// ACCIONAR SENSOR PIR
 
  if ( (digitalRead(pirPin) == HIGH) && (sensorpir==1) )

  { 
          
           digitalWrite(ledPin, HIGH);
           digitalWrite(BUZZER, HIGH);
           delay(5000); 

// MENSAJE DE TWITTER POR EL SENSOR PIR
           
           sprintf(msg, "ALERTA SENSOR PIR ACTIVADO!!! %d%d.", minute(t) , second(t));
        // Opcional muestra el mensaje en el Puerto Serie
            Serial.println(msg);
            Serial.println("Conectando a Twitter...");

            if (twitter.post(msg)) 
        {
            int status = twitter.wait(&Serial);
            
            if (status == 200) 
          {
            Serial.println("200 OK");
          } 
     
     else 
           {
            Serial.print("Error : code ");
            Serial.println(status);
           }
        } 
            
      else 
          {
            Serial.println("Fallo en la conexión.");
           }
            //  delay(60000); // Delay de un minuto para no hacer spam en Twitter  
    }
 
 // ACCIONAR SENSOR REED SWITCH
  
  estadoSwitch = digitalRead(pinSwitch);  //Lee el Valor del Sensor ReedSwitch
  if ( (digitalRead(pinSwitch) == LOW) && (estadoSwitch==0) )
  { 
          
           digitalWrite(ledPin, HIGH);
           digitalWrite(BUZZER, HIGH);
            delay(5000); 

// MENSAJE A TWITTER            

           sprintf(msg, "ALERTA PUERTA ABIERTA!!! %d%d.", minute(t) , second(t));
        // Opcional muestra el mensaje en el Puerto Serie
            Serial.println(msg);
            Serial.println("Conectando a Twitter...");

            if (twitter.post(msg)) 
        {
            int status = twitter.wait(&Serial);
            
            if (status == 200) 
          {
            Serial.println("200 OK");
          } 
     
     else 
           {
            Serial.print("Error : code ");
            Serial.println(status);
           }
        } 
            
      else 
          {
            Serial.println("Fallo en la conexión.");
           }
            //  delay(60000); // Delay de un minuto para no hacer spam en Twitter  
    } 
 
 // ACTIVAR Y DESACTIVAR ALARMA 

 if (client) {
    boolean currentLineIsBlank = true; 
    String cadena=""; 
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        cadena.concat(c);
        
int posicion=cadena.indexOf("ALARMA=");
 
          if(cadena.substring(posicion)=="ALARMA=ON") // Si la alarma se Enciende desde la APLICACION
          {
            digitalWrite(pirPin,HIGH);
            digitalWrite(pinSwitch,LOW);
            estado="ON";
            estado4="ON";
            sensorpir=1;
            estadoSwitch=0; 
          }
 
 if(cadena.substring(posicion)=="ALARMA=OFF") // Si la alarma se Apaga desde la APLICACION
          {
            digitalWrite(pirPin,LOW);
            digitalWrite(pinSwitch,HIGH);
            digitalWrite(ledPin,LOW);
            digitalWrite(BUZZER,LOW);
            estado="Apagada";
            estado4="Apagada";
            sensorpir=0;
            estadoSwitch=1; 
          }

El reed switch tiene un comportamiento en presencia o no de un iman. Asi que nada puedes hacer, si esta activo o desactivo, o en otras palabras Abierto o cerrado. Asi que usa una variable para determinar que hacer.

El reed switch te dice que la puerta esta abierta o cerrada nada mas. El resto es tu logica Si tu desactivas la alarmas y el reedswich te dice que la puerta esta abierta que importa? Esta abierta pero la alarma desactivada. Ahora si tu igualmente tienen asociado el buzzer y sirena a la apartura de la puerta es porque tu código esta mal o le falta algo.

Alama en lineas generales. debe estar en ON u OFF o TRUE/FALSE Si ALARMA esta ON o TRUE entonces la apertura de Puerta o la activación del PIR deben hacer sonar la sirena y/o buzzer. De lo contrario no.

Buen día, hermano!

gracias por la aclaratoria... estoy probando modificando el código, tienes razón con todo lo que me dices, de verdad soy un poco nuevo con Arduino es mi primer proyecto.