// Modified by Sagar saini

#include "INA219-SOLDERED.h"  // Library : https://github.com/SolderedElectronics/Soldered-INA219-Current-Sensor-Arduino-Library
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

INA219 ina;
#define OLED_RESET 1
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET);


//Configure the sensor first
void setup()
{
    Serial.begin(9600);  //Initialize the serial port
    ina.begin(); // Default INA219 address is 0x40
    ina.configure(INA219_RANGE_32V, INA219_GAIN_320MV, INA219_BUS_RES_12BIT, INA219_SHUNT_RES_12BIT_1S); //Configure settings check configuration program
    ina.calibrate(0.1, 2); // Calibrate INA219. Rshunt = 0.1 ohm, Max excepted current = 2A
    Wire.begin();
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    display.clearDisplay();
}

// Read values in loop
void loop()
{
    Serial.print("Bus voltage:   ");
    Serial.print(ina.readBusVoltage(), 5);  //Read bus voltage ,5 means upto 5 decimal places
    Serial.println(" V");

    Serial.print("Bus power:     ");
    Serial.print(ina.readBusPower(), 5);  //Read bus power
    Serial.println(" W");


    Serial.print("Shunt voltage: ");
    Serial.print(ina.readShuntVoltage(), 5);  //Read shunt voltage
    Serial.println(" V");

    Serial.print("Shunt current: ");
    Serial.print(ina.readShuntCurrent(), 5);  //Read shunt current
    Serial.println(" A");
    Serial.println("");
 
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.print("WattMeter:");
  display.display();

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,25);
  display.print("Voltage:");
  display.setCursor(50,25);
  display.print(ina.readBusVoltage(),5);
  display.display();
    
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,35);
  display.print("Current:");
  display.setCursor(50,35);
  display.print(ina.readShuntCurrent(),5);
  display.display();

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,45);
  display.print("Power:");
  display.setCursor(50,45);
  display.print(ina.readBusPower(),5);
  display.display();
    
    delay(1000);
}











