TRABAJO PRACTICO - EJERCICIO 3 - TERMINADO

Dependencies:   mbed tsi_sensor

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;
        }
    }
}