Codigo fun

Dependencies:   mbed TextLCD

Revision:
0:e54d04f84276
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Nov 13 22:27:51 2019 +0000
@@ -0,0 +1,573 @@
+#include "mbed.h"
+#include "PwmOut.h"
+#include "TextLCD.h"
+
+
+
+float tiempo = 1;
+
+
+// final de carrera 
+DigitalIn finaly(PC_10);
+DigitalIn finalx(PC_11);
+float fcy,fcx;
+
+
+//Serial 
+Serial pc(SERIAL_TX, SERIAL_RX); 
+
+//Servo
+PwmOut servo (A1);
+
+//LCD
+TextLCD lcd(PA_7, PA_6, PA_8, PB_6, PC_7, PA_9, TextLCD::LCD16x2); // rs, e, d4-d7
+
+//Variables Sensores
+DigitalIn x0(PC_0);// elegir pieza
+DigitalIn o0(PC_3);
+
+float lec_x;
+float lec_o;
+
+DigitalIn x1(PC_9);// columna x
+DigitalIn x2(PB_8);
+DigitalIn x3(PA_0);
+DigitalIn x4(PH_1);
+
+int l_x1,l_x2,l_x3,l_x4;
+int l_x[5];
+
+DigitalIn o1(PA_4);// columna o
+DigitalIn o2(PB_0);
+DigitalIn o3(PC_2);
+DigitalIn o4(PC_1);
+
+int l_o1,l_o2,l_o3,l_o4;
+int l_o[5];
+
+DigitalIn t1(PB_14);// triki
+DigitalIn t2(PB_2);
+DigitalIn t3(PA_12);
+DigitalIn t4(PB_13);
+DigitalIn t5(PB_1);
+DigitalIn t6(PA_11);
+DigitalIn t7(PC_4);
+DigitalIn t8(PB_15);
+DigitalIn t9(PB_12);
+
+
+//int l_t1,l_t2,l_t3,l_t4,l_t5,l_t6,l_t7,l_t8,l_t9;
+int l_t[10];
+int l_t2[10];
+
+// botones 
+DigitalIn boton1(PC_8);
+DigitalIn boton2(PC_6);
+
+float b1,b2;
+
+
+// electroiman 
+
+DigitalOut electro_i(PC_12);
+
+
+
+// movimiento motores
+
+DigitalOut dir_x(D5);
+DigitalOut step_x(D2);
+
+DigitalOut dir_y(D6);
+DigitalOut step_y(D3);
+
+
+// variables utilizables
+int veri,veri2,veri3,veri4;
+int i;
+int sum,ficha;
+int anti;
+int cont;
+int letra=0;
+int diferencia;
+
+
+// posiciones
+// ubicacion fichas 
+int x[9]={0,0,0,0,0,279,279,279,279};
+int y[9]={0,397,733,1040,1374,397,733,1040,1374};
+
+// Ubicaciones de triki 
+int x_t[10]={0,628,940,1258,628,940,1258,628,940,1258};
+int y_t[10]={0,590,590,590,905,905,905,1194,1194,1194};
+
+
+
+
+void origen (void);
+void adelante(void);
+void atras(void);
+void derecha (void);
+void izquierda(void);
+void lec_sen(void);
+void coger(void);
+void dejar(void);
+void ir_tomar(void);
+void ir_dejar(void);
+
+////////////////////////////////////////////
+void ir_dejar (void)
+{
+    
+int pos;
+           
+     pos=letra;
+     for(i=1;i<=x_t[pos];i++)
+     {
+      derecha();      
+     }
+     
+     for(i=1;i<=y_t[pos];i++)
+     {
+      adelante();      
+     }
+     dejar();
+     origen();   
+}
+
+
+
+
+void ir_tomar(void)
+{
+    
+int libre;
+int agrega;
+int pos;
+     
+    if(ficha==20)
+    {
+        lec_sen();
+        for(i=1;i<=4;i++)
+        {
+         if(l_x[i]==1)
+         {  
+           libre=i;
+           i=50;
+           agrega=4;
+         }   
+        }
+    }
+    
+    if(ficha==10)
+    {
+        lec_sen();
+        for(i=1;i<=4;i++)
+        {
+         if(l_o[i]==1)
+         {  
+           libre=i;
+           i=50;
+           agrega=0;
+         }   
+        }
+    }
+    
+    pos=libre+agrega;
+     for(i=1;i<=x[pos];i++)
+     {
+      derecha();      
+     }
+     
+     for(i=1;i<=y[pos];i++)
+     {
+      adelante();      
+     }
+     coger();
+     origen();
+    
+}
+//////////////////////////////////////////////////////Lectura sensores todos
+void coger(void)
+{
+  servo.pulsewidth_us(1220); // es constante    
+  electro_i=1;
+  wait(1);
+  servo.pulsewidth_us(640); // es constante       
+  wait(1);
+
+}
+void dejar (void)
+{
+  servo.pulsewidth_us(1220); // es constante    
+  wait(1);
+   electro_i=0; 
+  servo.pulsewidth_us(640); // es constante 
+    wait(1);
+
+}    
+void lec_sen(void)
+{
+ lec_x = !x0.read();//Elegir ficha
+ lec_o = !o0.read();
+ 
+  //pc.printf("%f    ",lec_x);
+  //pc.printf("%f   \n ",lec_o);
+ 
+ b1=boton1.read();// botones
+ b2=boton2.read();
+ 
+ //pc.printf("%f    ",b1);
+ //pc.printf("%f   \n ",b2);
+ 
+  l_o[1] = !o1.read();
+  l_o[2] = !o2.read();
+  l_o[3] = !o3.read();
+  l_o[4] = !o4.read();
+  
+  
+  
+  l_x[1] = !x1.read(); 
+  l_x[2] = !x2.read();
+  l_x[3] = !x3.read();
+  l_x[4] = !x4.read();  
+  
+  
+  l_t[1] = !t1.read();
+  l_t[2] = !t2.read();  
+  l_t[3] = !t3.read();  
+  l_t[4] = !t4.read();  
+  l_t[5] = !t5.read();
+  l_t[6] = !t6.read();
+  l_t[7] = !t7.read();
+  l_t[8] = !t8.read();
+  l_t[9] = !t9.read();
+ /*
+  pc.printf("%d    ",l_o[1]);
+  pc.printf("%d    ",l_o[2]);
+  pc.printf("%d    ",l_o[3]);
+  pc.printf("%d    \n",l_o[4]);  
+
+  pc.printf("%d    ",l_x[1]);
+  pc.printf("%d    ",l_x[2]);
+  pc.printf("%d    ",l_x[3]);
+  pc.printf("%d    \n \n",l_x[4]);
+  
+   
+  pc.printf("%d    ",l_t[1]);
+  pc.printf("%d    ",l_t[2]);
+  pc.printf("%d    \n",l_t[3]);
+  pc.printf("%d    ",l_t[4]);
+  pc.printf("%d    ",l_t[5]);
+  pc.printf("%d    \n",l_t[6]);
+  pc.printf("%d    ",l_t[7]);
+  pc.printf("%d    ",l_t[8]);
+  pc.printf("%d    \n\n\n",l_t[9]);
+   
+  */
+    
+  
+}
+/////////////////////////////////////////////////////adelante
+void adelante (void)
+{
+  dir_y=0;
+  step_y=1;
+  wait_ms(tiempo);
+  step_y=0;
+  wait_ms(tiempo);   
+}
+/////////////////////////////////////////////////////atras
+void atras (void)
+{
+  dir_y=1;
+  step_y=1;
+  wait_ms(tiempo);
+  step_y=0;
+  wait_ms(tiempo);   
+}
+/////////////////////////////////////////////////////Deerecha
+
+void derecha (void)
+{
+  dir_x=1;
+  step_x=1;
+  wait_ms(tiempo);
+  step_x=0;
+  wait_ms(tiempo);   
+}
+/////////////////////////////////////////////////////izquierda
+
+void izquierda (void)
+{
+  dir_x=0;
+  step_x=1;
+  wait_ms(tiempo);
+  step_x=0;
+  wait_ms(tiempo);   
+}
+/////////////////////////////////////////////////////origen
+void origen (void)
+{  
+
+while(veri==0)
+{
+   fcy = finaly.read();
+   fcx = finalx.read();
+
+//  pc.printf("%f    ",fcx);
+//  pc.printf("%f   \n ",fcy);  
+
+if(fcy==0)
+atras();
+
+if(fcx==0)
+izquierda();    
+
+if(fcx==1 && fcy==1)
+veri=1;
+
+}    
+veri=0;
+}
+
+////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////// main////////////////
+///////////////////////////////////////////////////////////////////////////
+
+int main() {
+ /*  
+ while(1)
+ {
+ lec_sen();   
+ wait(0.5);   
+ } 
+ */
+int imprimir;
+int no;  
+servo.period_ms(20); // es constante 
+ 
+ // inicializa todo
+ lcd.cls();
+ lcd.locate(0,0);
+ lcd.printf(" Inicializando"); 
+ servo.pulsewidth_us(640); // es constante 
+ origen();
+ lcd.cls();
+ lcd.locate(0,0);
+ lcd.printf("Elija X o O");
+
+
+ while(veri2==0)
+ {
+  lec_sen();
+  
+  // sabe si todas las fichas estan ubicadas
+   for(i=0;i<=4;i++)
+   {
+    sum=sum+l_o[i]+l_x[i];
+    
+   }
+   
+   // si no estan todas marca error
+   if(sum <8 && anti==0)
+    {
+      lcd.cls();
+      lcd.locate(0,0);
+      lcd.printf(" Error");
+      anti=1;
+      no=1; 
+    }
+    // si estan todas elija x o 0
+    if(sum>=8 && anti==1)
+    {
+      lcd.cls();
+      lcd.locate(0,0);
+      lcd.printf("Elija X o O");
+      anti=0;         
+      no=0;
+    }
+   sum=0;
+
+
+// se determina q ficha se eligio 
+  if(lec_x ==0 && no==0)
+  {   
+      lcd.cls();
+      lcd.locate(0,0);
+      lcd.printf(" Ficha: O");         
+    
+      ficha=20;
+      veri2=1;
+   }
+   
+  if(lec_o ==0 && no==0)
+  {
+      
+      lcd.cls();
+      lcd.locate(0,0);
+      lcd.printf(" Ficha: x");         
+    
+      ficha=10;
+      veri2=1;
+   }        
+   wait(0.6);
+
+ }
+ // hasta aca solo se sabe con q ficha comienza 
+ // se inicia todo y se espera 1 seg
+ sum=0;
+ wait(1);
+ cont++;
+ 
+lcd.cls();
+lcd.locate(0,0);
+lcd.printf("Coloque la ficha");      
+ 
+ while(veri3==0)
+ {
+  wait(2);
+  lec_sen();
+  for(i=1;i<=9;i++)
+  {
+   sum=sum+l_t[i];// suma todo el triki para saber si hay fichas
+  }  
+  if(sum==1)
+  veri3=1;
+  //pc.printf("%d   \n ",sum); 
+  sum=0;
+ 
+ }    
+ for(i=1;i<=9;i++)
+ {
+   if(l_t[i]==1)
+   {
+   imprimir=i+ficha;
+   pc.printf("%d\n ",imprimir);
+   imprimir=0;
+   }
+ }
+ // busca y envia el dato con la ficha guardada
+///////////////////////////////////////////////////////////////////////////comienza*********************************************************
+while(1)
+{
+sum=0;
+int l_oc[5];
+int l_xc[5];
+
+lcd.cls();
+lcd.locate(0,0);
+lcd.printf("Turno de pc");
+     
+          letra = pc.getc();
+          
+          for(i=0;i<=9;i++)
+          l_t2[i]=l_t[i];
+          
+          
+          
+     while(letra<49 && letra>57)
+     {
+     letra = pc.getc();
+     //pc.printf("%d   \n ",letra);
+     //lcd.locate(0,1);
+     //char a=letra;
+     //lcd.printf(a);
+     }  
+     letra=letra-48;// pasar a decimal 
+     ir_tomar();
+     wait(1);
+     ir_dejar();
+    
+    lcd.locate(0,0);
+    lcd.printf(" Su turno "); 
+  l_oc[1] = !o1.read();
+  l_oc[2] = !o2.read();
+  l_oc[3] = !o3.read();
+  l_oc[4] = !o4.read();
+  
+  
+  
+  l_xc[1] = !x1.read(); 
+  l_xc[2] = !x2.read();
+  l_xc[3] = !x3.read();
+  l_xc[4] = !x4.read(); 
+     
+    while(veri4==0)
+    {
+        lec_sen();
+        if(ficha==20)// determina si es x o 0
+        {
+           for(i=1;i<=4;i++)
+           {
+                if(l_oc[i] != l_o[i])
+                {
+                 veri4=1;   
+                }   
+           }           
+        }
+        if(ficha==10)// determina si es x o 0
+        {
+           for(i=1;i<=4;i++)
+           {
+                if(l_xc[i] != l_x[i])
+                {
+                 veri4=1;   
+                }   
+           }           
+        }
+    }
+    veri4=0;
+    
+lcd.cls();
+lcd.locate(0,0);
+lcd.printf("Coloque la ficha");  
+cont++;
+cont++;
+sum=0;
+ while(veri4==0)
+ {
+  wait(2);
+  lec_sen();
+  for(i=1;i<=9;i++)
+  {
+   sum=sum+l_t[i];
+  }  
+  if(sum==cont)
+  veri4=1;
+  
+  //pc.printf("%d   \n ",sum); 
+  sum=0;
+ 
+ }
+ 
+ for(i=1;i<=9;i++)
+ {
+    if(l_t2[i]!= l_t[i])
+    {
+        diferencia=i;
+    }   
+ }
+    
+   imprimir=diferencia+ficha;
+   pc.printf("%d\n",imprimir);
+   imprimir=0;
+    
+/*     
+ for(i=1;i<=9;i++)
+ {
+   
+   if(l_t[i]==1)
+   {
+   imprimir=i+ficha;
+   pc.printf("%d   \n ",imprimir);
+   imprimir=0;
+   }
+ }
+ 
+ */
+ veri4=0;
+    
+ 
+}
+}
\ No newline at end of file