Código simplificado, grados, funciona detencion filas, columna completo, puede recoger 4 fuguras en caracteres.

Dependencies:   mbed mbed

Fork of moggo_2 by julian alvarez

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);          
             }     
         }
     }