Committer:
civava
Date:
Mon Jan 15 05:25:09 2018 +0000
Revision:
0:4edb4a6ae800
Updated version of BH1750 library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
civava 0:4edb4a6ae800 1 /*
civava 0:4edb4a6ae800 2
civava 0:4edb4a6ae800 3 This is a library for the BH1750FVI (GY-30) Digital Light Sensor
civava 0:4edb4a6ae800 4 breakout board.
civava 0:4edb4a6ae800 5
civava 0:4edb4a6ae800 6 The board uses I2C for communication.
civava 0:4edb4a6ae800 7
civava 0:4edb4a6ae800 8 Datasheet:
civava 0:4edb4a6ae800 9 http://rohmfs.rohm.com/en/products/databook/datasheet/ic/sensor/light/bh1750fvi-e.pdf
civava 0:4edb4a6ae800 10
civava 0:4edb4a6ae800 11 Inspired by Michal Stehlik, August, 2014.
civava 0:4edb4a6ae800 12 Written by Josef Křivský, January, 2018.
civava 0:4edb4a6ae800 13
civava 0:4edb4a6ae800 14 */
civava 0:4edb4a6ae800 15
civava 0:4edb4a6ae800 16 #ifndef BH1750_h
civava 0:4edb4a6ae800 17 #define BH1750_h
civava 0:4edb4a6ae800 18
civava 0:4edb4a6ae800 19 #include "mbed.h"
civava 0:4edb4a6ae800 20
civava 0:4edb4a6ae800 21 #define BH1750_I2CADDR 0x46
civava 0:4edb4a6ae800 22
civava 0:4edb4a6ae800 23 // Neaktivní stav
civava 0:4edb4a6ae800 24 #define BH1750_POWER_DOWN 0x00
civava 0:4edb4a6ae800 25
civava 0:4edb4a6ae800 26 // Čekání na příkaz
civava 0:4edb4a6ae800 27 #define BH1750_POWER_ON 0x01
civava 0:4edb4a6ae800 28
civava 0:4edb4a6ae800 29 // Reset datového registru senzoru - není akceptováno v neaktivním stavu
civava 0:4edb4a6ae800 30 #define BH1750_RESET 0x07
civava 0:4edb4a6ae800 31
civava 0:4edb4a6ae800 32 // Start kontinuálního měření s rozlišením 1lx (trvání přibližně 120ms).
civava 0:4edb4a6ae800 33 #define BH1750_CONTINUOUS_HIGH_RES_MODE 0x10
civava 0:4edb4a6ae800 34
civava 0:4edb4a6ae800 35 // Start kontinuálního měření s rozlišením 0.5lx (trvání přibližně 120ms).
civava 0:4edb4a6ae800 36 #define BH1750_CONTINUOUS_HIGH_RES_MODE_2 0x11
civava 0:4edb4a6ae800 37
civava 0:4edb4a6ae800 38 // Start kontinuálního měření s rozlišením 4lx (trvání přibližně 16ms).
civava 0:4edb4a6ae800 39 #define BH1750_CONTINUOUS_LOW_RES_MODE 0x13
civava 0:4edb4a6ae800 40
civava 0:4edb4a6ae800 41 // Start jednoho měření s rozlišením 1lx (trvání přibližně 120ms).
civava 0:4edb4a6ae800 42 // Zařízení je po přečtení naměřených dat automaticky vypnuto
civava 0:4edb4a6ae800 43 #define BH1750_ONE_TIME_HIGH_RES_MODE 0x20
civava 0:4edb4a6ae800 44
civava 0:4edb4a6ae800 45 // Start jednoho měření s rozlišením 0.5lx (trvání přibližně 120ms).
civava 0:4edb4a6ae800 46 // Zařízení je po přečtení naměřených dat automaticky vypnuto
civava 0:4edb4a6ae800 47 #define BH1750_ONE_TIME_HIGH_RES_MODE_2 0x21
civava 0:4edb4a6ae800 48
civava 0:4edb4a6ae800 49 // Start jednoho měření s rozlišením 4lx (trvání přibližně 16ms).
civava 0:4edb4a6ae800 50 // Zařízení je po přečtení naměřených dat automaticky vypnuto
civava 0:4edb4a6ae800 51 #define BH1750_ONE_TIME_LOW_RES_MODE 0x23
civava 0:4edb4a6ae800 52
civava 0:4edb4a6ae800 53 /**
civava 0:4edb4a6ae800 54 * @code
civava 0:4edb4a6ae800 55 * #include "mbed.h"
civava 0:4edb4a6ae800 56 * #include "BH1750.h"
civava 0:4edb4a6ae800 57 *
civava 0:4edb4a6ae800 58 * BH1750 lightSensor(I2C_SDA, I2C_SCL);
civava 0:4edb4a6ae800 59 * Serial pc(SERIAL_TX, SERIAL_RX);
civava 0:4edb4a6ae800 60 *
civava 0:4edb4a6ae800 61 * int main()
civava 0:4edb4a6ae800 62 * {
civava 0:4edb4a6ae800 63 * lightSensor.init();
civava 0:4edb4a6ae800 64 * lightsensor.contMeas();
civava 0:4edb4a6ae800 65 *
civava 0:4edb4a6ae800 66 * while(1) {
civava 0:4edb4a6ae800 67 * pc.printf("Light intensity: %.4f Lux\r\n", lightSensor.readIntesity());
civava 0:4edb4a6ae800 68 * wait(5);
civava 0:4edb4a6ae800 69 * }
civava 0:4edb4a6ae800 70 * }
civava 0:4edb4a6ae800 71 * @endcode
civava 0:4edb4a6ae800 72 */
civava 0:4edb4a6ae800 73
civava 0:4edb4a6ae800 74 class BH1750
civava 0:4edb4a6ae800 75 {
civava 0:4edb4a6ae800 76 public:
civava 0:4edb4a6ae800 77 BH1750(PinName sda = I2C_SDA, PinName scl = I2C_SCL);
civava 0:4edb4a6ae800 78 void init(void); // Inicializace senzoru
civava 0:4edb4a6ae800 79 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_...
civava 0:4edb4a6ae800 80 void contMeas(char mode = BH1750_CONTINUOUS_HIGH_RES_MODE); // Začátek kontinuálního měření bez vyčtení výsledků.
civava 0:4edb4a6ae800 81 void configure(char mode); // Konfigurace senzoru na specifikovaný mód
civava 0:4edb4a6ae800 82 uint16_t readIntesity(void); // Vyčtení výsledku posledního měření
civava 0:4edb4a6ae800 83 char* getRawData(void); // Vyčtení dat ze senzoru bez jejich úpravy
civava 0:4edb4a6ae800 84 int getStatus(void); // Zjištění statusu senzoru a I2C komunikace
civava 0:4edb4a6ae800 85 uint16_t getLimit(void); // Zjištění aktuálního limitu osvětlení
civava 0:4edb4a6ae800 86 void setLimit(uint16_t lim); // Nastavení limitu osvětlení
civava 0:4edb4a6ae800 87 void setCurrentLimit(void); // Nastavení limitu osvětlení na jeho aktuální hodnotu
civava 0:4edb4a6ae800 88
civava 0:4edb4a6ae800 89 private:
civava 0:4edb4a6ae800 90 I2C i2c;
civava 0:4edb4a6ae800 91 char rawDataBuffer[2];
civava 0:4edb4a6ae800 92 int status;
civava 0:4edb4a6ae800 93 uint16_t limit;
civava 0:4edb4a6ae800 94 };
civava 0:4edb4a6ae800 95
civava 0:4edb4a6ae800 96 #endif