Simon

Dependencies:   mbed

Committer:
JuanClerici
Date:
Mon May 27 11:41:23 2019 +0000
Revision:
1:78297550b459
Parent:
0:a49a5f50d6bc
Child:
2:f45bd4655817
Cambiamos el valor de los estados y agregamos estado ganar

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JuanClerici 0:a49a5f50d6bc 1 #include "mbed.h"
JuanClerici 0:a49a5f50d6bc 2 #include "tsi_sensor.h"
JuanClerici 0:a49a5f50d6bc 3 #include "DebouncedIn.h"
JuanClerici 0:a49a5f50d6bc 4 /* This defines will be replaced by PinNames soon */
JuanClerici 0:a49a5f50d6bc 5 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
JuanClerici 0:a49a5f50d6bc 6 #define ELEC0 9
JuanClerici 0:a49a5f50d6bc 7 #define ELEC1 10
JuanClerici 0:a49a5f50d6bc 8 #elif defined (TARGET_KL05Z)
JuanClerici 0:a49a5f50d6bc 9 #define ELEC0 9
JuanClerici 0:a49a5f50d6bc 10 #define ELEC1 8
JuanClerici 0:a49a5f50d6bc 11 #else
JuanClerici 0:a49a5f50d6bc 12 #error TARGET NOT DEFINED
JuanClerici 0:a49a5f50d6bc 13 #endif
JuanClerici 0:a49a5f50d6bc 14
JuanClerici 1:78297550b459 15 #define ESTADO_COMENZAR 0
JuanClerici 1:78297550b459 16 #define ESTADO_REINICIO 1
JuanClerici 1:78297550b459 17 #define ESTADO_MUESTREO 2
JuanClerici 1:78297550b459 18 #define ESTADO_JUEGO 3
JuanClerici 1:78297550b459 19 #define ESTADO_PERDER 4
JuanClerici 1:78297550b459 20 #define ESTADO_GANAR 5
JuanClerici 0:a49a5f50d6bc 21
JuanClerici 0:a49a5f50d6bc 22 #define NIVELES 25
JuanClerici 0:a49a5f50d6bc 23
JuanClerici 0:a49a5f50d6bc 24
JuanClerici 0:a49a5f50d6bc 25 TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
JuanClerici 0:a49a5f50d6bc 26 //Definimos que el puerto serie se llama pc
JuanClerici 0:a49a5f50d6bc 27 Serial pc(USBTX, USBRX);
JuanClerici 0:a49a5f50d6bc 28 //Variable donde se guarda lo leido
JuanClerici 0:a49a5f50d6bc 29 char c = '\0';
JuanClerici 0:a49a5f50d6bc 30 unsigned int semilla = 0;
JuanClerici 0:a49a5f50d6bc 31 //bit usado como flag para procesar datos
JuanClerici 0:a49a5f50d6bc 32 bool newdata = false; //Se pone en true cuando hay nuevos datos
JuanClerici 0:a49a5f50d6bc 33 //Creamos los tres leds pra usar
JuanClerici 0:a49a5f50d6bc 34 DigitalOut Rojo(LED1);
JuanClerici 0:a49a5f50d6bc 35 DigitalOut Verde(LED2);
JuanClerici 0:a49a5f50d6bc 36 DigitalOut Azul(LED3);
JuanClerici 0:a49a5f50d6bc 37
JuanClerici 0:a49a5f50d6bc 38 void invierte();
JuanClerici 0:a49a5f50d6bc 39 void simon();
JuanClerici 0:a49a5f50d6bc 40 char Pulsador ();
JuanClerici 0:a49a5f50d6bc 41 void leds(int num); // led(0b000) = apagados, led(0b100) = rojo, led(0b010) = Verde, led(0b001) = Azul, led(0b111) = Blanco,
JuanClerici 0:a49a5f50d6bc 42 char sec[50] = {0};
JuanClerici 0:a49a5f50d6bc 43 char r = 1;
JuanClerici 0:a49a5f50d6bc 44 char t = 0;
JuanClerici 0:a49a5f50d6bc 45 char pos = 0;
JuanClerici 0:a49a5f50d6bc 46 int times = 0, espera = 0;;
JuanClerici 0:a49a5f50d6bc 47 bool flagPulsador = 0;
JuanClerici 0:a49a5f50d6bc 48 char pulsador = 0;
JuanClerici 1:78297550b459 49 char estado = ESTADO_COMENZAR;
JuanClerici 0:a49a5f50d6bc 50
JuanClerici 0:a49a5f50d6bc 51 bool timer1 = 0, timer2 = 0, timer3 = 0;
JuanClerici 0:a49a5f50d6bc 52 bool pulsador1 = 1, pulsador2 = 1, pulsador3 = 1;
JuanClerici 0:a49a5f50d6bc 53 bool st1= 0, st2 = 0, st3 = 0, l = 1, apagado = 0;
JuanClerici 0:a49a5f50d6bc 54
JuanClerici 0:a49a5f50d6bc 55
JuanClerici 0:a49a5f50d6bc 56 DebouncedIn PV(PTB1);
JuanClerici 0:a49a5f50d6bc 57 DebouncedIn PA(PTB0);
JuanClerici 0:a49a5f50d6bc 58 DebouncedIn PR(PTB2);
JuanClerici 0:a49a5f50d6bc 59 Ticker ti;
JuanClerici 0:a49a5f50d6bc 60
JuanClerici 0:a49a5f50d6bc 61 //Callback cuando se detecta una entrada
JuanClerici 0:a49a5f50d6bc 62 void onCharReceived()
JuanClerici 0:a49a5f50d6bc 63 {
JuanClerici 0:a49a5f50d6bc 64 //Copiamos lo leido en c
JuanClerici 0:a49a5f50d6bc 65 c = pc.getc();
JuanClerici 0:a49a5f50d6bc 66 newdata = true;
JuanClerici 0:a49a5f50d6bc 67 }
JuanClerici 0:a49a5f50d6bc 68
JuanClerici 0:a49a5f50d6bc 69 int main()
JuanClerici 0:a49a5f50d6bc 70 {
JuanClerici 0:a49a5f50d6bc 71 ti.attach(&invierte, 0.1);
JuanClerici 0:a49a5f50d6bc 72
JuanClerici 0:a49a5f50d6bc 73 //Prendemos los LEDS
JuanClerici 0:a49a5f50d6bc 74 leds(0b111);
JuanClerici 0:a49a5f50d6bc 75 printf("Toque cualquier pulsador para comenzar: \r\n");
JuanClerici 0:a49a5f50d6bc 76 //Ejecutar onCharReceived por cada entrada por puerto
JuanClerici 0:a49a5f50d6bc 77
JuanClerici 0:a49a5f50d6bc 78 while(true) {
JuanClerici 0:a49a5f50d6bc 79 Pulsador();
JuanClerici 0:a49a5f50d6bc 80 simon();
JuanClerici 0:a49a5f50d6bc 81 flagPulsador = 0;
JuanClerici 0:a49a5f50d6bc 82 }
JuanClerici 0:a49a5f50d6bc 83 }
JuanClerici 0:a49a5f50d6bc 84 void simon()
JuanClerici 0:a49a5f50d6bc 85 {
JuanClerici 0:a49a5f50d6bc 86 static int i;
JuanClerici 0:a49a5f50d6bc 87 switch(estado) {
JuanClerici 1:78297550b459 88 case ESTADO_COMENZAR:
JuanClerici 0:a49a5f50d6bc 89 times = 0;
JuanClerici 0:a49a5f50d6bc 90 if(pulsador != 0 && flagPulsador == 1) {
JuanClerici 0:a49a5f50d6bc 91 leds(0b000);
JuanClerici 0:a49a5f50d6bc 92 printf("Comencemos: \r\n\n");
JuanClerici 1:78297550b459 93 estado = ESTADO_REINICIO;
JuanClerici 0:a49a5f50d6bc 94 flagPulsador = 0;
JuanClerici 0:a49a5f50d6bc 95 }
JuanClerici 0:a49a5f50d6bc 96 break;
JuanClerici 0:a49a5f50d6bc 97
JuanClerici 1:78297550b459 98 case ESTADO_REINICIO:
JuanClerici 0:a49a5f50d6bc 99 //Reinicio la secuencia
JuanClerici 0:a49a5f50d6bc 100 srand (semilla*4920*1912);
JuanClerici 0:a49a5f50d6bc 101 for(i = 0; i <= NIVELES ; i ++) {
JuanClerici 0:a49a5f50d6bc 102 sec[i] = rand() % 3 + 1;
JuanClerici 0:a49a5f50d6bc 103 }
JuanClerici 0:a49a5f50d6bc 104 r = 1;
JuanClerici 0:a49a5f50d6bc 105 t = 0;
JuanClerici 0:a49a5f50d6bc 106 pos = 0;
JuanClerici 1:78297550b459 107 estado = ESTADO_MUESTREO;
JuanClerici 0:a49a5f50d6bc 108 times = 0;
JuanClerici 0:a49a5f50d6bc 109 l = 0;
JuanClerici 0:a49a5f50d6bc 110 break;
JuanClerici 0:a49a5f50d6bc 111
JuanClerici 1:78297550b459 112 case ESTADO_MUESTREO:
JuanClerici 0:a49a5f50d6bc 113 //Muestro la secuencia
JuanClerici 0:a49a5f50d6bc 114 if(l) {
JuanClerici 0:a49a5f50d6bc 115 if (apagado == 0) {
JuanClerici 0:a49a5f50d6bc 116 if(t >= r) {
JuanClerici 1:78297550b459 117 estado = ESTADO_JUEGO;
JuanClerici 0:a49a5f50d6bc 118 printf("\nA jugar Bro :) \r");
JuanClerici 0:a49a5f50d6bc 119 printf("\r\n\n");
JuanClerici 0:a49a5f50d6bc 120 espera = 0;
JuanClerici 0:a49a5f50d6bc 121 break;
JuanClerici 0:a49a5f50d6bc 122 }
JuanClerici 0:a49a5f50d6bc 123 switch(sec[t]) {
JuanClerici 0:a49a5f50d6bc 124 case 1:
JuanClerici 0:a49a5f50d6bc 125 leds(0b100);
JuanClerici 0:a49a5f50d6bc 126 if(times > 5) {
JuanClerici 0:a49a5f50d6bc 127 times = 0;
JuanClerici 0:a49a5f50d6bc 128 printf("ROJO\r\n");
JuanClerici 0:a49a5f50d6bc 129 apagado = 1;
JuanClerici 0:a49a5f50d6bc 130 t++;
JuanClerici 0:a49a5f50d6bc 131 }
JuanClerici 0:a49a5f50d6bc 132 break;
JuanClerici 0:a49a5f50d6bc 133 case 2:
JuanClerici 0:a49a5f50d6bc 134 leds(0b010);
JuanClerici 0:a49a5f50d6bc 135 if(times > 5) {
JuanClerici 0:a49a5f50d6bc 136 apagado = 1;
JuanClerici 0:a49a5f50d6bc 137 times = 0;
JuanClerici 0:a49a5f50d6bc 138 printf("VERDE\r\n");
JuanClerici 0:a49a5f50d6bc 139 t++;
JuanClerici 0:a49a5f50d6bc 140 }
JuanClerici 0:a49a5f50d6bc 141 break;
JuanClerici 0:a49a5f50d6bc 142 case 3:
JuanClerici 0:a49a5f50d6bc 143 leds(0b001);
JuanClerici 0:a49a5f50d6bc 144 if(times > 5) {
JuanClerici 0:a49a5f50d6bc 145 apagado = 1;
JuanClerici 0:a49a5f50d6bc 146 times = 0;
JuanClerici 0:a49a5f50d6bc 147 printf("AZUL\r\n");
JuanClerici 0:a49a5f50d6bc 148 t++;
JuanClerici 0:a49a5f50d6bc 149 }
JuanClerici 0:a49a5f50d6bc 150 break;
JuanClerici 0:a49a5f50d6bc 151 }
JuanClerici 0:a49a5f50d6bc 152 } else {
JuanClerici 0:a49a5f50d6bc 153 leds(0b000);
JuanClerici 0:a49a5f50d6bc 154 if (times > 5) {
JuanClerici 0:a49a5f50d6bc 155 times = 0;
JuanClerici 0:a49a5f50d6bc 156 apagado = 0;
JuanClerici 0:a49a5f50d6bc 157 }
JuanClerici 0:a49a5f50d6bc 158 }
JuanClerici 0:a49a5f50d6bc 159 } else {
JuanClerici 0:a49a5f50d6bc 160 if (times > 5)
JuanClerici 0:a49a5f50d6bc 161 leds(0b000);
JuanClerici 0:a49a5f50d6bc 162 if (times > 10) {
JuanClerici 0:a49a5f50d6bc 163 l = 1;
JuanClerici 0:a49a5f50d6bc 164 times = 0;
JuanClerici 0:a49a5f50d6bc 165 }
JuanClerici 0:a49a5f50d6bc 166 }
JuanClerici 0:a49a5f50d6bc 167 break;
JuanClerici 1:78297550b459 168 case ESTADO_JUEGO:
JuanClerici 0:a49a5f50d6bc 169 if (espera > 50) {
JuanClerici 0:a49a5f50d6bc 170 printf("Tardaste demaciado tiempo en elegir\r\n");
JuanClerici 1:78297550b459 171 estado = ESTADO_PERDER;
JuanClerici 0:a49a5f50d6bc 172 break;
JuanClerici 0:a49a5f50d6bc 173 }
JuanClerici 0:a49a5f50d6bc 174 if(flagPulsador) {
JuanClerici 0:a49a5f50d6bc 175 espera = 0;
JuanClerici 0:a49a5f50d6bc 176 flagPulsador = 0;
JuanClerici 0:a49a5f50d6bc 177 times = 0;
JuanClerici 0:a49a5f50d6bc 178 switch(pulsador) {
JuanClerici 0:a49a5f50d6bc 179 case 1:
JuanClerici 0:a49a5f50d6bc 180 printf("ROJO \r\n");
JuanClerici 0:a49a5f50d6bc 181 leds(0b100);
JuanClerici 0:a49a5f50d6bc 182 break;
JuanClerici 0:a49a5f50d6bc 183 case 2:
JuanClerici 0:a49a5f50d6bc 184 printf("VERDE \r\n");
JuanClerici 0:a49a5f50d6bc 185 leds(0b010);
JuanClerici 0:a49a5f50d6bc 186 break;
JuanClerici 0:a49a5f50d6bc 187 case 3:
JuanClerici 0:a49a5f50d6bc 188 printf("AZUL \r\n");
JuanClerici 0:a49a5f50d6bc 189 leds(0b001);
JuanClerici 0:a49a5f50d6bc 190 break;
JuanClerici 0:a49a5f50d6bc 191 }
JuanClerici 0:a49a5f50d6bc 192 if(pulsador == sec[pos]) {
JuanClerici 0:a49a5f50d6bc 193 pos++;
JuanClerici 0:a49a5f50d6bc 194 if(pos == r) {
JuanClerici 0:a49a5f50d6bc 195 r++;
JuanClerici 0:a49a5f50d6bc 196 printf("\n\t--------------------------------\r");
JuanClerici 0:a49a5f50d6bc 197 if (r == NIVELES + 1) {
JuanClerici 1:78297550b459 198 estado = ESTADO_GANAR;
JuanClerici 0:a49a5f50d6bc 199 } else {
JuanClerici 0:a49a5f50d6bc 200 printf("\nPasaste al nivel %d!\r\n\n", r);
JuanClerici 0:a49a5f50d6bc 201 t = 0;
JuanClerici 0:a49a5f50d6bc 202 pos = 0;
JuanClerici 1:78297550b459 203 estado = ESTADO_MUESTREO;
JuanClerici 0:a49a5f50d6bc 204 l = 0;
JuanClerici 0:a49a5f50d6bc 205 times = 0;
JuanClerici 0:a49a5f50d6bc 206 }
JuanClerici 0:a49a5f50d6bc 207 }
JuanClerici 0:a49a5f50d6bc 208 } else {
JuanClerici 1:78297550b459 209 estado = ESTADO_PERDER;
JuanClerici 0:a49a5f50d6bc 210 }
JuanClerici 0:a49a5f50d6bc 211 }
JuanClerici 0:a49a5f50d6bc 212 if (times > 5) {
JuanClerici 0:a49a5f50d6bc 213 leds(0b000);
JuanClerici 0:a49a5f50d6bc 214
JuanClerici 0:a49a5f50d6bc 215 }
JuanClerici 0:a49a5f50d6bc 216 break;
JuanClerici 1:78297550b459 217 case ESTADO_PERDER:
JuanClerici 0:a49a5f50d6bc 218 printf("\nPerdiste Bro :(\r\n");
JuanClerici 0:a49a5f50d6bc 219 printf("Apreta cualquier boton para reiniciar!\r\n\n");
JuanClerici 0:a49a5f50d6bc 220 leds(0b111);
JuanClerici 1:78297550b459 221 estado = ESTADO_COMENZAR;
JuanClerici 1:78297550b459 222 break;
JuanClerici 1:78297550b459 223
JuanClerici 1:78297550b459 224 case ESTADO_GANAR:
JuanClerici 1:78297550b459 225 printf("\nGANASTE!!! :)\r\n\n");
JuanClerici 1:78297550b459 226 printf("Apreta cualquier boton para reiniciar!\r\n\n");
JuanClerici 1:78297550b459 227 leds(0b111);
JuanClerici 1:78297550b459 228 estado = ESTADO_COMENZAR;
JuanClerici 0:a49a5f50d6bc 229 break;
JuanClerici 0:a49a5f50d6bc 230 }
JuanClerici 0:a49a5f50d6bc 231 }
JuanClerici 0:a49a5f50d6bc 232 void leds(int num)
JuanClerici 0:a49a5f50d6bc 233 {
JuanClerici 0:a49a5f50d6bc 234 switch(num) {
JuanClerici 0:a49a5f50d6bc 235 case 0:
JuanClerici 0:a49a5f50d6bc 236 Rojo = 1;
JuanClerici 0:a49a5f50d6bc 237 Verde = 1;
JuanClerici 0:a49a5f50d6bc 238 Azul = 1;
JuanClerici 0:a49a5f50d6bc 239 break;
JuanClerici 0:a49a5f50d6bc 240 case 4:
JuanClerici 0:a49a5f50d6bc 241 Rojo = 0;
JuanClerici 0:a49a5f50d6bc 242 Verde = 1;
JuanClerici 0:a49a5f50d6bc 243 Azul = 1;
JuanClerici 0:a49a5f50d6bc 244 break;
JuanClerici 0:a49a5f50d6bc 245 case 2:
JuanClerici 0:a49a5f50d6bc 246 Rojo = 1;
JuanClerici 0:a49a5f50d6bc 247 Verde = 0;
JuanClerici 0:a49a5f50d6bc 248 Azul = 1;
JuanClerici 0:a49a5f50d6bc 249 break;
JuanClerici 0:a49a5f50d6bc 250 case 1:
JuanClerici 0:a49a5f50d6bc 251 Rojo = 1;
JuanClerici 0:a49a5f50d6bc 252 Verde = 1;
JuanClerici 0:a49a5f50d6bc 253 Azul = 0;
JuanClerici 0:a49a5f50d6bc 254 break;
JuanClerici 0:a49a5f50d6bc 255 case 7:
JuanClerici 0:a49a5f50d6bc 256 Rojo = 0;
JuanClerici 0:a49a5f50d6bc 257 Verde = 0;
JuanClerici 0:a49a5f50d6bc 258 Azul = 0;
JuanClerici 0:a49a5f50d6bc 259 break;
JuanClerici 0:a49a5f50d6bc 260 }
JuanClerici 0:a49a5f50d6bc 261 }
JuanClerici 0:a49a5f50d6bc 262
JuanClerici 0:a49a5f50d6bc 263 char Pulsador()
JuanClerici 0:a49a5f50d6bc 264 {
JuanClerici 0:a49a5f50d6bc 265 pulsador = 0;
JuanClerici 1:78297550b459 266
JuanClerici 0:a49a5f50d6bc 267 if (PV.rising()) {
JuanClerici 0:a49a5f50d6bc 268 flagPulsador = 1;
JuanClerici 0:a49a5f50d6bc 269 pulsador = 2;
JuanClerici 0:a49a5f50d6bc 270 return 0;
JuanClerici 0:a49a5f50d6bc 271 }
JuanClerici 0:a49a5f50d6bc 272 if (PA.rising()) {
JuanClerici 0:a49a5f50d6bc 273 flagPulsador = 1;
JuanClerici 0:a49a5f50d6bc 274 pulsador = 3;
JuanClerici 0:a49a5f50d6bc 275 return 0;
JuanClerici 0:a49a5f50d6bc 276 }
JuanClerici 0:a49a5f50d6bc 277 if (PR.rising()) {
JuanClerici 0:a49a5f50d6bc 278 flagPulsador = 1;
JuanClerici 0:a49a5f50d6bc 279 pulsador = 1;
JuanClerici 0:a49a5f50d6bc 280 return 0;
JuanClerici 0:a49a5f50d6bc 281 }
JuanClerici 1:78297550b459 282
JuanClerici 0:a49a5f50d6bc 283 pulsador = 0;
JuanClerici 0:a49a5f50d6bc 284 flagPulsador = 0;
JuanClerici 0:a49a5f50d6bc 285 return 0;
JuanClerici 0:a49a5f50d6bc 286 }
JuanClerici 0:a49a5f50d6bc 287
JuanClerici 0:a49a5f50d6bc 288 void invierte()
JuanClerici 0:a49a5f50d6bc 289 {
JuanClerici 0:a49a5f50d6bc 290 times++;
JuanClerici 0:a49a5f50d6bc 291 semilla ++;
JuanClerici 0:a49a5f50d6bc 292 espera++;
JuanClerici 0:a49a5f50d6bc 293 }