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.
Revision 0:58ee8a917618, committed 2014-08-18
- Comitter:
- vrabec
- Date:
- Mon Aug 18 18:01:09 2014 +0000
- Child:
- 1:1a0ca36b6230
- Commit message:
- Initial commit
Changed in this revision
| BH1750.cpp | Show annotated file Show diff for this revision Revisions of this file |
| BH1750.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/BH1750.cpp Mon Aug 18 18:01:09 2014 +0000
@@ -0,0 +1,72 @@
+/*
+
+This is a library for the BH1750FVI (GY-30) Digital Light Sensor
+breakout board.
+
+The board uses I2C for communication. 2 pins are required to
+interface to the device and in most cases also pull up resistors.
+
+Datasheet:
+http://rohmfs.rohm.com/en/products/databook/datasheet/ic/sensor/light/bh1750fvi-e.pdf
+
+Inspired by Christopher Laws, March, 2013.
+Written by Michal Stehlik, August, 2014.
+
+*/
+
+#include "BH1750.h"
+
+BH1750::BH1750(PinName sda, PinName scl) : i2c(sda,scl)
+{
+ rawDataBuffer[0] = 0;
+ rawDataBuffer[1] = 0;
+ status = -1;
+}
+
+void BH1750::init(char mode)
+{
+ configure(mode);
+}
+
+
+void BH1750::configure(char mode)
+{
+ char data[1];
+ switch (mode) {
+ case BH1750_CONTINUOUS_HIGH_RES_MODE:
+ case BH1750_CONTINUOUS_HIGH_RES_MODE_2:
+ case BH1750_CONTINUOUS_LOW_RES_MODE:
+ case BH1750_ONE_TIME_HIGH_RES_MODE:
+ case BH1750_ONE_TIME_HIGH_RES_MODE_2:
+ case BH1750_ONE_TIME_LOW_RES_MODE:
+ data[0] = mode;
+ status = i2c.write(BH1750_I2CADDR, data, sizeof(data), false);
+ wait_ms(10);
+ break;
+ default:
+ break;
+ }
+}
+
+
+float BH1750::readIntesity(void)
+{
+ status = i2c.read(BH1750_I2CADDR, rawDataBuffer, 2, false);
+ if(status != 0) {
+ return -1;
+ }
+ //success
+ float result = 0;
+ result = ((rawDataBuffer[0]<<8)|rawDataBuffer[1])/1.2;
+ return result;
+}
+
+int BH1750::getStatus(void)
+{
+ return status;
+}
+
+char* BH1750::getRawData(void)
+{
+ return rawDataBuffer;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/BH1750.h Mon Aug 18 18:01:09 2014 +0000
@@ -0,0 +1,123 @@
+/*
+
+This is a library for the BH1750FVI (GY-30) Digital Light Sensor
+breakout board.
+
+The board uses I2C for communication. 2 pins are required to
+interface to the device and in most cases also pull up resistors.
+
+Datasheet:
+http://rohmfs.rohm.com/en/products/databook/datasheet/ic/sensor/light/bh1750fvi-e.pdf
+
+Inspired by Christopher Laws, March, 2013.
+Written by Michal Stehlik, August, 2014.
+
+*/
+
+#ifndef BH1750_h
+#define BH1750_h
+
+#include "mbed.h"
+
+#define BH1750_I2CADDR 0x46
+
+// No active state
+#define BH1750_POWER_DOWN 0x00
+
+// Wating for measurment command
+#define BH1750_POWER_ON 0x01
+
+// Reset data register value - not accepted in POWER_DOWN mode
+#define BH1750_RESET 0x07
+
+// Start measurement at 1lx resolution. Measurement time is approx 120ms.
+#define BH1750_CONTINUOUS_HIGH_RES_MODE 0x10
+
+// Start measurement at 0.5lx resolution. Measurement time is approx 120ms.
+#define BH1750_CONTINUOUS_HIGH_RES_MODE_2 0x11
+
+// Start measurement at 4lx resolution. Measurement time is approx 16ms.
+#define BH1750_CONTINUOUS_LOW_RES_MODE 0x13
+
+// Start measurement at 1lx resolution. Measurement time is approx 120ms.
+// Device is automatically set to Power Down after measurement.
+#define BH1750_ONE_TIME_HIGH_RES_MODE 0x20
+
+// Start measurement at 0.5lx resolution. Measurement time is approx 120ms.
+// Device is automatically set to Power Down after measurement.
+#define BH1750_ONE_TIME_HIGH_RES_MODE_2 0x21
+
+// Start measurement at 1lx resolution. Measurement time is approx 120ms.
+// Device is automatically set to Power Down after measurement.
+#define BH1750_ONE_TIME_LOW_RES_MODE 0x23
+
+/**
+* @code
+* #include "mbed.h"
+* #include "BH1750.h"
+*
+* BH1750 lightSensor(I2C_SDA, I2C_SCL);
+* Serial pc(SERIAL_TX, SERIAL_RX);
+*
+* int main()
+* {
+* lightSensor.init();
+*
+* while(1) {
+* pc.printf("Light intensity: %.4f Lux\r\n", lightSensor.readIntesity());
+* wait(5);
+* }
+* }
+* @endcode
+*/
+
+class BH1750
+{
+public:
+ /**
+ * @param sda
+ * @param scl
+ */
+ BH1750(PinName sda, PinName slc);
+
+ /**
+ * Initialize sensor with specified mode.
+ * Default mode is set to BH1750_CONTINUOUS_HIGH_RES_MODE.
+ * @param mode of sensor operation.
+ */
+ void init(char mode = BH1750_CONTINUOUS_HIGH_RES_MODE);
+
+ /**
+ * Configure sensor with specified mode.
+ * This function is called also in init(char);
+ * @param mode of sensor operation.
+ */
+ void configure(char mode);
+
+ /**
+ * Read light intensity.
+ * In addition also error code and raw data are filled.
+ * @return light intensity in Lux.
+ */
+ float readIntesity(void);
+
+ /**
+ * Get raw data obtained after sucessfull executing of readIntesity(void).
+ * @return unprocessed raw data readed from sensor.
+ */
+ char* getRawData(void);
+
+ /**
+ * @returns
+ * 0 no error.
+ * !=0 I2C error code.
+ */
+ int getStatus(void);
+
+private:
+ I2C i2c;
+ char rawDataBuffer[2];
+ int status;
+};
+
+#endif