![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
TRABAJO PRACTICO - EJERCICIO 3 - TERMINADO
main.cpp@0:ec6eb1da0a1c, 2019-05-29 (annotated)
- 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?
User | Revision | Line number | New 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 | } |