Library for using the AMS TSL45315 Ambient Light Sensor
tsl45315.hpp@0:cafc6c4ed875, 2014-03-24 (annotated)
- 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?
User | Revision | Line number | New 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 |