Código simplificado, grados, funciona detencion filas, columna falta.
Fork of moggo_1 by
Revision 5:015d77a1c38f, committed 2018-09-13
- Comitter:
- jiuk
- Date:
- Thu Sep 13 06:05:50 2018 +0000
- Parent:
- 4:25ef9b3bd177
- Commit message:
- cadena de 3, falla en guardar matriz (falta guardar el punto cero sobre la figura).
Changed in this revision
moggo.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 25ef9b3bd177 -r 015d77a1c38f moggo.cpp --- a/moggo.cpp Wed Sep 12 20:14:20 2018 +0000 +++ b/moggo.cpp Thu Sep 13 06:05:50 2018 +0000 @@ -7,11 +7,12 @@ //DigitalOut ssel (PB_9); //Chip Select para el controlador. Serial command(USBTX,USBRX); //habilitar la comunicacion serial a traves del puerto usb. -#define VEL 250 //Velocidad de actualizacion de dato en el controlador. +#define VEL 125 //Velocidad de actualizacion de dato en el controlador. uint8_t mat_act[11]={0,0,0,0,0,0,0,0,0,0,0}; //Matriz para mostrar en pantalla. uint8_t mat_tmp[8]={0,0,0,0,0,0,0,0}; //Matriz temporal para arrojar las fichas. -uint8_t fila=0; +uint8_t mat_tmp1[8]={0,0,0,0,0,0,0,0}; +uint8_t fila=0,cont=0; void sendSPI(uint8_t d1, uint8_t d2) { @@ -49,50 +50,54 @@ }; void buscar_fil(){ - for (uint8_t i=0;i<8;i++){ //Realiza la impresion de la matriz. - if(mat_act[i]==0) + for (uint8_t i=0;i<9;i++){ + if((mat_act[i]& mat_tmp[2])==0){ //&& mat_act[i]& mat_tmp[1]==0 && mat_act[i]& mat_tmp[0]==0) fila=i; - if(mat_act[i]!=0){ + command.printf("\n1- comparacion inicial:\n %d",mat_act[i]& mat_tmp[2]); + } + if((mat_act[i]& mat_tmp[2])!=0){ fila=i-1; //cambio de 2 a 1 - i=8; + i=9; + command.printf("\n2- comparacion mat_act[i]& mat_tmp[2] :\n %d",mat_act[i]& mat_tmp[2]); + } + if((mat_act[i]& mat_tmp[1])!=0){ //se condicionan las salidas de la busqueda de lanueva fila + fila=i; //cambio de 2 a 1 + i=9; + command.printf("\n3- comparacion mat_act[i]& mat_tmp[1] :\n %d",mat_act[i]& mat_tmp[1]); + } + if((mat_act[i]& mat_tmp[0])!=0){ + fila=i+1; //cambio de 2 a 1 + i=9; + command.printf("\n4- comparacion mat_act[i]& mat_tmp[0]:\n %d",mat_act[i]& mat_tmp[0]); } } command.printf("\n buscar fila \n %d",fila); command.printf("\n ******************************* \n "); }; -void buscar_col(){ - uint8_t y; - y= mat_act[fila] & mat_tmp[2]; - if(y != 0){ - fila=0; - } - else{ - fila++; - } - command.printf("\n fila cambiada en columna: y=%d",y); -}; - void guardar_mat(){ - //borrar(); - wait_ms(VEL); - mat_act[fila-2]=mat_tmp[0]; - mat_act[fila-1]=mat_tmp[1]; //pasa de 0 a -1 - mat_act[fila]=mat_tmp[2]; //pasa de +1 a 0 + mat_act[fila-2]=mat_tmp1[0]; + mat_act[fila-1]=mat_tmp1[1]; //pasa de 0 a -1 + mat_act[fila]=mat_tmp1[2]; //pasa de +1 a 0 }; -void imp_mat(uint8_t *temp){ - uint8_t i=0; +void imp_mat(uint8_t *temp){ //se genera la variable global cont. buscar_fil(); - for (i=0;i<=fila;i++){ - - sendSPI(i-1,0); - sendSPI(i-1,*(temp+0)); - sendSPI(i,*(temp+1)); - sendSPI(i+1,*(temp+2)); //pasa de i+2 a i+1 + for (cont=0;cont<=fila;cont++){ + //mat_tmp1[-1]=(mat_tmp[0]+ mat_act[cont-2]); //se debe tener una copia y un cero encima de la ficha. + mat_tmp1[0]=(mat_tmp[0]+ mat_act[cont-2]); + mat_tmp1[1]=(mat_tmp[1]+ mat_act[cont-1]); + mat_tmp1[2]=(mat_tmp[2]+ mat_act[cont]); //condicionador de funcion, se descarta por una funcion smart. + sendSPI(cont-3,0); + sendSPI(cont-2,mat_tmp1[0]); + sendSPI(cont-1,mat_tmp1[1]); + sendSPI(cont,mat_tmp1[2]); //pasa de i+2 a i+1 + //mat_act[cont-2]=(mat_tmp[0]+ mat_act[cont-2]); + //mat_act[cont-1]=(mat_tmp[1]+ mat_act[cont-1]); + //mat_act[cont]=(mat_tmp[2]+ mat_act[cont]); wait_ms(VEL); - } + } } void dibujar(char type_fig,char grados,char columna) @@ -136,20 +141,40 @@ } int main() { - char tipo_fig=1,ncolumna=1,grados=1,lee1=0,lee2=0; // enviar ficha y columna + //char tipo_fig=1,ncolumna=1,grados=1,lee1=0,lee2=0,lee3=0; // enviar ficha y columna + int info[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // almacenara todos los caracteres que se escriban inicialmente maximo 4 figuras + int cant_fichas=3; // cantidad de fichas que se enviaran en la linea de comando test(); borrar(); - while(1){ - lee1=command.getc(); //recive '<' para iniciar la linea de comandos. - tipo_fig=command.getc(); - grados=command.getc(); - ncolumna=command.getc(); - lee2=command.getc(); //recive '>' para terminar la linea de comandos. - if(lee1==0x3c && lee2==0x3e) //solo imprime una figura si viene bajo el parametro '<(t_fig) (Grados) (Col)>'. + int r=cant_fichas*5; // r toma el valor de las fichas por 5 porque "<xyz>" son 5 caracteres + for(int i=0;i<=r;i+=5) // almacenallenael vector que recibe los caracteres de las fichas + { + for(int j=0;j<5;j++ ) + { + info[i+j]=command.getc(); + } + } + while(1){ + for (int k=0;k<=r;k+=5) //imprime el vector con las fichas + { + if(info[k]==0x3c && info[k+4]==0x3e) { - dibujar(tipo_fig,grados,ncolumna); - imp_mat(mat_tmp); - guardar_mat(); - } + dibujar(info[k+1],info[k+2],info[k+3]); + imp_mat(mat_tmp); + guardar_mat(); + } + else + { + while(1) // error infinito en caso que no se cumplan las condiciones + { + borrar(); + sendSPI(0x04,0b00011000); + wait(0.5); + sendSPI(0x04,0b00000000); + wait(0.5); + } + } + wait(2); // tiempo entre caida de cada pieza puede dejarlo pequeño apra optimizar tiempo } - } \ No newline at end of file + } +} \ No newline at end of file