Yosef Guevara Salamanca
/
TETRIS_3
TETRIS FINAL
Tetris.cpp@1:f9ff8e1c3244, 2018-11-16 (annotated)
- Committer:
- djinn77
- Date:
- Fri Nov 16 04:15:36 2018 +0000
- Revision:
- 1:f9ff8e1c3244
- Parent:
- 0:f15eccb70d1d
- Child:
- 2:cee98cfbd679
esta bueno hasta aqui
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 | 1:f9ff8e1c3244 | 23 | InterruptIn pulsador_abj(D8); // 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 | 1:f9ff8e1c3244 | 34 | void aum_velocidad(); |
djinn77 | 0:f15eccb70d1d | 35 | void perder(); |
djinn77 | 0:f15eccb70d1d | 36 | uint16_t* girar(uint16_t* pieza, int posicion); |
djinn77 | 0:f15eccb70d1d | 37 | // Declaracion de variables |
djinn77 | 0:f15eccb70d1d | 38 | int8_t posicion= 0, figura= 0, giro= 0; |
djinn77 | 0:f15eccb70d1d | 39 | uint16_t memoria[8]={0}; |
djinn77 | 0:f15eccb70d1d | 40 | uint16_t* imprimir; |
djinn77 | 0:f15eccb70d1d | 41 | uint16_t *borde=0; |
djinn77 | 0:f15eccb70d1d | 42 | int8_t corrimiento=0; |
djinn77 | 0:f15eccb70d1d | 43 | float meas_vx; |
djinn77 | 0:f15eccb70d1d | 44 | float meas_vy; |
djinn77 | 1:f9ff8e1c3244 | 45 | float velocidad=1.0; |
djinn77 | 0:f15eccb70d1d | 46 | // Delcaraion de limites |
djinn77 | 0:f15eccb70d1d | 47 | int8_t liminf=0, limizq=0, limder=0; |
djinn77 | 0:f15eccb70d1d | 48 | // Habilitadores |
djinn77 | 0:f15eccb70d1d | 49 | int enableizq=1; |
djinn77 | 0:f15eccb70d1d | 50 | int enableder=1; |
djinn77 | 0:f15eccb70d1d | 51 | int bajando=1; |
djinn77 | 0:f15eccb70d1d | 52 | |
djinn77 | 0:f15eccb70d1d | 53 | void debuging(char*s,...){ |
djinn77 | 0:f15eccb70d1d | 54 | |
djinn77 | 0:f15eccb70d1d | 55 | #if DEBUG |
djinn77 | 0:f15eccb70d1d | 56 | pc.printf(s); |
djinn77 | 0:f15eccb70d1d | 57 | #endif |
djinn77 | 0:f15eccb70d1d | 58 | |
djinn77 | 0:f15eccb70d1d | 59 | } |
djinn77 | 0:f15eccb70d1d | 60 | |
djinn77 | 0:f15eccb70d1d | 61 | // FUNCION EL CUAL ENVIA EL DATO JUNTO CON LA DIRECCION DE LA COLUMNA CORRESPONDIENTE AL PRIMER DISPOSITIVO |
djinn77 | 0:f15eccb70d1d | 62 | void sendSPI(uint8_t d1, uint8_t d2) |
djinn77 | 0:f15eccb70d1d | 63 | { |
djinn77 | 0:f15eccb70d1d | 64 | deviceM.unlock(); |
djinn77 | 0:f15eccb70d1d | 65 | ssel=0; // SELECCIONA EL PRIMER DISPOSOTIVO |
djinn77 | 0:f15eccb70d1d | 66 | deviceM.write(d1); // ESCRIBE EL ADDRESS |
djinn77 | 0:f15eccb70d1d | 67 | deviceM.write(d2); // ESCRIBE EL DATA |
djinn77 | 0:f15eccb70d1d | 68 | ssel=1; |
djinn77 | 0:f15eccb70d1d | 69 | deviceM.lock(); |
djinn77 | 0:f15eccb70d1d | 70 | }; |
djinn77 | 0:f15eccb70d1d | 71 | |
djinn77 | 0:f15eccb70d1d | 72 | |
djinn77 | 0:f15eccb70d1d | 73 | int main() { |
djinn77 | 0:f15eccb70d1d | 74 | inicializar(); // Inicializa el programa para establecer los modos de trabajo liminosidad |
djinn77 | 0:f15eccb70d1d | 75 | while(1){ |
djinn77 | 0:f15eccb70d1d | 76 | captura_datos(); // Inicia la lectura de la informacion |
djinn77 | 0:f15eccb70d1d | 77 | perder(); |
djinn77 | 0:f15eccb70d1d | 78 | } |
djinn77 | 0:f15eccb70d1d | 79 | } |
djinn77 | 0:f15eccb70d1d | 80 | |
djinn77 | 0:f15eccb70d1d | 81 | void captura_datos(){ |
djinn77 | 0:f15eccb70d1d | 82 | |
djinn77 | 0:f15eccb70d1d | 83 | pc.baud(38400); //Inicializa la velocidad de comunicacion |
djinn77 | 0:f15eccb70d1d | 84 | /*//----------------------------------------- |
djinn77 | 0:f15eccb70d1d | 85 | char inicio=0,final=0; |
djinn77 | 0:f15eccb70d1d | 86 | figura=0; |
djinn77 | 0:f15eccb70d1d | 87 | giro=0; |
djinn77 | 0:f15eccb70d1d | 88 | posicion=0; |
djinn77 | 0:f15eccb70d1d | 89 | |
djinn77 | 0:f15eccb70d1d | 90 | debuging("\n Ingrese el inicio del comando. "); |
djinn77 | 0:f15eccb70d1d | 91 | inicio=pc.getc(); |
djinn77 | 0:f15eccb70d1d | 92 | debuging("\n Ingrese la Figura. "); |
djinn77 | 0:f15eccb70d1d | 93 | figura=pc.getc(); |
djinn77 | 0:f15eccb70d1d | 94 | debuging("\n Seleccione el giro. "); |
djinn77 | 0:f15eccb70d1d | 95 | giro=pc.getc(); |
djinn77 | 0:f15eccb70d1d | 96 | debuging("\n Seleccione la posicion. "); |
djinn77 | 0:f15eccb70d1d | 97 | posicion=pc.getc(); |
djinn77 | 0:f15eccb70d1d | 98 | debuging("\n Ingrese el final del comando. "); |
djinn77 | 0:f15eccb70d1d | 99 | final=pc.getc(); |
djinn77 | 0:f15eccb70d1d | 100 | |
djinn77 | 0:f15eccb70d1d | 101 | |
djinn77 | 0:f15eccb70d1d | 102 | if(inicio!= '<' || final != '>'){ |
djinn77 | 0:f15eccb70d1d | 103 | |
djinn77 | 0:f15eccb70d1d | 104 | debuging("\n Error en el comando."); |
djinn77 | 0:f15eccb70d1d | 105 | |
djinn77 | 0:f15eccb70d1d | 106 | }else{ |
djinn77 | 0:f15eccb70d1d | 107 | |
djinn77 | 0:f15eccb70d1d | 108 | read(); |
djinn77 | 0:f15eccb70d1d | 109 | |
djinn77 | 0:f15eccb70d1d | 110 | } |
djinn77 | 1:f9ff8e1c3244 | 111 | *///------------------------------------------------------ |
djinn77 | 0:f15eccb70d1d | 112 | |
djinn77 | 1:f9ff8e1c3244 | 113 | //--------------------figuras con random------------------ |
djinn77 | 0:f15eccb70d1d | 114 | figura=0; |
djinn77 | 0:f15eccb70d1d | 115 | giro=0; |
djinn77 | 0:f15eccb70d1d | 116 | figura=rand()%5; |
djinn77 | 0:f15eccb70d1d | 117 | giro=rand()%5; |
djinn77 | 0:f15eccb70d1d | 118 | posicion=rand()%6;; |
djinn77 | 0:f15eccb70d1d | 119 | read(); |
djinn77 | 1:f9ff8e1c3244 | 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 | |
djinn77 | 0:f15eccb70d1d | 127 | void inicializar(){ //INICIALIZA LA MATRIZ |
djinn77 | 0:f15eccb70d1d | 128 | |
djinn77 | 0:f15eccb70d1d | 129 | sendSPI(0x0c,1); |
djinn77 | 0:f15eccb70d1d | 130 | sendSPI(0x0b,7); |
djinn77 | 0:f15eccb70d1d | 131 | sendSPI(0x09,0); |
djinn77 | 0:f15eccb70d1d | 132 | sendSPI(0x0A,0x00); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ |
djinn77 | 0:f15eccb70d1d | 133 | int i; |
djinn77 | 0:f15eccb70d1d | 134 | for (i=0;i<2;i++){ |
djinn77 | 0:f15eccb70d1d | 135 | sendSPI(0x0F,1); |
djinn77 | 0:f15eccb70d1d | 136 | wait (0.5); |
djinn77 | 0:f15eccb70d1d | 137 | sendSPI(0x0f,0); |
djinn77 | 0:f15eccb70d1d | 138 | wait (0.5); |
djinn77 | 0:f15eccb70d1d | 139 | } |
djinn77 | 0:f15eccb70d1d | 140 | |
djinn77 | 0:f15eccb70d1d | 141 | for (int j= 1; j<=8;j++){ // limpia la pantalla al encenderce o reiniarcea asi |
djinn77 | 0:f15eccb70d1d | 142 | //no quedan leds encendidos cuando se ejecute el programa nuevamente |
djinn77 | 0:f15eccb70d1d | 143 | |
djinn77 | 0:f15eccb70d1d | 144 | sendSPI(j, 0x00); //pone cada columna y vecto en blanco al inicializar |
djinn77 | 0:f15eccb70d1d | 145 | } |
djinn77 | 0:f15eccb70d1d | 146 | } |
djinn77 | 0:f15eccb70d1d | 147 | |
djinn77 | 0:f15eccb70d1d | 148 | void read(){ |
djinn77 | 0:f15eccb70d1d | 149 | |
djinn77 | 0:f15eccb70d1d | 150 | switch(figura){ //Este switch escoje la figura con que trabajaar |
djinn77 | 0:f15eccb70d1d | 151 | case 0: // L |
djinn77 | 0:f15eccb70d1d | 152 | if(giro == 0) |
djinn77 | 0:f15eccb70d1d | 153 | imprimir = PZA_L,liminf=7, limizq=6, limder=0; |
djinn77 | 0:f15eccb70d1d | 154 | if(giro == 1) |
djinn77 | 0:f15eccb70d1d | 155 | imprimir = PZA_LDN,liminf=7, limizq=5, limder=0; |
djinn77 | 0:f15eccb70d1d | 156 | if(giro == 2) |
djinn77 | 0:f15eccb70d1d | 157 | imprimir = PZA_LDO,liminf=7, limizq=5, limder=-1; |
djinn77 | 0:f15eccb70d1d | 158 | if(giro == 3) |
djinn77 | 0:f15eccb70d1d | 159 | imprimir = PZA_LDD,liminf=8, limizq=5, limder=0; |
djinn77 | 0:f15eccb70d1d | 160 | break; |
djinn77 | 0:f15eccb70d1d | 161 | case 1://T |
djinn77 | 0:f15eccb70d1d | 162 | if(giro == 0) |
djinn77 | 0:f15eccb70d1d | 163 | imprimir = PZA_T,liminf=8, limizq=5, limder=0; |
djinn77 | 0:f15eccb70d1d | 164 | if(giro == 1) |
djinn77 | 0:f15eccb70d1d | 165 | imprimir = PZA_TN,liminf=7, limizq=6, limder=0; |
djinn77 | 0:f15eccb70d1d | 166 | if(giro == 2) |
djinn77 | 0:f15eccb70d1d | 167 | imprimir = PZA_TO,liminf=7, limizq=5, limder=0; |
djinn77 | 0:f15eccb70d1d | 168 | if(giro == 3) |
djinn77 | 0:f15eccb70d1d | 169 | imprimir = PZA_TD,liminf=7, limizq=5, limder=-1; |
djinn77 | 0:f15eccb70d1d | 170 | break; |
djinn77 | 0:f15eccb70d1d | 171 | case 2://I |
djinn77 | 0:f15eccb70d1d | 172 | if(giro == 0 || giro == 2) |
djinn77 | 0:f15eccb70d1d | 173 | imprimir = PZA_I,liminf=7, limizq=6, limder=-1; |
djinn77 | 0:f15eccb70d1d | 174 | if(giro == 1 || giro == 3) |
djinn77 | 0:f15eccb70d1d | 175 | imprimir = PZA_IR,liminf=8, limizq=5, limder=0; |
djinn77 | 0:f15eccb70d1d | 176 | break; |
djinn77 | 0:f15eccb70d1d | 177 | case 3://Cuadrado |
djinn77 | 0:f15eccb70d1d | 178 | if(giro == 0 || giro == 1 || giro == 2 || giro == 3) |
djinn77 | 0:f15eccb70d1d | 179 | imprimir = PZA_C,liminf=8, limizq=6, limder=0; |
djinn77 | 0:f15eccb70d1d | 180 | break; |
djinn77 | 0:f15eccb70d1d | 181 | case 4: |
djinn77 | 0:f15eccb70d1d | 182 | if(giro == 0 || giro == 2) |
djinn77 | 0:f15eccb70d1d | 183 | imprimir = PZA_Z,liminf=8, limizq=5, limder=0; |
djinn77 | 0:f15eccb70d1d | 184 | if(giro == 1 || giro == 3) |
djinn77 | 0:f15eccb70d1d | 185 | imprimir = PZA_ZN,liminf=7, limizq=6, limder=0; |
djinn77 | 0:f15eccb70d1d | 186 | break; |
djinn77 | 0:f15eccb70d1d | 187 | default: |
djinn77 | 0:f15eccb70d1d | 188 | imprimir = VACIO; |
djinn77 | 0:f15eccb70d1d | 189 | break; |
djinn77 | 0:f15eccb70d1d | 190 | } |
djinn77 | 0:f15eccb70d1d | 191 | // pc.printf("\n limite inferior read %d\n ",liminf); |
djinn77 | 0:f15eccb70d1d | 192 | desplazar(); |
djinn77 | 0:f15eccb70d1d | 193 | } |
djinn77 | 0:f15eccb70d1d | 194 | void desplazar(){ |
djinn77 | 0:f15eccb70d1d | 195 | |
djinn77 | 0:f15eccb70d1d | 196 | uint16_t desplazamiento[8]={0}; // Inicia un vector auxiliar con solo Ceros |
djinn77 | 0:f15eccb70d1d | 197 | int j= 0; |
djinn77 | 0:f15eccb70d1d | 198 | for(int i=posicion; i<(posicion+3);i++){ // Inicia un vector auxiliar con solo Ceros |
djinn77 | 0:f15eccb70d1d | 199 | desplazamiento[i]=imprimir[j]; // Alamcena los nuevos datos tomados en el vector |
djinn77 | 0:f15eccb70d1d | 200 | j++; |
djinn77 | 0:f15eccb70d1d | 201 | } |
djinn77 | 0:f15eccb70d1d | 202 | imprimir=desplazamiento; |
djinn77 | 0:f15eccb70d1d | 203 | captura_matriz(); |
djinn77 | 0:f15eccb70d1d | 204 | } |
djinn77 | 0:f15eccb70d1d | 205 | |
djinn77 | 0:f15eccb70d1d | 206 | void captura_matriz(){ |
djinn77 | 0:f15eccb70d1d | 207 | |
djinn77 | 0:f15eccb70d1d | 208 | int i=0; // inicia el contador i en 0 |
djinn77 | 0:f15eccb70d1d | 209 | int enable=1; |
djinn77 | 0:f15eccb70d1d | 210 | enableizq=1; |
djinn77 | 0:f15eccb70d1d | 211 | enableder=1; |
djinn77 | 0:f15eccb70d1d | 212 | bajando=1; |
djinn77 | 1:f9ff8e1c3244 | 213 | velocidad=1.0; |
djinn77 | 0:f15eccb70d1d | 214 | while(enable){ //se encarga de desplazar los bits dentro del vector |
djinn77 | 0:f15eccb70d1d | 215 | //pc.printf("\n1- conteo del corriemiento:\n %d",i); |
djinn77 | 0:f15eccb70d1d | 216 | corrimiento=i; |
djinn77 | 1:f9ff8e1c3244 | 217 | int j=1; // inicia el contador j en 1 |
djinn77 | 1:f9ff8e1c3244 | 218 | |
djinn77 | 0:f15eccb70d1d | 219 | while(j<=8){ //se encarga de seleccionar que posicion del vector imprimira |
djinn77 | 0:f15eccb70d1d | 220 | |
djinn77 | 0:f15eccb70d1d | 221 | 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 | 222 | //wait(0.1); // Activar este wait para pruebas de desplazamiento y captura de los datos |
djinn77 | 0:f15eccb70d1d | 223 | |
djinn77 | 0:f15eccb70d1d | 224 | if(i==liminf || (memoria[j-1]&(imprimir[j-1]>>i+1))!=0){ //Detiene el desplazamiento cuando los bits tocan fondo, |
djinn77 | 0:f15eccb70d1d | 225 | enable=0;// desabilitador del ciclo while |
djinn77 | 0:f15eccb70d1d | 226 | bajando=0; |
djinn77 | 0:f15eccb70d1d | 227 | for(int k=0; k<8;k++){ // Almacena todos lo datos del vector en la posicion que corrimiento en la memoria |
djinn77 | 0:f15eccb70d1d | 228 | memoria[k]= memoria[k]|(imprimir[k]>>i); |
djinn77 | 0:f15eccb70d1d | 229 | } |
djinn77 | 0:f15eccb70d1d | 230 | |
djinn77 | 0:f15eccb70d1d | 231 | } |
djinn77 | 0:f15eccb70d1d | 232 | j++; |
djinn77 | 0:f15eccb70d1d | 233 | } |
djinn77 | 0:f15eccb70d1d | 234 | wait(velocidad); // espera para tomar el otro valor de lectura |
djinn77 | 0:f15eccb70d1d | 235 | // ----------------------Lectura del jostick----------------------------- |
djinn77 | 0:f15eccb70d1d | 236 | |
djinn77 | 0:f15eccb70d1d | 237 | meas_vx = vrx.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje X |
djinn77 | 0:f15eccb70d1d | 238 | meas_vy = vry.read() * 3300; // Convierte el valor de lectura de la entrada entre 0-3300 eje Y |
djinn77 | 0:f15eccb70d1d | 239 | |
djinn77 | 0:f15eccb70d1d | 240 | //------ realiza el corriemiento del vector hacia la izq y der respectivamente. |
djinn77 | 1:f9ff8e1c3244 | 241 | |
djinn77 | 1:f9ff8e1c3244 | 242 | |
djinn77 | 0:f15eccb70d1d | 243 | if (meas_vx > 1700 && (posicion < limizq)) // si se cumple esta condicion el jugador se desplaza a la izq |
djinn77 | 0:f15eccb70d1d | 244 | desplazar_izq(); |
djinn77 | 1:f9ff8e1c3244 | 245 | else if (meas_vx < 1600 && (posicion > limder) && enableder) // si se cumple esta condicion el jugador se desplaza a la der |
djinn77 | 0:f15eccb70d1d | 246 | desplazar_der(); |
djinn77 | 0:f15eccb70d1d | 247 | |
djinn77 | 0:f15eccb70d1d | 248 | |
djinn77 | 0:f15eccb70d1d | 249 | //-----------------------Giro de la pieza-------------------------------- |
djinn77 | 0:f15eccb70d1d | 250 | |
djinn77 | 1:f9ff8e1c3244 | 251 | if(meas_vy > 1700){ |
djinn77 | 0:f15eccb70d1d | 252 | giro++; |
djinn77 | 0:f15eccb70d1d | 253 | if(giro ==4){ |
djinn77 | 0:f15eccb70d1d | 254 | giro=0; |
djinn77 | 0:f15eccb70d1d | 255 | } |
djinn77 | 0:f15eccb70d1d | 256 | switch(figura){ |
djinn77 | 0:f15eccb70d1d | 257 | case 0: // L |
djinn77 | 0:f15eccb70d1d | 258 | if(giro == 0) |
djinn77 | 0:f15eccb70d1d | 259 | imprimir= girar(PZA_L, posicion),liminf=7, limizq=6, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 260 | if(giro == 1) |
djinn77 | 0:f15eccb70d1d | 261 | imprimir= girar(PZA_LDN, posicion),liminf=7, limizq=5, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 262 | if(giro == 2) |
djinn77 | 0:f15eccb70d1d | 263 | imprimir= girar(PZA_LDO, posicion),liminf=7, limizq=5, limder=-1,i--; |
djinn77 | 0:f15eccb70d1d | 264 | if(giro == 3) |
djinn77 | 0:f15eccb70d1d | 265 | imprimir=girar(PZA_LDD, posicion),liminf=8, limizq=5, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 266 | break; |
djinn77 | 0:f15eccb70d1d | 267 | case 1://T |
djinn77 | 0:f15eccb70d1d | 268 | if(giro == 0) |
djinn77 | 0:f15eccb70d1d | 269 | imprimir= girar(PZA_T, posicion),liminf=8, limizq=5, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 270 | if(giro == 1) |
djinn77 | 0:f15eccb70d1d | 271 | imprimir= girar(PZA_TN, posicion),liminf=7, limizq=6, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 272 | if(giro == 2) |
djinn77 | 0:f15eccb70d1d | 273 | imprimir= girar(PZA_TO, posicion),liminf=7, limizq=5, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 274 | if(giro == 3) |
djinn77 | 0:f15eccb70d1d | 275 | imprimir= girar(PZA_TD, posicion),liminf=7, limizq=5, limder=-1,i--; |
djinn77 | 0:f15eccb70d1d | 276 | break; |
djinn77 | 0:f15eccb70d1d | 277 | case 2://I |
djinn77 | 0:f15eccb70d1d | 278 | if(giro == 0 || giro == 2) |
djinn77 | 0:f15eccb70d1d | 279 | imprimir= girar(PZA_I, posicion),liminf=7, limizq=6, limder=-1,i--; |
djinn77 | 0:f15eccb70d1d | 280 | if(giro == 1 || giro == 3) |
djinn77 | 0:f15eccb70d1d | 281 | imprimir=girar(PZA_IR, posicion),liminf=8, limizq=5, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 282 | break; |
djinn77 | 0:f15eccb70d1d | 283 | case 3://Cuadrado |
djinn77 | 0:f15eccb70d1d | 284 | if(giro == 0 || giro == 1 || giro == 2 || giro == 3) |
djinn77 | 0:f15eccb70d1d | 285 | imprimir= girar(PZA_C, posicion),liminf=8, limizq=6, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 286 | break; |
djinn77 | 0:f15eccb70d1d | 287 | case 4: //Z |
djinn77 | 0:f15eccb70d1d | 288 | if(giro == 0 || giro == 2) |
djinn77 | 0:f15eccb70d1d | 289 | imprimir= girar(PZA_Z, posicion),liminf=8, limizq=5, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 290 | if(giro == 1 || giro == 3) |
djinn77 | 0:f15eccb70d1d | 291 | imprimir= girar(PZA_ZN, posicion),liminf=7, limizq=6, limder=0,i--; |
djinn77 | 0:f15eccb70d1d | 292 | break; |
djinn77 | 0:f15eccb70d1d | 293 | |
djinn77 | 0:f15eccb70d1d | 294 | } |
djinn77 | 0:f15eccb70d1d | 295 | |
djinn77 | 0:f15eccb70d1d | 296 | } |
djinn77 | 0:f15eccb70d1d | 297 | |
djinn77 | 0:f15eccb70d1d | 298 | //--------------------------------------------------------------- |
djinn77 | 1:f9ff8e1c3244 | 299 | pulsador_abj.fall(&aum_velocidad); |
djinn77 | 1:f9ff8e1c3244 | 300 | |
djinn77 | 0:f15eccb70d1d | 301 | i++; |
djinn77 | 0:f15eccb70d1d | 302 | } |
djinn77 | 0:f15eccb70d1d | 303 | |
djinn77 | 0:f15eccb70d1d | 304 | } |
djinn77 | 0:f15eccb70d1d | 305 | |
djinn77 | 0:f15eccb70d1d | 306 | void desplazar_izq(){ |
djinn77 | 1:f9ff8e1c3244 | 307 | |
djinn77 | 1:f9ff8e1c3244 | 308 | if(posicion<limizq & corrimiento<liminf & enableizq){ |
djinn77 | 1:f9ff8e1c3244 | 309 | posicion++; |
djinn77 | 1:f9ff8e1c3244 | 310 | |
djinn77 | 1:f9ff8e1c3244 | 311 | for(int i=7; i >=0; i--){ |
djinn77 | 1:f9ff8e1c3244 | 312 | int izq = (memoria[i+1] & (imprimir[i]>>corrimiento)); |
djinn77 | 1:f9ff8e1c3244 | 313 | imprimir[i]=imprimir[i-1]; |
djinn77 | 1:f9ff8e1c3244 | 314 | if(i==0){ |
djinn77 | 1:f9ff8e1c3244 | 315 | imprimir[i]=0; |
djinn77 | 1:f9ff8e1c3244 | 316 | |
djinn77 | 1:f9ff8e1c3244 | 317 | } |
djinn77 | 1:f9ff8e1c3244 | 318 | if((memoria[i+1] & (imprimir[i]>>corrimiento))!=0){ |
djinn77 | 1:f9ff8e1c3244 | 319 | enableizq=0; |
djinn77 | 1:f9ff8e1c3244 | 320 | pc.printf("\n multiizq en:%d\n ",izq); |
djinn77 | 1:f9ff8e1c3244 | 321 | pc.printf("\n izquierdo: %d\n",enableizq); |
djinn77 | 1:f9ff8e1c3244 | 322 | } |
djinn77 | 1:f9ff8e1c3244 | 323 | |
djinn77 | 1:f9ff8e1c3244 | 324 | } |
djinn77 | 1:f9ff8e1c3244 | 325 | for(int j=1;j<=8;j++){ |
djinn77 | 1:f9ff8e1c3244 | 326 | sendSPI(j, memoria[j-1]|(imprimir[j-1]>>corrimiento)); |
djinn77 | 1:f9ff8e1c3244 | 327 | |
djinn77 | 1:f9ff8e1c3244 | 328 | } |
djinn77 | 1:f9ff8e1c3244 | 329 | wait(1.0); |
djinn77 | 1:f9ff8e1c3244 | 330 | |
djinn77 | 1:f9ff8e1c3244 | 331 | } |
djinn77 | 0:f15eccb70d1d | 332 | return; |
djinn77 | 0:f15eccb70d1d | 333 | } |
djinn77 | 0:f15eccb70d1d | 334 | |
djinn77 | 0:f15eccb70d1d | 335 | void desplazar_der(){ |
djinn77 | 1:f9ff8e1c3244 | 336 | if(posicion>limder & corrimiento<liminf & enableder & bajando){ |
djinn77 | 1:f9ff8e1c3244 | 337 | posicion--; |
djinn77 | 1:f9ff8e1c3244 | 338 | |
djinn77 | 1:f9ff8e1c3244 | 339 | for(int i=0; i <8; i++){ |
djinn77 | 1:f9ff8e1c3244 | 340 | int der =(memoria[i+1] & (imprimir[i]>>corrimiento)); |
djinn77 | 1:f9ff8e1c3244 | 341 | imprimir[i]=imprimir[i+1]; |
djinn77 | 1:f9ff8e1c3244 | 342 | if(i==7){ |
djinn77 | 1:f9ff8e1c3244 | 343 | imprimir[i]=0; |
djinn77 | 1:f9ff8e1c3244 | 344 | |
djinn77 | 1:f9ff8e1c3244 | 345 | } |
djinn77 | 1:f9ff8e1c3244 | 346 | if((memoria[i-1] & (imprimir[i]>>corrimiento))!=0){ |
djinn77 | 1:f9ff8e1c3244 | 347 | enableder=0; |
djinn77 | 1:f9ff8e1c3244 | 348 | pc.printf("\n multisder en :%d\n ",der); |
djinn77 | 1:f9ff8e1c3244 | 349 | pc.printf("\n derecho:%d\n ",enableder); |
djinn77 | 1:f9ff8e1c3244 | 350 | } |
djinn77 | 1:f9ff8e1c3244 | 351 | } |
djinn77 | 1:f9ff8e1c3244 | 352 | for(int j=1;j<=8;j++){ |
djinn77 | 1:f9ff8e1c3244 | 353 | sendSPI(j, memoria[j-1]|(imprimir[j-1]>>corrimiento)); |
djinn77 | 1:f9ff8e1c3244 | 354 | } |
djinn77 | 1:f9ff8e1c3244 | 355 | wait(1.0); |
djinn77 | 1:f9ff8e1c3244 | 356 | } |
djinn77 | 0:f15eccb70d1d | 357 | return; |
djinn77 | 1:f9ff8e1c3244 | 358 | |
djinn77 | 0:f15eccb70d1d | 359 | } |
djinn77 | 0:f15eccb70d1d | 360 | |
djinn77 | 0:f15eccb70d1d | 361 | uint16_t* girar(uint16_t* pieza, int posicion){ |
djinn77 | 0:f15eccb70d1d | 362 | uint16_t desplazamiento[8]={0}; |
djinn77 | 0:f15eccb70d1d | 363 | int j= 0; |
djinn77 | 0:f15eccb70d1d | 364 | for(int i=posicion; i<(posicion+3);i++){ // Inicia un vector auxiliar con solo Ceros |
djinn77 | 0:f15eccb70d1d | 365 | desplazamiento[i]=pieza[j]; // Alamcena los nuevos datos tomados en el vector |
djinn77 | 0:f15eccb70d1d | 366 | j++; |
djinn77 | 0:f15eccb70d1d | 367 | } |
djinn77 | 0:f15eccb70d1d | 368 | |
djinn77 | 0:f15eccb70d1d | 369 | return desplazamiento; |
djinn77 | 0:f15eccb70d1d | 370 | } |
djinn77 | 0:f15eccb70d1d | 371 | |
djinn77 | 0:f15eccb70d1d | 372 | void perder(){ |
djinn77 | 0:f15eccb70d1d | 373 | for(int i=0; i<8;i++){ // Almacena todos lo datos del vector en la posicion que corrimiento en la memoria |
djinn77 | 0:f15eccb70d1d | 374 | borde= &memoria[i]; |
djinn77 | 0:f15eccb70d1d | 375 | if(*borde>255){ |
djinn77 | 0:f15eccb70d1d | 376 | NVIC_SystemReset(); |
djinn77 | 0:f15eccb70d1d | 377 | } |
djinn77 | 0:f15eccb70d1d | 378 | } |
djinn77 | 1:f9ff8e1c3244 | 379 | } |
djinn77 | 1:f9ff8e1c3244 | 380 | |
djinn77 | 1:f9ff8e1c3244 | 381 | void aum_velocidad(){ |
djinn77 | 1:f9ff8e1c3244 | 382 | velocidad=0.2; |
djinn77 | 1:f9ff8e1c3244 | 383 | } |