
single player mbedKart
(notes)
rgbSensor.h@20:bd09cc476987, 2018-12-11 (annotated)
- Committer:
- sli425
- Date:
- Tue Dec 11 02:27:20 2018 +0000
- Revision:
- 20:bd09cc476987
- Parent:
- 2:b57d7156830c
Fixed the rgbSensor class (added DigitalOut led and other missing initialization things)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DerekW2015 | 2:b57d7156830c | 1 | //Class to interface with the RGB color sensor over I2C |
DerekW2015 | 0:a9a4c0fd5f8a | 2 | class rgbSensor |
DerekW2015 | 0:a9a4c0fd5f8a | 3 | { |
DerekW2015 | 0:a9a4c0fd5f8a | 4 | protected: |
DerekW2015 | 0:a9a4c0fd5f8a | 5 | I2C _i2c; |
sli425 | 20:bd09cc476987 | 6 | DigitalOut _led; |
DerekW2015 | 0:a9a4c0fd5f8a | 7 | int sensor_addr; |
DerekW2015 | 0:a9a4c0fd5f8a | 8 | int value_C; |
DerekW2015 | 0:a9a4c0fd5f8a | 9 | int value_R; |
DerekW2015 | 0:a9a4c0fd5f8a | 10 | int value_G; |
DerekW2015 | 0:a9a4c0fd5f8a | 11 | int value_B; |
DerekW2015 | 0:a9a4c0fd5f8a | 12 | public: |
sli425 | 20:bd09cc476987 | 13 | rgbSensor(PinName,PinName,PinName); |
DerekW2015 | 0:a9a4c0fd5f8a | 14 | void update(); |
DerekW2015 | 0:a9a4c0fd5f8a | 15 | int get_C(); |
DerekW2015 | 0:a9a4c0fd5f8a | 16 | int get_R(); |
DerekW2015 | 0:a9a4c0fd5f8a | 17 | int get_G(); |
DerekW2015 | 0:a9a4c0fd5f8a | 18 | int get_B(); |
DerekW2015 | 0:a9a4c0fd5f8a | 19 | }; |
DerekW2015 | 2:b57d7156830c | 20 | |
sli425 | 20:bd09cc476987 | 21 | rgbSensor::rgbSensor(PinName sda, PinName scl, PinName led) : |
sli425 | 20:bd09cc476987 | 22 | _i2c(sda, scl), _led(led){ |
DerekW2015 | 2:b57d7156830c | 23 | value_R = 0; |
DerekW2015 | 2:b57d7156830c | 24 | value_G = 0; |
DerekW2015 | 2:b57d7156830c | 25 | value_B = 0; |
DerekW2015 | 2:b57d7156830c | 26 | sensor_addr = 41 << 1; |
DerekW2015 | 2:b57d7156830c | 27 | |
DerekW2015 | 2:b57d7156830c | 28 | _i2c.frequency(200000); |
DerekW2015 | 0:a9a4c0fd5f8a | 29 | |
DerekW2015 | 2:b57d7156830c | 30 | char id_regval[1] = {146}; |
DerekW2015 | 2:b57d7156830c | 31 | char data[1] = {0}; |
DerekW2015 | 2:b57d7156830c | 32 | _i2c.write(sensor_addr,id_regval,1, true); |
DerekW2015 | 2:b57d7156830c | 33 | _i2c.read(sensor_addr,data,1,false); |
sli425 | 20:bd09cc476987 | 34 | |
sli425 | 20:bd09cc476987 | 35 | char timing_register[2] = {129,0}; |
sli425 | 20:bd09cc476987 | 36 | _i2c.write(sensor_addr,timing_register,2,false); |
sli425 | 20:bd09cc476987 | 37 | |
sli425 | 20:bd09cc476987 | 38 | char control_register[2] = {143,0}; |
sli425 | 20:bd09cc476987 | 39 | _i2c.write(sensor_addr,control_register,2,false); |
sli425 | 20:bd09cc476987 | 40 | |
sli425 | 20:bd09cc476987 | 41 | char enable_register[2] = {128,3}; |
sli425 | 20:bd09cc476987 | 42 | _i2c.write(sensor_addr,enable_register,2,false); |
sli425 | 20:bd09cc476987 | 43 | |
sli425 | 20:bd09cc476987 | 44 | _led = 1; |
DerekW2015 | 2:b57d7156830c | 45 | } |
DerekW2015 | 2:b57d7156830c | 46 | |
DerekW2015 | 2:b57d7156830c | 47 | void rgbSensor::update() |
DerekW2015 | 2:b57d7156830c | 48 | { |
DerekW2015 | 2:b57d7156830c | 49 | char clear_reg[1] = {148}; |
DerekW2015 | 2:b57d7156830c | 50 | char clear_data[2] = {0,0}; |
DerekW2015 | 2:b57d7156830c | 51 | _i2c.write(sensor_addr,clear_reg,1, true); |
DerekW2015 | 2:b57d7156830c | 52 | _i2c.read(sensor_addr,clear_data,2, false); |
DerekW2015 | 2:b57d7156830c | 53 | |
DerekW2015 | 2:b57d7156830c | 54 | value_C = ((int)clear_data[1] << 8) | clear_data[0]; |
DerekW2015 | 2:b57d7156830c | 55 | |
DerekW2015 | 2:b57d7156830c | 56 | char red_reg[1] = {150}; |
DerekW2015 | 2:b57d7156830c | 57 | char red_data[2] = {0,0}; |
DerekW2015 | 2:b57d7156830c | 58 | _i2c.write(sensor_addr,red_reg,1, true); |
DerekW2015 | 2:b57d7156830c | 59 | _i2c.read(sensor_addr,red_data,2, false); |
DerekW2015 | 2:b57d7156830c | 60 | |
DerekW2015 | 2:b57d7156830c | 61 | value_R = ((int)red_data[1] << 8) | red_data[0]; |
DerekW2015 | 2:b57d7156830c | 62 | |
DerekW2015 | 2:b57d7156830c | 63 | char green_reg[1] = {152}; |
DerekW2015 | 2:b57d7156830c | 64 | char green_data[2] = {0,0}; |
DerekW2015 | 2:b57d7156830c | 65 | _i2c.write(sensor_addr,green_reg,1, true); |
DerekW2015 | 2:b57d7156830c | 66 | _i2c.read(sensor_addr,green_data,2, false); |
DerekW2015 | 2:b57d7156830c | 67 | |
DerekW2015 | 2:b57d7156830c | 68 | value_G = ((int)green_data[1] << 8) | green_data[0]; |
DerekW2015 | 2:b57d7156830c | 69 | |
DerekW2015 | 2:b57d7156830c | 70 | char blue_reg[1] = {154}; |
DerekW2015 | 2:b57d7156830c | 71 | char blue_data[2] = {0,0}; |
DerekW2015 | 2:b57d7156830c | 72 | _i2c.write(sensor_addr,blue_reg,1, true); |
DerekW2015 | 2:b57d7156830c | 73 | _i2c.read(sensor_addr,blue_data,2, false); |
DerekW2015 | 2:b57d7156830c | 74 | |
DerekW2015 | 2:b57d7156830c | 75 | value_B = ((int)blue_data[1] << 8) | blue_data[0]; |
DerekW2015 | 2:b57d7156830c | 76 | } |
DerekW2015 | 2:b57d7156830c | 77 | |
DerekW2015 | 2:b57d7156830c | 78 | int rgbSensor::get_C() |
DerekW2015 | 2:b57d7156830c | 79 | { |
DerekW2015 | 2:b57d7156830c | 80 | return value_C; |
DerekW2015 | 2:b57d7156830c | 81 | } |
DerekW2015 | 2:b57d7156830c | 82 | |
DerekW2015 | 2:b57d7156830c | 83 | int rgbSensor::get_R() |
DerekW2015 | 2:b57d7156830c | 84 | { |
DerekW2015 | 2:b57d7156830c | 85 | return value_R; |
DerekW2015 | 2:b57d7156830c | 86 | } |
DerekW2015 | 2:b57d7156830c | 87 | |
DerekW2015 | 2:b57d7156830c | 88 | int rgbSensor::get_G() |
DerekW2015 | 2:b57d7156830c | 89 | { |
DerekW2015 | 2:b57d7156830c | 90 | return value_G; |
DerekW2015 | 2:b57d7156830c | 91 | } |
DerekW2015 | 2:b57d7156830c | 92 | |
DerekW2015 | 2:b57d7156830c | 93 | int rgbSensor::get_B() |
DerekW2015 | 2:b57d7156830c | 94 | { |
DerekW2015 | 2:b57d7156830c | 95 | return value_B; |
DerekW2015 | 2:b57d7156830c | 96 | } |