Brahian Stiv Sanchez Giraldo / Mbed 2 deprecated bracri

Dependencies:   mbed

Committer:
sanchezzbrahian
Date:
Thu Oct 18 23:40:53 2018 +0000
Revision:
0:ef627c2ce25b
Child:
1:2ac3cf92c198
C?digo tetrix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sanchezzbrahian 0:ef627c2ce25b 1 #include "mbed.h"
sanchezzbrahian 0:ef627c2ce25b 2 #include "algo.h"
sanchezzbrahian 0:ef627c2ce25b 3 #define MAXDAT 3
sanchezzbrahian 0:ef627c2ce25b 4
sanchezzbrahian 0:ef627c2ce25b 5 SPI deviceM(PB_15, PB_14, PB_13);
sanchezzbrahian 0:ef627c2ce25b 6 DigitalOut ssel (PB_12);
sanchezzbrahian 0:ef627c2ce25b 7
sanchezzbrahian 0:ef627c2ce25b 8 Serial pc(USBTX,USBRX);
sanchezzbrahian 0:ef627c2ce25b 9
sanchezzbrahian 0:ef627c2ce25b 10 uint8_t mat_act[11]={0,0,0,0,0,0,0,0,0,0,0}; //Matriz para mostrar en pantalla.
sanchezzbrahian 0:ef627c2ce25b 11 uint8_t mat_tmp[8]={0,0,0,0,0,0,0,0};
sanchezzbrahian 0:ef627c2ce25b 12 uint8_t mat_tmp1[8]={0,0,0,0,0,0,0,0}; //Matriz temporal de las fichas.
sanchezzbrahian 0:ef627c2ce25b 13 uint8_t dat[MAXDAT]={0,0,0};
sanchezzbrahian 0:ef627c2ce25b 14 uint8_t fila=0,save=0,i=0,cont=0,mcol=0,num=0,grad=0;
sanchezzbrahian 0:ef627c2ce25b 15
sanchezzbrahian 0:ef627c2ce25b 16 void sendSPI(uint8_t d1, uint8_t d2)
sanchezzbrahian 0:ef627c2ce25b 17 {
sanchezzbrahian 0:ef627c2ce25b 18 deviceM.unlock();
sanchezzbrahian 0:ef627c2ce25b 19 ssel=0;
sanchezzbrahian 0:ef627c2ce25b 20 deviceM.write(d1);
sanchezzbrahian 0:ef627c2ce25b 21 deviceM.write(d2);
sanchezzbrahian 0:ef627c2ce25b 22 ssel=1;
sanchezzbrahian 0:ef627c2ce25b 23 deviceM.lock();
sanchezzbrahian 0:ef627c2ce25b 24 }
sanchezzbrahian 0:ef627c2ce25b 25 void test() //Test
sanchezzbrahian 0:ef627c2ce25b 26 {
sanchezzbrahian 0:ef627c2ce25b 27 sendSPI(0x09,0); //No decodificacion
sanchezzbrahian 0:ef627c2ce25b 28 sendSPI(0x0B,0x07); //Usa 7 leds
sanchezzbrahian 0:ef627c2ce25b 29 sendSPI(0x0C,1); //No se apaga
sanchezzbrahian 0:ef627c2ce25b 30 sendSPI(0x0A,0x0);
sanchezzbrahian 0:ef627c2ce25b 31 for (int i=0;i<2;i++){
sanchezzbrahian 0:ef627c2ce25b 32 sendSPI(0x0F,1);
sanchezzbrahian 0:ef627c2ce25b 33 wait (0.1);
sanchezzbrahian 0:ef627c2ce25b 34 sendSPI(0x0f,0);
sanchezzbrahian 0:ef627c2ce25b 35 wait (0.1); }
sanchezzbrahian 0:ef627c2ce25b 36 }
sanchezzbrahian 0:ef627c2ce25b 37 void borrar() //borrar toda la matriz;
sanchezzbrahian 0:ef627c2ce25b 38 {
sanchezzbrahian 0:ef627c2ce25b 39 int i;
sanchezzbrahian 0:ef627c2ce25b 40 for(i=0;i<=8;i++)
sanchezzbrahian 0:ef627c2ce25b 41 {
sanchezzbrahian 0:ef627c2ce25b 42 sendSPI(0x0+i,0x00);
sanchezzbrahian 0:ef627c2ce25b 43 }
sanchezzbrahian 0:ef627c2ce25b 44 }
sanchezzbrahian 0:ef627c2ce25b 45 void imp_mat(uint8_t *temp)// Hace el desplazamiento hacia abajo de la figura
sanchezzbrahian 0:ef627c2ce25b 46 {
sanchezzbrahian 0:ef627c2ce25b 47 sendSPI(cont-3,mat_act[cont-3]);
sanchezzbrahian 0:ef627c2ce25b 48 sendSPI(cont-2,(*(temp+0) | mat_act[cont-2]));
sanchezzbrahian 0:ef627c2ce25b 49 sendSPI(cont-1,(*(temp+1) | mat_act[cont-1]));
sanchezzbrahian 0:ef627c2ce25b 50 sendSPI(cont,(*(temp+2) | mat_act[cont]));
sanchezzbrahian 0:ef627c2ce25b 51 }
sanchezzbrahian 0:ef627c2ce25b 52 uint32_t read_command() //ingresa "<",">" y define el tamaño del vector "dat"
sanchezzbrahian 0:ef627c2ce25b 53 {
sanchezzbrahian 0:ef627c2ce25b 54 char intc=pc.getc();
sanchezzbrahian 0:ef627c2ce25b 55 while(intc != '<')
sanchezzbrahian 0:ef627c2ce25b 56 intc=pc.getc();
sanchezzbrahian 0:ef627c2ce25b 57 for (int i =0;i<MAXDAT;i++)
sanchezzbrahian 0:ef627c2ce25b 58 dat[i]=pc.getc();
sanchezzbrahian 0:ef627c2ce25b 59 intc=pc.getc();
sanchezzbrahian 0:ef627c2ce25b 60 if(intc != '>'){
sanchezzbrahian 0:ef627c2ce25b 61 return 0;
sanchezzbrahian 0:ef627c2ce25b 62 }
sanchezzbrahian 0:ef627c2ce25b 63 return 1;
sanchezzbrahian 0:ef627c2ce25b 64 }
sanchezzbrahian 0:ef627c2ce25b 65 void cop_fi (uint8_t* tfig) //Almacena la figura en la matriz temporal
sanchezzbrahian 0:ef627c2ce25b 66 {
sanchezzbrahian 0:ef627c2ce25b 67 for(i=0;i<8;i++)
sanchezzbrahian 0:ef627c2ce25b 68 {
sanchezzbrahian 0:ef627c2ce25b 69 mat_tmp[i]=*(tfig+i)>>dat[1]-1;
sanchezzbrahian 0:ef627c2ce25b 70
sanchezzbrahian 0:ef627c2ce25b 71 }
sanchezzbrahian 0:ef627c2ce25b 72 for(i=0;i<8;i++)
sanchezzbrahian 0:ef627c2ce25b 73 {
sanchezzbrahian 0:ef627c2ce25b 74 mat_tmp1[i]= mat_tmp[i];
sanchezzbrahian 0:ef627c2ce25b 75 }
sanchezzbrahian 0:ef627c2ce25b 76 }
sanchezzbrahian 0:ef627c2ce25b 77 void ingred_d() //Tipo de figuras
sanchezzbrahian 0:ef627c2ce25b 78 {
sanchezzbrahian 0:ef627c2ce25b 79 uint8_t tf=dat[0];
sanchezzbrahian 0:ef627c2ce25b 80
sanchezzbrahian 0:ef627c2ce25b 81 switch(tf)
sanchezzbrahian 0:ef627c2ce25b 82 {
sanchezzbrahian 0:ef627c2ce25b 83 case tipo_c: // Cuadrado
sanchezzbrahian 0:ef627c2ce25b 84 cop_fi(FIG_C);
sanchezzbrahian 0:ef627c2ce25b 85 break;
sanchezzbrahian 0:ef627c2ce25b 86 case tipo_s: //S
sanchezzbrahian 0:ef627c2ce25b 87 cop_fi(FIG_S);
sanchezzbrahian 0:ef627c2ce25b 88 break;
sanchezzbrahian 0:ef627c2ce25b 89 case tipo_t: //T
sanchezzbrahian 0:ef627c2ce25b 90 cop_fi(FIG_T);
sanchezzbrahian 0:ef627c2ce25b 91 break;
sanchezzbrahian 0:ef627c2ce25b 92 case tipo_i: //I
sanchezzbrahian 0:ef627c2ce25b 93 cop_fi(FIG_I);
sanchezzbrahian 0:ef627c2ce25b 94 break;
sanchezzbrahian 0:ef627c2ce25b 95 case tipo_l: //L
sanchezzbrahian 0:ef627c2ce25b 96 cop_fi(FIG_L);
sanchezzbrahian 0:ef627c2ce25b 97 break;
sanchezzbrahian 0:ef627c2ce25b 98
sanchezzbrahian 0:ef627c2ce25b 99 }
sanchezzbrahian 0:ef627c2ce25b 100 }
sanchezzbrahian 0:ef627c2ce25b 101 void d_ale()
sanchezzbrahian 0:ef627c2ce25b 102 {
sanchezzbrahian 0:ef627c2ce25b 103 num=rand()%5+1;
sanchezzbrahian 0:ef627c2ce25b 104 mcol=4;
sanchezzbrahian 0:ef627c2ce25b 105 }
sanchezzbrahian 0:ef627c2ce25b 106 void move_fig()//mueve la figura por medio de botones
sanchezzbrahian 0:ef627c2ce25b 107 {
sanchezzbrahian 0:ef627c2ce25b 108 int mfig=0;
sanchezzbrahian 0:ef627c2ce25b 109 mfig=pc.getc();
sanchezzbrahian 0:ef627c2ce25b 110 if(mfig==30){
sanchezzbrahian 0:ef627c2ce25b 111 mfig=1;}
sanchezzbrahian 0:ef627c2ce25b 112 if(mfig==29){//mover figura a la derecha
sanchezzbrahian 0:ef627c2ce25b 113 mfig=2;}
sanchezzbrahian 0:ef627c2ce25b 114 if(mfig==28){//mover figura a la izquierda
sanchezzbrahian 0:ef627c2ce25b 115 mfig=3;}
sanchezzbrahian 0:ef627c2ce25b 116 switch(mfig)
sanchezzbrahian 0:ef627c2ce25b 117 {
sanchezzbrahian 0:ef627c2ce25b 118 case 0:
sanchezzbrahian 0:ef627c2ce25b 119
sanchezzbrahian 0:ef627c2ce25b 120 break;
sanchezzbrahian 0:ef627c2ce25b 121 case 1:
sanchezzbrahian 0:ef627c2ce25b 122 grad++;
sanchezzbrahian 0:ef627c2ce25b 123 if(grad<5){
sanchezzbrahian 0:ef627c2ce25b 124
sanchezzbrahian 0:ef627c2ce25b 125 switch (grad)
sanchezzbrahian 0:ef627c2ce25b 126 {
sanchezzbrahian 0:ef627c2ce25b 127 case 1:
sanchezzbrahian 0:ef627c2ce25b 128 mat_tmp[0]=mat_tmp1[4];
sanchezzbrahian 0:ef627c2ce25b 129 mat_tmp[1]=mat_tmp1[5];
sanchezzbrahian 0:ef627c2ce25b 130 mat_tmp[2]=mat_tmp1[6];
sanchezzbrahian 0:ef627c2ce25b 131 break;
sanchezzbrahian 0:ef627c2ce25b 132 case 2:
sanchezzbrahian 0:ef627c2ce25b 133 mat_tmp[0]=mat_tmp1[0];
sanchezzbrahian 0:ef627c2ce25b 134 mat_tmp[1]=mat_tmp1[2];
sanchezzbrahian 0:ef627c2ce25b 135 mat_tmp[2]=mat_tmp1[1];
sanchezzbrahian 0:ef627c2ce25b 136 break;
sanchezzbrahian 0:ef627c2ce25b 137 case 3:
sanchezzbrahian 0:ef627c2ce25b 138 mat_tmp[0]=mat_tmp1[6];
sanchezzbrahian 0:ef627c2ce25b 139 mat_tmp[1]=mat_tmp1[5];
sanchezzbrahian 0:ef627c2ce25b 140 mat_tmp[2]=mat_tmp1[4];
sanchezzbrahian 0:ef627c2ce25b 141 break;
sanchezzbrahian 0:ef627c2ce25b 142 case 4:
sanchezzbrahian 0:ef627c2ce25b 143 mat_tmp[0]=mat_tmp1[0];
sanchezzbrahian 0:ef627c2ce25b 144 mat_tmp[1]=mat_tmp1[1];
sanchezzbrahian 0:ef627c2ce25b 145 mat_tmp[2]=mat_tmp1[2];
sanchezzbrahian 0:ef627c2ce25b 146 break;
sanchezzbrahian 0:ef627c2ce25b 147 }
sanchezzbrahian 0:ef627c2ce25b 148 }
sanchezzbrahian 0:ef627c2ce25b 149 if(grad>4){
sanchezzbrahian 0:ef627c2ce25b 150 grad=0;
sanchezzbrahian 0:ef627c2ce25b 151 }
sanchezzbrahian 0:ef627c2ce25b 152 break;
sanchezzbrahian 0:ef627c2ce25b 153 case 2:
sanchezzbrahian 0:ef627c2ce25b 154 mcol=1; //se pone valor 1 para que haga el deplazamiento hacia los lados
sanchezzbrahian 0:ef627c2ce25b 155
sanchezzbrahian 0:ef627c2ce25b 156 for(i=0;i<3;i++)
sanchezzbrahian 0:ef627c2ce25b 157 {
sanchezzbrahian 0:ef627c2ce25b 158 mat_tmp[i]=mat_tmp[i]>>mcol; //mover derecha
sanchezzbrahian 0:ef627c2ce25b 159 }
sanchezzbrahian 0:ef627c2ce25b 160 for(i=0;i<7;i++){
sanchezzbrahian 0:ef627c2ce25b 161 mat_tmp1[i]=mat_tmp1[i]>>mcol;
sanchezzbrahian 0:ef627c2ce25b 162 }
sanchezzbrahian 0:ef627c2ce25b 163
sanchezzbrahian 0:ef627c2ce25b 164 break;
sanchezzbrahian 0:ef627c2ce25b 165 case 3:
sanchezzbrahian 0:ef627c2ce25b 166 mcol=1;
sanchezzbrahian 0:ef627c2ce25b 167 for(i=0;i<7;i++){
sanchezzbrahian 0:ef627c2ce25b 168 mat_tmp1[i]=mat_tmp1[i]<<mcol;
sanchezzbrahian 0:ef627c2ce25b 169 }
sanchezzbrahian 0:ef627c2ce25b 170 for(i=0;i<3;i++)
sanchezzbrahian 0:ef627c2ce25b 171 {
sanchezzbrahian 0:ef627c2ce25b 172 mat_tmp[i]=mat_tmp[i]<<mcol; //mover izquierda
sanchezzbrahian 0:ef627c2ce25b 173 }
sanchezzbrahian 0:ef627c2ce25b 174
sanchezzbrahian 0:ef627c2ce25b 175 break;
sanchezzbrahian 0:ef627c2ce25b 176 }
sanchezzbrahian 0:ef627c2ce25b 177 }
sanchezzbrahian 0:ef627c2ce25b 178 void act_matrix(uint8_t* temp)//Evalua figura guardada y su espacio
sanchezzbrahian 0:ef627c2ce25b 179 {
sanchezzbrahian 0:ef627c2ce25b 180 for (i=0;i<9;i++){
sanchezzbrahian 0:ef627c2ce25b 181 save=*(temp+2)& mat_act[i];
sanchezzbrahian 0:ef627c2ce25b 182 if (save==0 )
sanchezzbrahian 0:ef627c2ce25b 183 {
sanchezzbrahian 0:ef627c2ce25b 184 fila=i+1;
sanchezzbrahian 0:ef627c2ce25b 185 }
sanchezzbrahian 0:ef627c2ce25b 186 if (save!=0)
sanchezzbrahian 0:ef627c2ce25b 187 {
sanchezzbrahian 0:ef627c2ce25b 188 fila=i;
sanchezzbrahian 0:ef627c2ce25b 189 i=9;
sanchezzbrahian 0:ef627c2ce25b 190 }
sanchezzbrahian 0:ef627c2ce25b 191 }
sanchezzbrahian 0:ef627c2ce25b 192 }
sanchezzbrahian 0:ef627c2ce25b 193
sanchezzbrahian 0:ef627c2ce25b 194 void guardar_mat(uint8_t *temp)//guarda la matriz
sanchezzbrahian 0:ef627c2ce25b 195 {
sanchezzbrahian 0:ef627c2ce25b 196 mat_act[fila-3]=(*(temp+0))| mat_act[fila-3];
sanchezzbrahian 0:ef627c2ce25b 197 mat_act[fila-2]=(*(temp+1))| mat_act[fila-2];
sanchezzbrahian 0:ef627c2ce25b 198 mat_act[fila-1]=(*(temp+2))| mat_act[fila-1];
sanchezzbrahian 0:ef627c2ce25b 199 };
sanchezzbrahian 0:ef627c2ce25b 200 void elim_lin()
sanchezzbrahian 0:ef627c2ce25b 201 {
sanchezzbrahian 0:ef627c2ce25b 202 for(i=0;i<9;i++){
sanchezzbrahian 0:ef627c2ce25b 203 if(mat_act[i]==255){
sanchezzbrahian 0:ef627c2ce25b 204 for(uint8_t a=i;a>=1;a--){
sanchezzbrahian 0:ef627c2ce25b 205 sendSPI(a,mat_act[a-1]);
sanchezzbrahian 0:ef627c2ce25b 206 mat_act[a]=mat_act[a-1];
sanchezzbrahian 0:ef627c2ce25b 207 }
sanchezzbrahian 0:ef627c2ce25b 208 }
sanchezzbrahian 0:ef627c2ce25b 209 }
sanchezzbrahian 0:ef627c2ce25b 210 }
sanchezzbrahian 0:ef627c2ce25b 211 int main()
sanchezzbrahian 0:ef627c2ce25b 212 {
sanchezzbrahian 0:ef627c2ce25b 213 test();
sanchezzbrahian 0:ef627c2ce25b 214 borrar();
sanchezzbrahian 0:ef627c2ce25b 215 while(1){
sanchezzbrahian 0:ef627c2ce25b 216 while(read_command()==0);
sanchezzbrahian 0:ef627c2ce25b 217 //d_ale();
sanchezzbrahian 0:ef627c2ce25b 218 ingred_d();
sanchezzbrahian 0:ef627c2ce25b 219 act_matrix(mat_tmp);
sanchezzbrahian 0:ef627c2ce25b 220 for (cont=0;cont<fila;cont++)
sanchezzbrahian 0:ef627c2ce25b 221 {
sanchezzbrahian 0:ef627c2ce25b 222 move_fig();
sanchezzbrahian 0:ef627c2ce25b 223 act_matrix(mat_tmp);
sanchezzbrahian 0:ef627c2ce25b 224 imp_mat(mat_tmp);
sanchezzbrahian 0:ef627c2ce25b 225 wait_ms(500);
sanchezzbrahian 0:ef627c2ce25b 226 }
sanchezzbrahian 0:ef627c2ce25b 227 guardar_mat(mat_tmp);
sanchezzbrahian 0:ef627c2ce25b 228 elim_lin();
sanchezzbrahian 0:ef627c2ce25b 229 }
sanchezzbrahian 0:ef627c2ce25b 230 }