In this example we show how to connect a TSL2561 is a light-to-digital converter to a MSP-EXP432P401R LaunchPad, the example will use the Energia IDE.
I used a TSL2561 module in this example, which you can see below
The TSL2561 is a light-to-digital converter that transforms light intensity to a digital signal output capable of an I²C interface. Each device combines one broadband photodiode (visible plus infrared) and one infrared-responding photodiode on a single CMOS integrated circuit capable of providing a near-photopic response over an effective 20-bit dynamic range (16-bit resolution).
Two integrating ADCs convert the photodiode currents to a digital output that represents the irradiance measured on each channel. This digital output can be input to a microprocessor where illuminance (ambient light level) in lux is derived using an empirical formula to approximate the human eye response. The TSL2561 device supports a traditional level style interrupt that remains asserted until the firmware clears it.
More info – http://ams.com/eng/Products/Light-Sensors/Ambient-Light-Sensors/TSL2561
Connection
Here is a picture of the launchpad so you can see what pins we are referring to below in the table
| Module Connection | MSP432 Connection |
| SDA | J1-10 SDA |
| SCL | J1-9 SCL |
| Gnd | J3-22 Gnd |
| Vcc | J1-1 3.3v |
Code
[codesyntax lang=”cpp”]
#include<Wire.h>
// TSL2561 I2C address is 0x39(57)
#define Addr 0x39
void setup()
{
// Initialise I2C communication as MASTER
Wire.begin();
// Initialise serial communication, set baud rate = 9600
Serial.begin(9600);
// Starts I2C communication
Wire.beginTransmission(Addr);
// Select control register
Wire.write(0x00 | 0x80);
// Power ON mode
Wire.write(0x03);
// Stop I2C Transmission
Wire.endTransmission();
// Starts I2C communication
Wire.beginTransmission(Addr);
// Select timing register
Wire.write(0x01 | 0x80);
// Nominal integration time = 402ms
Wire.write(0x02);
// Stop I2C Transmission
Wire.endTransmission();
delay(300);
}
void loop()
{
unsigned int data[4];
for(int i = 0; i < 4; i++)
{
// Starts I2C communication
Wire.beginTransmission(Addr);
// Select data register
Wire.write((140 + i));
// Stop I2C Transmission
Wire.endTransmission();
// Request 1 byte of data
Wire.requestFrom(Addr, 1);
// Read 1 bytes of data
if(Wire.available() == 1)
{
data[i] = Wire.read();
}
delay(200);
}
// Convert the data
double ch0 = ((data[1] & 0xFF) * 256) + (data[0] & 0xFF);
double ch1 = ((data[3] & 0xFF) * 256) + (data[2] & 0xFF);
// Output data to serial monitor
Serial.print("Full Spectrum(IR + Visible) :");
Serial.println(ch0);
Serial.print("Infrared Value :");
Serial.println(ch1);
Serial.print("Visible Value :");
Serial.println(ch0-ch1);
}
[/codesyntax]
Output
Open the serial monitor and you should see something like this
Full Spectrum(IR + Visible) :184.00
Infrared Value :25.00
Visible Value :159.00
Full Spectrum(IR + Visible) :176.00
Infrared Value :12.00
Visible Value :164.00
Full Spectrum(IR + Visible) :8.00
Infrared Value :2.00
Visible Value :6.00
Full Spectrum(IR + Visible) :8.00
Infrared Value :11.00
Visible Value :-3.00
Full Spectrum(IR + Visible) :141.00
Infrared Value :22.00
Visible Value :119.00
Links
1pcs GY-2561 TSL2561 Luminosity Sensor Breakout infrared Light Sensor module integrating sensor AL


