Adafruit TSL2591 sensor

Dependencies:   mbed

TSL2591.cpp

Committer:
12104404
Date:
2016-03-13
Revision:
1:308cc5302475
Parent:
0:815555c72774
Child:
2:dd10c541a3dc

File content as of revision 1:308cc5302475:

#include "TSL2591.h"

TSL2591::TSL2591 (I2C& tsl2591_i2c, uint8_t tsl2591_addr):
    _i2c(tsl2591_i2c), _addr(tsl2591_addr)
{
    _init = false;
    _integ = TSL2591_INTT_100MS;
    _gain = TSL2591_GAIN_MED;
}
/*
 * Initialize TSL2591
 * Checks ID and sets gain and integration time
 */
bool TSL2591::init(void)
{
    char write[] = {(TSL2591_CMD_BIT|TSL2591_REG_ID)};
    if(_i2c.write(_addr<<1, write, 1, 0) == 0) {
        char read[1];
        _i2c.read(_addr<<1, read, 1, 0);
        if(read[0] == TSL2591_ID) {
            _init = true;
            setGain(TSL2591_GAIN_MED);
            setTime(TSL2591_INTT_100MS);
            disable();
            return true;
        }
    }
    return false;
}

void TSL2591::enable(void)
{
    char write[] = {(TSL2591_CMD_BIT|TSL2591_REG_ENABLE), (TSL2591_EN_PON|TSL2591_EN_AEN|TSL2591_EN_AIEN|TSL2591_EN_NPIEN)};
    _i2c.write(_addr<<1, write, 2, 0);
}

void TSL2591::disable(void)
{
    char write[] = {(TSL2591_CMD_BIT|TSL2591_REG_ENABLE), (TSL2591_EN_POFF)};
    _i2c.write(_addr<<1, write, 2, 0);
}

void TSL2591::setGain(tsl2591Gain_t gain)
{
    enable();
    _gain = gain;
    char write[] = {(TSL2591_CMD_BIT|TSL2591_REG_CONTROL), (_integ|_gain)};
    _i2c.write(_addr<<1, write, 2, 0);
    disable();
}

void TSL2591::setTime(tsl2591IntegrationTime_t integ)
{
    enable();
    _integ = integ;
    char write[] = {(TSL2591_CMD_BIT|TSL2591_REG_CONTROL), (_integ|_gain)};
    _i2c.write(_addr<<1, write, 2, 0);
    disable();
}

void TSL2591::getALS(void)
{
    enable();
    for(uint8_t t=0; t<=_integ+1; t++) {
        wait(0.12);
    }
    char write1[] = {(TSL2591_CMD_BIT|TSL2591_REG_CHAN1_L)};
    _i2c.write(_addr<<1, write1, 1, 0);
    char read1[2];
    _i2c.read(_addr<<1, read1, 2, 0);
    char write2[] = {(TSL2591_CMD_BIT|TSL2591_REG_CHAN0_L)};
    _i2c.write(_addr<<1, write2, 1, 0);
    char read2[2];
    _i2c.read(_addr<<1, read2, 2, 0);
    printf("%d \t %d\n",(((read1[0]<<8)|read1[1])),((read2[0]<<8)|read2[1]));
    disable();
}

/*
uint16_t TSL2591::getLumin(uint8_t channel)
{
    uint32_t x =
}
*/
//uint32_t TSL2591::calcLux()