From 31336389fc32742f3319125012f8c2e7f524f276 Mon Sep 17 00:00:00 2001 From: Samuel Date: Thu, 9 May 2024 16:58:54 +0200 Subject: [PATCH] =?UTF-8?q?Gestion=20des=20deux=20rapports=20de=20r=C3=A9d?= =?UTF-8?q?uction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 ++- Asser_Moteurs.c | 4 ++-- Asser_Moteurs.h | 2 +- Localisation.c | 4 ++-- Localisation.h | 2 +- QEI.c | 12 +++++++++--- QEI.h | 2 +- Trajet.c | 4 ++-- Trajet.h | 2 +- main.c | 12 +++++++++--- 10 files changed, 30 insertions(+), 17 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 4cac3bc..e3b121c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,6 +8,7 @@ "vl53l8_2024.h": "c", "trajet.h": "c", "trajectoire.h": "c", - "compare": "c" + "compare": "c", + "asser_position.h": "c" } } \ No newline at end of file diff --git a/Asser_Moteurs.c b/Asser_Moteurs.c index 808989d..0098144 100644 --- a/Asser_Moteurs.c +++ b/Asser_Moteurs.c @@ -8,8 +8,8 @@ float consigne_mm_s[3]; // Consigne de vitesse (en mm/s) float commande_I[3]; // Terme integral -void AsserMoteur_Init(){ - QEI_init(); +void AsserMoteur_Init(int id){ + QEI_init(id); Moteur_Init(); for(unsigned int i =0; i< 2; i ++){ commande_I[i]=0; diff --git a/Asser_Moteurs.h b/Asser_Moteurs.h index aad202f..42adbda 100644 --- a/Asser_Moteurs.h +++ b/Asser_Moteurs.h @@ -5,4 +5,4 @@ void AsserMoteur_setConsigne_mm_s(enum t_moteur moteur, float consigne_mm_s); float AsserMoteur_getConsigne_mm_s(enum t_moteur moteur); float AsserMoteur_getVitesse_mm_s(enum t_moteur moteur, int step_ms); void AsserMoteur_Gestion(int step_ms); -void AsserMoteur_Init(); \ No newline at end of file +void AsserMoteur_Init(int); \ No newline at end of file diff --git a/Localisation.c b/Localisation.c index f386a08..e2e735e 100644 --- a/Localisation.c +++ b/Localisation.c @@ -6,9 +6,9 @@ struct position_t position; -void Localisation_init(){ +void Localisation_init(int id){ Temps_init(); - QEI_init(); + QEI_init(id); position.x_mm = 0; position.y_mm = 0; position.angle_radian = 0; diff --git a/Localisation.h b/Localisation.h index 12b4716..de101f6 100644 --- a/Localisation.h +++ b/Localisation.h @@ -2,7 +2,7 @@ struct position_t Localisation_get(void); void Localisation_gestion(); -void Localisation_init(); +void Localisation_init(int); void Localisation_set(float x_mm, float y_mm, float angle_radian); void Localisation_set_x(float x_mm); diff --git a/QEI.c b/QEI.c index d035df6..c95dbe3 100644 --- a/QEI.c +++ b/QEI.c @@ -17,8 +17,10 @@ // Nombre d'impulsions par tour de roue : 8000 // Impulsion / mm : 42,44 -#define IMPULSION_PAR_MM (12.45f) +#define IMPULSION_PAR_MM_50_1 (12.45f) +#define IMPULSION_PAR_MM_30_1 (7.47f) +float impulsion_par_mm; struct QEI_t QEI_A, QEI_B; @@ -28,7 +30,7 @@ bool QEI_est_init = false; PIO pio_QEI = pio0; -void QEI_init(){ +void QEI_init(int identifiant){ // Initialisation des 3 modules QEI // Chaque module QEI sera dans une machine à état du PIO 0 if(!QEI_est_init){ @@ -48,6 +50,10 @@ void QEI_init(){ QEI_B.value=0; QEI_est_init=true; } + impulsion_par_mm = IMPULSION_PAR_MM_50_1; + if(identifiant == 0 || identifiant >= 4){ + impulsion_par_mm = IMPULSION_PAR_MM_30_1; + } } @@ -91,5 +97,5 @@ int QEI_get(enum QEI_name_t qei){ /// @param qei : Nom du module à lire (QEI_A_NAME, QEI_B_NAME ou QEI_C_NAME) /// @return la distance parcourue en mm calculée lors du dernier appel de la function QEI_Update() float QEI_get_mm(enum QEI_name_t qei){ - return ((float) QEI_get(qei)) / (float)IMPULSION_PAR_MM; + return ((float) QEI_get(qei)) / impulsion_par_mm; } \ No newline at end of file diff --git a/QEI.h b/QEI.h index b2b132c..e031360 100644 --- a/QEI.h +++ b/QEI.h @@ -11,6 +11,6 @@ enum QEI_name_t{ extern struct QEI_t QEI_A, QEI_B, QEI_C; void QEI_update(void); -void QEI_init(void); +void QEI_init(int); int QEI_get(enum QEI_name_t qei); float QEI_get_mm(enum QEI_name_t qei); \ No newline at end of file diff --git a/Trajet.c b/Trajet.c index 6cb9cd6..7808b21 100644 --- a/Trajet.c +++ b/Trajet.c @@ -25,9 +25,9 @@ const float distance_pas_obstacle = 2000; float vitesse_max_contrainte_obstacle; /// @brief Initialise le module Trajet. A appeler en phase d'initilisation -void Trajet_init(){ +void Trajet_init(int id){ Temps_init(); - AsserMoteur_Init(); + AsserMoteur_Init(id); abscisse = 0; vitesse_mm_s = 0; position_mm = 0; diff --git a/Trajet.h b/Trajet.h index 57462c6..1e074f9 100644 --- a/Trajet.h +++ b/Trajet.h @@ -20,7 +20,7 @@ enum etat_trajet_t{ extern const float distance_pas_obstacle; -void Trajet_init(); +void Trajet_init(int); void Trajet_config(float _vitesse_max_trajet_mm_s, float _acceleration_mm_ss); void Trajet_debut_trajectoire(struct trajectoire_t trajectoire); enum etat_trajet_t Trajet_avance(float temps_s); diff --git a/main.c b/main.c index b85a1fb..7366f46 100644 --- a/main.c +++ b/main.c @@ -63,8 +63,8 @@ void main(void) Temps_init(); //tension_batterie_init(); identifiant_init(); - Localisation_init(); - Trajet_init(); + Localisation_init(identifiant_lire()); + Trajet_init(identifiant_lire()); i2c_maitre_init(); @@ -97,7 +97,7 @@ void main(void) while(get_tirette()); - sleep_ms(90000); + //sleep_ms(90000); temps_depart_ms = Temps_get_temps_ms(); @@ -234,6 +234,9 @@ void configure_trajet(int identifiant, int couleur){ switch (identifiant) { case 0: + Localisation_set(3000-1249, 2000-63, 0); + Trajectoire_bezier(&trajectoire, 3000-1250, 2000-63, 3000-1050, 2000-63, + 3000-750, 1400, 3000-750, 2100, 0, 0); break; case 1: Localisation_set(3000-1249, 2000-63, 0); @@ -268,6 +271,9 @@ void configure_trajet(int identifiant, int couleur){ switch (identifiant) { case 0: + Localisation_set(1249, 2000-63, M_PI); + Trajectoire_bezier(&trajectoire, 1250, 2000-63, 1050, 2000-63, + 750, 1400, 750, 2100, M_PI, M_PI); break; case 1: Localisation_set(1249, 2000-63, M_PI);