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.

Committer:
mmdonatti
Date:
Mon Jan 17 12:55:09 2022 +0000
Revision:
5:04cdce6242a6
Parent:
4:47d7e70dc9b8
new methods for triggering and single acquisitions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:d95f6ac4c8d6 1 /*
kenjiArai 0:d95f6ac4c8d6 2 * mbed library program
kenjiArai 0:d95f6ac4c8d6 3 * light intensity sensor module with built-in a 16 bit AD converter generating digital signal.
kenjiArai 0:d95f6ac4c8d6 4 * BH1750 by ROHM Co.,Ltd.
kenjiArai 0:d95f6ac4c8d6 5 *
mmdonatti 3:3c15665641ff 6 * Copyright (c) 2019, Mauricio Donatti / LNLS (Brazilian Synchrotron Light Source
mmdonatti 3:3c15665641ff 7 * https://os.mbed.com/users/mmdonatti/
mmdonatti 3:3c15665641ff 8 * https://www.linkedin.com/in/mauriciodonatti
mmdonatti 3:3c15665641ff 9 * Created: September 2019
mmdonatti 3:3c15665641ff 10 * Revised: September 2019
kenjiArai 0:d95f6ac4c8d6 11 */
kenjiArai 0:d95f6ac4c8d6 12 /*
kenjiArai 0:d95f6ac4c8d6 13 *---------------- REFERENCE ----------------------------------------------------------------------
kenjiArai 0:d95f6ac4c8d6 14 * Original Information
kenjiArai 0:d95f6ac4c8d6 15 * http://www.rohm.co.jp/web/japan/products/-/product/BH1750FVI
kenjiArai 0:d95f6ac4c8d6 16 * Device kit
kenjiArai 0:d95f6ac4c8d6 17 * http://www.aitendo.com/product/10240
mmdonatti 3:3c15665641ff 18 * Initial Credits to Kenji Arai / JH1PJL (Forked from Kenji's library)
mmdonatti 3:3c15665641ff 19 * http://www.page.sannet.ne.jp/kenjia/index.html
mmdonatti 3:3c15665641ff 20 * http://mbed.org/users/kenjiArai/
kenjiArai 0:d95f6ac4c8d6 21 */
kenjiArai 0:d95f6ac4c8d6 22
kenjiArai 0:d95f6ac4c8d6 23 #ifndef BH1750_H
kenjiArai 0:d95f6ac4c8d6 24 #define BH1750_H
kenjiArai 0:d95f6ac4c8d6 25
kenjiArai 0:d95f6ac4c8d6 26 #include "mbed.h"
kenjiArai 0:d95f6ac4c8d6 27
kenjiArai 0:d95f6ac4c8d6 28 // light intensity sensor, BH1750
mmdonatti 2:74dba61588ed 29 // 7bit address = 0b0100011(0x23) - ADDR LOW or 0b1011100(0x5c) - ADDR HIGH
kenjiArai 0:d95f6ac4c8d6 30 #define BH1750_G_CHIP_ADDR (0x23 << 1)
kenjiArai 0:d95f6ac4c8d6 31 #define BH1750_V_CHIP_ADDR (0x5c << 1)
kenjiArai 0:d95f6ac4c8d6 32
kenjiArai 0:d95f6ac4c8d6 33 ////////////// COMMAND ////////////////////////////////////
kenjiArai 0:d95f6ac4c8d6 34 #define CMD_PWR_DWN 0x00
kenjiArai 0:d95f6ac4c8d6 35 #define CMD_PWR_UP 0x01
kenjiArai 0:d95f6ac4c8d6 36 #define CMD_RESET 0x07
kenjiArai 0:d95f6ac4c8d6 37 #define CMD_C_H_RES_M 0x10
kenjiArai 0:d95f6ac4c8d6 38 #define CMD_C_H_RES_M2 0x11
kenjiArai 0:d95f6ac4c8d6 39 #define CMD_C_L_RES_M 0x13
kenjiArai 0:d95f6ac4c8d6 40 #define CMD_1_H_RES_M 0x20
kenjiArai 0:d95f6ac4c8d6 41 #define CMD_1_H_RES_M2 0x21
kenjiArai 0:d95f6ac4c8d6 42 #define CMD_1_L_RES_M 0x23
kenjiArai 0:d95f6ac4c8d6 43 #define CMD_M_TIME_H 0x40
kenjiArai 0:d95f6ac4c8d6 44 #define CMD_M_TIME_L 0x60
kenjiArai 0:d95f6ac4c8d6 45
kenjiArai 0:d95f6ac4c8d6 46 ////////////// SENSITIVITY ////////////////////////////////
mmdonatti 5:04cdce6242a6 47 #define SENS_2 69 //Default
mmdonatti 5:04cdce6242a6 48 #define SENS_4 254 //High Sensitivity
mmdonatti 5:04cdce6242a6 49 #define SENS_0 31
mmdonatti 5:04cdce6242a6 50 #define SENS_3 138
mmdonatti 5:04cdce6242a6 51 #define SENS_1 35
kenjiArai 0:d95f6ac4c8d6 52
kenjiArai 0:d95f6ac4c8d6 53 /** Interface for Luminosity sensor, BH1750
mmdonatti 3:3c15665641ff 54 //@code
mmdonatti 3:3c15665641ff 55 #include "mbed.h"
mmdonatti 3:3c15665641ff 56 #include "BH1750.h"
mmdonatti 3:3c15665641ff 57 // I2C Communication
mmdonatti 3:3c15665641ff 58 BH1750 lum(dp5,dp27); // BH1750 SDA, SCL
mmdonatti 3:3c15665641ff 59 //If you connected I2C line not only this device but also other devices,
mmdonatti 3:3c15665641ff 60 //you need to declare following method.
mmdonatti 3:3c15665641ff 61 //I2C i2c(dp5,dp27); // SDA, SCL
mmdonatti 3:3c15665641ff 62 //BH1750 lum(i2c); // BH1750 SDA, SCL (Data available every 120mSec)
mmdonatti 3:3c15665641ff 63
mmdonatti 3:3c15665641ff 64 int main() {
mmdonatti 3:3c15665641ff 65 lum.set_high_resolution(SENS_1R00);
mmdonatti 3:3c15665641ff 66 //or
mmdonatti 3:3c15665641ff 67 //lum.set_high_resolution_2(SENS_1R00);
mmdonatti 3:3c15665641ff 68
mmdonatti 3:3c15665641ff 69 while(true){
mmdonatti 3:3c15665641ff 70 printf("Illuminance: %+7.2f [Lux]\r\n", lum.lux());
mmdonatti 3:3c15665641ff 71 wait(1.0);
mmdonatti 3:3c15665641ff 72 }
mmdonatti 3:3c15665641ff 73 }
mmdonatti 3:3c15665641ff 74 //@endcode
mmdonatti 3:3c15665641ff 75 */
kenjiArai 0:d95f6ac4c8d6 76
kenjiArai 0:d95f6ac4c8d6 77 class BH1750
kenjiArai 0:d95f6ac4c8d6 78 {
kenjiArai 0:d95f6ac4c8d6 79 public:
kenjiArai 0:d95f6ac4c8d6 80 /** Configure data pin
kenjiArai 0:d95f6ac4c8d6 81 * @param data SDA and SCL pins
kenjiArai 0:d95f6ac4c8d6 82 */
kenjiArai 0:d95f6ac4c8d6 83 BH1750(PinName p_sda, PinName p_scl);
kenjiArai 0:d95f6ac4c8d6 84 BH1750(PinName p_sda, PinName p_scl, uint8_t addr);
kenjiArai 0:d95f6ac4c8d6 85
kenjiArai 0:d95f6ac4c8d6 86 /** Configure data pin (with other devices on I2C line)
kenjiArai 0:d95f6ac4c8d6 87 * @param I2C previous definition
kenjiArai 0:d95f6ac4c8d6 88 */
kenjiArai 0:d95f6ac4c8d6 89 BH1750(I2C& p_i2c);
kenjiArai 0:d95f6ac4c8d6 90 BH1750(I2C& p_i2c, uint8_t addr);
kenjiArai 0:d95f6ac4c8d6 91
kenjiArai 0:d95f6ac4c8d6 92 /** Get Illuminance, unit of Lux
kenjiArai 0:d95f6ac4c8d6 93 * @param none
kenjiArai 0:d95f6ac4c8d6 94 * @return Lux
kenjiArai 0:d95f6ac4c8d6 95 */
kenjiArai 0:d95f6ac4c8d6 96 float lux(void);
mmdonatti 5:04cdce6242a6 97
mmdonatti 5:04cdce6242a6 98 void set_sensitivity(uint8_t parameter);
mmdonatti 5:04cdce6242a6 99
mmdonatti 5:04cdce6242a6 100 float high_resolution2_trigger_read();
mmdonatti 5:04cdce6242a6 101
mmdonatti 5:04cdce6242a6 102 float high_resolution_trigger_read();
mmdonatti 5:04cdce6242a6 103
mmdonatti 5:04cdce6242a6 104 float low_resolution_trigger_read();
mmdonatti 5:04cdce6242a6 105
mmdonatti 5:04cdce6242a6 106 void high_resolution2_trigger();
mmdonatti 5:04cdce6242a6 107
mmdonatti 5:04cdce6242a6 108 void high_resolution_trigger();
mmdonatti 5:04cdce6242a6 109
mmdonatti 5:04cdce6242a6 110 void low_resolution_trigger();
mmdonatti 5:04cdce6242a6 111
mmdonatti 5:04cdce6242a6 112 float high_resolution2_read();
mmdonatti 5:04cdce6242a6 113
mmdonatti 5:04cdce6242a6 114 float high_resolution_read();
mmdonatti 5:04cdce6242a6 115
mmdonatti 5:04cdce6242a6 116 float low_resolution_read();
kenjiArai 0:d95f6ac4c8d6 117
mmdonatti 3:3c15665641ff 118 /** Set sensor to high resolution mode
kenjiArai 0:d95f6ac4c8d6 119 * @param sensitivity parameter
kenjiArai 0:d95f6ac4c8d6 120 * @return none
kenjiArai 0:d95f6ac4c8d6 121 */
mmdonatti 5:04cdce6242a6 122 void set_high_resolution_continuous(uint8_t parameter);
mmdonatti 3:3c15665641ff 123
mmdonatti 3:3c15665641ff 124 /** Set sensor to high resolution mode
mmdonatti 3:3c15665641ff 125 * @param sensitivity parameter
mmdonatti 3:3c15665641ff 126 * @return none
mmdonatti 3:3c15665641ff 127 */
mmdonatti 5:04cdce6242a6 128 void set_high_resolution2_continuous(uint8_t parameter);
kenjiArai 0:d95f6ac4c8d6 129
kenjiArai 0:d95f6ac4c8d6 130 /** Set I2C clock frequency
kenjiArai 0:d95f6ac4c8d6 131 * @param freq.
kenjiArai 0:d95f6ac4c8d6 132 * @return none
kenjiArai 0:d95f6ac4c8d6 133 */
mmdonatti 5:04cdce6242a6 134
mmdonatti 5:04cdce6242a6 135 void set_low_resolution_continuous(uint8_t parameter);
mmdonatti 5:04cdce6242a6 136
kenjiArai 0:d95f6ac4c8d6 137 void frequency(int hz);
kenjiArai 0:d95f6ac4c8d6 138
kenjiArai 0:d95f6ac4c8d6 139 /** Power Up/Down
kenjiArai 0:d95f6ac4c8d6 140 * @param none
kenjiArai 0:d95f6ac4c8d6 141 * @return none
kenjiArai 0:d95f6ac4c8d6 142 */
kenjiArai 0:d95f6ac4c8d6 143 void power_up(void);
kenjiArai 0:d95f6ac4c8d6 144 void power_down(void);
mmdonatti 5:04cdce6242a6 145
mmdonatti 5:04cdce6242a6 146 void reset(void);
kenjiArai 0:d95f6ac4c8d6 147
kenjiArai 0:d95f6ac4c8d6 148 protected:
kenjiArai 1:4a02a8fbf021 149 I2C *_i2c_p;
kenjiArai 1:4a02a8fbf021 150 I2C &_i2c;
kenjiArai 0:d95f6ac4c8d6 151
kenjiArai 0:d95f6ac4c8d6 152 void init(void);
kenjiArai 0:d95f6ac4c8d6 153
kenjiArai 0:d95f6ac4c8d6 154 private:
kenjiArai 0:d95f6ac4c8d6 155 uint8_t BH1750_addr;
kenjiArai 0:d95f6ac4c8d6 156 uint8_t dt[4];
mmdonatti 3:3c15665641ff 157 uint8_t Hres;
mmdonatti 4:47d7e70dc9b8 158 uint8_t sensitivity;
kenjiArai 0:d95f6ac4c8d6 159 };
kenjiArai 0:d95f6ac4c8d6 160
kenjiArai 0:d95f6ac4c8d6 161 #endif // BH1750_H
kenjiArai 1:4a02a8fbf021 162