In the Sparkfun PIR Sensor case as we said the sensor detect motion when the PIR_Sensor_Status
is LOW.
Below is an example :
//Made By TrustFm for Hw2Sw.com int Motion_Led_Pin = 13; // choose the pin for the LED int PIR_Sensor_Pin = 7; // choose the input pin (for PIR sensor) boolean Motion_Already_Detected = false;// we start, assuming that no motion is detected int PIR_Sensor_Status = 0; // variable for reading the current PIR_Sensor_Status unsigned long Duration_Of_Motion; String Message; void setup() { pinMode(Motion_Led_Pin, OUTPUT); // declare LED as output pinMode(PIR_Sensor_Pin, INPUT); // declare sensor as input Serial.begin(9600); } void loop(){ PIR_Sensor_Status = digitalRead(PIR_Sensor_Pin); // read PIR Sensor status if (PIR_Sensor_Status == LOW) { // if the PIR Sensor is low (motion) digitalWrite(Motion_Led_Pin, HIGH); // turn LED ON if (Motion_Already_Detected == false) { //If we did not have motion before -> then change the current motion state to true Serial.println("Motion detected! [start]"); Motion_Already_Detected = true; Duration_Of_Motion = millis(); } } else { // if the PIR Sensor status is HIGH (no motion) digitalWrite(Motion_Led_Pin, LOW); // turn LED OFF if (Motion_Already_Detected == true){ //We had motion before so -> change the current motion state to false Duration_Of_Motion = millis() - Duration_Of_Motion; Message = "The motion detected ended! Motion duration : "; Message += Duration_Of_Motion; Message += " ms"; Serial.println(Message); Motion_Already_Detected = false; } } }
The sparkfun's demo can be downloaded from here :PIR_Sensor_Sparkfun
The ebay's and most common's PIR sensors when detect motion set the PIR_Sensor_Status
to HIGH.
So the same example becomes :
//Made By TrustFm for Hw2Sw.com int Motion_Led_Pin = 13; // choose the pin for the LED int PIR_Sensor_Pin = 7; // choose the input pin (for PIR sensor) boolean Motion_Already_Detected = false;// we start, assuming that no motion is detected int PIR_Sensor_Status = 0; // variable for reading the current PIR_Sensor_Status unsigned long Duration_Of_Motion; String Message; void setup() { pinMode(Motion_Led_Pin, OUTPUT); // declare LED as output pinMode(PIR_Sensor_Pin, INPUT); // declare sensor as input Serial.begin(9600); } void loop(){ PIR_Sensor_Status = digitalRead(PIR_Sensor_Pin); // read PIR Sensor status if (PIR_Sensor_Status == HIGH) { // if the PIR Sensor is HIGH digitalWrite(Motion_Led_Pin, HIGH); // turn LED ON if (Motion_Already_Detected == false) { //If we did not have motion before -> then change the current motion state to true Serial.println("Motion detected! [start]"); Motion_Already_Detected = true; Duration_Of_Motion = millis(); } } else { // if the PIR Sensor status is LOW digitalWrite(Motion_Led_Pin, LOW); // turn LED OFF if (Motion_Already_Detected == true){ //We had motion before so -> change the current motion state to false Duration_Of_Motion = millis() - Duration_Of_Motion; Message = "The motion detected ended! Motion duration : "; Message += Duration_Of_Motion; Message += " ms"; Serial.println(Message); Motion_Already_Detected = false; } } }
You can download the code from here : PIR_Sensor
Video demonstration :