Robot_tennis / Mbed 2 deprecated cerv0

Dependencies:   mbed

fonction.cpp

Committer:
terrier_julien
Date:
2022-06-09
Revision:
1:cfb7e4122e21
Parent:
0:c2a70ac44fd7

File content as of revision 1:cfb7e4122e21:

#include "mbed.h"
#include "autre.h"
#include "header.h"
float distance_laser[8] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
Timer temps_de_jeux;
Timer launch_time;
typedef enum {debut,chasse,ctourne_droite,ctourne_gauche,cvire_gauche,cvire_droite,cavance,vise,tire} type_statut;

static type_statut statut = debut;

void cerveau(void)
{
    float x;
if(temps_de_jeux.read() < 88)
{
switch (statut)
{
    case debut :
    init_moteur_propulsion();
    init_moteur_balle();
    avancer(1);
    prise_avant(0.5);
    if(distance_laser[2] < 0.05) statut = vise;
    break;
    
    case chasse :
    //priorité à droite
    prise_avant(0.5);
    vire_droite(1);
    //si la distance détécté par le laser est bon => case adaptée
    if (test_presence(1)) statut = cvire_gauche;
    else if (test_presence(2) && test_presence(3)) statut = cavance;
    else if (test_presence(4)) statut = cvire_droite;
    break;
    
    case cvire_gauche : //trourne fortement à gauche
    vire_gauche(1);
    if(test_presence(1)) statut = ctourne_gauche;
    break;
    
    case cvire_droite : //trourne fortement à droite
    vire_droite(1);
    if(test_presence(4)) statut = ctourne_droite;
    break;
    
    case cavance :
    avancer(1);
    if(!test_presence(2)) statut = ctourne_droite;
    else if(!test_presence(3)) statut = ctourne_gauche;
    else if(distance_laser[2] < 0.05) statut = vise;
    break;
    
    case ctourne_droite : //tourne un peu à droite
    tourner_droite(1);
    if(test_presence(3)) statut = cavance;
    else if(distance_laser[2] < 0.05) statut = vise;
    break;
    
    case ctourne_gauche : //tourne un peu à gauche
    tourner_gauche(1);
    if(test_presence(2)) statut = cavance;  
    else if(distance_laser[2] < 0.05) statut = vise;  
    break;
    
    case vise :
    stop();
    prise_avant(0);
    //calcule de math etc
    x = 0.5;
    //c'est calculé t'inquiète
    statut = tire;
    break;
    
    case tire :
    launch_time.reset();
    prise_arriere(x);
    if(launch_time.read() > 0.5 ) statut = chasse;
    break;
    }
} else 
{
    stop();
    //creve_ballon();
    }
}
 
 bool test_presence( int num)
 {
     //calcule_coord laser(distance_laser[num]);
     //if ((Xballe < 4000)|| (Xballe > 0) || (Yballe < 4000) || (Yballe > 0)) return 1;
     //else return 0;
     }