Juan Ignacio Cobas
/
TP_SIMON_FINAL
TP 1 Ejer 2 simon Cobas, Montero
Revision 2:edadb31efe9b, committed 2019-06-06
- 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 |
--- 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;