fina mbed source
Dependencies: mbed TCS3472_I2C VL6180
Diff: main.cpp
- Revision:
- 0:22fc25c6238e
diff -r 000000000000 -r 22fc25c6238e main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Dec 17 04:53:52 2018 +0000 @@ -0,0 +1,430 @@ +#include "mbed.h" +#include "TCS3472_I2C.h" +#include "VL6180.h" +DigitalOut distance_over(p24); +DigitalOut start_Digital_Tube(p15); +DigitalOut start_LED(p16); +DigitalOut start_question1(p18); +DigitalOut start_question2(p19); +DigitalIn result1_led(p7); +DigitalIn result2_led(p8); +DigitalIn result1_Digital_Tube(p11); +DigitalIn result2_Digital_Tube(p12); +DigitalIn result1_question(p13); +DigitalIn result2_question(p14); +VL6180 TOF_sensor(p28, p27); +TCS3472_I2C rgb_sensor(p9, p10); +DigitalOut color1(p21); +DigitalOut color2(p22); +DigitalOut start_good_supply(p17); +DigitalIn color_over(p23); +DigitalOut servo_test(p20); +DigitalIn infrared1(p25); +DigitalIn infrared3(p26); +DigitalIn infrared2(p29); +DigitalIn infrared4(p30); + + +Serial pc(USBTX, USBRX); + +int main() +{ + int game_count; + int distance_count; + int good_shut_down; + int Digital_Tube,LED,QUESTION1,QUESTION2; + uint8_t dist; //distance + int count_color; + char a; + float R,G,B; + TOF_sensor.VL6180_Init(); + int rgb_readings[4]; //color + int user,maintance; + rgb_sensor.enablePowerAndRGBC(); + rgb_sensor.setIntegrationTime(100); +while(1) +{ + Digital_Tube=0; + LED=0; + QUESTION1=0; + QUESTION2=0; + start_Digital_Tube=0; + start_LED=0; + start_question1=0; + start_question2=0; + start_good_supply=0; + servo_test=0; + color1=0; + color2=0; + good_shut_down=0; + distance_over=0; + distance_count=0; + game_count=0; + + while(1) + { + a=pc.getc(); + if(a=='9') + { + break; + } + } + + while(1) + { + dist = TOF_sensor.getDistance(); //always reading the data of distance + if(dist>=100 && dist<255) + { + distance_over=0; + pc.printf("10"); + break; + } + else + { + distance_over=1; + } + } + while(1) + { + a=pc.getc(); + if(a=='2') //if the mbed get the signal to read card + { + while(1) + { + //identify the card + if(infrared1==1 && infrared2==1 && infrared3==1 && infrared4==1) + { + user=0; + maintance=1; + pc.printf("0"); + break; + } + else + { + user=1; + maintance=0; + pc.printf("1"); + break; + } + } + break; + } + if(a=='7') + { + break; + } + } + while(user==1 && maintance==0) + { + while(1) + { + a=pc.getc(); + if(a=='7') + { + break; + } + if(a=='8') + { + Digital_Tube=1; + break; + } + if(a=='9') + { + LED=1; + break; + } + if(a=='5') + { + QUESTION1=1; + break; + } + if(a=='6') + { + QUESTION2=1; + break; + } + } + if(Digital_Tube==1 && LED==0 && QUESTION1==0 && QUESTION2==0) + { + start_Digital_Tube=1; + while(1) + { + game_count=game_count+1; + dist = TOF_sensor.getDistance(); + if(dist<=100 || dist>=200) + { + distance_over=1; + distance_count=distance_count+1; + if(distance_count==1000) + { + break; + } + } + else + { + distance_over=0; + distance_count=0; + } + if(result1_Digital_Tube==1 && result2_Digital_Tube==0) + { + pc.printf("1"); + start_Digital_Tube=0; + break; + } + if(result1_Digital_Tube==0 && result2_Digital_Tube==1) + { + pc.printf("0"); + start_Digital_Tube=0; + break; + } + if(game_count==4000) + { + game_count=0; + pc.printf("long time without operating"); + break; + } + } + } + if(Digital_Tube==0 && LED==1 && QUESTION1==0 && QUESTION2==0) + { + start_LED=1; + while(1) + { + game_count=game_count+1; + dist = TOF_sensor.getDistance(); + if(dist<=100 || dist>=200) + { + distance_over=1; + distance_count=distance_count+1; + if(distance_count==1000) + { + break; + } + } + else + { + distance_over=0; + distance_count=0; + } + if(result1_led==1 && result2_led==0) + { + pc.printf("1"); + start_LED=0; + break; + } + if(result1_led==0 && result2_led==1) + { + pc.printf("0"); + start_LED=0; + break; + } + if(game_count==4000) + { + game_count=0; + pc.printf("long time without operating"); + break; + } + } + } + if(Digital_Tube==0 && LED==0 && QUESTION1==1 && QUESTION2==0) + { + start_question1=1; + start_question2=0; + while(1) + { + game_count=game_count+1; + dist = TOF_sensor.getDistance(); + if(dist<=100 && dist>=200) + { + distance_over=1; + distance_count=distance_count+1; + if(distance_count==1000) + { + break; + } + } + else + { + distance_over=0; + distance_count=0; + } + if(result1_question==1 && result2_question==0) + { + pc.printf("1"); + start_question1=0; + break; + } + if(result1_question==0 && result2_question==1) + { + pc.printf("0"); + start_question1=0; + break; + } + if(game_count==4000) + { + game_count=0; + pc.printf("long time without operating"); + break; + } + } + } + if(Digital_Tube==0 && LED==0 && QUESTION1==0 && QUESTION2==1) + { + start_question1=0; + start_question2=1; + while(1) + { + game_count=game_count+1; + dist = TOF_sensor.getDistance(); + if(dist<=100 || dist>=200) + { + distance_over=1; + distance_count=distance_count+1; + if(distance_count==1000) + { + break; + } + } + else + { + distance_over=0; + distance_count=0; + } + if(result1_question==1 && result2_question==0) + { + pc.printf("1"); + start_question1=0; + start_question2=0; + break; + } + if(result1_question==0 && result2_question==1) + { + pc.printf("0"); + start_question1=0; + start_question2=0; + break; + } + if(game_count==4000) + { + game_count=0; + pc.printf("long time without operating"); + break; + } + } + } + break; + } + while(user==0 && maintance==1) + { + a=pc.getc(); + if(a=='3') + { + start_Digital_Tube=1; + start_LED=1; + start_question1=1; + wait(10); + start_Digital_Tube=0; + start_LED=0; + start_question1=0; + } + if(a=='4') + { + servo_test=1; + wait(10); + servo_test=0; + } + if(a=='5') + { + dist = TOF_sensor.getDistance(); + rgb_sensor.getAllColors(rgb_readings); + pc.printf("The distance are %d and the color are Red %d Green %d Blue %d\n",dist,rgb_readings[1],rgb_readings[2],rgb_readings[3]); + } + if(a=='6') + { + while(1) + { + count_color=0; + R=0; + G=0; + B=0; + color1=0; + color2=0; + start_good_supply=0; + while(1) + { + count_color=count_color+1; + rgb_sensor.getAllColors(rgb_readings); + R=R+rgb_readings[1]; + G=G+rgb_readings[2]; + B=B+rgb_readings[3]; + if(count_color>=10) + { + R=R/10; + G=G/10; + B=B/10; + break; + } + } + start_good_supply=1; + if((R-B)>=100 && (G-B)>=100 && R>G) + { + color1=0; + color2=1; + while(1) + { + if(color_over==1) + { + start_good_supply=0; + wait(2); + break; + } + } + } + else if((R-B)>=100 && (R-G)>=100 && (G-B)<=100) + { + color1=1; + color2=0; + while(1) + { + if(color_over==1) + { + start_good_supply=0; + wait(2); + break; + } + } + } + else if((G-R)>=70 && (G-B)>=100) + { + color1=1; + color2=1; + while(1) + { + if(color_over==1) + { + start_good_supply=0; + wait(2); + break; + } + } + } + else + { + good_shut_down=good_shut_down+1; + if(good_shut_down==5) + { + good_shut_down=0; + break; + } + } + } + } + if(a=='7') + { + break; + } + + } +} + +}