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.
main.cpp
00001 #include "mbed.h" 00002 #include "PwmOut.h" 00003 #include "TextLCD.h" 00004 00005 00006 00007 float tiempo = 1; 00008 00009 00010 // final de carrera 00011 DigitalIn finaly(PC_10); 00012 DigitalIn finalx(PC_11); 00013 float fcy,fcx; 00014 00015 00016 //Serial 00017 Serial pc(SERIAL_TX, SERIAL_RX); 00018 00019 //Servo 00020 PwmOut servo (A1); 00021 00022 //LCD 00023 TextLCD lcd(PA_7, PA_6, PA_8, PB_6, PC_7, PA_9, TextLCD::LCD16x2); // rs, e, d4-d7 00024 00025 //Variables Sensores 00026 DigitalIn x0(PC_0);// elegir pieza 00027 DigitalIn o0(PC_3); 00028 00029 float lec_x; 00030 float lec_o; 00031 00032 DigitalIn x1(PC_9);// columna x 00033 DigitalIn x2(PB_8); 00034 DigitalIn x3(PA_0); 00035 DigitalIn x4(PH_1); 00036 00037 int l_x1,l_x2,l_x3,l_x4; 00038 int l_x[5]; 00039 00040 DigitalIn o1(PA_4);// columna o 00041 DigitalIn o2(PB_0); 00042 DigitalIn o3(PC_2); 00043 DigitalIn o4(PC_1); 00044 00045 int l_o1,l_o2,l_o3,l_o4; 00046 int l_o[5]; 00047 00048 DigitalIn t1(PB_14);// triki 00049 DigitalIn t2(PB_2); 00050 DigitalIn t3(PA_12); 00051 DigitalIn t4(PB_13); 00052 DigitalIn t5(PB_1); 00053 DigitalIn t6(PA_11); 00054 DigitalIn t7(PC_4); 00055 DigitalIn t8(PB_15); 00056 DigitalIn t9(PB_12); 00057 00058 00059 //int l_t1,l_t2,l_t3,l_t4,l_t5,l_t6,l_t7,l_t8,l_t9; 00060 int l_t[10]; 00061 int l_t2[10]; 00062 00063 // botones 00064 DigitalIn boton1(PC_8); 00065 DigitalIn boton2(PC_6); 00066 00067 float b1,b2; 00068 00069 00070 // electroiman 00071 00072 DigitalOut electro_i(PC_12); 00073 00074 00075 00076 // movimiento motores 00077 00078 DigitalOut dir_x(D5); 00079 DigitalOut step_x(D2); 00080 00081 DigitalOut dir_y(D6); 00082 DigitalOut step_y(D3); 00083 00084 00085 // variables utilizables 00086 int veri,veri2,veri3,veri4; 00087 int i; 00088 int sum,ficha; 00089 int anti; 00090 int cont; 00091 int letra=0; 00092 int diferencia; 00093 00094 00095 // posiciones 00096 // ubicacion fichas 00097 int x[9]={0,0,0,0,0,279,279,279,279}; 00098 int y[9]={0,397,733,1040,1374,397,733,1040,1374}; 00099 00100 // Ubicaciones de triki 00101 int x_t[10]={0,628,940,1258,628,940,1258,628,940,1258}; 00102 int y_t[10]={0,590,590,590,905,905,905,1194,1194,1194}; 00103 00104 00105 00106 00107 void origen (void); 00108 void adelante(void); 00109 void atras(void); 00110 void derecha (void); 00111 void izquierda(void); 00112 void lec_sen(void); 00113 void coger(void); 00114 void dejar(void); 00115 void ir_tomar(void); 00116 void ir_dejar(void); 00117 00118 //////////////////////////////////////////// 00119 void ir_dejar (void) 00120 { 00121 00122 int pos; 00123 00124 pos=letra; 00125 for(i=1;i<=x_t[pos];i++) 00126 { 00127 derecha(); 00128 } 00129 00130 for(i=1;i<=y_t[pos];i++) 00131 { 00132 adelante(); 00133 } 00134 dejar(); 00135 origen(); 00136 } 00137 00138 00139 00140 00141 void ir_tomar(void) 00142 { 00143 00144 int libre; 00145 int agrega; 00146 int pos; 00147 00148 if(ficha==20) 00149 { 00150 lec_sen(); 00151 for(i=1;i<=4;i++) 00152 { 00153 if(l_x[i]==1) 00154 { 00155 libre=i; 00156 i=50; 00157 agrega=4; 00158 } 00159 } 00160 } 00161 00162 if(ficha==10) 00163 { 00164 lec_sen(); 00165 for(i=1;i<=4;i++) 00166 { 00167 if(l_o[i]==1) 00168 { 00169 libre=i; 00170 i=50; 00171 agrega=0; 00172 } 00173 } 00174 } 00175 00176 pos=libre+agrega; 00177 for(i=1;i<=x[pos];i++) 00178 { 00179 derecha(); 00180 } 00181 00182 for(i=1;i<=y[pos];i++) 00183 { 00184 adelante(); 00185 } 00186 coger(); 00187 origen(); 00188 00189 } 00190 //////////////////////////////////////////////////////Lectura sensores todos 00191 void coger(void) 00192 { 00193 servo.pulsewidth_us(1220); // es constante 00194 electro_i=1; 00195 wait(1); 00196 servo.pulsewidth_us(640); // es constante 00197 wait(1); 00198 00199 } 00200 void dejar (void) 00201 { 00202 servo.pulsewidth_us(1220); // es constante 00203 wait(1); 00204 electro_i=0; 00205 servo.pulsewidth_us(640); // es constante 00206 wait(1); 00207 00208 } 00209 void lec_sen(void) 00210 { 00211 lec_x = !x0.read();//Elegir ficha 00212 lec_o = !o0.read(); 00213 00214 //pc.printf("%f ",lec_x); 00215 //pc.printf("%f \n ",lec_o); 00216 00217 b1=boton1.read();// botones 00218 b2=boton2.read(); 00219 00220 //pc.printf("%f ",b1); 00221 //pc.printf("%f \n ",b2); 00222 00223 l_o[1] = !o1.read(); 00224 l_o[2] = !o2.read(); 00225 l_o[3] = !o3.read(); 00226 l_o[4] = !o4.read(); 00227 00228 00229 00230 l_x[1] = !x1.read(); 00231 l_x[2] = !x2.read(); 00232 l_x[3] = !x3.read(); 00233 l_x[4] = !x4.read(); 00234 00235 00236 l_t[1] = !t1.read(); 00237 l_t[2] = !t2.read(); 00238 l_t[3] = !t3.read(); 00239 l_t[4] = !t4.read(); 00240 l_t[5] = !t5.read(); 00241 l_t[6] = !t6.read(); 00242 l_t[7] = !t7.read(); 00243 l_t[8] = !t8.read(); 00244 l_t[9] = !t9.read(); 00245 /* 00246 pc.printf("%d ",l_o[1]); 00247 pc.printf("%d ",l_o[2]); 00248 pc.printf("%d ",l_o[3]); 00249 pc.printf("%d \n",l_o[4]); 00250 00251 pc.printf("%d ",l_x[1]); 00252 pc.printf("%d ",l_x[2]); 00253 pc.printf("%d ",l_x[3]); 00254 pc.printf("%d \n \n",l_x[4]); 00255 00256 00257 pc.printf("%d ",l_t[1]); 00258 pc.printf("%d ",l_t[2]); 00259 pc.printf("%d \n",l_t[3]); 00260 pc.printf("%d ",l_t[4]); 00261 pc.printf("%d ",l_t[5]); 00262 pc.printf("%d \n",l_t[6]); 00263 pc.printf("%d ",l_t[7]); 00264 pc.printf("%d ",l_t[8]); 00265 pc.printf("%d \n\n\n",l_t[9]); 00266 00267 */ 00268 00269 00270 } 00271 /////////////////////////////////////////////////////adelante 00272 void adelante (void) 00273 { 00274 dir_y=0; 00275 step_y=1; 00276 wait_ms(tiempo); 00277 step_y=0; 00278 wait_ms(tiempo); 00279 } 00280 /////////////////////////////////////////////////////atras 00281 void atras (void) 00282 { 00283 dir_y=1; 00284 step_y=1; 00285 wait_ms(tiempo); 00286 step_y=0; 00287 wait_ms(tiempo); 00288 } 00289 /////////////////////////////////////////////////////Deerecha 00290 00291 void derecha (void) 00292 { 00293 dir_x=1; 00294 step_x=1; 00295 wait_ms(tiempo); 00296 step_x=0; 00297 wait_ms(tiempo); 00298 } 00299 /////////////////////////////////////////////////////izquierda 00300 00301 void izquierda (void) 00302 { 00303 dir_x=0; 00304 step_x=1; 00305 wait_ms(tiempo); 00306 step_x=0; 00307 wait_ms(tiempo); 00308 } 00309 /////////////////////////////////////////////////////origen 00310 void origen (void) 00311 { 00312 00313 while(veri==0) 00314 { 00315 fcy = finaly.read(); 00316 fcx = finalx.read(); 00317 00318 // pc.printf("%f ",fcx); 00319 // pc.printf("%f \n ",fcy); 00320 00321 if(fcy==0) 00322 atras(); 00323 00324 if(fcx==0) 00325 izquierda(); 00326 00327 if(fcx==1 && fcy==1) 00328 veri=1; 00329 00330 } 00331 veri=0; 00332 } 00333 00334 //////////////////////////////////////////////////////////////////////////// 00335 ////////////////////////////////////////////////////// main//////////////// 00336 /////////////////////////////////////////////////////////////////////////// 00337 00338 int main() { 00339 /* 00340 while(1) 00341 { 00342 lec_sen(); 00343 wait(0.5); 00344 } 00345 */ 00346 int imprimir; 00347 int no; 00348 servo.period_ms(20); // es constante 00349 00350 // inicializa todo 00351 lcd.cls(); 00352 lcd.locate(0,0); 00353 lcd.printf(" Inicializando"); 00354 servo.pulsewidth_us(640); // es constante 00355 origen(); 00356 lcd.cls(); 00357 lcd.locate(0,0); 00358 lcd.printf("Elija X o O"); 00359 00360 00361 while(veri2==0) 00362 { 00363 lec_sen(); 00364 00365 // sabe si todas las fichas estan ubicadas 00366 for(i=0;i<=4;i++) 00367 { 00368 sum=sum+l_o[i]+l_x[i]; 00369 00370 } 00371 00372 // si no estan todas marca error 00373 if(sum <8 && anti==0) 00374 { 00375 lcd.cls(); 00376 lcd.locate(0,0); 00377 lcd.printf(" Error"); 00378 anti=1; 00379 no=1; 00380 } 00381 // si estan todas elija x o 0 00382 if(sum>=8 && anti==1) 00383 { 00384 lcd.cls(); 00385 lcd.locate(0,0); 00386 lcd.printf("Elija X o O"); 00387 anti=0; 00388 no=0; 00389 } 00390 sum=0; 00391 00392 00393 // se determina q ficha se eligio 00394 if(lec_x ==0 && no==0) 00395 { 00396 lcd.cls(); 00397 lcd.locate(0,0); 00398 lcd.printf(" Ficha: O"); 00399 00400 ficha=20; 00401 veri2=1; 00402 } 00403 00404 if(lec_o ==0 && no==0) 00405 { 00406 00407 lcd.cls(); 00408 lcd.locate(0,0); 00409 lcd.printf(" Ficha: x"); 00410 00411 ficha=10; 00412 veri2=1; 00413 } 00414 wait(0.6); 00415 00416 } 00417 // hasta aca solo se sabe con q ficha comienza 00418 // se inicia todo y se espera 1 seg 00419 sum=0; 00420 wait(1); 00421 cont++; 00422 00423 lcd.cls(); 00424 lcd.locate(0,0); 00425 lcd.printf("Coloque la ficha"); 00426 00427 while(veri3==0) 00428 { 00429 wait(2); 00430 lec_sen(); 00431 for(i=1;i<=9;i++) 00432 { 00433 sum=sum+l_t[i];// suma todo el triki para saber si hay fichas 00434 } 00435 if(sum==1) 00436 veri3=1; 00437 //pc.printf("%d \n ",sum); 00438 sum=0; 00439 00440 } 00441 for(i=1;i<=9;i++) 00442 { 00443 if(l_t[i]==1) 00444 { 00445 imprimir=i+ficha; 00446 pc.printf("%d\n ",imprimir); 00447 imprimir=0; 00448 } 00449 } 00450 // busca y envia el dato con la ficha guardada 00451 ///////////////////////////////////////////////////////////////////////////comienza********************************************************* 00452 while(1) 00453 { 00454 sum=0; 00455 int l_oc[5]; 00456 int l_xc[5]; 00457 00458 lcd.cls(); 00459 lcd.locate(0,0); 00460 lcd.printf("Turno de pc"); 00461 00462 letra = pc.getc(); 00463 00464 for(i=0;i<=9;i++) 00465 l_t2[i]=l_t[i]; 00466 00467 00468 00469 while(letra<49 && letra>57) 00470 { 00471 letra = pc.getc(); 00472 //pc.printf("%d \n ",letra); 00473 //lcd.locate(0,1); 00474 //char a=letra; 00475 //lcd.printf(a); 00476 } 00477 letra=letra-48;// pasar a decimal 00478 ir_tomar(); 00479 wait(1); 00480 ir_dejar(); 00481 00482 lcd.locate(0,0); 00483 lcd.printf(" Su turno "); 00484 l_oc[1] = !o1.read(); 00485 l_oc[2] = !o2.read(); 00486 l_oc[3] = !o3.read(); 00487 l_oc[4] = !o4.read(); 00488 00489 00490 00491 l_xc[1] = !x1.read(); 00492 l_xc[2] = !x2.read(); 00493 l_xc[3] = !x3.read(); 00494 l_xc[4] = !x4.read(); 00495 00496 while(veri4==0) 00497 { 00498 lec_sen(); 00499 if(ficha==20)// determina si es x o 0 00500 { 00501 for(i=1;i<=4;i++) 00502 { 00503 if(l_oc[i] != l_o[i]) 00504 { 00505 veri4=1; 00506 } 00507 } 00508 } 00509 if(ficha==10)// determina si es x o 0 00510 { 00511 for(i=1;i<=4;i++) 00512 { 00513 if(l_xc[i] != l_x[i]) 00514 { 00515 veri4=1; 00516 } 00517 } 00518 } 00519 } 00520 veri4=0; 00521 00522 lcd.cls(); 00523 lcd.locate(0,0); 00524 lcd.printf("Coloque la ficha"); 00525 cont++; 00526 cont++; 00527 sum=0; 00528 while(veri4==0) 00529 { 00530 wait(2); 00531 lec_sen(); 00532 for(i=1;i<=9;i++) 00533 { 00534 sum=sum+l_t[i]; 00535 } 00536 if(sum==cont) 00537 veri4=1; 00538 00539 //pc.printf("%d \n ",sum); 00540 sum=0; 00541 00542 } 00543 00544 for(i=1;i<=9;i++) 00545 { 00546 if(l_t2[i]!= l_t[i]) 00547 { 00548 diferencia=i; 00549 } 00550 } 00551 00552 imprimir=diferencia+ficha; 00553 pc.printf("%d\n",imprimir); 00554 imprimir=0; 00555 00556 /* 00557 for(i=1;i<=9;i++) 00558 { 00559 00560 if(l_t[i]==1) 00561 { 00562 imprimir=i+ficha; 00563 pc.printf("%d \n ",imprimir); 00564 imprimir=0; 00565 } 00566 } 00567 00568 */ 00569 veri4=0; 00570 00571 00572 } 00573 }
Generated on Sat Jul 23 2022 09:39:52 by
1.7.2