Simon

Dependencies:   mbed

Committer:
JuanClerici
Date:
Mon May 27 11:31:15 2019 +0000
Revision:
0:a49a5f50d6bc
Child:
1:78297550b459
Programa andando

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