TP 1 Ejer 2 simon Cobas, Montero

Dependencies:   mbed tsi_sensor

Files at this revision

API Documentation at this revision

Comitter:
cobasjuan
Date:
Thu Jun 06 13:56:58 2019 +0000
Parent:
1:2ec64607a2a4
Commit message:
TP 1 Ej 2 simon

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 2ec64607a2a4 -r edadb31efe9b main.cpp
--- a/main.cpp	Tue May 21 14:43:57 2019 +0000
+++ b/main.cpp	Thu Jun 06 13:56:58 2019 +0000
@@ -19,26 +19,31 @@
 #define ESPERAR_B 304
 #define ESPERAR_C 305
 #define JUGANDO 306
+#define GEN_SEC 307
 
-Ticker timer;
-void t();
-
+// Salidas
 DigitalOut ledr(LED1);
 DigitalOut ledg(LED2);
 DigitalOut ledb(LED3);
 
-
+// Funciones
 void GENERAL();
 void MOSTRAR_LED();
 void JUEGO();
 void PULSADORES();
+void t();
 
-int secuencia[20]= {1,2,3,2,2,3,1,3,1,2,3,1,2,3,1,2,3};
+// Timer
+Ticker timer;
+
+// Variables
+int secuencia[20], variable=0;
 int cant=0, finsec=0, n=0, P1=0, P2=0, P3=0;
 int habmostrar=0,  habjug=0, fin_mostrar=0, finjug=0, perdiste=0;
 volatile unsigned int tiempo=100;
 static int traba=0, principio=0;
 
+// Entradas
 TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
 
 int main()
@@ -48,6 +53,7 @@
     ledg=1;
     timer.attach(&t,0.01);
     while(1) {
+        variable++;  // SEMILLA
         GENERAL();
         MOSTRAR_LED();
         JUEGO();
@@ -56,11 +62,11 @@
 }
 
 
-void GENERAL()
+void GENERAL()  // Maquina de estados: funcionamiento general del programa
 {
     static int paso_a=ESPERAR_A;
     switch(paso_a) {
-        case ESPERAR_A:
+        case ESPERAR_A:     // RESET
             habmostrar=0;
             habjug=0;
             fin_mostrar=0;
@@ -68,33 +74,38 @@
             perdiste=0;
             cant=0;
             principio=0;
-            if((P1 == 1 || P2 == 1 || P3 == 1) && traba == 0) {
+            if((P1 == 1 || P2 == 1 || P3 == 1) && traba == 0) { // Con que el TSI detecte algo alcanza para comenzar el juego
                 traba=1;
-                paso_a=MOSTRAR;
+                paso_a=GEN_SEC;
                 principio++;
                 printf("Inicio del juego\n\r");
             }
             break;
-        case MOSTRAR:
+        case GEN_SEC:    // Genero una secuencia aleatoria
+        srand(variable);
+        secuencia[cant]=(rand() % 3);
+        paso_a=MOSTRAR;
+        break;
+        case MOSTRAR:      // Habilito la maquina de estados de muestreo
             habmostrar=1;
             finjug=0;
             if(fin_mostrar==1) {
                 paso_a=ESPERO_JUG;
             }
             break;
-        case ESPERO_JUG:
+        case ESPERO_JUG:  // Habilito la maquina de estados de juego
             habjug=1;
             fin_mostrar=0;
-            if(finjug==1) {
+            if(finjug==1) { // Si se levanto el flag de final de jugada incremento el nivel
                 cant++;
-                if(cant == 24){
+                if(cant == 24){     // Si el juego llega al nivel 24 termina
                     printf("Ganaste!\n\r");
                     paso_a=ESPERAR_A;
                     }
                 else
-                    paso_a=MOSTRAR;
+                    paso_a=GEN_SEC;
             }
-            if(perdiste==1) {
+            if(perdiste==1) {   // Si se levanta el flag de partida perdida reinicio el juego
                 paso_a=ESPERAR_A;
             }
             break;
@@ -102,7 +113,7 @@
 }
 
 
-void MOSTRAR_LED()
+void MOSTRAR_LED()    // Maquina de estados: muestreo de la secuencia de leds a seguir
 {
     static int paso_b=ESPERAR_B;
     switch(paso_b) {
@@ -111,22 +122,22 @@
                 paso_b=MUESTREO;
             }
             break;
-        case MUESTREO:
-            if(finsec==0) {
+        case MUESTREO:  
+            if(finsec==0) {  // Muestra un valor n de la secuencia un determinado tiempo, se apaga un determinado tiempo e incrementa n
                 if (tiempo == 0) {
                     if(cant < n) {
                         finsec=1;
-                    } else if(secuencia[n]== 1) {
+                    } else if(secuencia[n]== 0) {
                         ledr=0;
                         ledg=1;
                         ledb=1;
                         printf("LED_ROJO\n\r");
-                    } else if(secuencia[n]== 2) {
+                    } else if(secuencia[n]== 1) {
                         ledr=1;
                         ledg=0;
                         ledb=1;
                         printf("LED_VERDE\n\r");
-                    } else if(secuencia[n]== 3) {
+                    } else if(secuencia[n]== 2) {
                         ledr=1;
                         ledg=1;
                         ledb=0;
@@ -135,12 +146,12 @@
                     tiempo = 130;
                     n++;
                 }
-                if(tiempo == 40) {
+                if(tiempo == 40) { // Se apaga un determinado tiempo para diferenciar en caso de ser dos veces el mismo color
                     ledr=1;
                     ledg=1;
                     ledb=1;
                 }
-            } else if(finsec==1) {
+            } else if(finsec==1) {  // Muestreo finalizado
                 ledr=1;
                 ledg=1;
                 ledb=1;
@@ -153,7 +164,7 @@
 }
 
 
-void JUEGO()
+void JUEGO()    // Maquina de estados: se compara lo que presiona el jugador con la secuencia generada
 {
     static int paso_c=ESPERAR_C;
     switch(paso_c) {
@@ -166,23 +177,23 @@
             break;
         case JUGANDO:
             if(finsec == 0) {
-                if((P1 == 1 || P2 == 1 || P3 == 1) && traba == 0) {
+                if((P1 == 1 || P2 == 1 || P3 == 1) && traba == 0) { // Se espera a que se presione el TSI para no comparar todo el tiempo
                     traba=1;
-                    if((secuencia[n] == 1 && P1 == 1) || (secuencia[n] == 2 && P2 == 1) || (secuencia[n] == 3 && P3 == 1)) {
-                        n++;
-                    } else {
+                    if((secuencia[n] == 0 && P1 == 1) || (secuencia[n] == 1 && P2 == 1) || (secuencia[n] == 2 && P3 == 1)) { // Comparo lo que se presiono con la secuencia
+                        n++;    // Si coincide incremento
+                    } else {    // Si difiere levanto el flag de partida perdida
                         printf("Game Over\n\r");
                         perdiste=1;
                         principio=0;
                         habjug=0;
                         break;
                     }
-                    if(cant < n) {
+                    if(cant < n) {  // Si termino la secuencia y todas las comparaciones fueron coincidentes levanto el flag de final de secuencia
                         finsec=1;
                         printf("Enhorabuena!\n\r");
                     }
                 }
-            } else if(finsec == 1) {
+            } else if(finsec == 1) {    // Si se levanto el flag de final de secuencia levanto el flag de final de jugada
                 finjug=1;
                 habjug=0;
                 paso_c=ESPERAR_C;
@@ -200,13 +211,13 @@
 }
 
 
-void PULSADORES()
+void PULSADORES()   // Separacion del TSI en pulsadores
 {
     static int lectura=0, color=0;
-    float valor=tsi.readPercentage();
+    float valor=tsi.readPercentage();   // Leo el TSI una vez y lo guardo en una variable para no leerlo reiteradas veces
     if(tiempo == 0) {
-        tiempo=3;
-        if(valor != 0 && lectura == 0) {
+        tiempo=3;                   // Tiempo de retardo para no leer todo el tiempo
+        if(valor != 0 && lectura == 0) {  // la variable lectura se encarga de detectar el flanco para no leer distintos valores de un mismo pulso
             lectura=1;
             if(valor > 0.37 && valor < 0.73) {
                 P2=1;