Código simplificado, grados, funciona detencion filas, columna falta.

Dependencies:   mbed mbed

Fork of moggo_1 by julian alvarez

Files at this revision

API Documentation at this revision

Comitter:
jiuk
Date:
Thu Sep 13 06:05:50 2018 +0000
Parent:
4:25ef9b3bd177
Commit message:
cadena de 3, falla en guardar matriz (falta guardar el punto cero sobre la figura).

Changed in this revision

moggo.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 25ef9b3bd177 -r 015d77a1c38f moggo.cpp
--- 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