Codigo fun
Embed:
(wiki syntax)
Show/hide line numbers
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