How to change I2C Address from Ultrasonic Sensor SU04

I want install 6 Sensor SU04 on my 3dr solo. I need know how to change I2C address from this sensor for work the 6 sensor.

https://s.click.aliexpress.com/e/WqQPcpi

Hello
I can’t find any information about how to program the I2C address in this manual , do you have any others?

I also could not find a way to change the address. I would like a cheap solution to put 3 sensors in my 3dr solo. Front, Left, Right

any luck? I am also struggling on how to get these to work. I have one on the telemetry and two others on an i2c breakout board. is it possible to read the address the sui04 module is requesting?

I could make it work just like maxbotix, so multiple sensors like lightware couldn’t. It seems that the code cannot read the parameters.

Code to change address: In this example changed to 0x68

#include “Wire.h”
#define SensorAddress byte(0x70)
#define NewSensorAddress byte(0x68)
#define RangeCommand byte(0x51)
#define ChangeAddressCommand1 byte(0xAA)
#define ChangeAddressCommand2 byte(0xA5)
void setup() {
Serial.begin(9600); //Open serial connection at 9600 baud
Wire.begin();

changeAddress(SensorAddress,NewSensorAddress,1);
}
void loop(){
takeRangeReading(); //Tell the sensor to perform a ranging cycle
delay(100); //Wait for sensor to finish
word range = requestRange(); //Get the range from the sensor
Serial.print("Range: "); Serial.println(range); //Print to the user
}

//Commands the sensor to take a range reading
void takeRangeReading(){
Wire.beginTransmission(NewSensorAddress); //Start addressing
Wire.write(RangeCommand); //send range command
Wire.endTransmission(); //Stop and do something else now
}
//Returns the last range that the sensor determined in its last ranging cycle in centimeters. Returns 0 if there is no communication.
word requestRange(){
Wire.requestFrom(NewSensorAddress, byte(2));
if(Wire.available() >= 2){ //Sensor responded with the two bytes
byte HighByte = Wire.read(); //Read the high byte back
byte LowByte = Wire.read(); //Read the low byte back
word range = word(HighByte, LowByte); //Make a 16-bit word out of the two bytes for the range
return range;
}
else {
return word(0); //Else nothing was received, return 0
}
}
void changeAddress(byte oldAddress, byte newAddress, boolean SevenBitHuh){
Wire.beginTransmission(oldAddress); //Begin addressing
Wire.write(ChangeAddressCommand1); //Send first change address command
Wire.write(ChangeAddressCommand2); //Send second change address command
if(SevenBitHuh){ newAddress = newAddress << 1; } //The new address must be written to the sensor
Wire.write(newAddress); //Send the new address to change to
Wire.endTransmission();
}

Thank you very much, it helped me a lot. I just had to change:

“Wire.h” to <Wire.h>

After this change, the code worked flawlessly.

From looking at the manual the button on the back changes the orientation. I would assume that means that button changes the i2c address so you don’t have to program it.