SRK Version of mDot LoRa_Sensormode_SRK

Dependencies:   libmDot mbed-rtos mbed

Fork of mDot_LoRa_Sensornode by Adrian Mitevski

Committer:
skramer
Date:
Mon Aug 15 18:57:35 2016 +0000
Revision:
6:e2ae47490f60
Parent:
0:f2815503561f
Uptodate with last changes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mitea1 0:f2815503561f 1 /*
mitea1 0:f2815503561f 2 * BME280.cpp
mitea1 0:f2815503561f 3 *
mitea1 0:f2815503561f 4 * Created on: 18.05.2016
mitea1 0:f2815503561f 5 * Author: Adrian
mitea1 0:f2815503561f 6 */
mitea1 0:f2815503561f 7
mitea1 0:f2815503561f 8 #include "BME280.h"
mitea1 0:f2815503561f 9
mitea1 0:f2815503561f 10 BME280::BME280(I2C_RT* i2c){
mitea1 0:f2815503561f 11 setI2C(i2c);
mitea1 0:f2815503561f 12 this->config = new BME280Config();
mitea1 0:f2815503561f 13 }
mitea1 0:f2815503561f 14
mitea1 0:f2815503561f 15 BME280::~BME280() {
mitea1 0:f2815503561f 16 // TODO Auto-generated destructor stub
mitea1 0:f2815503561f 17 }
mitea1 0:f2815503561f 18
mitea1 0:f2815503561f 19 void BME280::init(BME280_MODE desiredMode){
mitea1 0:f2815503561f 20
mitea1 0:f2815503561f 21 config->build(desiredMode);
mitea1 0:f2815503561f 22
mitea1 0:f2815503561f 23 setOversamplingHumidity(config->getOversamplingHumidity());
mitea1 0:f2815503561f 24 setOversamplingTemperature(config->getOversamplingTemperature());
mitea1 0:f2815503561f 25 setOversamplingPressure(config->getOversamplingPressure());
mitea1 0:f2815503561f 26 setMode(config->getMode());
mitea1 0:f2815503561f 27
mitea1 0:f2815503561f 28 getTrimValuesHumidity();
mitea1 0:f2815503561f 29 getTrimValuesPressure();
mitea1 0:f2815503561f 30 getTrimValuesTemperature();
mitea1 0:f2815503561f 31 }
mitea1 0:f2815503561f 32
mitea1 0:f2815503561f 33 void BME280::setI2C(I2C_RT* i2c_rt){
mitea1 0:f2815503561f 34 this->i2c = i2c_rt;
mitea1 0:f2815503561f 35 }
mitea1 0:f2815503561f 36
mitea1 0:f2815503561f 37 uint32_t BME280::getHumidity(){
mitea1 0:f2815503561f 38
mitea1 0:f2815503561f 39 // Data Containers
mitea1 0:f2815503561f 40 uint8_t msbRegisterData[1];
mitea1 0:f2815503561f 41 uint8_t lsbRegisterData[1];
mitea1 0:f2815503561f 42
mitea1 0:f2815503561f 43 i2c->read_RT(
mitea1 0:f2815503561f 44 BME280_SENSOR_ADDRESS,BME280_SENSOR_HUM_MSB,false,msbRegisterData,1);
mitea1 0:f2815503561f 45 i2c->read_RT(
mitea1 0:f2815503561f 46 BME280_SENSOR_ADDRESS,BME280_SENSOR_HUM_LSB,false,lsbRegisterData,1);
mitea1 0:f2815503561f 47
mitea1 0:f2815503561f 48 int32_t temp_fine = getTemperature();
mitea1 0:f2815503561f 49
mitea1 0:f2815503561f 50 int32_t humRaw = (int32_t) (msbRegisterData[0]<<8|lsbRegisterData[0]);
mitea1 0:f2815503561f 51 uint32_t hum_fine = this->compensateHumidity(humRaw,temp_fine);
mitea1 0:f2815503561f 52
mitea1 0:f2815503561f 53 return hum_fine;
mitea1 0:f2815503561f 54
mitea1 0:f2815503561f 55 }
mitea1 0:f2815503561f 56
mitea1 0:f2815503561f 57 float BME280::getHumidityFloat(){
mitea1 0:f2815503561f 58 return (float) getHumidity()/ 1024;
mitea1 0:f2815503561f 59 }
mitea1 0:f2815503561f 60
mitea1 0:f2815503561f 61 uint32_t BME280::getPressure(){
mitea1 0:f2815503561f 62
mitea1 0:f2815503561f 63 // Data Containers
mitea1 0:f2815503561f 64 uint8_t msbRegisterData[1];
mitea1 0:f2815503561f 65 uint8_t lsbRegisterData[1];
mitea1 0:f2815503561f 66 uint8_t xlsbRegisterData[1];
mitea1 0:f2815503561f 67
mitea1 0:f2815503561f 68 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_SENSOR_PRESS_MSB,false,msbRegisterData,1);
mitea1 0:f2815503561f 69 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_SENSOR_PRESS_LSB,false,lsbRegisterData,1);
mitea1 0:f2815503561f 70 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_SENSOR_PRESS_XLSB,false,xlsbRegisterData, 1);
mitea1 0:f2815503561f 71
mitea1 0:f2815503561f 72 int32_t temp_fine = getTemperature();
mitea1 0:f2815503561f 73
mitea1 0:f2815503561f 74 int32_t pressRaw = (int32_t) (msbRegisterData[0]<<12|lsbRegisterData[0]<<4|lsbRegisterData[0]);
mitea1 0:f2815503561f 75 uint32_t press_fine = compensatePressure(pressRaw,temp_fine);
mitea1 0:f2815503561f 76
mitea1 0:f2815503561f 77 return press_fine;
mitea1 0:f2815503561f 78 }
mitea1 0:f2815503561f 79
mitea1 0:f2815503561f 80 float BME280::getPressureFloat(){
mitea1 0:f2815503561f 81 return (float)getPressure()/256;
mitea1 0:f2815503561f 82 }
mitea1 0:f2815503561f 83
mitea1 0:f2815503561f 84 int32_t BME280::getTemperature(){
mitea1 0:f2815503561f 85 uint8_t msbRegisterData[1];
mitea1 0:f2815503561f 86 uint8_t lsbRegisterData[1];
mitea1 0:f2815503561f 87 uint8_t xlsbRegisterData[1];
mitea1 0:f2815503561f 88
mitea1 0:f2815503561f 89 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_SENSOR_TEMP_MSB,
mitea1 0:f2815503561f 90 false,msbRegisterData,1);
mitea1 0:f2815503561f 91 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_SENSOR_TEMP_LSB,
mitea1 0:f2815503561f 92 false,lsbRegisterData,1);
mitea1 0:f2815503561f 93 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_SENSOR_TEMP_XLSB,
mitea1 0:f2815503561f 94 false,xlsbRegisterData,1);
mitea1 0:f2815503561f 95
mitea1 0:f2815503561f 96 int32_t tempRaw = (int32_t) (msbRegisterData[0]<<12|lsbRegisterData[0]<<4|xlsbRegisterData[0]);
mitea1 0:f2815503561f 97 int32_t tempFine = compensateTemperature(tempRaw);
mitea1 0:f2815503561f 98
mitea1 0:f2815503561f 99 return tempFine;
mitea1 0:f2815503561f 100 }
mitea1 0:f2815503561f 101
mitea1 0:f2815503561f 102 float BME280::getTemperatureFloat(){
mitea1 0:f2815503561f 103 int32_t temperature = this->getTemperature();
mitea1 0:f2815503561f 104
mitea1 0:f2815503561f 105 return (float)(temperature)/100;
mitea1 0:f2815503561f 106 }
mitea1 0:f2815503561f 107
mitea1 0:f2815503561f 108 void BME280::getTrimValuesHumidity(){
mitea1 0:f2815503561f 109 // Data Container for Trim Values Humidity
mitea1 0:f2815503561f 110 uint8_t digH1Raw[1];
mitea1 0:f2815503561f 111 uint8_t digH2Raw[2];
mitea1 0:f2815503561f 112 uint8_t digH3Raw[1];
mitea1 0:f2815503561f 113 uint8_t digH4Raw[2];
mitea1 0:f2815503561f 114 uint8_t digH5Raw[2];
mitea1 0:f2815503561f 115 uint8_t digH6Raw[1];
mitea1 0:f2815503561f 116
mitea1 0:f2815503561f 117 // Get the Trim parameters for the exact calculation of the Humidity
mitea1 0:f2815503561f 118 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digH1_LSB,0,&digH1Raw[0],1);
mitea1 0:f2815503561f 119 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digH2_LSB,0,&digH2Raw[0],1);
mitea1 0:f2815503561f 120 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digH2_MSB,0,&digH2Raw[1],1);
mitea1 0:f2815503561f 121 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digH3_LSB,0,&digH3Raw[0],1);
mitea1 0:f2815503561f 122 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digH4_LSB,0,&digH4Raw[0],1);
mitea1 0:f2815503561f 123 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digH4_MSB,0,&digH4Raw[1],1);
mitea1 0:f2815503561f 124 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digH5_LSB,0,&digH5Raw[0],1);
mitea1 0:f2815503561f 125 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digH5_MSB,0,&digH5Raw[1],1);
mitea1 0:f2815503561f 126 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digH6_LSB,0,&digH6Raw[0],1);
mitea1 0:f2815503561f 127
mitea1 0:f2815503561f 128 // Convert data into values
mitea1 0:f2815503561f 129 digH1=digH1Raw[0];
mitea1 0:f2815503561f 130 digH2=(digH2Raw[1]<<8)|digH2Raw[0];
mitea1 0:f2815503561f 131 digH3=digH3Raw[0];
mitea1 0:f2815503561f 132 digH4=(digH4Raw[1]<<4)|(digH4Raw[0] & 0x0F);
mitea1 0:f2815503561f 133 digH5=(4>>(digH5Raw[1] & 0xF0))|(digH5Raw[0]<<4);
mitea1 0:f2815503561f 134 digH6=digH6Raw[0];
mitea1 0:f2815503561f 135 }
mitea1 0:f2815503561f 136
mitea1 0:f2815503561f 137 void BME280::getTrimValuesPressure(){
mitea1 0:f2815503561f 138 // Data Container for Trim Values Pressure
mitea1 0:f2815503561f 139 uint8_t digP1Raw[2];
mitea1 0:f2815503561f 140 uint8_t digP2Raw[2];
mitea1 0:f2815503561f 141 uint8_t digP3Raw[2];
mitea1 0:f2815503561f 142 uint8_t digP4Raw[2];
mitea1 0:f2815503561f 143 uint8_t digP5Raw[2];
mitea1 0:f2815503561f 144 uint8_t digP6Raw[2];
mitea1 0:f2815503561f 145 uint8_t digP7Raw[2];
mitea1 0:f2815503561f 146 uint8_t digP8Raw[2];
mitea1 0:f2815503561f 147 uint8_t digP9Raw[2];
mitea1 0:f2815503561f 148
mitea1 0:f2815503561f 149 // Get the Trim parameters for the exact calculation of the Pressure
mitea1 0:f2815503561f 150 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP1_LSB,0,&digP1Raw[0],1);
mitea1 0:f2815503561f 151 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP1_MSB,0,&digP1Raw[1],1);
mitea1 0:f2815503561f 152 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP2_LSB,0,&digP2Raw[0],1);
mitea1 0:f2815503561f 153 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP2_MSB,0,&digP2Raw[1],1);
mitea1 0:f2815503561f 154 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP3_LSB,0,&digP3Raw[0],1);
mitea1 0:f2815503561f 155 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP3_MSB,0,&digP3Raw[1],1);
mitea1 0:f2815503561f 156 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP4_LSB,0,&digP4Raw[0],1);
mitea1 0:f2815503561f 157 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP4_MSB,0,&digP4Raw[1],1);
mitea1 0:f2815503561f 158 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP5_LSB,0,&digP5Raw[0],1);
mitea1 0:f2815503561f 159 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP5_MSB,0,&digP5Raw[1],1);
mitea1 0:f2815503561f 160 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP6_LSB,0,&digP6Raw[0],1);
mitea1 0:f2815503561f 161 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP6_MSB,0,&digP6Raw[1],1);
mitea1 0:f2815503561f 162 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP7_LSB,0,&digP7Raw[0],1);
mitea1 0:f2815503561f 163 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP7_MSB,0,&digP7Raw[1],1);
mitea1 0:f2815503561f 164 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP8_LSB,0,&digP8Raw[0],1);
mitea1 0:f2815503561f 165 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP8_MSB,0,&digP8Raw[1],1);
mitea1 0:f2815503561f 166 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP9_LSB,0,&digP9Raw[0],1);
mitea1 0:f2815503561f 167 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digP9_MSB,0,&digP9Raw[1],1);
mitea1 0:f2815503561f 168
mitea1 0:f2815503561f 169 // Convert data into values
mitea1 0:f2815503561f 170 digP1=(digP1Raw[1]<<8)|digP1Raw[0];
mitea1 0:f2815503561f 171 digP2=(digP2Raw[1]<<8)|digP2Raw[0];
mitea1 0:f2815503561f 172 digP3=(digP3Raw[1]<<8)|digP3Raw[0];
mitea1 0:f2815503561f 173 digP4=(digP4Raw[1]<<8)|digP4Raw[0];
mitea1 0:f2815503561f 174 digP5=(digP5Raw[1]<<8)|digP5Raw[0];
mitea1 0:f2815503561f 175 digP6=(digP6Raw[1]<<8)|digP6Raw[0];
mitea1 0:f2815503561f 176 digP7=(digP7Raw[1]<<8)|digP7Raw[0];
mitea1 0:f2815503561f 177 digP8=(digP8Raw[1]<<8)|digP8Raw[0];
mitea1 0:f2815503561f 178 digP9=(digP9Raw[1]<<8)|digP9Raw[0];
mitea1 0:f2815503561f 179 }
mitea1 0:f2815503561f 180
mitea1 0:f2815503561f 181 void BME280::getTrimValuesTemperature(){
mitea1 0:f2815503561f 182 // Data Container for Trim Values Temperature
mitea1 0:f2815503561f 183 uint8_t digT1Raw[2];
mitea1 0:f2815503561f 184 uint8_t digT2Raw[2];
mitea1 0:f2815503561f 185 uint8_t digT3Raw[2];
mitea1 0:f2815503561f 186
mitea1 0:f2815503561f 187 // Get the Trim parameters for the exact calculation of the Temperature
mitea1 0:f2815503561f 188 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digT1_LSB,0,&digT1Raw[0],1);
mitea1 0:f2815503561f 189 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digT1_MSB,0,&digT1Raw[1],1);
mitea1 0:f2815503561f 190 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digT2_LSB,0,&digT2Raw[0],1);
mitea1 0:f2815503561f 191 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digT2_MSB,0,&digT2Raw[1],1);
mitea1 0:f2815503561f 192 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digT3_LSB,0,&digT3Raw[0],1);
mitea1 0:f2815503561f 193 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_digT3_MSB,0,&digT3Raw[1],1);
mitea1 0:f2815503561f 194
mitea1 0:f2815503561f 195 // Convert data into values
mitea1 0:f2815503561f 196 digT1=(digT1Raw[1]<<8)|digT1Raw[0];
mitea1 0:f2815503561f 197 digT2=(digT2Raw[1]<<8)|digT2Raw[0];
mitea1 0:f2815503561f 198 digT3=(digT3Raw[1]<<8)|digT3Raw[0];
mitea1 0:f2815503561f 199
mitea1 0:f2815503561f 200 }
mitea1 0:f2815503561f 201
mitea1 0:f2815503561f 202 void BME280::setWeatherMonitoringMode(){
mitea1 0:f2815503561f 203 uint8_t configuration_1 = BME280_WHEAT_OVRS_T_P;
mitea1 0:f2815503561f 204 uint8_t configuration_2 = BME280_WHEAT_OVRS_H;
mitea1 0:f2815503561f 205
mitea1 0:f2815503561f 206 i2c->write_RT(BME280_SENSOR_ADDRESS,BME280_SENSOR_CTRL_HUM,false,&configuration_2,1);
mitea1 0:f2815503561f 207 i2c->write_RT(BME280_SENSOR_ADDRESS,BME280_SENSOR_CTRL_MEAS,false,&configuration_1,1);
mitea1 0:f2815503561f 208
mitea1 0:f2815503561f 209 }
mitea1 0:f2815503561f 210
mitea1 0:f2815503561f 211 void BME280::setOversamplingTemperature(uint8_t oversamplingTemperature){
mitea1 0:f2815503561f 212 uint8_t oldRegisterValue;
mitea1 0:f2815503561f 213 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_SENSOR_CTRL_MEAS,false,
mitea1 0:f2815503561f 214 &oldRegisterValue,1);
mitea1 0:f2815503561f 215
mitea1 0:f2815503561f 216 uint8_t registerValue = (oversamplingTemperature << 5) | oldRegisterValue;
mitea1 0:f2815503561f 217 i2c->write_RT(BME280_SENSOR_ADDRESS,BME280_SENSOR_CTRL_MEAS,false,
mitea1 0:f2815503561f 218 &registerValue,1);
mitea1 0:f2815503561f 219 }
mitea1 0:f2815503561f 220
mitea1 0:f2815503561f 221 void BME280::setOversamplingPressure(uint8_t oversamplingPressure){
mitea1 0:f2815503561f 222 uint8_t oldRegisterValue;
mitea1 0:f2815503561f 223 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_SENSOR_CTRL_MEAS,false,
mitea1 0:f2815503561f 224 &oldRegisterValue,1);
mitea1 0:f2815503561f 225
mitea1 0:f2815503561f 226 uint8_t registerValue = (oversamplingPressure << 2) | oldRegisterValue;
mitea1 0:f2815503561f 227 i2c->write_RT(BME280_SENSOR_ADDRESS,BME280_SENSOR_CTRL_MEAS,false,
mitea1 0:f2815503561f 228 &registerValue,1);
mitea1 0:f2815503561f 229 }
mitea1 0:f2815503561f 230
mitea1 0:f2815503561f 231 void BME280::setOversamplingHumidity(uint8_t oversamplingHumdity){
mitea1 0:f2815503561f 232 uint8_t oldRegisterValue;
mitea1 0:f2815503561f 233 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_SENSOR_CTRL_HUM,false,
mitea1 0:f2815503561f 234 &oldRegisterValue,1);
mitea1 0:f2815503561f 235
mitea1 0:f2815503561f 236 uint8_t newRegisterValue = oversamplingHumdity|oldRegisterValue;
mitea1 0:f2815503561f 237 i2c->write_RT(BME280_SENSOR_ADDRESS,BME280_SENSOR_CTRL_HUM,false,
mitea1 0:f2815503561f 238 &newRegisterValue,1);
mitea1 0:f2815503561f 239 }
mitea1 0:f2815503561f 240
mitea1 0:f2815503561f 241 void BME280::setMode(uint8_t mode){
mitea1 0:f2815503561f 242 uint8_t oldRegisterValue;
mitea1 0:f2815503561f 243 i2c->read_RT(BME280_SENSOR_ADDRESS,BME280_SENSOR_CTRL_MEAS,false,
mitea1 0:f2815503561f 244 &oldRegisterValue,1);
mitea1 0:f2815503561f 245
mitea1 0:f2815503561f 246 uint8_t registerValue = mode | oldRegisterValue;
mitea1 0:f2815503561f 247 i2c->write_RT(BME280_SENSOR_ADDRESS,BME280_SENSOR_CTRL_MEAS,false,
mitea1 0:f2815503561f 248 &registerValue,1);
mitea1 0:f2815503561f 249 }
mitea1 0:f2815503561f 250
mitea1 0:f2815503561f 251 int32_t BME280::compensateHumidity(int32_t adc_H,int32_t temp_fine)
mitea1 0:f2815503561f 252 {
mitea1 0:f2815503561f 253 int32_t v_x1_u32r;
mitea1 0:f2815503561f 254
mitea1 0:f2815503561f 255 v_x1_u32r = temp_fine - ((int32_t)76800);
mitea1 0:f2815503561f 256
mitea1 0:f2815503561f 257 v_x1_u32r = (((((adc_H << 14) - (((int32_t)digH4) << 20) - (((int32_t)digH5) * v_x1_u32r)) +
mitea1 0:f2815503561f 258 ((int32_t)16384)) >> 15) * (((((((v_x1_u32r * ((int32_t)digH6)) >> 10) * (((v_x1_u32r *
mitea1 0:f2815503561f 259 ((int32_t)digH3)) >> 11) + ((int32_t)32768))) >> 10) + ((int32_t)2097152)) *
mitea1 0:f2815503561f 260 ((int32_t)digH2) + 8192) >> 14));
mitea1 0:f2815503561f 261
mitea1 0:f2815503561f 262 v_x1_u32r = (v_x1_u32r - (((((v_x1_u32r >> 15) * (v_x1_u32r >> 15)) >> 7) * ((int32_t)digH1)) >> 4));
mitea1 0:f2815503561f 263 v_x1_u32r = (v_x1_u32r < 0 ? 0 : v_x1_u32r);
mitea1 0:f2815503561f 264 v_x1_u32r = (v_x1_u32r > 419430400 ? 419430400 : v_x1_u32r);
mitea1 0:f2815503561f 265
mitea1 0:f2815503561f 266 return (int32_t)(v_x1_u32r>>12);
mitea1 0:f2815503561f 267 }
mitea1 0:f2815503561f 268
mitea1 0:f2815503561f 269 int64_t BME280::compensatePressure(int32_t adc_P, int32_t temp_fine)
mitea1 0:f2815503561f 270 {
mitea1 0:f2815503561f 271 int64_t var1, var2, p;
mitea1 0:f2815503561f 272 var1 = ((int64_t)temp_fine) - 128000;
mitea1 0:f2815503561f 273 var2 = var1 * var1 * (int64_t)digP6;
mitea1 0:f2815503561f 274 var2 = var2 + ((var1*(int64_t)digP5)<<17);
mitea1 0:f2815503561f 275 var2 = var2 + (((int64_t)digP4)<<35);
mitea1 0:f2815503561f 276 var1 = ((var1 * var1 * (int64_t)digP3)>>8) + ((var1 * (int64_t)digP2)<<12);
mitea1 0:f2815503561f 277 var1 = (((((int64_t)1)<<47)+var1))*((int64_t)digP1)>>33;
mitea1 0:f2815503561f 278 if (var1 == 0)
mitea1 0:f2815503561f 279 {
mitea1 0:f2815503561f 280 return 0; // avoid exception caused by division by zero
mitea1 0:f2815503561f 281 }
mitea1 0:f2815503561f 282 p = ((int64_t)1048576)-adc_P;
mitea1 0:f2815503561f 283 p = (((p<<31)-var2)*((int64_t)3125))/var1;
mitea1 0:f2815503561f 284 var1 = (((int64_t)digP9) * (p>>13) * (p>>13)) >> 25;
mitea1 0:f2815503561f 285 var2 = (((int64_t)digP8) * p) >> 19;
mitea1 0:f2815503561f 286 p = ((p + var1 + var2) >> 8) + (((int64_t)digP7)<<4);
mitea1 0:f2815503561f 287 return (int32_t)p;
mitea1 0:f2815503561f 288 }
mitea1 0:f2815503561f 289
mitea1 0:f2815503561f 290 int32_t BME280::compensateTemperature(int32_t adc_T)
mitea1 0:f2815503561f 291 {
mitea1 0:f2815503561f 292 int32_t var1, var2, T;
mitea1 0:f2815503561f 293 var1 = ((((adc_T>>3) - ((int32_t)digT1<<1))) * ((int32_t)digT2)) >> 11;
mitea1 0:f2815503561f 294 var2 = (((((adc_T>>4) - ((int32_t)digT1)) * ((adc_T>>4) - ((int32_t)digT1))) >> 12) *
mitea1 0:f2815503561f 295 ((int32_t)digT3)) >> 14;
mitea1 0:f2815503561f 296 int32_t t_fine = var1 + var2;
mitea1 0:f2815503561f 297 T = (t_fine * 5 + 128) >> 8;
mitea1 0:f2815503561f 298 return T;
mitea1 0:f2815503561f 299 }