Selecciona los juegos

Dependencies:   mbed

Committer:
djinn77
Date:
Wed Nov 21 21:52:41 2018 +0000
Revision:
5:1bee785cac7f
Parent:
4:4d6b70e3dda3
final_2;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
djinn77 0:6f394b1e3cf7 1
djinn77 0:6f394b1e3cf7 2 #include "mbed.h"
djinn77 0:6f394b1e3cf7 3 #include "piezas.h"
djinn77 0:6f394b1e3cf7 4 #include "avenidas.h"
djinn77 5:1bee785cac7f 5 #include "vehiculos.h"
djinn77 5:1bee785cac7f 6
djinn77 1:abc2af4246eb 7 //#define DEBUG 1
djinn77 0:6f394b1e3cf7 8 Serial pc(USBTX,USBRX);
djinn77 0:6f394b1e3cf7 9 SPI deviceM(PB_5, PB_4, PB_3); // D4(gris), Ninguno, D3(azul)
djinn77 0:6f394b1e3cf7 10 DigitalOut ssel (PA_4); // A2(morado)
djinn77 0:6f394b1e3cf7 11 Ticker tp;
djinn77 0:6f394b1e3cf7 12 int printjugador =1;
djinn77 0:6f394b1e3cf7 13
djinn77 0:6f394b1e3cf7 14 // Definiendo Botones
djinn77 0:6f394b1e3cf7 15
djinn77 3:814ec214c941 16 AnalogIn vry(A3); // Lee el eje x del jostick
djinn77 3:814ec214c941 17 AnalogIn vrx(A4); // Lee el eje y del jostick
djinn77 3:814ec214c941 18 InterruptIn pulsador_abj(D8); // Lee el boton del jostick
djinn77 3:814ec214c941 19 DigitalIn sel(D7); //hace la seleccion de juego
djinn77 2:0c22820ab1d1 20 PwmOut buzzer(A1);
djinn77 0:6f394b1e3cf7 21
djinn77 0:6f394b1e3cf7 22 // Define numeros
djinn77 0:6f394b1e3cf7 23 uint16_t* global_disp={0};
djinn77 0:6f394b1e3cf7 24
djinn77 0:6f394b1e3cf7 25
djinn77 0:6f394b1e3cf7 26 // Funciones de la pantalla principal
djinn77 0:6f394b1e3cf7 27
djinn77 0:6f394b1e3cf7 28 void calle_funtion();
djinn77 3:814ec214c941 29 void tetris();
djinn77 5:1bee785cac7f 30 void carros();
djinn77 5:1bee785cac7f 31 void pantalla_pr();
djinn77 5:1bee785cac7f 32 void himno_legria();
djinn77 0:6f394b1e3cf7 33
djinn77 0:6f394b1e3cf7 34 // funciones de cruzando la calle
djinn77 0:6f394b1e3cf7 35
djinn77 0:6f394b1e3cf7 36 void printstatus_cll(); // Define el prototipo imprime el juego en pantalla
djinn77 0:6f394b1e3cf7 37 void desplazar_der_cll(); // Define el prototipo que desplaza el jugador a la der
djinn77 0:6f394b1e3cf7 38 void desplazar_izq_cll(); // Define el prototipo que desplaza el jugador a la izq
djinn77 0:6f394b1e3cf7 39 void arriba_cll(); // Define el prototipo que desplaza el jugador hacia arriba
djinn77 0:6f394b1e3cf7 40 void pista_cll(); // Define el prototipo
djinn77 0:6f394b1e3cf7 41 void puntaje_cll(); // Define el prototipo que cuenta el puntaje
djinn77 0:6f394b1e3cf7 42 void impresion(); // Define el prototipo
djinn77 0:6f394b1e3cf7 43 void aumentar_dificultad_cll(); // Define el prototipo que aumenta la velocidad de los vehiculos
djinn77 0:6f394b1e3cf7 44 void reiniciar_calle();
djinn77 0:6f394b1e3cf7 45
djinn77 1:abc2af4246eb 46 // funciones de tetris
djinn77 1:abc2af4246eb 47
djinn77 1:abc2af4246eb 48 void captura_datos_tx();
djinn77 1:abc2af4246eb 49 void read_tx();
djinn77 1:abc2af4246eb 50 void desplazar_tx();
djinn77 1:abc2af4246eb 51 void captura_matriz_tx();
djinn77 1:abc2af4246eb 52 void desplazar_izq_tx();
djinn77 1:abc2af4246eb 53 void desplazar_der_tx();
djinn77 1:abc2af4246eb 54 void aum_velocidad_tx();
djinn77 1:abc2af4246eb 55 void perder_tx();
djinn77 5:1bee785cac7f 56 //funciones carro
djinn77 5:1bee785cac7f 57
djinn77 5:1bee785cac7f 58 void desplazar_izq();
djinn77 5:1bee785cac7f 59 void desplazar_der();
djinn77 5:1bee785cac7f 60 void selec_nivel();
djinn77 5:1bee785cac7f 61 void desplazar();
djinn77 5:1bee785cac7f 62 void selec();
djinn77 5:1bee785cac7f 63 void juego();
djinn77 5:1bee785cac7f 64 void printstatus();
djinn77 5:1bee785cac7f 65 void aum_velocidad_cr();
djinn77 1:abc2af4246eb 66
djinn77 1:abc2af4246eb 67 uint16_t* girar(uint16_t* pieza, int posicion);
djinn77 1:abc2af4246eb 68 // Declaracion de variables tetris
djinn77 1:abc2af4246eb 69
djinn77 1:abc2af4246eb 70 int8_t posicion= 0, figura= 0, giro= 0;
djinn77 1:abc2af4246eb 71 uint16_t memoria[8]={0};
djinn77 1:abc2af4246eb 72 uint16_t* imprimir;
djinn77 1:abc2af4246eb 73 uint16_t *borde=0;
djinn77 1:abc2af4246eb 74 int8_t corrimiento=0;
djinn77 1:abc2af4246eb 75 // Delcaraion de limites variables tetris
djinn77 1:abc2af4246eb 76
djinn77 1:abc2af4246eb 77 int8_t liminf=0, limizq=0, limder=0;
djinn77 1:abc2af4246eb 78 // Habilitadores variables tetris
djinn77 1:abc2af4246eb 79
djinn77 1:abc2af4246eb 80 int enableizq=1;
djinn77 1:abc2af4246eb 81 int enableder=1;
djinn77 1:abc2af4246eb 82 int bajando=1;
djinn77 1:abc2af4246eb 83
djinn77 0:6f394b1e3cf7 84 // Definicion de Variables de la calle
djinn77 0:6f394b1e3cf7 85
djinn77 0:6f394b1e3cf7 86 uint16_t* nivel;
djinn77 0:6f394b1e3cf7 87 uint16_t* jugador;
djinn77 0:6f394b1e3cf7 88 uint16_t* victorias;
djinn77 0:6f394b1e3cf7 89 float velocidad = 1.0;
djinn77 0:6f394b1e3cf7 90 float meas_vx;
djinn77 0:6f394b1e3cf7 91 float meas_vy;
djinn77 0:6f394b1e3cf7 92 uint8_t ubicacion;
djinn77 0:6f394b1e3cf7 93 uint8_t conteo = 2;
djinn77 0:6f394b1e3cf7 94
djinn77 5:1bee785cac7f 95
djinn77 5:1bee785cac7f 96 // Definicion de Variables carro
djinn77 5:1bee785cac7f 97
djinn77 5:1bee785cac7f 98 uint16_t* fail;
djinn77 5:1bee785cac7f 99 uint16_t* camino;
djinn77 5:1bee785cac7f 100 uint8_t enable_der=1;
djinn77 5:1bee785cac7f 101 uint8_t enable_izq=1;
djinn77 5:1bee785cac7f 102 uint8_t enable_abj=1;
djinn77 5:1bee785cac7f 103 uint8_t pos;
djinn77 5:1bee785cac7f 104 uint8_t posicion_fig=3;
djinn77 5:1bee785cac7f 105 float velocidad_cr = 0.4;
djinn77 5:1bee785cac7f 106
djinn77 0:6f394b1e3cf7 107 // Funciones pantalla principal
djinn77 0:6f394b1e3cf7 108
djinn77 5:1bee785cac7f 109
djinn77 0:6f394b1e3cf7 110
djinn77 0:6f394b1e3cf7 111 void sendSPI(uint8_t d1, uint8_t d2)
djinn77 0:6f394b1e3cf7 112 {
djinn77 0:6f394b1e3cf7 113 deviceM.unlock();
djinn77 0:6f394b1e3cf7 114 ssel=0;
djinn77 0:6f394b1e3cf7 115 deviceM.write(d1);
djinn77 0:6f394b1e3cf7 116 deviceM.write(d2);
djinn77 0:6f394b1e3cf7 117 ssel=1;
djinn77 0:6f394b1e3cf7 118 deviceM.lock();
djinn77 0:6f394b1e3cf7 119 };
djinn77 0:6f394b1e3cf7 120
djinn77 0:6f394b1e3cf7 121 void inicializar_matriz(){
djinn77 0:6f394b1e3cf7 122 sendSPI(0x0c,1);
djinn77 0:6f394b1e3cf7 123 sendSPI(0x0b,7);
djinn77 0:6f394b1e3cf7 124 sendSPI(0x09,0); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ
djinn77 0:6f394b1e3cf7 125 sendSPI(0x0A,0x00); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ
djinn77 0:6f394b1e3cf7 126
djinn77 0:6f394b1e3cf7 127 int i;
djinn77 0:6f394b1e3cf7 128 for (i=0;i<2;i++){
djinn77 0:6f394b1e3cf7 129 sendSPI(0x0F,1);
djinn77 0:6f394b1e3cf7 130 wait (0.5);
djinn77 0:6f394b1e3cf7 131 sendSPI(0x0F,0);
djinn77 0:6f394b1e3cf7 132 wait (0.5);
djinn77 0:6f394b1e3cf7 133 }
djinn77 0:6f394b1e3cf7 134
djinn77 0:6f394b1e3cf7 135 }
djinn77 0:6f394b1e3cf7 136
djinn77 1:abc2af4246eb 137 void debuging(char*s,...){
djinn77 1:abc2af4246eb 138
djinn77 1:abc2af4246eb 139 #if DEBUG
djinn77 1:abc2af4246eb 140 pc.printf(s);
djinn77 1:abc2af4246eb 141 #endif
djinn77 1:abc2af4246eb 142
djinn77 1:abc2af4246eb 143 }
djinn77 0:6f394b1e3cf7 144
djinn77 0:6f394b1e3cf7 145
djinn77 3:814ec214c941 146 int main() { // ESTA ES LA FUNCION DE SELECCION
djinn77 0:6f394b1e3cf7 147
djinn77 0:6f394b1e3cf7 148 inicializar_matriz();
djinn77 0:6f394b1e3cf7 149 pc.baud(38400);
djinn77 3:814ec214c941 150 int selec_p=0;
djinn77 0:6f394b1e3cf7 151
djinn77 0:6f394b1e3cf7 152 while(1){
djinn77 0:6f394b1e3cf7 153
djinn77 3:814ec214c941 154
djinn77 0:6f394b1e3cf7 155 meas_vx = vrx.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje X
djinn77 0:6f394b1e3cf7 156
djinn77 0:6f394b1e3cf7 157 if(meas_vx < 1600)
djinn77 3:814ec214c941 158 selec_p++;
djinn77 3:814ec214c941 159 else if(meas_vx > 1700)
djinn77 3:814ec214c941 160 selec_p--;
djinn77 3:814ec214c941 161
djinn77 5:1bee785cac7f 162 if(selec_p > 3)
djinn77 3:814ec214c941 163 selec_p=0;
djinn77 3:814ec214c941 164 else if (selec_p < 0)
djinn77 5:1bee785cac7f 165 selec_p=3;
djinn77 3:814ec214c941 166
djinn77 3:814ec214c941 167 if(selec_p == 0)
djinn77 3:814ec214c941 168 global_disp = SELEC;
djinn77 3:814ec214c941 169 else if (selec_p == 1)
djinn77 3:814ec214c941 170 global_disp = UNO;
djinn77 5:1bee785cac7f 171 else if (selec_p == 2)
djinn77 5:1bee785cac7f 172 global_disp = DOS;
djinn77 5:1bee785cac7f 173 else
djinn77 5:1bee785cac7f 174 global_disp = TRES;
djinn77 5:1bee785cac7f 175
djinn77 3:814ec214c941 176 wait(0.5);
djinn77 3:814ec214c941 177 /* if(meas_vx < 1600)
djinn77 0:6f394b1e3cf7 178 global_disp = DOS, selec_p=2;
djinn77 0:6f394b1e3cf7 179 else if (meas_vx < 1700)
djinn77 0:6f394b1e3cf7 180 global_disp = SELEC, selec_p=0;
djinn77 0:6f394b1e3cf7 181 else
djinn77 0:6f394b1e3cf7 182 global_disp = UNO, selec_p=1;
djinn77 0:6f394b1e3cf7 183
djinn77 3:814ec214c941 184 */
djinn77 3:814ec214c941 185 pantalla_pr(); // LLAMA A LA FUNCION QUE DIBUJA EL NUMERO
djinn77 0:6f394b1e3cf7 186
djinn77 0:6f394b1e3cf7 187 if (selec_p==1 && sel==1)
djinn77 0:6f394b1e3cf7 188 calle_funtion();
djinn77 1:abc2af4246eb 189 else if (selec_p==2 && sel==1)
djinn77 1:abc2af4246eb 190 tetris();
djinn77 5:1bee785cac7f 191 else if (selec_p==3 && sel==1)
djinn77 5:1bee785cac7f 192 carros();
djinn77 5:1bee785cac7f 193 else if (selec_p==3 && sel==1)
djinn77 2:0c22820ab1d1 194 himno_legria();
djinn77 5:1bee785cac7f 195
djinn77 0:6f394b1e3cf7 196 }
djinn77 0:6f394b1e3cf7 197
djinn77 0:6f394b1e3cf7 198 }
djinn77 0:6f394b1e3cf7 199
djinn77 0:6f394b1e3cf7 200
djinn77 0:6f394b1e3cf7 201
djinn77 0:6f394b1e3cf7 202 void pantalla_pr(){
djinn77 0:6f394b1e3cf7 203 for(int i= 1;i<=8;i++){
djinn77 0:6f394b1e3cf7 204 sendSPI(i, global_disp[i-1]);
djinn77 0:6f394b1e3cf7 205 }
djinn77 0:6f394b1e3cf7 206 }
djinn77 0:6f394b1e3cf7 207
djinn77 0:6f394b1e3cf7 208 void calle_funtion(){
djinn77 0:6f394b1e3cf7 209
djinn77 0:6f394b1e3cf7 210 while(1){
djinn77 0:6f394b1e3cf7 211
djinn77 0:6f394b1e3cf7 212 nivel= AV_1; // Asigna el trasado de las calles al juego
djinn77 0:6f394b1e3cf7 213 victorias=puntos; // Asigna los puntos acumulados en la pantalla inicia en 0
djinn77 0:6f394b1e3cf7 214 jugador=player; // Asigna la forma del jugador
djinn77 0:6f394b1e3cf7 215 tp.attach(&printstatus_cll,0.2); // MIRAR para que sirve
djinn77 0:6f394b1e3cf7 216 ubicacion=1; // Inicializa la varibale que cuenta la posicion del jugador
djinn77 0:6f394b1e3cf7 217
djinn77 0:6f394b1e3cf7 218
djinn77 0:6f394b1e3cf7 219
djinn77 0:6f394b1e3cf7 220 while(1){
djinn77 0:6f394b1e3cf7 221
djinn77 0:6f394b1e3cf7 222 meas_vx = vrx.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje X
djinn77 0:6f394b1e3cf7 223 meas_vy = vry.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje Y
djinn77 0:6f394b1e3cf7 224
djinn77 0:6f394b1e3cf7 225 //------ realiza el corriemiento del vector hacia la izq y der respectivamente.
djinn77 0:6f394b1e3cf7 226
djinn77 0:6f394b1e3cf7 227 if (meas_vx < 1600) // si se cumple esta condicion el jugador se desplaza a la izq
djinn77 0:6f394b1e3cf7 228 desplazar_izq_cll();
djinn77 0:6f394b1e3cf7 229 else if (meas_vx > 1700) // si se cumple esta condicion el jugador se desplaza a la der
djinn77 0:6f394b1e3cf7 230 desplazar_der_cll();
djinn77 0:6f394b1e3cf7 231
djinn77 0:6f394b1e3cf7 232 //------ mueve a el jugador hacia arriba en el mapa
djinn77 0:6f394b1e3cf7 233
djinn77 0:6f394b1e3cf7 234 if(meas_vy < 1550){
djinn77 0:6f394b1e3cf7 235 arriba_cll(); // hace el llamado a la funcion que mueve al jugador a la parte superior
djinn77 0:6f394b1e3cf7 236 ubicacion++; // cada vez que se ejecuta actualiza la posicion del jugador en el mapa
djinn77 0:6f394b1e3cf7 237 pc.printf("\n ubicacion:\n %i",ubicacion); // imprime la ubicacion del jugador en el puerto serial
djinn77 0:6f394b1e3cf7 238 if(ubicacion==7) // si la posicion del jugador es igual a 7 ejecuta la funcion puntaje_cll();
djinn77 0:6f394b1e3cf7 239 puntaje_cll();
djinn77 0:6f394b1e3cf7 240 }
djinn77 0:6f394b1e3cf7 241
djinn77 0:6f394b1e3cf7 242 // ----- El siguiente ciclo realiza el desplazamiento de los vehiculos
djinn77 0:6f394b1e3cf7 243 pista_cll();
djinn77 0:6f394b1e3cf7 244
djinn77 0:6f394b1e3cf7 245 wait(velocidad); // Velocidad del juego
djinn77 0:6f394b1e3cf7 246
djinn77 0:6f394b1e3cf7 247 }
djinn77 0:6f394b1e3cf7 248
djinn77 0:6f394b1e3cf7 249
djinn77 0:6f394b1e3cf7 250
djinn77 0:6f394b1e3cf7 251
djinn77 0:6f394b1e3cf7 252 }
djinn77 0:6f394b1e3cf7 253
djinn77 0:6f394b1e3cf7 254
djinn77 0:6f394b1e3cf7 255
djinn77 0:6f394b1e3cf7 256 }
djinn77 0:6f394b1e3cf7 257
djinn77 0:6f394b1e3cf7 258 void desplazar_der_cll(){ // Esta funcion desplaza al jugador hacia la derecha
djinn77 0:6f394b1e3cf7 259
djinn77 0:6f394b1e3cf7 260 int der = jugador[7];
djinn77 0:6f394b1e3cf7 261 for(int i= 7; i>=0;i--){
djinn77 0:6f394b1e3cf7 262 jugador[i]=jugador[i-1];
djinn77 0:6f394b1e3cf7 263 }
djinn77 0:6f394b1e3cf7 264 jugador[0] = der;
djinn77 0:6f394b1e3cf7 265
djinn77 0:6f394b1e3cf7 266 }
djinn77 0:6f394b1e3cf7 267
djinn77 0:6f394b1e3cf7 268 void desplazar_izq_cll(){ // Esta funcion desplaza al jugador hacia la izq
djinn77 0:6f394b1e3cf7 269
djinn77 0:6f394b1e3cf7 270 int izq = jugador[0];
djinn77 0:6f394b1e3cf7 271 for(int i= 0; i<8;i++){
djinn77 0:6f394b1e3cf7 272 jugador[i]=jugador[i+1];
djinn77 0:6f394b1e3cf7 273 }
djinn77 0:6f394b1e3cf7 274 jugador[7] = izq;
djinn77 0:6f394b1e3cf7 275
djinn77 0:6f394b1e3cf7 276 }
djinn77 0:6f394b1e3cf7 277
djinn77 0:6f394b1e3cf7 278 void arriba_cll(){ // Esta funcion desplaza al jugador hacia arriba
djinn77 0:6f394b1e3cf7 279
djinn77 0:6f394b1e3cf7 280 int arb = 1;
djinn77 0:6f394b1e3cf7 281 for(int i= 0; i<8;i++){
djinn77 0:6f394b1e3cf7 282 jugador[i]= jugador[i] << arb;
djinn77 0:6f394b1e3cf7 283 }
djinn77 0:6f394b1e3cf7 284 arb++;
djinn77 0:6f394b1e3cf7 285
djinn77 0:6f394b1e3cf7 286 }
djinn77 0:6f394b1e3cf7 287
djinn77 0:6f394b1e3cf7 288 void pista_cll(){ // Esta funcion ejecuta el movimiento de los vehiculos
djinn77 0:6f394b1e3cf7 289
djinn77 0:6f394b1e3cf7 290 int aux = nivel[0];
djinn77 0:6f394b1e3cf7 291 for(int i= 0; i<8;i++){
djinn77 0:6f394b1e3cf7 292 nivel[i]=nivel[i+1];
djinn77 0:6f394b1e3cf7 293 }
djinn77 0:6f394b1e3cf7 294 nivel[7] = aux;
djinn77 0:6f394b1e3cf7 295
djinn77 0:6f394b1e3cf7 296 }
djinn77 0:6f394b1e3cf7 297
djinn77 0:6f394b1e3cf7 298 void puntaje_cll(){ // Esta funcion hace el conteo de los puntos ganados
djinn77 0:6f394b1e3cf7 299
djinn77 0:6f394b1e3cf7 300 victorias[conteo]=0x80; // cada vez que se llega al otro lado de la calle suma 1 punto que se visualiza en pantalla
djinn77 0:6f394b1e3cf7 301 for(int i= 0; i<8;i++){ // Este ciclo for regresa al jugador a la pos 1
djinn77 0:6f394b1e3cf7 302 jugador[i]= jugador[i] >> 6;
djinn77 0:6f394b1e3cf7 303 }
djinn77 0:6f394b1e3cf7 304 ubicacion=1; // Renicializa la pos del jugador
djinn77 0:6f394b1e3cf7 305 conteo++; // Cuenta cuantas veces a llegado el jugador al otro lado hasta un maximo de 4
djinn77 0:6f394b1e3cf7 306 if(conteo == 6){ // cuando el conteo es igual a 6 se llama a la funcion aumentar dificultad
djinn77 0:6f394b1e3cf7 307 aumentar_dificultad_cll();
djinn77 0:6f394b1e3cf7 308 }
djinn77 0:6f394b1e3cf7 309
djinn77 0:6f394b1e3cf7 310
djinn77 0:6f394b1e3cf7 311 }
djinn77 0:6f394b1e3cf7 312
djinn77 0:6f394b1e3cf7 313 void aumentar_dificultad_cll(){ // Esta funcion aumenta la dificultad del juego
djinn77 0:6f394b1e3cf7 314
djinn77 0:6f394b1e3cf7 315 for(int i= 0; i<8;i++){ // Regresa el valor de las victorias acumuladas a 0
djinn77 0:6f394b1e3cf7 316 victorias[i]= 0;
djinn77 0:6f394b1e3cf7 317 }
djinn77 0:6f394b1e3cf7 318 velocidad = velocidad - 0.1; // aumenta la velocidad del juego
djinn77 0:6f394b1e3cf7 319 conteo=2; // reinicializa el conteo
djinn77 0:6f394b1e3cf7 320
djinn77 0:6f394b1e3cf7 321
djinn77 0:6f394b1e3cf7 322 }
djinn77 0:6f394b1e3cf7 323 void reiniciar_calle(){ // Esta condicion renicia el sistema al estrellarce con un vehiculo
djinn77 0:6f394b1e3cf7 324
djinn77 0:6f394b1e3cf7 325 NVIC_SystemReset();
djinn77 0:6f394b1e3cf7 326
djinn77 0:6f394b1e3cf7 327 }
djinn77 0:6f394b1e3cf7 328 void printstatus_cll() // Esta funcion es la encargada de la impresion
djinn77 0:6f394b1e3cf7 329 {
djinn77 0:6f394b1e3cf7 330
djinn77 0:6f394b1e3cf7 331 for(int j= 1; j<=8;j++) // Este cilo imprime en pantalla
djinn77 0:6f394b1e3cf7 332 if (printjugador){
djinn77 0:6f394b1e3cf7 333 sendSPI(j, nivel[j-1]|jugador[j-1]| victorias[j-1]); // CADA VEZ que se vea en pantalla SPI se mostrar un dato en pantalla
djinn77 0:6f394b1e3cf7 334 if((nivel[j-1] & jugador[j-1]) != 0){ // SI este if se cumple el jugador ha sido chocado
djinn77 0:6f394b1e3cf7 335 reiniciar_calle(); // Ee se hace llamado a la funcion reinicio
djinn77 0:6f394b1e3cf7 336 }
djinn77 0:6f394b1e3cf7 337
djinn77 0:6f394b1e3cf7 338 }else{
djinn77 0:6f394b1e3cf7 339 sendSPI(j, nivel[j-1]| victorias[j-1]);
djinn77 0:6f394b1e3cf7 340 }
djinn77 0:6f394b1e3cf7 341
djinn77 0:6f394b1e3cf7 342 printjugador =!printjugador;
djinn77 1:abc2af4246eb 343 }
djinn77 1:abc2af4246eb 344
djinn77 1:abc2af4246eb 345
djinn77 1:abc2af4246eb 346 void tetris(){
djinn77 1:abc2af4246eb 347
djinn77 1:abc2af4246eb 348 for(int i= 1;i<=8;i++){
djinn77 1:abc2af4246eb 349 sendSPI(i, 0);
djinn77 1:abc2af4246eb 350 }
djinn77 1:abc2af4246eb 351
djinn77 1:abc2af4246eb 352 while(1){
djinn77 1:abc2af4246eb 353 captura_datos_tx(); // Inicia la lectura de la informacion
djinn77 1:abc2af4246eb 354 perder_tx();
djinn77 1:abc2af4246eb 355 }
djinn77 1:abc2af4246eb 356
djinn77 1:abc2af4246eb 357 }
djinn77 1:abc2af4246eb 358
djinn77 1:abc2af4246eb 359 void captura_datos_tx(){
djinn77 1:abc2af4246eb 360
djinn77 1:abc2af4246eb 361
djinn77 1:abc2af4246eb 362 //-----------------------------------------
djinn77 1:abc2af4246eb 363 char inicio=0,final=0;
djinn77 1:abc2af4246eb 364 figura=0;
djinn77 1:abc2af4246eb 365 giro=0;
djinn77 1:abc2af4246eb 366 posicion=0;
djinn77 1:abc2af4246eb 367
djinn77 1:abc2af4246eb 368 debuging("\n Ingrese el inicio del comando. ");
djinn77 1:abc2af4246eb 369 inicio=pc.getc();
djinn77 1:abc2af4246eb 370 debuging("\n Ingrese la Figura. ");
djinn77 1:abc2af4246eb 371 figura=pc.getc();
djinn77 1:abc2af4246eb 372 debuging("\n Seleccione el giro. ");
djinn77 1:abc2af4246eb 373 giro=pc.getc();
djinn77 1:abc2af4246eb 374 debuging("\n Seleccione la posicion. ");
djinn77 1:abc2af4246eb 375 posicion=pc.getc();
djinn77 1:abc2af4246eb 376 debuging("\n Ingrese el final del comando. ");
djinn77 1:abc2af4246eb 377 final=pc.getc();
djinn77 1:abc2af4246eb 378
djinn77 1:abc2af4246eb 379
djinn77 1:abc2af4246eb 380 if(inicio!= '<' || final != '>'){
djinn77 1:abc2af4246eb 381
djinn77 1:abc2af4246eb 382 debuging("\n Error en el comando.");
djinn77 1:abc2af4246eb 383
djinn77 1:abc2af4246eb 384 }else{
djinn77 1:abc2af4246eb 385
djinn77 1:abc2af4246eb 386 read_tx();
djinn77 1:abc2af4246eb 387
djinn77 1:abc2af4246eb 388 }
djinn77 1:abc2af4246eb 389 //------------------------------------------------------
djinn77 1:abc2af4246eb 390
djinn77 1:abc2af4246eb 391 /*//--------------------figuras con random------------------
djinn77 1:abc2af4246eb 392 figura=0;
djinn77 1:abc2af4246eb 393 giro=0;
djinn77 1:abc2af4246eb 394 figura=rand()%5;
djinn77 1:abc2af4246eb 395 giro=rand()%5;
djinn77 1:abc2af4246eb 396 posicion=rand()%6;;
djinn77 1:abc2af4246eb 397 read_tx();
djinn77 1:abc2af4246eb 398 *///--------------------------------------------------------
djinn77 1:abc2af4246eb 399
djinn77 1:abc2af4246eb 400
djinn77 1:abc2af4246eb 401
djinn77 1:abc2af4246eb 402
djinn77 1:abc2af4246eb 403 }
djinn77 1:abc2af4246eb 404
djinn77 1:abc2af4246eb 405 void inicializar(){ //INICIALIZA LA MATRIZ
djinn77 1:abc2af4246eb 406
djinn77 1:abc2af4246eb 407 sendSPI(0x0c,1);
djinn77 1:abc2af4246eb 408 sendSPI(0x0b,7);
djinn77 1:abc2af4246eb 409 sendSPI(0x09,0);
djinn77 1:abc2af4246eb 410 sendSPI(0x0A,0x00); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ
djinn77 1:abc2af4246eb 411 int i;
djinn77 1:abc2af4246eb 412 for (i=0;i<2;i++){
djinn77 1:abc2af4246eb 413 sendSPI(0x0F,1);
djinn77 1:abc2af4246eb 414 wait (0.5);
djinn77 1:abc2af4246eb 415 sendSPI(0x0f,0);
djinn77 1:abc2af4246eb 416 wait (0.5);
djinn77 1:abc2af4246eb 417 }
djinn77 1:abc2af4246eb 418
djinn77 1:abc2af4246eb 419 for (int j= 1; j<=8;j++){ // limpia la pantalla al encenderce o reiniarcea asi
djinn77 1:abc2af4246eb 420 //no quedan leds encendidos cuando se ejecute el programa nuevamente
djinn77 1:abc2af4246eb 421
djinn77 1:abc2af4246eb 422 sendSPI(j, 0x00); //pone cada columna y vecto en blanco al inicializar
djinn77 1:abc2af4246eb 423 }
djinn77 1:abc2af4246eb 424 }
djinn77 1:abc2af4246eb 425
djinn77 1:abc2af4246eb 426 void read_tx(){
djinn77 1:abc2af4246eb 427
djinn77 1:abc2af4246eb 428 switch(figura){ //Este switch escoje la figura con que trabajaar
djinn77 1:abc2af4246eb 429 case 0: // L
djinn77 1:abc2af4246eb 430 if(giro == 0)
djinn77 1:abc2af4246eb 431 imprimir = PZA_L,liminf=7, limizq=6, limder=0;
djinn77 1:abc2af4246eb 432 if(giro == 1)
djinn77 1:abc2af4246eb 433 imprimir = PZA_LDN,liminf=7, limizq=5, limder=0;
djinn77 1:abc2af4246eb 434 if(giro == 2)
djinn77 1:abc2af4246eb 435 imprimir = PZA_LDO,liminf=7, limizq=5, limder=-1;
djinn77 1:abc2af4246eb 436 if(giro == 3)
djinn77 1:abc2af4246eb 437 imprimir = PZA_LDD,liminf=8, limizq=5, limder=0;
djinn77 1:abc2af4246eb 438 break;
djinn77 1:abc2af4246eb 439 case 1://T
djinn77 1:abc2af4246eb 440 if(giro == 0)
djinn77 1:abc2af4246eb 441 imprimir = PZA_T,liminf=8, limizq=5, limder=0;
djinn77 1:abc2af4246eb 442 if(giro == 1)
djinn77 1:abc2af4246eb 443 imprimir = PZA_TN,liminf=7, limizq=6, limder=0;
djinn77 1:abc2af4246eb 444 if(giro == 2)
djinn77 1:abc2af4246eb 445 imprimir = PZA_TO,liminf=7, limizq=5, limder=0;
djinn77 1:abc2af4246eb 446 if(giro == 3)
djinn77 1:abc2af4246eb 447 imprimir = PZA_TD,liminf=7, limizq=5, limder=-1;
djinn77 1:abc2af4246eb 448 break;
djinn77 1:abc2af4246eb 449 case 2://I
djinn77 1:abc2af4246eb 450 if(giro == 0 || giro == 2)
djinn77 1:abc2af4246eb 451 imprimir = PZA_I,liminf=7, limizq=6, limder=-1;
djinn77 1:abc2af4246eb 452 if(giro == 1 || giro == 3)
djinn77 1:abc2af4246eb 453 imprimir = PZA_IR,liminf=8, limizq=5, limder=0;
djinn77 1:abc2af4246eb 454 break;
djinn77 1:abc2af4246eb 455 case 3://Cuadrado
djinn77 1:abc2af4246eb 456 if(giro == 0 || giro == 1 || giro == 2 || giro == 3)
djinn77 1:abc2af4246eb 457 imprimir = PZA_C,liminf=8, limizq=6, limder=0;
djinn77 1:abc2af4246eb 458 break;
djinn77 1:abc2af4246eb 459 case 4:
djinn77 1:abc2af4246eb 460 if(giro == 0 || giro == 2)
djinn77 1:abc2af4246eb 461 imprimir = PZA_Z,liminf=8, limizq=5, limder=0;
djinn77 1:abc2af4246eb 462 if(giro == 1 || giro == 3)
djinn77 1:abc2af4246eb 463 imprimir = PZA_ZN,liminf=7, limizq=6, limder=0;
djinn77 1:abc2af4246eb 464 break;
djinn77 1:abc2af4246eb 465 default:
djinn77 1:abc2af4246eb 466 imprimir = VACIO;
djinn77 1:abc2af4246eb 467 break;
djinn77 1:abc2af4246eb 468 }
djinn77 1:abc2af4246eb 469 // pc.printf("\n limite inferior read %d\n ",liminf);
djinn77 1:abc2af4246eb 470 desplazar_tx();
djinn77 1:abc2af4246eb 471 }
djinn77 1:abc2af4246eb 472 void desplazar_tx(){
djinn77 1:abc2af4246eb 473
djinn77 1:abc2af4246eb 474 uint16_t desplazamiento[8]={0}; // Inicia un vector auxiliar con solo Ceros
djinn77 1:abc2af4246eb 475 int j= 0;
djinn77 1:abc2af4246eb 476 for(int i=posicion; i<(posicion+3);i++){ // Inicia un vector auxiliar con solo Ceros
djinn77 1:abc2af4246eb 477 desplazamiento[i]=imprimir[j]; // Alamcena los nuevos datos tomados en el vector
djinn77 1:abc2af4246eb 478 j++;
djinn77 1:abc2af4246eb 479 }
djinn77 1:abc2af4246eb 480 imprimir=desplazamiento;
djinn77 1:abc2af4246eb 481 captura_matriz_tx();
djinn77 1:abc2af4246eb 482 }
djinn77 1:abc2af4246eb 483
djinn77 1:abc2af4246eb 484 void captura_matriz_tx(){
djinn77 1:abc2af4246eb 485
djinn77 1:abc2af4246eb 486 int i=0; // inicia el contador i en 0
djinn77 1:abc2af4246eb 487 int enable=1;
djinn77 1:abc2af4246eb 488 enableizq=1;
djinn77 1:abc2af4246eb 489 enableder=1;
djinn77 1:abc2af4246eb 490 bajando=1;
djinn77 1:abc2af4246eb 491 velocidad=1.0;
djinn77 1:abc2af4246eb 492 while(enable){ //se encarga de desplazar los bits dentro del vector
djinn77 1:abc2af4246eb 493 //pc.printf("\n1- conteo del corriemiento:\n %d",i);
djinn77 1:abc2af4246eb 494 corrimiento=i;
djinn77 1:abc2af4246eb 495 int j=1; // inicia el contador j en 1
djinn77 1:abc2af4246eb 496
djinn77 1:abc2af4246eb 497 while(j<=8){ //se encarga de seleccionar que posicion del vector imprimira
djinn77 1:abc2af4246eb 498
djinn77 1:abc2af4246eb 499 sendSPI(j, memoria[j-1]|(imprimir[j-1]>>i)); //Imprime el resultado de aplicar OR a la memoria y al desplamamiento de imprimir
djinn77 1:abc2af4246eb 500 //wait(0.1); // Activar este wait para pruebas de desplazamiento y captura de los datos
djinn77 1:abc2af4246eb 501
djinn77 1:abc2af4246eb 502 if(i==liminf || (memoria[j-1]&(imprimir[j-1]>>i+1))!=0){ //Detiene el desplazamiento cuando los bits tocan fondo,
djinn77 1:abc2af4246eb 503 enable=0;// desabilitador del ciclo while
djinn77 1:abc2af4246eb 504 bajando=0;
djinn77 1:abc2af4246eb 505 for(int k=0; k<8;k++){ // Almacena todos lo datos del vector en la posicion que corrimiento en la memoria
djinn77 1:abc2af4246eb 506 memoria[k]= memoria[k]|(imprimir[k]>>i);
djinn77 1:abc2af4246eb 507 }
djinn77 1:abc2af4246eb 508
djinn77 1:abc2af4246eb 509
djinn77 1:abc2af4246eb 510 }
djinn77 1:abc2af4246eb 511
djinn77 3:814ec214c941 512 /*//--------------------------analisis de casillas completadas----------
djinn77 1:abc2af4246eb 513
djinn77 1:abc2af4246eb 514
djinn77 1:abc2af4246eb 515 int16_t MUL1 = memoria[0]& memoria[1]& memoria[2]& memoria[3];
djinn77 1:abc2af4246eb 516 int16_t MUL2 = memoria[4]& memoria[5]& memoria[6]& memoria[7];
djinn77 1:abc2af4246eb 517
djinn77 1:abc2af4246eb 518
djinn77 1:abc2af4246eb 519 MUL1= MUL1&MUL2;
djinn77 1:abc2af4246eb 520 if(MUL1 != 0){
djinn77 1:abc2af4246eb 521
djinn77 1:abc2af4246eb 522 //////////////////////////
djinn77 1:abc2af4246eb 523 sendSPI(1, 0);
djinn77 1:abc2af4246eb 524 sendSPI(2, 0);
djinn77 1:abc2af4246eb 525 sendSPI(3, 0);
djinn77 1:abc2af4246eb 526 sendSPI(4, MUL1);
djinn77 1:abc2af4246eb 527 sendSPI(5, 0);
djinn77 1:abc2af4246eb 528 sendSPI(6, 0);
djinn77 1:abc2af4246eb 529 sendSPI(7, 0);
djinn77 1:abc2af4246eb 530 sendSPI(8, 0);
djinn77 1:abc2af4246eb 531 wait(1.0);
djinn77 1:abc2af4246eb 532 ///////////////////////////////
djinn77 1:abc2af4246eb 533
djinn77 1:abc2af4246eb 534 int16_t resta[8]={0};
djinn77 1:abc2af4246eb 535
djinn77 1:abc2af4246eb 536 for(int ki=0; ki<=7;ki++){
djinn77 1:abc2af4246eb 537
djinn77 1:abc2af4246eb 538 resta[ki]=memoria[ki]- MUL1;
djinn77 1:abc2af4246eb 539
djinn77 1:abc2af4246eb 540 }
djinn77 1:abc2af4246eb 541
djinn77 1:abc2af4246eb 542 int n=0;
djinn77 1:abc2af4246eb 543 int cot=0b00000001;
djinn77 1:abc2af4246eb 544
djinn77 1:abc2af4246eb 545 for(int l = 0; l<=7;l++){
djinn77 1:abc2af4246eb 546 if((cot<<l & MUL1) !=0){
djinn77 1:abc2af4246eb 547 n++;
djinn77 1:abc2af4246eb 548 }
djinn77 1:abc2af4246eb 549 }
djinn77 1:abc2af4246eb 550
djinn77 1:abc2af4246eb 551 for(int p= 1;p<=8;p++){
djinn77 1:abc2af4246eb 552 sendSPI(p, resta[p-1]);
djinn77 1:abc2af4246eb 553
djinn77 1:abc2af4246eb 554 }
djinn77 1:abc2af4246eb 555 wait(2.0);
djinn77 1:abc2af4246eb 556
djinn77 1:abc2af4246eb 557
djinn77 1:abc2af4246eb 558
djinn77 1:abc2af4246eb 559 for(int ii= 0;ii<=7;ii++){
djinn77 1:abc2af4246eb 560
djinn77 1:abc2af4246eb 561 memoria[ii]=0;
djinn77 1:abc2af4246eb 562 memoria[ii]= resta[ii]>>n;
djinn77 1:abc2af4246eb 563
djinn77 1:abc2af4246eb 564 }
djinn77 1:abc2af4246eb 565
djinn77 1:abc2af4246eb 566 }
djinn77 1:abc2af4246eb 567
djinn77 1:abc2af4246eb 568
djinn77 3:814ec214c941 569 */
djinn77 1:abc2af4246eb 570 //-----------------------------------------------------------------
djinn77 1:abc2af4246eb 571
djinn77 1:abc2af4246eb 572
djinn77 1:abc2af4246eb 573 j++;
djinn77 1:abc2af4246eb 574 }
djinn77 1:abc2af4246eb 575 wait(velocidad); // espera para tomar el otro valor de lectura
djinn77 1:abc2af4246eb 576 // ----------------------Lectura del jostick-----------------------------
djinn77 1:abc2af4246eb 577
djinn77 1:abc2af4246eb 578 meas_vx = vrx.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje X
djinn77 1:abc2af4246eb 579 meas_vy = vry.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje Y
djinn77 1:abc2af4246eb 580
djinn77 1:abc2af4246eb 581 //------ realiza el corriemiento del vector hacia la izq y der respectivamente.
djinn77 1:abc2af4246eb 582
djinn77 1:abc2af4246eb 583
djinn77 1:abc2af4246eb 584 if (meas_vx > 1700 && (posicion < limizq)) // si se cumple esta condicion el jugador se desplaza a la izq
djinn77 1:abc2af4246eb 585 desplazar_izq_tx(),i--;
djinn77 1:abc2af4246eb 586 else if (meas_vx < 1600 && (posicion > limder)) // si se cumple esta condicion el jugador se desplaza a la der
djinn77 1:abc2af4246eb 587 desplazar_der_tx();
djinn77 1:abc2af4246eb 588
djinn77 1:abc2af4246eb 589
djinn77 1:abc2af4246eb 590 //-----------------------Giro de la pieza--------------------------------
djinn77 1:abc2af4246eb 591
djinn77 3:814ec214c941 592 if(meas_vy > 1680){
djinn77 1:abc2af4246eb 593 giro++;
djinn77 1:abc2af4246eb 594 if(giro ==4){
djinn77 1:abc2af4246eb 595 giro=0;
djinn77 1:abc2af4246eb 596 }
djinn77 1:abc2af4246eb 597 switch(figura){
djinn77 1:abc2af4246eb 598 case 0: // L
djinn77 1:abc2af4246eb 599 if(giro == 0)
djinn77 1:abc2af4246eb 600 imprimir= girar(PZA_L, posicion),liminf=7, limizq=6, limder=0,i--;
djinn77 1:abc2af4246eb 601 if(giro == 1)
djinn77 1:abc2af4246eb 602 imprimir= girar(PZA_LDN, posicion),liminf=7, limizq=5, limder=0,i--;
djinn77 1:abc2af4246eb 603 if(giro == 2)
djinn77 1:abc2af4246eb 604 imprimir= girar(PZA_LDO, posicion),liminf=7, limizq=5, limder=-1,i--;
djinn77 1:abc2af4246eb 605 if(giro == 3)
djinn77 1:abc2af4246eb 606 imprimir=girar(PZA_LDD, posicion),liminf=8, limizq=5, limder=0,i--;
djinn77 1:abc2af4246eb 607 break;
djinn77 1:abc2af4246eb 608 case 1://T
djinn77 1:abc2af4246eb 609 if(giro == 0)
djinn77 1:abc2af4246eb 610 imprimir= girar(PZA_T, posicion),liminf=8, limizq=5, limder=0,i--;
djinn77 1:abc2af4246eb 611 if(giro == 1)
djinn77 1:abc2af4246eb 612 imprimir= girar(PZA_TN, posicion),liminf=7, limizq=6, limder=0,i--;
djinn77 1:abc2af4246eb 613 if(giro == 2)
djinn77 1:abc2af4246eb 614 imprimir= girar(PZA_TO, posicion),liminf=7, limizq=5, limder=0,i--;
djinn77 1:abc2af4246eb 615 if(giro == 3)
djinn77 1:abc2af4246eb 616 imprimir= girar(PZA_TD, posicion),liminf=7, limizq=5, limder=-1,i--;
djinn77 1:abc2af4246eb 617 break;
djinn77 1:abc2af4246eb 618 case 2://I
djinn77 1:abc2af4246eb 619 if(giro == 0 || giro == 2)
djinn77 1:abc2af4246eb 620 imprimir= girar(PZA_I, posicion),liminf=7, limizq=6, limder=-1,i--;
djinn77 1:abc2af4246eb 621 if(giro == 1 || giro == 3)
djinn77 1:abc2af4246eb 622 imprimir=girar(PZA_IR, posicion),liminf=8, limizq=5, limder=0,i--;
djinn77 1:abc2af4246eb 623 break;
djinn77 1:abc2af4246eb 624 case 3://Cuadrado
djinn77 1:abc2af4246eb 625 if(giro == 0 || giro == 1 || giro == 2 || giro == 3)
djinn77 1:abc2af4246eb 626 imprimir= girar(PZA_C, posicion),liminf=8, limizq=6, limder=0,i--;
djinn77 1:abc2af4246eb 627 break;
djinn77 1:abc2af4246eb 628 case 4: //Z
djinn77 1:abc2af4246eb 629 if(giro == 0 || giro == 2)
djinn77 1:abc2af4246eb 630 imprimir= girar(PZA_Z, posicion),liminf=8, limizq=5, limder=0,i--;
djinn77 1:abc2af4246eb 631 if(giro == 1 || giro == 3)
djinn77 1:abc2af4246eb 632 imprimir= girar(PZA_ZN, posicion),liminf=7, limizq=6, limder=0,i--;
djinn77 1:abc2af4246eb 633 break;
djinn77 1:abc2af4246eb 634
djinn77 1:abc2af4246eb 635 }
djinn77 1:abc2af4246eb 636
djinn77 1:abc2af4246eb 637 }
djinn77 1:abc2af4246eb 638
djinn77 1:abc2af4246eb 639 //---------------------------------------------------------------
djinn77 1:abc2af4246eb 640 pulsador_abj.fall(&aum_velocidad_tx);
djinn77 1:abc2af4246eb 641
djinn77 1:abc2af4246eb 642 i++;
djinn77 1:abc2af4246eb 643 }
djinn77 1:abc2af4246eb 644
djinn77 1:abc2af4246eb 645 }
djinn77 1:abc2af4246eb 646
djinn77 1:abc2af4246eb 647 void desplazar_izq_tx(){
djinn77 1:abc2af4246eb 648
djinn77 1:abc2af4246eb 649 if(posicion<limizq & corrimiento<liminf & enableizq){
djinn77 1:abc2af4246eb 650 posicion++;
djinn77 1:abc2af4246eb 651
djinn77 1:abc2af4246eb 652 for(int i=7; i >=0; i--){
djinn77 1:abc2af4246eb 653 imprimir[i]=imprimir[i-1];
djinn77 1:abc2af4246eb 654 if(i==0){
djinn77 1:abc2af4246eb 655 imprimir[i]=0;
djinn77 1:abc2af4246eb 656
djinn77 1:abc2af4246eb 657 }
djinn77 1:abc2af4246eb 658 if((memoria[i+1] & (imprimir[i]>>corrimiento))!=0){
djinn77 1:abc2af4246eb 659 enableizq=0;
djinn77 1:abc2af4246eb 660 }
djinn77 1:abc2af4246eb 661
djinn77 1:abc2af4246eb 662 }
djinn77 1:abc2af4246eb 663 for(int j=1;j<=8;j++){
djinn77 1:abc2af4246eb 664 sendSPI(j, memoria[j-1]|(imprimir[j-1]>>corrimiento));
djinn77 1:abc2af4246eb 665
djinn77 1:abc2af4246eb 666 }
djinn77 1:abc2af4246eb 667 wait(1.0);
djinn77 1:abc2af4246eb 668
djinn77 1:abc2af4246eb 669 }
djinn77 1:abc2af4246eb 670 return;
djinn77 1:abc2af4246eb 671 }
djinn77 1:abc2af4246eb 672
djinn77 1:abc2af4246eb 673 void desplazar_der_tx(){
djinn77 1:abc2af4246eb 674 if(posicion>limder & corrimiento<liminf & enableder & bajando){
djinn77 1:abc2af4246eb 675 posicion--;
djinn77 1:abc2af4246eb 676
djinn77 1:abc2af4246eb 677 for(int i=0; i <8; i++){
djinn77 1:abc2af4246eb 678 int der =(memoria[i+1] & (imprimir[i]>>corrimiento));
djinn77 1:abc2af4246eb 679 imprimir[i]=imprimir[i+1];
djinn77 1:abc2af4246eb 680 if(i==7){
djinn77 1:abc2af4246eb 681 imprimir[i]=0;
djinn77 1:abc2af4246eb 682
djinn77 1:abc2af4246eb 683 }
djinn77 1:abc2af4246eb 684 if((memoria[i-1] & (imprimir[i]>>corrimiento))!=0){
djinn77 1:abc2af4246eb 685 enableder=0;
djinn77 1:abc2af4246eb 686 pc.printf("\n multisder en :%d\n ",der);
djinn77 1:abc2af4246eb 687 pc.printf("\n derecho:%d\n ",enableder);
djinn77 1:abc2af4246eb 688 }
djinn77 1:abc2af4246eb 689 }
djinn77 1:abc2af4246eb 690 for(int j=1;j<=8;j++){
djinn77 1:abc2af4246eb 691 sendSPI(j, memoria[j-1]|(imprimir[j-1]>>corrimiento));
djinn77 1:abc2af4246eb 692 }
djinn77 1:abc2af4246eb 693 wait(1.0);
djinn77 1:abc2af4246eb 694 }
djinn77 1:abc2af4246eb 695 return;
djinn77 1:abc2af4246eb 696
djinn77 1:abc2af4246eb 697 }
djinn77 1:abc2af4246eb 698
djinn77 1:abc2af4246eb 699 uint16_t* girar(uint16_t* pieza, int posicion){
djinn77 1:abc2af4246eb 700 uint16_t desplazamiento[8]={0};
djinn77 1:abc2af4246eb 701 int j= 0;
djinn77 1:abc2af4246eb 702 for(int i=posicion; i<(posicion+3);i++){ // Inicia un vector auxiliar con solo Ceros
djinn77 1:abc2af4246eb 703 desplazamiento[i]=pieza[j]; // Alamcena los nuevos datos tomados en el vector
djinn77 1:abc2af4246eb 704 j++;
djinn77 1:abc2af4246eb 705 }
djinn77 1:abc2af4246eb 706
djinn77 1:abc2af4246eb 707 return desplazamiento;
djinn77 1:abc2af4246eb 708 }
djinn77 1:abc2af4246eb 709
djinn77 1:abc2af4246eb 710 void perder_tx(){
djinn77 1:abc2af4246eb 711 for(int i=0; i<8;i++){ // Almacena todos lo datos del vector en la posicion que corrimiento en la memoria
djinn77 1:abc2af4246eb 712 borde= &memoria[i];
djinn77 1:abc2af4246eb 713 if(*borde>255){
djinn77 4:4d6b70e3dda3 714
djinn77 4:4d6b70e3dda3 715 for(int r=0; r<8; r++){
djinn77 4:4d6b70e3dda3 716
djinn77 4:4d6b70e3dda3 717 memoria[r]=0;
djinn77 4:4d6b70e3dda3 718
djinn77 4:4d6b70e3dda3 719 }
djinn77 4:4d6b70e3dda3 720
djinn77 1:abc2af4246eb 721 }
djinn77 1:abc2af4246eb 722 }
djinn77 1:abc2af4246eb 723 }
djinn77 1:abc2af4246eb 724
djinn77 1:abc2af4246eb 725 void aum_velocidad_tx(){
djinn77 1:abc2af4246eb 726 velocidad=0.2;
djinn77 2:0c22820ab1d1 727 }
djinn77 2:0c22820ab1d1 728
djinn77 2:0c22820ab1d1 729 void himno_legria(){
djinn77 2:0c22820ab1d1 730
djinn77 2:0c22820ab1d1 731 int i;
djinn77 2:0c22820ab1d1 732 buzzer=0.2;
djinn77 2:0c22820ab1d1 733 for (i=0; i<13; i++) {
djinn77 2:0c22820ab1d1 734 buzzer.period_us(periodos1[i]);
djinn77 2:0c22820ab1d1 735 wait(0.5*duracion1[i]);
djinn77 2:0c22820ab1d1 736 }
djinn77 2:0c22820ab1d1 737 for (i=0; i<13; i++) {
djinn77 2:0c22820ab1d1 738 buzzer.period_us(periodos2[i]);
djinn77 2:0c22820ab1d1 739 wait(0.5*duracion1[i]);
djinn77 2:0c22820ab1d1 740 }
djinn77 2:0c22820ab1d1 741 for (i=0; i<16; i++) {
djinn77 2:0c22820ab1d1 742 buzzer.period_us(periodos3[i]);
djinn77 2:0c22820ab1d1 743 wait(0.5*duracion2[i]);
djinn77 2:0c22820ab1d1 744 }
djinn77 4:4d6b70e3dda3 745 NVIC_SystemReset();
djinn77 5:1bee785cac7f 746 }
djinn77 5:1bee785cac7f 747
djinn77 5:1bee785cac7f 748
djinn77 5:1bee785cac7f 749 // Funciones del carro
djinn77 5:1bee785cac7f 750
djinn77 5:1bee785cac7f 751 void carros(){
djinn77 5:1bee785cac7f 752
djinn77 5:1bee785cac7f 753 while(1){
djinn77 5:1bee785cac7f 754
djinn77 5:1bee785cac7f 755 selec();
djinn77 5:1bee785cac7f 756
djinn77 5:1bee785cac7f 757 }
djinn77 5:1bee785cac7f 758
djinn77 5:1bee785cac7f 759 }
djinn77 5:1bee785cac7f 760 void selec(){
djinn77 5:1bee785cac7f 761
djinn77 5:1bee785cac7f 762 figura=rand()%4;
djinn77 5:1bee785cac7f 763
djinn77 5:1bee785cac7f 764 switch(figura){ //Este switch escoje la figura con que trabajaar
djinn77 5:1bee785cac7f 765 case 0: // carro derecha
djinn77 5:1bee785cac7f 766 nivel = CR_DER;
djinn77 5:1bee785cac7f 767 break;
djinn77 5:1bee785cac7f 768 case 1: // carro izquierda
djinn77 5:1bee785cac7f 769 nivel = CR_IZQ;
djinn77 5:1bee785cac7f 770 break;
djinn77 5:1bee785cac7f 771 case 2: // caja derecha
djinn77 5:1bee785cac7f 772 nivel = CJ_DER;
djinn77 5:1bee785cac7f 773 break;
djinn77 5:1bee785cac7f 774 case 3: // caja izquierda
djinn77 5:1bee785cac7f 775 nivel = CJ_IZQ;
djinn77 5:1bee785cac7f 776 break;
djinn77 5:1bee785cac7f 777 }
djinn77 5:1bee785cac7f 778
djinn77 5:1bee785cac7f 779 juego();
djinn77 5:1bee785cac7f 780
djinn77 5:1bee785cac7f 781 }
djinn77 5:1bee785cac7f 782
djinn77 5:1bee785cac7f 783
djinn77 5:1bee785cac7f 784 void juego(){
djinn77 5:1bee785cac7f 785
djinn77 5:1bee785cac7f 786 jugador=MICARRO;
djinn77 5:1bee785cac7f 787 camino= CALLE;
djinn77 5:1bee785cac7f 788 fail=EQUIS;
djinn77 5:1bee785cac7f 789 //tp.attach(&printstatus,0.2);
djinn77 5:1bee785cac7f 790 enable_abj=1;
djinn77 5:1bee785cac7f 791 enable_der=1;
djinn77 5:1bee785cac7f 792 enable_izq=1;
djinn77 5:1bee785cac7f 793 // Declaracion de Variables de lectura del jostick
djinn77 5:1bee785cac7f 794 float meas_vx;
djinn77 5:1bee785cac7f 795 int i=0;
djinn77 5:1bee785cac7f 796
djinn77 5:1bee785cac7f 797 while(enable_abj){
djinn77 5:1bee785cac7f 798
djinn77 5:1bee785cac7f 799 int j=1; // inicia el contador j en 1
djinn77 5:1bee785cac7f 800
djinn77 5:1bee785cac7f 801 while(j<=8){ //se encarga de seleccionar que posicion del vector imprimira
djinn77 5:1bee785cac7f 802
djinn77 5:1bee785cac7f 803 sendSPI(j, jugador[j-1]|(nivel[j-1]>>i)|camino[j-1]); //Imprime el resultado de aplicar OR a la memoria y al desplamamiento de imprimir
djinn77 5:1bee785cac7f 804 //wait(0.1); // Activar este wait para pruebas de desplazamiento y captura de los datos
djinn77 5:1bee785cac7f 805
djinn77 5:1bee785cac7f 806 if(i==13){ //Detiene el desplazamiento cuando los bits tocan fondo,
djinn77 5:1bee785cac7f 807 enable_abj=0;// desabilitador del ciclo while
djinn77 5:1bee785cac7f 808 }
djinn77 5:1bee785cac7f 809 if((jugador[j-1]&(nivel[j-1]>>i))!=0){
djinn77 5:1bee785cac7f 810
djinn77 5:1bee785cac7f 811 NVIC_SystemReset();
djinn77 5:1bee785cac7f 812
djinn77 5:1bee785cac7f 813 }
djinn77 5:1bee785cac7f 814 j++;
djinn77 5:1bee785cac7f 815 }
djinn77 5:1bee785cac7f 816 wait(velocidad_cr); // espera para tomar el otro valor de lectura
djinn77 5:1bee785cac7f 817 // ----------------------Lectura del jostick-----------------------------
djinn77 5:1bee785cac7f 818
djinn77 5:1bee785cac7f 819 // Lectura de parametros del jostick
djinn77 5:1bee785cac7f 820 meas_vx = vrx.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje X
djinn77 5:1bee785cac7f 821
djinn77 5:1bee785cac7f 822 if (meas_vx < 1600 && enable_izq)
djinn77 5:1bee785cac7f 823 desplazar_izq();
djinn77 5:1bee785cac7f 824 else if (meas_vx > 1700 && enable_der)
djinn77 5:1bee785cac7f 825 desplazar_der();
djinn77 5:1bee785cac7f 826 i++;
djinn77 5:1bee785cac7f 827 pulsador_abj.fall(&aum_velocidad_cr);
djinn77 5:1bee785cac7f 828 }
djinn77 5:1bee785cac7f 829 }
djinn77 5:1bee785cac7f 830
djinn77 5:1bee785cac7f 831 void desplazar_izq(){
djinn77 5:1bee785cac7f 832
djinn77 5:1bee785cac7f 833 enable_der=1;
djinn77 5:1bee785cac7f 834 posicion_fig--;
djinn77 5:1bee785cac7f 835
djinn77 5:1bee785cac7f 836
djinn77 5:1bee785cac7f 837 if(posicion_fig==2)
djinn77 5:1bee785cac7f 838 enable_izq=0;
djinn77 5:1bee785cac7f 839
djinn77 5:1bee785cac7f 840
djinn77 5:1bee785cac7f 841 int izq = jugador[0];
djinn77 5:1bee785cac7f 842 for(int i= 0; i<8;i++){
djinn77 5:1bee785cac7f 843 jugador[i]=jugador[i+1];
djinn77 5:1bee785cac7f 844 }
djinn77 5:1bee785cac7f 845 jugador[7] = izq;
djinn77 5:1bee785cac7f 846
djinn77 5:1bee785cac7f 847 }
djinn77 5:1bee785cac7f 848
djinn77 5:1bee785cac7f 849 void desplazar_der(){
djinn77 5:1bee785cac7f 850
djinn77 5:1bee785cac7f 851 enable_izq=1;
djinn77 5:1bee785cac7f 852 posicion_fig++;
djinn77 5:1bee785cac7f 853
djinn77 5:1bee785cac7f 854 if(posicion_fig==5)
djinn77 5:1bee785cac7f 855 enable_der=0;
djinn77 5:1bee785cac7f 856
djinn77 5:1bee785cac7f 857 int der = jugador[7];
djinn77 5:1bee785cac7f 858 for(int i= 7; i>=0;i--){
djinn77 5:1bee785cac7f 859 jugador[i]=jugador[i-1];
djinn77 5:1bee785cac7f 860 }
djinn77 5:1bee785cac7f 861 jugador[0] = der;
djinn77 5:1bee785cac7f 862
djinn77 5:1bee785cac7f 863 }
djinn77 5:1bee785cac7f 864
djinn77 5:1bee785cac7f 865 void aum_velocidad_cr(){
djinn77 5:1bee785cac7f 866 velocidad_cr=0.2;
djinn77 5:1bee785cac7f 867 }
djinn77 5:1bee785cac7f 868