Jian Chen
/
mini
demo program of color sensor
main.cpp@0:07ac8eb1700b, 2013-10-16 (annotated)
- 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?
User | Revision | Line number | New 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 | } |