Library for using the AMS TSL45315 Ambient Light Sensor

Committer:
ajenal
Date:
Tue Mar 25 10:54:56 2014 +0000
Revision:
1:303c95402cdc
Parent:
0:cafc6c4ed875
Child:
2:2946a5d334a0
* constructor overloaded for different kinds of use; * documentation edited

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ajenal 0:cafc6c4ed875 1
ajenal 0:cafc6c4ed875 2
ajenal 0:cafc6c4ed875 3 #ifndef _TSL45315_HPP_
ajenal 0:cafc6c4ed875 4 #define _TSL45315_HPP_
ajenal 0:cafc6c4ed875 5
ajenal 0:cafc6c4ed875 6 #include "mbed.h"
ajenal 0:cafc6c4ed875 7
ajenal 0:cafc6c4ed875 8 #define I2C_ADDR (0x52)
ajenal 0:cafc6c4ed875 9 // Register definition
ajenal 0:cafc6c4ed875 10 #define CONTROL_REG 0x00
ajenal 0:cafc6c4ed875 11 #define CONFIG_REG 0x01
ajenal 0:cafc6c4ed875 12 #define DATALOW_REG 0x04
ajenal 0:cafc6c4ed875 13 #define DATAHIGH_REG 0x05
ajenal 0:cafc6c4ed875 14 #define ID_REG 0x0A
ajenal 0:cafc6c4ed875 15 //Control Register
ajenal 0:cafc6c4ed875 16 #define POWER_DOWN 0X00
ajenal 0:cafc6c4ed875 17 #define SINGLE_ADC 0x02
ajenal 0:cafc6c4ed875 18 #define NORMAL_OP 0x03
ajenal 0:cafc6c4ed875 19 //Config Register
ajenal 0:cafc6c4ed875 20 #define M1 0x00
ajenal 0:cafc6c4ed875 21 #define M2 0x01
ajenal 0:cafc6c4ed875 22 #define M4 0x02
ajenal 0:cafc6c4ed875 23
ajenal 0:cafc6c4ed875 24 #define I2C_FREQ 400000
ajenal 0:cafc6c4ed875 25
ajenal 0:cafc6c4ed875 26 namespace TSL45x
ajenal 0:cafc6c4ed875 27 {
ajenal 0:cafc6c4ed875 28 /** Class: TSL45315
ajenal 0:cafc6c4ed875 29 * Digital Ambient Light Sensor (ALS) - TSL45315
ajenal 0:cafc6c4ed875 30 * Illumination values are directly presented in lux
ajenal 0:cafc6c4ed875 31 * without calculation.
ajenal 0:cafc6c4ed875 32 *
ajenal 0:cafc6c4ed875 33 * Example:
ajenal 0:cafc6c4ed875 34 * @code
ajenal 1:303c95402cdc 35 * #include "mbed.h"
ajenal 1:303c95402cdc 36 * #include "tsl45315.h"
ajenal 0:cafc6c4ed875 37 * Serial pc(USBTX, USBRX);
ajenal 1:303c95402cdc 38 * //TSL45x::TSL45315 sensor(p9, p10);
ajenal 1:303c95402cdc 39 * //TSL45x::TSL45315 sensor(p9, p10, M1);
ajenal 1:303c95402cdc 40 * TSL45x::TSL45315 sensor(p9, p10, I2C_FREQ, 0.5);
ajenal 1:303c95402cdc 41 * //TSL45x::TSL45315 sensor(p9, p10, I2C_FREQ, 1.0, M1);
ajenal 0:cafc6c4ed875 42 *
ajenal 1:303c95402cdc 43 * int main( void )
ajenal 0:cafc6c4ed875 44 * {
ajenal 0:cafc6c4ed875 45 * pc.printf("TSL45315 Illumination Sensor\n");
ajenal 0:cafc6c4ed875 46 *
ajenal 0:cafc6c4ed875 47 * pc.printf("ID:\t%x\n", sensor.getID());
ajenal 0:cafc6c4ed875 48 * pc.printf("Multiplier:\t%x\n", sensor.getMultiplier());
ajenal 0:cafc6c4ed875 49 *
ajenal 0:cafc6c4ed875 50 * while(1) {
ajenal 1:303c95402cdc 51 * //sensor.getLuxData();
ajenal 0:cafc6c4ed875 52 * pc.printf("Illumination: %u lux\n",sensor.getLux());
ajenal 0:cafc6c4ed875 53 *
ajenal 0:cafc6c4ed875 54 * wait(1);
ajenal 0:cafc6c4ed875 55 * }
ajenal 0:cafc6c4ed875 56 * }
ajenal 0:cafc6c4ed875 57 * @endcode
ajenal 0:cafc6c4ed875 58 */
ajenal 0:cafc6c4ed875 59 class TSL45315
ajenal 0:cafc6c4ed875 60 {
ajenal 0:cafc6c4ed875 61
ajenal 0:cafc6c4ed875 62 private:
ajenal 0:cafc6c4ed875 63
ajenal 0:cafc6c4ed875 64 I2C _i2c;
ajenal 0:cafc6c4ed875 65 Ticker _luxTicker;
ajenal 0:cafc6c4ed875 66
ajenal 0:cafc6c4ed875 67 uint32_t lux;
ajenal 0:cafc6c4ed875 68 uint8_t devID;
ajenal 0:cafc6c4ed875 69 uint8_t multiplier;
ajenal 0:cafc6c4ed875 70
ajenal 0:cafc6c4ed875 71 public:
ajenal 1:303c95402cdc 72 /** Create a TSL45315 instance without variable integration time ( set to M1)
ajenal 1:303c95402cdc 73 * with integrated ticker to repeatedly update the illumination value.
ajenal 0:cafc6c4ed875 74 * @param sda - I2C Dataline pin
ajenal 0:cafc6c4ed875 75 * @param scl - I2C Clockline pin
ajenal 1:303c95402cdc 76 * @param i2c_freq - choose the i2c frequency
ajenal 1:303c95402cdc 77 * @param t - ticker interval in seconds
ajenal 0:cafc6c4ed875 78 */
ajenal 1:303c95402cdc 79 TSL45315(PinName sda, PinName scl, int i2c_freq, float t);
ajenal 0:cafc6c4ed875 80
ajenal 1:303c95402cdc 81 /** Create a TSL45315 instance with variable integration time (M1,M2,M4)
ajenal 1:303c95402cdc 82 * and with integrated ticker to repeatedly update the illumination value.
ajenal 1:303c95402cdc 83 * @param sda - I2C Dataline pin
ajenal 1:303c95402cdc 84 * @param scl - I2C Clockline pin
ajenal 1:303c95402cdc 85 * @param i2c_freq - choose the i2c frequency
ajenal 1:303c95402cdc 86 * @param mult - Multiplier with corresponding integration time (M1 = 400ms, M2 = 200ms, M4 = 100ms)
ajenal 1:303c95402cdc 87 * @param t - ticker interval in seconds
ajenal 1:303c95402cdc 88 */
ajenal 1:303c95402cdc 89 TSL45315(PinName sda, PinName scl, int i2c_freq, float t, uint8_t mult);
ajenal 1:303c95402cdc 90
ajenal 1:303c95402cdc 91 /** Create a TSL45315 instance with variable integration time (M1,M2,M4)
ajenal 1:303c95402cdc 92 * without integrated ticker to repeatedly update the illumination value.
ajenal 1:303c95402cdc 93 * For use with seperate ticker or RtosTimer.
ajenal 0:cafc6c4ed875 94 * @param sda - I2C Dataline pin
ajenal 0:cafc6c4ed875 95 * @param scl - I2C Clockline pin
ajenal 0:cafc6c4ed875 96 * @param mult - Multiplier with corresponding integration time (M1 = 400ms, M2 = 200ms, M4 = 100ms)
ajenal 0:cafc6c4ed875 97 */
ajenal 0:cafc6c4ed875 98 TSL45315(PinName sda, PinName scl, uint8_t mult);
ajenal 0:cafc6c4ed875 99
ajenal 1:303c95402cdc 100 /** Create a TSL45315 instance without variable integration time ( set to M1)
ajenal 1:303c95402cdc 101 * and without integrated ticker to repeatedly update the illumination value.
ajenal 1:303c95402cdc 102 * For use with seperate ticker or RtosTimer.
ajenal 1:303c95402cdc 103 * @param sda - I2C Dataline pin
ajenal 1:303c95402cdc 104 * @param scl - I2C Clockline pin
ajenal 1:303c95402cdc 105 */
ajenal 1:303c95402cdc 106 TSL45315(PinName sda, PinName scl);
ajenal 1:303c95402cdc 107
ajenal 1:303c95402cdc 108 /** sets the address in the command register of the
ajenal 0:cafc6c4ed875 109 * target register for future write operations
ajenal 0:cafc6c4ed875 110 * @param reg - specific register to write to (control or config)
ajenal 0:cafc6c4ed875 111 * @param arg - argument of function in the control or config register
ajenal 0:cafc6c4ed875 112 */
ajenal 0:cafc6c4ed875 113 void setReg( int reg, int arg);
ajenal 0:cafc6c4ed875 114
ajenal 0:cafc6c4ed875 115
ajenal 0:cafc6c4ed875 116
ajenal 1:303c95402cdc 117 /** reads out datalow and datahigh registers and
ajenal 0:cafc6c4ed875 118 * calculates the resulting illumination value
ajenal 0:cafc6c4ed875 119 * in lux which is saved in the variable lux
ajenal 0:cafc6c4ed875 120 * @param reg - specific register to write to
ajenal 0:cafc6c4ed875 121 * @param arg - argument of function in the control or config register
ajenal 0:cafc6c4ed875 122 */
ajenal 0:cafc6c4ed875 123 void getLuxData( );
ajenal 0:cafc6c4ed875 124
ajenal 1:303c95402cdc 125 /** @returns returns the actual illumination value in lux which was previously calculated in the getLuxData routine
ajenal 0:cafc6c4ed875 126 */
ajenal 0:cafc6c4ed875 127 uint32_t getLux( ) {
ajenal 0:cafc6c4ed875 128 return lux;
ajenal 0:cafc6c4ed875 129 };
ajenal 0:cafc6c4ed875 130
ajenal 1:303c95402cdc 131 /** reads out the ID register and saves the id in the variable devID
ajenal 0:cafc6c4ed875 132 */
ajenal 0:cafc6c4ed875 133 void getIDdata();
ajenal 0:cafc6c4ed875 134
ajenal 1:303c95402cdc 135 /** @returns the ID of the device
ajenal 0:cafc6c4ed875 136 */
ajenal 0:cafc6c4ed875 137 uint8_t getID( ) {
ajenal 0:cafc6c4ed875 138 return devID;
ajenal 0:cafc6c4ed875 139 };
ajenal 0:cafc6c4ed875 140
ajenal 1:303c95402cdc 141 /** reads out datalow and datahigh registers and
ajenal 0:cafc6c4ed875 142 * calculates the resulting illumination value
ajenal 0:cafc6c4ed875 143 * in lux which is saved in the variable lux
ajenal 0:cafc6c4ed875 144 * @param mult - Multiplier (1,2,4) defined by M1, M2, M4
ajenal 0:cafc6c4ed875 145 */
ajenal 0:cafc6c4ed875 146 void setMultiplier( uint8_t mult);
ajenal 0:cafc6c4ed875 147
ajenal 1:303c95402cdc 148 /** @returns the multiplier according to the choosen integration time
ajenal 0:cafc6c4ed875 149 */
ajenal 0:cafc6c4ed875 150 int getMultiplier( ) {
ajenal 0:cafc6c4ed875 151 return multiplier;
ajenal 0:cafc6c4ed875 152 };
ajenal 0:cafc6c4ed875 153 };
ajenal 0:cafc6c4ed875 154 }
ajenal 0:cafc6c4ed875 155
ajenal 0:cafc6c4ed875 156
ajenal 0:cafc6c4ed875 157 /* !_TSL45315_HPP_ */
ajenal 0:cafc6c4ed875 158 #endif