julian alvarez
/
moggo
Código simplificado, faltan grados, detenerse, columna.
Diff: moggo.cpp
- Revision:
- 1:78d5142da831
- Parent:
- 0:3a60cf1c28ca
- Child:
- 2:eac5a192998a
--- a/moggo.cpp Thu Sep 06 21:58:40 2018 +0000 +++ b/moggo.cpp Mon Sep 10 20:19:56 2018 +0000 @@ -1,17 +1,20 @@ #include "mbed.h" #include "moggo.h" //agrega la libreria que contiene las figuras. -SPI deviceM(PB_5, PB_4, PB_3); //define el Clock, Dato salida (miso) y Dato de entrada (mosi). -DigitalOut ssel (PB_9); //Chip Select para el controlador. +SPI deviceM(PB_15, PB_14, PB_13); +DigitalOut ssel (PB_12); +//SPI deviceM(PB_5, PB_4, PB_3); //define el Clock, Dato salida (miso) y Dato de entrada (mosi). +//DigitalOut ssel (PB_9); //Chip Select para el controlador. Serial command(USBTX,USBRX); //habilitar la comunicacion serial a traves del puerto usb. -#define VEL 500 //Velocidad de actualizacion de dato en el controlador. +#define VEL 250 //Velocidad de actualizacion de dato en el controlador. void debug_m(char *s , ... ); //depurador de errores, probador. uint8_t mat_act[8]={0,0,0,0,0,0,0,0}; //Matriz para mostrar en pantalla. -uint8_t mat_tmp[11]={0b10000000,0b10000000,0b11000000,0,0,0,0,0,0,0}; //Matriz temporal para arrojar las fichas. - +uint8_t mat_tmp[8]={0,0,0,0,0,0,0,0}; //Matriz temporal para arrojar las fichas. +uint8_t cont=0; +uint8_t fila=0; void sendSPI(uint8_t d1, uint8_t d2) { @@ -26,43 +29,47 @@ void test() //test { sendSPI(0x09,0); //no decodificacion - sendSPI(0x0A,0x0); //intensidad + sendSPI(0x0A,0x0); //intensidad sendSPI(0x0B,0x07); //usa 7 leds sendSPI(0x0C,1); //no apaga sendSPI(0x0F,0); //operacion normal } +/*void imp_mat(uint8_t* vC) // recibe matriz actualizada -void imp_mat(uint8_t* vC) +{ + for (uint8_t i=0;i<8;i++){ //Realiza la impresion de la matriz. + sendSPI(i,*(vC+i-1)); + } +}*/ + +/*void baja(uint8_t* vC) // recibe matriz actualizada { - uint8_t i =0; - for (i=1;i<9;i++){ //Realiza la impresion de la matriz. - sendSPI(i,*(vC+i-1)); + for (uint8_t i=0;i<8;i++){ //Realiza la impresion de la matriz. + sendSPI(i,*(vC+i)); + sendSPI(i+1,*(vC+(i+1))); + sendSPI(i+2,*(vC+(i+2))); + wait_ms(VEL); } -} +}*/ -void act_mat(uint8_t* mascara) + +/*void act_mat(uint8_t* mascara) //recibe matriz temporal { for (int i=0; i<8;i++) //Es la matriz que tenemos como resultado de las diferentes piezas. mat_act[i]= (*(mascara+i)); - } +} */ -void cop_mat(uint8_t* m2) +void cop_mat(uint8_t a,uint8_t b,uint8_t c,uint8_t* fig) { - for (int i=0; i<11;i++){ //Realiza una copia de la matriz actual fila por fila. - mat_tmp[i]= *(m2+i); - } + //Realiza una copia de la matriz actual fila por fila. + mat_tmp[0]= *(fig+a); + mat_tmp[1]= *(fig+b); + mat_tmp[2]= *(fig+c); } - -void desplazar_fila(){ //Realiza el desplazamiento para bajar la figura. - for (int i=0; i<11;i++) - mat_tmp[i]= mat_tmp[i]>>1; - -} - -void borrar() +void borrar() //borrar toda la matriz; { int i; for(i=0;i<=8;i++) @@ -71,39 +78,95 @@ } }; -void dibujar(char type_fig,char grados, char columna) -{ - //borrar(); - - switch (type_fig){ - case C_TYPE: cop_mat(FIG_C); break; //Se envia el vector que contiene la figura a la funcion copiar matriz. - case I_TYPE: cop_mat(FIG_I); break; - case L_TYPE: cop_mat(FIG_L); break; - case T_TYPE: cop_mat(FIG_T); break; - case S_TYPE: cop_mat(FIG_S); break; +void buscar_fil(){ + //uint8_t fil; + for (uint8_t i=0;i<8;i++){ //Realiza la impresion de la matriz. + if(mat_act[i]==0) + fila=i; + if(mat_act[i]!=0){ + fila=i-2; + i=9; + } } - +}; + +void guardar_mat(){ + //borrar(); + wait_ms(VEL); + mat_act[fila-1]=mat_tmp[0]; + mat_act[fila]=mat_tmp[1]; + mat_act[fila+1]=mat_tmp[2]; + sendSPI(fila-1,mat_act[fila-1]); + sendSPI(fila,mat_act[fila]); + sendSPI(fila+1,mat_act[fila+1]); + }; + +void imp_mat(uint8_t *temp){ + uint8_t i=0; + buscar_fil(); + for (i=0;i<fila;i++){ //Realiza la impresion de la matriz. + sendSPI(i-1,0); + sendSPI(i,*(temp+0)); + sendSPI(i+1,*(temp+1)); + sendSPI(i+2,*(temp+2)); + wait_ms(VEL); + } + // if(cont==0){ + // guardar_mat(i,mat_tmp); + // cont=1; + // } } + +/*void desplazar_fila(){ //Realiza el desplazamiento para copiar el vector + for (int i=0;i<11;i++) + mat_tmp[i]= mat_tmp[i]>>1; //Podemos indicar en que columna caer + +} */ + +void dibujar(char type_fig,char grados,char columna) +{ + //borrar(); + switch (type_fig){ //Se envia el vector que contiene la figura a la funcion copiar matriz. + case 1: cop_mat(5,1,1,FIG_C); break; //1: cuadro; + case 2: cop_mat(0,0,0,FIG_C); break; //2: I; + case 3: cop_mat(0,0,1,FIG_C); break; //3: L; + case 4: cop_mat(5,2,3,FIG_C); break; //4: T; + case 5: cop_mat(5,4,1,FIG_C); break; //5: S; + } +} + +/*void dibujar(char type_fig,char grados,char columna) +{ + //borrar(); + switch (type_fig){ + case C_TYPE: cop_mat(1,1,0); break; //Se envia el vector que contiene la figura a la funcion copiar matriz. + case I_TYPE: cop_mat(3,1,2); break; + case L_TYPE: cop_mat(1,1,2); break; + case T_TYPE: cop_mat(1,1,2); break; + case S_TYPE: cop_mat(1,1,2); break; + } +}*/ + int main() { - char tipo_fig=1,ncolumna=1,grados=1,lee1=0x00,lee2=0x00; // enviar ficha y columna + char tipo_fig=1,ncolumna=1,grados=1,lee1=0,lee2=0; // enviar ficha y columna test(); + borrar(); while(1){ - borrar(); - lee1=command.getc(); //recive '<' para iniciar la linea de comandos. + dibujar(1,1,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)>'. + 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)>'. { dibujar(tipo_fig,grados,ncolumna); - for(int i=0;i<8;i++){ - desplazar_fila(); - act_mat(mat_tmp); - imp_mat(mat_act); - wait_ms(VEL); - } + //desplazar_fila(); + //act_mat(mat_tmp); + imp_mat(mat_tmp); + guardar_mat(); + //baja(mat_act); } } }