Version Final

Dependencies:   Led7Seg mbed tsi_sensor

Files at this revision

API Documentation at this revision

Comitter:
NIcolasFernandezSanz
Date:
Mon Jun 17 21:34:12 2019 +0000
Parent:
1:ec5d430be5a2
Commit message:
VersionFinal;

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r ec5d430be5a2 -r 7a98b5f73665 main.cpp
--- a/main.cpp	Sun Jun 16 01:18:28 2019 +0000
+++ b/main.cpp	Mon Jun 17 21:34:12 2019 +0000
@@ -1,6 +1,6 @@
 /*
                 FERNANDEZ-CLERICI
-                  EJER02 - TP01
+                  EJER03 - TP01
 
 PTB0 -- Cable 1 (CONECTADO A GND)
 PTB1 -- Cable 2 (CONECTADO A GND)
@@ -11,7 +11,7 @@
 D9   -- Habilitacion Display 2
 
         Display 7 Segmentos
-        
+
 D10  -- Segmento a
 D11  -- Segmento b
 D2   -- Segmento c
@@ -42,15 +42,12 @@
 TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
 
 /*Maquina de estados Principal*/
-#define ESTADO_INICIO      0
-#define ESTADO_RESET       1
-#define ESTADO_FASE1       2
-#define ESTADO_FASE2       3
-#define ESTADO_FASE3       4
-#define ESTADO_FASE4       5
-#define ESTADO_PERDER      6
-#define ESTADO_GANAR       7
-#define ESTADO_ESPERAR     8
+#define INICIO      0
+#define RESET       1
+#define JUEGO       2
+#define PERDER      3
+#define GANAR       4
+#define ESPERA      5
 
 /*Maquina de estados de los displays*/
 #define Unidades 0
@@ -61,9 +58,9 @@
 int ED = 0; //Variable de estado de la maquina de displays
 
 Led7Seg disp(D9,D10,D2,D3,D4,D5,D6,1);  //Instancio el display
-unsigned char u = 0, d = 0; 
+unsigned char u = 0, d = 0;
 /*Seteo las habilitaciones*/
-DigitalOut H1(D8);                      
+DigitalOut H1(D8);
 DigitalOut H2(D7);
 
 
@@ -86,7 +83,7 @@
 Ticker D;
 Ticker BC;
 
-int estado = ESTADO_INICIO, tespera = 0;
+int estado = INICIO, tespera = 0;
 int semilla = 0, tiempo = 0, cp = 0;
 int sec[CANTCABLES+1] = {0};
 bool loop1 = 1, loop2 = 1, parpadeo = 0;
@@ -107,7 +104,7 @@
 void Displays(unsigned char num, bool blink);   //Maquina de estados de manejo de los displays
 void tim_D(void);                               //Timmer de los displays
 void seg(void);                                 //Timmer cuenta regresiva
-
+void Generosecuencia();                         //Genero la secuencia
 
 int main()
 {
@@ -115,7 +112,7 @@
     ti.attach(&temporizar, 0.1);
     D.attach(&tim_D,0.001);
     BC.attach(&seg,1);
-    
+
     /*Seteo los Pull Ups INTERNOS para los cables*/
     C1.mode(PullUp);
     C2.mode(PullUp);
@@ -136,10 +133,11 @@
 
 void bombita ()
 {
-    int i = 1, g = 1, u = 0;
+    int  g = 1;
+    
     switch(estado) {
         default:
-        case ESTADO_INICIO:
+        case INICIO:
             tiempo = 0;
             parpadeo = 0;
             entmo = 0;  //No descuento ahora...
@@ -148,7 +146,7 @@
             if((tsii < 0.99)&&(tsii > 0.01)) {
                 if (cables() == 0b0000) {
                     leds(0b000);
-                    estado = ESTADO_RESET;
+                    estado = RESET;
                     printf("Comencemos: \r\n\n");
                 } else {
                     if(loop1) {
@@ -160,93 +158,45 @@
                 loop1 = 1;
             }
             break;
-        case ESTADO_RESET:
+        case RESET:
             //Reinicio la secuencia
-            srand (semilla);
-            memset(sec, 0, sizeof(sec));
-            while(i <= 4) {
-                u = rand() % 4 + 1;
-                if(!(isPart(u,sec))) {
-                    sec[i] = u;
-                    i++;
-                }
-            }
+            Generosecuencia();
             printf("La secuencia es:  CABLE %d - CABLE %d - CABLE %d - CABLE %d \r\n\n", sec[1], sec[2], sec[3], sec[4]);
             entmo = 1;  //Empieza la cuenta regresiva...
-            estado = ESTADO_FASE1;
+            estado = JUEGO;
             /*Reinicio el tmo*/
             tmo = TIEMPO;
+            pos = 1;
             break;
-        case ESTADO_FASE1:
+        case JUEGO:
             //Paso 1
-            pos = estado - 1 ;
             g = desc();
-            if(g == sec[pos]) {
-                //Pase de nivel
-                estado = ESTADO_FASE2;
-                printf("MUY BIEN ZAFASTE POR AHORA :(\r\n\n");
-                break;
-            }
-            if((g != sec[pos] && g != 0) || tmo == 0) {
+
+            if(((g != sec[pos]) && (g != 0)) || (tmo == 0)) {
                 //Perdiste
-                estado = ESTADO_PERDER;
+                estado = PERDER;
                 entmo = 0;  //No descuento ahora...
                 break;
             }
-            break;
-        case ESTADO_FASE2:
-            //Paso 2
-            pos = estado - 1;
-            g = desc();
-            if(g == sec[pos]) {
-                //Pase de nivel
-                estado = ESTADO_FASE3;
-                printf("ULTIMA OPORTUNIDAD PARA EXPLOTARLA >:) >:)\r\n\n");
-                break;
-            }
-            if((g != sec[pos] && g != 0) || tmo == 0) {
-                //Perdiste
-                estado = ESTADO_PERDER;
-                entmo = 0;  //No descuento ahora...
-                break;
-            }
-            break;
-        case ESTADO_FASE3:
-            pos = estado - 1;
-            g = desc();
+
             if(g == sec[pos]) {
                 //Pase de nivel
-                estado = ESTADO_FASE4;
-                printf("SE TE ACABA EL TIEMPO\r\n\n");
-                break;
-            }
-            if((g != sec[pos] && g != 0) || tmo == 0) {
-                //Perdiste
-                estado = ESTADO_PERDER;
-                entmo = 0;  //No descuento ahora...
-                break;
+                printf("MUY BIEN ZAFASTE POR AHORA :(\r\n\n");
+                pos++;
             }
-            break;
-        case ESTADO_FASE4:
-            pos = estado - 1;
-            
-            if(tmo == 0){
-                //Perdiste
-                entmo = 0;  //No descuento ahora...
-                estado = ESTADO_PERDER;
-                break;
-            }
-                
-            if(cables() == 0b1111) {
+
+
+            if(cables() == 0b1111 && pos != 1) {
                 //Gane!
                 entmo = 0;  //No descuento ahora...
-                estado = ESTADO_GANAR;
+                estado = GANAR;
                 printf("GANASTEE!! :)\r\n\n");
                 printf("Reconecte los cables para volver a jugar\r\n");
                 break;
             }
+
             break;
-        case ESTADO_PERDER:
+        case PERDER:
             //Perdiste
             if(loop2) {
                 leds(4);
@@ -257,22 +207,21 @@
                 loop2 = 0;
             }
             if(tiempo == 5)
-            leds(0b100);
-            if(tiempo == 10)
-            {
+                leds(0b100);
+            if(tiempo == 10) {
                 leds(0b000);
                 tiempo = 0;
-                }
+            }
             //Si me reconectan todos los cables vuelvo al inicio...
             if(cables() == 0b0000) {
-                estado = ESTADO_ESPERAR;
+                estado = ESPERA;
                 tespera = 0;
                 loop2 = 1;
             }
 
             break;
 
-        case ESTADO_GANAR:
+        case GANAR:
             //Ganastee
             leds(0b010);
             //Hacer parpadear disply
@@ -285,7 +234,7 @@
 
             break;
 
-        case ESTADO_ESPERAR:
+        case ESPERA:
             //Espero un toque para reiniciar y avisoo..
             leds(0b111);
 
@@ -293,7 +242,7 @@
                 tmo = TIEMPO;
                 printf("Reset! Toque el TOUCH para iniciar\r\n\n");
                 semilla = 0;
-                estado = ESTADO_INICIO;
+                estado = INICIO;
                 tespera = 0;
                 semilla = 0;
                 tiempo = 0;
@@ -406,72 +355,93 @@
 }
 
 
-void Displays(unsigned char num, bool blink){
-    
+void Displays(unsigned char num, bool blink)
+{
+
     /*Si supero lo maximo que puedo mostrar parpadeo y pongo el max*/
-    if(num > 99){
+    if(num > 99) {
         num = 99;
         blink = 1;
     }
-    
+
     /*Maquina de estados*/
-    switch(ED){
-        
+    switch(ED) {
+
         /*Calculo y coloco las unidades*/
         case Unidades:
-        u = num % 10; 
-        disp.write(u);
-        H1 = 1;
-        
-        if(ac >= 15){
-            H1 =  0;
-            ED =  Decenas;
-            ac = 0;
+            u = num % 10;
+            disp.write(u);
+            H1 = 1;
+
+            if(ac >= 15) {
+                H1 =  0;
+                ED =  Decenas;
+                ac = 0;
+                break;
+            }
+
             break;
-        }
-        
-        break;
-        
+
         /*Calculo y coloco las decenas*/
         case Decenas:
-        d = int(num/10) ;
-        disp.write(d);
-        H2 = 1;
-        
-        /*Transicion comun*/
-        if(ac >= 15 && blink == 0){
-            H2 =  0;
-            ED =  Unidades;
-            ac = 0;
+            d = int(num/10) ;
+            disp.write(d);
+            H2 = 1;
+
+            /*Transicion comun*/
+            if(ac >= 15 && blink == 0) {
+                H2 =  0;
+                ED =  Unidades;
+                ac = 0;
+                break;
+            }
+
+            /*Transicion al estado de espera para blink*/
+            if(ac >= 15 && blink) {
+                H2 =  0;
+                ED =  Espera;
+                ac = 0;
+                break;
+            }
+
             break;
-        }
-        
-        /*Transicion al estado de espera para blink*/
-        if(ac >= 15 && blink){
-            H2 =  0;
-            ED =  Espera;
-            ac = 0;
-            break; 
-        }
-        
-        break;
-        
+
         case Espera:
-            if(ac >= 200){
+            if(ac >= 200) {
                 ac = 0;
                 ED = Unidades;
                 break;
             }
-        break;
+            break;
     }
-    
+
 }
 
-void tim_D(void){
+void tim_D(void)
+{
     ac++;
 }
 
-void seg(void){
+void seg(void)
+{
     if(tmo > 0 && entmo )
         tmo--;
+}
+
+void Generosecuencia()
+{
+    int i = 1, u = 0;
+    
+    srand (semilla); ///Reinicio la semilla
+    
+    memset(sec, 0, sizeof(sec));
+    
+    while(i <= 4) {
+        u = rand() % 4 + 1;
+        if(!(isPart(u,sec))) {
+            sec[i] = u;
+            i++;
+        }
+    }
+
 }
\ No newline at end of file