![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
TRABAJO PRACTICO - EJERCICIO 3 - TERMINADO
main.cpp
- Committer:
- matirodriguez
- Date:
- 2019-05-29
- Revision:
- 0:ec6eb1da0a1c
- Child:
- 1:ad8aebd0e5c7
File content as of revision 0:ec6eb1da0a1c:
#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; } } }