BME reading a degree too high; calibration help **SOLVED**

floresta:
Why don't you modify the data when you save it instead of when you display it? Something like this:

rawData = bme.readTemperature();

adjustedData = rawData - 1;

Serial.print(adjustedData);

display.print(adjustedData);




And yes, the 'adjustment' should be defined rather than hard coded as I have shown it.

Don

Hi Don, I;ve played around with that code in various forms but I must be putting it in the incorrect place. Any chance you could help me place the code in the correct area? I defined it at the start of the code and then put the code in the oled display section.
Should I do something with the current 'getData' code?

// SimpleRx - the slave or the receiver

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeMono9pt7b.h>
#include "DHT.h"  

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

//added for cal adjustment
#define rawData = bme.readTemperature();
#define adjustedData = rawData - 1;

//not all #defines used but here for documentation
#define CE_PIN   7
#define CSN_PIN 8
#define MOSI_PIN 11
#define MISO_PIN 12
#define SCK_PIN 13

const byte thisSlaveAddress[5] = {'R', 'x', 'A', 'A', 'A'};

RF24 radio(CE_PIN, CSN_PIN);

struct data
{
  float temperature;
  float humidity;
} receivedData;

bool newData = false;

void setup()
{

  // initialize with the I2C addr 0x3C
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  delay(10);

  // Clear the buffer.
  display.clearDisplay();  

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,12);
  display.println("Booting");
  display.display();
  delay(50);

  // Clear the buffer.
  display.clearDisplay();


  Serial.begin(9600);
  Serial.println("SimpleRx Starting");
  radio.begin();
  radio.setPALevel(RF24_PA_MAX);
  radio.setDataRate( RF24_250KBPS );
  radio.setChannel(124);
  radio.openReadingPipe(1, thisSlaveAddress);
  radio.startListening();

  Wire.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);// initialize with the I2C addr 0x3C
}

void displayTempHumid(){
  delay(2000);
  // Reading temperature or humidity takes about 250 milliseconds!
 
{
  }
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setFont(&FreeMono9pt7b); //added for font test
  display.setCursor(4,13);
  display.print("Temp:");
//  display.print(adjustedData); //added for cali 
  display.print(receivedData.temperature,1);
  //display.println(receivedData.temperature-1); //added for cali
 // display.print(temperature -1); //added for cali
  display.print(" C"); 
  display.setCursor(4,28);
  display.print("Humid:"); 
  display.print(receivedData.humidity,1);
  display.print("%");

  display.drawRect(1, 1, display.width()-1, display.height()-1, WHITE);   // draws the outer rectangular boundary on the screen
  display.setTextColor(WHITE);   // i have white OLED display, you can use other colors in case you have multicolored display
  display.setTextSize(1);        // i have used large font to display temperature, it can be varied as per your taste
  display.setFont(); //added for font test
  display.setCursor(107,2);
  display.print("o");            // this prints the "o" symbol to show Degree 

}

void loop()
{
  getData();
  showData();

  displayTempHumid();
  display.display();
}

void getData()
{
  if ( radio.available() )
  {
    radio.read( &receivedData, sizeof(receivedData) );
    newData = true;
  }
}

void showData()
{
  if (newData == true)
  {
    Serial.print("Data received\ttemperature : ");
  //  Serial.print(receivedData.temperature);
    Serial.print(receivedData.temperature -1); //added cali THIS WPRKS, NEED OLED TO DISPLAY
    Serial.print("\t");
    Serial.print("humidity : ");
    Serial.println(receivedData.humidity);
    newData = false;
  }
}[color=red][/color]