Codigo fun

Dependencies:   mbed TextLCD

main.cpp

Committer:
Mateom0104
Date:
2019-11-13
Revision:
0:e54d04f84276

File content as of revision 0:e54d04f84276:

#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;
    
 
}
}