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