Dependencies:   mbed

Revision:
1:917b402c9b00
Parent:
0:10701585113f
Child:
2:88b9ec493af4
--- a/main.cpp	Tue Jun 11 18:57:49 2019 +0000
+++ b/main.cpp	Sat Jun 15 22:02:38 2019 +0000
@@ -27,6 +27,7 @@
 void displays();
 void reset_variables();
 void analizo_cables();
+void actualizar_valores_display ();
 
 DigitalIn reset(PTE1);
 DigitalIn cable_0(PTD1);
@@ -58,60 +59,61 @@
                 i++;
                 if((cable_0+cable_1+cable_2+cable_3!=4)&&(mostrado==0)) {
                     mostrado=1;
-                    printf("Deben estar todos los cables conectados para poder empezar a jugar\r\n");
+                    printf("\r\nDeben estar todos los cables conectados para poder empezar a jugar\r\n");
                 }
                 if((reset==0)&&(cable_0+cable_1+cable_2+cable_3==4)) {
                     srand(i);
-                    printf("Desconecte los cables en el orden correcto para desactivar la bomba\r\n");
+                    printf("\r\nDesconecte los cables en el orden correcto para desactivar la bomba\r\n");
                     printf("Tienes 20 segundos antes de que la bomba explete!\r\n");
                     //Reinicio todas las variables necesarias para un juego nuevo
-                    bomba=1;
+                    bomba=2;
                     mostrado=0;
                     reset_variables();
+                    generar_patron();
+                    printf("\r\nPatron:\r\n");
+                    printf("%d\r\n",patron[0]);
+                    printf("%d\r\n",patron[1]);
+                    printf("%d\r\n",patron[2]);
+                    printf("%d\r\n",patron[3]);
                 }
                 break;
-            case 1://Genero el patron
-                generar_patron();
-                //printf("%d\r\n",patron[0]);
-                //printf("%d\r\n",patron[1]);
-                //printf("%d\r\n",patron[2]);
-                //printf("%d\r\n",patron[3]);
-                bomba=2;
-                break;
             case 2://Me fijo si se desconectó algún cable o si se terminó el tiempo
                 analizo_cables();
                 if(usuario[ingreso]!=4)
                     bomba=3;
                 //Si terminó el tiempo levanto el flag "perder"
                 if(segundos==0) {
-                    printf("Se acabo el tiempo! La bomba exploto\r\n");
-                    perder=1;
+                    printf("\r\nSe acabo el tiempo! La bomba exploto\r\n");
                     bomba=3;
                 }
                 break;
             case 3://Analizo el dato ingresado
+                //Si ingresé un cable mal
+                if((usuario[ingreso]!=patron[ingreso])||(segundos==0)) {
+                    //Si el dato es incorrecto levanto el flag "perder"
+                    perder=1;
+                    if(segundos!=0)
+                        printf("\r\nCable Incorrecto! La bomba exploto\r\n");
+                }
                 //Si el dato es correcto sumo la variable "ingreso"
-                if(usuario[ingreso]==patron[ingreso]) {
+                if((usuario[ingreso]==patron[ingreso]) && (segundos)) {
                     ingreso++;
-                    printf("Correcto\r\n");
+                    printf("Cable Correcto\r\n");
                     //Si ingresé los 4 datos bien levanto el flag "ganar"
                     if(ingreso==4) {
                         ganar=1;
-                        printf("Buen trabajo, la bomba fue desactivada!\r\n");
+                        printf("\r\nBuen trabajo, la bomba fue desactivada!\r\n");
                     } else
                         bomba=2;
-                } else {
-                    //Si el dato es incorrecto levanto el flag "perder"
-                    perder=1;
-                    if(segundos!=0)
-                        printf("Cable Incorrecto! La bomba exploto\r\n");
                 }
                 if(ganar||perder) {
                     //Si terminó el juego indico que deben parpadear los indicadores con el flag "parpadeo"
                     printf("Presione el pulsador Reset para volver a jugar\r\n");
                     parpadeo=1;
                     tiempo_parpadeo=0;
+                    mili_segundos_display=0;
                     bomba=0;
+                    printf("\r\n--------------------------------------------------------\r\n");
                 }
                 break;
         }
@@ -189,27 +191,42 @@
     }
 }
 
-void displays()
-//Se encarga de mostrar el tiempo en el display
-{
+void actualizar_valores_display () {
     //Separo en decenas y unidades
     unidades=segundos%10;
     decenas=segundos/10;
     //Codifico los valores en 7 segmentos
     unidades=codificacion(unidades);
-    decenas=codificacion(decenas);
+    decenas=codificacion(decenas);    
+}
+
+void displays()
+//Se encarga de mostrar el tiempo en el display
+{
+    static char estado_display=0;
     //Switcheo cada 10ms entre decenas y unidade
-    if(mili_segundos_display==10) {
-        if(habilitacion_unidades==0) {
-            habilitacion_unidades=1;
-            habilitacion_decenas=0;
+    switch (estado_display) {
+        default:
+        case 0:
             display=unidades;
-        } else {
-            habilitacion_unidades=0;
-            habilitacion_decenas=1;
+            if(mili_segundos_display==5) {
+                habilitacion_unidades=0;
+                habilitacion_decenas=1;
+                mili_segundos_display=0;
+                actualizar_valores_display();
+                estado_display=1;
+            }
+            break;
+        case 1:
             display=decenas;
-        }
-        mili_segundos_display=0;
+            if(mili_segundos_display==5) {
+                habilitacion_unidades=1;
+                habilitacion_decenas=0;
+                mili_segundos_display=0;
+                actualizar_valores_display();
+                estado_display=0;
+            }
+            break;
     }
 }
 
@@ -233,10 +250,8 @@
         default:
         case 0://Enciendo el display y el led que corresponde
             displays();
-            if(ganar)
-                led_verde=1;
-            if(perder)
-                led_rojo=1;
+            led_verde=ganar;
+            led_rojo=perder;
             //Espero 0.5 segundos y cambio de estado
             if(tiempo_parpadeo==500) {
                 estado_parpadeo=1;
@@ -261,21 +276,21 @@
     if((cable_0==0)&&(cable_0_verificacion==0)) {
         usuario[ingreso]=0;
         cable_0_verificacion=1;
-        printf("Cable 0 desconectado\r\n");
+        printf("\r\nCable 0 desconectado\r\n");
     }
     if((cable_1==0)&&(cable_1_verificacion==0)) {
         usuario[ingreso]=1;
         cable_1_verificacion=1;
-        printf("Cable 1 desconectado\r\n");
+        printf("\r\nCable 1 desconectado\r\n");
     }
     if((cable_2==0)&&(cable_2_verificacion==0)) {
         usuario[ingreso]=2;
         cable_2_verificacion=1;
-        printf("Cable 2 desconectado\r\n");
+        printf("\r\nCable 2 desconectado\r\n");
     }
     if((cable_3==0)&&(cable_3_verificacion==0)) {
         usuario[ingreso]=3;
         cable_3_verificacion=1;
-        printf("Cable 3 desconectado\r\n");
+        printf("\r\nCable 3 desconectado\r\n");
     }
 }
\ No newline at end of file