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 16:52:12 2014 +0000
Revision:
8:88acb970df76
Parent:
7:0d35392230be
Child:
9:7bd80f4a965e
Positive ADC reading, adjusted speed to 732/s

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 0:576e43bd193d 33 #ifndef RGB_MAX_ADC_CLK
meriac 8:88acb970df76 34 #define RGB_MAX_ADC_CLK 6000000UL
meriac 0:576e43bd193d 35 #endif/*RGB_MAX_ADC_CLK*/
meriac 0:576e43bd193d 36
meriac 0:576e43bd193d 37 #define RGB_CHANNELS 4
meriac 0:576e43bd193d 38
meriac 0:576e43bd193d 39 typedef struct
meriac 0:576e43bd193d 40 {
meriac 0:576e43bd193d 41 int red,green,blue;
meriac 0:576e43bd193d 42 } TRGB_Channel;
meriac 0:576e43bd193d 43
meriac 0:576e43bd193d 44 typedef union
meriac 0:576e43bd193d 45 {
meriac 0:576e43bd193d 46 TRGB_Channel ch;
meriac 0:576e43bd193d 47 int data[3];
meriac 0:576e43bd193d 48 } TRGB;
meriac 0:576e43bd193d 49
meriac 3:50e1ac3c56db 50 typedef bool (*TRGB_Callback)(const TRGB &rgb);
meriac 3:50e1ac3c56db 51
meriac 0:576e43bd193d 52 class RGB_Sensor
meriac 0:576e43bd193d 53 {
meriac 0:576e43bd193d 54 public:
meriac 0:576e43bd193d 55 RGB_Sensor(PinName red, PinName green, PinName blue, PinName adc);
meriac 0:576e43bd193d 56 ~RGB_Sensor(void);
meriac 0:576e43bd193d 57 bool capture(TRGB &rgb);
meriac 3:50e1ac3c56db 58 bool capture(const TRGB_Callback callback);
meriac 3:50e1ac3c56db 59 bool wait(void);
meriac 0:576e43bd193d 60 protected:
meriac 3:50e1ac3c56db 61 TRGB_Callback m_callback;
meriac 0:576e43bd193d 62 bool m_done;
meriac 0:576e43bd193d 63 uint8_t m_adc_channel, m_rgb_channel;
meriac 0:576e43bd193d 64 DigitalOut m_red, m_green, m_blue;
meriac 5:1fed2b68e661 65 int m_adc_filter[RGB_CHANNELS][2], m_adc_filter_pos;
meriac 0:576e43bd193d 66 int m_adc_aggregation[RGB_CHANNELS], m_adc_count;
meriac 3:50e1ac3c56db 67 void convert(TRGB &rgb);
meriac 5:1fed2b68e661 68 int filter(int sample);
meriac 0:576e43bd193d 69 private:
meriac 0:576e43bd193d 70 static void __adc_irq(void);
meriac 0:576e43bd193d 71 void adc_irq(void);
meriac 0:576e43bd193d 72 static RGB_Sensor *m_global;
meriac 0:576e43bd193d 73 };
meriac 0:576e43bd193d 74
meriac 0:576e43bd193d 75 #endif/*__RGB_SENSOR_H__*/