Mateo Morales
/
Triki_1
Codigo fun
Diff: main.cpp
- 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