/* ///////////////////////////////////// * Mistletoe Code modified by Leslie Birch with huge thanks to PIRsense Code from Arduino Playground * The base code is for the Parallax PIR Sensor, which is similar to the Adafruit PIR Sensor * @author: Kristian Gohlke / krigoo (_) gmail (_) com / http://krx.at * @date: 3. September 2006 * * kr1 (cleft) 2006 * released under a creative commons "Attribution-NonCommercial-ShareAlike 2.0" license * http://creativecommons.org/licenses/by-nc-sa/2.0/de/ * * * The sensor's output pin goes to HIGH if motion is present. * However, even if motion is present it goes to LOW from time to time, * which might give the impression no motion is present. * This program deals with this issue by ignoring LOW-phases shorter than a given time, * assuming continuous motion is present during these phases. * */ ///////////////////////////// //VARS //the time we give the sensor to calibrate (10-60 secs according to the datasheet) int calibrationTime = 30; //the time when the sensor outputs a low impulse long unsigned int lowIn; //the amount of milliseconds the sensor has to be low //before we assume all motion has stopped long unsigned int pause = 2000; boolean lockLow = true; boolean takeLowTime; int pirPin = 0; //the digital pin connected to the PIR sensor's output int ledPin1 = 1; int ledPin2 = 2; int ledPin3 = 3; int ledPin4 = 4; ///////////////////////////// //SETUP void setup(){ //Serial.begin(9600); pinMode(pirPin, INPUT); pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT); pinMode(ledPin4, OUTPUT); digitalWrite(pirPin, LOW); //give the sensor some time to calibrate //Serial.print("calibrating sensor "); for(int i = 0; i < calibrationTime; i++){ // Serial.print("."); delay(1000); } // Serial.println(" done"); // Serial.println("SENSOR ACTIVE"); delay(50); } //////////////////////////// //LOOP void loop(){ if(digitalRead(pirPin) == HIGH){ digitalWrite(ledPin1, HIGH); //the led visualizes the sensors output pin state delay (200); digitalWrite(ledPin3, HIGH); //the led visualizes the sensors output pin state delay (400); digitalWrite(ledPin2, HIGH); //the led visualizes the sensors output pin state delay (200); digitalWrite(ledPin4, HIGH); //the led visualizes the sensors output pin state if(lockLow){ //makes sure we wait for a transition to LOW before any further output is made: lockLow = false; // Serial.println("---"); // Serial.print("motion detected at "); // Serial.print(millis()/1000); // Serial.println(" sec"); delay(50); } takeLowTime = true; } if(digitalRead(pirPin) == LOW){ digitalWrite(ledPin4, LOW); //the led visualizes the sensors output pin state delay (200); digitalWrite(ledPin2, LOW); //the led visualizes the sensors output pin state delay (400); digitalWrite(ledPin3, LOW); //the led visualizes the sensors output pin state delay (200); digitalWrite(ledPin1, LOW); //the led visualizes the sensors output pin state if(takeLowTime){ lowIn = millis(); //save the time of the transition from high to LOW takeLowTime = false; //make sure this is only done at the start of a LOW phase } //if the sensor is low for more than the given pause, //we assume that no more motion is going to happen if(!lockLow && millis() - lowIn > pause){ //makes sure this block of code is only executed again after //a new motion sequence has been detected lockLow = true; //Serial.print("motion ended at "); //output //Serial.print((millis() - pause)/1000); // Serial.println(" sec"); delay(50); } } }
Page last edited December 10, 2014
Text editor powered by tinymce.