Using Ultrasonic Range Finder SRF02 as Motion Detector

Hi Tesla!! Thanks again for your answer. You are right, but sometimes is difficult for me to explain everything... I'm using all this sensors to get a better result of motion inside a room... So each sensor will be oriented for a different direction.
If one of this sensors detects motion (PIR) or distance variation (US), it should report me 0. When it detects it should report the value 0 for some seconds.
In other hand when it not detect any movement it returns 1.

The better way is present my entire code (still have a lot of mistakes :blush: )

#include <Wire.h>

const int PIR1 = 2;
const int PIR2 = 3;
const int LED1 = 4;
const int LED2 = 5;


//Definition of variables to use
int val1 = 0;
int val2 = 0;
int count1 = 0;
int count2 = 0;

int calibrationTime = 20;  //calibration time of PIR sensors

void setup()

{
  Wire.begin();          // start the I2C bus

  Serial.begin(9600);    // open the serial port:
  
  //Definition of input/output values
  pinMode(PIR1,INPUT);
  pinMode(PIR2,INPUT);
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);

  
  //give the sensor some time to calibrate
  Serial.println("Sensor Calibration in Progress");
  Serial.println("------------------------------");
  
  for(int i = 0; i < calibrationTime; i++){
    Serial.print(".");
    digitalWrite(LED1, HIGH);
    delay(250);
    digitalWrite(LED2, HIGH);
    delay(250);
    digitalWrite(LED1, LOW);
    delay(250);
    digitalWrite(LED2, LOW);
    delay(250);
  }

  Serial.println("");
  Serial.println("Sensor Calibration Completed");
  Serial.println("Sensor Reading Active");
  delay(100);
}

int reading = 0;
int oldreading = 0;

void loop()

{
passiveIR();
ultrasonic();
presence();

}

void passiveIR()
{
  int val1 = digitalRead(PIR1);
  int val2 = digitalRead(PIR2);

}

void ultrasonic()

{

  // step 1: instruct sensor to read centimeters
  Wire.beginTransmission(112); // transmit to device #112 (0x70)
                               // the address specified in the datasheet is 224 (0xE0)
                               // but i2c adressing uses the high 7 bits so it's 112
  Wire.write(byte(0x00));      // sets register pointer to the command register (0x00)  
  Wire.write(byte(0x51));      // command sensor to measure in "inches" (0x50) 
                               // use 0x51 for centimeters
                               // use 0x52 for ping microseconds
  Wire.endTransmission();      // stop transmitting

  // step 2: wait for readings to happen
  delay(70);                   // datasheet suggests at least 65 milliseconds

  // step 3: instruct sensor to return a particular echo reading
  Wire.beginTransmission(112); // transmit to device #112
  Wire.write(byte(0x02));      // sets register pointer to echo #1 register (0x02)
  Wire.endTransmission();      // stop transmitting

  // step 4: request reading from sensor
  Wire.requestFrom(112, 2);    // request 2 bytes from slave device #112

  // step 5: receive reading from sensor
  if(2 <= Wire.available())    // if two bytes were received
  {
    oldreading = reading;
    //Serial.print(oldreading);    
   // Serial.print(',');
    reading = Wire.read();    // receive high byte (overwrites previous reading)
    reading = reading << 8;   // shift high byte to be high 8 bits
    reading |= Wire.read();   // receive low byte as lower 8 bits
    //Serial.println(reading);    // print the reading
   // Serial.print(',');

  }

  delay(250);                 // wait before next reading:

}

void presence()
{
  int f = reading - oldreading;
  
  if(val1 == HIGH || val2 == HIGH || f >15){
    Serial.print('0');
    Serial.print(',');
  }
    
  if(val1 == LOW || val2 == LOW || f < 15){
    Serial.print('1');
    Serial.print(',');
   
   for(int i=0; i<50; i++){
   }  
  }
}

I hope you can reach my goal, if can try to explain better.

Obrigado :wink: