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

Files at this revision

API Documentation at this revision

Comitter:
meriac
Date:
Thu Jul 03 17:24:41 2014 +0000
Parent:
8:88acb970df76
Child:
10:b95dfd2d6d4d
Commit message:
Allowing to ignore values at the beginning of each block to ignore rise times low pass.

Changed in this revision

rgb_sensor.cpp Show annotated file Show diff for this revision Revisions of this file
rgb_sensor.h Show annotated file Show diff for this revision Revisions of this file
--- a/rgb_sensor.cpp	Thu Jul 03 16:52:12 2014 +0000
+++ b/rgb_sensor.cpp	Thu Jul 03 17:24:41 2014 +0000
@@ -145,10 +145,12 @@
         if(!m_done)
         {
             /* filter value to remove ADC noise/conversion errors */
-            m_adc_aggregation[m_rgb_channel] += filter(sample);
+            sample = filter(sample);
+            if(m_adc_count>=RGB_SENSOR_IGNORE)
+                m_adc_aggregation[m_rgb_channel] += sample;
 
             m_adc_count++;
-            if(m_adc_count>=RGB_OVERSAMPLING)
+            if(m_adc_count>=(RGB_OVERSAMPLING+RGB_SENSOR_IGNORE))
             {
                 m_adc_count=0;
                 m_rgb_channel++;
--- a/rgb_sensor.h	Thu Jul 03 16:52:12 2014 +0000
+++ b/rgb_sensor.h	Thu Jul 03 17:24:41 2014 +0000
@@ -30,6 +30,11 @@
 #define RGB_OVERSAMPLING 32
 #endif/*RGB_OVERSAMPLING*/
 
+#ifndef RGB_SENSOR_IGNORE
+#define RGB_SENSOR_IGNORE (RGB_OVERSAMPLING/2)
+#endif/*RGB_SENSOR_IGNORE*/
+
+
 #ifndef RGB_MAX_ADC_CLK
 #define RGB_MAX_ADC_CLK 6000000UL
 #endif/*RGB_MAX_ADC_CLK*/