From ea801213f1f4d36153f3f3d9904cc146ececc91f Mon Sep 17 00:00:00 2001 From: coelner Date: Wed, 14 Aug 2019 19:37:18 +0200 Subject: [PATCH] fix continuous mode reset --- BH1750.cpp | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/BH1750.cpp b/BH1750.cpp index 86908cf..e039a2f 100644 --- a/BH1750.cpp +++ b/BH1750.cpp @@ -151,15 +151,15 @@ bool BH1750::setMTreg(byte MTreg) { // Send MTreg and the current mode to the sensor // High bit: 01000_MT[7,6,5] // Low bit: 011_MT[4,3,2,1,0] - Wire.beginTransmission(BH1750_I2CADDR); - __wire_write((0b01000 << 3) | (MTreg >> 5)); - ack = Wire.endTransmission(); - Wire.beginTransmission(BH1750_I2CADDR); - __wire_write((0b011 << 5 ) | (MTreg & 0b111)); - ack = ack | Wire.endTransmission(); - Wire.beginTransmission(BH1750_I2CADDR); - __wire_write(BH1750_MODE); - ack = ack | Wire.endTransmission(); + _wire->beginTransmission(BH1750_I2CADDR); + _wire->write((0b01000 << 3) | (MTreg >> 5)); + ack = _wire->endTransmission(); + _wire->beginTransmission(BH1750_I2CADDR); + _wire->write((0b011 << 5 ) | (MTreg & 0b11111)); + ack = ack | _wire->endTransmission(); + _wire->beginTransmission(BH1750_I2CADDR); + _wire->write(BH1750_MODE); + ack = ack | _wire->endTransmission(); // Wait a few moments to wake up _delay_ms(10); @@ -219,11 +219,6 @@ float BH1750::readLightLevel(bool maxWait) { // Measurement result will be stored here float level = -1.0; - // Send mode to sensor - Wire.beginTransmission(BH1750_I2CADDR); - __wire_write((uint8_t)BH1750_MODE); - Wire.endTransmission(); - // Wait for measurement to be taken. // Measurements have a maximum measurement time and a typical measurement // time. The maxWait argument determines which measurement wait time is @@ -237,10 +232,18 @@ float BH1750::readLightLevel(bool maxWait) { switch (BH1750_MODE) { case BH1750::ONE_TIME_LOW_RES_MODE: + // Send mode to sensor + _wire->beginTransmission(BH1750_I2CADDR); + _wire->write((uint8_t)BH1750_MODE); + _wire->endTransmission(); maxWait ? _delay_ms(24 * BH1750_MTreg/(byte)BH1750_DEFAULT_MTREG) : _delay_ms(16 * BH1750_MTreg/(byte)BH1750_DEFAULT_MTREG); break; case BH1750::ONE_TIME_HIGH_RES_MODE: case BH1750::ONE_TIME_HIGH_RES_MODE_2: + // Send mode to sensor + _wire->beginTransmission(BH1750_I2CADDR); + _wire->write((uint8_t)BH1750_MODE); + _wire->endTransmission(); maxWait ? _delay_ms(180 * BH1750_MTreg/(byte)BH1750_DEFAULT_MTREG) :_delay_ms(120 * BH1750_MTreg/(byte)BH1750_DEFAULT_MTREG); break; default: