AresENSEA-CDF2020 / Mbed 2 deprecated AresCDFMainCode

Dependencies:   mbed DRV8825

captUS.cpp

Committer:
Nanaud
Date:
2020-10-28
Revision:
24:be2b2be6907b
Parent:
23:a74135a0271d
Child:
25:869b1c1f51a7

File content as of revision 24:be2b2be6907b:

/* #include */
#include "pins.h"

/* #define */
#define DISTLIM 600
#define MAXMOY 3

/* Variables globales */
Timer TimUS;
Ticker TickUS_actu;

//const float DISTLIM = 600;

unsigned int us_high[6]= {0};
unsigned int us_low[6]= {0};
unsigned int us_diff[6]= {0};
bool us_verif[6]= {0};

unsigned int distt[6];
bool rebooted = 0;
bool wtt = 0;

int indix = 0;
unsigned int total[6] = {0};
unsigned int ttt[6] = {0};

void calculTotal()
{
    if(indix < MAXMOY) {
        for(int j=0; j<6 ; j++) {
            total[j]+=distt[j];
        }
        indix++;
    } else {
        for(int j=0; j<6 ; j++) {
            ttt[j]=total[j]/MAXMOY;
            total[j]=0;
        }

        /*
        pc.printf("ttt[1] = %d\n\r", ttt[0]);
        pc.printf("ttt[2] = %d\n\r", ttt[1]);
        pc.printf("ttt[3] = %d\n\r", ttt[2]);
        pc.printf("ttt[4] = %d\n\r", ttt[3]);
        pc.printf("ttt[5] = %d\n\r", ttt[4]);
        pc.printf("ttt[6] = %d\n\r", ttt[5]);
        pc.printf("\n\r");
        */

        indix=0;
    }
}

/*
void captUS_init()
{
    ::distance = new double(6); //équivalent au malloc()
    tps.reset();
    tps.start();
}
*/

void captUS_trig()
{
    convertToDistance();

    calculTotal();

    if((objRecule[indice]==0) && (fnc == 2)) {
        //if ((distt[5] >= DISTLIM) && (distt[0] >= DISTLIM)  && (distt[1] >= DISTLIM)) {
        //if (((distt[5] >= DISTLIM) && (distt[0] >= DISTLIM)  && (distt[1] >= DISTLIM)) /*|| ((distt[5] < 0) && (distt[0] < 0)  && (distt[1] < 0))*/) {
        if ((ttt[5] >= DISTLIM) && (ttt[0] >= DISTLIM)  && (ttt[1] >= DISTLIM)) {
            wtt = 1;
        }

        else {
            mot_dis();
            rebooted = 1;
            wtt=0;
        }
    }

    else if((objRecule[indice]==1) && (fnc == 2)) {
        //if ((distt[2] >= DISTLIM) && (distt[3] >= DISTLIM) && (distt[4] >= DISTLIM)) {
        //if (((distt[2] >= DISTLIM) && (distt[3] >= DISTLIM)  && (distt[4] >= DISTLIM)) /*|| ((distt[2] < 0) && (distt[3] < 0)  && (distt[4] < 0))*/) {
        if ((ttt[2] >= DISTLIM) && (ttt[3] >= DISTLIM)  && (ttt[4] >= DISTLIM)) {
            wtt=1;
        }

        else {
            mot_dis();
            rebooted = 1;
            wtt=0;
        }
    }

    /*
    pc.printf("US1 = %5.0lf uS\n\r", us_out[0]);
    pc.printf("US2 = %5.0lf uS\n\r", us_out[1]);
    //pc.printf("US3 = %5.0lf uS\n\r", us_out[2]);
    //pc.printf("US4 = %5.0lf uS\n\r", us_out[3]);
    //pc.printf("US5 = %5.0lf uS\n\r", us_out[4]);
    pc.printf("US6 = %5.0lf uS\n\r", us_out[5]);
    pc.printf("\n\r");
    */

    /*
    pc.printf("Dist1 = %5.0lf mm\n\r", ::distance[0]);
    pc.printf("Dist2 = %5.0lf mm\n\r", ::distance[1]);
    pc.printf("Dist3 = %5.0lf mm\n\r", ::distance[2]);
    pc.printf("Dist4 = %5.0lf mm\n\r", ::distance[3]);
    pc.printf("Dist5 = %5.0lf mm\n\r", ::distance[4]);
    pc.printf("Dist6 = %5.0lf mm\n\r", ::distance[5]);
    pc.printf("\n\r");
    */
    
    /*
    pc.printf("ttt[1] = %d\n\r", ttt[0]);
    pc.printf("ttt[2] = %d\n\r", ttt[1]);
    pc.printf("ttt[3] = %d\n\r", ttt[2]);
    pc.printf("ttt[4] = %d\n\r", ttt[3]);
    pc.printf("ttt[5] = %d\n\r", ttt[4]);
    pc.printf("ttt[6] = %d\n\r", ttt[5]);
    pc.printf("\n\r");
    */

    //calculTotal();

    TimUS.reset();
    trigger=1;
    wait(0.00002);
    trigger=0;
}

void echoRise1()
{
    if(us_verif[0] == 0) {
        us_high[0]=TimUS.read_us();
        us_verif[0] = 1;
    }
}

void echoFall1()
{
    if(us_verif[0] == 1) {
        us_low[0]=TimUS.read_us();
        us_diff[0]=us_low[0]-us_high[0];
        us_verif[0] = 0;
    }
}

void echoRise2()
{
    if(us_verif[1] == 0) {
        us_high[1]=TimUS.read_us();
        us_verif[1] = 1;
    }
}

void echoFall2()
{
    if(us_verif[1] == 1) {
        us_low[1]=TimUS.read_us();
        us_diff[1]=us_low[1]-us_high[1];
        us_verif[1] = 0;
    }
}

void echoRise3()
{
    if(us_verif[2] == 0) {
        us_high[2]=TimUS.read_us();
        us_verif[2] = 1;
    }
}

void echoFall3()
{
    if(us_verif[2] == 1) {
        us_low[2]=TimUS.read_us();
        us_diff[2]=us_low[2]-us_high[2];
        us_verif[2] = 0;
    }
}

void echoRise4()
{
    if(us_verif[3] == 0) {
        us_high[3]=TimUS.read_us();
        us_verif[3] = 1;
    }
}

void echoFall4()
{
    if(us_verif[3] == 1) {
        us_low[3]=TimUS.read_us();
        us_diff[3]=us_low[3]-us_high[3];
        us_verif[3] = 0;
    }
}

void echoRise5()
{
    if(us_verif[4] == 0) {
        us_high[4]=TimUS.read_us();
        us_verif[4] = 1;
    }
}

void echoFall5()
{
    if(us_verif[4] == 1) {
        us_low[4]=TimUS.read_us();
        us_diff[4]=us_low[4]-us_high[4];
        us_verif[4] = 0;
    }
}

void echoRise6()
{
    if(us_verif[5] == 0) {
        us_high[5]=TimUS.read_us();
        us_verif[5] = 1;
    }
}

void echoFall6()
{
    if(us_verif[5] == 1) {
        us_low[5]=TimUS.read_us();
        us_diff[5]=us_low[5]-us_high[5];
        us_verif[5] = 0;
    }
}


void convertToDistance()
{
    /**************************************
     * Nous convertisons grâce au valeur  *
     * qui sont retournées par echoRiseX  *
     * et echoFallx                       *
     **************************************/

    for(int i = 0; i<6; i++) {
        distt[i] = (int) ((us_diff[i]*340)/1000); //conversion en distance(mm)
    }

    /****************************************
     * nous retournons l'adresse du tableau *
     ****************************************/
    //return ::distance;
}