Library for using the AMS TSL45315 Ambient Light Sensor

Committer:
ajenal
Date:
Wed Mar 26 16:20:25 2014 +0000
Revision:
3:f350cffa13b3
Parent:
2:2946a5d334a0
some minor docu changes

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 2:2946a5d334a0 36 * #include "tsl45315.hpp"
ajenal 3:f350cffa13b3 37
ajenal 0:cafc6c4ed875 38 * Serial pc(USBTX, USBRX);
ajenal 1:303c95402cdc 39 * //TSL45x::TSL45315 sensor(p9, p10);
ajenal 1:303c95402cdc 40 * //TSL45x::TSL45315 sensor(p9, p10, M1);
ajenal 1:303c95402cdc 41 * TSL45x::TSL45315 sensor(p9, p10, I2C_FREQ, 0.5);
ajenal 3:f350cffa13b3 42 * //TSL45x::TSL45315 sensor(p9, p10, I2C_FREQ, 0.5, M1);
ajenal 0:cafc6c4ed875 43 *
ajenal 1:303c95402cdc 44 * int main( void )
ajenal 0:cafc6c4ed875 45 * {
ajenal 0:cafc6c4ed875 46 * pc.printf("TSL45315 Illumination Sensor\n");
ajenal 0:cafc6c4ed875 47 *
ajenal 0:cafc6c4ed875 48 * pc.printf("ID:\t%x\n", sensor.getID());
ajenal 0:cafc6c4ed875 49 * pc.printf("Multiplier:\t%x\n", sensor.getMultiplier());
ajenal 0:cafc6c4ed875 50 *
ajenal 0:cafc6c4ed875 51 * while(1) {
ajenal 1:303c95402cdc 52 * //sensor.getLuxData();
ajenal 0:cafc6c4ed875 53 * pc.printf("Illumination: %u lux\n",sensor.getLux());
ajenal 0:cafc6c4ed875 54 *
ajenal 0:cafc6c4ed875 55 * wait(1);
ajenal 0:cafc6c4ed875 56 * }
ajenal 0:cafc6c4ed875 57 * }
ajenal 0:cafc6c4ed875 58 * @endcode
ajenal 0:cafc6c4ed875 59 */
ajenal 0:cafc6c4ed875 60 class TSL45315
ajenal 0:cafc6c4ed875 61 {
ajenal 0:cafc6c4ed875 62
ajenal 0:cafc6c4ed875 63 private:
ajenal 0:cafc6c4ed875 64
ajenal 0:cafc6c4ed875 65 I2C _i2c;
ajenal 0:cafc6c4ed875 66 Ticker _luxTicker;
ajenal 0:cafc6c4ed875 67
ajenal 0:cafc6c4ed875 68 uint32_t lux;
ajenal 0:cafc6c4ed875 69 uint8_t devID;
ajenal 0:cafc6c4ed875 70 uint8_t multiplier;
ajenal 3:f350cffa13b3 71
ajenal 0:cafc6c4ed875 72 public:
ajenal 1:303c95402cdc 73 /** Create a TSL45315 instance without variable integration time ( set to M1)
ajenal 1:303c95402cdc 74 * with integrated ticker to repeatedly update the illumination value.
ajenal 0:cafc6c4ed875 75 * @param sda - I2C Dataline pin
ajenal 0:cafc6c4ed875 76 * @param scl - I2C Clockline pin
ajenal 1:303c95402cdc 77 * @param i2c_freq - choose the i2c frequency
ajenal 1:303c95402cdc 78 * @param t - ticker interval in seconds
ajenal 0:cafc6c4ed875 79 */
ajenal 1:303c95402cdc 80 TSL45315(PinName sda, PinName scl, int i2c_freq, float t);
ajenal 0:cafc6c4ed875 81
ajenal 1:303c95402cdc 82 /** Create a TSL45315 instance with variable integration time (M1,M2,M4)
ajenal 1:303c95402cdc 83 * and with integrated ticker to repeatedly update the illumination value.
ajenal 1:303c95402cdc 84 * @param sda - I2C Dataline pin
ajenal 1:303c95402cdc 85 * @param scl - I2C Clockline pin
ajenal 1:303c95402cdc 86 * @param i2c_freq - choose the i2c frequency
ajenal 1:303c95402cdc 87 * @param mult - Multiplier with corresponding integration time (M1 = 400ms, M2 = 200ms, M4 = 100ms)
ajenal 1:303c95402cdc 88 * @param t - ticker interval in seconds
ajenal 1:303c95402cdc 89 */
ajenal 1:303c95402cdc 90 TSL45315(PinName sda, PinName scl, int i2c_freq, float t, uint8_t mult);
ajenal 1:303c95402cdc 91
ajenal 1:303c95402cdc 92 /** Create a TSL45315 instance with variable integration time (M1,M2,M4)
ajenal 1:303c95402cdc 93 * without integrated ticker to repeatedly update the illumination value.
ajenal 1:303c95402cdc 94 * For use with seperate ticker or RtosTimer.
ajenal 0:cafc6c4ed875 95 * @param sda - I2C Dataline pin
ajenal 0:cafc6c4ed875 96 * @param scl - I2C Clockline pin
ajenal 0:cafc6c4ed875 97 * @param mult - Multiplier with corresponding integration time (M1 = 400ms, M2 = 200ms, M4 = 100ms)
ajenal 0:cafc6c4ed875 98 */
ajenal 0:cafc6c4ed875 99 TSL45315(PinName sda, PinName scl, uint8_t mult);
ajenal 0:cafc6c4ed875 100
ajenal 1:303c95402cdc 101 /** Create a TSL45315 instance without variable integration time ( set to M1)
ajenal 1:303c95402cdc 102 * and without integrated ticker to repeatedly update the illumination value.
ajenal 1:303c95402cdc 103 * For use with seperate ticker or RtosTimer.
ajenal 1:303c95402cdc 104 * @param sda - I2C Dataline pin
ajenal 1:303c95402cdc 105 * @param scl - I2C Clockline pin
ajenal 1:303c95402cdc 106 */
ajenal 1:303c95402cdc 107 TSL45315(PinName sda, PinName scl);
ajenal 1:303c95402cdc 108
ajenal 1:303c95402cdc 109 /** sets the address in the command register of the
ajenal 0:cafc6c4ed875 110 * target register for future write operations
ajenal 0:cafc6c4ed875 111 * @param reg - specific register to write to (control or config)
ajenal 0:cafc6c4ed875 112 * @param arg - argument of function in the control or config register
ajenal 0:cafc6c4ed875 113 */
ajenal 0:cafc6c4ed875 114 void setReg( int reg, int arg);
ajenal 0:cafc6c4ed875 115
ajenal 0:cafc6c4ed875 116
ajenal 0:cafc6c4ed875 117
ajenal 1:303c95402cdc 118 /** reads out datalow and datahigh registers and
ajenal 0:cafc6c4ed875 119 * calculates the resulting illumination value
ajenal 0:cafc6c4ed875 120 * in lux which is saved in the variable lux
ajenal 0:cafc6c4ed875 121 * @param reg - specific register to write to
ajenal 0:cafc6c4ed875 122 * @param arg - argument of function in the control or config register
ajenal 0:cafc6c4ed875 123 */
ajenal 0:cafc6c4ed875 124 void getLuxData( );
ajenal 0:cafc6c4ed875 125
ajenal 1:303c95402cdc 126 /** @returns returns the actual illumination value in lux which was previously calculated in the getLuxData routine
ajenal 0:cafc6c4ed875 127 */
ajenal 0:cafc6c4ed875 128 uint32_t getLux( ) {
ajenal 0:cafc6c4ed875 129 return lux;
ajenal 0:cafc6c4ed875 130 };
ajenal 0:cafc6c4ed875 131
ajenal 1:303c95402cdc 132 /** reads out the ID register and saves the id in the variable devID
ajenal 0:cafc6c4ed875 133 */
ajenal 3:f350cffa13b3 134 void getIDdata( );
ajenal 0:cafc6c4ed875 135
ajenal 1:303c95402cdc 136 /** @returns the ID of the device
ajenal 0:cafc6c4ed875 137 */
ajenal 0:cafc6c4ed875 138 uint8_t getID( ) {
ajenal 0:cafc6c4ed875 139 return devID;
ajenal 0:cafc6c4ed875 140 };
ajenal 0:cafc6c4ed875 141
ajenal 1:303c95402cdc 142 /** reads out datalow and datahigh registers and
ajenal 0:cafc6c4ed875 143 * calculates the resulting illumination value
ajenal 0:cafc6c4ed875 144 * in lux which is saved in the variable lux
ajenal 0:cafc6c4ed875 145 * @param mult - Multiplier (1,2,4) defined by M1, M2, M4
ajenal 0:cafc6c4ed875 146 */
ajenal 0:cafc6c4ed875 147 void setMultiplier( uint8_t mult);
ajenal 0:cafc6c4ed875 148
ajenal 1:303c95402cdc 149 /** @returns the multiplier according to the choosen integration time
ajenal 0:cafc6c4ed875 150 */
ajenal 0:cafc6c4ed875 151 int getMultiplier( ) {
ajenal 0:cafc6c4ed875 152 return multiplier;
ajenal 0:cafc6c4ed875 153 };
ajenal 3:f350cffa13b3 154
ajenal 0:cafc6c4ed875 155 };
ajenal 0:cafc6c4ed875 156 }
ajenal 0:cafc6c4ed875 157
ajenal 0:cafc6c4ed875 158
ajenal 0:cafc6c4ed875 159 /* !_TSL45315_HPP_ */
ajenal 0:cafc6c4ed875 160 #endif