Código simplificado, faltan grados, detenerse, columna.

Dependencies:   mbed mbed

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  
}