#include "Strategie.h" #include "Strategie_deplacement.h" #include "Trajet.h" #include "Evitement.h" #include "Geometrie.h" #include "VL53L8_2024.h" float distance_obstacle; enum etat_action_t Strategie_parcourir_trajet(struct trajectoire_t trajectoire, uint32_t step_ms, enum evitement_t evitement){ enum etat_action_t etat_action = ACTION_EN_COURS; enum etat_trajet_t etat_trajet; float angle_avancement; static bool trajet_inverse = false; static enum { PARCOURS_INIT, PARCOURS_AVANCE, } etat_parcourt=PARCOURS_INIT; switch (etat_parcourt){ case PARCOURS_INIT: Trajet_debut_trajectoire(trajectoire); etat_parcourt = PARCOURS_AVANCE; break; case PARCOURS_AVANCE: if(evitement != EVITEMENT_SANS_EVITEMENT){ angle_avancement = Trajet_get_orientation_avance(); distance_obstacle = VL53L8_get_old_min_distance(); Trajet_set_obstacle_mm(distance_obstacle); } if(Evitement_get_statu() == OBSTACLE_CONFIRME || Evitement_get_statu() == OBSTACLE_NON_CONFIRME){ switch(evitement){ case EVITEMENT_SANS_EVITEMENT: //printf("Evitement lors trajet EVITEMENT_SANS_EVITEMENT: ERREUR\n"); break; case EVITEMENT_PAUSE_DEVANT_OBSTACLE: // Rien à faire ici break; case EVITEMENT_ARRET_DEVANT_OBSTACLE: etat_parcourt = PARCOURS_INIT; return ACTION_ECHEC; case EVITEMENT_RETOUR_SI_OBSTABLE: trajet_inverse = !trajet_inverse; Trajet_inverse(); break; case EVITEMENT_CONTOURNEMENT: // TODO break; } } etat_trajet = Trajet_avance(step_ms/1000.); if(etat_trajet == TRAJET_TERMINE){ if(trajet_inverse){ etat_action = ACTION_ECHEC; }else{ etat_action = ACTION_TERMINEE; } etat_parcourt = PARCOURS_INIT; } break; } return etat_action; }