fix continuous mode reset

This commit is contained in:
coelner
2019-08-14 19:56:22 +02:00
parent 9f6a6ba79e
commit ea801213f1
+17 -14
View File
@@ -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: