Hannes Tschofenig
/
TCS34725
Example program connecting the TCS34725 RGB color sensor to the K64F board using I2C
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Tue Jul 19 2022 07:29:41 by 1.7.2