diff --git a/ina219/ina219.go b/ina219/ina219.go index 5e2b2c8..ad04ed3 100644 --- a/ina219/ina219.go +++ b/ina219/ina219.go @@ -99,44 +99,48 @@ const ( ) // Sense reads the power values from the ina219 sensor. -func (d *Dev) Sense() (PowerMonitor, error) { +func (d *Dev) Sense() (pm PowerMonitor, err error) { d.mu.Lock() defer d.mu.Unlock() - var pm PowerMonitor - shunt, err := d.m.ReadUint16(shuntVoltageRegister) if err != nil { - return PowerMonitor{}, errReadShunt + err = errReadShunt + return } // Least significant bit is 10µV. pm.Shunt = physic.ElectricPotential(int16(shunt)) * 10 * physic.MicroVolt bus, err := d.m.ReadUint16(busVoltageRegister) if err != nil { - return PowerMonitor{}, errReadBus - } - // Check if bit zero is set, if set the ADC has overflowed. - if bus&1 > 0 { - return PowerMonitor{}, errRegisterOverflow + err = errReadBus + return } // Least significant bit is 4mV. pm.Voltage = physic.ElectricPotential(bus>>3) * 4 * physic.MilliVolt + // Check if bit zero is set, if set the ADC has overflowed. + if bus&1 > 0 { + err = errRegisterOverflow + return + } + current, err := d.m.ReadUint16(currentRegister) if err != nil { - return PowerMonitor{}, errReadCurrent + err = errReadCurrent + return } pm.Current = physic.ElectricCurrent(int16(current)) * d.currentLSB power, err := d.m.ReadUint16(powerRegister) if err != nil { - return PowerMonitor{}, errReadPower + err = errReadPower + return } pm.Power = physic.Power(power) * d.powerLSB - return pm, nil + return } // Since physic electrical is in nano units we need to scale taking care to not