- bmp280.c: detect BME280 (chip_id 0x60) vs BMP280 (0x58) at init - bmp280.c: read humidity calibration (dig_H1–H6) from 0xA1 and 0xE1–0xE7 - bmp280.c: set ctrl_hum (0xF2, osrs_h=×16) before ctrl_meas — hardware req - bmp280.c: add bmp280_read_humidity() — float compensation (FPv5-SP FPU), returns %RH × 10; -1 if chip is BMP280 or not initialised - bmp280.h: add bmp280_read_humidity() declaration + timeout note - main.c: baro_ok → baro_chip (stores chip_id for BME280 detection) - main.c: telemetry adds t (°C×10), pa (hPa×10) for all barometers; adds h (%RH×10) for BME280 only; alt unchanged - ui/index.html: hidden TEMP/HUMIDITY/PRESSURE rows, revealed on first packet containing t/h/pa fields; values shown with 1 dp I2C hang safety: all HAL_I2C_Mem_Read/Write use 100ms timeouts, so missing hardware (NAK) returns in <1ms, not after a hang. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
29 lines
846 B
C
29 lines
846 B
C
#ifndef BMP280_H
|
||
#define BMP280_H
|
||
|
||
#include <stdint.h>
|
||
|
||
/*
|
||
* BMP280 / BME280 barometer driver.
|
||
*
|
||
* Probes I2C1 at 0x76 then 0x77.
|
||
* Returns chip_id (0x58=BMP280, 0x60=BME280) on success, negative if not found.
|
||
* Requires i2c1_init() to have been called first.
|
||
*
|
||
* All I2C operations use 100ms timeouts — init will not hang on missing hardware.
|
||
*/
|
||
int bmp280_init(void);
|
||
void bmp280_read(int32_t *pressure_pa, int16_t *temp_x10);
|
||
|
||
/*
|
||
* BME280-only humidity readout. Call AFTER bmp280_read() (uses cached t_fine).
|
||
* Returns humidity in %RH × 10 (e.g. 500 = 50.0 %RH).
|
||
* Returns -1 if chip is BMP280 (no humidity) or not initialised.
|
||
*/
|
||
int16_t bmp280_read_humidity(void);
|
||
|
||
/* Convert pressure (Pa) to altitude above sea level (cm), ISA p0=101325 Pa. */
|
||
int32_t bmp280_pressure_to_alt_cm(int32_t pressure_pa);
|
||
|
||
#endif /* BMP280_H */
|