Código simplificado, grados, funciona detencion filas, columna completo, puede recoger 4 fuguras en caracteres.
Fork of moggo_2 by
moggo.cpp@7:2e5fc288f80b, 2018-09-14 (annotated)
- 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?
User | Revision | Line number | New 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 | } |