Brahian Stiv Sanchez Giraldo / Mbed 2 deprecated bracri

Dependencies:   mbed

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