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:
5:015d77a1c38f
Parent:
4:25ef9b3bd177
Child:
6:19ee6d34681e
--- 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