![](/media/cache/profiles/kHsmpCWw_400x400.png.50x50_q85.png)
TETRIS FINAL
Tetris.cpp@0:f15eccb70d1d, 2018-11-16 (annotated)
- Committer:
- djinn77
- Date:
- Fri Nov 16 01:16:46 2018 +0000
- Revision:
- 0:f15eccb70d1d
- Child:
- 1:f9ff8e1c3244
TETRIS FINAL
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
djinn77 | 0:f15eccb70d1d | 1 | #include "mbed.h" |
djinn77 | 0:f15eccb70d1d | 2 | #include "piezas.h" |
djinn77 | 0:f15eccb70d1d | 3 | //#define DEBUG 1 |
djinn77 | 0:f15eccb70d1d | 4 | |
djinn77 | 0:f15eccb70d1d | 5 | //Establecimiento de la comunicacion |
djinn77 | 0:f15eccb70d1d | 6 | Serial pc(USBTX,USBRX); |
djinn77 | 0:f15eccb70d1d | 7 | SPI deviceM(PB_5, PB_4, PB_3); // D4(gris), Ninguno, D3(azul) |
djinn77 | 0:f15eccb70d1d | 8 | //SPI deviceM(PB_15, PB_14, PB_13); |
djinn77 | 0:f15eccb70d1d | 9 | DigitalOut ssel (PA_4); // A2(morado) |
djinn77 | 0:f15eccb70d1d | 10 | //DigitalOut ssel (PB_12); |
djinn77 | 0:f15eccb70d1d | 11 | |
djinn77 | 0:f15eccb70d1d | 12 | //Delcaracion de botones |
djinn77 | 0:f15eccb70d1d | 13 | |
djinn77 | 0:f15eccb70d1d | 14 | // InterruptIn pulsador_izq(A5); |
djinn77 | 0:f15eccb70d1d | 15 | // InterruptIn pulsador_der(A4); |
djinn77 | 0:f15eccb70d1d | 16 | // DigitalIn p_giro(A3); |
djinn77 | 0:f15eccb70d1d | 17 | // DigitalIn obligar_bajar(A0); |
djinn77 | 0:f15eccb70d1d | 18 | |
djinn77 | 0:f15eccb70d1d | 19 | // Definiendo Botones |
djinn77 | 0:f15eccb70d1d | 20 | |
djinn77 | 0:f15eccb70d1d | 21 | AnalogIn vry(A3); // Lee el eje x del jostick |
djinn77 | 0:f15eccb70d1d | 22 | AnalogIn vrx(A4); // Lee el eje y del jostick |
djinn77 | 0:f15eccb70d1d | 23 | DigitalIn sw(A5); // Lee el boton del jostick |
djinn77 | 0:f15eccb70d1d | 24 | |
djinn77 | 0:f15eccb70d1d | 25 | //Declaracion de funciones |
djinn77 | 0:f15eccb70d1d | 26 | void inicializar(); |
djinn77 | 0:f15eccb70d1d | 27 | void sendSPI(uint8_t d1, uint8_t d2); |
djinn77 | 0:f15eccb70d1d | 28 | void captura_datos(); |
djinn77 | 0:f15eccb70d1d | 29 | void read(); |
djinn77 | 0:f15eccb70d1d | 30 | void desplazar(); |
djinn77 | 0:f15eccb70d1d | 31 | void captura_matriz(); |
djinn77 | 0:f15eccb70d1d | 32 | void desplazar_izq(); |
djinn77 | 0:f15eccb70d1d | 33 | void desplazar_der(); |
djinn77 | 0:f15eccb70d1d | 34 | void perder(); |
djinn77 | 0:f15eccb70d1d | 35 | uint16_t* girar(uint16_t* pieza, int posicion); |
djinn77 | 0:f15eccb70d1d | 36 | // Declaracion de variables |
djinn77 | 0:f15eccb70d1d | 37 | int8_t posicion= 0, figura= 0, giro= 0; |
djinn77 | 0:f15eccb70d1d | 38 | uint16_t memoria[8]={0}; |
djinn77 | 0:f15eccb70d1d | 39 | uint16_t* imprimir; |
djinn77 | 0:f15eccb70d1d | 40 | uint16_t *borde=0; |
djinn77 | 0:f15eccb70d1d | 41 | int8_t corrimiento=0; |
djinn77 | 0:f15eccb70d1d | 42 | float meas_vx; |
djinn77 | 0:f15eccb70d1d | 43 | float meas_vy; |
djinn77 | 0:f15eccb70d1d | 44 | |
djinn77 | 0:f15eccb70d1d | 45 | // Delcaraion de limites |
djinn77 | 0:f15eccb70d1d | 46 | int8_t liminf=0, limizq=0, limder=0; |
djinn77 | 0:f15eccb70d1d | 47 | // Habilitadores |
djinn77 | 0:f15eccb70d1d | 48 | int enableizq=1; |
djinn77 | 0:f15eccb70d1d | 49 | int enableder=1; |
djinn77 | 0:f15eccb70d1d | 50 | int bajando=1; |
djinn77 | 0:f15eccb70d1d | 51 | |
djinn77 | 0:f15eccb70d1d | 52 | void debuging(char*s,...){ |
djinn77 | 0:f15eccb70d1d | 53 | |
djinn77 | 0:f15eccb70d1d | 54 | #if DEBUG |
djinn77 | 0:f15eccb70d1d | 55 | pc.printf(s); |
djinn77 | 0:f15eccb70d1d | 56 | #endif |
djinn77 | 0:f15eccb70d1d | 57 | |
djinn77 | 0:f15eccb70d1d | 58 | } |
djinn77 | 0:f15eccb70d1d | 59 | |
djinn77 | 0:f15eccb70d1d | 60 | // FUNCION EL CUAL ENVIA EL DATO JUNTO CON LA DIRECCION DE LA COLUMNA CORRESPONDIENTE AL PRIMER DISPOSITIVO |
djinn77 | 0:f15eccb70d1d | 61 | void sendSPI(uint8_t d1, uint8_t d2) |
djinn77 | 0:f15eccb70d1d | 62 | { |
djinn77 | 0:f15eccb70d1d | 63 | deviceM.unlock(); |
djinn77 | 0:f15eccb70d1d | 64 | ssel=0; // SELECCIONA EL PRIMER DISPOSOTIVO |
djinn77 | 0:f15eccb70d1d | 65 | deviceM.write(d1); // ESCRIBE EL ADDRESS |
djinn77 | 0:f15eccb70d1d | 66 | deviceM.write(d2); // ESCRIBE EL DATA |
djinn77 | 0:f15eccb70d1d | 67 | ssel=1; |
djinn77 | 0:f15eccb70d1d | 68 | deviceM.lock(); |
djinn77 | 0:f15eccb70d1d | 69 | }; |
djinn77 | 0:f15eccb70d1d | 70 | |
djinn77 | 0:f15eccb70d1d | 71 | |
djinn77 | 0:f15eccb70d1d | 72 | int main() { |
djinn77 | 0:f15eccb70d1d | 73 | inicializar(); // Inicializa el programa para establecer los modos de trabajo liminosidad |
djinn77 | 0:f15eccb70d1d | 74 | while(1){ |
djinn77 | 0:f15eccb70d1d | 75 | captura_datos(); // Inicia la lectura de la informacion |
djinn77 | 0:f15eccb70d1d | 76 | perder(); |
djinn77 | 0:f15eccb70d1d | 77 | } |
djinn77 | 0:f15eccb70d1d | 78 | } |
djinn77 | 0:f15eccb70d1d | 79 | |
djinn77 | 0:f15eccb70d1d | 80 | void captura_datos(){ |
djinn77 | 0:f15eccb70d1d | 81 | |
djinn77 | 0:f15eccb70d1d | 82 | pc.baud(38400); //Inicializa la velocidad de comunicacion |
djinn77 | 0:f15eccb70d1d | 83 | /*//----------------------------------------- |
djinn77 | 0:f15eccb70d1d | 84 | char inicio=0,final=0; |
djinn77 | 0:f15eccb70d1d | 85 | figura=0; |
djinn77 | 0:f15eccb70d1d | 86 | giro=0; |
djinn77 | 0:f15eccb70d1d | 87 | posicion=0; |
djinn77 | 0:f15eccb70d1d | 88 | |
djinn77 | 0:f15eccb70d1d | 89 | debuging("\n Ingrese el inicio del comando. "); |
djinn77 | 0:f15eccb70d1d | 90 | inicio=pc.getc(); |
djinn77 | 0:f15eccb70d1d | 91 | debuging("\n Ingrese la Figura. "); |
djinn77 | 0:f15eccb70d1d | 92 | figura=pc.getc(); |
djinn77 | 0:f15eccb70d1d | 93 | debuging("\n Seleccione el giro. "); |
djinn77 | 0:f15eccb70d1d | 94 | giro=pc.getc(); |
djinn77 | 0:f15eccb70d1d | 95 | debuging("\n Seleccione la posicion. "); |
djinn77 | 0:f15eccb70d1d | 96 | posicion=pc.getc(); |
djinn77 | 0:f15eccb70d1d | 97 | debuging("\n Ingrese el final del comando. "); |
djinn77 | 0:f15eccb70d1d | 98 | final=pc.getc(); |
djinn77 | 0:f15eccb70d1d | 99 | |
djinn77 | 0:f15eccb70d1d | 100 | |
djinn77 | 0:f15eccb70d1d | 101 | if(inicio!= '<' || final != '>'){ |
djinn77 | 0:f15eccb70d1d | 102 | |
djinn77 | 0:f15eccb70d1d | 103 | debuging("\n Error en el comando."); |
djinn77 | 0:f15eccb70d1d | 104 | |
djinn77 | 0:f15eccb70d1d | 105 | }else{ |
djinn77 | 0:f15eccb70d1d | 106 | |
djinn77 | 0:f15eccb70d1d | 107 | read(); |
djinn77 | 0:f15eccb70d1d | 108 | |
djinn77 | 0:f15eccb70d1d | 109 | } |
djinn77 | 0:f15eccb70d1d | 110 | */ |
djinn77 | 0:f15eccb70d1d | 111 | |
djinn77 | 0:f15eccb70d1d | 112 | ///*--------------------figuras con random------------------ |
djinn77 | 0:f15eccb70d1d | 113 | figura=0; |
djinn77 | 0:f15eccb70d1d | 114 | giro=0; |
djinn77 | 0:f15eccb70d1d | 115 | figura=rand()%5; |
djinn77 | 0:f15eccb70d1d | 116 | giro=rand()%5; |
djinn77 | 0:f15eccb70d1d | 117 | posicion=rand()%6;; |
djinn77 | 0:f15eccb70d1d | 118 | read(); |
djinn77 | 0:f15eccb70d1d | 119 | //*/-------------------------------------------------------- |
djinn77 | 0:f15eccb70d1d | 120 | |
djinn77 | 0:f15eccb70d1d | 121 | |
djinn77 | 0:f15eccb70d1d | 122 | |
djinn77 | 0:f15eccb70d1d | 123 | |
djinn77 | 0:f15eccb70d1d | 124 | } |
djinn77 | 0:f15eccb70d1d | 125 | |
djinn77 | 0:f15eccb70d1d | 126 | void inicializar(){ //INICIALIZA LA MATRIZ |
djinn77 | 0:f15eccb70d1d | 127 | |
djinn77 | 0:f15eccb70d1d | 128 | sendSPI(0x0c,1); |
djinn77 | 0:f15eccb70d1d | 129 | sendSPI(0x0b,7); |
djinn77 | 0:f15eccb70d1d | 130 | sendSPI(0x09,0); |
djinn77 | 0:f15eccb70d1d | 131 | sendSPI(0x0A,0x00); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ |
djinn77 | 0:f15eccb70d1d | 132 | int i; |
djinn77 | 0:f15eccb70d1d | 133 | for (i=0;i<2;i++){ |
djinn77 | 0:f15eccb70d1d | 134 | sendSPI(0x0F,1); |
djinn77 | 0:f15eccb70d1d | 135 | wait (0.5); |
djinn77 | 0:f15eccb70d1d | 136 | sendSPI(0x0f,0); |
djinn77 | 0:f15eccb70d1d | 137 | wait (0.5); |
djinn77 | 0:f15eccb70d1d | 138 | } |
djinn77 | 0:f15eccb70d1d | 139 | |
djinn77 | 0:f15eccb70d1d | 140 | for (int j= 1; j<=8;j++){ // limpia la pantalla al encenderce o reiniarcea asi |
djinn77 | 0:f15eccb70d1d | 141 | //no quedan leds encendidos cuando se ejecute el programa nuevamente |
djinn77 | 0:f15eccb70d1d | 142 | |
djinn77 | 0:f15eccb70d1d | 143 | sendSPI(j, 0x00); //pone cada columna y vecto en blanco al inicializar |
djinn77 | 0:f15eccb70d1d | 144 | } |
djinn77 | 0:f15eccb70d1d | 145 | } |
djinn77 | 0:f15eccb70d1d | 146 | |
djinn77 | 0:f15eccb70d1d | 147 | void read(){ |
djinn77 | 0:f15eccb70d1d | 148 | |
djinn77 | 0:f15eccb70d1d | 149 | switch(figura){ //Este switch escoje la figura con que trabajaar |
djinn77 | 0:f15eccb70d1d | 150 | case 0: // L |
djinn77 | 0:f15eccb70d1d | 151 | if(giro == 0) |
djinn77 | 0:f15eccb70d1d | 152 | imprimir = PZA_L,liminf=7, limizq=6, limder=0; |
djinn77 | 0:f15eccb70d1d | 153 | if(giro == 1) |
djinn77 | 0:f15eccb70d1d | 154 | imprimir = PZA_LDN,liminf=7, limizq=5, limder=0; |
djinn77 | 0:f15eccb70d1d | 155 | if(giro == 2) |
djinn77 | 0:f15eccb70d1d | 156 | imprimir = PZA_LDO,liminf=7, limizq=5, limder=-1; |
djinn77 | 0:f15eccb70d1d | 157 | if(giro == 3) |
djinn77 | 0:f15eccb70d1d | 158 | imprimir = PZA_LDD,liminf=8, limizq=5, limder=0; |
djinn77 | 0:f15eccb70d1d | 159 | break; |
djinn77 | 0:f15eccb70d1d | 160 | case 1://T |
djinn77 | 0:f15eccb70d1d | 161 | if(giro == 0) |
djinn77 | 0:f15eccb70d1d | 162 | imprimir = PZA_T,liminf=8, limizq=5, limder=0; |
djinn77 | 0:f15eccb70d1d | 163 | if(giro == 1) |
djinn77 | 0:f15eccb70d1d | 164 | imprimir = PZA_TN,liminf=7, limizq=6, limder=0; |
djinn77 | 0:f15eccb70d1d | 165 | if(giro == 2) |
djinn77 | 0:f15eccb70d1d | 166 | imprimir = PZA_TO,liminf=7, limizq=5, limder=0; |
djinn77 | 0:f15eccb70d1d | 167 | if(giro == 3) |
djinn77 | 0:f15eccb70d1d | 168 | imprimir = PZA_TD,liminf=7, limizq=5, limder=-1; |
djinn77 | 0:f15eccb70d1d | 169 | break; |
djinn77 | 0:f15eccb70d1d | 170 | case 2://I |
djinn77 | 0:f15eccb70d1d | 171 | if(giro == 0 || giro == 2) |
djinn77 | 0:f15eccb70d1d | 172 | imprimir = PZA_I,liminf=7, limizq=6, limder=-1; |
djinn77 | 0:f15eccb70d1d | 173 | if(giro == 1 || giro == 3) |
djinn77 | 0:f15eccb70d1d | 174 | imprimir = PZA_IR,liminf=8, limizq=5, limder=0; |
djinn77 | 0:f15eccb70d1d | 175 | break; |
djinn77 | 0:f15eccb70d1d | 176 | case 3://Cuadrado |
djinn77 | 0:f15eccb70d1d | 177 | if(giro == 0 || giro == 1 || giro == 2 || giro == 3) |
djinn77 | 0:f15eccb70d1d | 178 | imprimir = PZA_C,liminf=8, limizq=6, limder=0; |
djinn77 | 0:f15eccb70d1d | 179 | break; |
djinn77 | 0:f15eccb70d1d | 180 | case 4: |
djinn77 | 0:f15eccb70d1d | 181 | if(giro == 0 || giro == 2) |
djinn77 | 0:f15eccb70d1d | 182 | imprimir = PZA_Z,liminf=8, limizq=5, limder=0; |
djinn77 | 0:f15eccb70d1d | 183 | if(giro == 1 || giro == 3) |
djinn77 | 0:f15eccb70d1d | 184 | imprimir = PZA_ZN,liminf=7, limizq=6, limder=0; |
djinn77 | 0:f15eccb70d1d | 185 | break; |
djinn77 | 0:f15eccb70d1d | 186 | default: |
djinn77 | 0:f15eccb70d1d | 187 | imprimir = VACIO; |
djinn77 | 0:f15eccb70d1d | 188 | break; |
djinn77 | 0:f15eccb70d1d | 189 | } |
djinn77 | 0:f15eccb70d1d | 190 | // pc.printf("\n limite inferior read %d\n ",liminf); |
djinn77 | 0:f15eccb70d1d | 191 | desplazar(); |
djinn77 | 0:f15eccb70d1d | 192 | } |
djinn77 | 0:f15eccb70d1d | 193 | void desplazar(){ |
djinn77 | 0:f15eccb70d1d | 194 | |
djinn77 | 0:f15eccb70d1d | 195 | uint16_t desplazamiento[8]={0}; // Inicia un vector auxiliar con solo Ceros |
djinn77 | 0:f15eccb70d1d | 196 | int j= 0; |
djinn77 | 0:f15eccb70d1d | 197 | for(int i=posicion; i<(posicion+3);i++){ // Inicia un vector auxiliar con solo Ceros |
djinn77 | 0:f15eccb70d1d | 198 | desplazamiento[i]=imprimir[j]; // Alamcena los nuevos datos tomados en el vector |
djinn77 | 0:f15eccb70d1d | 199 | j++; |
djinn77 | 0:f15eccb70d1d | 200 | } |
djinn77 | 0:f15eccb70d1d | 201 | imprimir=desplazamiento; |
djinn77 | 0:f15eccb70d1d | 202 | captura_matriz(); |
djinn77 | 0:f15eccb70d1d | 203 | } |
djinn77 | 0:f15eccb70d1d | 204 | |
djinn77 | 0:f15eccb70d1d | 205 | void captura_matriz(){ |
djinn77 | 0:f15eccb70d1d | 206 | |
djinn77 | 0:f15eccb70d1d | 207 | int i=0; // inicia el contador i en 0 |
djinn77 | 0:f15eccb70d1d | 208 | int enable=1; |
djinn77 | 0:f15eccb70d1d | 209 | enableizq=1; |
djinn77 | 0:f15eccb70d1d | 210 | enableder=1; |
djinn77 | 0:f15eccb70d1d | 211 | bajando=1; |
djinn77 | 0:f15eccb70d1d | 212 | float velocidad=1.0; |
djinn77 | 0:f15eccb70d1d | 213 | while(enable){ //se encarga de desplazar los bits dentro del vector |
djinn77 | 0:f15eccb70d1d | 214 | //pc.printf("\n1- conteo del corriemiento:\n %d",i); |
djinn77 | 0:f15eccb70d1d | 215 | corrimiento=i; |
djinn77 | 0:f15eccb70d1d | 216 | int j=1; // inicia el contador j en 1 |
djinn77 | 0:f15eccb70d1d | 217 | while(j<=8){ //se encarga de seleccionar que posicion del vector imprimira |
djinn77 | 0:f15eccb70d1d | 218 | |
djinn77 | 0:f15eccb70d1d | 219 | sendSPI(j, memoria[j-1]|(imprimir[j-1]>>i)); //Imprime el resultado de aplicar OR a la memoria y al desplamamiento de imprimir |
djinn77 | 0:f15eccb70d1d | 220 | //wait(0.1); // Activar este wait para pruebas de desplazamiento y captura de los datos |
djinn77 | 0:f15eccb70d1d | 221 | |
djinn77 | 0:f15eccb70d1d | 222 | if(i==liminf || (memoria[j-1]&(imprimir[j-1]>>i+1))!=0){ //Detiene el desplazamiento cuando los bits tocan fondo, |
djinn77 | 0:f15eccb70d1d | 223 | enable=0;// desabilitador del ciclo while |
djinn77 | 0:f15eccb70d1d | 224 | bajando=0; |
djinn77 | 0:f15eccb70d1d | 225 | for(int k=0; k<8;k++){ // Almacena todos lo datos del vector en la posicion que corrimiento en la memoria |
djinn77 | 0:f15eccb70d1d | 226 | memoria[k]= memoria[k]|(imprimir[k]>>i); |
djinn77 | 0:f15eccb70d1d | 227 | } |
djinn77 | 0:f15eccb70d1d | 228 | |
djinn77 | 0:f15eccb70d1d | 229 | } |
djinn77 | 0:f15eccb70d1d | 230 | j++; |
djinn77 | 0:f15eccb70d1d | 231 | } |
djinn77 | 0:f15eccb70d1d | 232 | wait(velocidad); // espera para tomar el otro valor de lectura |
djinn77 | 0:f15eccb70d1d | 233 | // ----------------------Lectura del jostick----------------------------- |
djinn77 | 0:f15eccb70d1d | 234 | |
djinn77 | 0:f15eccb70d1d | 235 | meas_vx = vrx.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje X |
djinn77 | 0:f15eccb70d1d | 236 | meas_vy = vry.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje Y |
djinn77 | 0:f15eccb70d1d | 237 | |
djinn77 | 0:f15eccb70d1d | 238 | //------ realiza el corriemiento del vector hacia la izq y der respectivamente. |
djinn77 | 0:f15eccb70d1d | 239 | |
djinn77 | 0:f15eccb70d1d | 240 | if (meas_vx > 1700 && (posicion < limizq)) // si se cumple esta condicion el jugador se desplaza a la izq |
djinn77 | 0:f15eccb70d1d | 241 | desplazar_izq(); |
djinn77 | 0:f15eccb70d1d | 242 | else if (meas_vx < 1600 && (posicion > limder)) // si se cumple esta condicion el jugador se desplaza a la der |
djinn77 | 0:f15eccb70d1d | 243 | desplazar_der(); |
djinn77 | 0:f15eccb70d1d | 244 | |
djinn77 | 0:f15eccb70d1d | 245 | |
djinn77 | 0:f15eccb70d1d | 246 | //-----------------------Giro de la pieza-------------------------------- |
djinn77 | 0:f15eccb70d1d | 247 | |
djinn77 | 0:f15eccb70d1d | 248 | if(meas_vy < 1600){ |
djinn77 | 0:f15eccb70d1d | 249 | giro++; |
djinn77 | 0:f15eccb70d1d | 250 | if(giro ==4){ |
djinn77 | 0:f15eccb70d1d | 251 | giro=0; |
djinn77 | 0:f15eccb70d1d | 252 | } |
djinn77 | 0:f15eccb70d1d | 253 | switch(figura){ |
djinn77 | 0:f15eccb70d1d | 254 | case 0: // L |
djinn77 | 0:f15eccb70d1d | 255 | if(giro == 0) |
djinn77 | 0:f15eccb70d1d | 256 | imprimir= girar(PZA_L, posicion),liminf=7, limizq=6, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 257 | if(giro == 1) |
djinn77 | 0:f15eccb70d1d | 258 | imprimir= girar(PZA_LDN, posicion),liminf=7, limizq=5, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 259 | if(giro == 2) |
djinn77 | 0:f15eccb70d1d | 260 | imprimir= girar(PZA_LDO, posicion),liminf=7, limizq=5, limder=-1,i--; |
djinn77 | 0:f15eccb70d1d | 261 | if(giro == 3) |
djinn77 | 0:f15eccb70d1d | 262 | imprimir=girar(PZA_LDD, posicion),liminf=8, limizq=5, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 263 | break; |
djinn77 | 0:f15eccb70d1d | 264 | case 1://T |
djinn77 | 0:f15eccb70d1d | 265 | if(giro == 0) |
djinn77 | 0:f15eccb70d1d | 266 | imprimir= girar(PZA_T, posicion),liminf=8, limizq=5, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 267 | if(giro == 1) |
djinn77 | 0:f15eccb70d1d | 268 | imprimir= girar(PZA_TN, posicion),liminf=7, limizq=6, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 269 | if(giro == 2) |
djinn77 | 0:f15eccb70d1d | 270 | imprimir= girar(PZA_TO, posicion),liminf=7, limizq=5, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 271 | if(giro == 3) |
djinn77 | 0:f15eccb70d1d | 272 | imprimir= girar(PZA_TD, posicion),liminf=7, limizq=5, limder=-1,i--; |
djinn77 | 0:f15eccb70d1d | 273 | break; |
djinn77 | 0:f15eccb70d1d | 274 | case 2://I |
djinn77 | 0:f15eccb70d1d | 275 | if(giro == 0 || giro == 2) |
djinn77 | 0:f15eccb70d1d | 276 | imprimir= girar(PZA_I, posicion),liminf=7, limizq=6, limder=-1,i--; |
djinn77 | 0:f15eccb70d1d | 277 | if(giro == 1 || giro == 3) |
djinn77 | 0:f15eccb70d1d | 278 | imprimir=girar(PZA_IR, posicion),liminf=8, limizq=5, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 279 | break; |
djinn77 | 0:f15eccb70d1d | 280 | case 3://Cuadrado |
djinn77 | 0:f15eccb70d1d | 281 | if(giro == 0 || giro == 1 || giro == 2 || giro == 3) |
djinn77 | 0:f15eccb70d1d | 282 | imprimir= girar(PZA_C, posicion),liminf=8, limizq=6, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 283 | break; |
djinn77 | 0:f15eccb70d1d | 284 | case 4: //Z |
djinn77 | 0:f15eccb70d1d | 285 | if(giro == 0 || giro == 2) |
djinn77 | 0:f15eccb70d1d | 286 | imprimir= girar(PZA_Z, posicion),liminf=8, limizq=5, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 287 | if(giro == 1 || giro == 3) |
djinn77 | 0:f15eccb70d1d | 288 | imprimir= girar(PZA_ZN, posicion),liminf=7, limizq=6, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 289 | break; |
djinn77 | 0:f15eccb70d1d | 290 | |
djinn77 | 0:f15eccb70d1d | 291 | } |
djinn77 | 0:f15eccb70d1d | 292 | |
djinn77 | 0:f15eccb70d1d | 293 | } |
djinn77 | 0:f15eccb70d1d | 294 | |
djinn77 | 0:f15eccb70d1d | 295 | //--------------------------------------------------------------- |
djinn77 | 0:f15eccb70d1d | 296 | if(meas_vy > 1700){ |
djinn77 | 0:f15eccb70d1d | 297 | velocidad=0.2; |
djinn77 | 0:f15eccb70d1d | 298 | } |
djinn77 | 0:f15eccb70d1d | 299 | i++; |
djinn77 | 0:f15eccb70d1d | 300 | } |
djinn77 | 0:f15eccb70d1d | 301 | |
djinn77 | 0:f15eccb70d1d | 302 | } |
djinn77 | 0:f15eccb70d1d | 303 | |
djinn77 | 0:f15eccb70d1d | 304 | void desplazar_izq(){ |
djinn77 | 0:f15eccb70d1d | 305 | posicion++; |
djinn77 | 0:f15eccb70d1d | 306 | |
djinn77 | 0:f15eccb70d1d | 307 | for(int i=7; i >=0; i--){ |
djinn77 | 0:f15eccb70d1d | 308 | imprimir[i]=imprimir[i-1]; |
djinn77 | 0:f15eccb70d1d | 309 | if(i==0){ |
djinn77 | 0:f15eccb70d1d | 310 | imprimir[i]=0; |
djinn77 | 0:f15eccb70d1d | 311 | } |
djinn77 | 0:f15eccb70d1d | 312 | } |
djinn77 | 0:f15eccb70d1d | 313 | return; |
djinn77 | 0:f15eccb70d1d | 314 | } |
djinn77 | 0:f15eccb70d1d | 315 | |
djinn77 | 0:f15eccb70d1d | 316 | void desplazar_der(){ |
djinn77 | 0:f15eccb70d1d | 317 | posicion--; |
djinn77 | 0:f15eccb70d1d | 318 | for(int i=0; i <8; i++){ |
djinn77 | 0:f15eccb70d1d | 319 | imprimir[i]=imprimir[i+1]; |
djinn77 | 0:f15eccb70d1d | 320 | if(i==7){ |
djinn77 | 0:f15eccb70d1d | 321 | imprimir[i]=0; |
djinn77 | 0:f15eccb70d1d | 322 | } |
djinn77 | 0:f15eccb70d1d | 323 | } |
djinn77 | 0:f15eccb70d1d | 324 | return; |
djinn77 | 0:f15eccb70d1d | 325 | } |
djinn77 | 0:f15eccb70d1d | 326 | |
djinn77 | 0:f15eccb70d1d | 327 | uint16_t* girar(uint16_t* pieza, int posicion){ |
djinn77 | 0:f15eccb70d1d | 328 | uint16_t desplazamiento[8]={0}; |
djinn77 | 0:f15eccb70d1d | 329 | int j= 0; |
djinn77 | 0:f15eccb70d1d | 330 | for(int i=posicion; i<(posicion+3);i++){ // Inicia un vector auxiliar con solo Ceros |
djinn77 | 0:f15eccb70d1d | 331 | desplazamiento[i]=pieza[j]; // Alamcena los nuevos datos tomados en el vector |
djinn77 | 0:f15eccb70d1d | 332 | j++; |
djinn77 | 0:f15eccb70d1d | 333 | } |
djinn77 | 0:f15eccb70d1d | 334 | |
djinn77 | 0:f15eccb70d1d | 335 | return desplazamiento; |
djinn77 | 0:f15eccb70d1d | 336 | } |
djinn77 | 0:f15eccb70d1d | 337 | |
djinn77 | 0:f15eccb70d1d | 338 | void perder(){ |
djinn77 | 0:f15eccb70d1d | 339 | for(int i=0; i<8;i++){ // Almacena todos lo datos del vector en la posicion que corrimiento en la memoria |
djinn77 | 0:f15eccb70d1d | 340 | borde= &memoria[i]; |
djinn77 | 0:f15eccb70d1d | 341 | if(*borde>255){ |
djinn77 | 0:f15eccb70d1d | 342 | NVIC_SystemReset(); |
djinn77 | 0:f15eccb70d1d | 343 | } |
djinn77 | 0:f15eccb70d1d | 344 | } |
djinn77 | 0:f15eccb70d1d | 345 | } |