TRABAJO PRACTICO - EJERCICIO 3 - TERMINADO

Dependencies:   mbed tsi_sensor

Committer:
matirodriguez
Date:
Wed May 29 22:19:14 2019 +0000
Revision:
0:ec6eb1da0a1c
Child:
1:ad8aebd0e5c7
Funciona el TSI. La variable "ingreso es aquella que se borra cada vez que se lee".

Who changed what in which revision?

UserRevisionLine numberNew contents of line
matirodriguez 0:ec6eb1da0a1c 1 #include "mbed.h"
matirodriguez 0:ec6eb1da0a1c 2 #include "tsi_sensor.h"
matirodriguez 0:ec6eb1da0a1c 3
matirodriguez 0:ec6eb1da0a1c 4 #define ELEC0 9
matirodriguez 0:ec6eb1da0a1c 5 #define ELEC1 10
matirodriguez 0:ec6eb1da0a1c 6
matirodriguez 0:ec6eb1da0a1c 7 enum { NADA,
matirodriguez 0:ec6eb1da0a1c 8 PULSADO
matirodriguez 0:ec6eb1da0a1c 9 };
matirodriguez 0:ec6eb1da0a1c 10
matirodriguez 0:ec6eb1da0a1c 11 TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
matirodriguez 0:ec6eb1da0a1c 12
matirodriguez 0:ec6eb1da0a1c 13 // Prototipos de funciones de maquinas de estados
matirodriguez 0:ec6eb1da0a1c 14
matirodriguez 0:ec6eb1da0a1c 15 void MAQ_lecturaTSI();
matirodriguez 0:ec6eb1da0a1c 16
matirodriguez 0:ec6eb1da0a1c 17 void LEER_TSI(); //Prototipo funcion de lectura del TSI
matirodriguez 0:ec6eb1da0a1c 18 void pulsacion_TSI(); //Prototipo funcion para leer 1 solo valor del TSI cada 2.5mseg
matirodriguez 0:ec6eb1da0a1c 19
matirodriguez 0:ec6eb1da0a1c 20
matirodriguez 0:ec6eb1da0a1c 21 void genero_secuencia(); // Funcion que utilizo para generar la secuencia aleatoria.
matirodriguez 0:ec6eb1da0a1c 22
matirodriguez 0:ec6eb1da0a1c 23 //Variables que indican el estado de las maquinas (empiezo en estado de reset)
matirodriguez 0:ec6eb1da0a1c 24
matirodriguez 0:ec6eb1da0a1c 25 int estado_maq_tsi = NADA;
matirodriguez 0:ec6eb1da0a1c 26
matirodriguez 0:ec6eb1da0a1c 27 //Variables que habilitan maquinas de estados
matirodriguez 0:ec6eb1da0a1c 28
matirodriguez 0:ec6eb1da0a1c 29 //Variables que me indican el fin de una maquina de estados
matirodriguez 0:ec6eb1da0a1c 30
matirodriguez 0:ec6eb1da0a1c 31 //Variables que acumulan datos
matirodriguez 0:ec6eb1da0a1c 32 int tiempo = 0; // Variable para contar el 1 segundo para el encendido y apagado de leds
matirodriguez 0:ec6eb1da0a1c 33 int var_pulsacion = 25; // Variable para contar los 2.5mseg de la funcion pulsacion_TSI()
matirodriguez 0:ec6eb1da0a1c 34
matirodriguez 0:ec6eb1da0a1c 35 int teclado = NADA; // Variable que contiene el valor del TSI en todo momento
matirodriguez 0:ec6eb1da0a1c 36 int ingreso = NADA; // Variable que contiene el color presionado en el TSI, que se lee y luego es borrado
matirodriguez 0:ec6eb1da0a1c 37
matirodriguez 0:ec6eb1da0a1c 38 Ticker lectura; // Ticker lectura del TSI
matirodriguez 0:ec6eb1da0a1c 39 Ticker temporizador; // Ticker para contar 1 segundo en los leds
matirodriguez 0:ec6eb1da0a1c 40 Ticker pulsacion; // Ticker para usar la funcion pulsacion_TSI()
matirodriguez 0:ec6eb1da0a1c 41
matirodriguez 0:ec6eb1da0a1c 42 // DEFINO SALIDAS
matirodriguez 0:ec6eb1da0a1c 43 DigitalOut ledrojo(LED_RED);
matirodriguez 0:ec6eb1da0a1c 44 DigitalOut ledverde(LED_GREEN);
matirodriguez 0:ec6eb1da0a1c 45
matirodriguez 0:ec6eb1da0a1c 46
matirodriguez 0:ec6eb1da0a1c 47 AnalogIn noise(PTB0); // Entrada que usaré para generar la secuencia aleatoria con el ruido que me genere
matirodriguez 0:ec6eb1da0a1c 48
matirodriguez 0:ec6eb1da0a1c 49 int main(void)
matirodriguez 0:ec6eb1da0a1c 50 {
matirodriguez 0:ec6eb1da0a1c 51
matirodriguez 0:ec6eb1da0a1c 52 // Uno las funciones con el ticker correspondiente
matirodriguez 0:ec6eb1da0a1c 53 lectura.attach(&LEER_TSI,0.1);
matirodriguez 0:ec6eb1da0a1c 54 pulsacion.attach(&pulsacion_TSI,0.001);
matirodriguez 0:ec6eb1da0a1c 55
matirodriguez 0:ec6eb1da0a1c 56 // Apago los leds al iniciar
matirodriguez 0:ec6eb1da0a1c 57 ledrojo = 1;
matirodriguez 0:ec6eb1da0a1c 58 ledverde= 1;
matirodriguez 0:ec6eb1da0a1c 59
matirodriguez 0:ec6eb1da0a1c 60 while (true) {
matirodriguez 0:ec6eb1da0a1c 61
matirodriguez 0:ec6eb1da0a1c 62 // Constantemente uso las maquinas de estados
matirodriguez 0:ec6eb1da0a1c 63
matirodriguez 0:ec6eb1da0a1c 64 MAQ_lecturaTSI();
matirodriguez 0:ec6eb1da0a1c 65 if(ingreso != NADA) {
matirodriguez 0:ec6eb1da0a1c 66
matirodriguez 0:ec6eb1da0a1c 67 ingreso = NADA;
matirodriguez 0:ec6eb1da0a1c 68 if(ledverde == 0) {
matirodriguez 0:ec6eb1da0a1c 69
matirodriguez 0:ec6eb1da0a1c 70
matirodriguez 0:ec6eb1da0a1c 71
matirodriguez 0:ec6eb1da0a1c 72
matirodriguez 0:ec6eb1da0a1c 73
matirodriguez 0:ec6eb1da0a1c 74 ledrojo=0;
matirodriguez 0:ec6eb1da0a1c 75 }
matirodriguez 0:ec6eb1da0a1c 76 if((ledverde==1)&&(ledrojo==1)) {
matirodriguez 0:ec6eb1da0a1c 77 ledverde=0;
matirodriguez 0:ec6eb1da0a1c 78 }
matirodriguez 0:ec6eb1da0a1c 79 ledrojo=1;
matirodriguez 0:ec6eb1da0a1c 80 }
matirodriguez 0:ec6eb1da0a1c 81
matirodriguez 0:ec6eb1da0a1c 82 }
matirodriguez 0:ec6eb1da0a1c 83 }
matirodriguez 0:ec6eb1da0a1c 84
matirodriguez 0:ec6eb1da0a1c 85 void LEER_TSI()
matirodriguez 0:ec6eb1da0a1c 86 {
matirodriguez 0:ec6eb1da0a1c 87 float auxiliar = 0;
matirodriguez 0:ec6eb1da0a1c 88 auxiliar = tsi.readPercentage(); //Guardo de manera auxiliar el valor entre 0 y 1 del TSI
matirodriguez 0:ec6eb1da0a1c 89
matirodriguez 0:ec6eb1da0a1c 90 // Asocio el valor del tsi numerico con un color, dividiendo en 4 valores posibles (0, <0.33, <0.66, <1)
matirodriguez 0:ec6eb1da0a1c 91
matirodriguez 0:ec6eb1da0a1c 92 if(auxiliar >= 0) {
matirodriguez 0:ec6eb1da0a1c 93 teclado = NADA;
matirodriguez 0:ec6eb1da0a1c 94 }
matirodriguez 0:ec6eb1da0a1c 95 if((auxiliar > 0.05)&&(auxiliar <= 1)) {
matirodriguez 0:ec6eb1da0a1c 96 teclado = PULSADO;
matirodriguez 0:ec6eb1da0a1c 97 }
matirodriguez 0:ec6eb1da0a1c 98 }
matirodriguez 0:ec6eb1da0a1c 99
matirodriguez 0:ec6eb1da0a1c 100 void pulsacion_TSI()
matirodriguez 0:ec6eb1da0a1c 101 {
matirodriguez 0:ec6eb1da0a1c 102 if(var_pulsacion > 0) {
matirodriguez 0:ec6eb1da0a1c 103 var_pulsacion--;
matirodriguez 0:ec6eb1da0a1c 104 }
matirodriguez 0:ec6eb1da0a1c 105 }
matirodriguez 0:ec6eb1da0a1c 106
matirodriguez 0:ec6eb1da0a1c 107 void MAQ_lecturaTSI()
matirodriguez 0:ec6eb1da0a1c 108 {
matirodriguez 0:ec6eb1da0a1c 109 if(var_pulsacion < 1) { // Si se llegaron a los 2.5ms:
matirodriguez 0:ec6eb1da0a1c 110 var_pulsacion = 25; // Vuelvo a establecer 2.5ms para el proximo ciclo
matirodriguez 0:ec6eb1da0a1c 111 switch(estado_maq_tsi) {
matirodriguez 0:ec6eb1da0a1c 112 case NADA:
matirodriguez 0:ec6eb1da0a1c 113 ingreso = NADA; // La variable ingreso, salvo en los casos especificos, siempre se encontrará en NADA
matirodriguez 0:ec6eb1da0a1c 114
matirodriguez 0:ec6eb1da0a1c 115 // En vez de usar cadenas de if en las transiciones, utilizo un switch
matirodriguez 0:ec6eb1da0a1c 116 if(teclado==PULSADO) {
matirodriguez 0:ec6eb1da0a1c 117 estado_maq_tsi = PULSADO;
matirodriguez 0:ec6eb1da0a1c 118 ingreso = PULSADO;
matirodriguez 0:ec6eb1da0a1c 119 }
matirodriguez 0:ec6eb1da0a1c 120 break;
matirodriguez 0:ec6eb1da0a1c 121
matirodriguez 0:ec6eb1da0a1c 122 case PULSADO:
matirodriguez 0:ec6eb1da0a1c 123 if(teclado == NADA) {
matirodriguez 0:ec6eb1da0a1c 124 estado_maq_tsi = NADA;
matirodriguez 0:ec6eb1da0a1c 125 }
matirodriguez 0:ec6eb1da0a1c 126 break;
matirodriguez 0:ec6eb1da0a1c 127 }
matirodriguez 0:ec6eb1da0a1c 128 }
matirodriguez 0:ec6eb1da0a1c 129 }