Diff: BH1750.h
- Revision:
- 0:4edb4a6ae800
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BH1750.h Mon Jan 15 05:25:09 2018 +0000 @@ -0,0 +1,96 @@ +/* + +This is a library for the BH1750FVI (GY-30) Digital Light Sensor +breakout board. + +The board uses I2C for communication. + +Datasheet: +http://rohmfs.rohm.com/en/products/databook/datasheet/ic/sensor/light/bh1750fvi-e.pdf + +Inspired by Michal Stehlik, August, 2014. +Written by Josef Křivský, January, 2018. + +*/ + +#ifndef BH1750_h +#define BH1750_h + +#include "mbed.h" + +#define BH1750_I2CADDR 0x46 + +// Neaktivní stav +#define BH1750_POWER_DOWN 0x00 + +// Čekání na příkaz +#define BH1750_POWER_ON 0x01 + +// Reset datového registru senzoru - není akceptováno v neaktivním stavu +#define BH1750_RESET 0x07 + +// Start kontinuálního měření s rozlišením 1lx (trvání přibližně 120ms). +#define BH1750_CONTINUOUS_HIGH_RES_MODE 0x10 + +// Start kontinuálního měření s rozlišením 0.5lx (trvání přibližně 120ms). +#define BH1750_CONTINUOUS_HIGH_RES_MODE_2 0x11 + +// Start kontinuálního měření s rozlišením 4lx (trvání přibližně 16ms). +#define BH1750_CONTINUOUS_LOW_RES_MODE 0x13 + +// Start jednoho měření s rozlišením 1lx (trvání přibližně 120ms). +// Zařízení je po přečtení naměřených dat automaticky vypnuto +#define BH1750_ONE_TIME_HIGH_RES_MODE 0x20 + +// Start jednoho měření s rozlišením 0.5lx (trvání přibližně 120ms). +// Zařízení je po přečtení naměřených dat automaticky vypnuto +#define BH1750_ONE_TIME_HIGH_RES_MODE_2 0x21 + +// Start jednoho měření s rozlišením 4lx (trvání přibližně 16ms). +// Zařízení je po přečtení naměřených dat automaticky vypnuto +#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(); +* lightsensor.contMeas(); +* +* while(1) { +* pc.printf("Light intensity: %.4f Lux\r\n", lightSensor.readIntesity()); +* wait(5); +* } +* } +* @endcode +*/ + +class BH1750 +{ +public: + BH1750(PinName sda = I2C_SDA, PinName scl = I2C_SCL); + void init(void); // Inicializace senzoru + uint16_t singleMeas(char mode = BH1750_ONE_TIME_HIGH_RES_MODE); // Provedení jediného měření a vyčtení výsledku. Akceptované hodnoty jsou typu BH1750_ONE_TIME_... + void contMeas(char mode = BH1750_CONTINUOUS_HIGH_RES_MODE); // Začátek kontinuálního měření bez vyčtení výsledků. + void configure(char mode); // Konfigurace senzoru na specifikovaný mód + uint16_t readIntesity(void); // Vyčtení výsledku posledního měření + char* getRawData(void); // Vyčtení dat ze senzoru bez jejich úpravy + int getStatus(void); // Zjištění statusu senzoru a I2C komunikace + uint16_t getLimit(void); // Zjištění aktuálního limitu osvětlení + void setLimit(uint16_t lim); // Nastavení limitu osvětlení + void setCurrentLimit(void); // Nastavení limitu osvětlení na jeho aktuální hodnotu + +private: + I2C i2c; + char rawDataBuffer[2]; + int status; + uint16_t limit; +}; + +#endif