burst read temp & pressure
This commit is contained in:
parent
30003e7b98
commit
b6369f7a6b
|
|
@ -192,6 +192,50 @@ int16_t Adafruit_BME280::readS16_LE(byte reg)
|
|||
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Reads a 24 bit value over I2C
|
||||
*/
|
||||
/**************************************************************************/
|
||||
|
||||
uint32_t Adafruit_BME280::read24(byte reg)
|
||||
{
|
||||
uint32_t value;
|
||||
|
||||
if (_cs == -1) {
|
||||
Wire.beginTransmission((uint8_t)_i2caddr);
|
||||
Wire.write((uint8_t)reg);
|
||||
Wire.endTransmission();
|
||||
Wire.requestFrom((uint8_t)_i2caddr, (byte)3);
|
||||
|
||||
value = Wire.read();
|
||||
value <<= 8;
|
||||
value |= Wire.read();
|
||||
value <<= 8;
|
||||
value |= Wire.read();
|
||||
|
||||
} else {
|
||||
if (_sck == -1)
|
||||
SPI.beginTransaction(SPISettings(500000, MSBFIRST, SPI_MODE0));
|
||||
digitalWrite(_cs, LOW);
|
||||
spixfer(reg | 0x80); // read, bit 7 high
|
||||
|
||||
value = spixfer(0);
|
||||
value <<= 8;
|
||||
value |= spixfer(0);
|
||||
value <<= 8;
|
||||
value |= spixfer(0);
|
||||
|
||||
digitalWrite(_cs, HIGH);
|
||||
if (_sck == -1)
|
||||
SPI.endTransaction(); // release the SPI bus
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
/*!
|
||||
@brief Reads the factory-set coefficients
|
||||
|
|
@ -230,9 +274,7 @@ float Adafruit_BME280::readTemperature(void)
|
|||
{
|
||||
int32_t var1, var2;
|
||||
|
||||
int32_t adc_T = read16(BME280_REGISTER_TEMPDATA);
|
||||
adc_T <<= 8;
|
||||
adc_T |= read8(BME280_REGISTER_TEMPDATA+2);
|
||||
int32_t adc_T = read24(BME280_REGISTER_TEMPDATA);
|
||||
adc_T >>= 4;
|
||||
|
||||
var1 = ((((adc_T>>3) - ((int32_t)_bme280_calib.dig_T1 <<1))) *
|
||||
|
|
@ -258,9 +300,7 @@ float Adafruit_BME280::readPressure(void) {
|
|||
|
||||
readTemperature(); // must be done first to get t_fine
|
||||
|
||||
int32_t adc_P = read16(BME280_REGISTER_PRESSUREDATA);
|
||||
adc_P <<= 8;
|
||||
adc_P |= read8(BME280_REGISTER_PRESSUREDATA+2);
|
||||
int32_t adc_P = read24(BME280_REGISTER_PRESSUREDATA);
|
||||
adc_P >>= 4;
|
||||
|
||||
var1 = ((int64_t)t_fine) - 128000;
|
||||
|
|
|
|||
|
|
@ -24,13 +24,7 @@
|
|||
#endif
|
||||
|
||||
#include <Adafruit_Sensor.h>
|
||||
|
||||
#ifdef __AVR_ATtiny85__
|
||||
#include "TinyWireM.h"
|
||||
#define Wire TinyWireM
|
||||
#else
|
||||
#include <Wire.h>
|
||||
#endif
|
||||
#include <Wire.h>
|
||||
|
||||
/*=========================================================================
|
||||
I2C ADDRESS/BITS
|
||||
|
|
@ -150,6 +144,7 @@ class Adafruit_BME280
|
|||
void write8(byte reg, byte value);
|
||||
uint8_t read8(byte reg);
|
||||
uint16_t read16(byte reg);
|
||||
uint32_t read24(byte reg);
|
||||
int16_t readS16(byte reg);
|
||||
uint16_t read16_LE(byte reg); // little endian
|
||||
int16_t readS16_LE(byte reg); // little endian
|
||||
|
|
|
|||
Loading…
Reference in New Issue