@@ -158,7 +158,7 @@ boolean MAX30105::begin(TwoWire &wirePort, uint32_t i2cSpeed, uint8_t i2caddr) {
158
158
159
159
// Populate revision ID
160
160
readRevisionID ();
161
-
161
+
162
162
return true ;
163
163
}
164
164
@@ -364,6 +364,10 @@ uint8_t MAX30105::getReadPointer(void) {
364
364
// Die Temperature
365
365
// Returns temp in C
366
366
float 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
+
367
371
// Step 1: Config die temperature register to take 1 temperature sample
368
372
writeRegister8 (_i2caddr, MAX30105_DIETEMPCONFIG, 0x01 );
369
373
@@ -372,16 +376,20 @@ float MAX30105::readTemperature() {
372
376
unsigned long startTime = millis ();
373
377
while (millis () - startTime < 100 )
374
378
{
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!
377
385
delay (1 ); // Let's not over burden the I2C bus
378
386
}
379
387
// TODO How do we want to fail? With what type of error?
380
388
// ? if(millis() - startTime >= 100) return(-999.0);
381
389
382
390
// Step 2: Read die temperature register (integer)
383
391
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
385
393
386
394
// Step 3: Calculate temperature (datasheet pg. 23)
387
395
return (float )tempInt + ((float )tempFrac * 0.0625 );
0 commit comments