Digital 16bit Serial Output Type Ambient Light Sensor IC by ROHM, Ambient light sensor (Illuminance to digital converter). Forked from Kenji Arai BH1750, minor changes.
Diff: BH1750.cpp
- Revision:
- 3:3c15665641ff
- Parent:
- 1:4a02a8fbf021
- Child:
- 5:04cdce6242a6
--- a/BH1750.cpp Thu Sep 12 10:51:25 2019 +0000 +++ b/BH1750.cpp Fri Sep 13 12:51:31 2019 +0000 @@ -3,11 +3,21 @@ * light intensity sensor module with built-in a 16 bit AD converter generating digital signal. * BH1750 by ROHM Co.,Ltd. * - * Copyright (c) 2015,'17 Kenji Arai / JH1PJL + * Copyright (c) 2019, Mauricio Donatti / LNLS (Brazilian Synchrotron Light Source + * https://os.mbed.com/users/mmdonatti/ + * https://www.linkedin.com/in/mauriciodonatti + * Created: September 2019 + * Revised: September 2019 + */ +/* + *---------------- REFERENCE ---------------------------------------------------------------------- + * Original Information + * http://www.rohm.co.jp/web/japan/products/-/product/BH1750FVI + * Device kit + * http://www.aitendo.com/product/10240 + * Initial Credits to Kenji Arai / JH1PJL (Forked from Kenji's library) * http://www.page.sannet.ne.jp/kenjia/index.html * http://mbed.org/users/kenjiArai/ - * Created: March 7th, 2015 - * Revised: August 23rd, 2017 */ #include "BH1750.h" @@ -47,7 +57,7 @@ _i2c.read(BH1750_addr, (char *)dt, 2, false); lux = (float)(dt[0] << 8 | dt[1]); - lux = lux / 1.2f * ((float)sensitivity/69); + lux = lux / 1.2f * ((float)sensitivity/69)/Hres; return lux; } @@ -56,18 +66,21 @@ { _i2c.frequency(100000); power_up(); - sensitivity = SENS_1R00; - set_sensitivity(sensitivity); + //sensitivity = SENS_1R00; + //NEED to call one set mode after init + //set_sensitivity(sensitivity); } /////////////// Timing Register /////////////////////////// -void BH1750::set_sensitivity(uint8_t parameter) +void BH1750::set_high_resolution(uint8_t parameter) { if (parameter > SENS_3R68){ parameter = SENS_3R68; } else if (parameter < SENS_0R45){ parameter = SENS_0R45; } + sensitivity = parameter; + Hres = 1; dt[0] = CMD_M_TIME_H | (parameter >> 5); // Set High byte _i2c.write((int)BH1750_addr, (char *)dt, 1, false); dt[0] = CMD_M_TIME_L | (parameter & 0x1f); // Set Low byte @@ -77,6 +90,25 @@ wait_ms(240); // need normal conversion time(120mS) x 2 } +/////////////// Timing Register /////////////////////////// +void BH1750::set_high_resolution_2(uint8_t parameter) +{ + if (parameter > SENS_3R68){ + parameter = SENS_3R68; + } else if (parameter < SENS_0R45){ + parameter = SENS_0R45; + } + sensitivity = parameter; + Hres = 2; + dt[0] = CMD_M_TIME_H | (parameter >> 5); // Set High byte + _i2c.write((int)BH1750_addr, (char *)dt, 1, false); + dt[0] = CMD_M_TIME_L | (parameter & 0x1f); // Set Low byte + _i2c.write((int)BH1750_addr, (char *)dt, 1, false); + dt[0] = CMD_C_H_RES_M2; // Measurement mode: High Resolution 2 + _i2c.write((int)BH1750_addr, (char *)dt, 1, false); + wait_ms(240); // need normal conversion time(120mS) x 2 +} + /////////////// Power ON/OFF ////////////////////////////// void BH1750::power_up() {