#include "IRremote.h" int calibrationTime = 10; byte CellingLed = 9; /* */ byte ledB = 6; // byte pirDoor = 5; // byte pirMirror = 4; // IRrecv irrecv(2); // IR byte dayNight = 7; // , - / decode_results results; byte irSignal = 0; byte buttonstate; long unsigned int moveTime; // long unsigned int pause = 30000; // , boolean movementDetected = true; // true - boolean moveFlag; // void setup () { irrecv.enableIRIn(); Serial.begin(9600); pinMode(CellingLed,OUTPUT); pinMode(ledB,OUTPUT); digitalWrite(dayNight, HIGH); // 7 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(); } // (/, IR /) 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); } } }
Source: https://habr.com/ru/post/396257/
All Articles