![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
TRABAJO PRACTICO - EJERCICIO 3 - TERMINADO
Diff: main.cpp
- Revision:
- 0:ec6eb1da0a1c
- Child:
- 1:ad8aebd0e5c7
diff -r 000000000000 -r ec6eb1da0a1c main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed May 29 22:19:14 2019 +0000 @@ -0,0 +1,129 @@ +#include "mbed.h" +#include "tsi_sensor.h" + +#define ELEC0 9 +#define ELEC1 10 + +enum { NADA, + PULSADO + }; + +TSIAnalogSlider tsi(ELEC0, ELEC1, 40); + +// Prototipos de funciones de maquinas de estados + +void MAQ_lecturaTSI(); + +void LEER_TSI(); //Prototipo funcion de lectura del TSI +void pulsacion_TSI(); //Prototipo funcion para leer 1 solo valor del TSI cada 2.5mseg + + +void genero_secuencia(); // Funcion que utilizo para generar la secuencia aleatoria. + +//Variables que indican el estado de las maquinas (empiezo en estado de reset) + +int estado_maq_tsi = NADA; + +//Variables que habilitan maquinas de estados + +//Variables que me indican el fin de una maquina de estados + +//Variables que acumulan datos +int tiempo = 0; // Variable para contar el 1 segundo para el encendido y apagado de leds +int var_pulsacion = 25; // Variable para contar los 2.5mseg de la funcion pulsacion_TSI() + +int teclado = NADA; // Variable que contiene el valor del TSI en todo momento +int ingreso = NADA; // Variable que contiene el color presionado en el TSI, que se lee y luego es borrado + +Ticker lectura; // Ticker lectura del TSI +Ticker temporizador; // Ticker para contar 1 segundo en los leds +Ticker pulsacion; // Ticker para usar la funcion pulsacion_TSI() + +// DEFINO SALIDAS +DigitalOut ledrojo(LED_RED); +DigitalOut ledverde(LED_GREEN); + + +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); + +// Apago los leds al iniciar + ledrojo = 1; + ledverde= 1; + + while (true) { + +// Constantemente uso las maquinas de estados + + MAQ_lecturaTSI(); + if(ingreso != NADA) { + + ingreso = NADA; + if(ledverde == 0) { + + + + + + ledrojo=0; + } + if((ledverde==1)&&(ledrojo==1)) { + ledverde=0; + } + ledrojo=1; + } + + } +} + +void LEER_TSI() +{ + float auxiliar = 0; + auxiliar = tsi.readPercentage(); //Guardo de manera auxiliar el valor entre 0 y 1 del TSI + +// Asocio el valor del tsi numerico con un color, dividiendo en 4 valores posibles (0, <0.33, <0.66, <1) + + if(auxiliar >= 0) { + teclado = NADA; + } + if((auxiliar > 0.05)&&(auxiliar <= 1)) { + teclado = PULSADO; + } +} + +void pulsacion_TSI() +{ + if(var_pulsacion > 0) { + var_pulsacion--; + } +} + +void MAQ_lecturaTSI() +{ + if(var_pulsacion < 1) { // Si se llegaron a los 2.5ms: + var_pulsacion = 25; // Vuelvo a establecer 2.5ms para el proximo ciclo + switch(estado_maq_tsi) { + case NADA: + ingreso = NADA; // La variable ingreso, salvo en los casos especificos, siempre se encontrará en NADA + + // En vez de usar cadenas de if en las transiciones, utilizo un switch + if(teclado==PULSADO) { + estado_maq_tsi = PULSADO; + ingreso = PULSADO; + } + break; + + case PULSADO: + if(teclado == NADA) { + estado_maq_tsi = NADA; + } + break; + } + } +} \ No newline at end of file