Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: CalibrateMagneto QuaternionMath
Fork of SML2 by
Diff: Barometer.cpp
- Revision:
- 46:fd5a62296b12
- Parent:
- 40:8e852115fe55
--- a/Barometer.cpp Wed May 27 11:45:00 2015 +0000
+++ b/Barometer.cpp Wed May 27 13:01:43 2015 +0000
@@ -14,56 +14,62 @@
}
}
-bool Barometer::powerOn() {
+bool Barometer::powerOn()
+{
write_reg(0xE0, 0xB6); // reset
wait_ms(2); // cf. datasheet page 8, t_startup
return read_reg(0xD0) == 0x58; // verify chip ID
}
-void Barometer::powerOff() {
+void Barometer::powerOff()
+{
// nothing to do
}
-void Barometer::start() {
+void Barometer::start()
+{
// reset our initial calibration
nsamples = 0;
sum = 0;
avg = 0;
-
+
// set parameters for Bosch-recommended "Indoor navigation" preset
write_reg(0xF5, 0x10); // 0.5ms t_standby, IIR coefficient=16
write_reg(0xF4, 0x57); // 2x oversampling for temperature, 16x for pressure and power mode "normal"
}
-void Barometer::stop() {
+void Barometer::stop()
+{
write_reg(0xF4, 0x54); // keep the oversampling settings but set power mode to "sleep"
}
-Vector3 Barometer::read() {
+Vector3 Barometer::read()
+{
uint8_t buffer[6];
/*
for (int i = 0; i < 6; i++)
buffer[i] = read_reg(0xF7 + i);
*/
-
+
read_reg(0xF7, buffer, sizeof buffer);
-
+
const uint32_t adc_P = ((buffer[0] << 16) | (buffer[1] << 8) | buffer[2]) >> 4;
const uint32_t adc_T = ((buffer[3] << 16) | (buffer[4] << 8) | buffer[5]) >> 4;
-
+
const float celsius = bmp280_val_to_temp(adc_T) - 20; // 20 degree offset (?)
const float pa = bmp280_val_to_pa(adc_P);
const float centimeter = pressureToAltitude(pa) * 100.0;
-
+
if (++nsamples < 10) {
sum += centimeter;
avg = sum / nsamples;
}
-
+
return Vector3(celsius, pa, centimeter - avg);
}
-float Barometer::pressureToAltitude(const float pa) const {
+float Barometer::pressureToAltitude(const float pa) const
+{
return -44330.7692 * (pow(pa * 0.0000098692, 0.1902632365) - 1);
}
@@ -83,9 +89,9 @@
int16_t dig_P8;
int16_t dig_P9;
} cal_data;
-
+
read_reg(0x88, (uint8_t*)&cal_data, sizeof cal_data);
-
+
dig_T1 = cal_data.dig_T1;
dig_T2 = cal_data.dig_T2;
dig_T3 = cal_data.dig_T3;
