Address is changed to suit Grove Digital Light Sensor.
Fork of TSL2561_I2C by
TSL2561_I2C.h@6:17fef2caa563, 2014-04-24 (annotated)
- Committer:
- karlmaxwell67
- Date:
- Thu Apr 24 10:48:29 2014 +0000
- Revision:
- 6:17fef2caa563
- Parent:
- 5:93782eb646de
- Child:
- 7:3a0c5545d4f7
Comments added and class documentation auto-generated.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
karlmaxwell67 | 5:93782eb646de | 1 | #ifndef TSL2561_I2C_H |
karlmaxwell67 | 5:93782eb646de | 2 | #define TSL2561_I2C_H |
karlmaxwell67 | 0:453a43c8bf2b | 3 | #include "mbed.h" |
karlmaxwell67 | 0:453a43c8bf2b | 4 | |
karlmaxwell67 | 1:70d7d9f1af01 | 5 | //Defines |
karlmaxwell67 | 5:93782eb646de | 6 | #define TSL_SLAVE_ADDRESS 0x39 |
karlmaxwell67 | 2:38d5187a4e7b | 7 | |
karlmaxwell67 | 5:93782eb646de | 8 | #define TSL_CONTROL 0x00 |
karlmaxwell67 | 5:93782eb646de | 9 | #define TSL_TIMING 0x01 |
karlmaxwell67 | 5:93782eb646de | 10 | #define TSL_THRESHLOWLOW 0x02 |
karlmaxwell67 | 5:93782eb646de | 11 | #define TSL_THRESHHIGHLOW 0x04 |
karlmaxwell67 | 5:93782eb646de | 12 | #define TSL_INTERRUPT 0x06 |
karlmaxwell67 | 5:93782eb646de | 13 | #define TSL_ID 0x0A |
karlmaxwell67 | 5:93782eb646de | 14 | #define TSL_DATA0LOW 0x0C |
karlmaxwell67 | 5:93782eb646de | 15 | #define TSL_DATA1LOW 0x0E |
karlmaxwell67 | 1:70d7d9f1af01 | 16 | |
karlmaxwell67 | 6:17fef2caa563 | 17 | /** TSL2561_I2C class. |
karlmaxwell67 | 6:17fef2caa563 | 18 | * Abstraction for TAOS TSL2561 Light-To-Digital Converter. |
karlmaxwell67 | 6:17fef2caa563 | 19 | * |
karlmaxwell67 | 6:17fef2caa563 | 20 | * Example: |
karlmaxwell67 | 6:17fef2caa563 | 21 | * @code |
karlmaxwell67 | 6:17fef2caa563 | 22 | * #include "mbed.h" |
karlmaxwell67 | 6:17fef2caa563 | 23 | * #include "TSL2561_I2C.h" |
karlmaxwell67 | 6:17fef2caa563 | 24 | * |
karlmaxwell67 | 6:17fef2caa563 | 25 | * TSL2561_I2C lum_sensor( p9, p10 ); |
karlmaxwell67 | 6:17fef2caa563 | 26 | * |
karlmaxwell67 | 6:17fef2caa563 | 27 | * int main() { |
karlmaxwell67 | 6:17fef2caa563 | 28 | * lum_sensor.enablePower(); |
karlmaxwell67 | 6:17fef2caa563 | 29 | * |
karlmaxwell67 | 6:17fef2caa563 | 30 | * int rgb_readings[4]; |
karlmaxwell67 | 6:17fef2caa563 | 31 | * while(1) { |
karlmaxwell67 | 6:17fef2caa563 | 32 | * printf( "Luminosity: %4.2f\n", lum_sensor.getLux() ); |
karlmaxwell67 | 6:17fef2caa563 | 33 | * wait_ms( 100 ); |
karlmaxwell67 | 6:17fef2caa563 | 34 | * } |
karlmaxwell67 | 6:17fef2caa563 | 35 | * } |
karlmaxwell67 | 6:17fef2caa563 | 36 | * @endcode |
karlmaxwell67 | 6:17fef2caa563 | 37 | */ |
karlmaxwell67 | 5:93782eb646de | 38 | class TSL2561_I2C { |
karlmaxwell67 | 0:453a43c8bf2b | 39 | public: |
karlmaxwell67 | 6:17fef2caa563 | 40 | /** Create TSL2561_I2C instance |
karlmaxwell67 | 6:17fef2caa563 | 41 | * |
karlmaxwell67 | 6:17fef2caa563 | 42 | * @param sda sda pin for I2C |
karlmaxwell67 | 6:17fef2caa563 | 43 | * @param scl scl pin for I2C |
karlmaxwell67 | 6:17fef2caa563 | 44 | */ |
karlmaxwell67 | 5:93782eb646de | 45 | TSL2561_I2C( PinName sda, PinName scl ); |
karlmaxwell67 | 1:70d7d9f1af01 | 46 | |
karlmaxwell67 | 6:17fef2caa563 | 47 | /** Read broadband photodiode (visible plus infrared) |
karlmaxwell67 | 6:17fef2caa563 | 48 | * |
karlmaxwell67 | 6:17fef2caa563 | 49 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 50 | * Irradiance measured |
karlmaxwell67 | 6:17fef2caa563 | 51 | */ |
karlmaxwell67 | 5:93782eb646de | 52 | int getVisibleAndIR(); |
karlmaxwell67 | 6:17fef2caa563 | 53 | |
karlmaxwell67 | 6:17fef2caa563 | 54 | /** Read infrared-responding photodiode |
karlmaxwell67 | 6:17fef2caa563 | 55 | * |
karlmaxwell67 | 6:17fef2caa563 | 56 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 57 | * Irradiance measured |
karlmaxwell67 | 6:17fef2caa563 | 58 | */ |
karlmaxwell67 | 5:93782eb646de | 59 | int getIROnly(); |
karlmaxwell67 | 6:17fef2caa563 | 60 | |
karlmaxwell67 | 6:17fef2caa563 | 61 | /** Read sensors and calculate Illuminance in lux |
karlmaxwell67 | 6:17fef2caa563 | 62 | * |
karlmaxwell67 | 6:17fef2caa563 | 63 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 64 | * Illuminance (lux) |
karlmaxwell67 | 6:17fef2caa563 | 65 | */ |
karlmaxwell67 | 5:93782eb646de | 66 | float getLux(); |
karlmaxwell67 | 6:17fef2caa563 | 67 | |
karlmaxwell67 | 6:17fef2caa563 | 68 | /** Power up the device. |
karlmaxwell67 | 6:17fef2caa563 | 69 | * |
karlmaxwell67 | 6:17fef2caa563 | 70 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 71 | * 1 if successful |
karlmaxwell67 | 6:17fef2caa563 | 72 | * 0 if otherwise |
karlmaxwell67 | 6:17fef2caa563 | 73 | */ |
karlmaxwell67 | 3:6a89ac4a1979 | 74 | int enablePower(); |
karlmaxwell67 | 6:17fef2caa563 | 75 | |
karlmaxwell67 | 6:17fef2caa563 | 76 | /** Disable power to the device. |
karlmaxwell67 | 6:17fef2caa563 | 77 | * |
karlmaxwell67 | 6:17fef2caa563 | 78 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 79 | * 1 if successful |
karlmaxwell67 | 6:17fef2caa563 | 80 | * 0 if otherwise |
karlmaxwell67 | 6:17fef2caa563 | 81 | */ |
karlmaxwell67 | 3:6a89ac4a1979 | 82 | int disablePower(); |
karlmaxwell67 | 6:17fef2caa563 | 83 | |
karlmaxwell67 | 6:17fef2caa563 | 84 | /** Check if power to the device is enabled. |
karlmaxwell67 | 6:17fef2caa563 | 85 | * |
karlmaxwell67 | 6:17fef2caa563 | 86 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 87 | * 1 if power ON |
karlmaxwell67 | 6:17fef2caa563 | 88 | * 0 if power OFF |
karlmaxwell67 | 6:17fef2caa563 | 89 | */ |
karlmaxwell67 | 4:5d1f8d7d81ff | 90 | bool isPowerEnabled(); |
karlmaxwell67 | 5:93782eb646de | 91 | |
karlmaxwell67 | 6:17fef2caa563 | 92 | /** Return present gain value |
karlmaxwell67 | 6:17fef2caa563 | 93 | * |
karlmaxwell67 | 6:17fef2caa563 | 94 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 95 | * 1 (low gain mode) |
karlmaxwell67 | 6:17fef2caa563 | 96 | * 16 (high gain mode) |
karlmaxwell67 | 6:17fef2caa563 | 97 | */ |
karlmaxwell67 | 5:93782eb646de | 98 | int readGain(); |
karlmaxwell67 | 6:17fef2caa563 | 99 | |
karlmaxwell67 | 6:17fef2caa563 | 100 | /** Set gain |
karlmaxwell67 | 6:17fef2caa563 | 101 | * |
karlmaxwell67 | 6:17fef2caa563 | 102 | * @param gain Gain must be either 1 or 16 |
karlmaxwell67 | 6:17fef2caa563 | 103 | * |
karlmaxwell67 | 6:17fef2caa563 | 104 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 105 | * 1 if successful |
karlmaxwell67 | 6:17fef2caa563 | 106 | * 0 if otherwise |
karlmaxwell67 | 6:17fef2caa563 | 107 | */ |
karlmaxwell67 | 6:17fef2caa563 | 108 | int setGain( const int gain ); |
karlmaxwell67 | 6:17fef2caa563 | 109 | |
karlmaxwell67 | 6:17fef2caa563 | 110 | /** Read the current integration time. |
karlmaxwell67 | 6:17fef2caa563 | 111 | * |
karlmaxwell67 | 6:17fef2caa563 | 112 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 113 | * Integration time in milliseconds |
karlmaxwell67 | 6:17fef2caa563 | 114 | */ |
karlmaxwell67 | 6:17fef2caa563 | 115 | float readIntegrationTime(); |
karlmaxwell67 | 6:17fef2caa563 | 116 | |
karlmaxwell67 | 6:17fef2caa563 | 117 | /** Set integration time. |
karlmaxwell67 | 6:17fef2caa563 | 118 | * |
karlmaxwell67 | 6:17fef2caa563 | 119 | * @param itime Integration time to set in milliseconds. Should be 13.7, 101 or 402. |
karlmaxwell67 | 6:17fef2caa563 | 120 | * |
karlmaxwell67 | 6:17fef2caa563 | 121 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 122 | * 1 if successful |
karlmaxwell67 | 6:17fef2caa563 | 123 | * 0 if otherwise |
karlmaxwell67 | 6:17fef2caa563 | 124 | */ |
karlmaxwell67 | 6:17fef2caa563 | 125 | int setIntegrationTime( const float itime ); |
karlmaxwell67 | 6:17fef2caa563 | 126 | |
karlmaxwell67 | 6:17fef2caa563 | 127 | /** Read the low trigger point for the comparison function for interrupt generation. |
karlmaxwell67 | 6:17fef2caa563 | 128 | * |
karlmaxwell67 | 6:17fef2caa563 | 129 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 130 | * Low threshold value |
karlmaxwell67 | 6:17fef2caa563 | 131 | */ |
karlmaxwell67 | 3:6a89ac4a1979 | 132 | int readLowInterruptThreshold(); |
karlmaxwell67 | 6:17fef2caa563 | 133 | |
karlmaxwell67 | 6:17fef2caa563 | 134 | /** Read the high trigger point for the comparison function for interrupt generation. |
karlmaxwell67 | 6:17fef2caa563 | 135 | * |
karlmaxwell67 | 6:17fef2caa563 | 136 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 137 | * High threshold value |
karlmaxwell67 | 6:17fef2caa563 | 138 | */ |
karlmaxwell67 | 3:6a89ac4a1979 | 139 | int readHighInterruptThreshold(); |
karlmaxwell67 | 6:17fef2caa563 | 140 | |
karlmaxwell67 | 6:17fef2caa563 | 141 | /** Set the low trigger point for the comparison function for interrupt generation. |
karlmaxwell67 | 6:17fef2caa563 | 142 | * |
karlmaxwell67 | 6:17fef2caa563 | 143 | * @param threshold Low threshold value |
karlmaxwell67 | 6:17fef2caa563 | 144 | * |
karlmaxwell67 | 6:17fef2caa563 | 145 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 146 | * 1 if successful |
karlmaxwell67 | 6:17fef2caa563 | 147 | * 0 if otherwise |
karlmaxwell67 | 6:17fef2caa563 | 148 | */ |
karlmaxwell67 | 3:6a89ac4a1979 | 149 | int setLowInterruptThreshold( const int threshold ); |
karlmaxwell67 | 6:17fef2caa563 | 150 | |
karlmaxwell67 | 6:17fef2caa563 | 151 | /** Set the high trigger point for the comparison function for interrupt generation. |
karlmaxwell67 | 6:17fef2caa563 | 152 | * |
karlmaxwell67 | 6:17fef2caa563 | 153 | * @param threshold High threshold value |
karlmaxwell67 | 6:17fef2caa563 | 154 | * |
karlmaxwell67 | 6:17fef2caa563 | 155 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 156 | * 1 if successful |
karlmaxwell67 | 6:17fef2caa563 | 157 | * 0 if otherwise |
karlmaxwell67 | 6:17fef2caa563 | 158 | */ |
karlmaxwell67 | 3:6a89ac4a1979 | 159 | int setHighInterruptThreshold( const int threshold ); |
karlmaxwell67 | 6:17fef2caa563 | 160 | |
karlmaxwell67 | 6:17fef2caa563 | 161 | /** Return the number of consecutive values out of range (set by the low and high thresholds) required to trigger an interrupt |
karlmaxwell67 | 6:17fef2caa563 | 162 | * |
karlmaxwell67 | 6:17fef2caa563 | 163 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 164 | * interrput persistence |
karlmaxwell67 | 6:17fef2caa563 | 165 | */ |
karlmaxwell67 | 3:6a89ac4a1979 | 166 | int readInterruptPersistence(); |
karlmaxwell67 | 6:17fef2caa563 | 167 | |
karlmaxwell67 | 6:17fef2caa563 | 168 | /** Set the number of consecutive values out of range (set by the low and high thresholds) required to trigger an interrupt |
karlmaxwell67 | 6:17fef2caa563 | 169 | * |
karlmaxwell67 | 6:17fef2caa563 | 170 | * @param persistence Value to set. 0: interrupt every ADC cycle, 1-15: corresponding number of cycles until interrupt |
karlmaxwell67 | 6:17fef2caa563 | 171 | * |
karlmaxwell67 | 6:17fef2caa563 | 172 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 173 | * 1 if successful |
karlmaxwell67 | 6:17fef2caa563 | 174 | * 0 if otherwise |
karlmaxwell67 | 6:17fef2caa563 | 175 | */ |
karlmaxwell67 | 6:17fef2caa563 | 176 | int setInterruptPersistence( const int persistence ); |
karlmaxwell67 | 6:17fef2caa563 | 177 | |
karlmaxwell67 | 6:17fef2caa563 | 178 | /** Check the interrupt function's operation mode |
karlmaxwell67 | 6:17fef2caa563 | 179 | * |
karlmaxwell67 | 6:17fef2caa563 | 180 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 181 | * 0: Interrupt output disabled |
karlmaxwell67 | 6:17fef2caa563 | 182 | * 1: Level Interrupt |
karlmaxwell67 | 6:17fef2caa563 | 183 | * 2: SMBAlert compliant |
karlmaxwell67 | 6:17fef2caa563 | 184 | * 3: Test Mode |
karlmaxwell67 | 6:17fef2caa563 | 185 | */ |
karlmaxwell67 | 5:93782eb646de | 186 | int readInterruptControl(); |
karlmaxwell67 | 6:17fef2caa563 | 187 | |
karlmaxwell67 | 6:17fef2caa563 | 188 | /** Set the interrupt function's operation mode |
karlmaxwell67 | 6:17fef2caa563 | 189 | * |
karlmaxwell67 | 6:17fef2caa563 | 190 | * @param control Value to set. 0: interrupt every ADC cycle, 1-15: corresponding number of cycles until interrupt |
karlmaxwell67 | 6:17fef2caa563 | 191 | * |
karlmaxwell67 | 6:17fef2caa563 | 192 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 193 | * 1 if successful |
karlmaxwell67 | 6:17fef2caa563 | 194 | * 0 if otherwise |
karlmaxwell67 | 6:17fef2caa563 | 195 | */ |
karlmaxwell67 | 6:17fef2caa563 | 196 | int setInterruptControl( const int control ); |
karlmaxwell67 | 6:17fef2caa563 | 197 | |
karlmaxwell67 | 6:17fef2caa563 | 198 | /** Clear the interrupt, allowing normal operation to resume. |
karlmaxwell67 | 6:17fef2caa563 | 199 | * (writes 0b11000000 to command register to clear interrupt) |
karlmaxwell67 | 6:17fef2caa563 | 200 | * |
karlmaxwell67 | 6:17fef2caa563 | 201 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 202 | * 1 if successful |
karlmaxwell67 | 6:17fef2caa563 | 203 | * 0 if otherwise |
karlmaxwell67 | 6:17fef2caa563 | 204 | */ |
karlmaxwell67 | 6:17fef2caa563 | 205 | int clearInterrupt(); |
karlmaxwell67 | 6:17fef2caa563 | 206 | |
karlmaxwell67 | 6:17fef2caa563 | 207 | /** Get integer indicating part number |
karlmaxwell67 | 6:17fef2caa563 | 208 | * |
karlmaxwell67 | 6:17fef2caa563 | 209 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 210 | * 0: TSL2560 |
karlmaxwell67 | 6:17fef2caa563 | 211 | * 1: TSL2561 |
karlmaxwell67 | 6:17fef2caa563 | 212 | */ |
karlmaxwell67 | 6:17fef2caa563 | 213 | int getPartNumber(); |
karlmaxwell67 | 6:17fef2caa563 | 214 | |
karlmaxwell67 | 6:17fef2caa563 | 215 | /** Get revision number |
karlmaxwell67 | 6:17fef2caa563 | 216 | * |
karlmaxwell67 | 6:17fef2caa563 | 217 | * @returns |
karlmaxwell67 | 6:17fef2caa563 | 218 | * Revision number |
karlmaxwell67 | 6:17fef2caa563 | 219 | */ |
karlmaxwell67 | 5:93782eb646de | 220 | int getRevisionNumber(); |
karlmaxwell67 | 0:453a43c8bf2b | 221 | |
karlmaxwell67 | 0:453a43c8bf2b | 222 | private: |
karlmaxwell67 | 3:6a89ac4a1979 | 223 | I2C i2c; |
karlmaxwell67 | 1:70d7d9f1af01 | 224 | |
karlmaxwell67 | 1:70d7d9f1af01 | 225 | int writeSingleRegister( char address, char data ); |
karlmaxwell67 | 3:6a89ac4a1979 | 226 | int writeMultipleRegisters( char address, char* data, int quantity ); |
karlmaxwell67 | 1:70d7d9f1af01 | 227 | char readSingleRegister( char address ); |
karlmaxwell67 | 1:70d7d9f1af01 | 228 | int readMultipleRegisters( char address, char* output, int quantity ); |
karlmaxwell67 | 0:453a43c8bf2b | 229 | }; |
karlmaxwell67 | 0:453a43c8bf2b | 230 | |
karlmaxwell67 | 1:70d7d9f1af01 | 231 | #endif |