Gabriel Lopez
/
TP1 - Ejercicio2
Ejercicio realizado por: HU, Julian y LOPEZ, Gabriel.
Diff: main.cpp
- Revision:
- 1:06553fdedc7e
- Parent:
- 0:ff8d1aea6fb4
- Child:
- 2:2aa02cd60b0b
--- 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