Digital 16bit Serial Output Type Ambient Light Sensor IC by ROHM, Ambient light sensor (Illuminance to digital converter)

Committer:
kenjiArai
Date:
Wed Aug 23 09:21:39 2017 +0000
Revision:
1:4a02a8fbf021
Parent:
0:d95f6ac4c8d6
countermeasure for  NonCopyable

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 1:4a02a8fbf021 6 * Copyright (c) 2015,'17 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 1:4a02a8fbf021 9 * Created: March 7th, 2015
kenjiArai 1:4a02a8fbf021 10 * Revised: August 23rd, 2017
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
kenjiArai 0:d95f6ac4c8d6 18 */
kenjiArai 0:d95f6ac4c8d6 19
kenjiArai 0:d95f6ac4c8d6 20 #ifndef BH1750_H
kenjiArai 0:d95f6ac4c8d6 21 #define BH1750_H
kenjiArai 0:d95f6ac4c8d6 22
kenjiArai 0:d95f6ac4c8d6 23 #include "mbed.h"
kenjiArai 0:d95f6ac4c8d6 24
kenjiArai 0:d95f6ac4c8d6 25 // light intensity sensor, BH1750
kenjiArai 0:d95f6ac4c8d6 26 // 7bit address = 0b0100011(0x23) or 0b1011100(0x5c)
kenjiArai 0:d95f6ac4c8d6 27 #define BH1750_G_CHIP_ADDR (0x23 << 1)
kenjiArai 0:d95f6ac4c8d6 28 #define BH1750_V_CHIP_ADDR (0x5c << 1)
kenjiArai 0:d95f6ac4c8d6 29
kenjiArai 0:d95f6ac4c8d6 30 ////////////// COMMAND ////////////////////////////////////
kenjiArai 0:d95f6ac4c8d6 31 #define CMD_PWR_DWN 0x00
kenjiArai 0:d95f6ac4c8d6 32 #define CMD_PWR_UP 0x01
kenjiArai 0:d95f6ac4c8d6 33 #define CMD_RESET 0x07
kenjiArai 0:d95f6ac4c8d6 34 #define CMD_C_H_RES_M 0x10
kenjiArai 0:d95f6ac4c8d6 35 #define CMD_C_H_RES_M2 0x11
kenjiArai 0:d95f6ac4c8d6 36 #define CMD_C_L_RES_M 0x13
kenjiArai 0:d95f6ac4c8d6 37 #define CMD_1_H_RES_M 0x20
kenjiArai 0:d95f6ac4c8d6 38 #define CMD_1_H_RES_M2 0x21
kenjiArai 0:d95f6ac4c8d6 39 #define CMD_1_L_RES_M 0x23
kenjiArai 0:d95f6ac4c8d6 40 #define CMD_M_TIME_H 0x40
kenjiArai 0:d95f6ac4c8d6 41 #define CMD_M_TIME_L 0x60
kenjiArai 0:d95f6ac4c8d6 42
kenjiArai 0:d95f6ac4c8d6 43 ////////////// SENSITIVITY ////////////////////////////////
kenjiArai 0:d95f6ac4c8d6 44 #define SENS_1R00 69
kenjiArai 0:d95f6ac4c8d6 45 #define SENS_3R68 254
kenjiArai 0:d95f6ac4c8d6 46 #define SENS_0R45 31
kenjiArai 0:d95f6ac4c8d6 47 #define SENS_2R00 138
kenjiArai 0:d95f6ac4c8d6 48 #define SENS_0R50 35
kenjiArai 0:d95f6ac4c8d6 49
kenjiArai 0:d95f6ac4c8d6 50 /** Interface for Luminosity sensor, BH1750
kenjiArai 0:d95f6ac4c8d6 51 * @code
kenjiArai 0:d95f6ac4c8d6 52 * #include "mbed.h"
kenjiArai 0:d95f6ac4c8d6 53 * #include "BH1750.h"
kenjiArai 0:d95f6ac4c8d6 54 *
kenjiArai 0:d95f6ac4c8d6 55 * // I2C Communication
kenjiArai 0:d95f6ac4c8d6 56 * BH1750 lum(dp5,dp27); // BH1750 SDA, SCL
kenjiArai 0:d95f6ac4c8d6 57 * // If you connected I2C line not only this device but also other devices,
kenjiArai 0:d95f6ac4c8d6 58 * // you need to declare following method.
kenjiArai 0:d95f6ac4c8d6 59 * I2C i2c(dp5,dp27); // SDA, SCL
kenjiArai 0:d95f6ac4c8d6 60 * BH1750 lum(i2c); // BH1750 SDA, SCL (Data available every 120mSec)
kenjiArai 0:d95f6ac4c8d6 61 *
kenjiArai 0:d95f6ac4c8d6 62 * int main() {;
kenjiArai 0:d95f6ac4c8d6 63 * while(true){
kenjiArai 0:d95f6ac4c8d6 64 * printf("Illuminance: %+7.2f [Lux]\r\n", lum.lux());
kenjiArai 0:d95f6ac4c8d6 65 * wait(1.0);
kenjiArai 0:d95f6ac4c8d6 66 * }
kenjiArai 0:d95f6ac4c8d6 67 * }
kenjiArai 0:d95f6ac4c8d6 68 * @endcode
kenjiArai 0:d95f6ac4c8d6 69 */
kenjiArai 0:d95f6ac4c8d6 70
kenjiArai 0:d95f6ac4c8d6 71 class BH1750
kenjiArai 0:d95f6ac4c8d6 72 {
kenjiArai 0:d95f6ac4c8d6 73 public:
kenjiArai 0:d95f6ac4c8d6 74 /** Configure data pin
kenjiArai 0:d95f6ac4c8d6 75 * @param data SDA and SCL pins
kenjiArai 0:d95f6ac4c8d6 76 */
kenjiArai 0:d95f6ac4c8d6 77 BH1750(PinName p_sda, PinName p_scl);
kenjiArai 0:d95f6ac4c8d6 78 BH1750(PinName p_sda, PinName p_scl, uint8_t addr);
kenjiArai 0:d95f6ac4c8d6 79
kenjiArai 0:d95f6ac4c8d6 80 /** Configure data pin (with other devices on I2C line)
kenjiArai 0:d95f6ac4c8d6 81 * @param I2C previous definition
kenjiArai 0:d95f6ac4c8d6 82 */
kenjiArai 0:d95f6ac4c8d6 83 BH1750(I2C& p_i2c);
kenjiArai 0:d95f6ac4c8d6 84 BH1750(I2C& p_i2c, uint8_t addr);
kenjiArai 0:d95f6ac4c8d6 85
kenjiArai 0:d95f6ac4c8d6 86 /** Get Illuminance, unit of Lux
kenjiArai 0:d95f6ac4c8d6 87 * @param none
kenjiArai 0:d95f6ac4c8d6 88 * @return Lux
kenjiArai 0:d95f6ac4c8d6 89 */
kenjiArai 0:d95f6ac4c8d6 90 float lux(void);
kenjiArai 0:d95f6ac4c8d6 91
kenjiArai 0:d95f6ac4c8d6 92 /** Set sensor sensitivity adjustment
kenjiArai 0:d95f6ac4c8d6 93 * @param sensitivity parameter
kenjiArai 0:d95f6ac4c8d6 94 * @return none
kenjiArai 0:d95f6ac4c8d6 95 */
kenjiArai 0:d95f6ac4c8d6 96 void set_sensitivity(uint8_t parameter);
kenjiArai 0:d95f6ac4c8d6 97
kenjiArai 0:d95f6ac4c8d6 98 /** Set I2C clock frequency
kenjiArai 0:d95f6ac4c8d6 99 * @param freq.
kenjiArai 0:d95f6ac4c8d6 100 * @return none
kenjiArai 0:d95f6ac4c8d6 101 */
kenjiArai 0:d95f6ac4c8d6 102 void frequency(int hz);
kenjiArai 0:d95f6ac4c8d6 103
kenjiArai 0:d95f6ac4c8d6 104 /** Power Up/Down
kenjiArai 0:d95f6ac4c8d6 105 * @param none
kenjiArai 0:d95f6ac4c8d6 106 * @return none
kenjiArai 0:d95f6ac4c8d6 107 */
kenjiArai 0:d95f6ac4c8d6 108 void power_up(void);
kenjiArai 0:d95f6ac4c8d6 109 void power_down(void);
kenjiArai 0:d95f6ac4c8d6 110
kenjiArai 0:d95f6ac4c8d6 111 protected:
kenjiArai 1:4a02a8fbf021 112 I2C *_i2c_p;
kenjiArai 1:4a02a8fbf021 113 I2C &_i2c;
kenjiArai 0:d95f6ac4c8d6 114
kenjiArai 0:d95f6ac4c8d6 115 void init(void);
kenjiArai 0:d95f6ac4c8d6 116
kenjiArai 0:d95f6ac4c8d6 117 private:
kenjiArai 0:d95f6ac4c8d6 118 uint8_t BH1750_addr;
kenjiArai 0:d95f6ac4c8d6 119 uint8_t dt[4];
kenjiArai 0:d95f6ac4c8d6 120 int8_t sensitivity;
kenjiArai 0:d95f6ac4c8d6 121 };
kenjiArai 0:d95f6ac4c8d6 122
kenjiArai 0:d95f6ac4c8d6 123 #endif // BH1750_H
kenjiArai 1:4a02a8fbf021 124