123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- /**************************************************************************/
- /*!
- @file Adafruit_TSL2591.h
- @author KT0WN (adafruit.com)
- This is a library for the Adafruit TSL2591 breakout board
- This library works with the Adafruit TSL2591 breakout
- ----> https://www.adafruit.com/products/1980
-
- Check out the links above for our tutorials and wiring diagrams
- These chips use I2C to communicate
-
- Adafruit invests time and resources providing this open source code,
- please support Adafruit and open-source hardware by purchasing
- products from Adafruit!
- @section LICENSE
- Software License Agreement (BSD License)
- Copyright (c) 2014 Adafruit Industries
- All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the copyright holders nor the
- names of its contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- /**************************************************************************/
- #ifndef _TSL2591_H_
- #define _TSL2591_H_
- #if ARDUINO >= 100
- #include <Arduino.h>
- #else
- #include <WProgram.h>
- #endif
- #include "Adafruit_Sensor.h"
- #include <Wire.h>
- #define TSL2591_VISIBLE (2) // channel 0 - channel 1
- #define TSL2591_INFRARED (1) // channel 1
- #define TSL2591_FULLSPECTRUM (0) // channel 0
- #define TSL2591_ADDR (0x29)
- #define TSL2591_READBIT (0x01)
- #define TSL2591_COMMAND_BIT (0xA0) // bits 7 and 5 for 'command normal'
- #define TSL2591_CLEAR_BIT (0x40) // Clears any pending interrupt (write 1 to clear)
- #define TSL2591_WORD_BIT (0x20) // 1 = read/write word (rather than byte)
- #define TSL2591_BLOCK_BIT (0x10) // 1 = using block read/write
- #define TSL2591_ENABLE_POWERON (0x01)
- #define TSL2591_ENABLE_POWEROFF (0x00)
- #define TSL2591_ENABLE_AEN (0x02)
- #define TSL2591_ENABLE_AIEN (0x10)
- #define TSL2591_CONTROL_RESET (0x80)
- #define TSL2591_LUX_DF (408.0F)
- #define TSL2591_LUX_COEFB (1.64F) // CH0 coefficient
- #define TSL2591_LUX_COEFC (0.59F) // CH1 coefficient A
- #define TSL2591_LUX_COEFD (0.86F) // CH2 coefficient B
- enum
- {
- TSL2591_REGISTER_ENABLE = 0x00,
- TSL2591_REGISTER_CONTROL = 0x01,
- TSL2591_REGISTER_THRESHHOLDL_LOW = 0x02,
- TSL2591_REGISTER_THRESHHOLDL_HIGH = 0x03,
- TSL2591_REGISTER_THRESHHOLDH_LOW = 0x04,
- TSL2591_REGISTER_THRESHHOLDH_HIGH = 0x05,
- TSL2591_REGISTER_INTERRUPT = 0x06,
- TSL2591_REGISTER_CRC = 0x08,
- TSL2591_REGISTER_ID = 0x0A,
- TSL2591_REGISTER_CHAN0_LOW = 0x14,
- TSL2591_REGISTER_CHAN0_HIGH = 0x15,
- TSL2591_REGISTER_CHAN1_LOW = 0x16,
- TSL2591_REGISTER_CHAN1_HIGH = 0x17
- };
- typedef enum
- {
- TSL2591_INTEGRATIONTIME_100MS = 0x00,
- TSL2591_INTEGRATIONTIME_200MS = 0x01,
- TSL2591_INTEGRATIONTIME_300MS = 0x02,
- TSL2591_INTEGRATIONTIME_400MS = 0x03,
- TSL2591_INTEGRATIONTIME_500MS = 0x04,
- TSL2591_INTEGRATIONTIME_600MS = 0x05,
- }
- tsl2591IntegrationTime_t;
- typedef enum
- {
- TSL2591_GAIN_LOW = 0x00, // low gain (1x)
- TSL2591_GAIN_MED = 0x10, // medium gain (25x)
- TSL2591_GAIN_HIGH = 0x20, // medium gain (428x)
- TSL2591_GAIN_MAX = 0x30, // max gain (9876x)
- }
- tsl2591Gain_t;
- class Adafruit_TSL2591 : public Adafruit_Sensor
- {
- public:
- Adafruit_TSL2591(int32_t sensorID = -1);
-
- boolean begin ( void );
- void enable ( void );
- void disable ( void );
- void write8 ( uint8_t r, uint8_t v );
- uint16_t read16 ( uint8_t reg );
- uint8_t read8 ( uint8_t reg );
- uint32_t calculateLux ( uint16_t ch0, uint16_t ch1 );
- void setGain ( tsl2591Gain_t gain );
- void setTiming ( tsl2591IntegrationTime_t integration );
- uint16_t getLuminosity (uint8_t channel );
- uint32_t getFullLuminosity ( );
- tsl2591IntegrationTime_t getTiming();
- tsl2591Gain_t getGain();
-
- /* Unified Sensor API Functions */
- bool getEvent ( sensors_event_t* );
- void getSensor ( sensor_t* );
- private:
- tsl2591IntegrationTime_t _integration;
- tsl2591Gain_t _gain;
- int32_t _sensorID;
- boolean _initialized;
- };
- #endif
|