# Getting 220C for the MAX30205 Temperature Sensor

**URL:** <https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567>\
**Category:** Sensors\
**Created:** [February 19, 2026, 1:52am UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567 "2026-02-19T01:52:21Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![robtillaart](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/robtillaart/32/1098811_2.png) [@robtillaart](https://forum.arduino.cc/u/robtillaart)\
**Post date:** [February 20, 2026, 9:08pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/21 "2026-02-20T21:08:26Z")

</div>

@hamnahasan101

The MSB should be 22 then (for negative numbers it is different)

mmmm (thinking sounds)

Can you run, to see the configuration register.

```cpp
#include <Wire.h>

const uint8_t addr = 0x48; // Adjust if needed

void setup() {
  Serial.begin(115200);
  Wire.begin();
}

void loop() {
  uint8_t msb, lsb;

  Wire.beginTransmission(addr);
  Wire.write(0x01); // configuration register
  Wire.endTransmission(false); // 
  Wire.requestFrom(addr, (uint8_t)1);

  if (Wire.available() == 1) {
    msb = Wire.read();
   Serial.println(msb);
  } else {
    Serial.println("I2C read error");
  }

  delay(1000);
}

```

---

<div class="post-metadata">

**Author:** ![robtillaart](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/robtillaart/32/1098811_2.png) [@robtillaart](https://forum.arduino.cc/u/robtillaart)\
**Post date:** [February 20, 2026, 9:13pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/22 "2026-02-20T21:13:23Z")

</div>

![image](https://europe1.discourse-cdn.com/arduino/original/4X/6/d/6/6d60b083faf6d25d10549de540e9b31e98611922.png)

---

<div class="post-metadata">

**Author:** ![hamnahasan101](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hamnahasan101/32/1109559_2.png) [@hamnahasan101](https://forum.arduino.cc/u/hamnahasan101)\
**Post date:** [February 20, 2026, 9:42pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/23 "2026-02-20T21:42:24Z")

</div>

Tahnk you so much for your help again, I really appreciate it. I get this output:

 ![image](https://europe1.discourse-cdn.com/arduino/original/4X/b/f/2/bf2d4e595f8d590893d66a935bc97477f68cf77c.png)

---

<div class="post-metadata">

**Author:** ![robtillaart](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/robtillaart/32/1098811_2.png) [@robtillaart](https://forum.arduino.cc/u/robtillaart)\
**Post date:** [February 20, 2026, 9:45pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/24 "2026-02-20T21:45:45Z")

</div>

That is the default value for the config register. Most important the ONE SHOT == 0  
meaning it does conversions in continuous mode.

---

<div class="post-metadata">

**Author:** ![hamnahasan101](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hamnahasan101/32/1109559_2.png) [@hamnahasan101](https://forum.arduino.cc/u/hamnahasan101)\
**Post date:** [February 20, 2026, 9:46pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/25 "2026-02-20T21:46:33Z")

</div>

Sorry, you do mind explaining what the means?

---

<div class="post-metadata">

**Author:** ![robtillaart](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/robtillaart/32/1098811_2.png) [@robtillaart](https://forum.arduino.cc/u/robtillaart)\
**Post date:** [February 20, 2026, 9:47pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/26 "2026-02-20T21:47:36Z")

</div>

Can you run this to see the value of the hysteresis register

```cpp
#include <Wire.h>

const uint8_t addr = 0x48; // Adjust if needed

void setup() {
  Serial.begin(115200);
  Wire.begin();
}

void loop() {

  uint8_t msb, lsb;

  Wire.beginTransmission(addr);
  Wire.write(0x02); // Hysteresis register
  Wire.endTransmission(false); // Repeated start
  Wire.requestFrom(addr, (uint8_t)2);

  if (Wire.available() == 2) {
    msb = Wire.read();
    lsb = Wire.read();

    int16_t raw = (int16_t)((msb << 8) | lsb);
    float tempC = raw / 256.0;
  Serial.print("MSB: ");
  Serial.println(msb);
  Serial.print("LSB: ");
  Serial.println(lsb);
    Serial.print("HY Temp C: ");
    Serial.println(tempC);
  } else {
    Serial.println("I2C read error");
  }

  delay(1000);
}

```

And this, for the OS register

```cpp
#include <Wire.h>

const uint8_t addr = 0x48; // Adjust if needed

void setup() {
  Serial.begin(115200);
  Wire.begin();
}

void loop() {

  uint8_t msb, lsb;

  Wire.beginTransmission(addr);
  Wire.write(0x03); // OS register
  Wire.endTransmission(false); // Repeated start
  Wire.requestFrom(addr, (uint8_t)2);

  if (Wire.available() == 2) {
    msb = Wire.read();
    lsb = Wire.read();

    int16_t raw = (int16_t)((msb << 8) | lsb);
    float tempC = raw / 256.0;
  Serial.print("MSB: ");
  Serial.println(msb);
  Serial.print("LSB: ");
  Serial.println(lsb);
    Serial.print("OS Temp C: ");
    Serial.println(tempC);
  } else {
    Serial.println("I2C read error");
  }

  delay(1000);
}
```

---

<div class="post-metadata">

**Author:** ![hamnahasan101](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hamnahasan101/32/1109559_2.png) [@hamnahasan101](https://forum.arduino.cc/u/hamnahasan101)\
**Post date:** [February 20, 2026, 9:49pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/27 "2026-02-20T21:49:54Z")

</div>

Hysteresis Register:

 ![image](https://europe1.discourse-cdn.com/arduino/original/4X/7/f/3/7f3345c4b26007f3f9d5640ec67f98f7ed2cdd75.png)

OS Register:

 ![image](https://europe1.discourse-cdn.com/arduino/original/4X/1/5/2/152bb8f3e69ca4ff7ac059e8dac6dbac0f95b793.png)

---

<div class="post-metadata">

**Author:** ![robtillaart](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/robtillaart/32/1098811_2.png) [@robtillaart](https://forum.arduino.cc/u/robtillaart)\
**Post date:** [February 20, 2026, 10:00pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/28 "2026-02-20T22:00:35Z")

</div>

OK those registers are all in their initial value.  
This means that part of the MAX30205 seems to be correct.

> [@hamnahasan101](#):
>
> Sorry, you do mind explaining what the means?

It is all in the datasheet of the device, if you want to understand the devices you work with, you need to learn to read those - not to understand it all at once, but to get insight of what the device does. (took me a few years to learn to read them and still learning ).

The config register consists of 8 bits which are used to configure the behavior of the device. If you write a 1 to the SHUTDOWN bit (and keeping the others the same, the device will go into shutdown mode and stops converting. Writing a 0 (default value) does a wake up.  
Similar the ONESHOT bit, writing a 1 to it when it is in SHUTDOWN mode, wakes the device up to make one single conversion and goes to sleep again.  
When not in shutdown mode writing a 1 makes less sense as it is operation in full power.

---

<div class="post-metadata">

**Author:** ![hamnahasan101](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hamnahasan101/32/1109559_2.png) [@hamnahasan101](https://forum.arduino.cc/u/hamnahasan101)\
**Post date:** [February 20, 2026, 10:03pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/29 "2026-02-20T22:03:22Z")

</div>

Oh okay thank you so much, I’ll take a look at those datasheets.

---

<div class="post-metadata">

**Author:** ![robtillaart](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/robtillaart/32/1098811_2.png) [@robtillaart](https://forum.arduino.cc/u/robtillaart)\
**Post date:** [February 20, 2026, 10:03pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/30 "2026-02-20T22:03:27Z")

</div>

Back to reading the device, now with an appropriate wake up time after POR (power on reset).

```cpp
#include <Wire.h>

const uint8_t addr = 0x48; // Adjust if needed

void setup() {
  Serial.begin(115200);
  Wire.begin();

  delay(100); // be sure the device has woken up.
}

void loop() {

  uint8_t msb, lsb;

  Wire.beginTransmission(addr);
  Wire.write(0x00); // temperature register
  Wire.endTransmission(false); // Repeated start
  Wire.requestFrom(addr, (uint8_t)2);

  if (Wire.available() == 2) {
    msb = Wire.read();
    lsb = Wire.read();

    int16_t raw = (int16_t)((msb << 8) | lsb);
    float tempC = raw / 256.0;
  Serial.print("MSB: ");
  Serial.println(msb);
  Serial.print("LSB: ");
  Serial.println(lsb);
    Serial.print("Temp C: ");
    Serial.println(tempC);
  } else {
    Serial.println("I2C read error");
  }

  delay(1000);
}

```

---

<div class="post-metadata">

**Author:** ![hamnahasan101](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hamnahasan101/32/1109559_2.png) [@hamnahasan101](https://forum.arduino.cc/u/hamnahasan101)\
**Post date:** [February 20, 2026, 10:04pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/31 "2026-02-20T22:04:44Z")

</div>

This is the output of the new code:  
The values are still negative.

 ![image](https://europe1.discourse-cdn.com/arduino/original/4X/b/9/8/b98486e9e61a5c2848efcb8801f4f8a4e62b4081.png)

---

<div class="post-metadata">

**Author:** ![robtillaart](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/robtillaart/32/1098811_2.png) [@robtillaart](https://forum.arduino.cc/u/robtillaart)\
**Post date:** [February 20, 2026, 10:09pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/32 "2026-02-20T22:09:23Z")

</div>

The next trick is not documented in the datasheet,  
It is just a try because the config register DATAFORMAT bit is 0.

```cpp
#include <Wire.h>

const uint8_t addr = 0x48; // Adjust if needed

void setup() {
  Serial.begin(115200);
  Wire.begin();

  delay(100); // wake up
}

void loop() {

  uint8_t msb, lsb;

  Wire.beginTransmission(addr);
  Wire.write(0x03); // OS register
  Wire.endTransmission(false); // Repeated start
  Wire.requestFrom(addr, (uint8_t)2);

  if (Wire.available() == 2) {
    msb = Wire.read() & 0x3F; // <<<<<<<<<<<< mask extended range bits.
    lsb = Wire.read();

    int16_t raw = (int16_t)((msb << 8) | lsb);
    float tempC = raw / 256.0;
  Serial.print("MSB: ");
  Serial.println(msb);
  Serial.print("LSB: ");
  Serial.println(lsb);
    Serial.print("OS Temp C: ");
    Serial.println(tempC);
  } else {
    Serial.println("I2C read error");
  }

  delay(1000);
}

```

---

<div class="post-metadata">

**Author:** ![robtillaart](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/robtillaart/32/1098811_2.png) [@robtillaart](https://forum.arduino.cc/u/robtillaart)\
**Post date:** [February 20, 2026, 10:17pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/33 "2026-02-20T22:17:14Z")

</div>

Please post the output as text as the images takes up extra storage and bandwidth.

---

<div class="post-metadata">

**Author:** ![el\_supremo](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/el_supremo/32/214787_2.png) [@el\_supremo](https://forum.arduino.cc/u/el_supremo)\
**Post date:** [February 20, 2026, 10:21pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/34 "2026-02-20T22:21:33Z")

</div>

There is a mode on that chip which extends the temperature range. If it is set, to convert the reading you have to add 64.

-42+64 = 22

Looks like that’s what is happening.

Pete

---

<div class="post-metadata">

**Author:** ![robtillaart](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/robtillaart/32/1098811_2.png) [@robtillaart](https://forum.arduino.cc/u/robtillaart)\
**Post date:** [February 20, 2026, 10:40pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/35 "2026-02-20T22:40:32Z")

</div>

> [@el\_supremo](#):
>
> There is a mode on that chip which extends the temperature range. If it is set, to convert the reading you have to add 64.

indeed  
That is the DATAFORMAT bit in the configuration register.  
This bit it is not set in the register but the device seems to behave as if the bit is set.

The 0x3F masking of the MSB (sign + 64 bit together ) in my last code proposal would indeed change -42 =\> 22.

---

<div class="post-metadata">

**Author:** ![hamnahasan101](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hamnahasan101/32/1109559_2.png) [@hamnahasan101](https://forum.arduino.cc/u/hamnahasan101)\
**Post date:** [February 20, 2026, 10:43pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/36 "2026-02-20T22:43:00Z")

</div>

That worked! Thank you so so much! I really appreciate your help.

---

<div class="post-metadata">

**Author:** ![robtillaart](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/robtillaart/32/1098811_2.png) [@robtillaart](https://forum.arduino.cc/u/robtillaart)\
**Post date:** [February 20, 2026, 10:51pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/37 "2026-02-20T22:51:15Z")

</div>

It may look like it is working, **but your sensor is broken** as it is in extended mode without the configuration says so.  
Thus at least I would not trust it for 100%, definitely not for medical applications.  
The remark of a broken sensor has been made earlier in post 4 above.

---

<div class="post-metadata">

**Author:** ![Wawa](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/wawa/32/1211303_2.png) [@Wawa](https://forum.arduino.cc/u/Wawa)\
**Post date:** [February 20, 2026, 11:28pm UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/38 "2026-02-20T23:28:32Z")

</div>

I have seen small non-functioning sections like this in counterfeit parts before.  
Things working as per datasheet for 99%.  
Leo..

---

<div class="post-metadata">

**Author:** ![hamnahasan101](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hamnahasan101/32/1109559_2.png) [@hamnahasan101](https://forum.arduino.cc/u/hamnahasan101)\
**Post date:** [February 21, 2026, 12:01am UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/39 "2026-02-21T00:01:45Z")

</div>

I haven’t touched this sensor to anything but 3.3V, is there another reason why it would be broken? I have tested it with different temperatures and it seems to be reading correctly.

---

<div class="post-metadata">

**Author:** ![Wawa](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/wawa/32/1211303_2.png) [@Wawa](https://forum.arduino.cc/u/Wawa)\
**Post date:** [February 21, 2026, 12:20am UTC](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567/40 "2026-02-21T00:20:09Z")

</div>

You said you had used an Uno, assuming R3. Which puts 5volt on the I2C lines.  
You should have used an I2C level shifter, or at least disable the internal pull up in software.  
A fake/counterfeit chip is more likely though.  
Leo..

[Previous page](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567.md?page=1)

[Next page](https://forum.arduino.cc/t/getting-220c-for-the-max30205-temperature-sensor/1431567.md?page=3)
