demo program of color sensor

Dependencies:   mbed

Committer:
chenjian221
Date:
Wed Oct 16 04:32:34 2013 +0000
Revision:
0:07ac8eb1700b
Child:
1:131a940a952c
for_wikipage

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chenjian221 0:07ac8eb1700b 1 #include "mbed.h"
chenjian221 0:07ac8eb1700b 2
chenjian221 0:07ac8eb1700b 3 DigitalOut latch(p15);
chenjian221 0:07ac8eb1700b 4 DigitalOut enable(p16);
chenjian221 0:07ac8eb1700b 5 Serial color_sensor(p9, p10);
chenjian221 0:07ac8eb1700b 6
chenjian221 0:07ac8eb1700b 7 DigitalOut out_latch(p22);
chenjian221 0:07ac8eb1700b 8 DigitalOut out_enable(p21);
chenjian221 0:07ac8eb1700b 9 SPI spi(p11, p12, p13);
chenjian221 0:07ac8eb1700b 10 SPI out_spi(p5, p6, p7);
chenjian221 0:07ac8eb1700b 11
chenjian221 0:07ac8eb1700b 12 void RGB_LED(int red, int green, int blue)
chenjian221 0:07ac8eb1700b 13 {
chenjian221 0:07ac8eb1700b 14 unsigned int low_color=0;
chenjian221 0:07ac8eb1700b 15 unsigned int high_color=0;
chenjian221 0:07ac8eb1700b 16 high_color=(blue<<4)|((red&0x3C0)>>6);
chenjian221 0:07ac8eb1700b 17 low_color=(((red&0x3F)<<10)|(green));
chenjian221 0:07ac8eb1700b 18 spi.write(high_color);
chenjian221 0:07ac8eb1700b 19 spi.write(low_color);
chenjian221 0:07ac8eb1700b 20 latch=1;
chenjian221 0:07ac8eb1700b 21 latch=0;
chenjian221 0:07ac8eb1700b 22 }
chenjian221 0:07ac8eb1700b 23
chenjian221 0:07ac8eb1700b 24 void out_RGB_LED(int red, int green, int blue)
chenjian221 0:07ac8eb1700b 25 {
chenjian221 0:07ac8eb1700b 26 unsigned int low_color=0;
chenjian221 0:07ac8eb1700b 27 unsigned int high_color=0;
chenjian221 0:07ac8eb1700b 28 high_color=(blue<<4)|((red&0x3C0)>>6);
chenjian221 0:07ac8eb1700b 29 low_color=(((red&0x3F)<<10)|(green));
chenjian221 0:07ac8eb1700b 30 out_spi.write(high_color);
chenjian221 0:07ac8eb1700b 31 out_spi.write(low_color);
chenjian221 0:07ac8eb1700b 32 out_latch=1;
chenjian221 0:07ac8eb1700b 33 out_latch=0;
chenjian221 0:07ac8eb1700b 34 }
chenjian221 0:07ac8eb1700b 35 void split_RGB(char* color_str)
chenjian221 0:07ac8eb1700b 36 {
chenjian221 0:07ac8eb1700b 37 char *save_ptr;
chenjian221 0:07ac8eb1700b 38 char *p = strtok_r(color_str, ",", &save_ptr);
chenjian221 0:07ac8eb1700b 39 int red = strtol(p, NULL, 10);
chenjian221 0:07ac8eb1700b 40 p = strtok_r(NULL, ",", &save_ptr);
chenjian221 0:07ac8eb1700b 41 int green = strtol(p, NULL, 10);
chenjian221 0:07ac8eb1700b 42 p = strtok_r(NULL, ",", &save_ptr);
chenjian221 0:07ac8eb1700b 43 int blue = strtol(p, NULL, 10);
chenjian221 0:07ac8eb1700b 44 out_RGB_LED(red, green, blue);
chenjian221 0:07ac8eb1700b 45 return;
chenjian221 0:07ac8eb1700b 46 }
chenjian221 0:07ac8eb1700b 47 void get_color()
chenjian221 0:07ac8eb1700b 48 {
chenjian221 0:07ac8eb1700b 49 if(color_sensor.readable()) {
chenjian221 0:07ac8eb1700b 50 printf("get into the function\n");
chenjian221 0:07ac8eb1700b 51 char str[11];
chenjian221 0:07ac8eb1700b 52 int i = 0;
chenjian221 0:07ac8eb1700b 53 char c;
chenjian221 0:07ac8eb1700b 54 while(c=color_sensor.getc()) {
chenjian221 0:07ac8eb1700b 55 //printf("read: %c\n", c);
chenjian221 0:07ac8eb1700b 56 if(c!='\r') {
chenjian221 0:07ac8eb1700b 57 str[i] = c;
chenjian221 0:07ac8eb1700b 58 i++;
chenjian221 0:07ac8eb1700b 59 } else {
chenjian221 0:07ac8eb1700b 60 break;
chenjian221 0:07ac8eb1700b 61 }
chenjian221 0:07ac8eb1700b 62 }
chenjian221 0:07ac8eb1700b 63 //color_sensor.scanf("%s", &str);
chenjian221 0:07ac8eb1700b 64 printf("another read: ");
chenjian221 0:07ac8eb1700b 65 printf("%s\n", str);
chenjian221 0:07ac8eb1700b 66 printf("i=%d\n", i);
chenjian221 0:07ac8eb1700b 67 split_RGB(str);
chenjian221 0:07ac8eb1700b 68 }
chenjian221 0:07ac8eb1700b 69 return;
chenjian221 0:07ac8eb1700b 70 }
chenjian221 0:07ac8eb1700b 71 int main()
chenjian221 0:07ac8eb1700b 72 {
chenjian221 0:07ac8eb1700b 73 int red=0;
chenjian221 0:07ac8eb1700b 74 int green=0;
chenjian221 0:07ac8eb1700b 75 int blue=0;
chenjian221 0:07ac8eb1700b 76 spi.format(16,0);
chenjian221 0:07ac8eb1700b 77 spi.frequency(500000);
chenjian221 0:07ac8eb1700b 78 out_spi.format(16,0);
chenjian221 0:07ac8eb1700b 79 out_spi.frequency(500000);
chenjian221 0:07ac8eb1700b 80 enable=0;
chenjian221 0:07ac8eb1700b 81 latch=0;
chenjian221 0:07ac8eb1700b 82 out_enable=0;
chenjian221 0:07ac8eb1700b 83 out_latch=0;
chenjian221 0:07ac8eb1700b 84 color_sensor.baud(38400);
chenjian221 0:07ac8eb1700b 85 wait(2);
chenjian221 0:07ac8eb1700b 86 while(1) {
chenjian221 0:07ac8eb1700b 87 red = rand() % 50;
chenjian221 0:07ac8eb1700b 88 green = rand() % 50;
chenjian221 0:07ac8eb1700b 89 blue = rand() % 50;
chenjian221 0:07ac8eb1700b 90 RGB_LED( red, green, blue);
chenjian221 0:07ac8eb1700b 91
chenjian221 0:07ac8eb1700b 92 get_color();
chenjian221 0:07ac8eb1700b 93 wait(1);
chenjian221 0:07ac8eb1700b 94 }
chenjian221 0:07ac8eb1700b 95
chenjian221 0:07ac8eb1700b 96
chenjian221 0:07ac8eb1700b 97 }