Código simplificado, grados, funciona detencion filas, columna completo, puede recoger 4 fuguras en caracteres.

Dependencies:   mbed mbed

Fork of moggo_2 by julian alvarez

Committer:
jiuk
Date:
Fri Sep 14 04:00:36 2018 +0000
Revision:
7:2e5fc288f80b
Parent:
6:19ee6d34681e
Imprime correctamente las figuras y actualiza la matriz, no se logra arrojar mas de n cantidad de figuras.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jiuk 0:3a60cf1c28ca 1 #include "mbed.h"
jiuk 0:3a60cf1c28ca 2 #include "moggo.h" //agrega la libreria que contiene las figuras.
jiuk 0:3a60cf1c28ca 3
jiuk 1:78d5142da831 4 SPI deviceM(PB_15, PB_14, PB_13);
jiuk 1:78d5142da831 5 DigitalOut ssel (PB_12);
jiuk 1:78d5142da831 6 //SPI deviceM(PB_5, PB_4, PB_3); //define el Clock, Dato salida (miso) y Dato de entrada (mosi).
jiuk 1:78d5142da831 7 //DigitalOut ssel (PB_9); //Chip Select para el controlador.
jiuk 0:3a60cf1c28ca 8 Serial command(USBTX,USBRX); //habilitar la comunicacion serial a traves del puerto usb.
jiuk 0:3a60cf1c28ca 9
jiuk 5:015d77a1c38f 10 #define VEL 125 //Velocidad de actualizacion de dato en el controlador.
jiuk 0:3a60cf1c28ca 11
jiuk 2:eac5a192998a 12 uint8_t mat_act[11]={0,0,0,0,0,0,0,0,0,0,0}; //Matriz para mostrar en pantalla.
jiuk 2:eac5a192998a 13 uint8_t mat_tmp[8]={0,0,0,0,0,0,0,0}; //Matriz temporal para arrojar las fichas.
jiuk 5:015d77a1c38f 14 uint8_t mat_tmp1[8]={0,0,0,0,0,0,0,0};
jiuk 5:015d77a1c38f 15 uint8_t fila=0,cont=0;
jiuk 0:3a60cf1c28ca 16
jiuk 0:3a60cf1c28ca 17 void sendSPI(uint8_t d1, uint8_t d2)
jiuk 0:3a60cf1c28ca 18 {
jiuk 0:3a60cf1c28ca 19 deviceM.unlock();
jiuk 0:3a60cf1c28ca 20 ssel=0;
jiuk 2:eac5a192998a 21 deviceM.write(d1);
jiuk 0:3a60cf1c28ca 22 deviceM.write(d2);
jiuk 0:3a60cf1c28ca 23 ssel=1;
jiuk 0:3a60cf1c28ca 24 deviceM.lock();
jiuk 0:3a60cf1c28ca 25 }
jiuk 0:3a60cf1c28ca 26
jiuk 0:3a60cf1c28ca 27 void test() //test
jiuk 0:3a60cf1c28ca 28 {
jiuk 0:3a60cf1c28ca 29 sendSPI(0x09,0); //no decodificacion
jiuk 1:78d5142da831 30 sendSPI(0x0A,0x0); //intensidad
jiuk 0:3a60cf1c28ca 31 sendSPI(0x0B,0x07); //usa 7 leds
jiuk 0:3a60cf1c28ca 32 sendSPI(0x0C,1); //no apaga
jiuk 0:3a60cf1c28ca 33 sendSPI(0x0F,0); //operacion normal
jiuk 0:3a60cf1c28ca 34 }
jiuk 0:3a60cf1c28ca 35
jiuk 2:eac5a192998a 36 void cop_mat(uint8_t a,uint8_t b,uint8_t c,uint8_t* fig,uint8_t columna)
jiuk 6:19ee6d34681e 37 {
jiuk 6:19ee6d34681e 38 mat_tmp[0]= *(fig+5)>>columna-1;
jiuk 6:19ee6d34681e 39 mat_tmp[1]= *(fig+a)>>columna-1; //Realiza una copia de la matriz actual fila por fila.
jiuk 6:19ee6d34681e 40 mat_tmp[2]= *(fig+b)>>columna-1;
jiuk 6:19ee6d34681e 41 mat_tmp[3]= *(fig+c)>>columna-1;
jiuk 0:3a60cf1c28ca 42 }
jiuk 0:3a60cf1c28ca 43
jiuk 1:78d5142da831 44 void borrar() //borrar toda la matriz;
jiuk 0:3a60cf1c28ca 45 {
jiuk 0:3a60cf1c28ca 46 int i;
jiuk 0:3a60cf1c28ca 47 for(i=0;i<=8;i++)
jiuk 0:3a60cf1c28ca 48 {
jiuk 0:3a60cf1c28ca 49 sendSPI(0x0+i,0x00);
jiuk 0:3a60cf1c28ca 50 }
jiuk 0:3a60cf1c28ca 51 };
jiuk 0:3a60cf1c28ca 52
jiuk 1:78d5142da831 53 void buscar_fil(){
jiuk 5:015d77a1c38f 54 for (uint8_t i=0;i<9;i++){
jiuk 7:2e5fc288f80b 55 if(((mat_act[i]& mat_tmp[3])==0) && ((mat_act[i]& mat_tmp[1])==0) && ((mat_act[i]& mat_tmp[0])==0)){
jiuk 1:78d5142da831 56 fila=i;
jiuk 5:015d77a1c38f 57 command.printf("\n1- comparacion inicial:\n %d",mat_act[i]& mat_tmp[2]);
jiuk 5:015d77a1c38f 58 }
jiuk 7:2e5fc288f80b 59 if((mat_act[i]& mat_tmp[3])!=0){
jiuk 4:25ef9b3bd177 60 fila=i-1; //cambio de 2 a 1
jiuk 5:015d77a1c38f 61 i=9;
jiuk 5:015d77a1c38f 62 command.printf("\n2- comparacion mat_act[i]& mat_tmp[2] :\n %d",mat_act[i]& mat_tmp[2]);
jiuk 5:015d77a1c38f 63 }
jiuk 7:2e5fc288f80b 64 if((mat_act[i]& mat_tmp[2])!=0){ //se condicionan las salidas de la busqueda de lanueva fila
jiuk 5:015d77a1c38f 65 fila=i; //cambio de 2 a 1
jiuk 5:015d77a1c38f 66 i=9;
jiuk 5:015d77a1c38f 67 command.printf("\n3- comparacion mat_act[i]& mat_tmp[1] :\n %d",mat_act[i]& mat_tmp[1]);
jiuk 5:015d77a1c38f 68 }
jiuk 7:2e5fc288f80b 69 if((mat_act[i]& mat_tmp[1])!=0){
jiuk 5:015d77a1c38f 70 fila=i+1; //cambio de 2 a 1
jiuk 5:015d77a1c38f 71 i=9;
jiuk 5:015d77a1c38f 72 command.printf("\n4- comparacion mat_act[i]& mat_tmp[0]:\n %d",mat_act[i]& mat_tmp[0]);
jiuk 1:78d5142da831 73 }
jiuk 0:3a60cf1c28ca 74 }
jiuk 6:19ee6d34681e 75 if(fila>8)
jiuk 7:2e5fc288f80b 76 fila=8;
jiuk 2:eac5a192998a 77 command.printf("\n buscar fila \n %d",fila);
jiuk 2:eac5a192998a 78 command.printf("\n ******************************* \n ");
jiuk 2:eac5a192998a 79 };
jiuk 2:eac5a192998a 80
jiuk 1:78d5142da831 81 void guardar_mat(){
jiuk 6:19ee6d34681e 82 mat_act[fila-3]=mat_tmp1[0];
jiuk 6:19ee6d34681e 83 mat_act[fila-2]=mat_tmp1[1];
jiuk 6:19ee6d34681e 84 mat_act[fila-1]=mat_tmp1[2]; //pasa de 0 a -1
jiuk 6:19ee6d34681e 85 mat_act[fila]=mat_tmp1[3]; //pasa de +1 a 0
jiuk 1:78d5142da831 86 };
jiuk 1:78d5142da831 87
jiuk 2:eac5a192998a 88
jiuk 5:015d77a1c38f 89 void imp_mat(uint8_t *temp){ //se genera la variable global cont.
jiuk 1:78d5142da831 90 buscar_fil();
jiuk 5:015d77a1c38f 91 for (cont=0;cont<=fila;cont++){
jiuk 6:19ee6d34681e 92 mat_tmp1[0]=(mat_tmp[0]+ mat_act[cont-3]);
jiuk 6:19ee6d34681e 93 mat_tmp1[1]=(mat_tmp[1]+ mat_act[cont-2]);
jiuk 6:19ee6d34681e 94 mat_tmp1[2]=(mat_tmp[2]+ mat_act[cont-1]);
jiuk 6:19ee6d34681e 95 mat_tmp1[3]=(mat_tmp[3]+ mat_act[cont]); //condicionador de funcion, se descarta por una funcion smart.
jiuk 6:19ee6d34681e 96 sendSPI(cont-3,mat_tmp1[0]);
jiuk 6:19ee6d34681e 97 sendSPI(cont-2,mat_tmp1[1]);
jiuk 6:19ee6d34681e 98 sendSPI(cont-1,mat_tmp1[2]);
jiuk 6:19ee6d34681e 99 sendSPI(cont ,mat_tmp1[3]); //pasa de i+2 a i+1
jiuk 1:78d5142da831 100 wait_ms(VEL);
jiuk 5:015d77a1c38f 101 }
jiuk 0:3a60cf1c28ca 102 }
jiuk 0:3a60cf1c28ca 103
jiuk 1:78d5142da831 104 void dibujar(char type_fig,char grados,char columna)
jiuk 6:19ee6d34681e 105 {
jiuk 1:78d5142da831 106 switch (type_fig){ //Se envia el vector que contiene la figura a la funcion copiar matriz.
jiuk 2:eac5a192998a 107 case 1: cop_mat(5,1,1,FIG_ALL,columna); break; //1: cuadro;
jiuk 2:eac5a192998a 108
jiuk 2:eac5a192998a 109 case 2: if(grados==1 || grados==3)
jiuk 2:eac5a192998a 110 cop_mat(0,0,0,FIG_ALL,columna);
jiuk 2:eac5a192998a 111 if(grados==2 || grados==4)
jiuk 2:eac5a192998a 112 cop_mat(5,5,2,FIG_ALL,columna); //2: I;
jiuk 2:eac5a192998a 113 break;
jiuk 2:eac5a192998a 114
jiuk 2:eac5a192998a 115 case 3: if(grados==1)
jiuk 2:eac5a192998a 116 cop_mat(0,0,1,FIG_ALL,columna); //3: L;
jiuk 2:eac5a192998a 117 if(grados==2)
jiuk 2:eac5a192998a 118 cop_mat(5,2,0,FIG_ALL,columna);
jiuk 2:eac5a192998a 119 if(grados==3)
jiuk 2:eac5a192998a 120 cop_mat(1,0,0,FIG_ALL,columna);
jiuk 2:eac5a192998a 121 if(grados==4)
jiuk 2:eac5a192998a 122 cop_mat(5,0,2,FIG_ALL,columna);
jiuk 2:eac5a192998a 123 break; //2: I;
jiuk 2:eac5a192998a 124
jiuk 2:eac5a192998a 125 case 4: if(grados==1)
jiuk 2:eac5a192998a 126 cop_mat(5,2,0,FIG_ALL,columna); //4: T;
jiuk 2:eac5a192998a 127 if(grados==2)
jiuk 2:eac5a192998a 128 cop_mat(3,1,3,FIG_ALL,columna);
jiuk 2:eac5a192998a 129 if(grados==3)
jiuk 2:eac5a192998a 130 cop_mat(5,3,2,FIG_ALL,columna);
jiuk 2:eac5a192998a 131 if(grados==4)
jiuk 2:eac5a192998a 132 cop_mat(0,1,0,FIG_ALL,columna);
jiuk 2:eac5a192998a 133 break;
jiuk 2:eac5a192998a 134
jiuk 2:eac5a192998a 135 case 5: if(grados==1 || grados==3)
jiuk 2:eac5a192998a 136 cop_mat(5,4,1,FIG_ALL,columna); //5: S;
jiuk 2:eac5a192998a 137 if(grados==2 || grados==4)
jiuk 2:eac5a192998a 138 cop_mat(0,1,3,FIG_ALL,columna);
jiuk 2:eac5a192998a 139 break;
jiuk 1:78d5142da831 140 }
jiuk 1:78d5142da831 141 }
jiuk 1:78d5142da831 142
jiuk 0:3a60cf1c28ca 143 int main() {
jiuk 7:2e5fc288f80b 144 int cant_fichas=10; // cantidad de fichas que se enviaran en la linea de comando.
jiuk 7:2e5fc288f80b 145 int info[50]; // almacenara todos los caracteres que se escriban inicialmente maximo 4 figuras.
jiuk 0:3a60cf1c28ca 146 test();
jiuk 1:78d5142da831 147 borrar();
jiuk 7:2e5fc288f80b 148 int r=cant_fichas*5; // r toma el valor de las fichas por 5 porque "<xyz>" son 5 caracteres.
jiuk 7:2e5fc288f80b 149 for(int i=0;i<=r;i+=5) // almacenallena el vector que recibe los caracteres de las fichas.
jiuk 5:015d77a1c38f 150 {
jiuk 5:015d77a1c38f 151 for(int j=0;j<5;j++ )
jiuk 5:015d77a1c38f 152 {
jiuk 5:015d77a1c38f 153 info[i+j]=command.getc();
jiuk 5:015d77a1c38f 154 }
jiuk 5:015d77a1c38f 155 }
jiuk 7:2e5fc288f80b 156 //while(1){
jiuk 7:2e5fc288f80b 157 for (int k=0;k<r;k+=5) //imprime el vector con las fichas
jiuk 5:015d77a1c38f 158 {
jiuk 5:015d77a1c38f 159 if(info[k]==0x3c && info[k+4]==0x3e)
jiuk 0:3a60cf1c28ca 160 {
jiuk 7:2e5fc288f80b 161 if(info[k+1]<6 && info[k+2]<5 && info[k+3]<9)
jiuk 7:2e5fc288f80b 162 {
jiuk 5:015d77a1c38f 163 dibujar(info[k+1],info[k+2],info[k+3]);
jiuk 5:015d77a1c38f 164 imp_mat(mat_tmp);
jiuk 5:015d77a1c38f 165 guardar_mat();
jiuk 7:2e5fc288f80b 166 }
jiuk 7:2e5fc288f80b 167 else
jiuk 7:2e5fc288f80b 168 goto error;
jiuk 5:015d77a1c38f 169 }
jiuk 5:015d77a1c38f 170 else
jiuk 5:015d77a1c38f 171 {
jiuk 7:2e5fc288f80b 172 error:
jiuk 5:015d77a1c38f 173 while(1) // error infinito en caso que no se cumplan las condiciones
jiuk 5:015d77a1c38f 174 {
jiuk 5:015d77a1c38f 175 borrar();
jiuk 5:015d77a1c38f 176 sendSPI(0x04,0b00011000);
jiuk 7:2e5fc288f80b 177 sendSPI(0x05,0b00011000);
jiuk 7:2e5fc288f80b 178 wait(0.5);
jiuk 5:015d77a1c38f 179 sendSPI(0x04,0b00000000);
jiuk 7:2e5fc288f80b 180 sendSPI(0x05,0b00000000);
jiuk 7:2e5fc288f80b 181 wait(0.1);
jiuk 5:015d77a1c38f 182 }
jiuk 5:015d77a1c38f 183 }
jiuk 6:19ee6d34681e 184 wait(1); // tiempo entre caida de cada pieza puede dejarlo pequeño apra optimizar tiempo
jiuk 7:2e5fc288f80b 185 // }
jiuk 5:015d77a1c38f 186 }
jiuk 5:015d77a1c38f 187 }