system project / Mbed 2 deprecated LED_GAME11

Dependencies:   mbed TCS3472_I2C MCP23017 VL6180 DebounceIn WattBob_TextLCD

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main_copy.cpp Source File

main_copy.cpp

00001 #include "mbed.h"
00002 #include "DebounceIn.h"
00003 #include "stdint.h"
00004 #include "MCP23017.h"
00005 #include "WattBob_TextLCD.h"
00006 #include "VL6180.h"
00007 #include "TCS3472_I2C.h"
00008 
00009 #define     BACK_LIGHT_ON(INTERFACE)    INTERFACE->write_bit(1,BL_BIT)
00010 #define     BACK_LIGHT_OFF(INTERFACE)   INTERFACE->write_bit(0,BL_BIT)
00011 
00012 MCP23017            *par_port;
00013 WattBob_TextLCD     *lcd;
00014 
00015 #define IDENTIFICATIONMODEL_ID 0x0000
00016 
00017 Serial PC(USBTX, USBRX); //default 9600 baud
00018 VL6180  TOF_sensor(p28, p27);
00019 TCS3472_I2C rgb_sensor(p9, p10);
00020 
00021 DigitalOut servo11 (p8); DigitalOut servo12 (p7);
00022 DigitalOut servo13 (p6); DigitalOut servo14 (p5);
00023 
00024 DigitalOut servo21 (p29); DigitalOut servo22 (p23);
00025 DigitalOut servo23 (p22); DigitalOut servo24 (p21);
00026 
00027 DigitalOut servo31 (p26); DigitalOut servo32 (p25);  
00028 DigitalOut servo33 (p12); DigitalOut servo34 (p11); 
00029 
00030 DigitalOut myled1 (p13);    DigitalOut myled2 (p14);
00031 DigitalOut myled3 (p15);    DigitalOut myled4 (p16);
00032 
00033 DebounceIn pb1(p17);    DebounceIn pb2(p18);
00034 DebounceIn pb3(p19);    DebounceIn pb4(p20);
00035 
00036 int old_pb1 = 0, old_pb2 = 0, old_pb3 = 0, old_pb4 = 0;
00037 int new_pb1,     new_pb2,     new_pb3,     new_pb4;
00038 
00039 int i = 0, col, row, led; //variables for order manipulation
00040 int levelreset, tries, level = 1; //level parameters
00041 float delay; //delay for blinking LEDs
00042 int D = 30; //for distance sensor
00043 
00044 int order[24][4] = //ORDER ARRAY FOR LED GAME
00045 {1,2,3,4,   2,1,3,4,    3,1,2,4,    1,3,2,4,    2,3,1,4,    3,2,1,4,
00046  4,2,1,3,   2,4,1,3,    1,4,2,3,    4,1,2,3,    2,1,4,3,    1,2,4,3,
00047  1,3,4,2,   3,1,4,2,    4,1,3,2,    1,4,3,2,    3,4,1,2,    4,3,1,2,
00048  4,3,2,1,   3,4,2,1,    2,4,3,1,    4,2,3,1,    3,2,4,1,    2,3,4,1};
00049 
00050 void LEDgame(); //function prototype of LED game
00051 void reset(); //to reset level
00052 void light(int); //turn on LEDs
00053 void Maint(); // maintainence mode
00054 int Dist(); //check distance sensor
00055 int MAX(int,int,int); //find max rgb value
00056 
00057 int main()
00058 
00059 {
00060     pb1.mode(PullUp);   pb2.mode(PullUp);
00061     pb3.mode(PullUp);   pb4.mode(PullUp);
00062     wait(.001);
00063     
00064     par_port = new MCP23017(p9, p10, 0x40);
00065     par_port->config(0x0F00, 0x0F00, 0x0F00);           //configure MCP23017 chip on WattBob
00066     lcd = new WattBob_TextLCD(par_port);
00067     BACK_LIGHT_ON(par_port);
00068     TOF_sensor.VL6180_Init();
00069     rgb_sensor.enablePowerAndRGBC();
00070     rgb_sensor.setIntegrationTime(100);
00071     int rgb_read[4], maxrgb;
00072     while (1){
00073     char c = PC.getc();
00074     if (c == 'o'){
00075     while(1)
00076     {
00077         rgb_sensor.getAllColors(rgb_read);
00078         maxrgb = MAX(rgb_read[1],rgb_read[2],rgb_read[3]);
00079         if (maxrgb == rgb_read[1])
00080         //if (maxrgb > 2000 && maxrgb < 3000)
00081         while(level <= 4 && Dist() < D)
00082         {
00083             if (level == 0) break; //to stop game if level reset to zero.
00084             row = rand()%24;
00085             tries = 1;
00086             LEDgame();
00087         }
00088         if (Dist() > D) {
00089             level = 1;
00090             myled1=0; myled2=0; myled3=0; myled4=0;
00091             } //resets game if card is removed.
00092     }
00093 }
00094 
00095     else if (c== 'm'){
00096         while (1){
00097             char d = PC.getc();
00098             if (d=='D') {PC.printf("%d", Dist());}
00099             if (d=='C'){
00100                 rgb_sensor.getAllColors(rgb_read);
00101                 maxrgb = MAX(rgb_read[1],rgb_read[2],rgb_read[3]);
00102                 if (maxrgb == rgb_read[1]) PC.puts("Red");
00103                 else if (maxrgb == rgb_read[2]) PC.puts("Green");
00104                 else if (maxrgb == rgb_read[3]) PC.puts("Blue");
00105                 }
00106             else if (d=='r') myled1=1;
00107             else if (d=='y') myled2=1;
00108             else if (d=='g') myled3=1;
00109             else if (d=='w') myled4=1;
00110             else if (d=='s') {LEDgame();}
00111             else if (d=='d') {myled1=0; myled2=0; myled3=0; myled4=0; }  
00112             else if (d=='o'){
00113                     while(1){
00114                     char p=PC.getc();
00115                     if (p=='f') servo11=1;
00116                     else if (p=='s') servo12=1;
00117                     else if (p=='t') servo13=1;
00118                     else if (p=='F') servo14=1;
00119                     else if (p=='R'){
00120                         servo11=0; servo12=0; servo13=0; servo14=0;
00121                         break;
00122                     }
00123                     }
00124                 }
00125             else if (d=='S'){
00126                     while(1){
00127                     char p=PC.getc();
00128                     if (p=='f') servo21=1;
00129                     else if (p=='s') servo22=1;
00130                     else if (p=='t') servo23=1;
00131                     else if (p=='F') servo24=1;
00132                     else if (p=='R'){
00133                         servo21=0; servo22=0; servo23=0; servo24=0;
00134                         break;
00135                     }
00136                     }
00137                 }
00138             else if (d=='t'){
00139                     while(1){
00140                     char p=PC.getc();
00141                     if (p=='f') servo31=1;
00142                     else if (p=='s') servo32=1;
00143                     else if (p=='t') servo33=1;
00144                     else if (p=='F') servo34=1;
00145                     else if (p=='R'){
00146                         servo31=0; servo32=0; servo33=0; servo34=0;
00147                         break;
00148                     }
00149                     }
00150                 }
00151                 
00152                     
00153             else if (d=='R') {break;}         
00154                 
00155                 
00156         
00157 }
00158 }
00159 }
00160 }
00161 
00162 void LEDgame()
00163 {
00164     while(Dist() < D)
00165     {
00166         levelreset = 0;
00167         for (col=0; col<4; col++)
00168         {led = order[row][col]; light(led);} //switches on the respective LEDs according to the order
00169 
00170     while(Dist() < D)
00171     {
00172         new_pb1 = pb1; new_pb2 = pb2;
00173         new_pb3 = pb3; new_pb4 = pb4;
00174         
00175     if( ((new_pb1 == 0) && (old_pb1 == 1)) || ((new_pb2 == 0) && (old_pb2 == 1)) || ((new_pb3 == 0) && (old_pb3 == 1)) || ((new_pb4 == 0) && (old_pb4 == 1)) )
00176     {
00177         switch(order[row][i])
00178         {
00179             case 1:
00180             {
00181                 if((new_pb1 == 0) && (old_pb1 == 1))
00182                 { myled1 = 1; i++;}
00183                 else {reset(); levelreset = 1; tries++;}
00184             } break;
00185             case 2:
00186             {
00187                 if((new_pb2 == 0) && (old_pb2 == 1))
00188                 { myled2 = 1; i++;}
00189                 else {reset(); levelreset = 1; tries++;}
00190             } break;
00191             case 3:
00192             {
00193                 if((new_pb3 == 0) && (old_pb3 == 1))
00194                 { myled3 = 1; i++;}
00195                 else {reset(); levelreset = 1; tries++;}
00196             } break;
00197             case 4:
00198             {
00199                 if((new_pb4 == 0) && (old_pb4 == 1))
00200                 { myled4 = 1; i++;}
00201                 else {reset(); levelreset = 1; tries++;}
00202             } break;
00203         }
00204         if (levelreset == 1) //do if the level was reset during the game
00205         {
00206             //reset level to zero to stop game if number of tries exceeded
00207             if (tries > 3) {level = 0; reset(); return;}
00208             else break;
00209         }
00210         else if (levelreset == 0) //else increment level counter
00211             if(i >= 4){level++; wait(2); reset(); return;}
00212     }
00213         old_pb1 = new_pb1; old_pb2 = new_pb2;
00214         old_pb3 = new_pb3; old_pb4 = new_pb4;
00215     }
00216     }
00217 }
00218 
00219 
00220 
00221 void reset() //function to turn off LEDs and reset order
00222 {
00223     myled1 = 0; myled2 = 0; myled3 = 0; myled4 = 0;
00224     i = 0; wait(1); return;
00225 }
00226 
00227 void light(int n) //to turn on LEDs
00228 {
00229     //sets delay based on level number
00230     if(level == 1) delay = 1;
00231     else if (level == 2) delay = 0.75;
00232     else if (level == 3) delay = 0.50;
00233     else if (level == 4) delay = 0.25;
00234     
00235     //turns LED on for delay seconds before turning off
00236     if(n == 1) {myled1 = 1; wait(delay); myled1 = 0;}
00237     else if(n == 2) {myled2 = 1; wait(delay); myled2 = 0;}
00238     else if(n == 3) {myled3 = 1; wait(delay); myled3 = 0;}
00239     else if(n == 4) {myled4 = 1; wait(delay); myled4 = 0;}
00240     return;
00241 }
00242 
00243 int Dist() //returns distance
00244 {
00245     uint8_t dist;
00246     lcd->cls(); lcd->locate(0,0);
00247     dist = TOF_sensor.getDistance();
00248     lcd->printf("Dist=%d", dist);
00249     return dist;
00250 }
00251 
00252 int MAX(int R, int G, int B) //returns max rgb value
00253 {
00254     int max;
00255     if (R > G) max = R;
00256     else max = G;
00257     if (B > max) max = B;
00258     return max;
00259 }
00260 
00261