feat: BMP180 read and sea-level pressure conversion
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "display_ui.h"
|
#include "display_ui.h"
|
||||||
|
#include "sensors.h"
|
||||||
|
|
||||||
static void i2cScan() {
|
static void i2cScan() {
|
||||||
Serial.println(F("I2C scan:"));
|
Serial.println(F("I2C scan:"));
|
||||||
@@ -25,7 +26,14 @@ void setup() {
|
|||||||
|
|
||||||
displayBegin();
|
displayBegin();
|
||||||
displaySplash("Weather", "Predictor v0.1");
|
displaySplash("Weather", "Predictor v0.1");
|
||||||
|
|
||||||
|
if (!sensorsBegin()) Serial.println(F("BMP180 not found!"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
|
float abs_ = readAbsPressureHpa();
|
||||||
|
float msl = toSeaLevelHpa(abs_, DEFAULT_ALTITUDE_M);
|
||||||
|
Serial.printf("abs=%.1f hPa msl=%.1f hPa t=%.1f C\n",
|
||||||
|
abs_, msl, readTemperatureC());
|
||||||
|
delay(2000);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
#include <Adafruit_BMP085.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include "sensors.h"
|
||||||
|
|
||||||
|
static Adafruit_BMP085 bmp;
|
||||||
|
|
||||||
|
bool sensorsBegin() {
|
||||||
|
return bmp.begin(); // uses Wire (already started on D6/D1), addr 0x77
|
||||||
|
}
|
||||||
|
|
||||||
|
float readAbsPressureHpa() {
|
||||||
|
return bmp.readPressure() / 100.0f; // Pa -> hPa
|
||||||
|
}
|
||||||
|
|
||||||
|
float readTemperatureC() {
|
||||||
|
return bmp.readTemperature();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Standard barometric reduction to sea level.
|
||||||
|
float toSeaLevelHpa(float absHpa, float altitudeM) {
|
||||||
|
return absHpa / powf(1.0f - (altitudeM / 44330.0f), 5.255f);
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
bool sensorsBegin();
|
||||||
|
float readAbsPressureHpa(); // absolute (station) pressure, hPa
|
||||||
|
float readTemperatureC(); // degrees C
|
||||||
|
float toSeaLevelHpa(float absHpa, float altitudeM); // mean-sea-level pressure, hPa
|
||||||
Reference in New Issue
Block a user