diff --git a/Readme.md b/Readme.md index cc38e36..73c96fd 100644 --- a/Readme.md +++ b/Readme.md @@ -132,6 +132,14 @@ Les adresses en **gras** sont celles pour lesquelles des `#define` existent qui | 0x57 | RW | Flottant 32 bits | Angle fin rad | | 0x58 | RW | Flottant 32 bits | Angle fin rad | | 0x59 | RW | Flottant 32 bits | Angle fin rad | +| **0x5A** | RW | Flottant 32 bits | Vitesse max trajectoire | +| 0x5B | RW | Flottant 32 bits | Vitesse max trajectoire | +| 0x5C | RW | Flottant 32 bits | Vitesse max trajectoire | +| 0x5D | RW | Flottant 32 bits | Vitesse max trajectoire | +| 0x5E | RW | Flottant 32 bits | Acceleration trajectoire | +| 0x5F | RW | Flottant 32 bits | Acceleration trajectoire | +| 0x60 | RW | Flottant 32 bits | Acceleration trajectoire | +| 0x61 | RW | Flottant 32 bits | Acceleration trajectoire | | **0x80** | R | flottant 32 bits | Position X en mm | | 0x81 | R | flottant 32 bits | Position X en mm | | 0x82 | R | flottant 32 bits | Position X en mm | diff --git a/Trajet.c b/Trajet.c index 1abfee1..ddd111f 100644 --- a/Trajet.c +++ b/Trajet.c @@ -12,7 +12,7 @@ int Trajet_terminee(float abscisse); float abscisse; // Position entre 0 et 1 sur la trajectoire float position_mm; // Position en mm sur la trajectoire float vitesse_mm_s; -float vitesse_max_trajet_mm_s=500; +float vitesse_max_trajet_mm_s; float acceleration_mm_ss; const float acceleration_mm_ss_obstacle = 500; struct trajectoire_t trajet_trajectoire; @@ -24,7 +24,7 @@ const float distance_pas_obstacle = 2000; float vitesse_max_contrainte_obstacle; -/// @brief Initialise le module Trajet. A appeler en phase d'initilisation +/// @brief Initialise le module Trajet. A appeler en phase d'initialisation void Trajet_init(int id){ Temps_init(); AsserMoteur_Init(id); @@ -90,7 +90,7 @@ enum etat_trajet_t Trajet_avance(float pas_de_temps_s){ void Trajet_stop(float pas_de_temps_s){ vitesse_mm_s = 0; - Trajet_avance(0); + Trajet_avance(pas_de_temps_s); } /// @brief Savoir si un trajet est terminé est trivial sauf pour les courbes de Bézier diff --git a/main.c b/main.c index 3d7c3cd..4d4aac7 100644 --- a/main.c +++ b/main.c @@ -118,6 +118,7 @@ void main(void) enum etat_trajet_t etat_trajet=TRAJET_EN_COURS; struct trajectoire_t trajectoire; uint8_t mode=0; + Trajet_config(TRAJECT_CONFIG_STD); while(1){ @@ -151,6 +152,7 @@ void main(void) mise_a_jour_vitesse_roues = false; mise_a_jour_vitesse_robot = false; mise_a_jour_trajectoire = false; + mise_a_jour_config_trajet = false; // Copie des données dans la mémoire d'échange // Et actualisation des variables "mise_a_jour_..." @@ -202,7 +204,14 @@ void main(void) mode = 4; uint8_t etat_action = ACTION_EN_COURS; mise_données_dans_échange((uint8_t*) &(etat_action), sizeof(etat_action), REG_PROPULSION_ETAT_TRAJET); - Trajet_config(200, 100); + } + + if(mise_a_jour_config_trajet){ + struct msg_propulsion_config_trajet_t msg_propulsion_config_trajet; + get_données_reçues((uint8_t *) &msg_propulsion_config_trajet, sizeof(msg_propulsion_config_trajet), REG_PROPULSION_CONFIG_TRAJET); + printf("Trajet config: %.0f %.0f\n",msg_propulsion_config_trajet.vitesse_mm_s, msg_propulsion_config_trajet.acceleration_mm_ss); + + Trajet_config(msg_propulsion_config_trajet.vitesse_mm_s, msg_propulsion_config_trajet.acceleration_mm_ss); } } diff --git a/messagerie_applicative.c b/messagerie_applicative.c index 5c34522..6c564a7 100644 --- a/messagerie_applicative.c +++ b/messagerie_applicative.c @@ -11,6 +11,7 @@ bool mise_a_jour_pwm = false; bool mise_a_jour_vitesse_roues = false; bool mise_a_jour_vitesse_robot = false; bool mise_a_jour_trajectoire = false; +bool mise_a_jour_config_trajet = false; void get_données_reçues(uint8_t * dst, unsigned int taille, unsigned int registre){ memcpy(dst, &(memoire_echange[registre]), taille); @@ -21,28 +22,31 @@ void mise_données_dans_échange(uint8_t * source, unsigned int taille, unsigned } void écriture_données(unsigned int adresse, uint8_t donnée){ - if( adresse <= 11){ + if( adresse < 11){ // 0x0B // Position du robot mise_a_jour_position = true; - }else if(adresse <= 12){ + }else if(adresse <= 12){ // 0x0C // Read only - }else if(adresse <= 13){ + }else if(adresse <= 13){ // 0x0D // Mode mise_a_jour_mode = true; - }else if(adresse <= 17){ + }else if(adresse <= 17){ // 0x11 // PWM moteur mise_a_jour_pwm = true; - }else if(adresse <= 25){ + }else if(adresse <= 25){ // 0x19 // Vitesse roues mise_a_jour_vitesse_roues = true; - }else if(adresse <= 33){ + }else if(adresse <= 33){ // 0x21 // Vitesse robot mise_a_jour_vitesse_robot = true; - }else if(adresse <= 86){ + }else if(adresse <= 0x59){ // // Trajectoire mise_a_jour_trajectoire = true; - }else if(adresse >86){ + }else if(adresse <= 0x61){ + // Trajet config + mise_a_jour_config_trajet = true; + }else { // Hors mémoire return; } diff --git a/messagerie_applicative.h b/messagerie_applicative.h index d327c0e..c972f0f 100644 --- a/messagerie_applicative.h +++ b/messagerie_applicative.h @@ -12,4 +12,5 @@ extern bool mise_a_jour_mode; extern bool mise_a_jour_pwm; extern bool mise_a_jour_vitesse_roues; extern bool mise_a_jour_vitesse_robot; -extern bool mise_a_jour_trajectoire; \ No newline at end of file +extern bool mise_a_jour_trajectoire; +extern bool mise_a_jour_config_trajet; diff --git a/messages_propulsion.h b/messages_propulsion.h index 7311bed..8f6e92e 100644 --- a/messages_propulsion.h +++ b/messages_propulsion.h @@ -11,11 +11,13 @@ #define REG_PROPULSION_VITESSE_ROUES 0x12 #define REG_PROPULSION_VITESSE_ROBOT 0x1A #define REG_PROPULSION_TRAJECTOIRE 0x22 +#define REG_PROPULSION_CONFIG_TRAJET 0x5A #define REG_PROPULSION_ABSCISSE 0x8C #define REG_PROPULSION_POSITION_CONSIGNE 0x90 #define REG_PROPULSION_VITESSE_ROUES_lecture 0x98 #define REG_PROPULSION_ETAT_TRAJET 0xA0 + struct msg_propulsion_position_t{ float position_x_mm, position_y_mm, orientation_rad; }; @@ -35,16 +37,9 @@ struct msg_propulsion_vitesse_robot_t { struct msg_trajectoire_t { struct trajectoire_t trajectoire; }; -/* -struct trajectoire_t { - enum trajectoire_type_t type; - struct point_xy_t p1, p2, p3, p4; - float orientation_debut_rad, orientation_fin_rad; - float rayon, angle_debut_rad, angle_fin_rad; - float longueur; - // Pour les trajectoires composées - struct trajectoire_t * trajectoires[NB_MAX_TRAJECTOIRE]; - int nb_trajectoire; -};*/ + +struct msg_propulsion_config_trajet_t { + float vitesse_mm_s, acceleration_mm_ss; +}; #endif \ No newline at end of file