Matias Rodriguez
/
TP1-EJERCICIO2
EJERCICIO SIMON: Axel Oropeza Matias Rodriguez
Revision 2:90667b428ce6, committed 2019-06-08
- Comitter:
- matirodriguez
- Date:
- Sat Jun 08 15:22:16 2019 +0000
- Parent:
- 1:f6ea213ed382
- Commit message:
- Ejercicio "SIMON" terminado
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed May 22 23:40:43 2019 +0000 +++ b/main.cpp Sat Jun 08 15:22:16 2019 +0000 @@ -13,7 +13,6 @@ VERDE, AZUL }; - /* Defino los nombres de los estados como numeros enteros con la funcion "enum{}" */ @@ -23,19 +22,19 @@ MUESTRO_SECUENCIA, COMPARO_SECUENCIA }; - + //Maquina "MAQ_MUESTREO()" enum {ESPERO_HAB, MUESTRO, APAGO }; - + //Maquina "MAQ_COMPARO()" enum {ESPERAR_HAB, ESPERAR_USUARIO, COMPARO }; - + #define ERROR 15 #define CORRECTO 24 @@ -55,6 +54,10 @@ void genero_secuencia(); // Funcion que utilizo para generar la secuencia aleatoria. +void apago_leds(); + +void cambio_estado(); + //Variables que indican el estado de las maquinas (empiezo en estado de reset) int estado_maq_sec = ESPERO_USUARIO; int estado_maq_mues = ESPERO_HAB; @@ -83,6 +86,9 @@ Ticker temporizador; // Ticker para contar 1 segundo en los leds Ticker pulsacion; // Ticker para usar la funcion pulsacion_TSI() +Timeout apago; +Timeout estado; // Una pequeña demora que agrego entre que comparo y muestro los niveles del juego + // DEFINO SALIDAS DigitalOut ledrojo(LED_RED); DigitalOut ledverde(LED_GREEN); @@ -90,14 +96,13 @@ AnalogIn noise(PTB0); // Entrada que usaré para generar la secuencia aleatoria con el ruido que me genere - int main(void) { // Uno las funciones con el ticker correspondiente - lectura.attach(LEER_TSI,0.1); - pulsacion.attach(pulsacion_TSI,0.001); - temporizador.attach(LED_1SEG,0.01); + lectura.attach(&LEER_TSI,0.1); + pulsacion.attach(&pulsacion_TSI,0.001); + temporizador.attach(&LED_1SEG,0.01); // Apago los leds al iniciar ledrojo = 1; @@ -119,6 +124,12 @@ } } +void apago_leds(){ + ledrojo=1; + ledverde=1; + ledazul=1; +} + void LEER_TSI() { float auxiliar = 0; @@ -130,15 +141,15 @@ color_teclado = NADA; } - if((auxiliar > 0)&&(auxiliar < 0.33)) { + if((auxiliar > 0.05)&&(auxiliar < 0.30)) { color_teclado = ROJO; } - if((auxiliar >= 0.33)&&(auxiliar <= 0.66)) { + if((auxiliar >= 0.38)&&(auxiliar <= 0.60)) { color_teclado = VERDE; } - if((auxiliar > 0.66)&&(auxiliar <= 1)) { + if((auxiliar > 0.68)&&(auxiliar <= 1)) { color_teclado = AZUL; } } @@ -316,14 +327,20 @@ switch(color[nivel_mostrado]) { // Muestro el color correspondiente al primer nivel, y voy cambiando cada 2 segundos case ROJO: ledrojo = 0; + ledverde=1; + ledazul=1; break; case VERDE: ledverde = 0; + ledazul=1; + ledrojo=1; break; case AZUL: ledazul = 0; + ledrojo=1; + ledverde=1; break; } @@ -398,6 +415,38 @@ switch(color[nivel_comparado]) { case ROJO: printf("Rojo\n"); + ledrojo=0; + break; + case VERDE: + printf("Verde\n"); + ledverde=0; + break; + case AZUL: + printf("Azul\n"); + ledazul=0; + break; + } + apago.attach(&apago_leds,0.5); + obtenido = NADA; // Reseteo la variable + if(nivel_comparado <= nivel) { // Si quedan niveles + + estado_maq_comp = ESPERAR_USUARIO; //Vuelvo al estado de esperar que el usuario ingrese algo y + nivel_comparado++; // Paso al siguiente nivel. + } + if(nivel_comparado > nivel) { // Si no quedan niveles + estado_maq_comp = ESPERAR_HAB; // Reseteo la maquina + estado.attach(&cambio_estado,1); // Indico que todo lo ingresado hasta este nivel es correcto + } + } else { // Si, en cambio, se ingreso algo incorrecto + estado_maq_comp = ESPERAR_HAB; // Reseteo la maquina + fin_comparo = ERROR; // Marco error + //Imprimo en pantalla que hubo error para comprobar + printf("ERROR\n"); + + // Imprimo en pantalla el valor que se ingresó para comprobar + switch(color[nivel_comparado]) { + case ROJO: + printf("Rojo\n"); break; case VERDE: @@ -409,24 +458,6 @@ } - obtenido = NADA; // Reseteo la variable - if(nivel_comparado <= nivel) { // Si quedan niveles - estado_maq_comp = ESPERAR_USUARIO; //Vuelvo al estado de esperar que el usuario ingrese algo y - nivel_comparado++; // Paso al siguiente nivel. - } - if(nivel_comparado > nivel) { // Si no quedan niveles - estado_maq_comp = ESPERAR_HAB; // Reseteo la maquina - fin_comparo = CORRECTO; // Indico que todo lo ingresado hasta este nivel es correcto - } - } else { // Si, en cambio, se ingreso algo incorrecto - estado_maq_comp = ESPERAR_HAB; // Reseteo la maquina - fin_comparo = ERROR; // Marco error - //Imprimo en pantalla que hubo error para comprobar - printf("ERROR"); - printf("ERROR"); - printf("ERROR"); - printf("ERROR"); - printf("ERROR\n"); } break; @@ -469,4 +500,8 @@ } } printf("\n"); +} + +void cambio_estado(){ + fin_comparo = CORRECTO; } \ No newline at end of file