tweaked detection to use photoresistor through an opamp
Fork of rgb_sensor by
rgb_sensor.h@9:7bd80f4a965e, 2014-07-03 (annotated)
- 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?
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 | 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__*/ |