Library for digital light sensor BH1750 (GY-30). SPI Test Comunication with ArduinoMega

Committer:
vrabec
Date:
Mon Aug 18 18:01:09 2014 +0000
Revision:
0:58ee8a917618
Child:
1:1a0ca36b6230
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 #include "BH1750.h"
vrabec 0:58ee8a917618 18
vrabec 0:58ee8a917618 19 BH1750::BH1750(PinName sda, PinName scl) : i2c(sda,scl)
vrabec 0:58ee8a917618 20 {
vrabec 0:58ee8a917618 21 rawDataBuffer[0] = 0;
vrabec 0:58ee8a917618 22 rawDataBuffer[1] = 0;
vrabec 0:58ee8a917618 23 status = -1;
vrabec 0:58ee8a917618 24 }
vrabec 0:58ee8a917618 25
vrabec 0:58ee8a917618 26 void BH1750::init(char mode)
vrabec 0:58ee8a917618 27 {
vrabec 0:58ee8a917618 28 configure(mode);
vrabec 0:58ee8a917618 29 }
vrabec 0:58ee8a917618 30
vrabec 0:58ee8a917618 31
vrabec 0:58ee8a917618 32 void BH1750::configure(char mode)
vrabec 0:58ee8a917618 33 {
vrabec 0:58ee8a917618 34 char data[1];
vrabec 0:58ee8a917618 35 switch (mode) {
vrabec 0:58ee8a917618 36 case BH1750_CONTINUOUS_HIGH_RES_MODE:
vrabec 0:58ee8a917618 37 case BH1750_CONTINUOUS_HIGH_RES_MODE_2:
vrabec 0:58ee8a917618 38 case BH1750_CONTINUOUS_LOW_RES_MODE:
vrabec 0:58ee8a917618 39 case BH1750_ONE_TIME_HIGH_RES_MODE:
vrabec 0:58ee8a917618 40 case BH1750_ONE_TIME_HIGH_RES_MODE_2:
vrabec 0:58ee8a917618 41 case BH1750_ONE_TIME_LOW_RES_MODE:
vrabec 0:58ee8a917618 42 data[0] = mode;
vrabec 0:58ee8a917618 43 status = i2c.write(BH1750_I2CADDR, data, sizeof(data), false);
vrabec 0:58ee8a917618 44 wait_ms(10);
vrabec 0:58ee8a917618 45 break;
vrabec 0:58ee8a917618 46 default:
vrabec 0:58ee8a917618 47 break;
vrabec 0:58ee8a917618 48 }
vrabec 0:58ee8a917618 49 }
vrabec 0:58ee8a917618 50
vrabec 0:58ee8a917618 51
vrabec 0:58ee8a917618 52 float BH1750::readIntesity(void)
vrabec 0:58ee8a917618 53 {
vrabec 0:58ee8a917618 54 status = i2c.read(BH1750_I2CADDR, rawDataBuffer, 2, false);
vrabec 0:58ee8a917618 55 if(status != 0) {
vrabec 0:58ee8a917618 56 return -1;
vrabec 0:58ee8a917618 57 }
vrabec 0:58ee8a917618 58 //success
vrabec 0:58ee8a917618 59 float result = 0;
vrabec 0:58ee8a917618 60 result = ((rawDataBuffer[0]<<8)|rawDataBuffer[1])/1.2;
vrabec 0:58ee8a917618 61 return result;
vrabec 0:58ee8a917618 62 }
vrabec 0:58ee8a917618 63
vrabec 0:58ee8a917618 64 int BH1750::getStatus(void)
vrabec 0:58ee8a917618 65 {
vrabec 0:58ee8a917618 66 return status;
vrabec 0:58ee8a917618 67 }
vrabec 0:58ee8a917618 68
vrabec 0:58ee8a917618 69 char* BH1750::getRawData(void)
vrabec 0:58ee8a917618 70 {
vrabec 0:58ee8a917618 71 return rawDataBuffer;
vrabec 0:58ee8a917618 72 }