Example program connecting the TCS34725 RGB color sensor to the K64F board using I2C

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 // Example program connecting to the TCS34725 Color Sensor to the K64F using I2C
00002 
00003 #include "mbed.h"
00004 
00005 I2C i2c(I2C_SDA, I2C_SCL); //pins for I2C communication (SDA, SCL)
00006 Serial pc(USBTX, USBRX);
00007 
00008 int sensor_addr = 41 << 1;
00009 
00010 DigitalOut green(LED_GREEN);
00011 
00012 int main() {
00013     pc.baud(9600);
00014     green = 1; // off
00015     
00016     // Connect to the Color sensor and verify whether we connected to the correct sensor. 
00017     
00018     i2c.frequency(200000);
00019     
00020     char id_regval[1] = {146};
00021     char data[1] = {0};
00022     i2c.write(sensor_addr,id_regval,1, true);
00023     i2c.read(sensor_addr,data,1,false);
00024     
00025     if (data[0]==68) {
00026         green = 0;
00027         wait (2); 
00028         green = 1;
00029         } else {
00030         green = 1; 
00031     }
00032     
00033     // Initialize color sensor
00034     
00035     char timing_register[2] = {129,0};
00036     i2c.write(sensor_addr,timing_register,2,false);
00037     
00038     char control_register[2] = {143,0};
00039     i2c.write(sensor_addr,control_register,2,false);
00040     
00041     char enable_register[2] = {128,3};
00042     i2c.write(sensor_addr,enable_register,2,false);
00043     
00044     // Read data from color sensor (Clear/Red/Green/Blue)
00045     
00046     while (true) { 
00047         char clear_reg[1] = {148};
00048         char clear_data[2] = {0,0};
00049         i2c.write(sensor_addr,clear_reg,1, true);
00050         i2c.read(sensor_addr,clear_data,2, false);
00051         
00052         int clear_value = ((int)clear_data[1] << 8) | clear_data[0];
00053         
00054         char red_reg[1] = {150};
00055         char red_data[2] = {0,0};
00056         i2c.write(sensor_addr,red_reg,1, true);
00057         i2c.read(sensor_addr,red_data,2, false);
00058         
00059         int red_value = ((int)red_data[1] << 8) | red_data[0];
00060         
00061         char green_reg[1] = {152};
00062         char green_data[2] = {0,0};
00063         i2c.write(sensor_addr,green_reg,1, true);
00064         i2c.read(sensor_addr,green_data,2, false);
00065         
00066         int green_value = ((int)green_data[1] << 8) | green_data[0];
00067         
00068         char blue_reg[1] = {154};
00069         char blue_data[2] = {0,0};
00070         i2c.write(sensor_addr,blue_reg,1, true);
00071         i2c.read(sensor_addr,blue_data,2, false);
00072         
00073         int blue_value = ((int)blue_data[1] << 8) | blue_data[0];
00074         
00075         // print sensor readings
00076         
00077         pc.printf("Clear (%d), Red (%d), Green (%d), Blue (%d)\n", clear_value, red_value, green_value, blue_value);
00078         wait(0.5);
00079     }
00080     
00081 }