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 )
#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