# TSL2561 Module
| Since  | Origin / Contributor  | Maintainer  | Source  |
| :----- | :-------------------- | :---------- | :------ |
| 2015-08-22 | [Michael Lucas](https://github.com/Aeprox) | [Michael Lucas](https://github.com/Aeprox) | [tsl2561.c](../../app/modules/tsl2561.c)|

## tsl2561.getlux()
Reads sensor values from the device and returns calculated lux value.

#### Syntax
`tsl2561.getlux()`

#### Parameters
none

#### Returns
- `lux` the calculated illuminance in lux (lx)
- `status` value indicating success or failure as explained below:
    * `tsl2561.TSL2561_OK`
    * `tsl2561.TSL2561_ERROR_I2CINIT` can't initialize I²C bus
    * `tsl2561.TSL2561_ERROR_I2CBUSY` I²C bus busy
    * `tsl2561.TSL2561_ERROR_NOINIT` initialize I²C bus before calling function
    * `tsl2561.TSL2561_ERROR_LAST`

#### Example
``` lua
status = tsl2561.init(5, 6, tsl2561.ADDRESS_FLOAT, tsl2561.PACKAGE_T_FN_CL)

if status == tsl2561.TSL2561_OK then
    lux = tsl2561.getlux()
    print("Illuminance: "..lux.." lx")
end
```

## tsl2561.getrawchannels()
Reads the device's 2 sensors and returns their values.

#### Syntax
`tsl2561.getrawchannels()`

#### Parameters
none

#### Returns
- `ch0` value of the broad spectrum sensor
- `ch1` value of the IR sensor
- `status` value indicating success or failure as explained below:
    * `tsl2561.TSL2561_OK`
    * `tsl2561.TSL2561_ERROR_I2CINIT` can't initialize I²C bus
    * `tsl2561.TSL2561_ERROR_I2CBUSY` I²C bus busy
    * `tsl2561.TSL2561_ERROR_NOINIT` initialize I²C bus before calling function
    * `tsl2561.TSL2561_ERROR_LAST`

#### Example
``` lua
status = tsl2561.init(5, 6, tsl2561.ADDRESS_FLOAT, tsl2561.PACKAGE_T_FN_CL)

if status == tsl2561.TSL2561_OK then
    ch0, ch1 = tsl2561.getrawchannels()
    print("Raw values: "..ch0, ch1)
    lux = tsl2561.getlux()
    print("Illuminance: "..lux.." lx")
end
```

## tsl2561.init()
Initializes the device on pins sdapin & sclpin. Optionally also configures the devices address and package. Default: address pin floating (0x39) and FN package.

#### Syntax
` tsl2561.init(sdapin, sclpin[, address[, package]])`

#### Parameters
- `sdapin` pin number of the device's I²C sda connection
- `sclpin` pin number of the device's I²C scl connection
- `address` optional address of the device on the I²C bus
    * `tsl2561.ADDRESS_GND`
    * `tsl2561.ADDRESS_FLOAT` (default when omitted)
    * `tsl2561.ADDRESS_VDD`
- `package` optional device's package type (slight difference in lux calculation)
    * `tsl2561.PACKAGE_CS`
    * `tsl2561.PACKAGE_T_FN_CL` (default when omitted)

#### Returns
`status` value indicating success or failure as explained below:

- `tsl2561.TSL2561_OK`
- `tsl2561.TSL2561_ERROR_I2CINIT` can't initialize I²C bus
- `tsl2561.TSL2561_ERROR_I2CBUSY` I²C bus busy
- `tsl2561.TSL2561_ERROR_NOINIT` Initialize I²C bus before calling function
- `tsl2561.TSL2561_ERROR_LAST`

#### Example
``` lua
status = tsl2561.init(5, 6, tsl2561.ADDRESS_FLOAT, tsl2561.PACKAGE_T_FN_CL)
if status == tsl2561.TSL2561_OK then
    lux = tsl2561.getlux()
    print("Illuminance: "..lux.." lx")
end
```

## tsl2561.settiming()
Sets the integration time and gain settings of the device. When `tls2561.init()` is called, these values default to 402 ms and no gain.

#### Syntax
`tsl2561.settiming(integration, gain)`

#### Parameters
- `integration` sets the device's integration period. Valid options are:
    * `tsl2561.INTEGRATIONTIME_13MS`
    * `tsl2561.INTEGRATIONTIME_101MS`
    * `tsl2561.INTEGRATIONTIME_402MS` (default when omitted)
- `gain` sets the device's gain. Valid options are:
    * `tsl2561.GAIN_1X` (default when omitted)
    * `tsl2561.GAIN_16X`

#### Returns
`status` value indicating success or failure as explained below:

- `tsl2561.TSL2561_OK`
- `tsl2561.TSL2561_ERROR_I2CINIT` can't initialize I²C bus
- `tsl2561.TSL2561_ERROR_I2CBUSY` I²C bus busy
- `tsl2561.TSL2561_ERROR_NOINIT` initialize I²C bus before calling function
- `tsl2561.TSL2561_ERROR_LAST`

#### Example
``` lua
status = tsl2561.init(5, 6, tsl2561.ADDRESS_FLOAT, tsl2561.PACKAGE_T_FN_CL)
if status == tsl2561.TSL2561_OK then
    status = tsl2561.settiming(tsl2561.INTEGRATIONTIME_101MS, tsl2561.GAIN_16X)
end
if status == tsl2561.TSL2561_OK then
    lux = tsl2561.getlux()
    print("Illuminance: "..lux.." lx")
end
```
