Digital 16bit Serial Output Type Ambient Light Sensor IC by ROHM, Ambient light sensor (Illuminance to digital converter)
BH1750.cpp@1:4a02a8fbf021, 2017-08-23 (annotated)
- 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?
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 | #include "BH1750.h" |
kenjiArai | 0:d95f6ac4c8d6 | 14 | |
kenjiArai | 1:4a02a8fbf021 | 15 | BH1750::BH1750 (PinName p_sda, PinName p_scl) |
kenjiArai | 1:4a02a8fbf021 | 16 | : _i2c_p(new I2C(p_sda, p_scl)), _i2c(*_i2c_p) |
kenjiArai | 0:d95f6ac4c8d6 | 17 | { |
kenjiArai | 0:d95f6ac4c8d6 | 18 | BH1750_addr = BH1750_G_CHIP_ADDR; |
kenjiArai | 0:d95f6ac4c8d6 | 19 | init(); |
kenjiArai | 0:d95f6ac4c8d6 | 20 | } |
kenjiArai | 0:d95f6ac4c8d6 | 21 | |
kenjiArai | 1:4a02a8fbf021 | 22 | BH1750::BH1750 (PinName p_sda, PinName p_scl, uint8_t addr) |
kenjiArai | 1:4a02a8fbf021 | 23 | : _i2c_p(new I2C(p_sda, p_scl)), _i2c(*_i2c_p) |
kenjiArai | 0:d95f6ac4c8d6 | 24 | { |
kenjiArai | 0:d95f6ac4c8d6 | 25 | BH1750_addr = addr; |
kenjiArai | 0:d95f6ac4c8d6 | 26 | init(); |
kenjiArai | 0:d95f6ac4c8d6 | 27 | } |
kenjiArai | 0:d95f6ac4c8d6 | 28 | |
kenjiArai | 1:4a02a8fbf021 | 29 | BH1750::BH1750 (I2C& p_i2c) |
kenjiArai | 1:4a02a8fbf021 | 30 | : _i2c(p_i2c) |
kenjiArai | 0:d95f6ac4c8d6 | 31 | { |
kenjiArai | 0:d95f6ac4c8d6 | 32 | BH1750_addr = BH1750_G_CHIP_ADDR; |
kenjiArai | 0:d95f6ac4c8d6 | 33 | init(); |
kenjiArai | 0:d95f6ac4c8d6 | 34 | } |
kenjiArai | 0:d95f6ac4c8d6 | 35 | |
kenjiArai | 1:4a02a8fbf021 | 36 | BH1750::BH1750 (I2C& p_i2c, uint8_t addr) |
kenjiArai | 1:4a02a8fbf021 | 37 | : _i2c(p_i2c) |
kenjiArai | 0:d95f6ac4c8d6 | 38 | { |
kenjiArai | 0:d95f6ac4c8d6 | 39 | BH1750_addr = addr; |
kenjiArai | 0:d95f6ac4c8d6 | 40 | init(); |
kenjiArai | 0:d95f6ac4c8d6 | 41 | } |
kenjiArai | 0:d95f6ac4c8d6 | 42 | |
kenjiArai | 0:d95f6ac4c8d6 | 43 | /////////////// Read Lux from sensor ////////////////////// |
kenjiArai | 0:d95f6ac4c8d6 | 44 | float BH1750::lux() |
kenjiArai | 0:d95f6ac4c8d6 | 45 | { |
kenjiArai | 0:d95f6ac4c8d6 | 46 | float lux; |
kenjiArai | 0:d95f6ac4c8d6 | 47 | |
kenjiArai | 0:d95f6ac4c8d6 | 48 | _i2c.read(BH1750_addr, (char *)dt, 2, false); |
kenjiArai | 0:d95f6ac4c8d6 | 49 | lux = (float)(dt[0] << 8 | dt[1]); |
kenjiArai | 1:4a02a8fbf021 | 50 | lux = lux / 1.2f * ((float)sensitivity/69); |
kenjiArai | 0:d95f6ac4c8d6 | 51 | return lux; |
kenjiArai | 0:d95f6ac4c8d6 | 52 | } |
kenjiArai | 0:d95f6ac4c8d6 | 53 | |
kenjiArai | 0:d95f6ac4c8d6 | 54 | /////////////// Initialize //////////////////////////////// |
kenjiArai | 0:d95f6ac4c8d6 | 55 | void BH1750::init() |
kenjiArai | 0:d95f6ac4c8d6 | 56 | { |
kenjiArai | 0:d95f6ac4c8d6 | 57 | _i2c.frequency(100000); |
kenjiArai | 0:d95f6ac4c8d6 | 58 | power_up(); |
kenjiArai | 0:d95f6ac4c8d6 | 59 | sensitivity = SENS_1R00; |
kenjiArai | 0:d95f6ac4c8d6 | 60 | set_sensitivity(sensitivity); |
kenjiArai | 0:d95f6ac4c8d6 | 61 | } |
kenjiArai | 0:d95f6ac4c8d6 | 62 | |
kenjiArai | 0:d95f6ac4c8d6 | 63 | /////////////// Timing Register /////////////////////////// |
kenjiArai | 0:d95f6ac4c8d6 | 64 | void BH1750::set_sensitivity(uint8_t parameter) |
kenjiArai | 0:d95f6ac4c8d6 | 65 | { |
kenjiArai | 0:d95f6ac4c8d6 | 66 | if (parameter > SENS_3R68){ |
kenjiArai | 0:d95f6ac4c8d6 | 67 | parameter = SENS_3R68; |
kenjiArai | 0:d95f6ac4c8d6 | 68 | } else if (parameter < SENS_0R45){ |
kenjiArai | 0:d95f6ac4c8d6 | 69 | parameter = SENS_0R45; |
kenjiArai | 0:d95f6ac4c8d6 | 70 | } |
kenjiArai | 0:d95f6ac4c8d6 | 71 | dt[0] = CMD_M_TIME_H | (parameter >> 5); // Set High byte |
kenjiArai | 0:d95f6ac4c8d6 | 72 | _i2c.write((int)BH1750_addr, (char *)dt, 1, false); |
kenjiArai | 0:d95f6ac4c8d6 | 73 | dt[0] = CMD_M_TIME_L | (parameter & 0x1f); // Set Low byte |
kenjiArai | 0:d95f6ac4c8d6 | 74 | _i2c.write((int)BH1750_addr, (char *)dt, 1, false); |
kenjiArai | 0:d95f6ac4c8d6 | 75 | dt[0] = CMD_C_H_RES_M; // Measurement mode: High Resolution |
kenjiArai | 0:d95f6ac4c8d6 | 76 | _i2c.write((int)BH1750_addr, (char *)dt, 1, false); |
kenjiArai | 0:d95f6ac4c8d6 | 77 | wait_ms(240); // need normal conversion time(120mS) x 2 |
kenjiArai | 0:d95f6ac4c8d6 | 78 | } |
kenjiArai | 0:d95f6ac4c8d6 | 79 | |
kenjiArai | 0:d95f6ac4c8d6 | 80 | /////////////// Power ON/OFF ////////////////////////////// |
kenjiArai | 0:d95f6ac4c8d6 | 81 | void BH1750::power_up() |
kenjiArai | 0:d95f6ac4c8d6 | 82 | { |
kenjiArai | 0:d95f6ac4c8d6 | 83 | dt[0] = CMD_PWR_UP; |
kenjiArai | 0:d95f6ac4c8d6 | 84 | _i2c.write((int)BH1750_addr, (char *)dt, 1, false); |
kenjiArai | 0:d95f6ac4c8d6 | 85 | } |
kenjiArai | 0:d95f6ac4c8d6 | 86 | |
kenjiArai | 0:d95f6ac4c8d6 | 87 | void BH1750::power_down() |
kenjiArai | 0:d95f6ac4c8d6 | 88 | { |
kenjiArai | 0:d95f6ac4c8d6 | 89 | dt[0] = CMD_PWR_DWN; |
kenjiArai | 0:d95f6ac4c8d6 | 90 | _i2c.write((int)BH1750_addr, (char *)dt, 1, false); |
kenjiArai | 0:d95f6ac4c8d6 | 91 | } |
kenjiArai | 0:d95f6ac4c8d6 | 92 | |
kenjiArai | 0:d95f6ac4c8d6 | 93 | /////////////// I2C Freq. ///////////////////////////////// |
kenjiArai | 0:d95f6ac4c8d6 | 94 | void BH1750::frequency(int hz) |
kenjiArai | 0:d95f6ac4c8d6 | 95 | { |
kenjiArai | 0:d95f6ac4c8d6 | 96 | _i2c.frequency(hz); |
kenjiArai | 0:d95f6ac4c8d6 | 97 | } |
kenjiArai | 1:4a02a8fbf021 | 98 | |
kenjiArai | 1:4a02a8fbf021 | 99 |