TP1_EJER3

Dependencies:   mbed tsi_sensor

main.cpp

Committer:
Charin
Date:
2019-05-22
Revision:
0:256d00799c21
Child:
1:5b92fb2cd769

File content as of revision 0:256d00799c21:

#include "mbed.h"
#include "tsi_sensor.h"

/* This defines will be replaced by PinNames soon */
#if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
#define ELEC0 9
#define ELEC1 10
#elif defined (TARGET_KL05Z)
#define ELEC0 9
#define ELEC1 8
#else
#error TARGET NOT DEFINED
#endif
Ticker tiempo;

enum maquina_estado_general {INICIO, CABLE1, CABLE2, CABLE3, CABLE4, WIN, LOOSER};
maquina_estado_general maquina_general;

PwmOut display(PTA2);
TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
AnalogIn noise (PTC1);
DigitalIn cable_0 (PTB0);
DigitalIn cable_1 (PTB1);
DigitalIn cable_2 (PTB2);
DigitalIn cable_3 (PTC12);
DigitalOut verde (LED_GREEN);
DigitalOut rojo (LED_RED);

int vector_secuencia [4];
int vector_orden_cables [4] = {-1, -1, -1, -1};
int ccero = 0;
int cuno = 0;
int cdos = 0;
int ctres = 0;
int sumador = 0;

void secuencia();
void maquina_general_sec ();
//void maquina_display ();
void maquina_orden_cables ();
void suma ();
int cablesDesconectados(int n);

int main(void)
{

    cable_0.mode (PullUp);
    cable_1.mode (PullUp);
    cable_2.mode (PullUp);
    cable_3.mode (PullUp);


    srand (int(noise * 10000));

    secuencia ();
    verde = 1;
    rojo = 1;

    while (true) {
        maquina_general_sec ();
        //maquina_display ();
        maquina_orden_cables ();
        printf("%d %d %d %d", vector_orden_cables[0], vector_orden_cables[1], vector_orden_cables[2], vector_orden_cables[3]);
    }
}

void suma ()
{
    sumador++;
}

void secuencia ()
{
    vector_secuencia [0] = rand () %4;
    for (int i = 1; i < 4; i++) {
        int randomm = rand () %4;
        if (vector_secuencia [i - 1] != randomm)
            vector_secuencia [i] = randomm;
        else
            i--;
    }

}


void maquina_general_sec ()
{
    switch (maquina_general) {

        default:
            maquina_general = INICIO;
            break;

        case INICIO:
            if (tsi.readPercentage() > 0.5){
                maquina_general = CABLE1;
                verde = 0;
            }
            else
                maquina_general = INICIO;
            break;

        case CABLE1:
            verde = 1;
            if (vector_secuencia [0] == vector_orden_cables [0] && vector_orden_cables [0] != -1) {
                maquina_general = CABLE2;
            }
            else {
                maquina_general = CABLE1;
            }
            if (vector_secuencia [0] != vector_orden_cables [0] && vector_orden_cables [0] != -1) {
                maquina_general = LOOSER;
            }

            break;

        case CABLE2:
            rojo = 0;
            if (vector_secuencia [1] == vector_orden_cables [1] && vector_orden_cables [1] != -1) {
                maquina_general = CABLE3;
                tiempo.attach (&suma, 1);
            }
            else {
                maquina_general = CABLE2;
            }
            if (vector_secuencia [1] != vector_orden_cables [1] && vector_orden_cables [1] != -1) {
                maquina_general = LOOSER;
            }

            break;

        case CABLE3:
            rojo = 1;
            if (vector_secuencia [2] == vector_orden_cables [2] && vector_orden_cables [2] != -1) {
                maquina_general = CABLE4;
                tiempo.attach (&suma, 1);
            }
            else {
                maquina_general = CABLE3;
            }
            if (vector_secuencia [2] != vector_orden_cables [2] && vector_orden_cables [2] != -1) {
                maquina_general = LOOSER;
            }
            break;

        case CABLE4:
            rojo = 0;
            if (vector_secuencia [3] == vector_orden_cables [3] && vector_orden_cables [3] != -1) {
                maquina_general = WIN;
            }
            else {
                maquina_general = CABLE4;
            }
            if (vector_secuencia [3] != vector_orden_cables [3] && vector_orden_cables [3] != -1) {
                maquina_general = LOOSER;
            }
            break;

        case WIN:
            verde = 0;
            break;
        case LOOSER:
            verde = 0;
            rojo = 0;
            break;

    }
}

void maquina_orden_cables ()
{
    static int a = 0;

    if (cable_0 != 0 && cablesDesconectados(0) == 0) {
        ccero = 0;
        vector_orden_cables [a] = ccero;
        a++;
        printf ("vector orden cables [%d] = 0", &a);

    }
    if (cable_1 != 0 && cablesDesconectados(1) == 0) {
        cuno = 1;
        vector_orden_cables [a] = cuno;
        a++;
        printf ("vector orden cables [%d] = 1", &a);

    }
    if (cable_2 != 0 && cablesDesconectados(2) == 0) {
        cdos = 2;
        vector_orden_cables [a] = cdos;
        a++;
        printf ("vector orden cables [%d] = 2", &a);
    }
    if (cable_3 != 0 && cablesDesconectados(3) != 0) {
        ctres = 3;
        vector_orden_cables [a] = ctres;
        a++;
        printf ("vector orden cables [%d] = 3", &a);
    }
}

int cablesDesconectados(int n)
{

    for(int j = 0; j < 4; j++) {
        if(vector_orden_cables[j] == n)
            return 1;
    }
    return 0;
}