single player mbedKart

Dependencies:   Motor

(notes)

rgbSensor.h

Committer:
DerekW2015
Date:
2018-12-09
Revision:
2:b57d7156830c
Parent:
0:a9a4c0fd5f8a
Child:
20:bd09cc476987

File content as of revision 2:b57d7156830c:

//Class to interface with the RGB color sensor over I2C
class rgbSensor
{
protected:
    I2C _i2c;
    int sensor_addr;
    int value_C;
    int value_R;
    int value_G;
    int value_B;
public:
    rgbSensor(PinName,PinName);
    void update();
    int get_C();
    int get_R();
    int get_G();
    int get_B();
};

rgbSensor::rgbSensor(PinName sda, PinName scl) :
    _i2c(sda, scl){
    value_R = 0;
    value_G = 0;
    value_B = 0; 
    sensor_addr = 41 << 1;
        
    _i2c.frequency(200000);
    
    char id_regval[1] = {146};
    char data[1] = {0};
    _i2c.write(sensor_addr,id_regval,1, true);
    _i2c.read(sensor_addr,data,1,false);
}

void rgbSensor::update()
{
        char clear_reg[1] = {148};
        char clear_data[2] = {0,0};
        _i2c.write(sensor_addr,clear_reg,1, true);
        _i2c.read(sensor_addr,clear_data,2, false);
        
        value_C = ((int)clear_data[1] << 8) | clear_data[0];
        
        char red_reg[1] = {150};
        char red_data[2] = {0,0};
        _i2c.write(sensor_addr,red_reg,1, true);
        _i2c.read(sensor_addr,red_data,2, false);
        
        value_R = ((int)red_data[1] << 8) | red_data[0];
        
        char green_reg[1] = {152};
        char green_data[2] = {0,0};
        _i2c.write(sensor_addr,green_reg,1, true);
        _i2c.read(sensor_addr,green_data,2, false);
        
        value_G = ((int)green_data[1] << 8) | green_data[0];
        
        char blue_reg[1] = {154};
        char blue_data[2] = {0,0};
        _i2c.write(sensor_addr,blue_reg,1, true);
        _i2c.read(sensor_addr,blue_data,2, false);
        
        value_B = ((int)blue_data[1] << 8) | blue_data[0];
}

int rgbSensor::get_C()
{
    return value_C;
}

int rgbSensor::get_R()
{
    return value_R;
}

int rgbSensor::get_G()
{
    return value_G;
}

int rgbSensor::get_B()
{
    return value_B;
}