Milosch Meriac
/
discrete_rgb_color_sensor_example
example for using the rgb_color_sensor class
main.cpp@4:fbbc729f4152, 2014-06-27 (annotated)
- Committer:
- meriac
- Date:
- Fri Jun 27 12:15:32 2014 +0000
- Revision:
- 4:fbbc729f4152
- Parent:
- 3:3649eaf4f954
- Child:
- 5:1b0f9427be32
Dump captured data in .js format
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
meriac | 0:d034f4b3b23c | 1 | /* Discrete RGB color sensor |
meriac | 0:d034f4b3b23c | 2 | * |
meriac | 0:d034f4b3b23c | 3 | * - uses single-channel light-dependent resistor (via ADC) |
meriac | 0:d034f4b3b23c | 4 | * and a RGB LED. |
meriac | 0:d034f4b3b23c | 5 | * - compensates background light |
meriac | 0:d034f4b3b23c | 6 | * |
meriac | 0:d034f4b3b23c | 7 | * Copyright (c) 2014 ARM Limited |
meriac | 0:d034f4b3b23c | 8 | * |
meriac | 0:d034f4b3b23c | 9 | * Licensed under the Apache License, Version 2.0 (the "License"); |
meriac | 0:d034f4b3b23c | 10 | * you may not use this file except in compliance with the License. |
meriac | 0:d034f4b3b23c | 11 | * You may obtain a copy of the License at |
meriac | 0:d034f4b3b23c | 12 | * |
meriac | 0:d034f4b3b23c | 13 | * http://www.apache.org/licenses/LICENSE-2.0 |
meriac | 0:d034f4b3b23c | 14 | * |
meriac | 0:d034f4b3b23c | 15 | * Unless required by applicable law or agreed to in writing, software |
meriac | 0:d034f4b3b23c | 16 | * distributed under the License is distributed on an "AS IS" BASIS, |
meriac | 0:d034f4b3b23c | 17 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
meriac | 0:d034f4b3b23c | 18 | * See the License for the specific language governing permissions and |
meriac | 0:d034f4b3b23c | 19 | * limitations under the License. |
meriac | 0:d034f4b3b23c | 20 | */ |
meriac | 0:d034f4b3b23c | 21 | |
meriac | 0:d034f4b3b23c | 22 | #include <mbed.h> |
meriac | 0:d034f4b3b23c | 23 | #include "rgb_sensor.h" |
meriac | 0:d034f4b3b23c | 24 | |
meriac | 0:d034f4b3b23c | 25 | #define COUNT(x) (sizeof(x)/sizeof(x[0])) |
meriac | 3:3649eaf4f954 | 26 | #define RGB_VALUES 500 |
meriac | 3:3649eaf4f954 | 27 | |
meriac | 3:3649eaf4f954 | 28 | /* serial console */ |
meriac | 3:3649eaf4f954 | 29 | static uint32_t g_buffer_pos; |
meriac | 3:3649eaf4f954 | 30 | static TRGB g_buffer[RGB_VALUES]; |
meriac | 3:3649eaf4f954 | 31 | static Serial console(USBTX, USBRX); |
meriac | 3:3649eaf4f954 | 32 | |
meriac | 3:3649eaf4f954 | 33 | static bool rgb_callback(const TRGB &color) |
meriac | 3:3649eaf4f954 | 34 | { |
meriac | 3:3649eaf4f954 | 35 | if(g_buffer_pos>=RGB_VALUES) |
meriac | 3:3649eaf4f954 | 36 | return false; |
meriac | 3:3649eaf4f954 | 37 | |
meriac | 3:3649eaf4f954 | 38 | g_buffer[g_buffer_pos++] = color; |
meriac | 3:3649eaf4f954 | 39 | return true; |
meriac | 3:3649eaf4f954 | 40 | } |
meriac | 3:3649eaf4f954 | 41 | |
meriac | 3:3649eaf4f954 | 42 | static void rgb_print(const TRGB &color) |
meriac | 3:3649eaf4f954 | 43 | { |
meriac | 3:3649eaf4f954 | 44 | int i; |
meriac | 3:3649eaf4f954 | 45 | |
meriac | 3:3649eaf4f954 | 46 | console.printf("\t["); |
meriac | 3:3649eaf4f954 | 47 | for(i=0; i<COUNT(color.data); i++) |
meriac | 3:3649eaf4f954 | 48 | console.printf("%s%04i", i?",":"", color.data[i] / RGB_OVERSAMPLING); |
meriac | 3:3649eaf4f954 | 49 | console.printf("]\n\r"); |
meriac | 3:3649eaf4f954 | 50 | } |
meriac | 0:d034f4b3b23c | 51 | |
meriac | 0:d034f4b3b23c | 52 | int main() { |
meriac | 4:fbbc729f4152 | 53 | int i,j; |
meriac | 4:fbbc729f4152 | 54 | TRGB color, *p; |
meriac | 0:d034f4b3b23c | 55 | |
meriac | 0:d034f4b3b23c | 56 | console.baud(115200); |
meriac | 0:d034f4b3b23c | 57 | |
meriac | 0:d034f4b3b23c | 58 | /* R,G,B pins and ADC for light dependent resistor */ |
meriac | 0:d034f4b3b23c | 59 | RGB_Sensor rgb(p23,p24,p25,p20); |
meriac | 0:d034f4b3b23c | 60 | |
meriac | 3:3649eaf4f954 | 61 | /* detect a single RGB value to demo synchronous API */ |
meriac | 3:3649eaf4f954 | 62 | rgb.capture(color); |
meriac | 3:3649eaf4f954 | 63 | rgb_print(color); |
meriac | 3:3649eaf4f954 | 64 | |
meriac | 0:d034f4b3b23c | 65 | /* needed for time measurement */ |
meriac | 0:d034f4b3b23c | 66 | Timer timer; |
meriac | 0:d034f4b3b23c | 67 | |
meriac | 3:3649eaf4f954 | 68 | g_buffer_pos = 0; |
meriac | 3:3649eaf4f954 | 69 | |
meriac | 0:d034f4b3b23c | 70 | while(1) { |
meriac | 0:d034f4b3b23c | 71 | |
meriac | 0:d034f4b3b23c | 72 | /* start four channel RGB conversion */ |
meriac | 0:d034f4b3b23c | 73 | timer.reset(); |
meriac | 0:d034f4b3b23c | 74 | timer.start(); |
meriac | 0:d034f4b3b23c | 75 | |
meriac | 3:3649eaf4f954 | 76 | g_buffer_pos = 0; |
meriac | 3:3649eaf4f954 | 77 | rgb.capture(rgb_callback); |
meriac | 3:3649eaf4f954 | 78 | |
meriac | 3:3649eaf4f954 | 79 | rgb.wait(); |
meriac | 0:d034f4b3b23c | 80 | |
meriac | 0:d034f4b3b23c | 81 | /* stop time measurement */ |
meriac | 0:d034f4b3b23c | 82 | timer.stop(); |
meriac | 0:d034f4b3b23c | 83 | |
meriac | 4:fbbc729f4152 | 84 | console.printf("// captured %i values in %i ms\n\rvar test = [\n\r", g_buffer_pos, timer.read_ms()); |
meriac | 4:fbbc729f4152 | 85 | for(j=0; j<RGB_VALUES; j++) |
meriac | 4:fbbc729f4152 | 86 | { |
meriac | 4:fbbc729f4152 | 87 | p = &g_buffer[j]; |
meriac | 4:fbbc729f4152 | 88 | for(i=0; i<COUNT(color.data); i++) |
meriac | 4:fbbc729f4152 | 89 | console.printf("%s%+04i", i?",":"\t[", p->data[i] / RGB_OVERSAMPLING); |
meriac | 4:fbbc729f4152 | 90 | if(j<(RGB_VALUES-1)) |
meriac | 4:fbbc729f4152 | 91 | console.printf("],\n\r"); |
meriac | 4:fbbc729f4152 | 92 | } |
meriac | 4:fbbc729f4152 | 93 | console.printf("]];\n\r\n\r"); |
meriac | 3:3649eaf4f954 | 94 | |
meriac | 4:fbbc729f4152 | 95 | /* visible intersection between captures */ |
meriac | 4:fbbc729f4152 | 96 | wait_ms(100); |
meriac | 0:d034f4b3b23c | 97 | } |
meriac | 0:d034f4b3b23c | 98 | } |