| 118 | |
| 119 | |
| 120 | int MS5611::read(uint8_t bits) |
| 121 | { |
| 122 | // VARIABLES NAMES BASED ON DATASHEET |
| 123 | // ALL MAGIC NUMBERS ARE FROM DATASHEET |
| 124 | |
| 125 | convert(MS5611_CMD_CONVERT_D1, bits); |
| 126 | if (_result) return _result; |
| 127 | // NOTE: D1 and D2 seem reserved in MBED (NANO BLE) |
| 128 | uint32_t _D1 = readADC(); |
| 129 | if (_result) return _result; |
| 130 | |
| 131 | convert(MS5611_CMD_CONVERT_D2, bits); |
| 132 | if (_result) return _result; |
| 133 | uint32_t _D2 = readADC(); |
| 134 | if (_result) return _result; |
| 135 | |
| 136 | // Serial.println(_D1); |
| 137 | // Serial.println(_D2); |
| 138 | |
| 139 | // TEST VALUES - comment lines above |
| 140 | // uint32_t _D1 = 9085466; |
| 141 | // uint32_t _D2 = 8569150; |
| 142 | |
| 143 | // TEMP & PRESS MATH - PAGE 7/20 |
| 144 | float dT = _D2 - C[5]; |
| 145 | _temperature = 2000 + dT * C[6]; |
| 146 | |
| 147 | float offset = C[2] + dT * C[4]; |
| 148 | float sens = C[1] + dT * C[3]; |
| 149 | |
| 150 | if (_compensation) |
| 151 | { |
| 152 | // SECOND ORDER COMPENSATION - PAGE 8/20 |
| 153 | // COMMENT OUT < 2000 CORRECTION IF NOT NEEDED |
| 154 | // NOTE TEMPERATURE IS IN 0.01 C |
| 155 | if (_temperature < 2000) |
| 156 | { |
| 157 | float T2 = dT * dT * 4.6566128731E-10; |
| 158 | float t = (_temperature - 2000) * (_temperature - 2000); |
| 159 | float offset2 = 2.5 * t; |
| 160 | float sens2 = 1.25 * t; |
| 161 | // COMMENT OUT < -1500 CORRECTION IF NOT NEEDED |
| 162 | if (_temperature < -1500) |
| 163 | { |
| 164 | t = (_temperature + 1500) * (_temperature + 1500); |
| 165 | offset2 += 7 * t; |
| 166 | sens2 += 5.5 * t; |
| 167 | } |
| 168 | _temperature -= T2; |
| 169 | offset -= offset2; |
| 170 | sens -= sens2; |
| 171 | } |
| 172 | // END SECOND ORDER COMPENSATION |
| 173 | } |
| 174 | |
| 175 | _pressure = (_D1 * sens * 4.76837158205E-7 - offset) * 3.051757813E-5; |
| 176 | |
| 177 | _lastRead = millis(); |