Library for digital light sensor BH1750 (GY-30).

Dependents:   FRA221_P12code2 Nucleo_BH1750 SmartLights TotalSmartLights ... more

Committer:
vrabec
Date:
Mon Aug 18 18:01:09 2014 +0000
Revision:
0:58ee8a917618
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vrabec 0:58ee8a917618 1 /*
vrabec 0:58ee8a917618 2
vrabec 0:58ee8a917618 3 This is a library for the BH1750FVI (GY-30) Digital Light Sensor
vrabec 0:58ee8a917618 4 breakout board.
vrabec 0:58ee8a917618 5
vrabec 0:58ee8a917618 6 The board uses I2C for communication. 2 pins are required to
vrabec 0:58ee8a917618 7 interface to the device and in most cases also pull up resistors.
vrabec 0:58ee8a917618 8
vrabec 0:58ee8a917618 9 Datasheet:
vrabec 0:58ee8a917618 10 http://rohmfs.rohm.com/en/products/databook/datasheet/ic/sensor/light/bh1750fvi-e.pdf
vrabec 0:58ee8a917618 11
vrabec 0:58ee8a917618 12 Inspired by Christopher Laws, March, 2013.
vrabec 0:58ee8a917618 13 Written by Michal Stehlik, August, 2014.
vrabec 0:58ee8a917618 14
vrabec 0:58ee8a917618 15 */
vrabec 0:58ee8a917618 16
vrabec 0:58ee8a917618 17 #ifndef BH1750_h
vrabec 0:58ee8a917618 18 #define BH1750_h
vrabec 0:58ee8a917618 19
vrabec 0:58ee8a917618 20 #include "mbed.h"
vrabec 0:58ee8a917618 21
vrabec 0:58ee8a917618 22 #define BH1750_I2CADDR 0x46
vrabec 0:58ee8a917618 23
vrabec 0:58ee8a917618 24 // No active state
vrabec 0:58ee8a917618 25 #define BH1750_POWER_DOWN 0x00
vrabec 0:58ee8a917618 26
vrabec 0:58ee8a917618 27 // Wating for measurment command
vrabec 0:58ee8a917618 28 #define BH1750_POWER_ON 0x01
vrabec 0:58ee8a917618 29
vrabec 0:58ee8a917618 30 // Reset data register value - not accepted in POWER_DOWN mode
vrabec 0:58ee8a917618 31 #define BH1750_RESET 0x07
vrabec 0:58ee8a917618 32
vrabec 0:58ee8a917618 33 // Start measurement at 1lx resolution. Measurement time is approx 120ms.
vrabec 0:58ee8a917618 34 #define BH1750_CONTINUOUS_HIGH_RES_MODE 0x10
vrabec 0:58ee8a917618 35
vrabec 0:58ee8a917618 36 // Start measurement at 0.5lx resolution. Measurement time is approx 120ms.
vrabec 0:58ee8a917618 37 #define BH1750_CONTINUOUS_HIGH_RES_MODE_2 0x11
vrabec 0:58ee8a917618 38
vrabec 0:58ee8a917618 39 // Start measurement at 4lx resolution. Measurement time is approx 16ms.
vrabec 0:58ee8a917618 40 #define BH1750_CONTINUOUS_LOW_RES_MODE 0x13
vrabec 0:58ee8a917618 41
vrabec 0:58ee8a917618 42 // Start measurement at 1lx resolution. Measurement time is approx 120ms.
vrabec 0:58ee8a917618 43 // Device is automatically set to Power Down after measurement.
vrabec 0:58ee8a917618 44 #define BH1750_ONE_TIME_HIGH_RES_MODE 0x20
vrabec 0:58ee8a917618 45
vrabec 0:58ee8a917618 46 // Start measurement at 0.5lx resolution. Measurement time is approx 120ms.
vrabec 0:58ee8a917618 47 // Device is automatically set to Power Down after measurement.
vrabec 0:58ee8a917618 48 #define BH1750_ONE_TIME_HIGH_RES_MODE_2 0x21
vrabec 0:58ee8a917618 49
vrabec 0:58ee8a917618 50 // Start measurement at 1lx resolution. Measurement time is approx 120ms.
vrabec 0:58ee8a917618 51 // Device is automatically set to Power Down after measurement.
vrabec 0:58ee8a917618 52 #define BH1750_ONE_TIME_LOW_RES_MODE 0x23
vrabec 0:58ee8a917618 53
vrabec 0:58ee8a917618 54 /**
vrabec 0:58ee8a917618 55 * @code
vrabec 0:58ee8a917618 56 * #include "mbed.h"
vrabec 0:58ee8a917618 57 * #include "BH1750.h"
vrabec 0:58ee8a917618 58 *
vrabec 0:58ee8a917618 59 * BH1750 lightSensor(I2C_SDA, I2C_SCL);
vrabec 0:58ee8a917618 60 * Serial pc(SERIAL_TX, SERIAL_RX);
vrabec 0:58ee8a917618 61 *
vrabec 0:58ee8a917618 62 * int main()
vrabec 0:58ee8a917618 63 * {
vrabec 0:58ee8a917618 64 * lightSensor.init();
vrabec 0:58ee8a917618 65 *
vrabec 0:58ee8a917618 66 * while(1) {
vrabec 0:58ee8a917618 67 * pc.printf("Light intensity: %.4f Lux\r\n", lightSensor.readIntesity());
vrabec 0:58ee8a917618 68 * wait(5);
vrabec 0:58ee8a917618 69 * }
vrabec 0:58ee8a917618 70 * }
vrabec 0:58ee8a917618 71 * @endcode
vrabec 0:58ee8a917618 72 */
vrabec 0:58ee8a917618 73
vrabec 0:58ee8a917618 74 class BH1750
vrabec 0:58ee8a917618 75 {
vrabec 0:58ee8a917618 76 public:
vrabec 0:58ee8a917618 77 /**
vrabec 0:58ee8a917618 78 * @param sda
vrabec 0:58ee8a917618 79 * @param scl
vrabec 0:58ee8a917618 80 */
vrabec 0:58ee8a917618 81 BH1750(PinName sda, PinName slc);
vrabec 0:58ee8a917618 82
vrabec 0:58ee8a917618 83 /**
vrabec 0:58ee8a917618 84 * Initialize sensor with specified mode.
vrabec 0:58ee8a917618 85 * Default mode is set to BH1750_CONTINUOUS_HIGH_RES_MODE.
vrabec 0:58ee8a917618 86 * @param mode of sensor operation.
vrabec 0:58ee8a917618 87 */
vrabec 0:58ee8a917618 88 void init(char mode = BH1750_CONTINUOUS_HIGH_RES_MODE);
vrabec 0:58ee8a917618 89
vrabec 0:58ee8a917618 90 /**
vrabec 0:58ee8a917618 91 * Configure sensor with specified mode.
vrabec 0:58ee8a917618 92 * This function is called also in init(char);
vrabec 0:58ee8a917618 93 * @param mode of sensor operation.
vrabec 0:58ee8a917618 94 */
vrabec 0:58ee8a917618 95 void configure(char mode);
vrabec 0:58ee8a917618 96
vrabec 0:58ee8a917618 97 /**
vrabec 0:58ee8a917618 98 * Read light intensity.
vrabec 0:58ee8a917618 99 * In addition also error code and raw data are filled.
vrabec 0:58ee8a917618 100 * @return light intensity in Lux.
vrabec 0:58ee8a917618 101 */
vrabec 0:58ee8a917618 102 float readIntesity(void);
vrabec 0:58ee8a917618 103
vrabec 0:58ee8a917618 104 /**
vrabec 0:58ee8a917618 105 * Get raw data obtained after sucessfull executing of readIntesity(void).
vrabec 0:58ee8a917618 106 * @return unprocessed raw data readed from sensor.
vrabec 0:58ee8a917618 107 */
vrabec 0:58ee8a917618 108 char* getRawData(void);
vrabec 0:58ee8a917618 109
vrabec 0:58ee8a917618 110 /**
vrabec 0:58ee8a917618 111 * @returns
vrabec 0:58ee8a917618 112 * 0 no error.
vrabec 0:58ee8a917618 113 * !=0 I2C error code.
vrabec 0:58ee8a917618 114 */
vrabec 0:58ee8a917618 115 int getStatus(void);
vrabec 0:58ee8a917618 116
vrabec 0:58ee8a917618 117 private:
vrabec 0:58ee8a917618 118 I2C i2c;
vrabec 0:58ee8a917618 119 char rawDataBuffer[2];
vrabec 0:58ee8a917618 120 int status;
vrabec 0:58ee8a917618 121 };
vrabec 0:58ee8a917618 122
vrabec 0:58ee8a917618 123 #endif