High resolution barometer and altimeter using i2c mode
Fork of ms5611 by
Diff: ms5611.cpp
- Revision:
- 10:44e5b491a88c
- Parent:
- 8:461f68bc94f2
- Child:
- 11:e0417b67a4b5
--- a/ms5611.cpp Tue Apr 28 23:36:22 2015 +0000 +++ b/ms5611.cpp Tue Dec 01 17:23:12 2015 +0000 @@ -300,25 +300,25 @@ int64_t dT = D2 - ((uint64_t)C[5] << 8); int64_t OFF = ((uint32_t)C[2] << 16) + ((dT * (C[4]) >> 7)); //was OFF = (C[2] << 17) + dT * C[4] / (1 << 6); int64_t SENS = ((uint32_t)C[1] << 15) + ((dT * (C[3]) >> 8)); //was SENS = (C[1] << 16) + dT * C[3] / (1 << 7); - T = (2000 + (((uint64_t)dT * C[6]) / (float)(1 << 23))) / 100; + T = (float)(2000 + (((uint64_t)dT * C[6]) / (float)(1 << 23))) / 100.0; int32_t TEMP = 2000 + (int64_t)dT * (int64_t)C[6] / (int64_t)(1 << 23); if(TEMP < 2000) { // if temperature lower than 20 Celsius - float T1 = (TEMP - 2000) * (TEMP - 2000); - int64_t OFF1 = (5 * T1) / 2; - int64_t SENS1 = (5 * T1) / 4; + float T1 = ((float)TEMP - 2000.0) * ((float)TEMP - 2000.0); + int64_t OFF1 = (5 * (int64_t)T1) >> 1; + int64_t SENS1 = (5 * (int64_t)T1) >> 2; if(TEMP < -1500) { // if temperature lower than -15 Celsius - T1 = (TEMP + 1500) * (TEMP + 1500); - OFF1 += 7 * T1; - SENS1 += 11 * T1 / 2; + T1 = ((float)TEMP + 1500.0) * ((float)TEMP + 1500.0); + OFF1 += 7 * (int64_t)T1; + SENS1 += 11 * (int64_t)T1 >> 1; } OFF -= OFF1; SENS -= SENS1; - T = (float)TEMP / 100; + T = (float)TEMP / 100.0; } // int64_t P1 = ((((int64_t)D1 * SENS) >> 21) - OFF) >> 15; - P = ((((int64_t)D1 * SENS ) >> 21) - OFF) / (double) (1 << 15) / 100.0; + P = (float)(((((int64_t)D1 * SENS ) >> 21) - OFF) / (double) (1 << 15)) / 100.0; } //********************************************************