Address is changed to suit Grove Digital Light Sensor.

Fork of TSL2561_I2C by Karl Maxwell

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?

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