Hannes Tschofenig
/
TCS34725
Example program connecting the TCS34725 RGB color sensor to the K64F board using I2C
main.cpp@0:139238e5829c, 2015-05-09 (annotated)
- 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?
User | Revision | Line number | New 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 | } |