![](/media/cache/profiles/0ed9422357395a0d4879191c66f4faa2.50x50_q85.jpg)
Simple test for TCS230, color light-to-frequency converter.
Diff: main.cpp
- Revision:
- 0:211fa784ae3e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Aug 28 07:53:11 2011 +0000 @@ -0,0 +1,91 @@ +/* +**************************************************** +TCS230 test. COLOR LIGHT TO FREQUENCY CONVERTER. +Frequency is measured by interrupts. + +Wiring: TCS230 mBed + p1(s0) p5 + p2(s1) p6 + p7(s2) p7 + p8(s3) p8 + p6(out) p9 +p3(OE), p4(GND) tied to ground. p5(Vcc) tied to 3V3. + +Author: Lluis Nadal. August 2011. +**************************************************** +*/ + + +#include "mbed.h" + + +Serial pc(USBTX, USBRX); +InterruptIn in(p9); +DigitalOut s0(p5), s1(p6); // s2(p7), s3(p8) +BusOut setColor(p8, p7); //(LSB pin,..., MSB pin): (s3, s2). Red: 0, Blue: 1, Clear: 2, Green: 3. +Timer t; + +float period = 0; // This is the period between interrupts in microseconds +float freq = 0; +int n; +int color; // Color + + +void print() { // Print to PC + switch (color) { + case 0: + pc.printf(" Red: \t\t%.2f Hz, \t%.2f us\r\n", freq, period); + break; + case 1: + pc.printf(" Blue: \t\t%.2f Hz, \t%.2f us\r\n", freq, period); + break; + case 2: + pc.printf(" Clear: \t%.2f Hz, \t%.2f us\r\n", freq, period); + break; + case 3: + pc.printf(" Green: \t%.2f Hz, \t%.2f us\r\n", freq, period); + pc.printf("\r\n"); + break; + } +} + + +void time() { + if (n>99) { // Wait 100 interrupts + period = t.read_us()/(float)n; // Get time + freq = (1/period)*1000000; // Convert period (in us) to frequency (Hz). Works up to 100kHz. + n = 0; + + print(); // Print values to PC + + color++; + if (color > 3) color = 0; + setColor = color; + wait(0.5); + t.reset(); // Reset timer and wait for next interrupt + } + n++; +} + + +int main() { + + in.mode(PullDown); // Set the pin to Pull Down mode. + wait(1); + n = 0; + color = 0; + setColor = color; + + s0 = 0; + s1 = 1; // Frequency 2% = 12 kHz full-scale. + + in.rise(&time); // Set up the interrupt for rising edge + t.start(); // Start the timer + + while (1) { + + } +} + + +