example for using the rgb_color_sensor class

Dependencies:   mbed rgb_sensor

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?

UserRevisionLine numberNew 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 }