@@ -152,19 +152,19 @@ bool DallasTemperature::validAddress(const uint8_t* deviceAddress) {
152152// finds an address at a given index on the bus
153153// returns true if the device was found
154154bool DallasTemperature::getAddress (uint8_t * deviceAddress, uint8_t index) {
155+ if (index < devices) {
156+ uint8_t depth = 0 ;
155157
156- uint8_t depth = 0 ;
158+ _wire-> reset_search () ;
157159
158- _wire->reset_search ();
159-
160- while (depth <= index && _wire->search (deviceAddress)) {
161- if (depth == index && validAddress (deviceAddress))
162- return true ;
163- depth++;
160+ while (depth <= index && _wire->search (deviceAddress)) {
161+ if (depth == index && validAddress (deviceAddress))
162+ return true ;
163+ depth++;
164+ }
164165 }
165166
166167 return false ;
167-
168168}
169169
170170// attempt to determine if the device at the given address is connected to the bus
@@ -723,22 +723,27 @@ int32_t DallasTemperature::calculateTemperature(const uint8_t* deviceAddress,
723723// the numeric value of DEVICE_DISCONNECTED_RAW is defined in
724724// DallasTemperature.h. It is a large negative number outside the
725725// operating range of the device
726- int32_t DallasTemperature::getTemp (const uint8_t * deviceAddress) {
726+ int32_t DallasTemperature::getTemp (const uint8_t * deviceAddress, byte retryCount = 0 ) {
727727
728728 ScratchPad scratchPad;
729- if (isConnected (deviceAddress, scratchPad))
730- return calculateTemperature (deviceAddress, scratchPad);
731- return DEVICE_DISCONNECTED_RAW;
732-
729+
730+ byte retries = 0 ;
731+
732+ while (retries++ <= retryCount) {
733+ if (isConnected (deviceAddress, scratchPad))
734+ return calculateTemperature (deviceAddress, scratchPad);
735+ }
736+
737+ return DEVICE_DISCONNECTED_RAW;
733738}
734739
735740// returns temperature in degrees C or DEVICE_DISCONNECTED_C if the
736741// device's scratch pad cannot be read successfully.
737742// the numeric value of DEVICE_DISCONNECTED_C is defined in
738743// DallasTemperature.h. It is a large negative number outside the
739744// operating range of the device
740- float DallasTemperature::getTempC (const uint8_t * deviceAddress) {
741- return rawToCelsius (getTemp (deviceAddress));
745+ float DallasTemperature::getTempC (const uint8_t * deviceAddress, byte retryCount = 0 ) {
746+ return rawToCelsius (getTemp (deviceAddress, retryCount ));
742747}
743748
744749// returns temperature in degrees F or DEVICE_DISCONNECTED_F if the
0 commit comments