+#define BMP280_S32_t int32_t\r
+// Returns temperature in DegC, double precision. Output value of \9351.23\94 equals 51.23 DegC.\r
+// t_fine carries fine temperature as global value\r
+BMP280_S32_t t_fine;\r
+double bmp280_compensate_T_double(BMP280_S32_t adc_T)\r
+{\r
+ double var1, var2, T;\r
+ var1 = (((double)adc_T)/16384.0 - ((double)dig_T1)/1024.0) * ((double)dig_T2);\r
+ var2 = ((((double)adc_T)/131072.0 - ((double)dig_T1)/8192.0) *\r
+ (((double)adc_T)/131072.0 - ((double) dig_T1)/8192.0)) * ((double)dig_T3);\r
+ t_fine = (BMP280_S32_t)(var1 + var2);\r
+ T = (var1 + var2) / 5120.0;\r
+ return T;\r
+}\r
+// Returns pressure in Pa as double. Output value of \9396386.2\94 equals 96386.2 Pa = 963.862 hPa\r
+double bmp280_compensate_P_double(BMP280_S32_t adc_P)\r
+{\r
+ double var1, var2, p;\r
+ var1 = ((double)t_fine/2.0) - 64000.0;\r
+ var2 = var1 * var1 * ((double)dig_P6) / 32768.0;\r
+ var2 = var2 + var1 * ((double)dig_P5) * 2.0;\r
+ var2 = (var2/4.0)+(((double)dig_P4) * 65536.0);\r
+ var1 = (((double)dig_P3) * var1 * var1 / 524288.0 + ((double)dig_P2) * var1) / 524288.0;\r
+ var1 = (1.0 + var1 / 32768.0)*((double)dig_P1);\r
+ if (var1 == 0.0)\r
+ {\r
+ return 0; // avoid exception caused by division by zero\r
+ }\r
+ p = 1048576.0 - (double)adc_P;\r
+ p = (p - (var2 / 4096.0)) * 6250.0 / var1;\r
+ var1 = ((double)dig_P9) * p * p / 2147483648.0;\r
+ var2 = p * ((double)dig_P8) / 32768.0;\r
+ p = p + (var1 + var2 + ((double)dig_P7)) / 16.0;\r
+ return p;\r
+}\r
+\r
+void bmp280ConvertInt_df(int32_t * temperature,uint32_t *pressure,uint8_t oss) {\r
+ //bmp280Init();\r
+ double var1, var2, T;\r
+ int32_t adc_T=bmp280ReadTemp();\r
+ var1 = (((double)adc_T)/16384.0 - ((double)dig_T1)/1024.0) * ((double)dig_T2);\r
+ var2 = ((((double)adc_T)/131072.0 - ((double)dig_T1)/8192.0) *\r
+ (((double)adc_T)/131072.0 - ((double) dig_T1)/8192.0)) * ((double)dig_T3);\r
+ t_fine = (BMP280_S32_t)(var1 + var2);\r
+ T = (var1 + var2) / 5120.0;\r
+\r
+ int32_t adc_P= bmp280ReadPressure(oss);\r
+ double p;\r
+ var1 = ((double)t_fine/2.0) - 64000.0;\r
+ var2 = var1 * var1 * ((double)dig_P6) / 32768.0;\r
+ var2 = var2 + var1 * ((double)dig_P5) * 2.0;\r
+ var2 = (var2/4.0)+(((double)dig_P4) * 65536.0);\r
+ var1 = (((double)dig_P3) * var1 * var1 / 524288.0 + ((double)dig_P2) * var1) / 524288.0;\r
+ var1 = (1.0 + var1 / 32768.0)*((double)dig_P1);\r
+ if (var1 == 0.0)\r
+ {\r
+ return ; // avoid exception caused by division by zero\r
+ }\r
+ p = 1048576.0 - (double)adc_P;\r
+ p = (p - (var2 / 4096.0)) * 6250.0 / var1;\r
+ var1 = ((double)dig_P9) * p * p / 2147483648.0;\r
+ var2 = p * ((double)dig_P8) / 32768.0;\r
+ p = p + (var1 + var2 + ((double)dig_P7)) / 16.0;\r
+ *temperature=(int32_t) (T*100.0);\r
+ *pressure=(uint32_t) p;\r
+ return;\r
+}\r
+\r
+\r