Skip to content

Commit bff9430

Browse files
author
devmirek
authored
fix: add timeout handling to potentially infinite loop (#78)
1 parent 6c86d80 commit bff9430

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

ADS1X15.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,12 @@ int16_t ADS1X15::_readADC(uint16_t readmode)
451451
_requestADC(readmode);
452452
if (_mode == ADS1X15_MODE_SINGLE)
453453
{
454-
while ( isBusy() ) yield(); // wait for conversion; yield for ESP.
454+
unsigned long start = millis();
455+
while (isBusy()) {
456+
yield(); // wait for conversion; yield for ESP.
457+
if ((start + ADS1X15_READ_TIMEOUT_MS) < millis())
458+
return ADS1X15_ERROR_TIMEOUT;
459+
}
455460
}
456461
else
457462
{
@@ -737,4 +742,3 @@ void ADS1115::requestADC_Differential_2_3()
737742

738743

739744
// -- END OF FILE --
740-

ADS1X15.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,13 @@
2424
#define ADS1115_ADDRESS 0x48
2525
#endif
2626

27+
#ifndef ADS1X15_READ_TIMEOUT_MS
28+
#define ADS1X15_READ_TIMEOUT_MS 200 //Longest acquisition time is 125ms (8SPS)
29+
#endif
2730

2831
#define ADS1X15_OK 0
2932
#define ADS1X15_INVALID_VOLTAGE -100
33+
#define ADS1X15_ERROR_TIMEOUT -101
3034
#define ADS1X15_INVALID_GAIN 0xFF
3135
#define ADS1X15_INVALID_MODE 0xFE
3236

@@ -268,4 +272,3 @@ class ADS1115 : public ADS1X15
268272

269273

270274
// -- END OF FILE --
271-

0 commit comments

Comments
 (0)