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@1:4a02a8fbf021, 2017-08-23 (annotated)
- Committer:
- kenjiArai
- Date:
- Wed Aug 23 09:21:39 2017 +0000
- Revision:
- 1:4a02a8fbf021
- Parent:
- 0:d95f6ac4c8d6
- Child:
- 2:74dba61588ed
countermeasure for NonCopyable
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 | * |
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 |