TSL2561(照度センサ)のライブラリです

Dependents:   HYBRYD2018_IZU_ROCKET Hybrid_IZU2019

TSL2561.cpp

Committer:
Sigma884
Date:
2018-11-14
Revision:
2:276a177de00b
Parent:
1:4e7b35c8d948
Child:
3:f62d7ea19cbb

File content as of revision 2:276a177de00b:

#include "mbed.h"
#include "TSL2561.h"

//Serial DEBUG(USBTX,USBRX);

myTSL2561::myTSL2561(I2C &i2cBus,AD0 celect)
{
    i2c = &i2cBus;
    if(celect == AD0_LOW) _addr = SLV_ADDR_LOW;
    else if(celect == AD0_HIGH) _addr = SLV_ADDR_HIGH;
    else _addr = SLV_ADDR_OPEN;
    SLV_WRITE_TSL = _addr;
    SLV_READ_TSL  = _addr | 1;
    i2c->frequency(400000);
}


void myTSL2561::begin()
{
    power_up_cmd[0] = COMMAND | CONTROL_REG;
    power_up_cmd[1] = POWER_UP;
    
    i2c->write(SLV_WRITE_TSL, power_up_cmd, 2);
    
    read_cmd = COMMAND | CHECK_REG;
    
    i2c->write(SLV_WRITE_TSL, &read_cmd, 1);
    i2c->read(SLV_READ_TSL, &check_read, 1);
    
}

int myTSL2561::connect_check()
{
    check_cmd = COMMAND | CHECK_REG;
    
    i2c->write(SLV_WRITE_TSL, &check_cmd, 1);
    i2c->read(SLV_READ_TSL, &check_read, 1);
    
    //DEBUG.printf("CHECK_REG read = %x\r\n",check_read);
    
    if(check_read == ID_NUMBER){ return 1;}
    else{ return 0;}
}

float myTSL2561::get_luminosity(unsigned int wait_time)
{
    read_cmd = COMMAND | RAW_DATA_LOW;
    
    i2c->write(SLV_WRITE_TSL, &read_cmd, 1);
    //wait_ms(wait_time);
    i2c->read(SLV_READ_TSL, buff, 2);
    
    val[0] = (int)buff[0];    
    val[1] = (int)buff[1] << 8;   
    
    lux = (float)(val[1] | val[0]);
    
    return lux;
}

unsigned int myTSL2561::set_rate(int channel)
{
    timing_cmd[0] = COMMAND | TIMING_REG;
    
    if(channel == 0){
        time = 14;
        timing_cmd[1] = TIMING | 0x00;
        i2c->write(SLV_WRITE_TSL, timing_cmd, 2);
    }
    else if(channel == 1){
        time = 105;
        timing_cmd[1] = TIMING | 0x01;
        i2c->write(SLV_WRITE_TSL, timing_cmd, 2);
    }
    else if(channel == 2){
        time = 405;
        timing_cmd[1] = TIMING | 0x02;
        i2c->write(SLV_WRITE_TSL, timing_cmd, 2);
    }
    
    return time;
}