Digital 16bit Serial Output Type Ambient Light Sensor IC by ROHM, Ambient light sensor (Illuminance to digital converter)
BH1750.cpp
00001 /* 00002 * mbed library program 00003 * light intensity sensor module with built-in a 16 bit AD converter generating digital signal. 00004 * BH1750 by ROHM Co.,Ltd. 00005 * 00006 * Copyright (c) 2015,'17 Kenji Arai / JH1PJL 00007 * http://www.page.sannet.ne.jp/kenjia/index.html 00008 * http://mbed.org/users/kenjiArai/ 00009 * Created: March 7th, 2015 00010 * Revised: August 23rd, 2017 00011 */ 00012 00013 #include "BH1750.h" 00014 00015 BH1750::BH1750 (PinName p_sda, PinName p_scl) 00016 : _i2c_p(new I2C(p_sda, p_scl)), _i2c(*_i2c_p) 00017 { 00018 BH1750_addr = BH1750_G_CHIP_ADDR; 00019 init(); 00020 } 00021 00022 BH1750::BH1750 (PinName p_sda, PinName p_scl, uint8_t addr) 00023 : _i2c_p(new I2C(p_sda, p_scl)), _i2c(*_i2c_p) 00024 { 00025 BH1750_addr = addr; 00026 init(); 00027 } 00028 00029 BH1750::BH1750 (I2C& p_i2c) 00030 : _i2c(p_i2c) 00031 { 00032 BH1750_addr = BH1750_G_CHIP_ADDR; 00033 init(); 00034 } 00035 00036 BH1750::BH1750 (I2C& p_i2c, uint8_t addr) 00037 : _i2c(p_i2c) 00038 { 00039 BH1750_addr = addr; 00040 init(); 00041 } 00042 00043 /////////////// Read Lux from sensor ////////////////////// 00044 float BH1750::lux() 00045 { 00046 float lux; 00047 00048 _i2c.read(BH1750_addr, (char *)dt, 2, false); 00049 lux = (float)(dt[0] << 8 | dt[1]); 00050 lux = lux / 1.2f * ((float)sensitivity/69); 00051 return lux; 00052 } 00053 00054 /////////////// Initialize //////////////////////////////// 00055 void BH1750::init() 00056 { 00057 _i2c.frequency(100000); 00058 power_up(); 00059 sensitivity = SENS_1R00; 00060 set_sensitivity(sensitivity); 00061 } 00062 00063 /////////////// Timing Register /////////////////////////// 00064 void BH1750::set_sensitivity(uint8_t parameter) 00065 { 00066 if (parameter > SENS_3R68){ 00067 parameter = SENS_3R68; 00068 } else if (parameter < SENS_0R45){ 00069 parameter = SENS_0R45; 00070 } 00071 dt[0] = CMD_M_TIME_H | (parameter >> 5); // Set High byte 00072 _i2c.write((int)BH1750_addr, (char *)dt, 1, false); 00073 dt[0] = CMD_M_TIME_L | (parameter & 0x1f); // Set Low byte 00074 _i2c.write((int)BH1750_addr, (char *)dt, 1, false); 00075 dt[0] = CMD_C_H_RES_M; // Measurement mode: High Resolution 00076 _i2c.write((int)BH1750_addr, (char *)dt, 1, false); 00077 wait_ms(240); // need normal conversion time(120mS) x 2 00078 } 00079 00080 /////////////// Power ON/OFF ////////////////////////////// 00081 void BH1750::power_up() 00082 { 00083 dt[0] = CMD_PWR_UP; 00084 _i2c.write((int)BH1750_addr, (char *)dt, 1, false); 00085 } 00086 00087 void BH1750::power_down() 00088 { 00089 dt[0] = CMD_PWR_DWN; 00090 _i2c.write((int)BH1750_addr, (char *)dt, 1, false); 00091 } 00092 00093 /////////////// I2C Freq. ///////////////////////////////// 00094 void BH1750::frequency(int hz) 00095 { 00096 _i2c.frequency(hz); 00097 } 00098 00099
Generated on Tue Jul 12 2022 18:55:47 by 1.7.2