Library for using the AMS TSL45315 Ambient Light Sensor

Committer:
ajenal
Date:
Mon Mar 24 17:00:33 2014 +0000
Revision:
0:cafc6c4ed875
Child:
1:303c95402cdc
intial commit

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