Version Final
Dependencies: Led7Seg mbed tsi_sensor
Revision 2:7a98b5f73665, committed 2019-06-17
- Comitter:
- NIcolasFernandezSanz
- Date:
- Mon Jun 17 21:34:12 2019 +0000
- Parent:
- 1:ec5d430be5a2
- Commit message:
- VersionFinal;
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r ec5d430be5a2 -r 7a98b5f73665 main.cpp --- a/main.cpp Sun Jun 16 01:18:28 2019 +0000 +++ b/main.cpp Mon Jun 17 21:34:12 2019 +0000 @@ -1,6 +1,6 @@ /* FERNANDEZ-CLERICI - EJER02 - TP01 + EJER03 - TP01 PTB0 -- Cable 1 (CONECTADO A GND) PTB1 -- Cable 2 (CONECTADO A GND) @@ -11,7 +11,7 @@ D9 -- Habilitacion Display 2 Display 7 Segmentos - + D10 -- Segmento a D11 -- Segmento b D2 -- Segmento c @@ -42,15 +42,12 @@ TSIAnalogSlider tsi(ELEC0, ELEC1, 40); /*Maquina de estados Principal*/ -#define ESTADO_INICIO 0 -#define ESTADO_RESET 1 -#define ESTADO_FASE1 2 -#define ESTADO_FASE2 3 -#define ESTADO_FASE3 4 -#define ESTADO_FASE4 5 -#define ESTADO_PERDER 6 -#define ESTADO_GANAR 7 -#define ESTADO_ESPERAR 8 +#define INICIO 0 +#define RESET 1 +#define JUEGO 2 +#define PERDER 3 +#define GANAR 4 +#define ESPERA 5 /*Maquina de estados de los displays*/ #define Unidades 0 @@ -61,9 +58,9 @@ int ED = 0; //Variable de estado de la maquina de displays Led7Seg disp(D9,D10,D2,D3,D4,D5,D6,1); //Instancio el display -unsigned char u = 0, d = 0; +unsigned char u = 0, d = 0; /*Seteo las habilitaciones*/ -DigitalOut H1(D8); +DigitalOut H1(D8); DigitalOut H2(D7); @@ -86,7 +83,7 @@ Ticker D; Ticker BC; -int estado = ESTADO_INICIO, tespera = 0; +int estado = INICIO, tespera = 0; int semilla = 0, tiempo = 0, cp = 0; int sec[CANTCABLES+1] = {0}; bool loop1 = 1, loop2 = 1, parpadeo = 0; @@ -107,7 +104,7 @@ void Displays(unsigned char num, bool blink); //Maquina de estados de manejo de los displays void tim_D(void); //Timmer de los displays void seg(void); //Timmer cuenta regresiva - +void Generosecuencia(); //Genero la secuencia int main() { @@ -115,7 +112,7 @@ ti.attach(&temporizar, 0.1); D.attach(&tim_D,0.001); BC.attach(&seg,1); - + /*Seteo los Pull Ups INTERNOS para los cables*/ C1.mode(PullUp); C2.mode(PullUp); @@ -136,10 +133,11 @@ void bombita () { - int i = 1, g = 1, u = 0; + int g = 1; + switch(estado) { default: - case ESTADO_INICIO: + case INICIO: tiempo = 0; parpadeo = 0; entmo = 0; //No descuento ahora... @@ -148,7 +146,7 @@ if((tsii < 0.99)&&(tsii > 0.01)) { if (cables() == 0b0000) { leds(0b000); - estado = ESTADO_RESET; + estado = RESET; printf("Comencemos: \r\n\n"); } else { if(loop1) { @@ -160,93 +158,45 @@ loop1 = 1; } break; - case ESTADO_RESET: + case RESET: //Reinicio la secuencia - srand (semilla); - memset(sec, 0, sizeof(sec)); - while(i <= 4) { - u = rand() % 4 + 1; - if(!(isPart(u,sec))) { - sec[i] = u; - i++; - } - } + Generosecuencia(); printf("La secuencia es: CABLE %d - CABLE %d - CABLE %d - CABLE %d \r\n\n", sec[1], sec[2], sec[3], sec[4]); entmo = 1; //Empieza la cuenta regresiva... - estado = ESTADO_FASE1; + estado = JUEGO; /*Reinicio el tmo*/ tmo = TIEMPO; + pos = 1; break; - case ESTADO_FASE1: + case JUEGO: //Paso 1 - pos = estado - 1 ; g = desc(); - if(g == sec[pos]) { - //Pase de nivel - estado = ESTADO_FASE2; - printf("MUY BIEN ZAFASTE POR AHORA :(\r\n\n"); - break; - } - if((g != sec[pos] && g != 0) || tmo == 0) { + + if(((g != sec[pos]) && (g != 0)) || (tmo == 0)) { //Perdiste - estado = ESTADO_PERDER; + estado = PERDER; entmo = 0; //No descuento ahora... break; } - break; - case ESTADO_FASE2: - //Paso 2 - pos = estado - 1; - g = desc(); - if(g == sec[pos]) { - //Pase de nivel - estado = ESTADO_FASE3; - printf("ULTIMA OPORTUNIDAD PARA EXPLOTARLA >:) >:)\r\n\n"); - break; - } - if((g != sec[pos] && g != 0) || tmo == 0) { - //Perdiste - estado = ESTADO_PERDER; - entmo = 0; //No descuento ahora... - break; - } - break; - case ESTADO_FASE3: - pos = estado - 1; - g = desc(); + if(g == sec[pos]) { //Pase de nivel - estado = ESTADO_FASE4; - printf("SE TE ACABA EL TIEMPO\r\n\n"); - break; - } - if((g != sec[pos] && g != 0) || tmo == 0) { - //Perdiste - estado = ESTADO_PERDER; - entmo = 0; //No descuento ahora... - break; + printf("MUY BIEN ZAFASTE POR AHORA :(\r\n\n"); + pos++; } - break; - case ESTADO_FASE4: - pos = estado - 1; - - if(tmo == 0){ - //Perdiste - entmo = 0; //No descuento ahora... - estado = ESTADO_PERDER; - break; - } - - if(cables() == 0b1111) { + + + if(cables() == 0b1111 && pos != 1) { //Gane! entmo = 0; //No descuento ahora... - estado = ESTADO_GANAR; + estado = GANAR; printf("GANASTEE!! :)\r\n\n"); printf("Reconecte los cables para volver a jugar\r\n"); break; } + break; - case ESTADO_PERDER: + case PERDER: //Perdiste if(loop2) { leds(4); @@ -257,22 +207,21 @@ loop2 = 0; } if(tiempo == 5) - leds(0b100); - if(tiempo == 10) - { + leds(0b100); + if(tiempo == 10) { leds(0b000); tiempo = 0; - } + } //Si me reconectan todos los cables vuelvo al inicio... if(cables() == 0b0000) { - estado = ESTADO_ESPERAR; + estado = ESPERA; tespera = 0; loop2 = 1; } break; - case ESTADO_GANAR: + case GANAR: //Ganastee leds(0b010); //Hacer parpadear disply @@ -285,7 +234,7 @@ break; - case ESTADO_ESPERAR: + case ESPERA: //Espero un toque para reiniciar y avisoo.. leds(0b111); @@ -293,7 +242,7 @@ tmo = TIEMPO; printf("Reset! Toque el TOUCH para iniciar\r\n\n"); semilla = 0; - estado = ESTADO_INICIO; + estado = INICIO; tespera = 0; semilla = 0; tiempo = 0; @@ -406,72 +355,93 @@ } -void Displays(unsigned char num, bool blink){ - +void Displays(unsigned char num, bool blink) +{ + /*Si supero lo maximo que puedo mostrar parpadeo y pongo el max*/ - if(num > 99){ + if(num > 99) { num = 99; blink = 1; } - + /*Maquina de estados*/ - switch(ED){ - + switch(ED) { + /*Calculo y coloco las unidades*/ case Unidades: - u = num % 10; - disp.write(u); - H1 = 1; - - if(ac >= 15){ - H1 = 0; - ED = Decenas; - ac = 0; + u = num % 10; + disp.write(u); + H1 = 1; + + if(ac >= 15) { + H1 = 0; + ED = Decenas; + ac = 0; + break; + } + break; - } - - break; - + /*Calculo y coloco las decenas*/ case Decenas: - d = int(num/10) ; - disp.write(d); - H2 = 1; - - /*Transicion comun*/ - if(ac >= 15 && blink == 0){ - H2 = 0; - ED = Unidades; - ac = 0; + d = int(num/10) ; + disp.write(d); + H2 = 1; + + /*Transicion comun*/ + if(ac >= 15 && blink == 0) { + H2 = 0; + ED = Unidades; + ac = 0; + break; + } + + /*Transicion al estado de espera para blink*/ + if(ac >= 15 && blink) { + H2 = 0; + ED = Espera; + ac = 0; + break; + } + break; - } - - /*Transicion al estado de espera para blink*/ - if(ac >= 15 && blink){ - H2 = 0; - ED = Espera; - ac = 0; - break; - } - - break; - + case Espera: - if(ac >= 200){ + if(ac >= 200) { ac = 0; ED = Unidades; break; } - break; + break; } - + } -void tim_D(void){ +void tim_D(void) +{ ac++; } -void seg(void){ +void seg(void) +{ if(tmo > 0 && entmo ) tmo--; +} + +void Generosecuencia() +{ + int i = 1, u = 0; + + srand (semilla); ///Reinicio la semilla + + memset(sec, 0, sizeof(sec)); + + while(i <= 4) { + u = rand() % 4 + 1; + if(!(isPart(u,sec))) { + sec[i] = u; + i++; + } + } + } \ No newline at end of file