From ba0bcdb59988afb329e634a7a50e0116cc874c29 Mon Sep 17 00:00:00 2001 From: mjs513 Date: Tue, 12 Sep 2017 06:29:13 -0400 Subject: [PATCH 1/3] Made the Wire Bus selectable in setup --- Adafruit_BME280.cpp | 65 ++++++++++++------- Adafruit_BME280.h | 6 +- .../advancedsettings/advancedsettings.ino | 2 +- examples/bme280test/bme280test.ino | 2 +- 4 files changed, 49 insertions(+), 26 deletions(-) diff --git a/Adafruit_BME280.cpp b/Adafruit_BME280.cpp index ce21cf2..6df3624 100644 --- a/Adafruit_BME280.cpp +++ b/Adafruit_BME280.cpp @@ -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 */ /**************************************************************************/ -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; + _wire = theWire; + return init(); +} +bool Adafruit_BME280::init() +{ // init I2C or SPI sensor interface if (_cs == -1) { // I2C - Wire.begin(); + _wire -> begin(); } else { digitalWrite(_cs, HIGH); pinMode(_cs, OUTPUT); @@ -149,10 +168,10 @@ uint8_t Adafruit_BME280::spixfer(uint8_t x) { /**************************************************************************/ void Adafruit_BME280::write8(byte reg, byte value) { if (_cs == -1) { - Wire.beginTransmission((uint8_t)_i2caddr); - Wire.write((uint8_t)reg); - Wire.write((uint8_t)value); - Wire.endTransmission(); + _wire -> beginTransmission((uint8_t)_i2caddr); + _wire -> write((uint8_t)reg); + _wire -> write((uint8_t)value); + _wire -> endTransmission(); } else { if (_sck == -1) SPI.beginTransaction(SPISettings(500000, MSBFIRST, SPI_MODE0)); @@ -175,11 +194,11 @@ uint8_t Adafruit_BME280::read8(byte reg) { uint8_t value; if (_cs == -1) { - Wire.beginTransmission((uint8_t)_i2caddr); - Wire.write((uint8_t)reg); - Wire.endTransmission(); - Wire.requestFrom((uint8_t)_i2caddr, (byte)1); - value = Wire.read(); + _wire -> beginTransmission((uint8_t)_i2caddr); + _wire -> write((uint8_t)reg); + _wire -> endTransmission(); + _wire -> requestFrom((uint8_t)_i2caddr, (byte)1); + value = _wire -> read(); } else { if (_sck == -1) SPI.beginTransaction(SPISettings(500000, MSBFIRST, SPI_MODE0)); @@ -204,11 +223,11 @@ uint16_t Adafruit_BME280::read16(byte reg) uint16_t value; if (_cs == -1) { - Wire.beginTransmission((uint8_t)_i2caddr); - Wire.write((uint8_t)reg); - Wire.endTransmission(); - Wire.requestFrom((uint8_t)_i2caddr, (byte)2); - value = (Wire.read() << 8) | Wire.read(); + _wire -> beginTransmission((uint8_t)_i2caddr); + _wire -> write((uint8_t)reg); + _wire -> endTransmission(); + _wire -> requestFrom((uint8_t)_i2caddr, (byte)2); + value = (_wire -> read() << 8) | _wire -> read(); } else { if (_sck == -1) SPI.beginTransaction(SPISettings(500000, MSBFIRST, SPI_MODE0)); @@ -267,16 +286,16 @@ 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); + _wire -> beginTransmission((uint8_t)_i2caddr); + _wire -> write((uint8_t)reg); + _wire -> endTransmission(); + _wire -> requestFrom((uint8_t)_i2caddr, (byte)3); - value = Wire.read(); + value = _wire -> read(); value <<= 8; - value |= Wire.read(); + value |= _wire -> read(); value <<= 8; - value |= Wire.read(); + value |= _wire -> read(); } else { if (_sck == -1) SPI.beginTransaction(SPISettings(500000, MSBFIRST, SPI_MODE0)); diff --git a/Adafruit_BME280.h b/Adafruit_BME280.h index a0de5f7..8b78d3d 100644 --- a/Adafruit_BME280.h +++ b/Adafruit_BME280.h @@ -166,7 +166,10 @@ class Adafruit_BME280 { Adafruit_BME280(int8_t cspin); 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, sensor_sampling tempSampling = SAMPLING_X16, @@ -186,6 +189,7 @@ class Adafruit_BME280 { private: + TwoWire *_wire; void readCoefficients(void); bool isReadingCalibration(void); uint8_t spixfer(uint8_t x); diff --git a/examples/advancedsettings/advancedsettings.ino b/examples/advancedsettings/advancedsettings.ino index 08fb0c0..68b22b9 100644 --- a/examples/advancedsettings/advancedsettings.ino +++ b/examples/advancedsettings/advancedsettings.ino @@ -37,7 +37,7 @@ void setup() { Serial.begin(9600); Serial.println(F("BME280 test")); - if (! bme.begin()) { + if (! bme.begin(&Wire1)) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } diff --git a/examples/bme280test/bme280test.ino b/examples/bme280test/bme280test.ino index e06ffb5..d359db0 100644 --- a/examples/bme280test/bme280test.ino +++ b/examples/bme280test/bme280test.ino @@ -40,7 +40,7 @@ void setup() { bool status; // default settings - status = bme.begin(); + status = bme.begin(&Wire1); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); From 63357a0d5e84b0562b8e2db4962a257d963da10c Mon Sep 17 00:00:00 2001 From: mjs513 Date: Tue, 12 Sep 2017 07:35:36 -0400 Subject: [PATCH 2/3] Fixed default setting bme.begin() --- Adafruit_BME280.cpp | 7 +++++++ Adafruit_BME280.h | 7 ++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Adafruit_BME280.cpp b/Adafruit_BME280.cpp index 6df3624..6ed7dcf 100644 --- a/Adafruit_BME280.cpp +++ b/Adafruit_BME280.cpp @@ -61,6 +61,13 @@ bool Adafruit_BME280::begin(uint8_t addr, TwoWire *theWire) return init(); } +bool Adafruit_BME280::begin(void) +{ + _i2caddr = BME280_ADDRESS; + _wire = &Wire; + return init(); +} + bool Adafruit_BME280::init() { // init I2C or SPI sensor interface diff --git a/Adafruit_BME280.h b/Adafruit_BME280.h index 8b78d3d..61aeeed 100644 --- a/Adafruit_BME280.h +++ b/Adafruit_BME280.h @@ -165,10 +165,11 @@ class Adafruit_BME280 { Adafruit_BME280(void); Adafruit_BME280(int8_t cspin); Adafruit_BME280(int8_t cspin, int8_t mosipin, int8_t misopin, int8_t sckpin); - + + bool begin(void); bool begin(TwoWire *theWire); - bool begin(uint8_t addr = BME280_ADDRESS); - bool begin(uint8_t addr = BME280_ADDRESS, TwoWire *theWire = &Wire); + bool begin(uint8_t addr); + bool begin(uint8_t addr, TwoWire *theWire); bool init(); void setSampling(sensor_mode mode = MODE_NORMAL, From 79258774941006851e713e9decd56667920cc002 Mon Sep 17 00:00:00 2001 From: ladyada Date: Tue, 12 Sep 2017 19:17:03 -0400 Subject: [PATCH 3/3] fix test back --- examples/bme280test/bme280test.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/bme280test/bme280test.ino b/examples/bme280test/bme280test.ino index d359db0..ae115f8 100644 --- a/examples/bme280test/bme280test.ino +++ b/examples/bme280test/bme280test.ino @@ -40,7 +40,8 @@ void setup() { bool status; // default settings - status = bme.begin(&Wire1); + // (you can also pass in a Wire library object like &Wire2) + status = bme.begin(); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1);