TRABAJO PRACTICO - EJERCICIO 3 - TERMINADO

Dependencies:   mbed tsi_sensor

Revision:
0:ec6eb1da0a1c
Child:
1:ad8aebd0e5c7
--- /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