111 #define CONCAT_BYTES(msb, lsb) \
112 (((uint16_t)msb << 8) | (uint16_t)lsb)
114 #define _BV(bit) (1 << (bit))
155 bool begin(
const uint32_t i2cSpeed);
156 bool begin(
const uint8_t chipSelect);
157 bool begin(
const uint32_t i2cSpeed,
const uint8_t i2cAddress);
158 bool begin(
const uint8_t chipSelect,
const uint8_t mosi,
159 const uint8_t miso,
const uint8_t sck);
161 const uint8_t sampling = UINT8_MAX)
const;
162 bool setGas(uint16_t GasTemp, uint16_t GasMillis)
const;
163 uint8_t
setIIRFilter(
const uint8_t iirFilterSetting = UINT8_MAX)
const;
165 int32_t &press, int32_t &gas,
166 const bool waitSwitch =
true);
173 uint8_t
readByte(
const uint8_t addr)
const;
181 int8_t
_H3,
_H4,
_H5,
_H7,
_G1,
_G3,
_T3,
_P3,
_P6,
_P7,
_res_heat,
200 template <
typename T>
201 uint8_t &
getData(
const uint8_t addr, T &value)
const {
209 uint8_t * bytePtr = (uint8_t *)&value;
210 static uint8_t structSize =
sizeof(T);
215 Wire.endTransmission();
217 structSize = Wire.available();
218 for (uint8_t i = 0; i < structSize; i++)
219 *bytePtr++ = Wire.read();
225 SPI.beginTransaction(
226 SPISettings(
SPI_HERZ, MSBFIRST, SPI_MODE0));
227 digitalWrite(
_cs, LOW);
228 SPI.transfer(addr | 0x80);
229 for (uint8_t i = 0; i < structSize; i++)
230 *bytePtr++ = SPI.transfer(0);
231 digitalWrite(
_cs, HIGH);
232 SPI.endTransaction();
236 digitalWrite(
_cs, LOW);
237 for (j = 7; j >= 0; j--)
239 digitalWrite(
_sck, LOW);
240 digitalWrite(
_mosi, ((addr) | 0x80) & (1 << j));
241 digitalWrite(
_sck, HIGH);
243 for (i = 0; i < structSize; i++)
246 for (j = 7; j >= 0; j--)
249 digitalWrite(
_sck, LOW);
250 digitalWrite(
_sck, HIGH);
251 if (digitalRead(
_miso)) reply |= 1;
255 digitalWrite(
_cs, HIGH);
260 template <
typename T>
261 uint8_t &
putData(
const uint8_t addr,
const T &value)
const {
269 const uint8_t *bytePtr = (
const uint8_t *)&value;
270 static uint8_t structSize =
sizeof(T);
275 for (uint8_t i = 0; i <
sizeof(T); i++)
276 Wire.write(*bytePtr++);
277 Wire.endTransmission();
281 SPI.beginTransaction(
282 SPISettings(
SPI_HERZ, MSBFIRST, SPI_MODE0));
283 digitalWrite(
_cs, LOW);
284 SPI.transfer(addr & ~0x80);
285 for (uint8_t i = 0; i < structSize; i++) {
286 SPI.transfer(*bytePtr++);
288 digitalWrite(
_cs, HIGH);
289 SPI.endTransaction();
294 for (i = 0; i < structSize; i++)
297 digitalWrite(
_cs, LOW);
298 for (j = 7; j >= 0; j--)
300 digitalWrite(
_sck, LOW);
301 digitalWrite(
_mosi, (addr & ~0x80) & (1 << j));
302 digitalWrite(
_sck, HIGH);
304 for (j = 7; j >= 0; j--)
307 digitalWrite(
_sck, LOW);
308 digitalWrite(
_mosi, *bytePtr & (1 << j));
309 digitalWrite(
_sck, HIGH);
311 digitalWrite(
_cs, HIGH);
iirFilterTypes
Definition BME280.h:155
oversamplingTypes
Definition BME280.h:144
sensorTypes
Definition BME280.h:136
const uint32_t I2C_STANDARD_MODE
Default normal I2C 100KHz speed.
Definition Zanshin_BME680.h:121
@ IIR4
Definition Zanshin_BME680.h:144
@ UnknownIIR
Definition Zanshin_BME680.h:144
@ IIROff
Definition Zanshin_BME680.h:144
@ IIR64
Definition Zanshin_BME680.h:144
@ IIR2
Definition Zanshin_BME680.h:144
@ IIR32
Definition Zanshin_BME680.h:144
@ IIR128
Definition Zanshin_BME680.h:144
@ IIR8
Definition Zanshin_BME680.h:144
@ IIR16
Definition Zanshin_BME680.h:144
const uint32_t I2C_HIGH_SPEED_MODE
Turbo mode.
Definition Zanshin_BME680.h:124
const uint32_t I2C_FAST_MODE
Fast mode.
Definition Zanshin_BME680.h:122
@ Oversample4
Definition Zanshin_BME680.h:138
@ Oversample8
Definition Zanshin_BME680.h:139
@ Oversample2
Definition Zanshin_BME680.h:137
@ UnknownOversample
Definition Zanshin_BME680.h:141
@ Oversample1
Definition Zanshin_BME680.h:136
@ SensorOff
Definition Zanshin_BME680.h:135
@ Oversample16
Definition Zanshin_BME680.h:140
const uint32_t SPI_HERZ
SPI speed in Hz.
Definition Zanshin_BME680.h:126
const uint32_t I2C_FAST_MODE_PLUS
Really fast mode.
Definition Zanshin_BME680.h:123
@ UnknownSensor
Definition Zanshin_BME680.h:132
@ GasSensor
Definition Zanshin_BME680.h:132
@ HumiditySensor
Definition Zanshin_BME680.h:132
@ TemperatureSensor
Definition Zanshin_BME680.h:132
@ PressureSensor
Definition Zanshin_BME680.h:132
Main BME680 class for the temperature / humidity / pressure sensor.
Definition Zanshin_BME680.h:146
uint16_t _T1
Definition Zanshin_BME680.h:183
uint8_t getI2CAddress() const
Definition Zanshin_BME680.cpp:396
int32_t _Gas
signed 32bit configuration vars
Definition Zanshin_BME680.h:185
uint16_t _H2
Definition Zanshin_BME680.h:183
uint8_t _res_heat_range
unsigned configuration vars
Definition Zanshin_BME680.h:180
uint8_t _P10
Definition Zanshin_BME680.h:180
uint8_t _cs
Definition Zanshin_BME680.h:179
void waitForReadings() const
Wait for readings to finish.
Definition Zanshin_BME680.cpp:506
int16_t _T2
Definition Zanshin_BME680.h:184
uint8_t setIIRFilter(const uint8_t iirFilterSetting=UINT8_MAX) const
Definition Zanshin_BME680.cpp:360
int8_t _H7
Definition Zanshin_BME680.h:181
int8_t _H4
Definition Zanshin_BME680.h:181
uint16_t _H1
Definition Zanshin_BME680.h:183
BME680_Class()
Definition Zanshin_BME680.cpp:82
bool measuring() const
true if currently measuring
Definition Zanshin_BME680.cpp:560
uint8_t setOversampling(const uint8_t sensor, const uint8_t sampling=UINT8_MAX) const
Definition Zanshin_BME680.cpp:298
int8_t _P3
Definition Zanshin_BME680.h:181
int32_t _Humidity
Definition Zanshin_BME680.h:185
int32_t _tfine
Definition Zanshin_BME680.h:185
void reset()
Definition Zanshin_BME680.cpp:221
int8_t _res_heat
Definition Zanshin_BME680.h:181
int8_t _G3
Definition Zanshin_BME680.h:181
int16_t _P5
Definition Zanshin_BME680.h:184
bool commonInitialization()
Common initialization code.
Definition Zanshin_BME680.cpp:182
uint8_t _H6
Definition Zanshin_BME680.h:180
void triggerMeasurement() const
trigger a measurement
Definition Zanshin_BME680.cpp:571
uint8_t & getData(const uint8_t addr, T &value) const
Definition Zanshin_BME680.h:201
int8_t _G1
Definition Zanshin_BME680.h:181
uint8_t _miso
Hardware and software SPI pins.
Definition Zanshin_BME680.h:179
uint8_t getSensorData(int32_t &temp, int32_t &hum, int32_t &press, int32_t &gas, const bool waitSwitch=true)
Definition Zanshin_BME680.cpp:379
uint8_t readSensors(const bool waitSwitch)
read the registers in one burst
Definition Zanshin_BME680.cpp:403
~BME680_Class()
Definition Zanshin_BME680.cpp:88
int16_t _P2
Definition Zanshin_BME680.h:184
uint8_t & putData(const uint8_t addr, const T &value) const
Definition Zanshin_BME680.h:261
int16_t _G2
Definition Zanshin_BME680.h:184
uint16_t _I2CSpeed
Default is I2C speed is unknown.
Definition Zanshin_BME680.h:178
int32_t _Pressure
Definition Zanshin_BME680.h:185
int16_t _P9
signed 16bit configuration vars
Definition Zanshin_BME680.h:184
uint8_t _I2CAddress
Default is I2C address is unknown.
Definition Zanshin_BME680.h:177
int8_t _rng_sw_err
signed configuration vars
Definition Zanshin_BME680.h:182
bool setGas(uint16_t GasTemp, uint16_t GasMillis) const
Definition Zanshin_BME680.cpp:512
int8_t _T3
Definition Zanshin_BME680.h:181
int16_t _P8
Definition Zanshin_BME680.h:184
uint8_t readByte(const uint8_t addr) const
Read byte from register address.
Definition Zanshin_BME680.cpp:208
bool begin()
Definition Zanshin_BME680.cpp:97
int16_t _P4
Definition Zanshin_BME680.h:184
int32_t _Temperature
Definition Zanshin_BME680.h:185
int8_t _P6
Definition Zanshin_BME680.h:181
int8_t _H3
Definition Zanshin_BME680.h:181
void getCalibration()
Load calibration from registers.
Definition Zanshin_BME680.cpp:237
uint16_t _P1
unsigned 16bit configuration vars
Definition Zanshin_BME680.h:183
uint8_t _mosi
Definition Zanshin_BME680.h:179
uint8_t _sck
Definition Zanshin_BME680.h:179
int8_t _P7
Definition Zanshin_BME680.h:181
int8_t _H5
Definition Zanshin_BME680.h:181