Library for using the AMS TSL45315 Ambient Light Sensor
tsl45315.hpp@2:2946a5d334a0, 2014-03-25 (annotated)
- Committer:
- ajenal
- Date:
- Tue Mar 25 10:56:45 2014 +0000
- Revision:
- 2:2946a5d334a0
- Parent:
- 1:303c95402cdc
- Child:
- 3:f350cffa13b3
minor bug fixed
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 | 1:303c95402cdc | 35 | * #include "mbed.h" |
ajenal | 2:2946a5d334a0 | 36 | * #include "tsl45315.hpp" |
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 |