Nice thing about ADS1115 ADC is that it does not have alot of complicated registers - only two in fact..
There is a Config register to set prescaler and which channel to read from.
Second register is where the voltage reading is kept.
Here is a piece of code (should somebody be interested in future) that reads from channels 0 and 1 in differential mode:
int read_channels_0_to_1() {
// Step 1: set which channels to read
Wire.beginTransmission(I2Caddress);
Wire.write(0b00000001); // Point to Config Register
Wire.write(0b00000000); // AIN+ve = AIN0 and AIN-ve = AIN1 and 2/3x gain
Wire.write(0b10000011); // sampling rate 128SPS
Wire.endTransmission();
delay(17); // to give ADC time to make next reading. These delays are essential!!
// ====================================
// Step 2: Set the pointer to the conversion register to retreve last reading
Wire.beginTransmission(I2Caddress);
Wire.write(0b00000000); //Point to Conversion register (read only , where we get our results from)
Wire.endTransmission();
delay(17); // to give ADC time to make next reading
// =======================================
// Step 3: Request the 2 converted bytes (MSB plus LSB)
Wire.requestFrom(I2Caddress, 2);
// Read the the first byte (MSB) and shift it 8 places to the left then read
// the second byte (LSB) into the last byte of this integer
voltage_across_shunt = (Wire.read() << 8 | Wire.read());
return voltage_across_shunt;
delay(17); // to give ADC time to make next reading
}