Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed TCS3472_I2C MCP23017 VL6180 DebounceIn WattBob_TextLCD
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
Generated on Tue Jul 26 2022 18:38:46 by
1.7.2