#include "IRremote.h"
int calibrationTime = 10;
byte CellingLed = 9;
byte ledB = 6;
byte pirDoor = 5;
byte pirMirror = 4;
IRrecv irrecv(2);
byte dayNight = 7;
decode_results results;
byte irSignal = 0;
byte buttonstate;
long unsigned int moveTime;
long unsigned int pause = 30000;
boolean movementDetected = true;
boolean moveFlag;
void setup ()
{
irrecv.enableIRIn();
Serial.begin(9600);
pinMode(CellingLed,OUTPUT);
pinMode(ledB,OUTPUT);
digitalWrite(dayNight, HIGH);
pinMode(pirDoor,INPUT);
pinMode(pirMirror,INPUT);
digitalWrite(pirDoor, LOW);
digitalWrite(pirMirror, LOW);
Serial.print("Calibrating");
for(int i = 0; i < calibrationTime; i++)
{
Serial.print(".");
delay(1000);
}
Serial.println(" done");
Serial.println("SENSOR ACTIVE");
delay(50);
}
void loop()
{
if ( irrecv.decode( &results)){
delay(300);
if (results.value == 0xFF3AC5) {irSignal = 0;}
if (results.value == 0xFFBA45) {irSignal = 1;}
irrecv.resume();
}
byte DayNightSwitch = !digitalRead(dayNight);
byte a;
byte b;
if (DayNightSwitch == LOW) {a=1;} else {a=0;}
if (irSignal == 1) {b=1;} else {b=0;}
if (a==b) {buttonstate = 1;}
else {buttonstate = 0;}
byte pirstate;
if (digitalRead(pirDoor) == HIGH || digitalRead(pirMirror) == HIGH)
{ pirstate = HIGH;}
if (digitalRead(pirDoor) == LOW && digitalRead(pirMirror) == LOW)
{ pirstate = LOW;}
if(pirstate == HIGH && buttonstate == 0 )
{
if(movementDetected)
{
movementDetected = false;
Serial.println("Motion detected");
delay(50);
}
moveFlag = true;
analogWrite(ledB,240);
digitalWrite(CellingLed, LOW);
}
if(pirstate == LOW & buttonstate == 0 )
{
if(moveFlag)
{
moveTime = millis();
moveFlag = false;
}
if(!movementDetected && millis() - moveTime > pause )
{
movementDetected = true;
Serial.println("Motion finished");
delay(50);
analogWrite(ledB,255);
}
}
if (pirstate == HIGH && buttonstate == 1 )
{
if(movementDetected)
{
movementDetected = false;
Serial.println("Motion detected");
delay(50);
}
moveFlag = true;
digitalWrite(CellingLed,HIGH);
analogWrite(ledB,255);
}
if (pirstate == LOW && buttonstate == 1 )
{
if(moveFlag)
{
moveTime = millis();
moveFlag = false;
}
if(!movementDetected && millis() - moveTime > pause )
{
movementDetected = true;
Serial.println("Motion finished");
delay(50);
digitalWrite(CellingLed,LOW);
}
}
}