getValues method
Returns BME280result with temperature, pressure and humidity (only BME280).
Implementation
BME280result getValues() {
// Read the pressure, temperature, and humidity registers
var buffer = ByteBuffer(
_readByteBlock(pressMsbReg, _model == BME280model.bmp280 ? 6 : 8),
isI2C ? ByteBufferSrc.i2c : ByteBufferSrc.spi,
bitOrder);
// Unpack the raw 20-bit unsigned pressure value
var adcP = ((buffer.getInt8() & 0xff) << 12) |
((buffer.getInt8() & 0xff) << 4) |
((buffer.getInt8() & 0xf0) >> 4);
// Unpack the raw 20-bit unsigned temperature value
var adcT = ((buffer.getInt8() & 0xff) << 12) |
((buffer.getInt8() & 0xff) << 4) |
((buffer.getInt8() & 0xf0) >> 4);
var adcH = 0;
if (_model == BME280model.bme280) {
// Unpack the raw 16-bit unsigned humidity value
adcH = ((buffer.getInt8() & 0xff) << 8) | (buffer.getInt8() & 0xff);
}
var tvar1 = (((adcT >> 3) - (_digT1 << 1)) * _digT2) >> 11;
var tvar2 =
(((((adcT >> 4) - _digT1) * ((adcT >> 4) - _digT1)) >> 12) * _digT3) >>
14;
var tFine = tvar1 + tvar2;
var temp = (tFine * 5 + 128) >> 8;
var pvar1 = tFine - 128000;
var pvar2 = pvar1 * pvar1 * _digP6;
pvar2 = pvar2 + ((pvar1 * _digP5) << 17);
pvar2 = pvar2 + ((_digP4) << 35);
pvar1 = ((pvar1 * pvar1 * _digP3) >> 8) + ((pvar1 * _digP2) << 12);
pvar1 = (((1 << 47) + pvar1)) * _digP1 >> 33;
int pressure;
if (pvar1 == 0) {
pressure = 0; // Avoid exception caused by division by zero
} else {
pressure = 1048576 - adcP;
pressure = (((pressure << 31) - pvar2) * 3125) ~/ pvar1;
pvar1 = (_digP9 * (pressure >> 13) * (pressure >> 13)) >> 25;
pvar2 = (_digP8 * pressure) >> 19;
pressure = ((pressure + pvar1 + pvar2) >> 8) + (_digP7 << 4);
}
var humidity = 0;
if (_model == BME280model.bme280) {
var vX1u32r = tFine - 76800;
vX1u32r =
((((adcH << 14) - (_digH4 << 20) - (_digH5 * vX1u32r)) + 16384) >>
15) *
(((((((vX1u32r * _digH6) >> 10) *
(((vX1u32r * _digH3) >> 11) + 32768)) >>
10) +
2097152) *
_digH2 +
8192) >>
14);
vX1u32r = vX1u32r -
(((((vX1u32r >> 15) * (vX1u32r >> 15)) >> 7) * _digH1) >> 4);
vX1u32r = vX1u32r < 0 ? 0 : vX1u32r;
vX1u32r = vX1u32r > 419430400 ? 419430400 : vX1u32r;
humidity = (vX1u32r) >> 12;
}
return BME280result(temp / 100.0, pressure / 25600.0, humidity / 1024.0);
}