Library for INA219 current sensor

INA219.cpp

Committer:
maximusismax
Date:
2016-10-19
Revision:
0:a576b66395ed

File content as of revision 0:a576b66395ed:

#include "INA219.h"

INA219::INA219(I2C& theI2C, char address)
    :i2c(theI2C), i2cAddress(address)
{
    init();
}

void INA219::init()
{
    //set up config register            //256 averages          //continuous shunt voltage conversion
    short write_byte = CONF_DEFAULT & ~_BV(BRNG);
    
    write(REG_CONF, write_byte);
    //set up calibration (full range ~5A)
    write(REG_CAL, 0x14F7);
}

void INA219::write(INA219REG reg, short value)
{
    shortToChar stc;
    char cmd[3];
    stc.u16 = value;
    
    cmd[0] = reg;
    cmd[1] = stc.u8[1];
    cmd[2] = stc.u8[0];
    
    i2c.write(i2cAddress,cmd,3);
}

short INA219::read(INA219REG reg)
{
    shortToChar stc;
    
    char cmd[2];
    cmd[0] = reg;
    i2c.write(i2cAddress,cmd,1);
    
    i2c.read(i2cAddress, cmd, 2);
    stc.u8[1] = cmd[0];
    stc.u8[0] = cmd[1];
    
    return (stc.u16);
}

float INA219::getCurrent()
{
    short curr = read(REG_CURR);
    return (float)curr / 6554;
}