Convert MAX31865 Celsius to Fahrenheit

Hello All,

I am new here and am trying to get my MAX31865 to output Fahrenheit readings instead of Celsius readings. While using the example code for the MAX31865 in the library, what code needs to be put in to output temp readings in Fahrenheit? I am using a MAX31865 with a PT100. It is in SPI with the CS pin on pin 10.

TIA,
Kevin

It is usual in this forum to show your code.

Why would you not do the usual

F = 32.0 + 1.8 * C

where C is a floating point value of the temperature in degrees Celsius, and F is the desired temperature as a floating point value in degrees Fahrenheit

?

Some libraries do have an option to return the temperature in Fahrenheit. If you tell us which library you're using we might be able to tell you whether this is the case. But it will only be using the equation vaj4088 mentioned so It's easy enough to do this in your own code.

You are CORRECT :-[

Here is the example code I am using. I am trying to have my temp readout in F instead of C. I only need it to read and output the temp.

/*************************************************** 
  This is a library for the Adafruit PT100/P1000 RTD Sensor w/MAX31865

  Designed specifically to work with the Adafruit RTD Sensor
  ----> https://www.adafruit.com/products/3328

  This sensor uses SPI to communicate, 4 pins are required to  
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

#include <Adafruit_MAX31865.h>

// Use software SPI: CS, DI, DO, CLK
Adafruit_MAX31865 max = Adafruit_MAX31865(10, 11, 12, 13);
// use hardware SPI, just pass in the CS pin
//Adafruit_MAX31865 max = Adafruit_MAX31865(10);

// The value of the Rref resistor. Use 430.0 for PT100 and 4300.0 for PT1000
#define RREF      430.0
// The 'nominal' 0-degrees-C resistance of the sensor
// 100.0 for PT100, 1000.0 for PT1000
#define RNOMINAL  100.0

void setup() {
  Serial.begin(115200);
  Serial.println("Adafruit MAX31865 PT100 Sensor Test!");

  max.begin(MAX31865_3WIRE);  // set to 2WIRE or 4WIRE as necessary
}


void loop() {
  uint16_t rtd = max.readRTD();

  Serial.print("RTD value: "); Serial.println(rtd);
  float ratio = rtd;
  ratio /= 32768;
  Serial.print("Ratio = "); Serial.println(ratio,8);
  Serial.print("Resistance = "); Serial.println(RREF*ratio,8);
  Serial.print("Temperature = "); Serial.println(max.temperature(RNOMINAL, RREF));

  // Check and print any faults
  uint8_t fault = max.readFault();
  if (fault) {
    Serial.print("Fault 0x"); Serial.println(fault, HEX);
    if (fault & MAX31865_FAULT_HIGHTHRESH) {
      Serial.println("RTD High Threshold"); 
    }
    if (fault & MAX31865_FAULT_LOWTHRESH) {
      Serial.println("RTD Low Threshold"); 
    }
    if (fault & MAX31865_FAULT_REFINLOW) {
      Serial.println("REFIN- > 0.85 x Bias"); 
    }
    if (fault & MAX31865_FAULT_REFINHIGH) {
      Serial.println("REFIN- < 0.85 x Bias - FORCE- open"); 
    }
    if (fault & MAX31865_FAULT_RTDINLOW) {
      Serial.println("RTDIN- < 0.85 x Bias - FORCE- open"); 
    }
    if (fault & MAX31865_FAULT_OVUV) {
      Serial.println("Under/Over voltage"); 
    }
    max.clearFault();
  }
  Serial.println();
  delay(1000);
}

Here is the code I was trying with trying to utilize a code I used on an analog input but still having issues.

/*************************************************** 
  This is a library for the Adafruit PT100/P1000 RTD Sensor w/MAX31865

  Designed specifically to work with the Adafruit RTD Sensor
  ----> https://www.adafruit.com/products/3328

  This sensor uses SPI to communicate, 4 pins are required to  
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

#include <Adafruit_MAX31865.h>
#include <math.h>

// Use software SPI: CS, DI, DO, CLK
Adafruit_MAX31865 max = Adafruit_MAX31865(10, 11, 12, 13);
// use hardware SPI, just pass in the CS pin
//Adafruit_MAX31865 max = Adafruit_MAX31865(10);

// The value of the Rref resistor. Use 430.0 for PT100 and 4300.0 for PT1000
#define RREF      430.0
// The 'nominal' 0-degrees-C resistance of the sensor
// 100.0 for PT100, 1000.0 for PT1000
#define RNOMINAL  100.0

double Thermistor(int RawADC) {
 double Temp;
 Temp = log(100000.0*((1024.0/RawADC-1))); 
//         =log(100000.0/(1024.0/RawADC-1)) // for pull-up configuration
 Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
 Temp = Temp - 273.15;            // Convert Kelvin to Celcius
 Temp = (Temp * 9.3)/ 5.0 + 32.0; // Convert Celcius to Fahrenheit
 return Temp;

 
void setup() {
  Serial.begin(9600);
  Serial.println("Adafruit MAX31865 PT100 Sensor Test!");

  max.begin(MAX31865_3WIRE);  // set to 2WIRE or 4WIRE as necessary
}

Thanks in advance for your help!

pert:
Some libraries do have an option to return the temperature in Fahrenheit. If you tell us which library you're using we might be able to tell you whether this is the case. But it will only be using the equation vaj4088 mentioned so It's easy enough to do this in your own code.

I am using the Adafruit library for the MAX31865.

I took a look at the library and it doesn't have any built-in function for converting the temperature to Fahrenheit, so you'll need to do so in your own code.

flight1ap:
Here is the code I was trying with trying to utilize a code I used on an analog input but still having issues.

That code won't compile due to a missing closing brace at the end of the Thermistor function. It's also missing a loop function.

A very helpful troubleshooting tool is the Auto Format feature (Tools > Auto Format in the Arduino IDE or Ctrl + B in the Arduino Web Editor). If you do an Auto Format and then compare the resulting indentation to your intended program structure, it will quickly point you to where there is a missing or extra brace.

Another useful feature of the Arduino IDE/Arduino Web Editor is that when you place the cursor next to one bracket, it puts a box around the matching bracket. In the Arduino IDE, if the cursor is next to the closing bracket and the opening bracket is off the screen then it will show the opening bracket line in a tool tip after a short delay.

Thanks every for the help. Here is the functional code I came up with

#include <Adafruit_MAX31865.h>

// Use software SPI: CS, DI, DO, CLK
Adafruit_MAX31865 max = Adafruit_MAX31865(10, 11, 12, 13);
// use hardware SPI, just pass in the CS pin
//Adafruit_MAX31865 max = Adafruit_MAX31865(10);

// The value of the Rref resistor. Use 430.0 for PT100 and 4300.0 for PT1000
#define RREF      430.0
// The 'nominal' 0-degrees-C resistance of the sensor
// 100.0 for PT100, 1000.0 for PT1000
#define RNOMINAL  100.0

void setup() {
  Serial.begin(115200);
  Serial.println("Adafruit MAX31865 PT100 Sensor Test!");

  max.begin(MAX31865_3WIRE); 
}


void loop() {
  uint16_t rtd = max.readRTD();
  int C = (max.temperature(RNOMINAL, RREF));
  int F = (32.0 + 1.8 * C);
  //int C = (max.temperature(RNOMINAL, RREF))
  //Serial.println("C = "); Serial.println(max.temperature(RNOMINAL, RREF));
  Serial.print("Smoker Temp = ");
  Serial.println(F = 32.0 + 1.8 * C);     
     

  delay(1500);
}

This code:

flight1ap:

  Serial.println(F = 32.0 + 1.8 * C);

is a bit odd. Yes, it will work, but you already did that math:

flight1ap:

  int F = (32.0 + 1.8 * C);

The current code is difficult to maintain and read.

You could just do this:

Serial.println(F);

Or, if you have no other use for the F variable, you can get rid of it and just print the result of the math directly:

  Serial.println(32.0 + 1.8 * C);