Entrega 1 de tetris

Dependencies:   mbed

Committer:
Mateom0104
Date:
Thu Sep 13 20:42:04 2018 +0000
Revision:
1:df74ebfc1126
Parent:
0:d1aba6605d0b
Child:
2:2ca73be1a865
arreglo inicial para L y cuadrado

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 0:d1aba6605d0b 15
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 1:df74ebfc1126 74 screen[posicion-i]=((((screen[posicion-i]>>1) & ~(mascara-1)) | (screen[posicion-i] & (mascara-1))) | screen2[posicion-i] ) | (screen[posicion-i] & mascara);
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 0:d1aba6605d0b 134 }
Mateom0104 0:d1aba6605d0b 135 else
Mateom0104 0:d1aba6605d0b 136 {
Mateom0104 0:d1aba6605d0b 137 verifica=0;
Mateom0104 0:d1aba6605d0b 138 }
Mateom0104 0:d1aba6605d0b 139 }
Mateom0104 0:d1aba6605d0b 140
Mateom0104 0:d1aba6605d0b 141 }
Mateom0104 0:d1aba6605d0b 142 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:d1aba6605d0b 143 void play () // Funcion encargada de determianr el estado de la mascara
Mateom0104 0:d1aba6605d0b 144 {
Mateom0104 0:d1aba6605d0b 145 int a=1;
Mateom0104 0:d1aba6605d0b 146 mascara=128;
Mateom0104 0:d1aba6605d0b 147 //pc.printf("Posicion original 1 %d \n",posicion_original);
Mateom0104 0:d1aba6605d0b 148 a=ubicacion();
Mateom0104 0:d1aba6605d0b 149 while(a==1)
Mateom0104 0:d1aba6605d0b 150 {
Mateom0104 0:d1aba6605d0b 151 analisis2();
Mateom0104 0:d1aba6605d0b 152
Mateom0104 0:d1aba6605d0b 153 if (verifica==1 || mascara==0)
Mateom0104 0:d1aba6605d0b 154 {
Mateom0104 0:d1aba6605d0b 155 a=0;
Mateom0104 0:d1aba6605d0b 156 //pc.printf("SI \n");
Mateom0104 0:d1aba6605d0b 157 }
Mateom0104 0:d1aba6605d0b 158 else
Mateom0104 0:d1aba6605d0b 159 {
Mateom0104 0:d1aba6605d0b 160 //pc.printf("NO \n");
Mateom0104 0:d1aba6605d0b 161 escribir();
Mateom0104 0:d1aba6605d0b 162 mascara=mascara/2;
Mateom0104 0:d1aba6605d0b 163 wait_ms(velocidad);
Mateom0104 0:d1aba6605d0b 164 //pc.printf("_____________________\n\n");
Mateom0104 0:d1aba6605d0b 165 }
Mateom0104 0:d1aba6605d0b 166 }
Mateom0104 0:d1aba6605d0b 167 }
Mateom0104 0:d1aba6605d0b 168
Mateom0104 0:d1aba6605d0b 169 ///////////////////////////////////////////////////////////////////////////////
Mateom0104 0:d1aba6605d0b 170
Mateom0104 0:d1aba6605d0b 171 int main() { // fucnion principal
Mateom0104 0:d1aba6605d0b 172
Mateom0104 0:d1aba6605d0b 173 sendSPI(0x0c,1);
Mateom0104 0:d1aba6605d0b 174 sendSPI(0x0F,1);
Mateom0104 0:d1aba6605d0b 175 wait (1);
Mateom0104 0:d1aba6605d0b 176
Mateom0104 0:d1aba6605d0b 177 sendSPI(0x0F,0);
Mateom0104 0:d1aba6605d0b 178 wait (1);
Mateom0104 0:d1aba6605d0b 179 sendSPI(0xB,0x7);
Mateom0104 0:d1aba6605d0b 180 borrar();
Mateom0104 0:d1aba6605d0b 181
Mateom0104 0:d1aba6605d0b 182 int n;
Mateom0104 1:df74ebfc1126 183 int giro, inicio , fin;
Mateom0104 0:d1aba6605d0b 184 while(1){
Mateom0104 1:df74ebfc1126 185
Mateom0104 1:df74ebfc1126 186 inicio=pc.getc();
Mateom0104 0:d1aba6605d0b 187 //pc.printf("Ingrese el numero de la figura \n");
Mateom0104 0:d1aba6605d0b 188 n = pc.getc();
Mateom0104 0:d1aba6605d0b 189 //pc.printf("figura %d \n ",n);
Mateom0104 0:d1aba6605d0b 190
Mateom0104 0:d1aba6605d0b 191 //pc.printf("Ingrese el numero de angulo de giro \n");
Mateom0104 0:d1aba6605d0b 192 giro = pc.getc();
Mateom0104 0:d1aba6605d0b 193 //pc.printf("giro %d \n ",giro);
Mateom0104 0:d1aba6605d0b 194
Mateom0104 0:d1aba6605d0b 195 //pc.printf("Ingrese la posicion \n");
Mateom0104 0:d1aba6605d0b 196 posicion = pc.getc();
Mateom0104 0:d1aba6605d0b 197 //pc.printf("posicion %d \n ",posicion);
Mateom0104 1:df74ebfc1126 198
Mateom0104 1:df74ebfc1126 199 fin=pc.getc();
Mateom0104 1:df74ebfc1126 200 wait(0.2);
Mateom0104 0:d1aba6605d0b 201
Mateom0104 1:df74ebfc1126 202 if((inicio==60) && (fin==62))
Mateom0104 1:df74ebfc1126 203 {
Mateom0104 0:d1aba6605d0b 204
Mateom0104 0:d1aba6605d0b 205 switch(n)
Mateom0104 0:d1aba6605d0b 206 {
Mateom0104 0:d1aba6605d0b 207 case 0: a(giro); play(); break;
Mateom0104 0:d1aba6605d0b 208
Mateom0104 0:d1aba6605d0b 209 case 1: b(giro); play(); break;
Mateom0104 0:d1aba6605d0b 210
Mateom0104 0:d1aba6605d0b 211 case 2: c(giro); play(); break;
Mateom0104 0:d1aba6605d0b 212
Mateom0104 0:d1aba6605d0b 213 case 3: d(giro); play(); break;
Mateom0104 0:d1aba6605d0b 214
Mateom0104 0:d1aba6605d0b 215 case 4: e(giro); play(); break;
Mateom0104 0:d1aba6605d0b 216
Mateom0104 0:d1aba6605d0b 217 case 5: f(giro); play(); break;
Mateom0104 0:d1aba6605d0b 218
Mateom0104 0:d1aba6605d0b 219 case 6: g(giro); play(); break;
Mateom0104 0:d1aba6605d0b 220
Mateom0104 0:d1aba6605d0b 221 default: pc.printf("Error en figura \n");
Mateom0104 1:df74ebfc1126 222 }
Mateom0104 1:df74ebfc1126 223 }
Mateom0104 0:d1aba6605d0b 224 }
Mateom0104 0:d1aba6605d0b 225 }