TRR2018 omar

Dependencies:   mbed

Fork of biniou by TRR 2018

stateMachines.h

Committer:
GaspardD
Date:
2018-09-12
Revision:
18:38504337d2fc
Parent:
17:8c465656eea4
Child:
19:771bf61be276

File content as of revision 18:38504337d2fc:

#include "mbed.h"
#include <stdint.h>

//#define DEBUG 3

#define DIERCTION_PERIOD 10000
#define DIRECTION_PULSE_MAX 2100
#define DIRECTION_PULSE_MIN 800
#define DIRECTION_PULSE_MIDDLE 1500

#define SPEED_PERIOD 20000
#define BRAKING_PWM 1350
#define MAX_PULSE_WIDTH_FOR_TACHY 1700
#define INITAL_PULSE_SPEED 1590

#define NB_ECHANTILLONS_IR 4
#define NB_ECHANTILLONS_LIDAR 4

#define LIDAR_STRENGTH_THRESOLD 200 //pour la gestion de la vitesse MAX (MAXSpeed_ST)
#define LIDAR_STRENGH_DELTA 50

#define IR_DEADZONE_U16_22cm 49677
#define IR_FAR_U16_105cm 11915

#define SPEED_DELTA_CMPS 30

//#define DLVV


typedef enum{
    ATTRACTIF_G,
    ATTRACTIF_D,
    EQUILIBRAGE_REPULSIF
}MUR_ST;

#ifdef DLVV
typedef enum{//uniquement activé pour dlvv, se rajoute au PID de murOutput
    FRONT_CLEAR,//pas d'obstacle droit devant
    FRONT_OBSTRUCTED//un obstacle à été detecté à moins de 20/30 cm tbd
}OBSTACLE_ST;
#endif

typedef enum{
    ARRET,
    LOADING_SECTION,
    RUNNING_SECTION
}SECTION_ST;

typedef enum{
    SPEED_MAX,//pas de mur, on va a fond
    SPEED_VARIABLE,//signal suffisement fort pour gérer la vitesse
    SPEED_LIMITED//nous somme dans la plage de distance ou la vitesse doit être limitée
}MAX_SPEED_ST;

typedef enum{
    UNDER_SPEED,
    OVER_SPEED,
    AT_SPEED,
    BRAKING
}THROTTLE_ST;


typedef struct s_section {
   int targetSpeed_cmps;
   int slowSpeed_cmps;//pour effectuer les virages... pour ne pas avoir d'a coups entre la vitesse variable et la vitesse limitée: brakingCoefficient = 30*((targetSpeed_cmps/slowSpeed_cmps)-1)
   int brakingCoefficient;
   int us_accel;
   int us_decel;
   int lidarWarningDist_cm;
   int lng_section_cm;
   int coef_p;
   int coef_i;
   int coef_d;
   s_section* nextSection;
}s_Section;

//*************** fonctions utilitaires ***************

void getTachySpeed();
uint16_t getDistMoy(uint16_t* tab, int size);
void it4cm();
void it_serial();

//*************** fonctions states machines ***************
//gestion de la direction quand la vue est dégagée
void mursInit(void);
void mursUpdate(void);
void mursOutput(void);

#ifdef DLVV
//gestion de la direction en mode course et de l'évitement en mode DLVV
void obstacleInit(void);
void obstacleUpdate(void);
void obstacleOutput(void);
#endif

//gestion du comportement en fn de l'avancement sur le parcours
void sectionInit(void);
void sectionUpdate(void);
void sectionOutput(void);

//gestion de la gesion de la vitesse max/rotation max des roues la rotation est plus importante que la vitesse :)
void maxSpeedInit(void);
void maxSpeedUpdate(void);
void maxSpeedOutput(void);

//gestion de l'allure en fonction des paramètres de la section
void throttleInit(void);
void throttleUpdate(void);
void throttleOutput(void);