Mateo Morales / Mbed 2 deprecated Triki_1

Dependencies:   mbed TextLCD

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }