Brahian Stiv Sanchez Giraldo / Mbed 2 deprecated tetrispon

Dependencies:   mbed

Committer:
cristianvillarraga
Date:
Fri Nov 16 13:27:25 2018 +0000
Revision:
0:b09782a64039
Child:
1:ebfb091d5b63
Juegode tetris y pingpong con interfaz;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cristianvillarraga 0:b09782a64039 1 #include "mbed.h"//biblioteca por defecto
cristianvillarraga 0:b09782a64039 2 #include "algo.h"//biblioteca creada que contiene las figuras del juego de tetris
cristianvillarraga 0:b09782a64039 3 #define MAXDAT 3
cristianvillarraga 0:b09782a64039 4 Ticker anal;
cristianvillarraga 0:b09782a64039 5 AnalogIn vrx(A0);//puertos de entrada para lectura del joystick
cristianvillarraga 0:b09782a64039 6 AnalogIn vry(A1);//puertos de entrada para lectura del joystick
cristianvillarraga 0:b09782a64039 7 SPI deviceM(PB_15, PB_14, PB_13);//puertos usados para conectar la matriz
cristianvillarraga 0:b09782a64039 8 DigitalOut ssel (PB_12);//puertos usados para conectar la matriz
cristianvillarraga 0:b09782a64039 9 Serial pc(USBTX,USBRX);//conexion por puerto USB
cristianvillarraga 0:b09782a64039 10
cristianvillarraga 0:b09782a64039 11 int j=1,op;//variable puntero
cristianvillarraga 0:b09782a64039 12 double a=0.4;// variable que representa la velocidad del juego
cristianvillarraga 0:b09782a64039 13 int dir=0; //movimiento de la pelota: 0=derecha,1=izquierda
cristianvillarraga 0:b09782a64039 14 int up=0; //movimiento de la pelota: 0=arriba,1=abajo
cristianvillarraga 0:b09782a64039 15 uint8_t FIG_J[6]={0x22,0x22,0xe2,0xa2,0xe7,0x0};//arreglo que contiene las iniciales T y P (iniciales de tetris y pin pon)
cristianvillarraga 0:b09782a64039 16 uint8_t FIG_U[8]={0xe7,0xa5,0xa7,0xa1,0xe7,0x0,0x0,0x0};//arreglo de 8 posiciones que contiene las iniciales de game over
cristianvillarraga 0:b09782a64039 17 uint8_t FIG_P[8]={0x38,0x10,0x0,0x0,0x0,0x0,0x0,0x0};//arreglo de 8 posiciones que contiene la barra y la pelota, cada bit representa los 8 leds de cada columna, ya el dexplazamiento de bit a bit representa los leds de las filas
cristianvillarraga 0:b09782a64039 18 float mx;//variable donde se guarda los voltajes leidos
cristianvillarraga 0:b09782a64039 19 float msx;//variable donde se escalan los voltajes leidos
cristianvillarraga 0:b09782a64039 20 float my;//variable donde se guarda los voltajes leidos
cristianvillarraga 0:b09782a64039 21 float msy;//variable donde se escalan los voltajes leidos
cristianvillarraga 0:b09782a64039 22 void inicio();
cristianvillarraga 0:b09782a64039 23 void mostrar();
cristianvillarraga 0:b09782a64039 24 void mostrarg();
cristianvillarraga 0:b09782a64039 25 void mostrarj();
cristianvillarraga 0:b09782a64039 26 void borrar();
cristianvillarraga 0:b09782a64039 27 void barra();
cristianvillarraga 0:b09782a64039 28 void barra_ini();
cristianvillarraga 0:b09782a64039 29 void inicio();
cristianvillarraga 0:b09782a64039 30 uint8_t mat_act[11]={0,0,0,0,0,0,0,0,0,0,0}; //Matriz para mostrar en pantalla.
cristianvillarraga 0:b09782a64039 31 uint8_t mat_tmp[8]={0,0,0,0,0,0,0,0};
cristianvillarraga 0:b09782a64039 32 uint8_t mat_tmp1[8]={0,0,0,0,0,0,0,0}; //Matriz temporal de las fichas.
cristianvillarraga 0:b09782a64039 33 uint8_t dat[MAXDAT]={0,0,0};
cristianvillarraga 0:b09782a64039 34 uint8_t fila=0,save=0,i=0,cont=0,mcol=0,num=0,grad=0;
cristianvillarraga 0:b09782a64039 35
cristianvillarraga 0:b09782a64039 36 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
cristianvillarraga 0:b09782a64039 37
cristianvillarraga 0:b09782a64039 38 //FUNCIONES EN COMUN
cristianvillarraga 0:b09782a64039 39
cristianvillarraga 0:b09782a64039 40 void sendSPI(uint8_t d1, uint8_t d2)//envia datos a la tarjeta, cierra y abre puertos
cristianvillarraga 0:b09782a64039 41 {
cristianvillarraga 0:b09782a64039 42 deviceM.unlock();
cristianvillarraga 0:b09782a64039 43 ssel=0;
cristianvillarraga 0:b09782a64039 44 deviceM.write(d1);
cristianvillarraga 0:b09782a64039 45 deviceM.write(d2);
cristianvillarraga 0:b09782a64039 46 ssel=1;
cristianvillarraga 0:b09782a64039 47 deviceM.lock();
cristianvillarraga 0:b09782a64039 48 }
cristianvillarraga 0:b09782a64039 49
cristianvillarraga 0:b09782a64039 50 void test() //Test
cristianvillarraga 0:b09782a64039 51 {
cristianvillarraga 0:b09782a64039 52 sendSPI(0x09,0); //No decodificacion
cristianvillarraga 0:b09782a64039 53 sendSPI(0x0B,0x07); //Usa 8 leds
cristianvillarraga 0:b09782a64039 54 sendSPI(0x0C,1); //No se apaga
cristianvillarraga 0:b09782a64039 55 sendSPI(0x0A,0x0);
cristianvillarraga 0:b09782a64039 56 for (int i=0;i<2;i++)
cristianvillarraga 0:b09782a64039 57 {
cristianvillarraga 0:b09782a64039 58 sendSPI(0x0F,1);
cristianvillarraga 0:b09782a64039 59 wait (0.1);
cristianvillarraga 0:b09782a64039 60 sendSPI(0x0f,0);
cristianvillarraga 0:b09782a64039 61 wait (0.1);
cristianvillarraga 0:b09782a64039 62 }
cristianvillarraga 0:b09782a64039 63
cristianvillarraga 0:b09782a64039 64 }
cristianvillarraga 0:b09782a64039 65 void borrar() //borra toda la matriz;
cristianvillarraga 0:b09782a64039 66 {
cristianvillarraga 0:b09782a64039 67 for(int i=0;i<=8;i++)//contador para recorrer posiciones
cristianvillarraga 0:b09782a64039 68 {
cristianvillarraga 0:b09782a64039 69 sendSPI(0x0+i,0x00);//recorre bit por bit colocando solo 0
cristianvillarraga 0:b09782a64039 70 }
cristianvillarraga 0:b09782a64039 71 }
cristianvillarraga 0:b09782a64039 72
cristianvillarraga 0:b09782a64039 73 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
cristianvillarraga 0:b09782a64039 74
cristianvillarraga 0:b09782a64039 75 //FUNCIONES PIN PON
cristianvillarraga 0:b09782a64039 76
cristianvillarraga 0:b09782a64039 77 void analogo()//lee los voltajes generados por el joystick, los escala, e imprime dicho valor
cristianvillarraga 0:b09782a64039 78 {
cristianvillarraga 0:b09782a64039 79 mx=vrx.read();//lectura del volytaje en el eje x
cristianvillarraga 0:b09782a64039 80 msx=mx;//multiplica por este 3300 con el fin escalar el valor leido
cristianvillarraga 0:b09782a64039 81 my=vry.read();//lectura del voltaje en el eje y
cristianvillarraga 0:b09782a64039 82 msy=my;//multiplica por este 3300 con el fin escalar el valor leido
cristianvillarraga 0:b09782a64039 83 printf("movimiento_x = %f",msx);//imprimir en pantalla los valores leidos
cristianvillarraga 0:b09782a64039 84 printf("movimiento_y = %f",msy);//imprimir en pantalla los valores leidos
cristianvillarraga 0:b09782a64039 85 }
cristianvillarraga 0:b09782a64039 86
cristianvillarraga 0:b09782a64039 87 void barra()//desplaza la barra de lado a lado segun los movimientos en el joystick
cristianvillarraga 0:b09782a64039 88 {
cristianvillarraga 0:b09782a64039 89 if(msx<0.2)//condicion segun la lectura del voltaje
cristianvillarraga 0:b09782a64039 90 {
cristianvillarraga 0:b09782a64039 91 int temp1 = FIG_P[0]&(0x80);//se crea una variable temporal con el fin de alojar alli el resultado la operacion logica AND, con el fin de identificar si el bit mas significativo es 1 y asi limitar el dezplazamiento de la barra
cristianvillarraga 0:b09782a64039 92 if(temp1==0)//condicion segun el resultado de la operacion
cristianvillarraga 0:b09782a64039 93 {
cristianvillarraga 0:b09782a64039 94 FIG_P[0]=FIG_P[0]<<1; //dezplazamiento hacia la izquierda en la matriz
cristianvillarraga 0:b09782a64039 95 }
cristianvillarraga 0:b09782a64039 96 }
cristianvillarraga 0:b09782a64039 97 else if(msx>0.7)//condicion segun la lectura del voltaje
cristianvillarraga 0:b09782a64039 98 {
cristianvillarraga 0:b09782a64039 99 int temp1 = FIG_P[0]&(0x01);//se crea una variable temporal con el fin de alojar alli el resultado la operacion logica AND, con el fin de identificar si el bit menos significativo es 1 y asi limitar el dezplazamiento de la barra
cristianvillarraga 0:b09782a64039 100 if(temp1==0)//condicion segun el resultado de la operacion
cristianvillarraga 0:b09782a64039 101 {
cristianvillarraga 0:b09782a64039 102 FIG_P[0]=FIG_P[0]>>1; //dezplazamiento hacia la derecha en la matriz
cristianvillarraga 0:b09782a64039 103 }
cristianvillarraga 0:b09782a64039 104 }
cristianvillarraga 0:b09782a64039 105
cristianvillarraga 0:b09782a64039 106 }
cristianvillarraga 0:b09782a64039 107
cristianvillarraga 0:b09782a64039 108 void barra_ini()//inicialmente se muestra la barra y la pelota, para que se dezplacen al tiempo antes de iniciar el juego
cristianvillarraga 0:b09782a64039 109 {
cristianvillarraga 0:b09782a64039 110 if(msx<0.3)//condicion segun la lectura del voltaje
cristianvillarraga 0:b09782a64039 111 {
cristianvillarraga 0:b09782a64039 112 int temp1 = FIG_P[0]&(0x80);//se crea una variable temporal con el fin de alojar alli el resultado la operacion logica AND, con el fin de identificar si el bit mas significativo es 1 y asi limitar el dezplazamiento de la barra
cristianvillarraga 0:b09782a64039 113 if(temp1==0)//condicion segun el resultado de la operacion
cristianvillarraga 0:b09782a64039 114 {
cristianvillarraga 0:b09782a64039 115 FIG_P[0]=FIG_P[0]<<1;
cristianvillarraga 0:b09782a64039 116 FIG_P[1]=FIG_P[1]<<1;//desplaza hacia la izquierda al tiempo de la barra y la pelota antes de comenzar el juego
cristianvillarraga 0:b09782a64039 117
cristianvillarraga 0:b09782a64039 118 }
cristianvillarraga 0:b09782a64039 119 }
cristianvillarraga 0:b09782a64039 120 else if(msx>0.7)//condicion segun la lectura del voltaje
cristianvillarraga 0:b09782a64039 121 {
cristianvillarraga 0:b09782a64039 122 int temp1 = FIG_P[0]&(0x01);//se crea una variable temporal con el fin de alojar alli el resultado la operacion logica AND, con el fin de identificar si el bit menos significativo es 1 y asi limitar el dezplazamiento de la barra
cristianvillarraga 0:b09782a64039 123 if(temp1==0)//condicion segun el resultado de la operacion
cristianvillarraga 0:b09782a64039 124 {
cristianvillarraga 0:b09782a64039 125 FIG_P[0]=FIG_P[0]>>1;
cristianvillarraga 0:b09782a64039 126 FIG_P[1]=FIG_P[1]>>1; //desplaza hacia la derecha al tiempo de la barra y la pelota antes de comenzar el juego
cristianvillarraga 0:b09782a64039 127
cristianvillarraga 0:b09782a64039 128 }
cristianvillarraga 0:b09782a64039 129 }
cristianvillarraga 0:b09782a64039 130
cristianvillarraga 0:b09782a64039 131 }
cristianvillarraga 0:b09782a64039 132
cristianvillarraga 0:b09782a64039 133 void move_fig()//mueve la palota por toda la matriz, y limita sus desplazamientos con cambios de direccion simulando un rebote contra paredes
cristianvillarraga 0:b09782a64039 134 {
cristianvillarraga 0:b09782a64039 135 barra();//llamado a la funcion barra para poder dezplazar mientras la pelota se mueve
cristianvillarraga 0:b09782a64039 136 if(dir==0) //condicional para el valor de la variable que controla el desplazamiento hacia los lados de la pelota
cristianvillarraga 0:b09782a64039 137 {
cristianvillarraga 0:b09782a64039 138 if (up==0)//condicional para el valor de la variable que controla el desplazamiento hacia arriba y abajo de la pelota
cristianvillarraga 0:b09782a64039 139 {
cristianvillarraga 0:b09782a64039 140 FIG_P[j+1] = FIG_P[j]>>1;//desplazamiento diagonal derecha ascendente de la pelota
cristianvillarraga 0:b09782a64039 141 FIG_P[j] = 0x00;//elimina el paso de la pelota, de lo contrario dejaria los leds encendidos a medida que se desplaza
cristianvillarraga 0:b09782a64039 142 }
cristianvillarraga 0:b09782a64039 143 else//condicional para el valor de la variable que controla el desplazamiento hacia arriba y abajo de la pelota
cristianvillarraga 0:b09782a64039 144 {
cristianvillarraga 0:b09782a64039 145 FIG_P[j+1] = FIG_P[j+2]>>1;//desplazamiento diagonal derecha descendente de la pelota
cristianvillarraga 0:b09782a64039 146 FIG_P[j+2] = 0x00;//elimina el paso de la pelota, de lo contrario dejaria los leds encendidos a medida que se desplaza
cristianvillarraga 0:b09782a64039 147 }
cristianvillarraga 0:b09782a64039 148
cristianvillarraga 0:b09782a64039 149 }
cristianvillarraga 0:b09782a64039 150 else //condicional para el valor de la variable que controla el desplazamiento hacia los lados de la pelota
cristianvillarraga 0:b09782a64039 151 {
cristianvillarraga 0:b09782a64039 152 if(up==0)//condicional para el valor de la variable que controla el desplazamiento hacia arriba y abajo de la pelota
cristianvillarraga 0:b09782a64039 153 {
cristianvillarraga 0:b09782a64039 154 FIG_P[j+1] = FIG_P[j]<<1;//desplazamiento diagonal izquierda ascendente de la pelota
cristianvillarraga 0:b09782a64039 155 FIG_P[j] = 0x00;//elimina el paso de la pelota, de lo contrario dejaria los leds encendidos a medida que se desplaza
cristianvillarraga 0:b09782a64039 156 }
cristianvillarraga 0:b09782a64039 157 else//condicional para el valor de la variable que controla el desplazamiento hacia arriba y abajo de la pelota
cristianvillarraga 0:b09782a64039 158 {
cristianvillarraga 0:b09782a64039 159 FIG_P[j+1] = FIG_P[j+2]<<1;//desplazamiento diagonal izquierda descendente de la pelota
cristianvillarraga 0:b09782a64039 160 FIG_P[j+2] = 0x00;//elimina el paso de la pelota, de lo contrario dejaria los leds encendidos a medida que se desplaza
cristianvillarraga 0:b09782a64039 161 }
cristianvillarraga 0:b09782a64039 162
cristianvillarraga 0:b09782a64039 163
cristianvillarraga 0:b09782a64039 164 }
cristianvillarraga 0:b09782a64039 165
cristianvillarraga 0:b09782a64039 166 if(FIG_P[j+1]==0x80)//condiciona a que la pelota llegue al extremo izquierdo de la matriz, justo en el bit mas significativo
cristianvillarraga 0:b09782a64039 167
cristianvillarraga 0:b09782a64039 168 {
cristianvillarraga 0:b09782a64039 169 dir=0;// cambia de direccion hacia la derecha
cristianvillarraga 0:b09782a64039 170
cristianvillarraga 0:b09782a64039 171 }
cristianvillarraga 0:b09782a64039 172 else if(FIG_P[j+1]==0x01)//condiciona a que la pelota llegue al extremo derecho de la matriz, justo en el bit menos significativo
cristianvillarraga 0:b09782a64039 173 {
cristianvillarraga 0:b09782a64039 174 dir=1;// cambia de direccion hacia la izquierda
cristianvillarraga 0:b09782a64039 175 }
cristianvillarraga 0:b09782a64039 176
cristianvillarraga 0:b09782a64039 177 mostrar();//hace un llamado a la funcion mostrar con el fin de estar refrescando los datos a imprimir
cristianvillarraga 0:b09782a64039 178 wait(a);// tiempo de espera para poder visualizar los dezplazamientos
cristianvillarraga 0:b09782a64039 179
cristianvillarraga 0:b09782a64039 180 if(j+1==7)//condiciona a que la pelota llegue hasta la extremo superior de la matriz
cristianvillarraga 0:b09782a64039 181 {
cristianvillarraga 0:b09782a64039 182 up=1;//cambia la direccion de la pelota hacia abajo
cristianvillarraga 0:b09782a64039 183 }
cristianvillarraga 0:b09782a64039 184 else if(j==0)//condiciona a que la pelota llegue hasta la extremo inferior de la matriz
cristianvillarraga 0:b09782a64039 185 {
cristianvillarraga 0:b09782a64039 186 int temp2=FIG_P[j+1]&FIG_P[0];//se crea una variable temporal, para alojar alli el resultado de la operacion logica AND, con el fin de identificar si este aloja un 1 o un 0, de esta forma se sabe si la pelota alcanzo a ser golpeada por la barra
cristianvillarraga 0:b09782a64039 187 if(temp2==0)//condiconal si la variable temproal es igual a 0
cristianvillarraga 0:b09782a64039 188 {
cristianvillarraga 0:b09782a64039 189 FIG_P[j] = 0x00;
cristianvillarraga 0:b09782a64039 190 FIG_P[j+1] = 0x00;//al no ser devuelta la pelota por la barra, tanto como la pelota como la barra son borradas simulando un game over
cristianvillarraga 0:b09782a64039 191 mostrarg();//imprime en la matriz las letras G,O (iniciales de game over) indicando que el juego termino
cristianvillarraga 0:b09782a64039 192 wait(3);//tiempo en el que duran las letras en pantalla
cristianvillarraga 0:b09782a64039 193 borrar();//borra contenido actual en la matriz
cristianvillarraga 0:b09782a64039 194
cristianvillarraga 0:b09782a64039 195 }
cristianvillarraga 0:b09782a64039 196 up=0;// la pelota al ser golpeada por la barra subira de nuevo
cristianvillarraga 0:b09782a64039 197 a=a/1.5;//reduce a la mitad el tiempo de espera, cada vez que la barra devuelve la pelota, aumenta la velocidad de dezplazamiento, es decir la velocidad del juego aumenta
cristianvillarraga 0:b09782a64039 198 }
cristianvillarraga 0:b09782a64039 199 }
cristianvillarraga 0:b09782a64039 200
cristianvillarraga 0:b09782a64039 201 void mostrar()//imprime en la matriz la barra y la pelota contenidas en el arreglo
cristianvillarraga 0:b09782a64039 202 {
cristianvillarraga 0:b09782a64039 203 for(int i=0; i<8; i++)//contador para recorrer posiciones
cristianvillarraga 0:b09782a64039 204 {
cristianvillarraga 0:b09782a64039 205 sendSPI(i+1, FIG_P[i]);//avanza de 1 en 1 para recorrer todas las posiciones del arreglo e irlas mostrando
cristianvillarraga 0:b09782a64039 206 }
cristianvillarraga 0:b09782a64039 207 }
cristianvillarraga 0:b09782a64039 208
cristianvillarraga 0:b09782a64039 209 void mostrarg()//imprime en la matriz la barra y la pelota contenidas en el arreglo
cristianvillarraga 0:b09782a64039 210 {
cristianvillarraga 0:b09782a64039 211 for(int i=0; i<8; i++)//contador para recorrer posciones
cristianvillarraga 0:b09782a64039 212 {
cristianvillarraga 0:b09782a64039 213 sendSPI(i+1, FIG_U[i]);//avanza de 1 en 1 para recorrer todas las posiciones del arreglo e irlas mostrando
cristianvillarraga 0:b09782a64039 214 }
cristianvillarraga 0:b09782a64039 215 }
cristianvillarraga 0:b09782a64039 216 void mostrarj()//imprime en la matriz la barra y la pelota contenidas en el arreglo
cristianvillarraga 0:b09782a64039 217 {
cristianvillarraga 0:b09782a64039 218 for(int i=0; i<6; i++)//contador para recorrer posciones
cristianvillarraga 0:b09782a64039 219 {
cristianvillarraga 0:b09782a64039 220 sendSPI(i+1, FIG_J[i]);//avanza de 1 en 1 para recorrer todas las posiciones del arreglo e irlas mostrando
cristianvillarraga 0:b09782a64039 221 }
cristianvillarraga 0:b09782a64039 222 }
cristianvillarraga 0:b09782a64039 223
cristianvillarraga 0:b09782a64039 224 void inicio()//antes de comenzar el juego se hace una letura de voltaje en y del joystick, con el fin de lanzar la pelota e iniciar, ahora bien segun el desplazamiento que se haga de la barra con el joystick, la pelota tomara un direccion diferente de lanzamiento
cristianvillarraga 0:b09782a64039 225 {
cristianvillarraga 0:b09782a64039 226 analogo(); //se hace una llamada a la funcion analogo para hace las respectivas lecturas de voltaje
cristianvillarraga 0:b09782a64039 227 while(msy>0.7)//concional para el voltaje en y
cristianvillarraga 0:b09782a64039 228 {
cristianvillarraga 0:b09782a64039 229 analogo();//llamado a funcion analogo para leer voltajes
cristianvillarraga 0:b09782a64039 230 barra_ini();//llamado a funcion barra_ini para que haga los desplazamientos laterales junto a la pelota
cristianvillarraga 0:b09782a64039 231 mostrar();//llamado a funcion mostrar imprime el arreglo que contiene la barra y la pelota
cristianvillarraga 0:b09782a64039 232 if(msx<0.3)//condiciona segun voltaje en x
cristianvillarraga 0:b09782a64039 233 {
cristianvillarraga 0:b09782a64039 234 dir=1;//lanza la pelota inicialmente hacia la izquierda
cristianvillarraga 0:b09782a64039 235 }
cristianvillarraga 0:b09782a64039 236 else if (msx>0.7)//condiciona segun voltaje en x
cristianvillarraga 0:b09782a64039 237 {
cristianvillarraga 0:b09782a64039 238 dir=0;//lanza la pelota inicialmente hacia la derecha
cristianvillarraga 0:b09782a64039 239 }
cristianvillarraga 0:b09782a64039 240 }
cristianvillarraga 0:b09782a64039 241
cristianvillarraga 0:b09782a64039 242
cristianvillarraga 0:b09782a64039 243 }
cristianvillarraga 0:b09782a64039 244 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
cristianvillarraga 0:b09782a64039 245
cristianvillarraga 0:b09782a64039 246 //FUNCIONES MATRIZ
cristianvillarraga 0:b09782a64039 247
cristianvillarraga 0:b09782a64039 248
cristianvillarraga 0:b09782a64039 249 void imp_mat(uint8_t *temp)// Hace el desplazamiento hacia abajo de la figura
cristianvillarraga 0:b09782a64039 250 {
cristianvillarraga 0:b09782a64039 251 sendSPI(cont-3,mat_act[cont-3]);
cristianvillarraga 0:b09782a64039 252 sendSPI(cont-2,(*(temp+0) | mat_act[cont-2]));
cristianvillarraga 0:b09782a64039 253 sendSPI(cont-1,(*(temp+1) | mat_act[cont-1]));
cristianvillarraga 0:b09782a64039 254 sendSPI(cont,(*(temp+2) | mat_act[cont]));
cristianvillarraga 0:b09782a64039 255 }
cristianvillarraga 0:b09782a64039 256 uint32_t read_command() //ingresa "<",">" y define el tamaño del vector "dat"
cristianvillarraga 0:b09782a64039 257 {
cristianvillarraga 0:b09782a64039 258 char intc=pc.getc();
cristianvillarraga 0:b09782a64039 259 while(intc != '<')
cristianvillarraga 0:b09782a64039 260 intc=pc.getc();
cristianvillarraga 0:b09782a64039 261 for (int i =0;i<MAXDAT;i++)
cristianvillarraga 0:b09782a64039 262 dat[i]=pc.getc();
cristianvillarraga 0:b09782a64039 263 intc=pc.getc();
cristianvillarraga 0:b09782a64039 264 if(intc != '>'){
cristianvillarraga 0:b09782a64039 265 return 0;
cristianvillarraga 0:b09782a64039 266 }
cristianvillarraga 0:b09782a64039 267 return 1;
cristianvillarraga 0:b09782a64039 268 }
cristianvillarraga 0:b09782a64039 269 void cop_fi (uint8_t* tfig) //Almacena la figura en la matriz temporal
cristianvillarraga 0:b09782a64039 270 {
cristianvillarraga 0:b09782a64039 271 for(i=0;i<8;i++)
cristianvillarraga 0:b09782a64039 272 {
cristianvillarraga 0:b09782a64039 273 mat_tmp[i]=*(tfig+i)>>dat[1]-1;
cristianvillarraga 0:b09782a64039 274
cristianvillarraga 0:b09782a64039 275 }
cristianvillarraga 0:b09782a64039 276 for(i=0;i<8;i++)
cristianvillarraga 0:b09782a64039 277 {
cristianvillarraga 0:b09782a64039 278 mat_tmp1[i]= mat_tmp[i];
cristianvillarraga 0:b09782a64039 279 }
cristianvillarraga 0:b09782a64039 280 }
cristianvillarraga 0:b09782a64039 281 void d_ale()
cristianvillarraga 0:b09782a64039 282 {
cristianvillarraga 0:b09782a64039 283 num=rand()%5+1;
cristianvillarraga 0:b09782a64039 284 mcol=4;
cristianvillarraga 0:b09782a64039 285 }
cristianvillarraga 0:b09782a64039 286 void ingred_d() //Tipo de figuras
cristianvillarraga 0:b09782a64039 287 {
cristianvillarraga 0:b09782a64039 288 uint8_t tf=dat[0];
cristianvillarraga 0:b09782a64039 289
cristianvillarraga 0:b09782a64039 290 switch(tf)
cristianvillarraga 0:b09782a64039 291 {
cristianvillarraga 0:b09782a64039 292 case tipo_c: // Cuadrado
cristianvillarraga 0:b09782a64039 293 cop_fi(FIG_C);
cristianvillarraga 0:b09782a64039 294 break;
cristianvillarraga 0:b09782a64039 295 case tipo_s: //S
cristianvillarraga 0:b09782a64039 296 cop_fi(FIG_S);
cristianvillarraga 0:b09782a64039 297 break;
cristianvillarraga 0:b09782a64039 298 case tipo_t: //T
cristianvillarraga 0:b09782a64039 299 cop_fi(FIG_T);
cristianvillarraga 0:b09782a64039 300 break;
cristianvillarraga 0:b09782a64039 301 case tipo_i: //I
cristianvillarraga 0:b09782a64039 302 cop_fi(FIG_I);
cristianvillarraga 0:b09782a64039 303 break;
cristianvillarraga 0:b09782a64039 304 case tipo_l: //L
cristianvillarraga 0:b09782a64039 305 cop_fi(FIG_L);
cristianvillarraga 0:b09782a64039 306 break;
cristianvillarraga 0:b09782a64039 307
cristianvillarraga 0:b09782a64039 308 }
cristianvillarraga 0:b09782a64039 309 }
cristianvillarraga 0:b09782a64039 310 void analogoo()
cristianvillarraga 0:b09782a64039 311 {
cristianvillarraga 0:b09782a64039 312 mx=vrx.read();
cristianvillarraga 0:b09782a64039 313 msx=mx;
cristianvillarraga 0:b09782a64039 314 my=vry.read();
cristianvillarraga 0:b09782a64039 315 msy=my;
cristianvillarraga 0:b09782a64039 316 printf("Datosx = %f",msx);
cristianvillarraga 0:b09782a64039 317 }
cristianvillarraga 0:b09782a64039 318 void mover_fig()//mueve la figura por medio de botones
cristianvillarraga 0:b09782a64039 319 {
cristianvillarraga 0:b09782a64039 320 analogoo();
cristianvillarraga 0:b09782a64039 321 int mfig;
cristianvillarraga 0:b09782a64039 322
cristianvillarraga 0:b09782a64039 323 if(msy>0.7){
cristianvillarraga 0:b09782a64039 324 mfig=1;}
cristianvillarraga 0:b09782a64039 325 if(msx<0.3){//mover figura a la derecha
cristianvillarraga 0:b09782a64039 326 mfig=2;}
cristianvillarraga 0:b09782a64039 327 if(msx>0.7){//mover figura a la izquierda
cristianvillarraga 0:b09782a64039 328 mfig=3;}
cristianvillarraga 0:b09782a64039 329
cristianvillarraga 0:b09782a64039 330 switch(mfig)
cristianvillarraga 0:b09782a64039 331 {
cristianvillarraga 0:b09782a64039 332 case 1:
cristianvillarraga 0:b09782a64039 333 grad++;
cristianvillarraga 0:b09782a64039 334 if(grad<5){
cristianvillarraga 0:b09782a64039 335
cristianvillarraga 0:b09782a64039 336 switch (grad)
cristianvillarraga 0:b09782a64039 337 {
cristianvillarraga 0:b09782a64039 338 case 1:
cristianvillarraga 0:b09782a64039 339 mat_tmp[0]=mat_tmp1[4];
cristianvillarraga 0:b09782a64039 340 mat_tmp[1]=mat_tmp1[5];
cristianvillarraga 0:b09782a64039 341 mat_tmp[2]=mat_tmp1[6];
cristianvillarraga 0:b09782a64039 342 break;
cristianvillarraga 0:b09782a64039 343 case 2:
cristianvillarraga 0:b09782a64039 344 mat_tmp[0]=mat_tmp1[0];
cristianvillarraga 0:b09782a64039 345 mat_tmp[1]=mat_tmp1[2];
cristianvillarraga 0:b09782a64039 346 mat_tmp[2]=mat_tmp1[1];
cristianvillarraga 0:b09782a64039 347 break;
cristianvillarraga 0:b09782a64039 348 case 3:
cristianvillarraga 0:b09782a64039 349 mat_tmp[0]=mat_tmp1[6];
cristianvillarraga 0:b09782a64039 350 mat_tmp[1]=mat_tmp1[5];
cristianvillarraga 0:b09782a64039 351 mat_tmp[2]=mat_tmp1[4];
cristianvillarraga 0:b09782a64039 352 break;
cristianvillarraga 0:b09782a64039 353 case 4:
cristianvillarraga 0:b09782a64039 354 mat_tmp[0]=mat_tmp1[0];
cristianvillarraga 0:b09782a64039 355 mat_tmp[1]=mat_tmp1[1];
cristianvillarraga 0:b09782a64039 356 mat_tmp[2]=mat_tmp1[2];
cristianvillarraga 0:b09782a64039 357 break;
cristianvillarraga 0:b09782a64039 358 }
cristianvillarraga 0:b09782a64039 359 }
cristianvillarraga 0:b09782a64039 360 if(grad>4){
cristianvillarraga 0:b09782a64039 361 grad=0;
cristianvillarraga 0:b09782a64039 362 }
cristianvillarraga 0:b09782a64039 363 break;
cristianvillarraga 0:b09782a64039 364 case 2:
cristianvillarraga 0:b09782a64039 365 int temp1 = mat_tmp[i]&(0x01);
cristianvillarraga 0:b09782a64039 366 if(temp1==0){
cristianvillarraga 0:b09782a64039 367 for(i=0;i<3;i++)
cristianvillarraga 0:b09782a64039 368 mat_tmp[i]=mat_tmp[i]>>1; //mover derecha
cristianvillarraga 0:b09782a64039 369 //for(i=0;i<7;i++)
cristianvillarraga 0:b09782a64039 370 // mat_tmp1[i]=mat_tmp1[i]>>2;
cristianvillarraga 0:b09782a64039 371 }
cristianvillarraga 0:b09782a64039 372 break;
cristianvillarraga 0:b09782a64039 373 case 3:
cristianvillarraga 0:b09782a64039 374 int temp2 = mat_tmp[i]&(0x80);
cristianvillarraga 0:b09782a64039 375 if(temp2==0)
cristianvillarraga 0:b09782a64039 376 {
cristianvillarraga 0:b09782a64039 377 //for(i=0;i<7;i++){
cristianvillarraga 0:b09782a64039 378 //mat_tmp1[i]=mat_tmp1[i]<<2;
cristianvillarraga 0:b09782a64039 379 // }
cristianvillarraga 0:b09782a64039 380 for(i=0;i<3;i++)
cristianvillarraga 0:b09782a64039 381 {
cristianvillarraga 0:b09782a64039 382 mat_tmp[i]=mat_tmp[i]<<1; //mover izquierda
cristianvillarraga 0:b09782a64039 383 }
cristianvillarraga 0:b09782a64039 384 }
cristianvillarraga 0:b09782a64039 385 break;
cristianvillarraga 0:b09782a64039 386 }
cristianvillarraga 0:b09782a64039 387 }
cristianvillarraga 0:b09782a64039 388 void act_matrix(uint8_t* temp)//Evalua figura guardada y su espacio
cristianvillarraga 0:b09782a64039 389 {
cristianvillarraga 0:b09782a64039 390 for (i=0;i<9;i++){
cristianvillarraga 0:b09782a64039 391 save=*(temp+2)& mat_act[i];
cristianvillarraga 0:b09782a64039 392 if (save==0 )
cristianvillarraga 0:b09782a64039 393 {
cristianvillarraga 0:b09782a64039 394 fila=i+1;
cristianvillarraga 0:b09782a64039 395 }
cristianvillarraga 0:b09782a64039 396 if (save!=0)
cristianvillarraga 0:b09782a64039 397 {
cristianvillarraga 0:b09782a64039 398 fila=i;
cristianvillarraga 0:b09782a64039 399 i=9;
cristianvillarraga 0:b09782a64039 400 }
cristianvillarraga 0:b09782a64039 401 }
cristianvillarraga 0:b09782a64039 402 }
cristianvillarraga 0:b09782a64039 403
cristianvillarraga 0:b09782a64039 404 void guardar_mat(uint8_t *temp)//guarda la matriz
cristianvillarraga 0:b09782a64039 405 {
cristianvillarraga 0:b09782a64039 406 mat_act[fila-3]=(*(temp+0))| mat_act[fila-3];
cristianvillarraga 0:b09782a64039 407 mat_act[fila-2]=(*(temp+1))| mat_act[fila-2];
cristianvillarraga 0:b09782a64039 408 mat_act[fila-1]=(*(temp+2))| mat_act[fila-1];
cristianvillarraga 0:b09782a64039 409 };
cristianvillarraga 0:b09782a64039 410 void elim_lin()
cristianvillarraga 0:b09782a64039 411 {
cristianvillarraga 0:b09782a64039 412 for(i=0;i<9;i++){
cristianvillarraga 0:b09782a64039 413 if(mat_act[i]==255){
cristianvillarraga 0:b09782a64039 414 for(uint8_t a=i;a>=1;a--){
cristianvillarraga 0:b09782a64039 415 sendSPI(a,mat_act[a-1]);
cristianvillarraga 0:b09782a64039 416 mat_act[a]=mat_act[a-1];
cristianvillarraga 0:b09782a64039 417 }
cristianvillarraga 0:b09782a64039 418 }
cristianvillarraga 0:b09782a64039 419 }
cristianvillarraga 0:b09782a64039 420 }
cristianvillarraga 0:b09782a64039 421
cristianvillarraga 0:b09782a64039 422 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
cristianvillarraga 0:b09782a64039 423
cristianvillarraga 0:b09782a64039 424 //FUNCION PRINCIPAL
cristianvillarraga 0:b09782a64039 425
cristianvillarraga 0:b09782a64039 426 int main()
cristianvillarraga 0:b09782a64039 427 {
cristianvillarraga 0:b09782a64039 428 //orden de funciones
cristianvillarraga 0:b09782a64039 429 test();
cristianvillarraga 0:b09782a64039 430 borrar();
cristianvillarraga 0:b09782a64039 431 mostrarj();
cristianvillarraga 0:b09782a64039 432
cristianvillarraga 0:b09782a64039 433 while(1)//ciclo que determina segun lectura de la funcion analogo que caso del swtich tomar, es decir que juego elegir
cristianvillarraga 0:b09782a64039 434 {
cristianvillarraga 0:b09782a64039 435 analogo();//se llama funcion para leer voltaje
cristianvillarraga 0:b09782a64039 436
cristianvillarraga 0:b09782a64039 437 if(msx<0.3)//condicional que lleva al usuario al primer caso, en este caso juego de pin pon
cristianvillarraga 0:b09782a64039 438 {
cristianvillarraga 0:b09782a64039 439 op=1;//contiene las funciones del juego de pin pon
cristianvillarraga 0:b09782a64039 440 }
cristianvillarraga 0:b09782a64039 441 if(msx>0.7)//condicional que lleva al usuario al primer caso, en este caso juego de tetris
cristianvillarraga 0:b09782a64039 442 {
cristianvillarraga 0:b09782a64039 443 op=2;//contiene las funciones del juego de pin pon
cristianvillarraga 0:b09782a64039 444 }
cristianvillarraga 0:b09782a64039 445
cristianvillarraga 0:b09782a64039 446 switch(op)//switch que hace seleccion de juego
cristianvillarraga 0:b09782a64039 447 {
cristianvillarraga 0:b09782a64039 448 case 1: //contenido del juego de pin pon
cristianvillarraga 0:b09782a64039 449
cristianvillarraga 0:b09782a64039 450 borrar();
cristianvillarraga 0:b09782a64039 451 wait(0.2);
cristianvillarraga 0:b09782a64039 452 inicio();
cristianvillarraga 0:b09782a64039 453
cristianvillarraga 0:b09782a64039 454 while(1)//ciclo principal del juego
cristianvillarraga 0:b09782a64039 455 {
cristianvillarraga 0:b09782a64039 456 mostrar();
cristianvillarraga 0:b09782a64039 457 analogo();
cristianvillarraga 0:b09782a64039 458 move_fig();
cristianvillarraga 0:b09782a64039 459 if(up==0)
cristianvillarraga 0:b09782a64039 460 {
cristianvillarraga 0:b09782a64039 461 j++; //la va sumando de a 1 a la variable puntero con el fin de que la pelota ascienda
cristianvillarraga 0:b09782a64039 462 }
cristianvillarraga 0:b09782a64039 463 else
cristianvillarraga 0:b09782a64039 464 {
cristianvillarraga 0:b09782a64039 465 j--;//la va restando de a 1 a la variable puntero con el fin de que la pelota descienda
cristianvillarraga 0:b09782a64039 466 }
cristianvillarraga 0:b09782a64039 467
cristianvillarraga 0:b09782a64039 468 }
cristianvillarraga 0:b09782a64039 469
cristianvillarraga 0:b09782a64039 470 case 2://contenido del juego de tetris
cristianvillarraga 0:b09782a64039 471 borrar();
cristianvillarraga 0:b09782a64039 472 anal.attach(&mover_fig,500);
cristianvillarraga 0:b09782a64039 473 while(1)
cristianvillarraga 0:b09782a64039 474 {
cristianvillarraga 0:b09782a64039 475 while(read_command()==0);
cristianvillarraga 0:b09782a64039 476 ingred_d();
cristianvillarraga 0:b09782a64039 477 act_matrix(mat_tmp);
cristianvillarraga 0:b09782a64039 478 for (cont=0;cont<fila;cont++)
cristianvillarraga 0:b09782a64039 479 {
cristianvillarraga 0:b09782a64039 480 analogoo();
cristianvillarraga 0:b09782a64039 481 mover_fig();
cristianvillarraga 0:b09782a64039 482 act_matrix(mat_tmp);
cristianvillarraga 0:b09782a64039 483 imp_mat(mat_tmp);
cristianvillarraga 0:b09782a64039 484 wait_ms(500);
cristianvillarraga 0:b09782a64039 485 }
cristianvillarraga 0:b09782a64039 486 guardar_mat(mat_tmp);
cristianvillarraga 0:b09782a64039 487 elim_lin();
cristianvillarraga 0:b09782a64039 488 }
cristianvillarraga 0:b09782a64039 489 }
cristianvillarraga 0:b09782a64039 490
cristianvillarraga 0:b09782a64039 491 }
cristianvillarraga 0:b09782a64039 492 }
cristianvillarraga 0:b09782a64039 493