Holonome_2024/Test_strategie_2024.c
2024-04-07 22:26:36 +02:00

261 lines
7.1 KiB
C

#include <stdio.h>
#include "pico/stdio.h"
#include "pico/error.h"
#include "pico/multicore.h"
#include "hardware/i2c.h"
#include "i2c_annexe.h"
#include "i2c_maitre.h"
#include "Evitement.h"
#include "Geometrie.h"
#include "Geometrie_robot.h"
#include "Asser_Moteurs.h"
#include "Localisation.h"
#include "Robot_config.h"
#include "Strategie_2024_pots.h"
#include "Strategie.h"
#include "Trajectoire.h"
#include "QEI.h"
#include "gyro.h"
#include "Moteurs.h"
int test_calcul_position_pot(void);
int test_calage_debut(void);
int test_attrape_pot();
void affichage_test_strategie_2024(void);
int test_strategie_2024(){
printf("A - Position groupes pot.\n");
printf("B - Calage debut.\n");
printf("C - Attrape pot.\n");
int lettre;
do{
lettre = getchar_timeout_us(0);
}while(lettre == PICO_ERROR_TIMEOUT || lettre == 0);
switch(lettre){
case 'a':
case 'A':
while(test_calcul_position_pot());
break;
case 'b':
case 'B':
while(test_calage_debut());
break;
case 'c':
case 'C':
while(test_attrape_pot());
break;
case 'q':
case 'Q':
return 0;
}
}
void print_position(struct position_t position){
printf("x_mm: %.2f, y_mm: %.2f, angle: %.2f\n", position.x_mm, position.y_mm, position.angle_radian/DEGRE_EN_RADIAN);
}
int test_calcul_position_pot(){
printf("\ngroupe: GROUPE_POT_B1, pot: 5 \n");
print_position(groupe_pot_get_pot(GROUPE_POT_B1, POT_5));
printf("\ngroupe: GROUPE_POT_B2, pot: 1 \n");
print_position(groupe_pot_get_pot(GROUPE_POT_B2, POT_1));
printf("\ngroupe: GROUPE_POT_L1, pot: 1 \n");
print_position(groupe_pot_get_pot(GROUPE_POT_L1, POT_1));
printf("\ngroupe: GROUPE_POT_L2, pot: 1 \n");
print_position(groupe_pot_get_pot(GROUPE_POT_L2, POT_1));
printf("\ngroupe: GROUPE_POT_R1, pot: 1 \n");
print_position(groupe_pot_get_pot(GROUPE_POT_R1, POT_1));
printf("\ngroupe: GROUPE_POT_R2, pot: 1 \n");
print_position(groupe_pot_get_pot(GROUPE_POT_R2, POT_1));
printf("\ngroupe: GROUPE_POT_L1, pot: 1 \n");
print_position(groupe_pot_get_pot(GROUPE_POT_L1, POT_1));
printf("\ngroupe: GROUPE_POT_L1, pot: 2 \n");
print_position(groupe_pot_get_pot(GROUPE_POT_L1, POT_2));
printf("\ngroupe: GROUPE_POT_L1, pot: 3 \n");
print_position(groupe_pot_get_pot(GROUPE_POT_L1, POT_3));
printf("\ngroupe: GROUPE_POT_L1, pot: 4 \n");
print_position(groupe_pot_get_pot(GROUPE_POT_L1, POT_4));
printf("\ngroupe: GROUPE_POT_L1, pot: 5 \n");
print_position(groupe_pot_get_pot(GROUPE_POT_L1, POT_5));
return 0;
}
int test_calage_debut(){
int lettre, _step_ms = 1, temps_ms=0, _step_ms_gyro=2,temps_ms_init;
struct trajectoire_t trajectoire;
enum evitement_t evitement;
enum etat_action_t etat_action;
printf("test_calage_debut\n");
i2c_maitre_init();
Trajet_init();
Balise_VL53L1X_init();
Localisation_set(250,250,0);
set_position_avec_gyroscope(0);
if(get_position_avec_gyroscope()){
printf("Init gyroscope\n");
Gyro_Init();
}
stdio_flush();
Trajet_config(100, 500);
multicore_launch_core1(affichage_test_strategie_2024);
temps_ms = Temps_get_temps_ms();
temps_ms_init = temps_ms;
do{
i2c_gestion(i2c0);
i2c_annexe_gestion();
Balise_VL53L1X_gestion();
// Routines à 1 ms
if(temps_ms != Temps_get_temps_ms()){
temps_ms = Temps_get_temps_ms();
QEI_update();
Localisation_gestion();
AsserMoteur_Gestion(_step_ms);
Evitement_gestion(_step_ms);
// Routine à 2 ms
if(temps_ms % _step_ms_gyro == 0){
if(get_position_avec_gyroscope()){
Gyro_Read(_step_ms_gyro);
}
}
etat_action = Strategie_calage_debut(COULEUR_BLEU, _step_ms);
}
lettre = getchar_timeout_us(0);
//}while((lettre == PICO_ERROR_TIMEOUT) || (lettre == 0));
}while(etat_action == ACTION_EN_COURS);
printf("STRATEGIE_LOOP_2\n");
printf("Lettre : %d; %c\n", lettre, lettre);
while(1){Moteur_Stop();}
if(lettre == 'q' && lettre == 'Q'){
return 0;
}
return 0;
}
int test_attrape_pot(){
int lettre, _step_ms = 1, temps_ms=0, _step_ms_gyro=2,temps_ms_init;
struct trajectoire_t trajectoire;
enum evitement_t evitement;
enum etat_action_t etat_action;
printf("test_attrape_pot\n");
i2c_maitre_init();
Trajet_init();
Balise_VL53L1X_init();
Localisation_set(250, 250, (45. * DEGRE_EN_RADIAN) - ANGLE_PINCE);
set_position_avec_gyroscope(0);
if(get_position_avec_gyroscope()){
printf("Init gyroscope\n");
Gyro_Init();
}
stdio_flush();
Trajet_config(TRAJECT_CONFIG_STD);
multicore_launch_core1(affichage_test_strategie_2024);
temps_ms = Temps_get_temps_ms();
temps_ms_init = temps_ms;
do{
i2c_gestion(i2c0);
i2c_annexe_gestion();
Balise_VL53L1X_gestion();
// Routines à 1 ms
if(temps_ms != Temps_get_temps_ms()){
temps_ms = Temps_get_temps_ms();
QEI_update();
Localisation_gestion();
AsserMoteur_Gestion(_step_ms);
Evitement_gestion(_step_ms);
// Routine à 2 ms
if(temps_ms % _step_ms_gyro == 0){
if(get_position_avec_gyroscope()){
Gyro_Read(_step_ms_gyro);
}
}
etat_action = Strat_2024_attrape_pot(GROUPE_POT_B1, _step_ms);
}
lettre = getchar_timeout_us(0);
//}while((lettre == PICO_ERROR_TIMEOUT) || (lettre == 0));
}while(etat_action == ACTION_EN_COURS);
printf("STRATEGIE_LOOP_2\n");
printf("Lettre : %d; %c\n", lettre, lettre);
while(1){Moteur_Stop();}
if(lettre == 'q' && lettre == 'Q'){
return 0;
}
return 0;
}
void affichage_test_strategie_2024(){
uint32_t temps;
while(true){
temps = time_us_32()/1000;
//temps_cycle_display();
printf(">V_consigne_A:%ld:%f\n>V_consigne_B:%ld:%f\n>V_consigne_C:%ld:%f\n", temps, AsserMoteur_getConsigne_mm_s(MOTEUR_A), temps, AsserMoteur_getConsigne_mm_s(MOTEUR_B), temps, AsserMoteur_getConsigne_mm_s(MOTEUR_C));
printf(">pos_x:%ld:%f\n", temps, Localisation_get().x_mm);
printf(">pos_y:%ld:%f\n", temps, Localisation_get().y_mm);
printf(">pos_angle:%ld:%f\n", temps, (Localisation_get().angle_radian + ANGLE_PINCE)/ DEGRE_EN_RADIAN );
printf(">c_pos_x:%ld:%f\n", temps, Trajet_get_consigne().x_mm);
printf(">c_pos_y:%ld:%f\n", temps, Trajet_get_consigne().y_mm);
printf(">c_pos_angle:%ld:%f\n", temps, (Trajet_get_consigne().angle_radian+ ANGLE_PINCE) / DEGRE_EN_RADIAN);
printf(">tirette:%ld:%d\n", temps, attente_tirette());
printf(">distance_obstacle:%ld:%f\n", temps, Trajet_get_obstacle_mm());
printf(">angle_avance:%ld:%f\n", temps, Trajet_get_orientation_avance());
sleep_ms(100);
}
}