Changing the range of SRF 10 ultrasonic distance sensor

Hallo

I use arduino uno connected to ethernet shield (there is micro sd in ethernet shield board for saving datalog in txt). Then, i connect ethernet shield to SRF 10 Devantech ultrasonic distance sensor. I used this coding

#include <Wire.h>
#include <SPI.h>
#include <SD.h>
String cm = " cm";
const int chipSelect = 4;
void setup() {
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(9600); // start serial communication at 9600bps

Serial.print("Initializing SD card...");

// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
// return;
}
Serial.println("card initialized.");
}

int reading = 0;

void loop() {
String dataString = "";

// step 1: instruct sensor to read echoes
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(65); // 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
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
}
dataString = String(reading);
dataString += cm;
File dataFile = SD.open("datalog.txt", FILE_WRITE);

// if the file is available, write to it:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
// print to the serial port too:
Serial.println(dataString);
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening datalog.txt");
}

delay(1000); // wait a bit since people have to read the output :slight_smile:
}

/*

// The following code changes the address of a Devantech Ultrasonic Range Finder (SRF10 or SRF08)
// usage: changeAddress(0x70, 0xE6);

void changeAddress(byte oldAddress, byte newAddress)
{
Wire.beginTransmission(oldAddress);
Wire.write(byte(0x00));
Wire.write(byte(0xA0));
Wire.endTransmission();

Wire.beginTransmission(oldAddress);
Wire.write(byte(0x00));
Wire.write(byte(0xAA));
Wire.endTransmission();

Wire.beginTransmission(oldAddress);
Wire.write(byte(0x00));
Wire.write(byte(0xA5));
Wire.endTransmission();

Wire.beginTransmission(oldAddress);
Wire.write(byte(0x00));
Wire.write(newAddress);
Wire.endTransmission();
}

*/

This sensor actually can reach up to 6 meters. But, when i used the coding above, maximum range is only 50 cm. Based on srf 10 website, i can change the range with modify in register range. website: http://www.robot-electronics.co.uk/htm/srf10tech.htm. But, i still don't understand, where the place of coding, can i change.

Can someone help me please for modify coding? To get optimal range (up to 6 meters).

Thank you

By default, the ranging lasts for 65mS, but can be changed by writing to the range register at location 2.
...
The maximum range of the SRF10 is set by an internal timer. By default, this is 65mS or the equivalent of 11 metres of range.
...
The range is ((Range Register x 43mm) + 43mm)

Just use that formula to calculate the value for the Range Register, and write it to location 2.

But please, use code tags.