Discrete RGB colour sensor using a colour LED flashing at high speed and a monochrome LDR (light dependent resistor) for detecting the colour via ADC conversion. The library implements interrupt driven ADC conversion at high speed (370 RGB readings per second, 128 times oversampling per channelfor noise reduction). The detection can optionally run in background.

Dependents:   rgb_sensor_buffer discrete_rgb_color_sensor_example

Committer:
meriac
Date:
Wed Jun 25 14:55:45 2014 +0000
Revision:
0:576e43bd193d
Child:
1:204db97d10c9
moved rgb_sensor to separate library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
meriac 0:576e43bd193d 1 #ifndef __RGB_SENSOR_H__
meriac 0:576e43bd193d 2 #define __RGB_SENSOR_H__
meriac 0:576e43bd193d 3
meriac 0:576e43bd193d 4 #ifndef RGB_OVERSAMPLING
meriac 0:576e43bd193d 5 #define RGB_OVERSAMPLING 128
meriac 0:576e43bd193d 6 #endif/*RGB_OVERSAMPLING*/
meriac 0:576e43bd193d 7
meriac 0:576e43bd193d 8 #ifndef RGB_MAX_ADC_CLK
meriac 0:576e43bd193d 9 #define RGB_MAX_ADC_CLK 12400000UL
meriac 0:576e43bd193d 10 #endif/*RGB_MAX_ADC_CLK*/
meriac 0:576e43bd193d 11
meriac 0:576e43bd193d 12 #define RGB_CHANNELS 4
meriac 0:576e43bd193d 13
meriac 0:576e43bd193d 14 typedef struct
meriac 0:576e43bd193d 15 {
meriac 0:576e43bd193d 16 int red,green,blue;
meriac 0:576e43bd193d 17 } TRGB_Channel;
meriac 0:576e43bd193d 18
meriac 0:576e43bd193d 19 typedef union
meriac 0:576e43bd193d 20 {
meriac 0:576e43bd193d 21 TRGB_Channel ch;
meriac 0:576e43bd193d 22 int data[3];
meriac 0:576e43bd193d 23 } TRGB;
meriac 0:576e43bd193d 24
meriac 0:576e43bd193d 25 class RGB_Sensor
meriac 0:576e43bd193d 26 {
meriac 0:576e43bd193d 27 public:
meriac 0:576e43bd193d 28 RGB_Sensor(PinName red, PinName green, PinName blue, PinName adc);
meriac 0:576e43bd193d 29 ~RGB_Sensor(void);
meriac 0:576e43bd193d 30 bool capture(TRGB &rgb);
meriac 0:576e43bd193d 31 bool capture(void);
meriac 0:576e43bd193d 32 bool wait(TRGB &rgb);
meriac 0:576e43bd193d 33 protected:
meriac 0:576e43bd193d 34 bool m_done;
meriac 0:576e43bd193d 35 uint8_t m_adc_channel, m_rgb_channel;
meriac 0:576e43bd193d 36 DigitalOut m_red, m_green, m_blue;
meriac 0:576e43bd193d 37 int m_adc_aggregation[RGB_CHANNELS], m_adc_count;
meriac 0:576e43bd193d 38 bool wait(void);
meriac 0:576e43bd193d 39 private:
meriac 0:576e43bd193d 40 static void __adc_irq(void);
meriac 0:576e43bd193d 41 void adc_irq(void);
meriac 0:576e43bd193d 42 static RGB_Sensor *m_global;
meriac 0:576e43bd193d 43 };
meriac 0:576e43bd193d 44
meriac 0:576e43bd193d 45 #endif/*__RGB_SENSOR_H__*/