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.
BH1750.h@3:3c15665641ff, 2019-09-13 (annotated)
- Committer:
- mmdonatti
- Date:
- Fri Sep 13 12:51:31 2019 +0000
- Revision:
- 3:3c15665641ff
- Parent:
- 2:74dba61588ed
- Child:
- 4:47d7e70dc9b8
High Resolution Mode 2 added to library
Who changed what in which revision?
User | Revision | Line number | New 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 | 3:3c15665641ff | 47 | #define SENS_1R00 69 //Default |
mmdonatti | 3:3c15665641ff | 48 | #define SENS_3R68 254 //High Sensitivity |
kenjiArai | 0:d95f6ac4c8d6 | 49 | #define SENS_0R45 31 |
kenjiArai | 0:d95f6ac4c8d6 | 50 | #define SENS_2R00 138 |
kenjiArai | 0:d95f6ac4c8d6 | 51 | #define SENS_0R50 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); |
kenjiArai | 0:d95f6ac4c8d6 | 97 | |
mmdonatti | 3:3c15665641ff | 98 | /** Set sensor to high resolution mode |
kenjiArai | 0:d95f6ac4c8d6 | 99 | * @param sensitivity parameter |
kenjiArai | 0:d95f6ac4c8d6 | 100 | * @return none |
kenjiArai | 0:d95f6ac4c8d6 | 101 | */ |
mmdonatti | 3:3c15665641ff | 102 | void set_high_resolution(uint8_t parameter); |
mmdonatti | 3:3c15665641ff | 103 | |
mmdonatti | 3:3c15665641ff | 104 | /** Set sensor to high resolution mode |
mmdonatti | 3:3c15665641ff | 105 | * @param sensitivity parameter |
mmdonatti | 3:3c15665641ff | 106 | * @return none |
mmdonatti | 3:3c15665641ff | 107 | */ |
mmdonatti | 3:3c15665641ff | 108 | void set_high_resolution_2(uint8_t parameter); |
kenjiArai | 0:d95f6ac4c8d6 | 109 | |
kenjiArai | 0:d95f6ac4c8d6 | 110 | /** Set I2C clock frequency |
kenjiArai | 0:d95f6ac4c8d6 | 111 | * @param freq. |
kenjiArai | 0:d95f6ac4c8d6 | 112 | * @return none |
kenjiArai | 0:d95f6ac4c8d6 | 113 | */ |
kenjiArai | 0:d95f6ac4c8d6 | 114 | void frequency(int hz); |
kenjiArai | 0:d95f6ac4c8d6 | 115 | |
kenjiArai | 0:d95f6ac4c8d6 | 116 | /** Power Up/Down |
kenjiArai | 0:d95f6ac4c8d6 | 117 | * @param none |
kenjiArai | 0:d95f6ac4c8d6 | 118 | * @return none |
kenjiArai | 0:d95f6ac4c8d6 | 119 | */ |
kenjiArai | 0:d95f6ac4c8d6 | 120 | void power_up(void); |
kenjiArai | 0:d95f6ac4c8d6 | 121 | void power_down(void); |
kenjiArai | 0:d95f6ac4c8d6 | 122 | |
kenjiArai | 0:d95f6ac4c8d6 | 123 | protected: |
kenjiArai | 1:4a02a8fbf021 | 124 | I2C *_i2c_p; |
kenjiArai | 1:4a02a8fbf021 | 125 | I2C &_i2c; |
kenjiArai | 0:d95f6ac4c8d6 | 126 | |
kenjiArai | 0:d95f6ac4c8d6 | 127 | void init(void); |
kenjiArai | 0:d95f6ac4c8d6 | 128 | |
kenjiArai | 0:d95f6ac4c8d6 | 129 | private: |
kenjiArai | 0:d95f6ac4c8d6 | 130 | uint8_t BH1750_addr; |
kenjiArai | 0:d95f6ac4c8d6 | 131 | uint8_t dt[4]; |
mmdonatti | 3:3c15665641ff | 132 | uint8_t Hres; |
kenjiArai | 0:d95f6ac4c8d6 | 133 | int8_t sensitivity; |
kenjiArai | 0:d95f6ac4c8d6 | 134 | }; |
kenjiArai | 0:d95f6ac4c8d6 | 135 | |
kenjiArai | 0:d95f6ac4c8d6 | 136 | #endif // BH1750_H |
kenjiArai | 1:4a02a8fbf021 | 137 |