void processBarometerMeasurements(const uint8_t *buffer) { static uint32_t rawPressure = 0; static int16_t rawTemp = 0; rawPressure = ((uint32_t) buffer[2] << 16) | ((uint32_t) buffer[1] << 8) | buffer[0]; rawTemp = ((int16_t) buffer[4] << 8) | buffer[3]; sensors.baro.pressure = (float) rawPressure / LPS25H_LSB_PER_MBAR; sensors.baro.temperature = LPS25H_TEMP_OFFSET + ((float) rawTemp / LPS25H_LSB_PER_CELSIUS); sensors.baro.asl = lps25hPressureToAltitude(&sensors.baro.pressure); }
void processBarometerMeasurements(const uint8_t *buffer) { static uint32_t rawPressure = 0; static int16_t rawTemp = 0; // Check if there is a new pressure update if (buffer[0] & 0x02) { rawPressure = ((uint32_t) buffer[3] << 16) | ((uint32_t) buffer[2] << 8) | buffer[1]; } // Check if there is a new temp update if (buffer[0] & 0x01) { rawTemp = ((int16_t) buffer[5] << 8) | buffer[4]; } sensors.baro.pressure = (float) rawPressure / LPS25H_LSB_PER_MBAR; sensors.baro.temperature = LPS25H_TEMP_OFFSET + ((float) rawTemp / LPS25H_LSB_PER_CELSIUS); sensors.baro.asl = lps25hPressureToAltitude(&sensors.baro.pressure); }
bool lps25hGetData(float* pressure, float* temperature, float* asl) { uint8_t data[5]; uint32_t rawPressure; int16_t rawTemp; bool status; status = i2cdevRead(I2Cx, devAddr, LPS25H_PRESS_OUT_XL | LPS25H_ADDR_AUTO_INC, 5, data); rawPressure = ((uint32_t)data[2] << 16) | ((uint32_t)data[1] << 8) | data[0]; *pressure = (float)rawPressure / LPS25H_LSB_PER_MBAR; rawTemp = ((int16_t)data[4] << 8) | data[3]; *temperature = LPS25H_TEMP_OFFSET + ((float)rawTemp / LPS25H_LSB_PER_CELSIUS); *asl = lps25hPressureToAltitude(pressure); return status; }
bool lps25hGetData(float* pressure, float* temperature, float* asl) { uint8_t data[5]; uint32_t rawPressure; int16_t rawTemp; bool status; status = i2cdevRead(I2Cx, devAddr, LPS25H_PRESS_OUT_XL | LPS25H_ADDR_AUTO_INC, 3, data); // If LPS25H moving avg filter is activated the temp must be read out in separate read. status &= i2cdevRead(I2Cx, devAddr, LPS25H_TEMP_OUT_L | LPS25H_ADDR_AUTO_INC, 2, &data[3]); rawPressure = ((uint32_t)data[2] << 16) | ((uint32_t)data[1] << 8) | data[0]; *pressure = (float)rawPressure / LPS25H_LSB_PER_MBAR; rawTemp = ((int16_t)data[4] << 8) | data[3]; *temperature = LPS25H_TEMP_OFFSET + ((float)rawTemp / LPS25H_LSB_PER_CELSIUS); *asl = lps25hPressureToAltitude(pressure); return status; }