String  command;
// Timer: Auxiliary variables
unsigned long now = millis();
unsigned long lastTrigger = 0;
boolean startTimer = false;
unsigned long IRlastTrigger = 0;
boolean IRstartTimer = false;
unsigned long NoiselastTrigger = 0;
boolean NoisestartTimer = false;
boolean motionsensorflag = false;
boolean irsensor = false;
boolean noisesensor = false;

const int motionSensor = 27;
//const int led1 = 12;
const int motionSensor1 = 34;
const int soundSensor = 32;
#define timeSeconds 5
//#define LED 2
// Checks if motion was detected, sets LED HIGH and starts a timer
void IRAM_ATTR detectsMovement() {
  Serial.println("MOTION DETECTED!!!");
  //digitalWrite(led2, HIGH);
  startTimer = true;
  motionsensorflag= true;
  lastTrigger = millis();
  
  
}
void IRAM_ATTR detectsMovement1() {
  Serial.println("IR DETECTED!!!");
    IRstartTimer = true;
   irsensor = true;
  IRlastTrigger = millis();
  }
void IRAM_ATTR detectsound() {
  Serial.println("Sound DETECTED!!!");
    NoisestartTimer = true;
   noisesensor = true;
  NoiselastTrigger = millis();
 }
void setup() {
  Serial.begin(9600);
  Serial.println(" Testing ");
  //delay(2000);
  command = "";
  
  //delay(2000);
  //pinMode(LED,OUTPUT);
  
   pinMode(motionSensor, INPUT_PULLUP);
   pinMode(motionSensor1, INPUT); //To be activated while using IR sensor
   pinMode(soundSensor, INPUT); //To be activated while using Noise sensor
  // Set motionSensor pin as interrupt, assign interrupt function and set RISING mode
    attachInterrupt(digitalPinToInterrupt(motionSensor), detectsMovement, FALLING); //To be activated while using PR sensor
   attachInterrupt(digitalPinToInterrupt(motionSensor1), detectsMovement1, FALLING); //To be activated while using IR sensor
   attachInterrupt(digitalPinToInterrupt(soundSensor), detectsound, RISING);  //To be activated while using Noise sensor
  // Set LED to LOW
  //pinMode(led2, OUTPUT);
  //digitalWrite(led2, LOW);
 //  pinMode(led1, OUTPUT);
  //digitalWrite(led1, LOW);
  
}



void loop() {
//Serial.println("IR SENSOR VEFORE");
//Serial.println(digitalPinToInterrupt(motionSensor1));
/*if(digitalRead(motionSensor)== HIGH)
{Serial.println("Motion SENSOR testing ..");
  }
  if(digitalRead(motionSensor1)== HIGH)
{Serial.println("IR SENSOR testing ..");
  }*/
if(digitalPinToInterrupt(motionSensor)==27 && motionsensorflag )
{
  Serial.println("Motion SENSOR LINKING..");
      
}
if(digitalPinToInterrupt(motionSensor1)==34 && irsensor )
{
  Serial.println("IR SENSOR LINKING..");
        
}
if(digitalPinToInterrupt(soundSensor)==32 && noisesensor )
{
  Serial.println("Noise SENSOR LINKING..");
        
}
  
  
 // Serial.println(IRAM_ATTR.status());
//  Serial.println(detectsMovement1.status());
    // Current time
  now = millis();
  // Turn off the LED after the number of seconds defined in the timeSeconds variable
  if(startTimer && (now - lastTrigger > (timeSeconds*1000))) {
    Serial.println("Motion stopped...");
 motionsensorflag=false;
 startTimer = false;
 }
  if(IRstartTimer && (now - IRlastTrigger > (timeSeconds*1000))) {
    Serial.println("IR stopped...");
 irsensor=false;
 IRstartTimer = false;
    
 } if(NoisestartTimer && (now - NoiselastTrigger > (timeSeconds*1000))) {
    Serial.println("Motion stopped...");
  noisesensor=false;
  NoisestartTimer = false;
 // detachInterrupt(soundSensor.PIN);
 }
 
 
     /*******************************************************************/
  }