Problem coding Multi-module INA226 with I2C protocol

I have a problem in connecting 2 INA226 modules with I2C protocol. In the project will have 4 INA226 modules each of which has a different power supply (12V, 5V, 5V USB and 3.3V).
I am attaching the wiring diagram of all 4.
At the moment, however, I tried only a connection of 2 of these modules to see in the meantime if the Arduino code worked (if it works for 2 it also works for 4) .... but it doesn't work :frowning:
I found the i2c addresses with the I2C Scan code and then corrected them (one is the default (0x40) the other 0x45).
Can you help me?
I am attaching both the Arduino INO code and the wiring diagram.

Arduino Code

/*
    INA226 Bi-directional Current/Power Monitor. Simple Example.
    Read more: http://www.jarzebski.pl/arduino/czujniki-i-sensory/cyfrowy-czujnik-pradu-mocy-ina226.html
    GIT: https://github.com/jarzebski/Arduino-INA226
    Web: http://www.jarzebski.pl
    (c) 2014 by Korneliusz Jarzebski
*/

#include <Wire.h>
#include <INA226.h>

INA226 ina_5V;
INA226 ina_3.3V;

void checkConfig()
{

  Serial.print("Max possible current 5V:  ");
  Serial.print(ina_5V.getMaxPossibleCurrent());
  Serial.println(" A");

  Serial.print("Max current 5V:           ");
  Serial.print(ina_5V.getMaxCurrent());
  Serial.println(" A");

  Serial.print("Max shunt voltage 5V:     ");
  Serial.print(ina_5V.getMaxShuntVoltage());
  Serial.println(" V");

  Serial.print("Max power 5V:             ");
  Serial.print(ina_5V.getMaxPower());
  Serial.println(" W");

  Serial.print("Max possible current 3.3V:  ");
  Serial.print(ina_3.3V.getMaxPossibleCurrent());
  Serial.println(" A");

  Serial.print("Max current 3.3V:           ");
  Serial.print(ina_3.3V.getMaxCurrent());
  Serial.println(" A");

  Serial.print("Max shunt voltage 3.3V:     ");
  Serial.print(ina_3.3V.getMaxShuntVoltage());
  Serial.println(" V");

  Serial.print("Max power 3.3V:             ");
  Serial.print(ina_3.3V.getMaxPower());
  Serial.println(" W");

}

void setup() 
{
  Serial.begin(115200);

  Serial.println("Initialize INA226");
  Serial.println("-----------------------------------------------");

  // Default INA226 address is 0x40
  ina_5V.begin(0x40);
  ina_3.3V.begin(0x45);

  // Configure INA226
  ina_5V.configure(INA226_AVERAGES_1, INA226_BUS_CONV_TIME_1100US, INA226_SHUNT_CONV_TIME_1100US, INA226_MODE_SHUNT_BUS_CONT);
  ina_3.3V.configure(INA226_AVERAGES_1, INA226_BUS_CONV_TIME_1100US, INA226_SHUNT_CONV_TIME_1100US, INA226_MODE_SHUNT_BUS_CONT);


  // Calibrate INA226. Rshunt = 0.1 ohm, Max excepted current = 4A
  ina_5V.calibrate(0.100, 4);
  ina_3.3V.calibrate(0.100, 4);


  // Display configuration
  checkConfig();

  Serial.println("-----------------------------------------------");
}

void loop()
{
  Serial.print("Bus voltage 5V:   ");
  Serial.print(ina_5V.readBusVoltage(), 2); // valore a 2 cifre decimali
  Serial.println(" V");

  Serial.print("Bus power 5V:     ");
  Serial.print(ina_5V.readBusPower(), 3); // valore a 3 cifre decimali
  Serial.println(" W");


  Serial.print("Shunt voltage 5V: ");
  Serial.print(ina_5V.readShuntVoltage(), 5);
  Serial.println(" V");

  Serial.print("Shunt current 5V: ");
  Serial.print(ina_5V.readShuntCurrent(), 4); // valore a 3 cifre decimali
  Serial.println(" A");


  Serial.print("Bus voltage 3.3V:   ");
  Serial.print(ina_3.3V.readBusVoltage(), 2); // valore a 2 cifre decimali
  Serial.println(" V");

  Serial.print("Bus power 3.3V:     ");
  Serial.print(ina_3.3V.readBusPower(), 3); // valore a 3 cifre decimali
  Serial.println(" W");


  Serial.print("Shunt voltage 3.3V: ");
  Serial.print(ina_3.3V.readShuntVoltage(), 5);
  Serial.println(" V");

  Serial.print("Shunt current 3.3V: ");
  Serial.print(ina_3.3V.readShuntCurrent(), 4); // valore a 3 cifre decimali
  Serial.println(" A");



  Serial.println("");
  delay(1000);
}

Schematic

MULTIPLE INA226.JPG

This is the library that i used

Please help me
Thanks in advance!

but it doesn't work

It's rather seldom to see such a comprehensive description of what went wrong. So my help is about as useful: fix it, it's either the hardware or the software.

No, maybe I wasn't clear ... the code doesn't work. It's not really loaded on arduino. If you want me to post the trick of all the errors that come out ok, but I thought that maybe an expert in the code looking at it can tell me things and where I was wrong to compile. However I will list below the errors I get when I try to load the sketch

MODULO_INA226__PROVA_MULTIPLI:13: error: expected initializer before numeric constant

 INA226 ina_3.3V;

             ^

C:\Users\Paolo\Desktop\Progetto Alimentatore\MODULO_INA226__PROVA_MULTIPLI\MODULO_INA226__PROVA_MULTIPLI.ino: In function 'void checkConfig()':

MODULO_INA226__PROVA_MULTIPLI:35: error: 'ina_3' was not declared in this scope

   Serial.print(ina_3.3V.getMaxPossibleCurrent());

                ^

MODULO_INA226__PROVA_MULTIPLI:39: error: expected ')' before numeric constant

   Serial.print(ina_3.3V.getMaxCurrent());

                     ^

MODULO_INA226__PROVA_MULTIPLI:43: error: expected ')' before numeric constant

   Serial.print(ina_3.3V.getMaxShuntVoltage());

                     ^

MODULO_INA226__PROVA_MULTIPLI:47: error: expected ')' before numeric constant

   Serial.print(ina_3.3V.getMaxPower());

                     ^

C:\Users\Paolo\Desktop\Progetto Alimentatore\MODULO_INA226__PROVA_MULTIPLI\MODULO_INA226__PROVA_MULTIPLI.ino: In function 'void setup()':

MODULO_INA226__PROVA_MULTIPLI:61: error: 'ina_3' was not declared in this scope

   ina_3.3V.begin(0x45);

   ^

MODULO_INA226__PROVA_MULTIPLI:65: error: expected ';' before numeric constant

   ina_3.3V.configure(INA226_AVERAGES_1, INA226_BUS_CONV_TIME_1100US, INA226_SHUNT_CONV_TIME_1100US, INA226_MODE_SHUNT_BUS_CONT);

        ^

MODULO_INA226__PROVA_MULTIPLI:70: error: expected ';' before numeric constant

   ina_3.3V.calibrate(0.1, 4);

        ^

C:\Users\Paolo\Desktop\Progetto Alimentatore\MODULO_INA226__PROVA_MULTIPLI\MODULO_INA226__PROVA_MULTIPLI.ino: In function 'void loop()':

MODULO_INA226__PROVA_MULTIPLI:100: error: 'ina_3' was not declared in this scope

   Serial.print(ina_3.3V.readBusVoltage(), 2); // valore a 2 cifre decimali

                ^

MODULO_INA226__PROVA_MULTIPLI:104: error: expected ')' before numeric constant

   Serial.print(ina_3.3V.readBusPower(), 3); // valore a 3 cifre decimali

                     ^

MODULO_INA226__PROVA_MULTIPLI:109: error: expected ')' before numeric constant

   Serial.print(ina_3.3V.readShuntVoltage(), 5);

                     ^

MODULO_INA226__PROVA_MULTIPLI:113: error: expected ')' before numeric constant

   Serial.print(ina_3.3V.readShuntCurrent(), 4); // valore a 3 cifre decimali

                     ^

Uso la libreria Wire alla versione 1.0 nella cartella: C:\Users\Paolo\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.20\libraries\Wire 
Uso la libreria Arduino-INA226-master nella cartella: C:\Users\Paolo\Documents\Arduino\libraries\Arduino-INA226-master (legacy)
exit status 1
expected initializer before numeric constant

Decimal points aren't allowed in variable names:

INA226 ina_3.3V;

gfvalvo:
Decimal points aren't allowed in variable names:

INA226 ina_3.3V;

@gfvalvo You are my savior !!! :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile:

That was the mistake. I called the variable ina_3V3, replaced everywhere and works perfectly !! Thanks a lot!

Now the code is this

/*
    INA226 Bi-directional Current/Power Monitor. Simple Example.
    Read more: http://www.jarzebski.pl/arduino/czujniki-i-sensory/cyfrowy-czujnik-pradu-mocy-ina226.html
    GIT: https://github.com/jarzebski/Arduino-INA226
    Web: http://www.jarzebski.pl
    (c) 2014 by Korneliusz Jarzebski
*/
 
#include <Wire.h>
#include <INA226.h>
 
INA226 ina_5V;
INA226 ina_3V3;
 
void checkConfig()
{
 
  Serial.print("Max possible current 5V:  ");
  Serial.print(ina_5V.getMaxPossibleCurrent());
  Serial.println(" A");
 
  Serial.print("Max current 5V:           ");
  Serial.print(ina_5V.getMaxCurrent());
  Serial.println(" A");
 
  Serial.print("Max shunt voltage 5V:     ");
  Serial.print(ina_5V.getMaxShuntVoltage());
  Serial.println(" V");
 
  Serial.print("Max power 5V:             ");
  Serial.print(ina_5V.getMaxPower());
  Serial.println(" W");
 
  Serial.print("Max possible current 3.3V:  ");
  Serial.print(ina_3V3.getMaxPossibleCurrent());
  Serial.println(" A");
 
  Serial.print("Max current 3.3V:           ");
  Serial.print(ina_3V3.getMaxCurrent());
  Serial.println(" A");
 
  Serial.print("Max shunt voltage 3.3V:     ");
  Serial.print(ina_3V3.getMaxShuntVoltage());
  Serial.println(" V");
 
  Serial.print("Max power 3.3V:             ");
  Serial.print(ina_3V3.getMaxPower());
  Serial.println(" W");
 
}
 
void setup()
{
  Serial.begin(115200);
 
  Serial.println("Initialize INA226");
  Serial.println("-----------------------------------------------");
 
  // Default INA226 address is 0x40
  ina_5V.begin(0x40);
  ina_3V3.begin(0x45);
 
  // Configure INA226
  ina_5V.configure(INA226_AVERAGES_1, INA226_BUS_CONV_TIME_1100US, INA226_SHUNT_CONV_TIME_1100US, INA226_MODE_SHUNT_BUS_CONT);
  ina_3V3.configure(INA226_AVERAGES_1, INA226_BUS_CONV_TIME_1100US, INA226_SHUNT_CONV_TIME_1100US, INA226_MODE_SHUNT_BUS_CONT);
 
 
  // Calibrate INA226. Rshunt = 0.1 ohm, Max excepted current = 4A
  ina_5V.calibrate(0.1, 4);
  ina_3V3.calibrate(0.1, 4);
 
 
  // Display configuration
  checkConfig();
 
  Serial.println("-----------------------------------------------");
}
 
void loop()
{
  Serial.print("Bus voltage 5V:   ");
  Serial.print(ina_5V.readBusVoltage(), 2); // valore a 2 cifre decimali
  Serial.println(" V");
 
  Serial.print("Bus power 5V:     ");
  Serial.print(ina_5V.readBusPower(), 3); // valore a 3 cifre decimali
  Serial.println(" W");
 
 
  Serial.print("Shunt voltage 5V: ");
  Serial.print(ina_5V.readShuntVoltage(), 5);
  Serial.println(" V");
 
  Serial.print("Shunt current 5V: ");
  Serial.print(ina_5V.readShuntCurrent(), 4); // valore a 3 cifre decimali
  Serial.println(" A");
 
  Serial.println("");
 
  Serial.print("Bus voltage 3.3V:   ");
  Serial.print(ina_3V3.readBusVoltage(), 2); // valore a 2 cifre decimali
  Serial.println(" V");
 
  Serial.print("Bus power 3.3V:     ");
  Serial.print(ina_3V3.readBusPower(), 3); // valore a 3 cifre decimali
  Serial.println(" W");
 
 
  Serial.print("Shunt voltage 3.3V: ");
  Serial.print(ina_3V3.readShuntVoltage(), 5);
  Serial.println(" V");
 
  Serial.print("Shunt current 3.3V: ");
  Serial.print(ina_3V3.readShuntCurrent(), 4); // valore a 3 cifre decimali
  Serial.println(" A");
 
 
 
  Serial.println("");
  Serial.println("");
  delay(3000);
}

You still feel one thing ... if I wanted to call the reading now
ina_5V.readBusVoltage () for example as Voltage_5V
and the current reading ina_5V.readShuntCurrent () for example as Current_5V

How could I do?