113 lines
3.4 KiB
C
113 lines
3.4 KiB
C
#ifndef bme280_H
|
|
#define bme280_H
|
|
|
|
#include <avr/io.h>
|
|
#include <stdlib.h>
|
|
#include <stdbool.h>
|
|
#include <stdio.h>
|
|
#include "device.h"
|
|
#include "util/time.h"
|
|
|
|
#define BME280_TEMPERATURE_ADJUSTMENT 0
|
|
|
|
#define BME280_TEMP_UNDEFINED -274
|
|
#define BME280_PRESSURE_UNDEFINED -1
|
|
#define BME280_HUMIDITY_UNDEFINED -1
|
|
|
|
#define BME280_REGISTER_DIG_T1 0x88
|
|
#define BME280_REGISTER_DIG_T2 0x8A
|
|
#define BME280_REGISTER_DIG_T3 0x8C
|
|
#define BME280_REGISTER_DIG_P1 0x8E
|
|
#define BME280_REGISTER_DIG_P2 0x90
|
|
#define BME280_REGISTER_DIG_P3 0x92
|
|
#define BME280_REGISTER_DIG_P4 0x94
|
|
#define BME280_REGISTER_DIG_P5 0x96
|
|
#define BME280_REGISTER_DIG_P6 0x98
|
|
#define BME280_REGISTER_DIG_P7 0x9A
|
|
#define BME280_REGISTER_DIG_P8 0x9C
|
|
#define BME280_REGISTER_DIG_P9 0x9E
|
|
#define BME280_REGISTER_DIG_H1 0xA1
|
|
#define BME280_REGISTER_DIG_H2 0xE1
|
|
#define BME280_REGISTER_DIG_H3 0xE3
|
|
#define BME280_REGISTER_DIG_H4 0xE4
|
|
#define BME280_REGISTER_DIG_H5 0xE5
|
|
#define BME280_REGISTER_DIG_H6 0xE7
|
|
#define BME280_REGISTER_CHIPID 0xD0
|
|
#define BME280_REGISTER_VERSION 0xD1
|
|
#define BME280_REGISTER_SOFTRESET 0xE0
|
|
#define BME280_REGISTER_CAL26 0xE1 // R calibration stored in 0xE1-0xF0
|
|
#define BME280_REGISTER_CONTROLHUMID 0xF2
|
|
#define BME280_REGISTER_STATUS 0XF3
|
|
#define BME280_REGISTER_CONTROL 0xF4
|
|
#define BME280_REGISTER_CONFIG 0xF5
|
|
#define BME280_REGISTER_PRESSUREDATA 0xF7
|
|
#define BME280_REGISTER_TEMPDATA 0xFA
|
|
#define BME280_REGISTER_HUMIDDATA 0xFD
|
|
|
|
#define BME280_SAMPLING_NONE 0b000
|
|
#define BME280_SAMPLING_X1 0b001
|
|
#define BME280_SAMPLING_X2 0b010
|
|
#define BME280_SAMPLING_X4 0b011
|
|
#define BME280_SAMPLING_X8 0b100
|
|
#define BME280_SAMPLING_X16 0b101
|
|
|
|
#define BME280_MODE_SLEEP 0b00
|
|
#define BME280_MODE_FORCED 0b01
|
|
#define BME280_MODE_NORMAL 0b11
|
|
|
|
#define BME280_FILTER_OFF 0b000
|
|
#define BME280_FILTER_X2 0b001
|
|
#define BME280_FILTER_X4 0b010
|
|
#define BME280_FILTER_X8 0b011
|
|
#define BME280_FILTER_X16 0b100
|
|
|
|
#define BME280_STANDBY_MS_0_5 0b000
|
|
#define BME280_STANDBY_MS_10 0b110
|
|
#define BME280_STANDBY_MS_20 0b111
|
|
#define BME280_STANDBY_MS_62_5 0b001
|
|
#define BME280_STANDBY_MS_125 0b010
|
|
#define BME280_STANDBY_MS_250 0b011
|
|
#define BME280_STANDBY_MS_500 0b100
|
|
#define BME280_STANDBY_MS_1000 0b101
|
|
|
|
|
|
typedef struct {
|
|
uint16_t dig_T1; // temperature compensation value
|
|
int16_t dig_T2; // temperature compensation value
|
|
int16_t dig_T3; // temperature compensation value
|
|
|
|
uint16_t dig_P1; // pressure compensation value
|
|
int16_t dig_P2; // pressure compensation value
|
|
int16_t dig_P3; // pressure compensation value
|
|
int16_t dig_P4; // pressure compensation value
|
|
int16_t dig_P5; // pressure compensation value
|
|
int16_t dig_P6; // pressure compensation value
|
|
int16_t dig_P7; // pressure compensation value
|
|
int16_t dig_P8; // pressure compensation value
|
|
int16_t dig_P9; // pressure compensation value
|
|
|
|
uint8_t dig_H1; // humidity compensation value
|
|
int16_t dig_H2; // humidity compensation value
|
|
uint8_t dig_H3; // humidity compensation value
|
|
int16_t dig_H4; // humidity compensation value
|
|
int16_t dig_H5; // humidity compensation value
|
|
int8_t dig_H6; // humidity compensation value
|
|
} bme280_calib_data;
|
|
|
|
bool bme280_init(uint8_t cs_usrio_pin);
|
|
bool bme280_poll(void);
|
|
|
|
bool bme280_installed;
|
|
bool bme280_ready;
|
|
uint8_t bme280_cs_usrio_pin;
|
|
|
|
int32_t bme280_temperature_fine_adjust;
|
|
int32_t bme280_temperature_fine;
|
|
|
|
float bme280_temperature;
|
|
float bme280_pressure;
|
|
float bme280_humidity;
|
|
|
|
bme280_calib_data bme280_calibration;
|
|
|
|
#endif |