EJERCICIO SIMON: Axel Oropeza Matias Rodriguez

Dependencies:   mbed tsi_sensor

Committer:
matirodriguez
Date:
Wed May 22 23:04:17 2019 +0000
Revision:
0:fd466ee999a6
Child:
1:f6ea213ed382
FUNCIONA

Who changed what in which revision?

UserRevisionLine numberNew contents of line
matirodriguez 0:fd466ee999a6 1 #include "mbed.h"
matirodriguez 0:fd466ee999a6 2 #include "tsi_sensor.h"
matirodriguez 0:fd466ee999a6 3
matirodriguez 0:fd466ee999a6 4 #define ELEC0 9
matirodriguez 0:fd466ee999a6 5 #define ELEC1 10
matirodriguez 0:fd466ee999a6 6
matirodriguez 0:fd466ee999a6 7 /* Defino esas palabras que luego usaré para
matirodriguez 0:fd466ee999a6 8 lo que se pulsa en el TSI como numeros usando la funcion
matirodriguez 0:fd466ee999a6 9 "enum{}"
matirodriguez 0:fd466ee999a6 10 */
matirodriguez 0:fd466ee999a6 11 enum {NADA,
matirodriguez 0:fd466ee999a6 12 ROJO,
matirodriguez 0:fd466ee999a6 13 VERDE,
matirodriguez 0:fd466ee999a6 14 AZUL
matirodriguez 0:fd466ee999a6 15 };
matirodriguez 0:fd466ee999a6 16
matirodriguez 0:fd466ee999a6 17 /* Defino los nombres de los estados como
matirodriguez 0:fd466ee999a6 18 numeros enteros con la funcion "enum{}"
matirodriguez 0:fd466ee999a6 19 */
matirodriguez 0:fd466ee999a6 20
matirodriguez 0:fd466ee999a6 21 enum {ESPERO_USUARIO,
matirodriguez 0:fd466ee999a6 22 MUESTRO_SECUENCIA,
matirodriguez 0:fd466ee999a6 23 COMPARO_SECUENCIA
matirodriguez 0:fd466ee999a6 24 };
matirodriguez 0:fd466ee999a6 25
matirodriguez 0:fd466ee999a6 26 enum {ESPERO_HAB,
matirodriguez 0:fd466ee999a6 27 MUESTRO,
matirodriguez 0:fd466ee999a6 28 APAGO
matirodriguez 0:fd466ee999a6 29 };
matirodriguez 0:fd466ee999a6 30
matirodriguez 0:fd466ee999a6 31 enum {ESPERAR_HAB,
matirodriguez 0:fd466ee999a6 32 ESPERAR_USUARIO,
matirodriguez 0:fd466ee999a6 33 COMPARO
matirodriguez 0:fd466ee999a6 34 };
matirodriguez 0:fd466ee999a6 35
matirodriguez 0:fd466ee999a6 36 #define ERROR 15
matirodriguez 0:fd466ee999a6 37 #define CORRECTO 24
matirodriguez 0:fd466ee999a6 38
matirodriguez 0:fd466ee999a6 39 TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
matirodriguez 0:fd466ee999a6 40
matirodriguez 0:fd466ee999a6 41 // Prototipos de funciones de maquinas de estados
matirodriguez 0:fd466ee999a6 42 void MAQ_SECUENCIA();
matirodriguez 0:fd466ee999a6 43 void MAQ_MUESTREO();
matirodriguez 0:fd466ee999a6 44 void MAQ_COMPARO();
matirodriguez 0:fd466ee999a6 45
matirodriguez 0:fd466ee999a6 46 void MAQ_lecturaTSI();
matirodriguez 0:fd466ee999a6 47
matirodriguez 0:fd466ee999a6 48 void LEER_TSI(); //Prototipo funcion de lectura del TSI
matirodriguez 0:fd466ee999a6 49
matirodriguez 0:fd466ee999a6 50 void LED_1SEG();
matirodriguez 0:fd466ee999a6 51
matirodriguez 0:fd466ee999a6 52
matirodriguez 0:fd466ee999a6 53 void pulsacion_TSI();
matirodriguez 0:fd466ee999a6 54
matirodriguez 0:fd466ee999a6 55
matirodriguez 0:fd466ee999a6 56
matirodriguez 0:fd466ee999a6 57 void genero_secuencia(); // Funcion que utilizo para generar la secuencia aleatoria.
matirodriguez 0:fd466ee999a6 58
matirodriguez 0:fd466ee999a6 59 //Variables que indican el estado de las maquinas (empiezo en estado de reset)
matirodriguez 0:fd466ee999a6 60 int estado_maq_sec = ESPERO_USUARIO;
matirodriguez 0:fd466ee999a6 61 int estado_maq_mues = ESPERO_HAB;
matirodriguez 0:fd466ee999a6 62 int estado_maq_comp = ESPERAR_HAB;
matirodriguez 0:fd466ee999a6 63
matirodriguez 0:fd466ee999a6 64 int estado_maq_tsi = NADA;
matirodriguez 0:fd466ee999a6 65
matirodriguez 0:fd466ee999a6 66 //Variables que habilitan maquinas de estados
matirodriguez 0:fd466ee999a6 67 int hab_mostrar = 0;
matirodriguez 0:fd466ee999a6 68 int hab_comparo = 0;
matirodriguez 0:fd466ee999a6 69
matirodriguez 0:fd466ee999a6 70 //Variables que me indican el fin de una maquina de estados
matirodriguez 0:fd466ee999a6 71 int fin_mostrar = 0;
matirodriguez 0:fd466ee999a6 72 int fin_comparo = 0;
matirodriguez 0:fd466ee999a6 73
matirodriguez 0:fd466ee999a6 74 //Variables que acumulan datos
matirodriguez 0:fd466ee999a6 75
matirodriguez 0:fd466ee999a6 76 int color[25]; //Esta variable contendrá toda la secuencia aleatoria de 24 valores (no voy a usar el valor 0).
matirodriguez 0:fd466ee999a6 77 int nivel = 0;
matirodriguez 0:fd466ee999a6 78 int tiempo_muestreo = 0;
matirodriguez 0:fd466ee999a6 79 int color_teclado = NADA;
matirodriguez 0:fd466ee999a6 80 int ingreso = NADA;
matirodriguez 0:fd466ee999a6 81
matirodriguez 0:fd466ee999a6 82 int var_pulsacion = 25;
matirodriguez 0:fd466ee999a6 83
matirodriguez 0:fd466ee999a6 84 Ticker lectura;
matirodriguez 0:fd466ee999a6 85 Ticker temporizador;
matirodriguez 0:fd466ee999a6 86
matirodriguez 0:fd466ee999a6 87 Ticker pulsacion;
matirodriguez 0:fd466ee999a6 88
matirodriguez 0:fd466ee999a6 89 // DEFINO SALIDAS
matirodriguez 0:fd466ee999a6 90
matirodriguez 0:fd466ee999a6 91 DigitalOut ledrojo(LED_RED);
matirodriguez 0:fd466ee999a6 92 DigitalOut ledverde(LED_GREEN);
matirodriguez 0:fd466ee999a6 93 DigitalOut ledazul(LED_BLUE);
matirodriguez 0:fd466ee999a6 94 AnalogIn noise(PTB0);
matirodriguez 0:fd466ee999a6 95
matirodriguez 0:fd466ee999a6 96
matirodriguez 0:fd466ee999a6 97 int main(void)
matirodriguez 0:fd466ee999a6 98 {
matirodriguez 0:fd466ee999a6 99
matirodriguez 0:fd466ee999a6 100 lectura.attach(LEER_TSI,0.1);
matirodriguez 0:fd466ee999a6 101 pulsacion.attach(pulsacion_TSI,0.001);
matirodriguez 0:fd466ee999a6 102
matirodriguez 0:fd466ee999a6 103 temporizador.attach(LED_1SEG,0.01);
matirodriguez 0:fd466ee999a6 104
matirodriguez 0:fd466ee999a6 105
matirodriguez 0:fd466ee999a6 106 ledrojo = 1;
matirodriguez 0:fd466ee999a6 107 ledverde= 1;
matirodriguez 0:fd466ee999a6 108 ledazul = 1;
matirodriguez 0:fd466ee999a6 109
matirodriguez 0:fd466ee999a6 110 while (true) {
matirodriguez 0:fd466ee999a6 111
matirodriguez 0:fd466ee999a6 112 MAQ_lecturaTSI();
matirodriguez 0:fd466ee999a6 113
matirodriguez 0:fd466ee999a6 114 MAQ_SECUENCIA();
matirodriguez 0:fd466ee999a6 115
matirodriguez 0:fd466ee999a6 116 MAQ_MUESTREO();
matirodriguez 0:fd466ee999a6 117
matirodriguez 0:fd466ee999a6 118 MAQ_COMPARO();
matirodriguez 0:fd466ee999a6 119
matirodriguez 0:fd466ee999a6 120 }
matirodriguez 0:fd466ee999a6 121 }
matirodriguez 0:fd466ee999a6 122
matirodriguez 0:fd466ee999a6 123 void LEER_TSI()
matirodriguez 0:fd466ee999a6 124 {
matirodriguez 0:fd466ee999a6 125 float auxiliar = 0;
matirodriguez 0:fd466ee999a6 126 auxiliar = tsi.readPercentage();
matirodriguez 0:fd466ee999a6 127
matirodriguez 0:fd466ee999a6 128 if(auxiliar == 0) {
matirodriguez 0:fd466ee999a6 129 color_teclado = NADA;
matirodriguez 0:fd466ee999a6 130 }
matirodriguez 0:fd466ee999a6 131
matirodriguez 0:fd466ee999a6 132 if((auxiliar > 0)&&(auxiliar < 0.33)) {
matirodriguez 0:fd466ee999a6 133 color_teclado = ROJO;
matirodriguez 0:fd466ee999a6 134 }
matirodriguez 0:fd466ee999a6 135
matirodriguez 0:fd466ee999a6 136 if((auxiliar >= 0.33)&&(auxiliar <= 0.66)) {
matirodriguez 0:fd466ee999a6 137 color_teclado = VERDE;
matirodriguez 0:fd466ee999a6 138 }
matirodriguez 0:fd466ee999a6 139
matirodriguez 0:fd466ee999a6 140 if((auxiliar > 0.66)&&(auxiliar <= 1)) {
matirodriguez 0:fd466ee999a6 141 color_teclado = AZUL;
matirodriguez 0:fd466ee999a6 142 }
matirodriguez 0:fd466ee999a6 143 }
matirodriguez 0:fd466ee999a6 144
matirodriguez 0:fd466ee999a6 145 void pulsacion_TSI()
matirodriguez 0:fd466ee999a6 146 {
matirodriguez 0:fd466ee999a6 147 if(var_pulsacion > 0) {
matirodriguez 0:fd466ee999a6 148 var_pulsacion--;
matirodriguez 0:fd466ee999a6 149 }
matirodriguez 0:fd466ee999a6 150 }
matirodriguez 0:fd466ee999a6 151
matirodriguez 0:fd466ee999a6 152 void MAQ_lecturaTSI()
matirodriguez 0:fd466ee999a6 153 {
matirodriguez 0:fd466ee999a6 154 if(var_pulsacion < 1) {
matirodriguez 0:fd466ee999a6 155 var_pulsacion = 25;
matirodriguez 0:fd466ee999a6 156 switch(estado_maq_tsi) {
matirodriguez 0:fd466ee999a6 157 case NADA:
matirodriguez 0:fd466ee999a6 158 ingreso = NADA;
matirodriguez 0:fd466ee999a6 159 switch(color_teclado) {
matirodriguez 0:fd466ee999a6 160 case ROJO:
matirodriguez 0:fd466ee999a6 161 estado_maq_tsi = ROJO;
matirodriguez 0:fd466ee999a6 162 ingreso = ROJO;
matirodriguez 0:fd466ee999a6 163 break;
matirodriguez 0:fd466ee999a6 164 case VERDE:
matirodriguez 0:fd466ee999a6 165 estado_maq_tsi = VERDE;
matirodriguez 0:fd466ee999a6 166 ingreso = VERDE;
matirodriguez 0:fd466ee999a6 167 break;
matirodriguez 0:fd466ee999a6 168 case AZUL:
matirodriguez 0:fd466ee999a6 169 estado_maq_tsi = AZUL;
matirodriguez 0:fd466ee999a6 170 ingreso = AZUL;
matirodriguez 0:fd466ee999a6 171 break;
matirodriguez 0:fd466ee999a6 172 }
matirodriguez 0:fd466ee999a6 173 break;
matirodriguez 0:fd466ee999a6 174 case ROJO:
matirodriguez 0:fd466ee999a6 175 switch(color_teclado) {
matirodriguez 0:fd466ee999a6 176 case NADA:
matirodriguez 0:fd466ee999a6 177 estado_maq_tsi = NADA;
matirodriguez 0:fd466ee999a6 178 break;
matirodriguez 0:fd466ee999a6 179 case VERDE:
matirodriguez 0:fd466ee999a6 180 estado_maq_tsi = VERDE;
matirodriguez 0:fd466ee999a6 181 ingreso = VERDE;
matirodriguez 0:fd466ee999a6 182 break;
matirodriguez 0:fd466ee999a6 183 case AZUL:
matirodriguez 0:fd466ee999a6 184 estado_maq_tsi = AZUL;
matirodriguez 0:fd466ee999a6 185 ingreso = AZUL;
matirodriguez 0:fd466ee999a6 186 break;
matirodriguez 0:fd466ee999a6 187 }
matirodriguez 0:fd466ee999a6 188 break;
matirodriguez 0:fd466ee999a6 189 case VERDE:
matirodriguez 0:fd466ee999a6 190 switch(color_teclado) {
matirodriguez 0:fd466ee999a6 191 case NADA:
matirodriguez 0:fd466ee999a6 192 estado_maq_tsi = NADA;
matirodriguez 0:fd466ee999a6 193 break;
matirodriguez 0:fd466ee999a6 194 case ROJO:
matirodriguez 0:fd466ee999a6 195 estado_maq_tsi = ROJO;
matirodriguez 0:fd466ee999a6 196 ingreso = ROJO;
matirodriguez 0:fd466ee999a6 197 break;
matirodriguez 0:fd466ee999a6 198 case AZUL:
matirodriguez 0:fd466ee999a6 199 estado_maq_tsi = AZUL;
matirodriguez 0:fd466ee999a6 200 ingreso = AZUL;
matirodriguez 0:fd466ee999a6 201 break;
matirodriguez 0:fd466ee999a6 202 }
matirodriguez 0:fd466ee999a6 203 break;
matirodriguez 0:fd466ee999a6 204 case AZUL:
matirodriguez 0:fd466ee999a6 205 switch(color_teclado) {
matirodriguez 0:fd466ee999a6 206 case NADA:
matirodriguez 0:fd466ee999a6 207 estado_maq_tsi = NADA;
matirodriguez 0:fd466ee999a6 208 break;
matirodriguez 0:fd466ee999a6 209 case ROJO:
matirodriguez 0:fd466ee999a6 210 estado_maq_tsi = ROJO;
matirodriguez 0:fd466ee999a6 211 ingreso = ROJO;
matirodriguez 0:fd466ee999a6 212 break;
matirodriguez 0:fd466ee999a6 213 case VERDE:
matirodriguez 0:fd466ee999a6 214 estado_maq_tsi = VERDE;
matirodriguez 0:fd466ee999a6 215 ingreso = VERDE;
matirodriguez 0:fd466ee999a6 216 break;
matirodriguez 0:fd466ee999a6 217 }
matirodriguez 0:fd466ee999a6 218 break;
matirodriguez 0:fd466ee999a6 219 }
matirodriguez 0:fd466ee999a6 220 }
matirodriguez 0:fd466ee999a6 221 }
matirodriguez 0:fd466ee999a6 222
matirodriguez 0:fd466ee999a6 223 void LED_1SEG()
matirodriguez 0:fd466ee999a6 224 {
matirodriguez 0:fd466ee999a6 225 if(tiempo_muestreo >= 0) {
matirodriguez 0:fd466ee999a6 226 tiempo_muestreo--;
matirodriguez 0:fd466ee999a6 227 }
matirodriguez 0:fd466ee999a6 228 }
matirodriguez 0:fd466ee999a6 229
matirodriguez 0:fd466ee999a6 230
matirodriguez 0:fd466ee999a6 231 void MAQ_SECUENCIA()
matirodriguez 0:fd466ee999a6 232 {
matirodriguez 0:fd466ee999a6 233
matirodriguez 0:fd466ee999a6 234 switch(estado_maq_sec) { //El switch variará entre los distintos estados de mi maquina (los numeros correspondientes se encuentran en el "enum{}" al inicio del codigo)
matirodriguez 0:fd466ee999a6 235
matirodriguez 0:fd466ee999a6 236 case ESPERO_USUARIO:
matirodriguez 0:fd466ee999a6 237 if(ingreso != NADA) {
matirodriguez 0:fd466ee999a6 238 genero_secuencia();
matirodriguez 0:fd466ee999a6 239 nivel++;
matirodriguez 0:fd466ee999a6 240 hab_mostrar = 1;
matirodriguez 0:fd466ee999a6 241 estado_maq_sec = MUESTRO_SECUENCIA;
matirodriguez 0:fd466ee999a6 242 ingreso = NADA;
matirodriguez 0:fd466ee999a6 243 }
matirodriguez 0:fd466ee999a6 244 break;
matirodriguez 0:fd466ee999a6 245
matirodriguez 0:fd466ee999a6 246 case MUESTRO_SECUENCIA:
matirodriguez 0:fd466ee999a6 247
matirodriguez 0:fd466ee999a6 248 if(fin_mostrar == 1) {
matirodriguez 0:fd466ee999a6 249 fin_mostrar = 0;
matirodriguez 0:fd466ee999a6 250 estado_maq_sec = COMPARO_SECUENCIA;
matirodriguez 0:fd466ee999a6 251 hab_comparo = 1;
matirodriguez 0:fd466ee999a6 252 }
matirodriguez 0:fd466ee999a6 253
matirodriguez 0:fd466ee999a6 254 break;
matirodriguez 0:fd466ee999a6 255
matirodriguez 0:fd466ee999a6 256 case COMPARO_SECUENCIA:
matirodriguez 0:fd466ee999a6 257
matirodriguez 0:fd466ee999a6 258 if(fin_comparo == 1) {
matirodriguez 0:fd466ee999a6 259 fin_comparo = 0;
matirodriguez 0:fd466ee999a6 260 estado_maq_sec = MUESTRO_SECUENCIA;
matirodriguez 0:fd466ee999a6 261 hab_mostrar = 1;
matirodriguez 0:fd466ee999a6 262 nivel++;
matirodriguez 0:fd466ee999a6 263
matirodriguez 0:fd466ee999a6 264 }
matirodriguez 0:fd466ee999a6 265 break;
matirodriguez 0:fd466ee999a6 266 }
matirodriguez 0:fd466ee999a6 267 }
matirodriguez 0:fd466ee999a6 268
matirodriguez 0:fd466ee999a6 269 void MAQ_MUESTREO()
matirodriguez 0:fd466ee999a6 270 {
matirodriguez 0:fd466ee999a6 271
matirodriguez 0:fd466ee999a6 272 static int nivel_mostrado; // Variable que voy a tener para saber que nivel estoy mostrando en los leds ahora
matirodriguez 0:fd466ee999a6 273
matirodriguez 0:fd466ee999a6 274 switch(estado_maq_mues) { // Uso un switch para variar entre los estados de la maquina
matirodriguez 0:fd466ee999a6 275
matirodriguez 0:fd466ee999a6 276 case ESPERO_HAB:
matirodriguez 0:fd466ee999a6 277
matirodriguez 0:fd466ee999a6 278 nivel_mostrado = 1; // El primer nivel que muestro es 1, asi que reseteo esta variable cada vez que paso por este estado
matirodriguez 0:fd466ee999a6 279
matirodriguez 0:fd466ee999a6 280 if(hab_mostrar == 1) { // Cuando recibo la habilitacion de la otra maquina de estados:
matirodriguez 0:fd466ee999a6 281
matirodriguez 0:fd466ee999a6 282 estado_maq_mues = MUESTRO; // Cambio de estado y
matirodriguez 0:fd466ee999a6 283 tiempo_muestreo = 100; // Establezco el tiempo en 1 seg (0.01seg * 100 = 1seg)
matirodriguez 0:fd466ee999a6 284 hab_mostrar = 0;
matirodriguez 0:fd466ee999a6 285
matirodriguez 0:fd466ee999a6 286 }
matirodriguez 0:fd466ee999a6 287 break;
matirodriguez 0:fd466ee999a6 288
matirodriguez 0:fd466ee999a6 289 case MUESTRO:
matirodriguez 0:fd466ee999a6 290
matirodriguez 0:fd466ee999a6 291 switch(color[nivel_mostrado]) { // Muestro el color correspondiente al primer nivel, y voy cambiando cada 2 segundos
matirodriguez 0:fd466ee999a6 292 case ROJO:
matirodriguez 0:fd466ee999a6 293 ledrojo = 0;
matirodriguez 0:fd466ee999a6 294 break;
matirodriguez 0:fd466ee999a6 295
matirodriguez 0:fd466ee999a6 296 case VERDE:
matirodriguez 0:fd466ee999a6 297 ledverde = 0;
matirodriguez 0:fd466ee999a6 298 break;
matirodriguez 0:fd466ee999a6 299
matirodriguez 0:fd466ee999a6 300 case AZUL:
matirodriguez 0:fd466ee999a6 301 ledazul = 0;
matirodriguez 0:fd466ee999a6 302 break;
matirodriguez 0:fd466ee999a6 303 }
matirodriguez 0:fd466ee999a6 304
matirodriguez 0:fd466ee999a6 305 if(tiempo_muestreo == 0) { // Si pasó 1 segundo, reseteo el tiempo y cambio de estado
matirodriguez 0:fd466ee999a6 306 tiempo_muestreo = 100; // Establezco el tiempo en 1 segundo otra vez
matirodriguez 0:fd466ee999a6 307 estado_maq_mues = APAGO; // Cambio de estado
matirodriguez 0:fd466ee999a6 308 }
matirodriguez 0:fd466ee999a6 309 break;
matirodriguez 0:fd466ee999a6 310
matirodriguez 0:fd466ee999a6 311 case APAGO:
matirodriguez 0:fd466ee999a6 312
matirodriguez 0:fd466ee999a6 313 switch(color[nivel_mostrado]) { // Ahora voy a apagar el led correspondiente al nivel que se esta mostrando.
matirodriguez 0:fd466ee999a6 314 case ROJO:
matirodriguez 0:fd466ee999a6 315 ledrojo = 1;
matirodriguez 0:fd466ee999a6 316 break;
matirodriguez 0:fd466ee999a6 317 case VERDE:
matirodriguez 0:fd466ee999a6 318 ledverde = 1;
matirodriguez 0:fd466ee999a6 319 break;
matirodriguez 0:fd466ee999a6 320 case AZUL:
matirodriguez 0:fd466ee999a6 321 ledazul = 1;
matirodriguez 0:fd466ee999a6 322 break;
matirodriguez 0:fd466ee999a6 323 }
matirodriguez 0:fd466ee999a6 324 if(tiempo_muestreo == 0) {
matirodriguez 0:fd466ee999a6 325 if(nivel_mostrado == nivel) {
matirodriguez 0:fd466ee999a6 326 nivel_mostrado = 1;
matirodriguez 0:fd466ee999a6 327 estado_maq_mues = ESPERO_HAB;
matirodriguez 0:fd466ee999a6 328 fin_mostrar = 1;
matirodriguez 0:fd466ee999a6 329 } else {
matirodriguez 0:fd466ee999a6 330 estado_maq_mues = MUESTRO;
matirodriguez 0:fd466ee999a6 331 nivel_mostrado++;
matirodriguez 0:fd466ee999a6 332 tiempo_muestreo = 100;
matirodriguez 0:fd466ee999a6 333 }
matirodriguez 0:fd466ee999a6 334 }
matirodriguez 0:fd466ee999a6 335 break;
matirodriguez 0:fd466ee999a6 336
matirodriguez 0:fd466ee999a6 337
matirodriguez 0:fd466ee999a6 338 }
matirodriguez 0:fd466ee999a6 339
matirodriguez 0:fd466ee999a6 340
matirodriguez 0:fd466ee999a6 341 }
matirodriguez 0:fd466ee999a6 342
matirodriguez 0:fd466ee999a6 343 void MAQ_COMPARO()
matirodriguez 0:fd466ee999a6 344 {
matirodriguez 0:fd466ee999a6 345
matirodriguez 0:fd466ee999a6 346
matirodriguez 0:fd466ee999a6 347 static int nivel_comparado; // Variable que voy a usar para comparar todos los niveles sucesivamente, con lo que se vaya ingresando en el TSI
matirodriguez 0:fd466ee999a6 348 static int obtenido = NADA;
matirodriguez 0:fd466ee999a6 349
matirodriguez 0:fd466ee999a6 350 switch(estado_maq_comp) {
matirodriguez 0:fd466ee999a6 351 case ESPERAR_HAB:
matirodriguez 0:fd466ee999a6 352
matirodriguez 0:fd466ee999a6 353 nivel_comparado = 1; // Establezco en este estado el primer nivel que se va a comparar (el 1)
matirodriguez 0:fd466ee999a6 354
matirodriguez 0:fd466ee999a6 355 if(hab_comparo == 1) { // Si recibí habilitacion desde la otra maquina, cambio de estado
matirodriguez 0:fd466ee999a6 356 estado_maq_comp = ESPERAR_USUARIO;
matirodriguez 0:fd466ee999a6 357 hab_comparo = 0;
matirodriguez 0:fd466ee999a6 358 }
matirodriguez 0:fd466ee999a6 359
matirodriguez 0:fd466ee999a6 360 break;
matirodriguez 0:fd466ee999a6 361
matirodriguez 0:fd466ee999a6 362 case ESPERAR_USUARIO:
matirodriguez 0:fd466ee999a6 363
matirodriguez 0:fd466ee999a6 364 if(ingreso != NADA) { // Si se ingresa algo en el TSI, lo guardo en la variable "teclado"
matirodriguez 0:fd466ee999a6 365 obtenido = ingreso;
matirodriguez 0:fd466ee999a6 366 ingreso = NADA;
matirodriguez 0:fd466ee999a6 367 estado_maq_comp = COMPARO;
matirodriguez 0:fd466ee999a6 368 }
matirodriguez 0:fd466ee999a6 369
matirodriguez 0:fd466ee999a6 370 break;
matirodriguez 0:fd466ee999a6 371
matirodriguez 0:fd466ee999a6 372 case COMPARO: //Estado donde comparo el valor que se ingresó con el valor que corresponde
matirodriguez 0:fd466ee999a6 373
matirodriguez 0:fd466ee999a6 374 if(obtenido == color[nivel_comparado]) {
matirodriguez 0:fd466ee999a6 375 switch(color[nivel_comparado]) {
matirodriguez 0:fd466ee999a6 376 case ROJO:
matirodriguez 0:fd466ee999a6 377 printf("rojo\n");
matirodriguez 0:fd466ee999a6 378 break;
matirodriguez 0:fd466ee999a6 379 case VERDE:
matirodriguez 0:fd466ee999a6 380
matirodriguez 0:fd466ee999a6 381 printf("verde\n");
matirodriguez 0:fd466ee999a6 382 break;
matirodriguez 0:fd466ee999a6 383 case AZUL:
matirodriguez 0:fd466ee999a6 384 printf("azul\n");
matirodriguez 0:fd466ee999a6 385 break;
matirodriguez 0:fd466ee999a6 386
matirodriguez 0:fd466ee999a6 387
matirodriguez 0:fd466ee999a6 388 }
matirodriguez 0:fd466ee999a6 389
matirodriguez 0:fd466ee999a6 390
matirodriguez 0:fd466ee999a6 391 obtenido = NADA;
matirodriguez 0:fd466ee999a6 392 if(nivel_comparado <= nivel) {
matirodriguez 0:fd466ee999a6 393 estado_maq_comp = ESPERAR_USUARIO; //Vuelvo al estado de esperar que el usuario ingrese algo y
matirodriguez 0:fd466ee999a6 394 nivel_comparado++; // Paso al siguiente nivel.
matirodriguez 0:fd466ee999a6 395 }
matirodriguez 0:fd466ee999a6 396 if(nivel_comparado > nivel) {
matirodriguez 0:fd466ee999a6 397 estado_maq_comp = ESPERAR_HAB; // Reseteo la maquina
matirodriguez 0:fd466ee999a6 398 fin_comparo = 1;
matirodriguez 0:fd466ee999a6 399 }
matirodriguez 0:fd466ee999a6 400
matirodriguez 0:fd466ee999a6 401 } else {
matirodriguez 0:fd466ee999a6 402 estado_maq_comp = ESPERAR_HAB; // Reseteo la maquina
matirodriguez 0:fd466ee999a6 403 fin_comparo = 1; // Marco error
matirodriguez 0:fd466ee999a6 404 printf("ERROR");
matirodriguez 0:fd466ee999a6 405 printf("ERROR");
matirodriguez 0:fd466ee999a6 406 printf("ERROR");
matirodriguez 0:fd466ee999a6 407 printf("ERROR");
matirodriguez 0:fd466ee999a6 408 printf("ERROR\n");
matirodriguez 0:fd466ee999a6 409
matirodriguez 0:fd466ee999a6 410 }
matirodriguez 0:fd466ee999a6 411 break;
matirodriguez 0:fd466ee999a6 412 }
matirodriguez 0:fd466ee999a6 413 }
matirodriguez 0:fd466ee999a6 414
matirodriguez 0:fd466ee999a6 415 void genero_secuencia()
matirodriguez 0:fd466ee999a6 416 {
matirodriguez 0:fd466ee999a6 417 int auxiliar;
matirodriguez 0:fd466ee999a6 418
matirodriguez 0:fd466ee999a6 419 srand(int (noise * 10000)); // Cambio la semilla de la funcion rand usando un valor de ruido en una entrada analogica al aire
matirodriguez 0:fd466ee999a6 420
matirodriguez 0:fd466ee999a6 421 for(int i = 1; i <=25 ; i++) { // Creo un for para recorren las 25 posiciones de memoria del vector "color[]" (el valor 0 no lo utilizo)
matirodriguez 0:fd466ee999a6 422
matirodriguez 0:fd466ee999a6 423
matirodriguez 0:fd466ee999a6 424 auxiliar = rand(); //Genero un valor aleatorio y lo guardo en mi variable auxiliar
matirodriguez 0:fd466ee999a6 425
matirodriguez 0:fd466ee999a6 426 // Dependiendo de cuanto resto me de al dividir por 3, asignare ese valor aleatorio con un color
matirodriguez 0:fd466ee999a6 427 if((auxiliar % 3) == 0) {
matirodriguez 0:fd466ee999a6 428 color[i] = ROJO;
matirodriguez 0:fd466ee999a6 429 }
matirodriguez 0:fd466ee999a6 430
matirodriguez 0:fd466ee999a6 431 if((auxiliar % 3 )== 1) {
matirodriguez 0:fd466ee999a6 432 color[i] = VERDE;
matirodriguez 0:fd466ee999a6 433 }
matirodriguez 0:fd466ee999a6 434
matirodriguez 0:fd466ee999a6 435 if((auxiliar % 3 )== 2) {
matirodriguez 0:fd466ee999a6 436 color[i] = AZUL;
matirodriguez 0:fd466ee999a6 437 }
matirodriguez 0:fd466ee999a6 438 switch(color[i]) {
matirodriguez 0:fd466ee999a6 439 case ROJO:
matirodriguez 0:fd466ee999a6 440 printf("%i ROJO;",i);
matirodriguez 0:fd466ee999a6 441 break;
matirodriguez 0:fd466ee999a6 442 case VERDE:
matirodriguez 0:fd466ee999a6 443 printf("%i VERDE;",i);
matirodriguez 0:fd466ee999a6 444 break;
matirodriguez 0:fd466ee999a6 445 case AZUL:
matirodriguez 0:fd466ee999a6 446 printf("%i AZUL;",i);
matirodriguez 0:fd466ee999a6 447 break;
matirodriguez 0:fd466ee999a6 448 }
matirodriguez 0:fd466ee999a6 449 }
matirodriguez 0:fd466ee999a6 450 printf("\n");
matirodriguez 0:fd466ee999a6 451 }