@@ -158,7 +158,7 @@ boolean MAX30105::begin(TwoWire &wirePort, uint32_t i2cSpeed, uint8_t i2caddr) {
158158
159159 // Populate revision ID
160160 readRevisionID ();
161-
161+
162162 return true ;
163163}
164164
@@ -364,6 +364,10 @@ uint8_t MAX30105::getReadPointer(void) {
364364// Die Temperature
365365// Returns temp in C
366366float MAX30105::readTemperature () {
367+
368+ // DIE_TEMP_RDY interrupt must be enabled
369+ // See issue 19: https://github.com/sparkfun/SparkFun_MAX3010x_Sensor_Library/issues/19
370+
367371 // Step 1: Config die temperature register to take 1 temperature sample
368372 writeRegister8 (_i2caddr, MAX30105_DIETEMPCONFIG, 0x01 );
369373
@@ -372,16 +376,20 @@ float MAX30105::readTemperature() {
372376 unsigned long startTime = millis ();
373377 while (millis () - startTime < 100 )
374378 {
375- uint8_t response = readRegister8 (_i2caddr, MAX30105_DIETEMPCONFIG);
376- if ((response & 0x01 ) == 0 ) break ; // We're done!
379+ // uint8_t response = readRegister8(_i2caddr, MAX30105_DIETEMPCONFIG); //Original way
380+ // if ((response & 0x01) == 0) break; //We're done!
381+
382+ // Check to see if DIE_TEMP_RDY interrupt is set
383+ uint8_t response = readRegister8 (_i2caddr, MAX30105_INTSTAT2);
384+ if ((response & MAX30105_INT_DIE_TEMP_RDY_ENABLE) > 0 ) break ; // We're done!
377385 delay (1 ); // Let's not over burden the I2C bus
378386 }
379387 // TODO How do we want to fail? With what type of error?
380388 // ? if(millis() - startTime >= 100) return(-999.0);
381389
382390 // Step 2: Read die temperature register (integer)
383391 int8_t tempInt = readRegister8 (_i2caddr, MAX30105_DIETEMPINT);
384- uint8_t tempFrac = readRegister8 (_i2caddr, MAX30105_DIETEMPFRAC);
392+ uint8_t tempFrac = readRegister8 (_i2caddr, MAX30105_DIETEMPFRAC); // Causes the clearing of the DIE_TEMP_RDY interrupt
385393
386394 // Step 3: Calculate temperature (datasheet pg. 23)
387395 return (float )tempInt + ((float )tempFrac * 0.0625 );
0 commit comments