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:
kenjiArai
Date:
Sat Mar 07 23:44:42 2015 +0000
Revision:
0:d95f6ac4c8d6
Child:
1:4a02a8fbf021
Digital 16bit Serial Output Type Ambient Light Sensor IC by ROHM,  Ambient light sensor (Illuminance to digital converter)

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 *
kenjiArai 0:d95f6ac4c8d6 6 * Copyright (c) 2015 Kenji Arai / JH1PJL
kenjiArai 0:d95f6ac4c8d6 7 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:d95f6ac4c8d6 8 * http://mbed.org/users/kenjiArai/
kenjiArai 0:d95f6ac4c8d6 9 * Created: March 7th, 2015
kenjiArai 0:d95f6ac4c8d6 10 * Revised: March 8th, 2015
kenjiArai 0:d95f6ac4c8d6 11 *
kenjiArai 0:d95f6ac4c8d6 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 0:d95f6ac4c8d6 13 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 0:d95f6ac4c8d6 14 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 0:d95f6ac4c8d6 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 0:d95f6ac4c8d6 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 0:d95f6ac4c8d6 17 */
kenjiArai 0:d95f6ac4c8d6 18 /*
kenjiArai 0:d95f6ac4c8d6 19 *---------------- REFERENCE ----------------------------------------------------------------------
kenjiArai 0:d95f6ac4c8d6 20 * Original Information
kenjiArai 0:d95f6ac4c8d6 21 * http://www.rohm.co.jp/web/japan/products/-/product/BH1750FVI
kenjiArai 0:d95f6ac4c8d6 22 * Device kit
kenjiArai 0:d95f6ac4c8d6 23 * http://www.aitendo.com/product/10240
kenjiArai 0:d95f6ac4c8d6 24 */
kenjiArai 0:d95f6ac4c8d6 25
kenjiArai 0:d95f6ac4c8d6 26 #ifndef BH1750_H
kenjiArai 0:d95f6ac4c8d6 27 #define BH1750_H
kenjiArai 0:d95f6ac4c8d6 28
kenjiArai 0:d95f6ac4c8d6 29 #include "mbed.h"
kenjiArai 0:d95f6ac4c8d6 30
kenjiArai 0:d95f6ac4c8d6 31 // light intensity sensor, BH1750
kenjiArai 0:d95f6ac4c8d6 32 // 7bit address = 0b0100011(0x23) or 0b1011100(0x5c)
kenjiArai 0:d95f6ac4c8d6 33 #define BH1750_G_CHIP_ADDR (0x23 << 1)
kenjiArai 0:d95f6ac4c8d6 34 #define BH1750_V_CHIP_ADDR (0x5c << 1)
kenjiArai 0:d95f6ac4c8d6 35
kenjiArai 0:d95f6ac4c8d6 36 ////////////// COMMAND ////////////////////////////////////
kenjiArai 0:d95f6ac4c8d6 37 #define CMD_PWR_DWN 0x00
kenjiArai 0:d95f6ac4c8d6 38 #define CMD_PWR_UP 0x01
kenjiArai 0:d95f6ac4c8d6 39 #define CMD_RESET 0x07
kenjiArai 0:d95f6ac4c8d6 40 #define CMD_C_H_RES_M 0x10
kenjiArai 0:d95f6ac4c8d6 41 #define CMD_C_H_RES_M2 0x11
kenjiArai 0:d95f6ac4c8d6 42 #define CMD_C_L_RES_M 0x13
kenjiArai 0:d95f6ac4c8d6 43 #define CMD_1_H_RES_M 0x20
kenjiArai 0:d95f6ac4c8d6 44 #define CMD_1_H_RES_M2 0x21
kenjiArai 0:d95f6ac4c8d6 45 #define CMD_1_L_RES_M 0x23
kenjiArai 0:d95f6ac4c8d6 46 #define CMD_M_TIME_H 0x40
kenjiArai 0:d95f6ac4c8d6 47 #define CMD_M_TIME_L 0x60
kenjiArai 0:d95f6ac4c8d6 48
kenjiArai 0:d95f6ac4c8d6 49 ////////////// SENSITIVITY ////////////////////////////////
kenjiArai 0:d95f6ac4c8d6 50 #define SENS_1R00 69
kenjiArai 0:d95f6ac4c8d6 51 #define SENS_3R68 254
kenjiArai 0:d95f6ac4c8d6 52 #define SENS_0R45 31
kenjiArai 0:d95f6ac4c8d6 53 #define SENS_2R00 138
kenjiArai 0:d95f6ac4c8d6 54 #define SENS_0R50 35
kenjiArai 0:d95f6ac4c8d6 55
kenjiArai 0:d95f6ac4c8d6 56 /** Interface for Luminosity sensor, BH1750
kenjiArai 0:d95f6ac4c8d6 57 * @code
kenjiArai 0:d95f6ac4c8d6 58 * #include "mbed.h"
kenjiArai 0:d95f6ac4c8d6 59 * #include "BH1750.h"
kenjiArai 0:d95f6ac4c8d6 60 *
kenjiArai 0:d95f6ac4c8d6 61 * // I2C Communication
kenjiArai 0:d95f6ac4c8d6 62 * BH1750 lum(dp5,dp27); // BH1750 SDA, SCL
kenjiArai 0:d95f6ac4c8d6 63 * // If you connected I2C line not only this device but also other devices,
kenjiArai 0:d95f6ac4c8d6 64 * // you need to declare following method.
kenjiArai 0:d95f6ac4c8d6 65 * I2C i2c(dp5,dp27); // SDA, SCL
kenjiArai 0:d95f6ac4c8d6 66 * BH1750 lum(i2c); // BH1750 SDA, SCL (Data available every 120mSec)
kenjiArai 0:d95f6ac4c8d6 67 *
kenjiArai 0:d95f6ac4c8d6 68 * int main() {;
kenjiArai 0:d95f6ac4c8d6 69 * while(true){
kenjiArai 0:d95f6ac4c8d6 70 * printf("Illuminance: %+7.2f [Lux]\r\n", lum.lux());
kenjiArai 0:d95f6ac4c8d6 71 * wait(1.0);
kenjiArai 0:d95f6ac4c8d6 72 * }
kenjiArai 0:d95f6ac4c8d6 73 * }
kenjiArai 0:d95f6ac4c8d6 74 * @endcode
kenjiArai 0:d95f6ac4c8d6 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
kenjiArai 0:d95f6ac4c8d6 98 /** Set sensor sensitivity adjustment
kenjiArai 0:d95f6ac4c8d6 99 * @param sensitivity parameter
kenjiArai 0:d95f6ac4c8d6 100 * @return none
kenjiArai 0:d95f6ac4c8d6 101 */
kenjiArai 0:d95f6ac4c8d6 102 void set_sensitivity(uint8_t parameter);
kenjiArai 0:d95f6ac4c8d6 103
kenjiArai 0:d95f6ac4c8d6 104 /** Set I2C clock frequency
kenjiArai 0:d95f6ac4c8d6 105 * @param freq.
kenjiArai 0:d95f6ac4c8d6 106 * @return none
kenjiArai 0:d95f6ac4c8d6 107 */
kenjiArai 0:d95f6ac4c8d6 108 void frequency(int hz);
kenjiArai 0:d95f6ac4c8d6 109
kenjiArai 0:d95f6ac4c8d6 110 /** Power Up/Down
kenjiArai 0:d95f6ac4c8d6 111 * @param none
kenjiArai 0:d95f6ac4c8d6 112 * @return none
kenjiArai 0:d95f6ac4c8d6 113 */
kenjiArai 0:d95f6ac4c8d6 114 void power_up(void);
kenjiArai 0:d95f6ac4c8d6 115 void power_down(void);
kenjiArai 0:d95f6ac4c8d6 116
kenjiArai 0:d95f6ac4c8d6 117 protected:
kenjiArai 0:d95f6ac4c8d6 118 I2C _i2c;
kenjiArai 0:d95f6ac4c8d6 119
kenjiArai 0:d95f6ac4c8d6 120 void init(void);
kenjiArai 0:d95f6ac4c8d6 121
kenjiArai 0:d95f6ac4c8d6 122 private:
kenjiArai 0:d95f6ac4c8d6 123 uint8_t BH1750_addr;
kenjiArai 0:d95f6ac4c8d6 124 uint8_t dt[4];
kenjiArai 0:d95f6ac4c8d6 125 int8_t sensitivity;
kenjiArai 0:d95f6ac4c8d6 126 };
kenjiArai 0:d95f6ac4c8d6 127
kenjiArai 0:d95f6ac4c8d6 128 #endif // BH1750_H