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 "config.h"
|
||||
#include "display_ui.h"
|
||||
#include "sensors.h"
|
||||
|
||||
static void i2cScan() {
|
||||
Serial.println(F("I2C scan:"));
|
||||
@@ -25,7 +26,14 @@ void setup() {
|
||||
|
||||
displayBegin();
|
||||
displaySplash("Weather", "Predictor v0.1");
|
||||
|
||||
if (!sensorsBegin()) Serial.println(F("BMP180 not found!"));
|
||||
}
|
||||
|
||||
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