Mateo Morales
/
Triki_1
Codigo fun
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; } }