Simon
Dependencies: mbed
Diff: main.cpp
- Revision:
- 0:a49a5f50d6bc
- Child:
- 1:78297550b459
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon May 27 11:31:15 2019 +0000 @@ -0,0 +1,284 @@ +#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 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 = 0; + +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) { + default: + times = 0; + if(pulsador != 0 && flagPulsador == 1) { + leds(0b000); + printf("Comencemos: \r\n\n"); + estado = 1; + flagPulsador = 0; + } + break; + + case 1: + //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 = 2; + times = 0; + l = 0; + break; + + case 2: + //Muestro la secuencia + if(l) { + if (apagado == 0) { + if(t >= r) { + estado = 3; + 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 3: + if (espera > 50) { + printf("Tardaste demaciado tiempo en elegir\r\n"); + estado = 4; + 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) { + printf("\nGANASTE!!! :)\r\n\n"); + printf("Apreta cualquier boton para reiniciar!\r\n\n"); + leds(0b111); + estado = 0; + } else { + printf("\nPasaste al nivel %d!\r\n\n", r); + t = 0; + pos = 0; + estado = 2; + l = 0; + times = 0; + } + } + } else { + estado = 4; + } + } + if (times > 5) { + leds(0b000); + + } + break; + case 4: + printf("\nPerdiste Bro :(\r\n"); + printf("Apreta cualquier boton para reiniciar!\r\n\n"); + leds(0b111); + estado = 0; + 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++; +} \ No newline at end of file