Hlimi Omar
/
biniou
TRR2018 omar
Fork of biniou by
stateMachines.h
- Committer:
- GaspardD
- Date:
- 2018-09-16
- Revision:
- 23:04d393220daa
- Parent:
- 22:26fc6e6f7a55
- Child:
- 24:698fefbbee00
File content as of revision 23:04d393220daa:
#include "mbed.h" #include <stdint.h> //#define DLVV #define SAMPLING//commenter pour désactiver #define DUMP_SAMPLIG_PERIOD 10000 #define DEBUG -1//-1 pour avoir uniquement la gestion de l'interruption bouton #define NB_INTEGRAL_SAMPLES 5 #define TACHY_CM 8 #define DIERCTION_PERIOD_MS 10000 #define DIRECTION_PULSE_MAX 2100 #define DIRECTION_PULSE_MIN 800 #define DIRECTION_PULSE_MIDDLE 1530 #define SPEED_PERIOD_US 20000 #define BRAKING_PULSE_US 1350 #define MAX_PULSE_WIDTH_FOR_TACHY_US 1850 #define INITAL_PULSE_SPEED_US 1590 #define ZERO_PULSE_SPEED_US 1500 #define COEF_CMPS_TO_PULSE 25 #define NB_ECHANTILLONS_IR 8 #define LIDAR_STRENGTH_THRESOLD 25 //pour la gestion de la vitesse MAX (MAXSpeed_ST) #define LIDAR_ERR 65535 #define IR_DEADZONE_U16_22cm 48000 #define IR_FAR_U16_105cm 12000 #define SPEED_DELTA_CMPS 30 #define CAPT_45_DROITE PC_2 #define CAPT_45_GAUCHE PC_0 #define CAPT_90_DROITE PA_1 #define CAPT_90_GAUCHE PC_1 #define CAPT_10_GAUCHE PB_0 #define CAPT_10_DROITE PC_3 #define CAPT_DEVANT PA_4 #define ODOMETRE PA_11 #ifdef SAMPLING #define TAILLE_SAMPLES 4000 typedef struct states { char murs_dlvv; char section; char maxSpeed; char throttle; }s_States; typedef struct sample { s_States states; int time; int16_t diffgd45; int16_t diffgd90; int16_t pwm_thro_us; int16_t pwm_dir_us; int16_t dist; int16_t distLidar; int16_t strLidar; } s_Sample; #endif 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_WARNING,//signal suffisement fort pour gérer la vitesse BLOCKED//nous somme dans la plage de distance ou la vitesse doit être limitée }MAX_SPEED_ST; typedef enum{ REGULATION_SPEED, AT_SPEED, BRAKING, STOPPED }THROTTLE_ST; typedef struct s_section { int targetSpeed_cmps;//supérieure a 328 int slowSpeed_cmps;//supérieure a 328; 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 coef_p_speed; 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(); void sampleLog(); //*************** 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);