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

Dependencies:   mbed

Committer:
HannesTschofenig
Date:
Sat May 09 08:27:06 2015 +0000
Revision:
0:139238e5829c
Example program connecting to the TCS34725 Color Sensor to the K64F using I2C

Who changed what in which revision?

UserRevisionLine numberNew contents of line
HannesTschofenig 0:139238e5829c 1 // Example program connecting to the TCS34725 Color Sensor to the K64F using I2C
HannesTschofenig 0:139238e5829c 2
HannesTschofenig 0:139238e5829c 3 #include "mbed.h"
HannesTschofenig 0:139238e5829c 4
HannesTschofenig 0:139238e5829c 5 I2C i2c(I2C_SDA, I2C_SCL); //pins for I2C communication (SDA, SCL)
HannesTschofenig 0:139238e5829c 6 Serial pc(USBTX, USBRX);
HannesTschofenig 0:139238e5829c 7
HannesTschofenig 0:139238e5829c 8 int sensor_addr = 41 << 1;
HannesTschofenig 0:139238e5829c 9
HannesTschofenig 0:139238e5829c 10 DigitalOut green(LED_GREEN);
HannesTschofenig 0:139238e5829c 11
HannesTschofenig 0:139238e5829c 12 int main() {
HannesTschofenig 0:139238e5829c 13 pc.baud(9600);
HannesTschofenig 0:139238e5829c 14 green = 1; // off
HannesTschofenig 0:139238e5829c 15
HannesTschofenig 0:139238e5829c 16 // Connect to the Color sensor and verify whether we connected to the correct sensor.
HannesTschofenig 0:139238e5829c 17
HannesTschofenig 0:139238e5829c 18 i2c.frequency(200000);
HannesTschofenig 0:139238e5829c 19
HannesTschofenig 0:139238e5829c 20 char id_regval[1] = {146};
HannesTschofenig 0:139238e5829c 21 char data[1] = {0};
HannesTschofenig 0:139238e5829c 22 i2c.write(sensor_addr,id_regval,1, true);
HannesTschofenig 0:139238e5829c 23 i2c.read(sensor_addr,data,1,false);
HannesTschofenig 0:139238e5829c 24
HannesTschofenig 0:139238e5829c 25 if (data[0]==68) {
HannesTschofenig 0:139238e5829c 26 green = 0;
HannesTschofenig 0:139238e5829c 27 wait (2);
HannesTschofenig 0:139238e5829c 28 green = 1;
HannesTschofenig 0:139238e5829c 29 } else {
HannesTschofenig 0:139238e5829c 30 green = 1;
HannesTschofenig 0:139238e5829c 31 }
HannesTschofenig 0:139238e5829c 32
HannesTschofenig 0:139238e5829c 33 // Initialize color sensor
HannesTschofenig 0:139238e5829c 34
HannesTschofenig 0:139238e5829c 35 char timing_register[2] = {129,0};
HannesTschofenig 0:139238e5829c 36 i2c.write(sensor_addr,timing_register,2,false);
HannesTschofenig 0:139238e5829c 37
HannesTschofenig 0:139238e5829c 38 char control_register[2] = {143,0};
HannesTschofenig 0:139238e5829c 39 i2c.write(sensor_addr,control_register,2,false);
HannesTschofenig 0:139238e5829c 40
HannesTschofenig 0:139238e5829c 41 char enable_register[2] = {128,3};
HannesTschofenig 0:139238e5829c 42 i2c.write(sensor_addr,enable_register,2,false);
HannesTschofenig 0:139238e5829c 43
HannesTschofenig 0:139238e5829c 44 // Read data from color sensor (Clear/Red/Green/Blue)
HannesTschofenig 0:139238e5829c 45
HannesTschofenig 0:139238e5829c 46 while (true) {
HannesTschofenig 0:139238e5829c 47 char clear_reg[1] = {148};
HannesTschofenig 0:139238e5829c 48 char clear_data[2] = {0,0};
HannesTschofenig 0:139238e5829c 49 i2c.write(sensor_addr,clear_reg,1, true);
HannesTschofenig 0:139238e5829c 50 i2c.read(sensor_addr,clear_data,2, false);
HannesTschofenig 0:139238e5829c 51
HannesTschofenig 0:139238e5829c 52 int clear_value = ((int)clear_data[1] << 8) | clear_data[0];
HannesTschofenig 0:139238e5829c 53
HannesTschofenig 0:139238e5829c 54 char red_reg[1] = {150};
HannesTschofenig 0:139238e5829c 55 char red_data[2] = {0,0};
HannesTschofenig 0:139238e5829c 56 i2c.write(sensor_addr,red_reg,1, true);
HannesTschofenig 0:139238e5829c 57 i2c.read(sensor_addr,red_data,2, false);
HannesTschofenig 0:139238e5829c 58
HannesTschofenig 0:139238e5829c 59 int red_value = ((int)red_data[1] << 8) | red_data[0];
HannesTschofenig 0:139238e5829c 60
HannesTschofenig 0:139238e5829c 61 char green_reg[1] = {152};
HannesTschofenig 0:139238e5829c 62 char green_data[2] = {0,0};
HannesTschofenig 0:139238e5829c 63 i2c.write(sensor_addr,green_reg,1, true);
HannesTschofenig 0:139238e5829c 64 i2c.read(sensor_addr,green_data,2, false);
HannesTschofenig 0:139238e5829c 65
HannesTschofenig 0:139238e5829c 66 int green_value = ((int)green_data[1] << 8) | green_data[0];
HannesTschofenig 0:139238e5829c 67
HannesTschofenig 0:139238e5829c 68 char blue_reg[1] = {154};
HannesTschofenig 0:139238e5829c 69 char blue_data[2] = {0,0};
HannesTschofenig 0:139238e5829c 70 i2c.write(sensor_addr,blue_reg,1, true);
HannesTschofenig 0:139238e5829c 71 i2c.read(sensor_addr,blue_data,2, false);
HannesTschofenig 0:139238e5829c 72
HannesTschofenig 0:139238e5829c 73 int blue_value = ((int)blue_data[1] << 8) | blue_data[0];
HannesTschofenig 0:139238e5829c 74
HannesTschofenig 0:139238e5829c 75 // print sensor readings
HannesTschofenig 0:139238e5829c 76
HannesTschofenig 0:139238e5829c 77 pc.printf("Clear (%d), Red (%d), Green (%d), Blue (%d)\n", clear_value, red_value, green_value, blue_value);
HannesTschofenig 0:139238e5829c 78 wait(0.5);
HannesTschofenig 0:139238e5829c 79 }
HannesTschofenig 0:139238e5829c 80
HannesTschofenig 0:139238e5829c 81 }