Library which provides functions to control a TAOS TSL2561 Light-To-Digital Converter via I2C.

Dependents:   TweetTest NetworkThermometer GR-PEACH_TAMORI mDot_LoRa_Connect_ABPA_Lux ... more

Committer:
karlmaxwell67
Date:
Thu Apr 24 10:48:29 2014 +0000
Revision:
6:17fef2caa563
Parent:
5:93782eb646de
Comments added and class documentation auto-generated.

Who changed what in which revision?

UserRevisionLine numberNew 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