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