Matias Rodriguez
/
TP1-EJERCICIO2
EJERCICIO SIMON: Axel Oropeza Matias Rodriguez
main.cpp@0:fd466ee999a6, 2019-05-22 (annotated)
- Committer:
- matirodriguez
- Date:
- Wed May 22 23:04:17 2019 +0000
- Revision:
- 0:fd466ee999a6
- Child:
- 1:f6ea213ed382
FUNCIONA
Who changed what in which revision?
User | Revision | Line number | New 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 | } |