EJERCICIO SIMON: Axel Oropeza Matias Rodriguez

Dependencies:   mbed tsi_sensor

Committer:
matirodriguez
Date:
Wed May 22 23:40:43 2019 +0000
Revision:
1:f6ea213ed382
Parent:
0:fd466ee999a6
Child:
2:90667b428ce6
FUNCIONA Y ESTA COMENTADO

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 1:f6ea213ed382 21 //Maquina "MAQ_SECUENCIA()"
matirodriguez 0:fd466ee999a6 22 enum {ESPERO_USUARIO,
matirodriguez 0:fd466ee999a6 23 MUESTRO_SECUENCIA,
matirodriguez 0:fd466ee999a6 24 COMPARO_SECUENCIA
matirodriguez 0:fd466ee999a6 25 };
matirodriguez 0:fd466ee999a6 26
matirodriguez 1:f6ea213ed382 27 //Maquina "MAQ_MUESTREO()"
matirodriguez 0:fd466ee999a6 28 enum {ESPERO_HAB,
matirodriguez 0:fd466ee999a6 29 MUESTRO,
matirodriguez 0:fd466ee999a6 30 APAGO
matirodriguez 0:fd466ee999a6 31 };
matirodriguez 0:fd466ee999a6 32
matirodriguez 1:f6ea213ed382 33 //Maquina "MAQ_COMPARO()"
matirodriguez 0:fd466ee999a6 34 enum {ESPERAR_HAB,
matirodriguez 0:fd466ee999a6 35 ESPERAR_USUARIO,
matirodriguez 0:fd466ee999a6 36 COMPARO
matirodriguez 0:fd466ee999a6 37 };
matirodriguez 0:fd466ee999a6 38
matirodriguez 0:fd466ee999a6 39 #define ERROR 15
matirodriguez 0:fd466ee999a6 40 #define CORRECTO 24
matirodriguez 0:fd466ee999a6 41
matirodriguez 0:fd466ee999a6 42 TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
matirodriguez 0:fd466ee999a6 43
matirodriguez 0:fd466ee999a6 44 // Prototipos de funciones de maquinas de estados
matirodriguez 0:fd466ee999a6 45 void MAQ_SECUENCIA();
matirodriguez 0:fd466ee999a6 46 void MAQ_MUESTREO();
matirodriguez 0:fd466ee999a6 47 void MAQ_COMPARO();
matirodriguez 0:fd466ee999a6 48
matirodriguez 0:fd466ee999a6 49 void MAQ_lecturaTSI();
matirodriguez 0:fd466ee999a6 50
matirodriguez 0:fd466ee999a6 51 void LEER_TSI(); //Prototipo funcion de lectura del TSI
matirodriguez 1:f6ea213ed382 52 void LED_1SEG(); //Prototipo funcion para prender y apagar led cada 1 segundo
matirodriguez 0:fd466ee999a6 53
matirodriguez 1:f6ea213ed382 54 void pulsacion_TSI(); //Prototipo funcion para leer 1 solo valor del TSI cada 2.5mseg
matirodriguez 0:fd466ee999a6 55
matirodriguez 0:fd466ee999a6 56 void genero_secuencia(); // Funcion que utilizo para generar la secuencia aleatoria.
matirodriguez 0:fd466ee999a6 57
matirodriguez 0:fd466ee999a6 58 //Variables que indican el estado de las maquinas (empiezo en estado de reset)
matirodriguez 0:fd466ee999a6 59 int estado_maq_sec = ESPERO_USUARIO;
matirodriguez 0:fd466ee999a6 60 int estado_maq_mues = ESPERO_HAB;
matirodriguez 0:fd466ee999a6 61 int estado_maq_comp = ESPERAR_HAB;
matirodriguez 0:fd466ee999a6 62
matirodriguez 0:fd466ee999a6 63 int estado_maq_tsi = NADA;
matirodriguez 0:fd466ee999a6 64
matirodriguez 0:fd466ee999a6 65 //Variables que habilitan maquinas de estados
matirodriguez 0:fd466ee999a6 66 int hab_mostrar = 0;
matirodriguez 0:fd466ee999a6 67 int hab_comparo = 0;
matirodriguez 0:fd466ee999a6 68
matirodriguez 0:fd466ee999a6 69 //Variables que me indican el fin de una maquina de estados
matirodriguez 0:fd466ee999a6 70 int fin_mostrar = 0;
matirodriguez 0:fd466ee999a6 71 int fin_comparo = 0;
matirodriguez 0:fd466ee999a6 72
matirodriguez 0:fd466ee999a6 73 //Variables que acumulan datos
matirodriguez 0:fd466ee999a6 74 int color[25]; //Esta variable contendrá toda la secuencia aleatoria de 24 valores (no voy a usar el valor 0).
matirodriguez 1:f6ea213ed382 75 int nivel = 0; //Esta variable me indica el nivel actual
matirodriguez 1:f6ea213ed382 76 int tiempo_muestreo = 0; // Variable para contar el 1 segundo para el encendido y apagado de leds
matirodriguez 1:f6ea213ed382 77 int var_pulsacion = 25; // Variable para contar los 2.5mseg de la funcion pulsacion_TSI()
matirodriguez 0:fd466ee999a6 78
matirodriguez 1:f6ea213ed382 79 int color_teclado = NADA; // Variable que contiene el valor del TSI en todo momento
matirodriguez 1:f6ea213ed382 80 int ingreso = NADA; // Variable que contiene el color presionado en el TSI, que se lee y luego es borrado
matirodriguez 0:fd466ee999a6 81
matirodriguez 1:f6ea213ed382 82 Ticker lectura; // Ticker lectura del TSI
matirodriguez 1:f6ea213ed382 83 Ticker temporizador; // Ticker para contar 1 segundo en los leds
matirodriguez 1:f6ea213ed382 84 Ticker pulsacion; // Ticker para usar la funcion pulsacion_TSI()
matirodriguez 0:fd466ee999a6 85
matirodriguez 0:fd466ee999a6 86 // DEFINO SALIDAS
matirodriguez 0:fd466ee999a6 87 DigitalOut ledrojo(LED_RED);
matirodriguez 0:fd466ee999a6 88 DigitalOut ledverde(LED_GREEN);
matirodriguez 0:fd466ee999a6 89 DigitalOut ledazul(LED_BLUE);
matirodriguez 1:f6ea213ed382 90
matirodriguez 1:f6ea213ed382 91 AnalogIn noise(PTB0); // Entrada que usaré para generar la secuencia aleatoria con el ruido que me genere
matirodriguez 0:fd466ee999a6 92
matirodriguez 0:fd466ee999a6 93
matirodriguez 0:fd466ee999a6 94 int main(void)
matirodriguez 0:fd466ee999a6 95 {
matirodriguez 0:fd466ee999a6 96
matirodriguez 1:f6ea213ed382 97 // Uno las funciones con el ticker correspondiente
matirodriguez 0:fd466ee999a6 98 lectura.attach(LEER_TSI,0.1);
matirodriguez 0:fd466ee999a6 99 pulsacion.attach(pulsacion_TSI,0.001);
matirodriguez 0:fd466ee999a6 100 temporizador.attach(LED_1SEG,0.01);
matirodriguez 0:fd466ee999a6 101
matirodriguez 1:f6ea213ed382 102 // Apago los leds al iniciar
matirodriguez 0:fd466ee999a6 103 ledrojo = 1;
matirodriguez 0:fd466ee999a6 104 ledverde= 1;
matirodriguez 0:fd466ee999a6 105 ledazul = 1;
matirodriguez 0:fd466ee999a6 106
matirodriguez 0:fd466ee999a6 107 while (true) {
matirodriguez 0:fd466ee999a6 108
matirodriguez 1:f6ea213ed382 109 // Constantemente uso las maquinas de estados
matirodriguez 1:f6ea213ed382 110
matirodriguez 0:fd466ee999a6 111 MAQ_lecturaTSI();
matirodriguez 0:fd466ee999a6 112
matirodriguez 0:fd466ee999a6 113 MAQ_SECUENCIA();
matirodriguez 0:fd466ee999a6 114
matirodriguez 0:fd466ee999a6 115 MAQ_MUESTREO();
matirodriguez 0:fd466ee999a6 116
matirodriguez 0:fd466ee999a6 117 MAQ_COMPARO();
matirodriguez 0:fd466ee999a6 118
matirodriguez 0:fd466ee999a6 119 }
matirodriguez 0:fd466ee999a6 120 }
matirodriguez 0:fd466ee999a6 121
matirodriguez 0:fd466ee999a6 122 void LEER_TSI()
matirodriguez 0:fd466ee999a6 123 {
matirodriguez 0:fd466ee999a6 124 float auxiliar = 0;
matirodriguez 1:f6ea213ed382 125 auxiliar = tsi.readPercentage(); //Guardo de manera auxiliar el valor entre 0 y 1 del TSI
matirodriguez 1:f6ea213ed382 126
matirodriguez 1:f6ea213ed382 127 // Asocio el valor del tsi numerico con un color, dividiendo en 4 valores posibles (0, <0.33, <0.66, <1)
matirodriguez 0:fd466ee999a6 128
matirodriguez 0:fd466ee999a6 129 if(auxiliar == 0) {
matirodriguez 0:fd466ee999a6 130 color_teclado = NADA;
matirodriguez 0:fd466ee999a6 131 }
matirodriguez 0:fd466ee999a6 132
matirodriguez 0:fd466ee999a6 133 if((auxiliar > 0)&&(auxiliar < 0.33)) {
matirodriguez 0:fd466ee999a6 134 color_teclado = ROJO;
matirodriguez 0:fd466ee999a6 135 }
matirodriguez 0:fd466ee999a6 136
matirodriguez 0:fd466ee999a6 137 if((auxiliar >= 0.33)&&(auxiliar <= 0.66)) {
matirodriguez 0:fd466ee999a6 138 color_teclado = VERDE;
matirodriguez 0:fd466ee999a6 139 }
matirodriguez 0:fd466ee999a6 140
matirodriguez 0:fd466ee999a6 141 if((auxiliar > 0.66)&&(auxiliar <= 1)) {
matirodriguez 0:fd466ee999a6 142 color_teclado = AZUL;
matirodriguez 0:fd466ee999a6 143 }
matirodriguez 0:fd466ee999a6 144 }
matirodriguez 0:fd466ee999a6 145
matirodriguez 0:fd466ee999a6 146 void pulsacion_TSI()
matirodriguez 0:fd466ee999a6 147 {
matirodriguez 0:fd466ee999a6 148 if(var_pulsacion > 0) {
matirodriguez 0:fd466ee999a6 149 var_pulsacion--;
matirodriguez 0:fd466ee999a6 150 }
matirodriguez 0:fd466ee999a6 151 }
matirodriguez 0:fd466ee999a6 152
matirodriguez 0:fd466ee999a6 153 void MAQ_lecturaTSI()
matirodriguez 0:fd466ee999a6 154 {
matirodriguez 1:f6ea213ed382 155 if(var_pulsacion < 1) { // Si se llegaron a los 2.5ms:
matirodriguez 1:f6ea213ed382 156 var_pulsacion = 25; // Vuelvo a establecer 2.5ms para el proximo ciclo
matirodriguez 0:fd466ee999a6 157 switch(estado_maq_tsi) {
matirodriguez 0:fd466ee999a6 158 case NADA:
matirodriguez 1:f6ea213ed382 159 ingreso = NADA; // La variable ingreso, salvo en los casos especificos, siempre se encontrará en NADA
matirodriguez 1:f6ea213ed382 160
matirodriguez 1:f6ea213ed382 161 // En vez de usar cadenas de if en las transiciones, utilizo un switch
matirodriguez 1:f6ea213ed382 162
matirodriguez 0:fd466ee999a6 163 switch(color_teclado) {
matirodriguez 0:fd466ee999a6 164 case ROJO:
matirodriguez 0:fd466ee999a6 165 estado_maq_tsi = ROJO;
matirodriguez 0:fd466ee999a6 166 ingreso = ROJO;
matirodriguez 0:fd466ee999a6 167 break;
matirodriguez 0:fd466ee999a6 168 case VERDE:
matirodriguez 0:fd466ee999a6 169 estado_maq_tsi = VERDE;
matirodriguez 0:fd466ee999a6 170 ingreso = VERDE;
matirodriguez 0:fd466ee999a6 171 break;
matirodriguez 0:fd466ee999a6 172 case AZUL:
matirodriguez 0:fd466ee999a6 173 estado_maq_tsi = AZUL;
matirodriguez 0:fd466ee999a6 174 ingreso = AZUL;
matirodriguez 0:fd466ee999a6 175 break;
matirodriguez 0:fd466ee999a6 176 }
matirodriguez 0:fd466ee999a6 177 break;
matirodriguez 1:f6ea213ed382 178
matirodriguez 0:fd466ee999a6 179 case ROJO:
matirodriguez 0:fd466ee999a6 180 switch(color_teclado) {
matirodriguez 0:fd466ee999a6 181 case NADA:
matirodriguez 0:fd466ee999a6 182 estado_maq_tsi = NADA;
matirodriguez 0:fd466ee999a6 183 break;
matirodriguez 0:fd466ee999a6 184 case VERDE:
matirodriguez 0:fd466ee999a6 185 estado_maq_tsi = VERDE;
matirodriguez 0:fd466ee999a6 186 ingreso = VERDE;
matirodriguez 0:fd466ee999a6 187 break;
matirodriguez 0:fd466ee999a6 188 case AZUL:
matirodriguez 0:fd466ee999a6 189 estado_maq_tsi = AZUL;
matirodriguez 0:fd466ee999a6 190 ingreso = AZUL;
matirodriguez 0:fd466ee999a6 191 break;
matirodriguez 0:fd466ee999a6 192 }
matirodriguez 0:fd466ee999a6 193 break;
matirodriguez 1:f6ea213ed382 194
matirodriguez 0:fd466ee999a6 195 case VERDE:
matirodriguez 0:fd466ee999a6 196 switch(color_teclado) {
matirodriguez 0:fd466ee999a6 197 case NADA:
matirodriguez 0:fd466ee999a6 198 estado_maq_tsi = NADA;
matirodriguez 0:fd466ee999a6 199 break;
matirodriguez 0:fd466ee999a6 200 case ROJO:
matirodriguez 0:fd466ee999a6 201 estado_maq_tsi = ROJO;
matirodriguez 0:fd466ee999a6 202 ingreso = ROJO;
matirodriguez 0:fd466ee999a6 203 break;
matirodriguez 0:fd466ee999a6 204 case AZUL:
matirodriguez 0:fd466ee999a6 205 estado_maq_tsi = AZUL;
matirodriguez 0:fd466ee999a6 206 ingreso = AZUL;
matirodriguez 0:fd466ee999a6 207 break;
matirodriguez 0:fd466ee999a6 208 }
matirodriguez 0:fd466ee999a6 209 break;
matirodriguez 1:f6ea213ed382 210
matirodriguez 0:fd466ee999a6 211 case AZUL:
matirodriguez 0:fd466ee999a6 212 switch(color_teclado) {
matirodriguez 0:fd466ee999a6 213 case NADA:
matirodriguez 0:fd466ee999a6 214 estado_maq_tsi = NADA;
matirodriguez 0:fd466ee999a6 215 break;
matirodriguez 0:fd466ee999a6 216 case ROJO:
matirodriguez 0:fd466ee999a6 217 estado_maq_tsi = ROJO;
matirodriguez 0:fd466ee999a6 218 ingreso = ROJO;
matirodriguez 0:fd466ee999a6 219 break;
matirodriguez 0:fd466ee999a6 220 case VERDE:
matirodriguez 0:fd466ee999a6 221 estado_maq_tsi = VERDE;
matirodriguez 0:fd466ee999a6 222 ingreso = VERDE;
matirodriguez 0:fd466ee999a6 223 break;
matirodriguez 0:fd466ee999a6 224 }
matirodriguez 0:fd466ee999a6 225 break;
matirodriguez 0:fd466ee999a6 226 }
matirodriguez 0:fd466ee999a6 227 }
matirodriguez 0:fd466ee999a6 228 }
matirodriguez 0:fd466ee999a6 229
matirodriguez 0:fd466ee999a6 230 void LED_1SEG()
matirodriguez 0:fd466ee999a6 231 {
matirodriguez 0:fd466ee999a6 232 if(tiempo_muestreo >= 0) {
matirodriguez 0:fd466ee999a6 233 tiempo_muestreo--;
matirodriguez 0:fd466ee999a6 234 }
matirodriguez 0:fd466ee999a6 235 }
matirodriguez 0:fd466ee999a6 236
matirodriguez 0:fd466ee999a6 237
matirodriguez 0:fd466ee999a6 238 void MAQ_SECUENCIA()
matirodriguez 0:fd466ee999a6 239 {
matirodriguez 0:fd466ee999a6 240
matirodriguez 0:fd466ee999a6 241 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 242
matirodriguez 0:fd466ee999a6 243 case ESPERO_USUARIO:
matirodriguez 1:f6ea213ed382 244 if(ingreso != NADA) { // Si se presiona algo:
matirodriguez 1:f6ea213ed382 245 genero_secuencia(); // Genero la secuencia
matirodriguez 1:f6ea213ed382 246 nivel++; // Sumo 1 a "nivel" asi comienzo por el nivel 1
matirodriguez 1:f6ea213ed382 247 hab_mostrar = 1; // Habilito la maquina de estados que muestra los colores
matirodriguez 1:f6ea213ed382 248 estado_maq_sec = MUESTRO_SECUENCIA; // Cambio de estado
matirodriguez 1:f6ea213ed382 249 ingreso = NADA; // Reseteo la variable que contenia el color presionado
matirodriguez 1:f6ea213ed382 250 ledrojo=1;
matirodriguez 1:f6ea213ed382 251 ledazul=1;
matirodriguez 1:f6ea213ed382 252 ledverde=1;
matirodriguez 0:fd466ee999a6 253 }
matirodriguez 0:fd466ee999a6 254 break;
matirodriguez 0:fd466ee999a6 255
matirodriguez 0:fd466ee999a6 256 case MUESTRO_SECUENCIA:
matirodriguez 0:fd466ee999a6 257
matirodriguez 1:f6ea213ed382 258 if(fin_mostrar == 1) { // Si se terminó la maquina de estados que muestra:
matirodriguez 1:f6ea213ed382 259 fin_mostrar = 0; // Vacio la variable que me lo indicó,
matirodriguez 1:f6ea213ed382 260 estado_maq_sec = COMPARO_SECUENCIA; // cambio de estado y
matirodriguez 1:f6ea213ed382 261 hab_comparo = 1; // habilito la maquina que compara
matirodriguez 0:fd466ee999a6 262 }
matirodriguez 0:fd466ee999a6 263
matirodriguez 0:fd466ee999a6 264 break;
matirodriguez 0:fd466ee999a6 265
matirodriguez 0:fd466ee999a6 266 case COMPARO_SECUENCIA:
matirodriguez 0:fd466ee999a6 267
matirodriguez 1:f6ea213ed382 268 if(fin_comparo == CORRECTO) { // Si el usuario no se equivocó:
matirodriguez 1:f6ea213ed382 269 if(nivel == 25) { // y se llego al maximo de niveles:
matirodriguez 1:f6ea213ed382 270 fin_comparo = 0; // Vacio la variable
matirodriguez 1:f6ea213ed382 271 estado_maq_sec = ESPERO_USUARIO; // Cambio al estado de inicio
matirodriguez 1:f6ea213ed382 272 nivel = 0; // y reseteo todos los niveles
matirodriguez 1:f6ea213ed382 273 ledverde=0; //Prendo leds para indicar que gané
matirodriguez 1:f6ea213ed382 274 ledazul=0;
matirodriguez 1:f6ea213ed382 275 }
matirodriguez 1:f6ea213ed382 276 if(nivel < 25) { // Si en cambio faltan niveles:
matirodriguez 1:f6ea213ed382 277 fin_comparo = 0; // Vacio la variable
matirodriguez 1:f6ea213ed382 278 estado_maq_sec = MUESTRO_SECUENCIA; // Vuelvo al estado de mostrar
matirodriguez 1:f6ea213ed382 279 hab_mostrar = 1; // Habilito esa maquina
matirodriguez 1:f6ea213ed382 280 nivel++; // Y subo 1 nivel
matirodriguez 1:f6ea213ed382 281 }
matirodriguez 1:f6ea213ed382 282 }
matirodriguez 1:f6ea213ed382 283 if(fin_comparo == ERROR) {
matirodriguez 0:fd466ee999a6 284 fin_comparo = 0;
matirodriguez 1:f6ea213ed382 285 estado_maq_sec = ESPERO_USUARIO;
matirodriguez 1:f6ea213ed382 286 nivel = 0;
matirodriguez 1:f6ea213ed382 287 ledrojo=0; // Prendo el leds para indicar que se perdió
matirodriguez 1:f6ea213ed382 288 ledazul = 0;
matirodriguez 0:fd466ee999a6 289 }
matirodriguez 0:fd466ee999a6 290 break;
matirodriguez 0:fd466ee999a6 291 }
matirodriguez 0:fd466ee999a6 292 }
matirodriguez 0:fd466ee999a6 293
matirodriguez 0:fd466ee999a6 294 void MAQ_MUESTREO()
matirodriguez 0:fd466ee999a6 295 {
matirodriguez 0:fd466ee999a6 296
matirodriguez 0:fd466ee999a6 297 static int nivel_mostrado; // Variable que voy a tener para saber que nivel estoy mostrando en los leds ahora
matirodriguez 0:fd466ee999a6 298
matirodriguez 0:fd466ee999a6 299 switch(estado_maq_mues) { // Uso un switch para variar entre los estados de la maquina
matirodriguez 0:fd466ee999a6 300
matirodriguez 0:fd466ee999a6 301 case ESPERO_HAB:
matirodriguez 0:fd466ee999a6 302
matirodriguez 0:fd466ee999a6 303 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 304
matirodriguez 0:fd466ee999a6 305 if(hab_mostrar == 1) { // Cuando recibo la habilitacion de la otra maquina de estados:
matirodriguez 0:fd466ee999a6 306
matirodriguez 0:fd466ee999a6 307 estado_maq_mues = MUESTRO; // Cambio de estado y
matirodriguez 0:fd466ee999a6 308 tiempo_muestreo = 100; // Establezco el tiempo en 1 seg (0.01seg * 100 = 1seg)
matirodriguez 0:fd466ee999a6 309 hab_mostrar = 0;
matirodriguez 0:fd466ee999a6 310
matirodriguez 0:fd466ee999a6 311 }
matirodriguez 0:fd466ee999a6 312 break;
matirodriguez 0:fd466ee999a6 313
matirodriguez 0:fd466ee999a6 314 case MUESTRO:
matirodriguez 0:fd466ee999a6 315
matirodriguez 0:fd466ee999a6 316 switch(color[nivel_mostrado]) { // Muestro el color correspondiente al primer nivel, y voy cambiando cada 2 segundos
matirodriguez 0:fd466ee999a6 317 case ROJO:
matirodriguez 0:fd466ee999a6 318 ledrojo = 0;
matirodriguez 0:fd466ee999a6 319 break;
matirodriguez 0:fd466ee999a6 320
matirodriguez 0:fd466ee999a6 321 case VERDE:
matirodriguez 0:fd466ee999a6 322 ledverde = 0;
matirodriguez 0:fd466ee999a6 323 break;
matirodriguez 0:fd466ee999a6 324
matirodriguez 0:fd466ee999a6 325 case AZUL:
matirodriguez 0:fd466ee999a6 326 ledazul = 0;
matirodriguez 0:fd466ee999a6 327 break;
matirodriguez 0:fd466ee999a6 328 }
matirodriguez 0:fd466ee999a6 329
matirodriguez 0:fd466ee999a6 330 if(tiempo_muestreo == 0) { // Si pasó 1 segundo, reseteo el tiempo y cambio de estado
matirodriguez 0:fd466ee999a6 331 tiempo_muestreo = 100; // Establezco el tiempo en 1 segundo otra vez
matirodriguez 0:fd466ee999a6 332 estado_maq_mues = APAGO; // Cambio de estado
matirodriguez 0:fd466ee999a6 333 }
matirodriguez 0:fd466ee999a6 334 break;
matirodriguez 0:fd466ee999a6 335
matirodriguez 0:fd466ee999a6 336 case APAGO:
matirodriguez 0:fd466ee999a6 337
matirodriguez 0:fd466ee999a6 338 switch(color[nivel_mostrado]) { // Ahora voy a apagar el led correspondiente al nivel que se esta mostrando.
matirodriguez 0:fd466ee999a6 339 case ROJO:
matirodriguez 0:fd466ee999a6 340 ledrojo = 1;
matirodriguez 0:fd466ee999a6 341 break;
matirodriguez 0:fd466ee999a6 342 case VERDE:
matirodriguez 0:fd466ee999a6 343 ledverde = 1;
matirodriguez 0:fd466ee999a6 344 break;
matirodriguez 0:fd466ee999a6 345 case AZUL:
matirodriguez 0:fd466ee999a6 346 ledazul = 1;
matirodriguez 0:fd466ee999a6 347 break;
matirodriguez 0:fd466ee999a6 348 }
matirodriguez 1:f6ea213ed382 349 if(tiempo_muestreo == 0) { // Si paso el tiempo
matirodriguez 1:f6ea213ed382 350 if(nivel_mostrado == nivel) { // Y no faltan niveles
matirodriguez 1:f6ea213ed382 351 nivel_mostrado = 1; // Reseteo el nivel a mostrar
matirodriguez 1:f6ea213ed382 352 estado_maq_mues = ESPERO_HAB; // Vuelvo a esperar la habilitacion
matirodriguez 1:f6ea213ed382 353 fin_mostrar = 1; // Y marco que termino la maquina de estados
matirodriguez 0:fd466ee999a6 354 } else {
matirodriguez 1:f6ea213ed382 355 estado_maq_mues = MUESTRO; // Si en cambio faltan niveles, vuelvo a mostrar
matirodriguez 1:f6ea213ed382 356 nivel_mostrado++; // Y muestro el siguiente
matirodriguez 1:f6ea213ed382 357 tiempo_muestreo = 100; // Reseteo el tiempo (1 segundo)
matirodriguez 0:fd466ee999a6 358 }
matirodriguez 0:fd466ee999a6 359 }
matirodriguez 0:fd466ee999a6 360 break;
matirodriguez 0:fd466ee999a6 361 }
matirodriguez 0:fd466ee999a6 362 }
matirodriguez 0:fd466ee999a6 363
matirodriguez 0:fd466ee999a6 364 void MAQ_COMPARO()
matirodriguez 0:fd466ee999a6 365 {
matirodriguez 0:fd466ee999a6 366
matirodriguez 0:fd466ee999a6 367
matirodriguez 0:fd466ee999a6 368 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 1:f6ea213ed382 369 static int obtenido = NADA; // En esta variable voy a guardar lo que se ingrese para poder resetear la variable que me lo indica y no perder la informacion
matirodriguez 0:fd466ee999a6 370
matirodriguez 0:fd466ee999a6 371 switch(estado_maq_comp) {
matirodriguez 0:fd466ee999a6 372 case ESPERAR_HAB:
matirodriguez 0:fd466ee999a6 373
matirodriguez 0:fd466ee999a6 374 nivel_comparado = 1; // Establezco en este estado el primer nivel que se va a comparar (el 1)
matirodriguez 0:fd466ee999a6 375
matirodriguez 0:fd466ee999a6 376 if(hab_comparo == 1) { // Si recibí habilitacion desde la otra maquina, cambio de estado
matirodriguez 0:fd466ee999a6 377 estado_maq_comp = ESPERAR_USUARIO;
matirodriguez 0:fd466ee999a6 378 hab_comparo = 0;
matirodriguez 0:fd466ee999a6 379 }
matirodriguez 0:fd466ee999a6 380
matirodriguez 0:fd466ee999a6 381 break;
matirodriguez 0:fd466ee999a6 382
matirodriguez 0:fd466ee999a6 383 case ESPERAR_USUARIO:
matirodriguez 0:fd466ee999a6 384
matirodriguez 1:f6ea213ed382 385 if(ingreso != NADA) { // Si se ingresa algo en el TSI, lo guardo en la variable "obtenido"
matirodriguez 0:fd466ee999a6 386 obtenido = ingreso;
matirodriguez 1:f6ea213ed382 387 ingreso = NADA; // Reseteo la variable que guarda el valor del TSI
matirodriguez 0:fd466ee999a6 388 estado_maq_comp = COMPARO;
matirodriguez 0:fd466ee999a6 389 }
matirodriguez 0:fd466ee999a6 390
matirodriguez 0:fd466ee999a6 391 break;
matirodriguez 0:fd466ee999a6 392
matirodriguez 0:fd466ee999a6 393 case COMPARO: //Estado donde comparo el valor que se ingresó con el valor que corresponde
matirodriguez 0:fd466ee999a6 394
matirodriguez 1:f6ea213ed382 395 if(obtenido == color[nivel_comparado]) { // Si el resultado es igual a lo que deberia:
matirodriguez 1:f6ea213ed382 396
matirodriguez 1:f6ea213ed382 397 // Imprimo en pantalla el valor que se ingresó para comprobar
matirodriguez 0:fd466ee999a6 398 switch(color[nivel_comparado]) {
matirodriguez 0:fd466ee999a6 399 case ROJO:
matirodriguez 1:f6ea213ed382 400 printf("Rojo\n");
matirodriguez 0:fd466ee999a6 401 break;
matirodriguez 0:fd466ee999a6 402 case VERDE:
matirodriguez 0:fd466ee999a6 403
matirodriguez 1:f6ea213ed382 404 printf("Verde\n");
matirodriguez 0:fd466ee999a6 405 break;
matirodriguez 0:fd466ee999a6 406 case AZUL:
matirodriguez 1:f6ea213ed382 407 printf("Azul\n");
matirodriguez 0:fd466ee999a6 408 break;
matirodriguez 0:fd466ee999a6 409
matirodriguez 0:fd466ee999a6 410
matirodriguez 0:fd466ee999a6 411 }
matirodriguez 1:f6ea213ed382 412 obtenido = NADA; // Reseteo la variable
matirodriguez 1:f6ea213ed382 413 if(nivel_comparado <= nivel) { // Si quedan niveles
matirodriguez 0:fd466ee999a6 414 estado_maq_comp = ESPERAR_USUARIO; //Vuelvo al estado de esperar que el usuario ingrese algo y
matirodriguez 0:fd466ee999a6 415 nivel_comparado++; // Paso al siguiente nivel.
matirodriguez 0:fd466ee999a6 416 }
matirodriguez 1:f6ea213ed382 417 if(nivel_comparado > nivel) { // Si no quedan niveles
matirodriguez 0:fd466ee999a6 418 estado_maq_comp = ESPERAR_HAB; // Reseteo la maquina
matirodriguez 1:f6ea213ed382 419 fin_comparo = CORRECTO; // Indico que todo lo ingresado hasta este nivel es correcto
matirodriguez 0:fd466ee999a6 420 }
matirodriguez 1:f6ea213ed382 421 } else { // Si, en cambio, se ingreso algo incorrecto
matirodriguez 0:fd466ee999a6 422 estado_maq_comp = ESPERAR_HAB; // Reseteo la maquina
matirodriguez 1:f6ea213ed382 423 fin_comparo = ERROR; // Marco error
matirodriguez 1:f6ea213ed382 424 //Imprimo en pantalla que hubo error para comprobar
matirodriguez 0:fd466ee999a6 425 printf("ERROR");
matirodriguez 0:fd466ee999a6 426 printf("ERROR");
matirodriguez 0:fd466ee999a6 427 printf("ERROR");
matirodriguez 0:fd466ee999a6 428 printf("ERROR");
matirodriguez 0:fd466ee999a6 429 printf("ERROR\n");
matirodriguez 0:fd466ee999a6 430
matirodriguez 0:fd466ee999a6 431 }
matirodriguez 0:fd466ee999a6 432 break;
matirodriguez 0:fd466ee999a6 433 }
matirodriguez 0:fd466ee999a6 434 }
matirodriguez 0:fd466ee999a6 435
matirodriguez 0:fd466ee999a6 436 void genero_secuencia()
matirodriguez 0:fd466ee999a6 437 {
matirodriguez 0:fd466ee999a6 438 int auxiliar;
matirodriguez 0:fd466ee999a6 439
matirodriguez 0:fd466ee999a6 440 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 441
matirodriguez 0:fd466ee999a6 442 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 443
matirodriguez 0:fd466ee999a6 444
matirodriguez 0:fd466ee999a6 445 auxiliar = rand(); //Genero un valor aleatorio y lo guardo en mi variable auxiliar
matirodriguez 0:fd466ee999a6 446
matirodriguez 0:fd466ee999a6 447 // Dependiendo de cuanto resto me de al dividir por 3, asignare ese valor aleatorio con un color
matirodriguez 0:fd466ee999a6 448 if((auxiliar % 3) == 0) {
matirodriguez 0:fd466ee999a6 449 color[i] = ROJO;
matirodriguez 0:fd466ee999a6 450 }
matirodriguez 0:fd466ee999a6 451
matirodriguez 0:fd466ee999a6 452 if((auxiliar % 3 )== 1) {
matirodriguez 0:fd466ee999a6 453 color[i] = VERDE;
matirodriguez 0:fd466ee999a6 454 }
matirodriguez 0:fd466ee999a6 455
matirodriguez 0:fd466ee999a6 456 if((auxiliar % 3 )== 2) {
matirodriguez 0:fd466ee999a6 457 color[i] = AZUL;
matirodriguez 0:fd466ee999a6 458 }
matirodriguez 0:fd466ee999a6 459 switch(color[i]) {
matirodriguez 0:fd466ee999a6 460 case ROJO:
matirodriguez 0:fd466ee999a6 461 printf("%i ROJO;",i);
matirodriguez 0:fd466ee999a6 462 break;
matirodriguez 0:fd466ee999a6 463 case VERDE:
matirodriguez 0:fd466ee999a6 464 printf("%i VERDE;",i);
matirodriguez 0:fd466ee999a6 465 break;
matirodriguez 0:fd466ee999a6 466 case AZUL:
matirodriguez 0:fd466ee999a6 467 printf("%i AZUL;",i);
matirodriguez 0:fd466ee999a6 468 break;
matirodriguez 0:fd466ee999a6 469 }
matirodriguez 0:fd466ee999a6 470 }
matirodriguez 0:fd466ee999a6 471 printf("\n");
matirodriguez 0:fd466ee999a6 472 }