int64_t var1,var2,p; var1=((int64_t)bmp280Cal1.t_fine)-128000; var2=var1*var1*(int64_t)bmp280Cal1.dig_P6; var2=var2+((var1*(int64_t)bmp280Cal1.dig_P5)<<17); var2=var2+(((int64_t)bmp280Cal1.dig_P4)<<35); var1=((var1*var1*(int64_t)bmp280Cal1.dig_P3)>>8)+((var1*(int64_t)bmp280Cal1.dig_P2)<<12); var1=(((((int64_t)1)<<47)+var1))*((int64_t)bmp280Cal1.dig_P1)>>33; if (var1==0) delay_ms(10); p=1048576- bmp280RawPressure1; p=(((p<<31)-var2)*3125)/var1; var1=(((int64_t)bmp280Cal1.dig_P9)*(p>>13)*(p>>13))>>25; var2=(((int64_t)bmp280Cal1.dig_P8)*p)>>19; p=((p+var1+var2)>>8)+(((int64_t)bmp280Cal1.dig_P7)<<4); p=p/25600.0; longbmp280_GetValue(void) { long adc_T; long adc_P; long var1, var2, t_fine, T, p; adc_T =bmp280_MultipleReadThree(BMP280_TEMP_ADDR); adc_P =bmp280_MultipleReadThree(BMP280_PRESS_ADDR); if(adc_P == 0) { return 0; } //Temperature var1 = (((double)adc_T)/16384.0-((double)dig_T1)/1024.0)*((double)dig_T2); var2 =((((double)adc_T)/131072.0-((double)dig_T1)/8192.0)*(((double)adc_T) /131072.0-((double)dig_T1)/8192.0))*((double)dig_T3); t_fine = (unsigned long)(var1+var2); T = (var1+var2)/5120.0; var1 = ((double)t_fine/2.0)-64000.0; var2 = var1*var1*((double)dig_P6)/32768.0; var2 = var2 +var1*((double)dig_P5)*2.0; var2 =(var2/4.0)+(((double)dig_P4)*65536.0); var1 = (((double)dig_P3)*var1*var1/524288.0+((double)dig_P2)*var1)/524288.0; var1 = (1.0+var1/32768.0)*((double)dig_P1); p = 1048576.0-(double)adc_P; p = (p-(var2/4096.0))*6250.0/var1; var1 = ((double)dig_P9)*p*p/2147483648.0; var2 = p*((double)dig_P8)/32768.0; p = p+(var1+var2+((double)dig_P7))/16.0; return p; }
|