Silvan Li / Mbed OS mbedKart_sp

Dependencies:   Motor

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers rgbSensor.h Source File

rgbSensor.h

00001 //Class to interface with the RGB color sensor over I2C
00002 class rgbSensor
00003 {
00004 protected:
00005     I2C _i2c;
00006     DigitalOut _led;
00007     int sensor_addr;
00008     int value_C;
00009     int value_R;
00010     int value_G;
00011     int value_B;
00012 public:
00013     rgbSensor(PinName,PinName,PinName);
00014     void update();
00015     int get_C();
00016     int get_R();
00017     int get_G();
00018     int get_B();
00019 };
00020 
00021 rgbSensor::rgbSensor(PinName sda, PinName scl, PinName led) :
00022     _i2c(sda, scl), _led(led){
00023     value_R = 0;
00024     value_G = 0;
00025     value_B = 0; 
00026     sensor_addr = 41 << 1;
00027         
00028     _i2c.frequency(200000);
00029     
00030     char id_regval[1] = {146};
00031     char data[1] = {0};
00032     _i2c.write(sensor_addr,id_regval,1, true);
00033     _i2c.read(sensor_addr,data,1,false);
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     _led = 1;
00045 }
00046 
00047 void rgbSensor::update()
00048 {
00049         char clear_reg[1] = {148};
00050         char clear_data[2] = {0,0};
00051         _i2c.write(sensor_addr,clear_reg,1, true);
00052         _i2c.read(sensor_addr,clear_data,2, false);
00053         
00054         value_C = ((int)clear_data[1] << 8) | clear_data[0];
00055         
00056         char red_reg[1] = {150};
00057         char red_data[2] = {0,0};
00058         _i2c.write(sensor_addr,red_reg,1, true);
00059         _i2c.read(sensor_addr,red_data,2, false);
00060         
00061         value_R = ((int)red_data[1] << 8) | red_data[0];
00062         
00063         char green_reg[1] = {152};
00064         char green_data[2] = {0,0};
00065         _i2c.write(sensor_addr,green_reg,1, true);
00066         _i2c.read(sensor_addr,green_data,2, false);
00067         
00068         value_G = ((int)green_data[1] << 8) | green_data[0];
00069         
00070         char blue_reg[1] = {154};
00071         char blue_data[2] = {0,0};
00072         _i2c.write(sensor_addr,blue_reg,1, true);
00073         _i2c.read(sensor_addr,blue_data,2, false);
00074         
00075         value_B = ((int)blue_data[1] << 8) | blue_data[0];
00076 }
00077 
00078 int rgbSensor::get_C()
00079 {
00080     return value_C;
00081 }
00082 
00083 int rgbSensor::get_R()
00084 {
00085     return value_R;
00086 }
00087 
00088 int rgbSensor::get_G()
00089 {
00090     return value_G;
00091 }
00092 
00093 int rgbSensor::get_B()
00094 {
00095     return value_B;
00096 }