Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
