Entrega 1 de tetris

Dependencies:   mbed

Committer:
Mateom0104
Date:
Sun Oct 14 03:37:00 2018 +0000
Revision:
2:2ca73be1a865
Parent:
1:df74ebfc1126
TETRIS ARREGLADO

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mateom0104 0:d1aba6605d0b 1 #include "mbed.h"
Mateom0104 0:d1aba6605d0b 2 #include "datos.h"
Mateom0104 0:d1aba6605d0b 3
Mateom0104 0:d1aba6605d0b 4 Serial pc(SERIAL_TX, SERIAL_RX);
Mateom0104 0:d1aba6605d0b 5 SPI deviceM(PA_7, PA_6, PA_5);
Mateom0104 0:d1aba6605d0b 6 DigitalOut ssel (PA_4);
Mateom0104 0:d1aba6605d0b 7
Mateom0104 0:d1aba6605d0b 8
Mateom0104 0:d1aba6605d0b 9 #define uint8_t unsigned char
Mateom0104 0:d1aba6605d0b 10 uint8_t screen[8]={0,0,0,0,0,0,0,0};
Mateom0104 0:d1aba6605d0b 11 uint8_t screen2[8]={0,0,0,0,0,0,0,0};
Mateom0104 0:d1aba6605d0b 12 uint8_t verifica;
Mateom0104 0:d1aba6605d0b 13 uint8_t mascara;
Mateom0104 0:d1aba6605d0b 14 int velocidad=70;
Mateom0104 2:2ca73be1a865 15 int segundo=1;
Mateom0104 0:d1aba6605d0b 16
Mateom0104 0:d1aba6605d0b 17 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:d1aba6605d0b 18 void sendSPI(uint8_t d1, uint8_t d2)// envio de datos al max
Mateom0104 0:d1aba6605d0b 19 {
Mateom0104 0:d1aba6605d0b 20 deviceM.unlock();
Mateom0104 0:d1aba6605d0b 21 ssel=0;
Mateom0104 0:d1aba6605d0b 22 deviceM.write(d1);
Mateom0104 0:d1aba6605d0b 23 deviceM.write(d2);
Mateom0104 0:d1aba6605d0b 24 ssel=1;
Mateom0104 0:d1aba6605d0b 25 deviceM.lock();
Mateom0104 0:d1aba6605d0b 26 };
Mateom0104 0:d1aba6605d0b 27 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:d1aba6605d0b 28 void borrar() // Borrar todos los datos de la matriz
Mateom0104 0:d1aba6605d0b 29 {
Mateom0104 0:d1aba6605d0b 30 int j;
Mateom0104 0:d1aba6605d0b 31 for(j=1;j<9;j++)
Mateom0104 0:d1aba6605d0b 32 {
Mateom0104 0:d1aba6605d0b 33 sendSPI(j,0);
Mateom0104 0:d1aba6605d0b 34 wait_ms(1);
Mateom0104 0:d1aba6605d0b 35 }
Mateom0104 0:d1aba6605d0b 36 }
Mateom0104 0:d1aba6605d0b 37 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:d1aba6605d0b 38 void enviar() // Encargado de enviar la matriz completa
Mateom0104 0:d1aba6605d0b 39 {
Mateom0104 0:d1aba6605d0b 40 int i;
Mateom0104 0:d1aba6605d0b 41
Mateom0104 0:d1aba6605d0b 42 for(i=0;i<8;i++)
Mateom0104 0:d1aba6605d0b 43 {
Mateom0104 0:d1aba6605d0b 44 sendSPI(i+1,screen[i]);
Mateom0104 0:d1aba6605d0b 45 }
Mateom0104 0:d1aba6605d0b 46 }
Mateom0104 0:d1aba6605d0b 47 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:d1aba6605d0b 48 void ver() // Informe de datos "no se usa "
Mateom0104 0:d1aba6605d0b 49 {
Mateom0104 0:d1aba6605d0b 50 int i;
Mateom0104 0:d1aba6605d0b 51 for(i=0;i<8;i++)
Mateom0104 0:d1aba6605d0b 52 {
Mateom0104 0:d1aba6605d0b 53 pc.printf("posicion %d ",i);
Mateom0104 0:d1aba6605d0b 54 pc.printf("= %d \n",screen[i]);
Mateom0104 0:d1aba6605d0b 55 }
Mateom0104 0:d1aba6605d0b 56 }
Mateom0104 0:d1aba6605d0b 57 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:d1aba6605d0b 58 void escribir() // Guarda y compara los datos entrantes a la matriz y los que ya estaban
Mateom0104 0:d1aba6605d0b 59 {
Mateom0104 0:d1aba6605d0b 60 int i;
Mateom0104 0:d1aba6605d0b 61
Mateom0104 0:d1aba6605d0b 62 for(i=0;i<tamano;i++)
Mateom0104 0:d1aba6605d0b 63 {
Mateom0104 0:d1aba6605d0b 64 screen2[posicion-i]=(start[posicion-i] & 128);
Mateom0104 0:d1aba6605d0b 65 start[posicion-i]=start[posicion-i] << 1;
Mateom0104 0:d1aba6605d0b 66 }
Mateom0104 0:d1aba6605d0b 67
Mateom0104 0:d1aba6605d0b 68 //pc.printf("1 \n");
Mateom0104 0:d1aba6605d0b 69 //ver();
Mateom0104 0:d1aba6605d0b 70
Mateom0104 0:d1aba6605d0b 71
Mateom0104 0:d1aba6605d0b 72 for(i=0;i<tamano;i++)
Mateom0104 0:d1aba6605d0b 73 {
Mateom0104 2:2ca73be1a865 74 screen[posicion-i]=((((screen[posicion-i]>>1) & ~(mascara-1)) | (screen[posicion-i] & (mascara-1))) | screen2[posicion-i] ) | (screen[posicion-i] & mascara) | (screen[posicion-i] & mascara*segundo);
Mateom0104 0:d1aba6605d0b 75 }
Mateom0104 0:d1aba6605d0b 76
Mateom0104 0:d1aba6605d0b 77 //pc.printf("2 \n");
Mateom0104 0:d1aba6605d0b 78 //ver();
Mateom0104 0:d1aba6605d0b 79 enviar();
Mateom0104 0:d1aba6605d0b 80 }
Mateom0104 0:d1aba6605d0b 81 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:d1aba6605d0b 82 int ubicacion() //Limita el ingreso de posicion no mayor a 7
Mateom0104 0:d1aba6605d0b 83 {
Mateom0104 0:d1aba6605d0b 84 int a;
Mateom0104 0:d1aba6605d0b 85 if((posicion_original+tamano) <= 8 && (posicion_original+tamano) >= 0 )
Mateom0104 0:d1aba6605d0b 86 {
Mateom0104 0:d1aba6605d0b 87 a=1;
Mateom0104 0:d1aba6605d0b 88 }
Mateom0104 0:d1aba6605d0b 89 else
Mateom0104 0:d1aba6605d0b 90 {
Mateom0104 0:d1aba6605d0b 91 //pc.printf("Error de posicion \n");
Mateom0104 0:d1aba6605d0b 92 //pc.printf("Posicion original %d \n",posicion_original);
Mateom0104 0:d1aba6605d0b 93 //pc.printf("tamano %d \n",tamano);
Mateom0104 0:d1aba6605d0b 94 a=0;
Mateom0104 0:d1aba6605d0b 95 }
Mateom0104 0:d1aba6605d0b 96 return a;
Mateom0104 0:d1aba6605d0b 97 }
Mateom0104 0:d1aba6605d0b 98 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:d1aba6605d0b 99 void analisis() // Verifica la siguiente fila para saber si se puede desplazar
Mateom0104 0:d1aba6605d0b 100 {
Mateom0104 0:d1aba6605d0b 101 int i;
Mateom0104 0:d1aba6605d0b 102 uint8_t a;
Mateom0104 0:d1aba6605d0b 103
Mateom0104 0:d1aba6605d0b 104 for(i=0;i<tamano;i++)
Mateom0104 0:d1aba6605d0b 105 {
Mateom0104 0:d1aba6605d0b 106 a=screen[posicion-i] & mascara;
Mateom0104 0:d1aba6605d0b 107 // pc.printf("verificacion siguiente fila = %d \n ",a);
Mateom0104 0:d1aba6605d0b 108 if(mascara==a)
Mateom0104 0:d1aba6605d0b 109 {
Mateom0104 0:d1aba6605d0b 110 i=tamano;
Mateom0104 0:d1aba6605d0b 111 verifica=1;
Mateom0104 0:d1aba6605d0b 112 }
Mateom0104 0:d1aba6605d0b 113 else
Mateom0104 0:d1aba6605d0b 114 {
Mateom0104 0:d1aba6605d0b 115 verifica=0;
Mateom0104 0:d1aba6605d0b 116 }
Mateom0104 0:d1aba6605d0b 117 }
Mateom0104 0:d1aba6605d0b 118 }
Mateom0104 0:d1aba6605d0b 119 ////////////////////////////////////////////////////////////////////////////////
Mateom0104 0:d1aba6605d0b 120 void analisis2() // Prueba
Mateom0104 0:d1aba6605d0b 121 {
Mateom0104 0:d1aba6605d0b 122 int i;
Mateom0104 0:d1aba6605d0b 123 uint8_t a;
Mateom0104 0:d1aba6605d0b 124
Mateom0104 0:d1aba6605d0b 125 for(i=0;i<tamano;i++)
Mateom0104 0:d1aba6605d0b 126 {
Mateom0104 0:d1aba6605d0b 127 a=screen[posicion-i] & mascara;
Mateom0104 0:d1aba6605d0b 128 a= a & ((screen[posicion-i]>>1) & ~(mascara - 1));
Mateom0104 0:d1aba6605d0b 129 pc.printf("verificacion siguiente fila = %d \n ",a);
Mateom0104 0:d1aba6605d0b 130 if(a!=0)
Mateom0104 0:d1aba6605d0b 131 {
Mateom0104 0:d1aba6605d0b 132 i=tamano;
Mateom0104 0:d1aba6605d0b 133 verifica=1;
Mateom0104 2:2ca73be1a865 134 segundo=1;
Mateom0104 2:2ca73be1a865 135 if(verificar2==1)
Mateom0104 2:2ca73be1a865 136 {
Mateom0104 2:2ca73be1a865 137 verificar2=0;
Mateom0104 2:2ca73be1a865 138 verifica=0;
Mateom0104 2:2ca73be1a865 139 segundo=2;
Mateom0104 2:2ca73be1a865 140 }
Mateom0104 0:d1aba6605d0b 141 }
Mateom0104 0:d1aba6605d0b 142 else
Mateom0104 0:d1aba6605d0b 143 {
Mateom0104 2:2ca73be1a865 144 segundo=1;
Mateom0104 0:d1aba6605d0b 145 verifica=0;
Mateom0104 0:d1aba6605d0b 146 }
Mateom0104 0:d1aba6605d0b 147 }
Mateom0104 0:d1aba6605d0b 148
Mateom0104 0:d1aba6605d0b 149 }
Mateom0104 0:d1aba6605d0b 150 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:d1aba6605d0b 151 void play () // Funcion encargada de determianr el estado de la mascara
Mateom0104 0:d1aba6605d0b 152 {
Mateom0104 0:d1aba6605d0b 153 int a=1;
Mateom0104 0:d1aba6605d0b 154 mascara=128;
Mateom0104 0:d1aba6605d0b 155 //pc.printf("Posicion original 1 %d \n",posicion_original);
Mateom0104 0:d1aba6605d0b 156 a=ubicacion();
Mateom0104 0:d1aba6605d0b 157 while(a==1)
Mateom0104 0:d1aba6605d0b 158 {
Mateom0104 0:d1aba6605d0b 159 analisis2();
Mateom0104 0:d1aba6605d0b 160
Mateom0104 0:d1aba6605d0b 161 if (verifica==1 || mascara==0)
Mateom0104 0:d1aba6605d0b 162 {
Mateom0104 0:d1aba6605d0b 163 a=0;
Mateom0104 0:d1aba6605d0b 164 //pc.printf("SI \n");
Mateom0104 0:d1aba6605d0b 165 }
Mateom0104 0:d1aba6605d0b 166 else
Mateom0104 0:d1aba6605d0b 167 {
Mateom0104 0:d1aba6605d0b 168 //pc.printf("NO \n");
Mateom0104 0:d1aba6605d0b 169 escribir();
Mateom0104 0:d1aba6605d0b 170 mascara=mascara/2;
Mateom0104 0:d1aba6605d0b 171 wait_ms(velocidad);
Mateom0104 0:d1aba6605d0b 172 //pc.printf("_____________________\n\n");
Mateom0104 0:d1aba6605d0b 173 }
Mateom0104 0:d1aba6605d0b 174 }
Mateom0104 0:d1aba6605d0b 175 }
Mateom0104 0:d1aba6605d0b 176
Mateom0104 0:d1aba6605d0b 177 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:d1aba6605d0b 178
Mateom0104 0:d1aba6605d0b 179 int main() { // fucnion principal
Mateom0104 0:d1aba6605d0b 180
Mateom0104 0:d1aba6605d0b 181 sendSPI(0x0c,1);
Mateom0104 0:d1aba6605d0b 182 sendSPI(0x0F,1);
Mateom0104 0:d1aba6605d0b 183 wait (1);
Mateom0104 0:d1aba6605d0b 184
Mateom0104 0:d1aba6605d0b 185 sendSPI(0x0F,0);
Mateom0104 0:d1aba6605d0b 186 wait (1);
Mateom0104 0:d1aba6605d0b 187 sendSPI(0xB,0x7);
Mateom0104 0:d1aba6605d0b 188 borrar();
Mateom0104 0:d1aba6605d0b 189
Mateom0104 0:d1aba6605d0b 190 int n;
Mateom0104 1:df74ebfc1126 191 int giro, inicio , fin;
Mateom0104 0:d1aba6605d0b 192 while(1){
Mateom0104 1:df74ebfc1126 193
Mateom0104 1:df74ebfc1126 194 inicio=pc.getc();
Mateom0104 0:d1aba6605d0b 195 //pc.printf("Ingrese el numero de la figura \n");
Mateom0104 0:d1aba6605d0b 196 n = pc.getc();
Mateom0104 0:d1aba6605d0b 197 //pc.printf("figura %d \n ",n);
Mateom0104 0:d1aba6605d0b 198
Mateom0104 0:d1aba6605d0b 199 //pc.printf("Ingrese el numero de angulo de giro \n");
Mateom0104 0:d1aba6605d0b 200 giro = pc.getc();
Mateom0104 0:d1aba6605d0b 201 //pc.printf("giro %d \n ",giro);
Mateom0104 0:d1aba6605d0b 202
Mateom0104 0:d1aba6605d0b 203 //pc.printf("Ingrese la posicion \n");
Mateom0104 0:d1aba6605d0b 204 posicion = pc.getc();
Mateom0104 0:d1aba6605d0b 205 //pc.printf("posicion %d \n ",posicion);
Mateom0104 1:df74ebfc1126 206
Mateom0104 1:df74ebfc1126 207 fin=pc.getc();
Mateom0104 1:df74ebfc1126 208 wait(0.2);
Mateom0104 0:d1aba6605d0b 209
Mateom0104 1:df74ebfc1126 210 if((inicio==60) && (fin==62))
Mateom0104 1:df74ebfc1126 211 {
Mateom0104 0:d1aba6605d0b 212
Mateom0104 0:d1aba6605d0b 213 switch(n)
Mateom0104 0:d1aba6605d0b 214 {
Mateom0104 0:d1aba6605d0b 215 case 0: a(giro); play(); break;
Mateom0104 0:d1aba6605d0b 216
Mateom0104 0:d1aba6605d0b 217 case 1: b(giro); play(); break;
Mateom0104 0:d1aba6605d0b 218
Mateom0104 0:d1aba6605d0b 219 case 2: c(giro); play(); break;
Mateom0104 0:d1aba6605d0b 220
Mateom0104 0:d1aba6605d0b 221 case 3: d(giro); play(); break;
Mateom0104 0:d1aba6605d0b 222
Mateom0104 0:d1aba6605d0b 223 case 4: e(giro); play(); break;
Mateom0104 0:d1aba6605d0b 224
Mateom0104 0:d1aba6605d0b 225 case 5: f(giro); play(); break;
Mateom0104 0:d1aba6605d0b 226
Mateom0104 0:d1aba6605d0b 227 case 6: g(giro); play(); break;
Mateom0104 0:d1aba6605d0b 228
Mateom0104 0:d1aba6605d0b 229 default: pc.printf("Error en figura \n");
Mateom0104 1:df74ebfc1126 230 }
Mateom0104 1:df74ebfc1126 231 }
Mateom0104 0:d1aba6605d0b 232 }
Mateom0104 0:d1aba6605d0b 233 }