Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 2:90667b428ce6, committed 2019-06-08
- Comitter:
- matirodriguez
- Date:
- Sat Jun 08 15:22:16 2019 +0000
- Parent:
- 1:f6ea213ed382
- Commit message:
- Ejercicio "SIMON" terminado
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed May 22 23:40:43 2019 +0000
+++ b/main.cpp Sat Jun 08 15:22:16 2019 +0000
@@ -13,7 +13,6 @@
VERDE,
AZUL
};
-
/* Defino los nombres de los estados como
numeros enteros con la funcion "enum{}"
*/
@@ -23,19 +22,19 @@
MUESTRO_SECUENCIA,
COMPARO_SECUENCIA
};
-
+
//Maquina "MAQ_MUESTREO()"
enum {ESPERO_HAB,
MUESTRO,
APAGO
};
-
+
//Maquina "MAQ_COMPARO()"
enum {ESPERAR_HAB,
ESPERAR_USUARIO,
COMPARO
};
-
+
#define ERROR 15
#define CORRECTO 24
@@ -55,6 +54,10 @@
void genero_secuencia(); // Funcion que utilizo para generar la secuencia aleatoria.
+void apago_leds();
+
+void cambio_estado();
+
//Variables que indican el estado de las maquinas (empiezo en estado de reset)
int estado_maq_sec = ESPERO_USUARIO;
int estado_maq_mues = ESPERO_HAB;
@@ -83,6 +86,9 @@
Ticker temporizador; // Ticker para contar 1 segundo en los leds
Ticker pulsacion; // Ticker para usar la funcion pulsacion_TSI()
+Timeout apago;
+Timeout estado; // Una pequeña demora que agrego entre que comparo y muestro los niveles del juego
+
// DEFINO SALIDAS
DigitalOut ledrojo(LED_RED);
DigitalOut ledverde(LED_GREEN);
@@ -90,14 +96,13 @@
AnalogIn noise(PTB0); // Entrada que usaré para generar la secuencia aleatoria con el ruido que me genere
-
int main(void)
{
// Uno las funciones con el ticker correspondiente
- lectura.attach(LEER_TSI,0.1);
- pulsacion.attach(pulsacion_TSI,0.001);
- temporizador.attach(LED_1SEG,0.01);
+ lectura.attach(&LEER_TSI,0.1);
+ pulsacion.attach(&pulsacion_TSI,0.001);
+ temporizador.attach(&LED_1SEG,0.01);
// Apago los leds al iniciar
ledrojo = 1;
@@ -119,6 +124,12 @@
}
}
+void apago_leds(){
+ ledrojo=1;
+ ledverde=1;
+ ledazul=1;
+}
+
void LEER_TSI()
{
float auxiliar = 0;
@@ -130,15 +141,15 @@
color_teclado = NADA;
}
- if((auxiliar > 0)&&(auxiliar < 0.33)) {
+ if((auxiliar > 0.05)&&(auxiliar < 0.30)) {
color_teclado = ROJO;
}
- if((auxiliar >= 0.33)&&(auxiliar <= 0.66)) {
+ if((auxiliar >= 0.38)&&(auxiliar <= 0.60)) {
color_teclado = VERDE;
}
- if((auxiliar > 0.66)&&(auxiliar <= 1)) {
+ if((auxiliar > 0.68)&&(auxiliar <= 1)) {
color_teclado = AZUL;
}
}
@@ -316,14 +327,20 @@
switch(color[nivel_mostrado]) { // Muestro el color correspondiente al primer nivel, y voy cambiando cada 2 segundos
case ROJO:
ledrojo = 0;
+ ledverde=1;
+ ledazul=1;
break;
case VERDE:
ledverde = 0;
+ ledazul=1;
+ ledrojo=1;
break;
case AZUL:
ledazul = 0;
+ ledrojo=1;
+ ledverde=1;
break;
}
@@ -398,6 +415,38 @@
switch(color[nivel_comparado]) {
case ROJO:
printf("Rojo\n");
+ ledrojo=0;
+ break;
+ case VERDE:
+ printf("Verde\n");
+ ledverde=0;
+ break;
+ case AZUL:
+ printf("Azul\n");
+ ledazul=0;
+ break;
+ }
+ apago.attach(&apago_leds,0.5);
+ obtenido = NADA; // Reseteo la variable
+ if(nivel_comparado <= nivel) { // Si quedan niveles
+
+ estado_maq_comp = ESPERAR_USUARIO; //Vuelvo al estado de esperar que el usuario ingrese algo y
+ nivel_comparado++; // Paso al siguiente nivel.
+ }
+ if(nivel_comparado > nivel) { // Si no quedan niveles
+ estado_maq_comp = ESPERAR_HAB; // Reseteo la maquina
+ estado.attach(&cambio_estado,1); // Indico que todo lo ingresado hasta este nivel es correcto
+ }
+ } else { // Si, en cambio, se ingreso algo incorrecto
+ estado_maq_comp = ESPERAR_HAB; // Reseteo la maquina
+ fin_comparo = ERROR; // Marco error
+ //Imprimo en pantalla que hubo error para comprobar
+ printf("ERROR\n");
+
+ // Imprimo en pantalla el valor que se ingresó para comprobar
+ switch(color[nivel_comparado]) {
+ case ROJO:
+ printf("Rojo\n");
break;
case VERDE:
@@ -409,24 +458,6 @@
}
- obtenido = NADA; // Reseteo la variable
- if(nivel_comparado <= nivel) { // Si quedan niveles
- estado_maq_comp = ESPERAR_USUARIO; //Vuelvo al estado de esperar que el usuario ingrese algo y
- nivel_comparado++; // Paso al siguiente nivel.
- }
- if(nivel_comparado > nivel) { // Si no quedan niveles
- estado_maq_comp = ESPERAR_HAB; // Reseteo la maquina
- fin_comparo = CORRECTO; // Indico que todo lo ingresado hasta este nivel es correcto
- }
- } else { // Si, en cambio, se ingreso algo incorrecto
- estado_maq_comp = ESPERAR_HAB; // Reseteo la maquina
- fin_comparo = ERROR; // Marco error
- //Imprimo en pantalla que hubo error para comprobar
- printf("ERROR");
- printf("ERROR");
- printf("ERROR");
- printf("ERROR");
- printf("ERROR\n");
}
break;
@@ -469,4 +500,8 @@
}
}
printf("\n");
+}
+
+void cambio_estado(){
+ fin_comparo = CORRECTO;
}
\ No newline at end of file