tweaked detection to use photoresistor through an opamp

Dependents:   rgb_sensor_buffer

Fork of rgb_sensor by Milosch Meriac

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

Who changed what in which revision?

UserRevisionLine numberNew contents of line
meriac 1:204db97d10c9 1 /* Discrete RGB color sensor
meriac 1:204db97d10c9 2 *
meriac 1:204db97d10c9 3 * - uses single-channel light-dependent resistor (via ADC)
meriac 1:204db97d10c9 4 * and a RGB LED.
meriac 1:204db97d10c9 5 * - compensates background light
meriac 1:204db97d10c9 6 *
meriac 1:204db97d10c9 7 * Copyright (c) 2014 ARM Limited
meriac 1:204db97d10c9 8 *
meriac 1:204db97d10c9 9 * Licensed under the Apache License, Version 2.0 (the "License");
meriac 1:204db97d10c9 10 * you may not use this file except in compliance with the License.
meriac 1:204db97d10c9 11 * You may obtain a copy of the License at
meriac 1:204db97d10c9 12 *
meriac 1:204db97d10c9 13 * http://www.apache.org/licenses/LICENSE-2.0
meriac 1:204db97d10c9 14 *
meriac 1:204db97d10c9 15 * Unless required by applicable law or agreed to in writing, software
meriac 1:204db97d10c9 16 * distributed under the License is distributed on an "AS IS" BASIS,
meriac 1:204db97d10c9 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
meriac 1:204db97d10c9 18 * See the License for the specific language governing permissions and
meriac 1:204db97d10c9 19 * limitations under the License.
meriac 1:204db97d10c9 20 */
meriac 1:204db97d10c9 21
meriac 8:88acb970df76 22 #ifndef __RGB_SENSOR_H__
meriac 0:576e43bd193d 23 #define __RGB_SENSOR_H__
meriac 0:576e43bd193d 24
meriac 2:4545984e62b6 25 #ifndef RGB_LED_ON
meriac 2:4545984e62b6 26 #define RGB_LED_ON true
meriac 2:4545984e62b6 27 #endif/*RGB_LED_ON*/
meriac 2:4545984e62b6 28
meriac 0:576e43bd193d 29 #ifndef RGB_OVERSAMPLING
meriac 8:88acb970df76 30 #define RGB_OVERSAMPLING 32
meriac 0:576e43bd193d 31 #endif/*RGB_OVERSAMPLING*/
meriac 0:576e43bd193d 32
meriac 9:7bd80f4a965e 33 #ifndef RGB_SENSOR_IGNORE
meriac 9:7bd80f4a965e 34 #define RGB_SENSOR_IGNORE (RGB_OVERSAMPLING/2)
meriac 9:7bd80f4a965e 35 #endif/*RGB_SENSOR_IGNORE*/
meriac 9:7bd80f4a965e 36
meriac 9:7bd80f4a965e 37
meriac 0:576e43bd193d 38 #ifndef RGB_MAX_ADC_CLK
meriac 8:88acb970df76 39 #define RGB_MAX_ADC_CLK 6000000UL
meriac 0:576e43bd193d 40 #endif/*RGB_MAX_ADC_CLK*/
meriac 0:576e43bd193d 41
meriac 0:576e43bd193d 42 #define RGB_CHANNELS 4
meriac 0:576e43bd193d 43
meriac 0:576e43bd193d 44 typedef struct
meriac 0:576e43bd193d 45 {
meriac 0:576e43bd193d 46 int red,green,blue;
meriac 0:576e43bd193d 47 } TRGB_Channel;
meriac 0:576e43bd193d 48
meriac 0:576e43bd193d 49 typedef union
meriac 0:576e43bd193d 50 {
meriac 0:576e43bd193d 51 TRGB_Channel ch;
meriac 0:576e43bd193d 52 int data[3];
meriac 0:576e43bd193d 53 } TRGB;
meriac 0:576e43bd193d 54
meriac 3:50e1ac3c56db 55 typedef bool (*TRGB_Callback)(const TRGB &rgb);
meriac 3:50e1ac3c56db 56
meriac 0:576e43bd193d 57 class RGB_Sensor
meriac 0:576e43bd193d 58 {
meriac 0:576e43bd193d 59 public:
meriac 0:576e43bd193d 60 RGB_Sensor(PinName red, PinName green, PinName blue, PinName adc);
meriac 0:576e43bd193d 61 ~RGB_Sensor(void);
meriac 0:576e43bd193d 62 bool capture(TRGB &rgb);
meriac 3:50e1ac3c56db 63 bool capture(const TRGB_Callback callback);
meriac 3:50e1ac3c56db 64 bool wait(void);
meriac 0:576e43bd193d 65 protected:
meriac 3:50e1ac3c56db 66 TRGB_Callback m_callback;
meriac 0:576e43bd193d 67 bool m_done;
meriac 0:576e43bd193d 68 uint8_t m_adc_channel, m_rgb_channel;
meriac 0:576e43bd193d 69 DigitalOut m_red, m_green, m_blue;
meriac 5:1fed2b68e661 70 int m_adc_filter[RGB_CHANNELS][2], m_adc_filter_pos;
meriac 0:576e43bd193d 71 int m_adc_aggregation[RGB_CHANNELS], m_adc_count;
meriac 3:50e1ac3c56db 72 void convert(TRGB &rgb);
meriac 5:1fed2b68e661 73 int filter(int sample);
meriac 0:576e43bd193d 74 private:
meriac 0:576e43bd193d 75 static void __adc_irq(void);
meriac 0:576e43bd193d 76 void adc_irq(void);
meriac 0:576e43bd193d 77 static RGB_Sensor *m_global;
meriac 0:576e43bd193d 78 };
meriac 0:576e43bd193d 79
meriac 0:576e43bd193d 80 #endif/*__RGB_SENSOR_H__*/