#include <Adafruit_INA219.h>

#define INA219_1_ADDRESS 0x40  // Địa chỉ I2C của INA219 #1
#define INA219_2_ADDRESS 0x41  // Địa chỉ I2C của INA219 #2
#define INA219_3_ADDRESS 0x42  // Địa chỉ I2C của INA219 #3
#define INA219_4_ADDRESS 0x43  // Địa chỉ I2C của INA219 #4

// Khởi tạo các đối tượng INA219
Adafruit_INA219 ina219_1(INA219_1_ADDRESS);
Adafruit_INA219 ina219_2(INA219_2_ADDRESS);
Adafruit_INA219 ina219_3(INA219_3_ADDRESS);
Adafruit_INA219 ina219_4(INA219_4_ADDRESS);

void setup(void){ 
  Serial.begin(9600);
  ina219_1.begin();
  ina219_2.begin();
  ina219_3.begin(); 
  ina219_4.begin();
} 

void ReadPin1(){
  float shuntvoltage1 = 0;
  float busvoltage1 = 0;
  float current_mA1 = 0;
  float loadvoltage1 = 0;
  float power_mW1 = 0;

  shuntvoltage1 = ina219_1.getShuntVoltage_mV();
  busvoltage1 = ina219_1.getBusVoltage_V();
  current_mA1 = ina219_1.getCurrent_mA();
  power_mW1 = ina219_1.getPower_mW();
  loadvoltage1 = busvoltage1 + (shuntvoltage1/ 1000);
  
  Serial.print("The First Bus Voltage:   "); Serial.print(busvoltage1); Serial.println(" V");
  Serial.print("The First Shunt Voltage: "); Serial.print(shuntvoltage1); Serial.println(" mV");
  Serial.print("The First Load Voltage:  "); Serial.print(loadvoltage1); Serial.println(" V");
  Serial.print("The First Current:       "); Serial.print(current_mA1); Serial.println(" mA");
  Serial.print("The FirstPower:          "); Serial.print(power_mW1); Serial.println(" mW");
  Serial.println("");
  delay(2000);
 }

void ReadPin2 (){
  float shuntvoltage2 = 0;
  float busvoltage2 = 0;
  float current_mA2 = 0;
  float loadvoltage2 = 0;
  float power_mW2 = 0;

  shuntvoltage2 = ina219_2.getShuntVoltage_mV();
  busvoltage2 = ina219_2.getBusVoltage_V();
  current_mA2 = ina219_2.getCurrent_mA();
  power_mW2 = ina219_2.getPower_mW();
  loadvoltage2= busvoltage2 + (shuntvoltage2/ 1000);
  
  Serial.print("The Second Bus Voltage:   "); Serial.print(busvoltage2); Serial.println(" V");
  Serial.print("The Second Shunt Voltage: "); Serial.print(shuntvoltage2); Serial.println(" mV");
  Serial.print("The Second Load Voltage:  "); Serial.print(loadvoltage2); Serial.println(" V");
  Serial.print("The Second Current:       "); Serial.print(current_mA2); Serial.println(" mA");
  Serial.print("The Second Power:         "); Serial.print(power_mW2); Serial.println(" mW");
  Serial.println("");
  delay(2000);
}

void ReadPin3 (){
  float shuntvoltage3 = 0;
  float busvoltage3 = 0;
  float current_mA3 = 0;
  float loadvoltage3 = 0;
  float power_mW3 = 0;

  shuntvoltage3 = ina219_3.getShuntVoltage_mV();
  busvoltage3 = ina219_3.getBusVoltage_V();
  current_mA3 = ina219_3.getCurrent_mA();
  power_mW3 = ina219_3.getPower_mW();
  loadvoltage3= busvoltage3 + (shuntvoltage3/ 1000);
  
  Serial.print("The Third Bus Voltage:   "); Serial.print(busvoltage3); Serial.println(" V");
  Serial.print("The Third Shunt Voltage: "); Serial.print(shuntvoltage3); Serial.println(" mV");
  Serial.print("The Third Pin Voltage:   "); Serial.print(loadvoltage3); Serial.println(" V");
    Serial.print("The Third Current:       "); Serial.print(current_mA3); Serial.println(" mA");
  Serial.print("The Third Pin Power:     "); Serial.print(power_mW3); Serial.println(" mW");
  Serial.println("");
}
void ReadPin4 (){
  float shuntvoltage4 = 0;
  float busvoltage4 = 0;
  float current_mA4 = 0;
  float loadvoltage4 = 0;
  float power_mW4 = 0;

  shuntvoltage4 = ina219_4.getShuntVoltage_mV();
  busvoltage4 = ina219_4.getBusVoltage_V();
  current_mA4 = ina219_4.getCurrent_mA();
  power_mW4 = ina219_4.getPower_mW();
  loadvoltage4 = busvoltage4 + (shuntvoltage4/ 1000);
  
  Serial.print("The Fouth Bus Voltage:   "); Serial.print(busvoltage4); Serial.println(" V");
  Serial.print("The Fouth Pin Voltage:   "); Serial.print(loadvoltage4); Serial.println(" V");
  Serial.print("The Fouth Shunt Voltage: "); Serial.print(shuntvoltage4); Serial.println(" mV");
    Serial.print("The Fouth Current:     "); Serial.print(current_mA4); Serial.println(" mA");
  Serial.print("The Fouth Pin Power:     "); Serial.print(power_mW4); Serial.println(" mW");
  Serial.println("");
}
void loop(void) 
{
  ReadPin1();
  delay(10);
  ReadPin2();
  delay(10);
  ReadPin3(); 
  delay(10);
  ReadPin4();
  delay(10);
}
INA219Breakout
chip1:IN+
chip1:IN-
chip1:GND
chip1:VS
chip1:A0
chip1:A1
chip1:SCL
chip1:SDA
gnd1:GND
uno1:A5.2
uno1:A4.2
uno1:AREF
uno1:GND.1
uno1:13
uno1:12
uno1:11
uno1:10
uno1:9
uno1:8
uno1:7
uno1:6
uno1:5
uno1:4
uno1:3
uno1:2
uno1:1
uno1:0
uno1:IOREF
uno1:RESET
uno1:3.3V
uno1:5V
uno1:GND.2
uno1:GND.3
uno1:VIN
uno1:A0
uno1:A1
uno1:A2
uno1:A3
uno1:A4
uno1:A5
r1:1
r1:2
INA219Breakout
chip2:IN+
chip2:IN-
chip2:GND
chip2:VS
chip2:A0
chip2:A1
chip2:SCL
chip2:SDA
r2:1
r2:2
INA219Breakout
chip3:IN+
chip3:IN-
chip3:GND
chip3:VS
chip3:A0
chip3:A1
chip3:SCL
chip3:SDA
INA219Breakout
chip4:IN+
chip4:IN-
chip4:GND
chip4:VS
chip4:A0
chip4:A1
chip4:SCL
chip4:SDA
r3:1
r3:2
r4:1
r4:2
vcc1:VCC
gnd2:GND
vcc2:VCC
gnd3:GND
vcc3:VCC
gnd4:GND
vcc4:VCC
gnd5:GND