BH1750.h@0:4edb4a6ae800, 2018-01-15 (annotated)
- 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?
User | Revision | Line number | New 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 |