this is a small prototype for color sensor, which can detect three colors... this was made by using an LDR,1.5 K resistor and the wiz wiki 7500 board

Dependencies:   mbed

Fork of ADC_test by Simon Blandford

the things you need for this are wiznet board or any other micro controller can do it when you understand the logic i have applied here.An LDR and one resistor for your reference i have used 1.5K resistor in my work.

connect the LDR and resistor in series in between the 3.3V and GND of the board.take outpt from the point where LDR and resistor met.

it's just an voltage divider circuit depends on the color you subject to LDR the resistance of LDR will vary and the volatge also does the same.

then feed the output on the adc pin of micro controller, then you will get various values for various colors. the adc which i have used is 12 bit one that's why it's having 4096 count. you have to change the values in the program according to your adc count.

sorry for my bad english.........

Revision:
0:a2562dfbf543
Child:
1:c88c8173b9b2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Feb 10 13:11:26 2010 +0000
@@ -0,0 +1,117 @@
+
+#define SAMPLE_RATE    150000
+
+#include "mbed.h"
+#include "adc.h"
+
+DigitalOut int_led(LED1);
+
+//Initialise ADC to maximum SAMPLE_RATE and cclk divide set to 1
+ADC adc(SAMPLE_RATE, 1);
+
+//Toggle LED on interrupt
+void led_toggle(int chan, uint32_t value) {
+    int_led = !int_led;
+}
+
+//Report ADC value on interrupt
+void print_value(int chan, uint32_t value) {
+    printf("ADC interrupt on pin %u, value=%04u.\n", 
+        adc.channel_to_pin_number(chan), (value >> 4) & 0xFFF);
+}
+
+
+int main() {
+    int i;
+    
+    printf("Requested max sample rate is %u, actual max sample rate is %u.\n",
+        SAMPLE_RATE, adc.actual_sample_rate());
+    while (1) {
+    
+        //Set up ADC on pin 20
+        adc.setup(p20,1);
+        //Set up ADC on pin 19
+        adc.setup(p19,1);
+        wait(1);
+        
+        //Measure pin 20
+        adc.select(p20);
+        //Start ADC conversion
+        adc.start();
+        //Wait for it to complete
+        while(!adc.done(p20));
+        printf("Measured value on pin 20 is %04u.\n", adc.read(p20));
+        wait(1);
+
+        //Measure pin 19
+        adc.select(p19);
+        //Start ADC conversion
+        adc.start();
+        //Wait for it to complete
+        while(!adc.done(p19));
+        printf("Measured value on pin 19 is %04u.\n", adc.read(p19));
+        wait(1);
+
+    
+        //Append an interrupt handler that prints the channel and value
+        adc.append(print_value);
+        //Measure pin 20
+        adc.select(p20);
+        //Enable the interrupt
+        adc.interrupt_state(p20,1);
+        //Start ADC conversion
+        adc.start();
+        //Wait for it to complete
+        while(!adc.done(p20));
+        wait(1);
+    
+        //Unset pin 20
+        adc.setup(p20,0);
+    
+        //Togle LED on each converstion.
+        //Should be 12.5KHz on LED for all 6 pins.
+        //Sample rate=150KHz / 6 channels / 2
+        adc.append(led_toggle);
+    
+        //Prepare for burst mode on all ADC pins
+        adc.startmode(0,0);
+        adc.burst(1);
+        adc.setup(p20,1);
+        adc.setup(p19,1);
+        adc.setup(p18,1);
+        adc.setup(p17,1);
+        adc.setup(p16,1);
+        adc.setup(p15,1);
+        //For burst mode, only one interrupt is required
+        //which can be on any enabled pin. We have enabled all
+        //of them here.
+        adc.interrupt_state(p15,1);
+        printf("Burst mode, printing once per second...\n");
+        for (i=0; i<5; i++)
+        {
+            printf("%04u %04u %04u %04u %04u %04u\n", 
+                adc.read(p20),
+                adc.read(p19),
+                adc.read(p18),
+                adc.read(p17),
+                adc.read(p16),
+                adc.read(p15));
+            wait(1);
+        }
+        adc.burst(0);
+        adc.setup(p20,0);
+        adc.setup(p19,0);
+        adc.setup(p18,0);
+        adc.setup(p17,0);
+        adc.setup(p16,0);
+        adc.setup(p15,0);
+        adc.interrupt_state(p20,0);
+        adc.interrupt_state(p19,0);
+        adc.interrupt_state(p18,0);
+        adc.interrupt_state(p17,0);
+        adc.interrupt_state(p16,0);
+        adc.interrupt_state(p15,0);
+        
+        printf("\n");
+    }
+}