/* TSL25911 Digital Light Sensor */ /* Dynamic Range: 600M:1 */ /* Maximum Lux: 88K */ #include #include #include "Adafruit_TSL2591.h" Adafruit_TSL2591 tsl = Adafruit_TSL2591(2591); // pass in a number for the sensor identifier (for your use later) /**************************************************************************/ /* Configures the gain and integration time for the TSL2561 */ /**************************************************************************/ void configureSensor(void) { // You can change the gain on the fly, to adapt to brighter/dimmer light situations tsl.setGain(TSL2591_GAIN_LOW); // 1x gain (bright light) //tsl.setGain(TSL2591_GAIN_MED); // 25x gain //tsl.setGain(TSL2591_GAIN_HIGH); // 428x gain // Changing the integration time gives you a longer time over which to sense light // longer timelines are slower, but are good in very low light situtations! tsl.setTiming(TSL2591_INTEGRATIONTIME_100MS); // shortest integration time (bright light) //tsl.setTiming(TSL2591_INTEGRATIONTIME_200MS); //tsl.setTiming(TSL2591_INTEGRATIONTIME_300MS); //tsl.setTiming(TSL2591_INTEGRATIONTIME_400MS); //tsl.setTiming(TSL2591_INTEGRATIONTIME_500MS); //tsl.setTiming(TSL2591_INTEGRATIONTIME_600MS); // longest integration time (dim light) } /**************************************************************************/ /* Program entry point for the Arduino sketch */ /**************************************************************************/ void initLuxSensor(void) { if (tsl.begin()) { } else { Serial.println("No sensor found ... check your wiring?"); while (1); } /* Configure the sensor */ configureSensor(); } /**************************************************************************/ /* Show how to read IR and Full Spectrum at once and convert to lux */ /**************************************************************************/ uint32_t readLuxSensor(void) { // More advanced data read example. Read 32 bits with top 16 bits IR, bottom 16 bits full spectrum // That way you can do whatever math and comparisons you want! uint32_t lum = tsl.getFullLuminosity(); uint16_t ir, full; ir = lum >> 16; full = lum & 0xFFFF; //Serial.print("[ "); Serial.print(millis()); Serial.print(" ms ] "); //Serial.print("IR: "); Serial.print(ir); Serial.print(" "); //Serial.print("Full: "); Serial.print(full); Serial.print(" "); //Serial.print("Visible: "); Serial.print(full - ir); Serial.print(" "); uint32_t lux = tsl.calculateLux(full, ir); if ( (lux > 4294966000.0) || (lux <-4294966000.0) ) { return 0; } else { return lux; } }