![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Simon
Dependencies: mbed
main.cpp
- Committer:
- JuanClerici
- Date:
- 2019-05-27
- Revision:
- 1:78297550b459
- Parent:
- 0:a49a5f50d6bc
- Child:
- 2:f45bd4655817
File content as of revision 1:78297550b459:
#include "mbed.h" #include "tsi_sensor.h" #include "DebouncedIn.h" /* This defines will be replaced by PinNames soon */ #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) #define ELEC0 9 #define ELEC1 10 #elif defined (TARGET_KL05Z) #define ELEC0 9 #define ELEC1 8 #else #error TARGET NOT DEFINED #endif #define ESTADO_COMENZAR 0 #define ESTADO_REINICIO 1 #define ESTADO_MUESTREO 2 #define ESTADO_JUEGO 3 #define ESTADO_PERDER 4 #define ESTADO_GANAR 5 #define NIVELES 25 TSIAnalogSlider tsi(ELEC0, ELEC1, 40); //Definimos que el puerto serie se llama pc Serial pc(USBTX, USBRX); //Variable donde se guarda lo leido char c = '\0'; unsigned int semilla = 0; //bit usado como flag para procesar datos bool newdata = false; //Se pone en true cuando hay nuevos datos //Creamos los tres leds pra usar DigitalOut Rojo(LED1); DigitalOut Verde(LED2); DigitalOut Azul(LED3); void invierte(); void simon(); char Pulsador (); void leds(int num); // led(0b000) = apagados, led(0b100) = rojo, led(0b010) = Verde, led(0b001) = Azul, led(0b111) = Blanco, char sec[50] = {0}; char r = 1; char t = 0; char pos = 0; int times = 0, espera = 0;; bool flagPulsador = 0; char pulsador = 0; char estado = ESTADO_COMENZAR; bool timer1 = 0, timer2 = 0, timer3 = 0; bool pulsador1 = 1, pulsador2 = 1, pulsador3 = 1; bool st1= 0, st2 = 0, st3 = 0, l = 1, apagado = 0; DebouncedIn PV(PTB1); DebouncedIn PA(PTB0); DebouncedIn PR(PTB2); Ticker ti; //Callback cuando se detecta una entrada void onCharReceived() { //Copiamos lo leido en c c = pc.getc(); newdata = true; } int main() { ti.attach(&invierte, 0.1); //Prendemos los LEDS leds(0b111); printf("Toque cualquier pulsador para comenzar: \r\n"); //Ejecutar onCharReceived por cada entrada por puerto while(true) { Pulsador(); simon(); flagPulsador = 0; } } void simon() { static int i; switch(estado) { case ESTADO_COMENZAR: times = 0; if(pulsador != 0 && flagPulsador == 1) { leds(0b000); printf("Comencemos: \r\n\n"); estado = ESTADO_REINICIO; flagPulsador = 0; } break; case ESTADO_REINICIO: //Reinicio la secuencia srand (semilla*4920*1912); for(i = 0; i <= NIVELES ; i ++) { sec[i] = rand() % 3 + 1; } r = 1; t = 0; pos = 0; estado = ESTADO_MUESTREO; times = 0; l = 0; break; case ESTADO_MUESTREO: //Muestro la secuencia if(l) { if (apagado == 0) { if(t >= r) { estado = ESTADO_JUEGO; printf("\nA jugar Bro :) \r"); printf("\r\n\n"); espera = 0; break; } switch(sec[t]) { case 1: leds(0b100); if(times > 5) { times = 0; printf("ROJO\r\n"); apagado = 1; t++; } break; case 2: leds(0b010); if(times > 5) { apagado = 1; times = 0; printf("VERDE\r\n"); t++; } break; case 3: leds(0b001); if(times > 5) { apagado = 1; times = 0; printf("AZUL\r\n"); t++; } break; } } else { leds(0b000); if (times > 5) { times = 0; apagado = 0; } } } else { if (times > 5) leds(0b000); if (times > 10) { l = 1; times = 0; } } break; case ESTADO_JUEGO: if (espera > 50) { printf("Tardaste demaciado tiempo en elegir\r\n"); estado = ESTADO_PERDER; break; } if(flagPulsador) { espera = 0; flagPulsador = 0; times = 0; switch(pulsador) { case 1: printf("ROJO \r\n"); leds(0b100); break; case 2: printf("VERDE \r\n"); leds(0b010); break; case 3: printf("AZUL \r\n"); leds(0b001); break; } if(pulsador == sec[pos]) { pos++; if(pos == r) { r++; printf("\n\t--------------------------------\r"); if (r == NIVELES + 1) { estado = ESTADO_GANAR; } else { printf("\nPasaste al nivel %d!\r\n\n", r); t = 0; pos = 0; estado = ESTADO_MUESTREO; l = 0; times = 0; } } } else { estado = ESTADO_PERDER; } } if (times > 5) { leds(0b000); } break; case ESTADO_PERDER: printf("\nPerdiste Bro :(\r\n"); printf("Apreta cualquier boton para reiniciar!\r\n\n"); leds(0b111); estado = ESTADO_COMENZAR; break; case ESTADO_GANAR: printf("\nGANASTE!!! :)\r\n\n"); printf("Apreta cualquier boton para reiniciar!\r\n\n"); leds(0b111); estado = ESTADO_COMENZAR; break; } } void leds(int num) { switch(num) { case 0: Rojo = 1; Verde = 1; Azul = 1; break; case 4: Rojo = 0; Verde = 1; Azul = 1; break; case 2: Rojo = 1; Verde = 0; Azul = 1; break; case 1: Rojo = 1; Verde = 1; Azul = 0; break; case 7: Rojo = 0; Verde = 0; Azul = 0; break; } } char Pulsador() { pulsador = 0; if (PV.rising()) { flagPulsador = 1; pulsador = 2; return 0; } if (PA.rising()) { flagPulsador = 1; pulsador = 3; return 0; } if (PR.rising()) { flagPulsador = 1; pulsador = 1; return 0; } pulsador = 0; flagPulsador = 0; return 0; } void invierte() { times++; semilla ++; espera++; }