Ejercicio realizado por: HU, Julian y LOPEZ, Gabriel.

Dependencies:   mbed

Revision:
1:06553fdedc7e
Parent:
0:ff8d1aea6fb4
Child:
2:2aa02cd60b0b
diff -r ff8d1aea6fb4 -r 06553fdedc7e main.cpp
--- a/main.cpp	Sat May 25 18:47:44 2019 +0000
+++ b/main.cpp	Wed Jun 26 16:00:03 2019 +0000
@@ -1,149 +1,294 @@
+//Incluyo las librerias a utilizar.
 #include "mbed.h"
 
-DigitalIn pulsador1 (PTC12);
-DigitalIn pulsador2 (PTC13);
-DigitalIn pulsador3 (PTC16);
+//Se cambia el nombre de "0" y de "1" por NO, SI, ON y OFF para que el progama sea mas facil de leer.
+#define NO  0
+#define SI  1
+#define ON  1
+#define OFF 0
+
+//Lo mismo que en el caso anterior, pero con el led.
+#define LED_ON  0
+#define LED_OFF 1
 
+//Lo mismo que en el caso anterior, pero con el pulsador.
+#define PULS_ON  0
+#define PULS_OFF 1
+
+//Se definen las entradas digitales para los tres pulsadores.
+DigitalIn pulsador_1 (PTC12);
+DigitalIn pulsador_2 (PTC13);
+DigitalIn pulsador_3 (PTC16);
+
+//Se definen como salidas digitales los 3 leds para podes jugar.
 DigitalOut ledrojo(LED_RED);
 DigitalOut ledazul(LED_BLUE);
 DigitalOut ledverde(LED_GREEN);
 
-Ticker pulso1;
-Ticker pulso2;
-Ticker pulso3;
+//Se definen todos los Tickers.
+Ticker pulsos;
 Ticker aviso;
-Ticker mostrar;
-
+Ticker colores;
+Ticker ti;
+Ticker random;
 
-void detector1();
-void detector2();
-void detector3();
+//Se definen todos los prototipos de las funciones.
+void pulsador();
+void timer();
+void detector();
+void muestra();
+void mostrar();
 void intermitencia();
+void obtengorandom();
 
-int verificacion1=0, verificacion2=0, verificacion3=0, rebote1=0, rebote2=0, rebote3=0;
-char secuencia[5], turno=0;
-int juego=0, obtener_num_random=0, i=0, turno_actual=0;
-
+//Se definen todas las variables a utilizar
+uint8_t secuencia[25], turno=0,toff=0;                          //Estas son uint8_t para ocupar menos espacio
+uint8_t juego=OFF,a=0,empieza=NO,ocupado=NO,interaccion=NO;     //Estas son uint8_t para ocupar menos espacio
+uint8_t pulso_1=OFF,pulso_2=OFF,pulso_3=OFF;                    //Estas son uint8_t para ocupar menos espacio
+int tiempo=0, valorrandom;
 
 int main()
 {
+    //Habilito las interrupciones.
     __enable_irq();
-
-    pulsador1.mode(PullUp);
-    pulsador2.mode(PullUp);
-    pulsador3.mode(PullUp);
-
-    pulso1.attach(&detector1,0.01);
-    pulso2.attach(&detector2,0.01);
-    pulso3.attach(&detector3,0.01);
+    //Defino la semilla para los numero random.
+    srand(valorrandom);
+    //Llamo a la funcion obtengorandom cada 10ms.
+    random.attach(&obtengorandom,0.01);
+    //Activo las R Pull-UP internas de los 3 pulsadores.
+    pulsador_1.mode(PullUp);
+    pulsador_2.mode(PullUp);
+    pulsador_3.mode(PullUp);
+    //Llamo a la funcion pulsador cada 10ms.
+    pulsos.attach(&pulsador,0.01);
+    //Al empezar el programa, se apagan todos los leds.
+    ledrojo = LED_OFF;
+    ledverde= LED_OFF;
+    ledazul = LED_OFF;
 
-    ledrojo=1;
-    ledverde=1;
-    ledazul=1;
-
-    srand(time(NULL));
-
-    if (juego==0)
-        aviso.attach(&intermitencia, 1);
-
-    while (juego==0) {
-        if (pulsador2==0 && juego==0) {
-            juego=1;
+    while (true) {
+        if (juego == OFF) {
+            if (a == 0) {
+                aviso.attach(&intermitencia, 1);
+                printf("--------------------------------------------------------\n"); //Decoracion
+                printf("------------------------ATENCION------------------------\n"); //Decoracion
+                printf("--------------------------------------------------------\n"); //Decoracion
+                printf("        Presione cualquier pulsador para comenzar       \n"); //Decoracion
+                a = 1;
+            }
+            if (pulso_2 == ON || pulso_1 == ON || pulso_3 == ON) {
+                pulso_1 = OFF;
+                pulso_3 = OFF;
+                pulso_2 = OFF;
+                ledrojo = LED_OFF;
+                ledazul = LED_OFF;
+                ledverde = LED_OFF;
+                juego = ON;
+            }
+        }
+        if (turno == 25 && ocupado == NO) {
+            printf("Congratulations, you won the game!");
+            a = 0,turno = 0;
+            juego = OFF,empieza = NO,ocupado = NO;
+            ledrojo = LED_OFF;
+            ledazul = LED_OFF;
+            ledverde= LED_OFF;
+        }
+        if (juego == ON && empieza == SI && ocupado == NO && turno < 25) {
+            secuencia[turno] = rand () % 3;
+            turno++;
+            ocupado = SI;
+            colores.attach(&mostrar,0.1);
+        }
+        if (interaccion == SI) {
+            pulsos.attach(&pulsador,0.01);
+            ti.attach(&timer,0.01);
+            tiempo = 1001;
+            interaccion = NO;
         }
     }
-    
-    while (true) {
-        if (juego==1 && turno<5) {
-            turno_actual=rand () % 3;
-            secuencia[turno]=turno_actual;
-            turno++;
-        }
-        
-        for (i=0;i<turno;i++){
-            switch(turno_actual) {
-
-                case 0:
-                    ledrojo=0;
-                    ledverde=1;
-                    ledazul=1;
-                    break;
-
-                case 1:
-                    ledrojo=1;
-                    ledverde=0;
-                    ledazul=1;
-                    break;
+}
+void timer()
+{
+    static uint8_t c=0;
+    tiempo--;
+    if(pulso_2 == ON && secuencia[c] == 1) {
+        //printf("correcto\n");
+        pulso_2 = OFF;
+        ledverde = LED_OFF;
+        tiempo = 1001;
+        c++;
+    }
+    if(pulso_1 == ON && secuencia[c] == 0) {
+        //printf("correcto\n");
+        pulso_1 = OFF;
+        ledrojo = LED_OFF;
+        tiempo = 1001;
+        c++;
+    }
+    if(pulso_3 == ON && secuencia[c] == 2) {
+        //printf("correcto\n");
+        pulso_3 = OFF;
+        ledazul = LED_OFF;
+        tiempo = 1001;
+        c++;
+    }
+    if (c == turno) {
+        printf("--------------------------------------------------------\n");   //Decoracion
+        printf("--------------------Nivel %d superado-------------------\n",c); //Decoracion
+        printf("--------------------------------------------------------\n");   //Decoracion
 
-                case 2:
-                    ledrojo=1;
-                    ledverde=1;
-                    ledazul=0;
-                    break;
-            }
-        }
+        ocupado=NO;
+        pulsos.detach();
+        ti.detach();
+        c=0;
+        toff=6;
     }
-    
-}
+    if (pulso_3 == ON && secuencia[c] != 2 ||
+            pulso_1 == ON && secuencia[c] != 0 ||
+            pulso_2 == ON && secuencia[c] != 1 ||
+            tiempo==0) {
+        printf("--------------------------------------------------------\n");   //Decoracion
+        printf("--------------------------------------------------------\n");   //Decoracion
+        printf("-----------------------YOU LOSE-------------------------\n");   //Decoracion
+        printf("--------------------------------------------------------\n");   //Decoracion
+        printf("--------------------------------------------------------\n");   //Decoracion
 
-void detector1()
-{
-    if (pulsador1==0 && verificacion1==0) {
-        verificacion1=1;
-        rebote1=4;
-    }
-    if (pulsador1==0 && verificacion1==1) {
-        if (rebote1>0)
-            rebote1--;
-    }
-    if(rebote1==0 && verificacion1==1 && pulsador1==1) {
-        verificacion1=0;
+        ti.detach();
+        a = 0,turno = 0;
+        juego = OFF,empieza = NO,ocupado = NO;
+        ledrojo = LED_OFF;
+        ledazul = LED_OFF;
+        ledverde= LED_OFF;
+        pulso_1 = OFF;
+        pulso_2 = OFF;
+        pulso_3 = OFF;
     }
 }
 
-void detector2()
+void mostrar()
 {
-    if (pulsador2==0 && verificacion2==0) {
-        verificacion2=1;
-        rebote2=4;
-    }
-    if (pulsador2==0 && verificacion2==1) {
-        if (rebote2>0)
-            rebote2--;
-    }
-    if(rebote2==0 && verificacion2==1 && pulsador2==1) {
-        verificacion2=0;
-    }
+    muestra();
 }
 
-void detector3()
+void muestra()
 {
-    if (pulsador3==0 && verificacion3==0) {
-        verificacion3=1;
-        rebote3=4;
+    static uint8_t i=0,ton=0;
+    uint8_t color;//tf=turno+1;
+    if (ton == 0 && toff == 0) {
+        if (i == turno) {
+            colores.detach();
+            interaccion = SI;
+            i = 99;
+        }
+        color=secuencia[i];
+        if (i == 99)
+            color = 3;
+        switch (color) {
+            case 3:
+                i = 99;
+                break;
+            case 0:
+                ledrojo = LED_ON;
+                ledverde= LED_OFF;
+                ledazul = LED_OFF;
+                ton=11;
+                break;
+
+            case 1:
+                ledrojo = LED_OFF;
+                ledverde= LED_ON;
+                ledazul = LED_OFF;
+                ton=11;
+                break;
+
+            case 2:
+                ledrojo = LED_OFF;
+                ledverde= LED_OFF;
+                ledazul = LED_ON;
+                ton=11;
+                break;
+        }//switch
+        i++;
+        if(i == 100)
+            i = 0;
+    }//if ton/toff=0
+    if (ton > 0) {
+        ton--;
+        toff = 6;
     }
-    if (pulsador3==0 && verificacion3==1) {
-        if (rebote3>0)
-            rebote3--;
+    if (ton == 0 && toff > 0) {
+        toff--;
+        ledrojo = LED_OFF;
+        ledverde= LED_OFF;
+        ledazul = LED_OFF;
+    }
+}//final
+void pulsador()
+{
+    detector();
+}
+void detector()
+{
+    static uint8_t verificacion_1=OFF,verificacion_2=OFF,verificacion_3=OFF, antirebote=0;
+    //pulsador 1
+    if (pulsador_1 == PULS_ON && pulso_1 == OFF && verificacion_1 == OFF) {
+        antirebote = 4;
+        verificacion_1 = ON;
+        ledrojo = LED_ON;
+    }
+    //pulsador 2
+    if (pulsador_2 == PULS_ON && pulso_2 == OFF && verificacion_2 == OFF) {
+        antirebote = 4;
+        verificacion_2 = ON;
+        ledverde= LED_ON;
     }
-    if(rebote3==0 && verificacion3==1 && pulsador3==1) {
-        verificacion3=0;
+    //pulsador 3
+    if (pulsador_3 == PULS_ON && pulso_3 == OFF && verificacion_3 == OFF) {
+        antirebote = 4;
+        verificacion_3 = ON;
+        ledazul = LED_ON;
     }
+    if (antirebote==0) {
+        if (pulsador_1 == PULS_OFF && verificacion_1 == ON) {
+            verificacion_1 = OFF;
+            pulso_1 = ON;
+            //printf("pulsador 1 on\n");
+        }
+        if (pulsador_2 == PULS_OFF && verificacion_2 == ON) {
+            verificacion_2 = OFF;
+            pulso_2 = ON;
+            //printf("pulsador 2 on\n");
+        }
+        if (pulsador_3 == PULS_OFF && verificacion_3 == ON) {
+            verificacion_3 = OFF;
+            pulso_3 = ON;
+            //printf("pulsador 3 on\n");
+        }
+    }
+    if (antirebote>0)
+        antirebote--;
 }
 
 void intermitencia()
 {
-    if (juego==0) {
-        printf("-------------------ATENCION---------------------\n");
-        printf("Presione el pulsador del medio para comenzar\n");
-        ledrojo=!ledrojo;
+    if (juego == OFF) {
+        ledrojo = !ledrojo;
+        ledazul = !ledazul;
+        ledverde= !ledverde;
     }
-    if (juego==1) {
-        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
-        printf("-----------------ATENCION---------------------\n");
-        printf("QUE COMIENCE EL JUEGO\n");
-        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
+    if (juego == ON) {
+        printf("--------------------------------------------------------\n"); //Decoracion
+        printf("-----------------------ATENCION-------------------------\n"); //Decoracion
+        printf("                QUE COMIENCE EL JUEGO                   \n"); //Decoracion
+        empieza = SI;
         aviso.detach();
+        pulsos.detach();
     }
 }
 
-
+void obtengorandom ()
+{
+    valorrandom++;
+    srand(valorrandom);
+}
\ No newline at end of file