Skip to content

Commit 6e2f3c7

Browse files
committed
Remove timeout from read16 as suggested by @Koepel #2
1 parent 2f5b3b0 commit 6e2f3c7

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

src/SparkFun_MAX1704x_Fuel_Gauge_Arduino_Library.cpp

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -806,18 +806,29 @@ uint8_t SFE_MAX1704X::write16(uint16_t data, uint8_t address)
806806

807807
uint16_t SFE_MAX1704X::read16(uint8_t address)
808808
{
809-
uint8_t msb, lsb;
810-
int16_t timeout = 1000;
809+
bool success = false;
810+
uint8_t retries = 3;
811+
uint16_t result = 0;
811812

812-
_i2cPort->beginTransmission(MAX1704x_ADDRESS);
813-
_i2cPort->write(address);
814-
_i2cPort->endTransmission(false);
813+
while ((success == false) && (retries > 0))
814+
{
815+
_i2cPort->beginTransmission(MAX1704x_ADDRESS);
816+
_i2cPort->write(address);
817+
_i2cPort->endTransmission(false); // Don't release the bus
815818

816-
_i2cPort->requestFrom(MAX1704x_ADDRESS, 2);
817-
while ((_i2cPort->available() < 2) && (timeout-- > 0))
818-
delay(1);
819-
msb = _i2cPort->read();
820-
lsb = _i2cPort->read();
819+
if (_i2cPort->requestFrom(MAX1704x_ADDRESS, 2) == 2)
820+
{
821+
uint8_t msb = _i2cPort->read();
822+
uint8_t lsb = _i2cPort->read();
823+
result = ((uint16_t)msb << 8) | lsb;
824+
success = true;
825+
}
826+
else
827+
{
828+
retries--;
829+
delay(50);
830+
}
831+
}
821832

822-
return ((uint16_t)msb << 8) | lsb;
833+
return (result);
823834
}

0 commit comments

Comments
 (0)