julian alvarez
/
moggo
Código simplificado, faltan grados, detenerse, columna.
moggo.cpp
- Committer:
- jiuk
- Date:
- 2018-09-10
- Revision:
- 1:78d5142da831
- Parent:
- 0:3a60cf1c28ca
- Child:
- 2:eac5a192998a
File content as of revision 1:78d5142da831:
#include "mbed.h" #include "moggo.h" //agrega la libreria que contiene las figuras. 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 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[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) { deviceM.unlock(); ssel=0; deviceM.write(d1); deviceM.write(d2); ssel=1; deviceM.lock(); } void test() //test { sendSPI(0x09,0); //no decodificacion 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 { 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 { 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) //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 a,uint8_t b,uint8_t c,uint8_t* fig) { //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 borrar() //borrar toda la matriz; { int i; for(i=0;i<=8;i++) { sendSPI(0x0+i,0x00); } }; 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=0,lee2=0; // enviar ficha y columna test(); borrar(); while(1){ 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)>'. { dibujar(tipo_fig,grados,ncolumna); //desplazar_fila(); //act_mat(mat_tmp); imp_mat(mat_tmp); guardar_mat(); //baja(mat_act); } } } void debug_m(char *s , ... ){ #if DEBUG command.printf(s); //busca errores para depurar en el sistema datos guardados. #endif }