Brian Daniels / rgb_sensor

Dependents:   rgb_sensor_buffer

Fork of rgb_sensor by Milosch Meriac

Committer:
meriac
Date:
Wed Jul 09 10:27:38 2014 +0000
Revision:
10:b95dfd2d6d4d
Parent:
9:7bd80f4a965e
Added RGB_MASK declararation

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