Made the Wire Bus selectable in setup

This commit is contained in:
mjs513 2017-09-12 06:29:13 -04:00
parent 784dc84c81
commit ba0bcdb599
4 changed files with 49 additions and 26 deletions

View File

@ -40,14 +40,33 @@ Adafruit_BME280::Adafruit_BME280(int8_t cspin, int8_t mosipin, int8_t misopin, i
@brief Initialise sensor with given parameters / settings @brief Initialise sensor with given parameters / settings
*/ */
/**************************************************************************/ /**************************************************************************/
bool Adafruit_BME280::begin(uint8_t addr) bool Adafruit_BME280::begin(TwoWire *theWire)
{
_wire = theWire;
_i2caddr = BME280_ADDRESS;
return init();
}
bool Adafruit_BME280::begin(uint8_t addr)
{
_i2caddr = addr;
_wire = &Wire;
return init();
}
bool Adafruit_BME280::begin(uint8_t addr, TwoWire *theWire)
{ {
_i2caddr = addr; _i2caddr = addr;
_wire = theWire;
return init();
}
bool Adafruit_BME280::init()
{
// init I2C or SPI sensor interface // init I2C or SPI sensor interface
if (_cs == -1) { if (_cs == -1) {
// I2C // I2C
Wire.begin(); _wire -> begin();
} else { } else {
digitalWrite(_cs, HIGH); digitalWrite(_cs, HIGH);
pinMode(_cs, OUTPUT); pinMode(_cs, OUTPUT);
@ -149,10 +168,10 @@ uint8_t Adafruit_BME280::spixfer(uint8_t x) {
/**************************************************************************/ /**************************************************************************/
void Adafruit_BME280::write8(byte reg, byte value) { void Adafruit_BME280::write8(byte reg, byte value) {
if (_cs == -1) { if (_cs == -1) {
Wire.beginTransmission((uint8_t)_i2caddr); _wire -> beginTransmission((uint8_t)_i2caddr);
Wire.write((uint8_t)reg); _wire -> write((uint8_t)reg);
Wire.write((uint8_t)value); _wire -> write((uint8_t)value);
Wire.endTransmission(); _wire -> endTransmission();
} else { } else {
if (_sck == -1) if (_sck == -1)
SPI.beginTransaction(SPISettings(500000, MSBFIRST, SPI_MODE0)); SPI.beginTransaction(SPISettings(500000, MSBFIRST, SPI_MODE0));
@ -175,11 +194,11 @@ uint8_t Adafruit_BME280::read8(byte reg) {
uint8_t value; uint8_t value;
if (_cs == -1) { if (_cs == -1) {
Wire.beginTransmission((uint8_t)_i2caddr); _wire -> beginTransmission((uint8_t)_i2caddr);
Wire.write((uint8_t)reg); _wire -> write((uint8_t)reg);
Wire.endTransmission(); _wire -> endTransmission();
Wire.requestFrom((uint8_t)_i2caddr, (byte)1); _wire -> requestFrom((uint8_t)_i2caddr, (byte)1);
value = Wire.read(); value = _wire -> read();
} else { } else {
if (_sck == -1) if (_sck == -1)
SPI.beginTransaction(SPISettings(500000, MSBFIRST, SPI_MODE0)); SPI.beginTransaction(SPISettings(500000, MSBFIRST, SPI_MODE0));
@ -204,11 +223,11 @@ uint16_t Adafruit_BME280::read16(byte reg)
uint16_t value; uint16_t value;
if (_cs == -1) { if (_cs == -1) {
Wire.beginTransmission((uint8_t)_i2caddr); _wire -> beginTransmission((uint8_t)_i2caddr);
Wire.write((uint8_t)reg); _wire -> write((uint8_t)reg);
Wire.endTransmission(); _wire -> endTransmission();
Wire.requestFrom((uint8_t)_i2caddr, (byte)2); _wire -> requestFrom((uint8_t)_i2caddr, (byte)2);
value = (Wire.read() << 8) | Wire.read(); value = (_wire -> read() << 8) | _wire -> read();
} else { } else {
if (_sck == -1) if (_sck == -1)
SPI.beginTransaction(SPISettings(500000, MSBFIRST, SPI_MODE0)); SPI.beginTransaction(SPISettings(500000, MSBFIRST, SPI_MODE0));
@ -267,16 +286,16 @@ uint32_t Adafruit_BME280::read24(byte reg)
uint32_t value; uint32_t value;
if (_cs == -1) { if (_cs == -1) {
Wire.beginTransmission((uint8_t)_i2caddr); _wire -> beginTransmission((uint8_t)_i2caddr);
Wire.write((uint8_t)reg); _wire -> write((uint8_t)reg);
Wire.endTransmission(); _wire -> endTransmission();
Wire.requestFrom((uint8_t)_i2caddr, (byte)3); _wire -> requestFrom((uint8_t)_i2caddr, (byte)3);
value = Wire.read(); value = _wire -> read();
value <<= 8; value <<= 8;
value |= Wire.read(); value |= _wire -> read();
value <<= 8; value <<= 8;
value |= Wire.read(); value |= _wire -> read();
} else { } else {
if (_sck == -1) if (_sck == -1)
SPI.beginTransaction(SPISettings(500000, MSBFIRST, SPI_MODE0)); SPI.beginTransaction(SPISettings(500000, MSBFIRST, SPI_MODE0));

View File

@ -166,7 +166,10 @@ class Adafruit_BME280 {
Adafruit_BME280(int8_t cspin); Adafruit_BME280(int8_t cspin);
Adafruit_BME280(int8_t cspin, int8_t mosipin, int8_t misopin, int8_t sckpin); Adafruit_BME280(int8_t cspin, int8_t mosipin, int8_t misopin, int8_t sckpin);
bool begin(uint8_t addr = BME280_ADDRESS); bool begin(TwoWire *theWire);
bool begin(uint8_t addr = BME280_ADDRESS);
bool begin(uint8_t addr = BME280_ADDRESS, TwoWire *theWire = &Wire);
bool init();
void setSampling(sensor_mode mode = MODE_NORMAL, void setSampling(sensor_mode mode = MODE_NORMAL,
sensor_sampling tempSampling = SAMPLING_X16, sensor_sampling tempSampling = SAMPLING_X16,
@ -186,6 +189,7 @@ class Adafruit_BME280 {
private: private:
TwoWire *_wire;
void readCoefficients(void); void readCoefficients(void);
bool isReadingCalibration(void); bool isReadingCalibration(void);
uint8_t spixfer(uint8_t x); uint8_t spixfer(uint8_t x);

View File

@ -37,7 +37,7 @@ void setup() {
Serial.begin(9600); Serial.begin(9600);
Serial.println(F("BME280 test")); Serial.println(F("BME280 test"));
if (! bme.begin()) { if (! bme.begin(&Wire1)) {
Serial.println("Could not find a valid BME280 sensor, check wiring!"); Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1); while (1);
} }

View File

@ -40,7 +40,7 @@ void setup() {
bool status; bool status;
// default settings // default settings
status = bme.begin(); status = bme.begin(&Wire1);
if (!status) { if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring!"); Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1); while (1);