tweaked detection to use photoresistor through an opamp
Fork of rgb_sensor by
rgb_sensor.h@6:fc64a14a2f4a, 2014-06-28 (annotated)
- Committer:
- meriac
- Date:
- Sat Jun 28 16:02:24 2014 +0000
- Revision:
- 6:fc64a14a2f4a
- Parent:
- 5:1fed2b68e661
- Child:
- 7:0d35392230be
Fixed filtering
Who changed what in which revision?
User | Revision | Line number | New 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 | 1:204db97d10c9 | 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 | 6:fc64a14a2f4a | 30 | #define RGB_OVERSAMPLING 1024 |
meriac | 0:576e43bd193d | 31 | #endif/*RGB_OVERSAMPLING*/ |
meriac | 0:576e43bd193d | 32 | |
meriac | 0:576e43bd193d | 33 | #ifndef RGB_MAX_ADC_CLK |
meriac | 0:576e43bd193d | 34 | #define RGB_MAX_ADC_CLK 12400000UL |
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__*/ |