Hi, I´m working with the SFR02 Ultrasonic Range Finder (Devantech). And is given me one real measurement and then repeat 16 cm fake measurement four or five times, and then another real measurement. So this fake measurement doesn´t allow me to get a continous real mesurement.
HOW CAN I ABOID THIS 16 CM FAKE MEASUREMENT ?, ANY CLUE, THANKS.
SFR02 Spec.
Range detection 16 cm to 600 cm
I use this code
*/
// include Wire library to read and write I2C commands:
#include <Wire.h>
// the commands needed for the SRF sensors:
#define sensorAddress 0x70
#define readInches 0x50
// use these as alternatives if you want centimeters or microseconds:
#define readCentimeters 0x51
#define readMicroseconds 0x52
// this is the memory register in the sensor that contains the result:
#define resultRegister 0x02
void setup()
{
// start the I2C bus
Wire.begin();
// open the serial port:
Serial.begin(9600);
}
void loop()
{
// send the command to read the result in inches:
sendCommand(sensorAddress, readCentimeters);
// wait at least 70 milliseconds for a result:
delay(70);
// set the register that you want to reas the result from:
setRegister(sensorAddress, resultRegister);
// read the result:
int sensorReading = readData(sensorAddress, 2);
// print it:
Serial.print("distance: ");
Serial.print(sensorReading);
Serial.println(" Centimeters");
// wait before next reading:
delay(70);
}
/*
SendCommand() sends commands in the format that the SRF sensors expect
*/
void sendCommand (int address, int command) {
// start I2C transmission:
Wire.beginTransmission(address);
// send command:
Wire.send(0x00);
Wire.send(command);
// end I2C transmission:
Wire.endTransmission();
}
/*
setRegister() tells the SRF sensor to change the address pointer position
*/
void setRegister(int address, int thisRegister) {
// start I2C transmission:
Wire.beginTransmission(address);
// send address to read from:
Wire.send(thisRegister);
// end I2C transmission:
Wire.endTransmission();
}
/*
readData() returns a result from the SRF sensor
*/
int readData(int address, int numBytes) {
int result = 0; // the result is two bytes long
// send I2C request for data:
Wire.requestFrom(address, numBytes);
// wait for two bytes to return:
while (Wire.available() < 2 ) {
// wait for result
}
// read the two bytes, and combine them into one int:
result = Wire.receive() * 256;
result = result + Wire.receive();
// return the result:
return result;
}