diff --git a/Trajet.c b/Trajet.c index 65365fa..cc98d2b 100644 --- a/Trajet.c +++ b/Trajet.c @@ -5,6 +5,7 @@ #include "Asser_Position.h" double Trajet_calcul_vitesse(double temps_s); +int Trajet_terminee(double abscisse); double abscisse; // Position entre 0 et 1 sur la trajectoire double position_mm; // Position en mm sur la trajectoire @@ -65,13 +66,30 @@ enum etat_trajet_t Trajet_avance(double pas_de_temps_s){ position_consigne=position; Asser_Position(position); - if(abscisse >= 1 ){ + if(Trajet_terminee(abscisse)){ trajet_etat = TRAJET_TERMINE; } return trajet_etat; } +/// @brief Savoir si un trajet est terminé est trivial sauf pour les courbes de Bézier +/// où les approximations font que l'abscisse peut ne pas atteindre 1. +/// @param abscisse : abscisse sur la trajectoire +/// @return 1 si le trajet est terminé, 0 sinon +int Trajet_terminee(double abscisse){ + if(trajet_trajectoire.type != TRAJECTOIRE_BEZIER){ + if(abscisse >= 1 ){ + return 1; + } + }else{ + if(abscisse >= 0.99 ){ + return 1; + } + } + return 0; +} + /// @brief Envoie la consigne de position calculée par le module trajet. Principalement pour le débug/réglage asservissement. struct position_t Trajet_get_consigne(){ return position_consigne;