Library for Si114x optical sensors. Currently intended for the Si1146, although it will work also for the Si1145, and without full functionality for the Si1147
Dependents: Si114x_HelloWorld Hello-Uzuki-sensor-shield
Si114x.h
- Committer:
- Sissors
- Date:
- 2015-08-23
- Revision:
- 0:971d705818e7
File content as of revision 0:971d705818e7:
#ifndef SI114X_H #define SI114X_H #include "mbed.h" /* * Class to interface with Si114x sensors * * Currently only intended for Si1146. Should work also on the Si1145, * but the extra LED of the Si1147 is not supported. Everyone is welcome * to add this support and submit a pull request. * * Aditionally only synchronous mode is for now supported (no async I2C API is used * and the sensor is not placed in automatic measurement mode: Each request starts a new * measurement. Also for this and other issues: Everyone is welcome to submit * pull requests * * For now this is just returning raw values, no scaling is done by the library code */ class Si114x { public: /* Constructor to create new Si114x instance * * @param sda SDA pin of the I2C interface * @param scl SCL pin of the I2C interface */ Si114x(PinName sda, PinName scl); /* Get the measure visible light intensity * * @return unsigned short (uint16_t) representing visible light intensity */ unsigned short getVisibleLight(void); /* Get the measure IR light intensity * * @return unsigned short (uint16_t) representing IR light intensity */ unsigned short getIRLight(void); /* Get the measure UV intensity * * The retval is supposed to be 10 times the UV index. It will be modified * to return a float representing the UV index once it doesn't claim * the UV index is 50 outside. * * @return unsigned short (uint16_t) representing UV intensity */ unsigned short getUVIndex(void); /* Perform a proximity measurement * * This enabled LEDs (set using setPSLEDs) and performs a * reflection measurement. It can be used to obtain (relative) * proximity, but also to measure for example heartbeat, as in * the HelloWorld program. * * Currently the code does not substract ambient light (todo) * * @param pschannel channel to use for the measurement (1-2) * @return unsigned short (uint16_t) representing the reflection */ unsigned short getProximity(char pschannel); /* Set the LEDs for a given proximity measurement * * The Si1146 has two channels to do measurements with and can control 2 LEDs. * This function is used to set which LEDs are used for which channel. * Multiple LEDs can be active at the same time. By default the * constructor sets LED1 to be active with channel 1 and LED2 to * be active with channel 2. * * @param pschannel channel to set active LEDs for (1-2) * @param ledmask LEDs to be active for the set channel (bit 0 is LED1, bit1 is LED2) */ void setPSLEDs(char pschannel, char ledmask); /* Verify I2C communication can occur with the sensor * * @return true when the sensor is found */ bool verifyConnection(void); protected: char read_byte(const char reg); unsigned short read_word(const char reg); void write_byte(const char reg, const char byte); void param_set(const char param, const char value); char param_query(const char param); void write_cmd(const char cmd); I2C i2c; bool continious; }; #endif