11// FILE: INA219.h
22// AUTHOR: Rob Tillaart
3- // VERSION: 0.4.0
3+ // VERSION: 0.4.1
44// DATE: 2021-05-18
55// PURPOSE: Arduino library for INA219 voltage, current and power sensor
66// URL: https://github.com/RobTillaart/INA219
@@ -44,6 +44,7 @@ INA219::INA219(const uint8_t address, TwoWire *wire)
4444 _current_LSB = 0 ;
4545 _maxCurrent = 0 ;
4646 _shunt = 0 ;
47+ _error = 0 ;
4748}
4849
4950
@@ -365,6 +366,18 @@ bool INA219::setMaxCurrentShunt(float maxCurrent, float shunt)
365366}
366367
367368
369+ // //////////////////////////////////////////////////////
370+ //
371+ // ERROR HANDLING
372+ //
373+ int INA219::getLastError ()
374+ {
375+ int e = _error;
376+ _error = 0 ;
377+ return e;
378+ }
379+
380+
368381// //////////////////////////////////////////////////////
369382//
370383// PRIVATE
@@ -374,12 +387,25 @@ uint16_t INA219::_readRegister(uint8_t reg)
374387{
375388 _wire->beginTransmission (_address);
376389 _wire->write (reg);
377- _wire->endTransmission ();
390+ int n = _wire->endTransmission ();
391+ if (n != 0 )
392+ {
393+ _error = -1 ;
394+ return 0 ;
395+ }
378396
379- _wire->requestFrom (_address, (uint8_t )2 );
380- uint16_t value = _wire->read ();
381- value <<= 8 ;
382- value |= _wire->read ();
397+ uint16_t value = 0 ;
398+ if (2 == _wire->requestFrom (_address, (uint8_t )2 ))
399+ {
400+ value = _wire->read ();
401+ value <<= 8 ;
402+ value |= _wire->read ();
403+ }
404+ else
405+ {
406+ _error = -2 ;
407+ return 0 ;
408+ }
383409 return value;
384410}
385411
@@ -390,7 +416,12 @@ uint16_t INA219::_writeRegister(uint8_t reg, uint16_t value)
390416 _wire->write (reg);
391417 _wire->write (value >> 8 );
392418 _wire->write (value & 0xFF );
393- return _wire->endTransmission ();
419+ int n = _wire->endTransmission ();
420+ if (n != 0 )
421+ {
422+ _error = -1 ;
423+ }
424+ return n;
394425}
395426
396427
0 commit comments