#include "Strategie.h" #include "Asser_Position.h" #include "Geometrie.h" #include "Servomoteur.h" enum etat_action_t Strategie_super_star(uint32_t step_ms, enum couleur_t couleur){ static enum{ SSS_INIT, SSS_AVANCE, SSS_FIN } etat_sss = SSS_INIT; static struct trajectoire_t trajectoire_composee; static struct trajectoire_t trajectoire1, trajectoire2, trajectoire3; switch(etat_sss){ case SSS_INIT: if(couleur == COULEUR_JAUNE){ Localisation_set(45, 1895, 0); Trajectoire_droite(&trajectoire1, 45, 1895, 1135, 1895, 0, 0); Trajectoire_circulaire(&trajectoire2, 1135, 1645, M_PI/2, 0, 250, 0, -M_PI/2); Trajectoire_droite(&trajectoire3, 1385, 1645, 1385, 1580, 0, 0); }else{ Localisation_set(3000 - 45, 1895, M_PI); Trajectoire_droite(&trajectoire1, 3000-45, 1895, 3000- 1135, 1895, M_PI, M_PI); Trajectoire_circulaire(&trajectoire2, 3000-1135, 1645, M_PI/2, M_PI, 250, M_PI, -M_PI/2); Trajectoire_droite(&trajectoire3, 3000-1385, 1645, 3000-1385, 1580, 0, 0); } Trajectoire_composee_init(&trajectoire_composee); Trajectoire_composee_ajout(&trajectoire_composee, &trajectoire1); Trajectoire_composee_ajout(&trajectoire_composee, &trajectoire2); Trajectoire_composee_ajout(&trajectoire_composee, &trajectoire3); etat_sss = SSS_AVANCE; break; case SSS_AVANCE: Trajet_config(TRAJECT_CONFIG_RAPIDE); if(Strategie_parcourir_trajet(trajectoire_composee, step_ms, EVITEMENT_SANS_EVITEMENT) == ACTION_TERMINEE){ etat_sss = SSS_FIN; } break; case SSS_FIN: Asser_Position_maintien(); return ACTION_TERMINEE; } return ACTION_EN_COURS; } enum etat_action_t Strategie_groupie_1(uint32_t step_ms, enum couleur_t couleur){ static enum{ SSS_INIT, SSS_AVANCE, SSS_DANCE } etat_sss = SSS_INIT; static struct trajectoire_t trajectoire_composee; static struct trajectoire_t trajectoire1, trajectoire2, trajectoire3; switch(etat_sss){ case SSS_INIT: if(couleur == COULEUR_JAUNE){ Localisation_set(45, 1780, 0); Trajectoire_bezier(&trajectoire1, 45, 1780, 480, 1780, 710, 1342, 960, 1410, 0, 0); Trajectoire_bezier(&trajectoire2, 960, 1410, 1014, 1424, 1053, 1432, 1092, 1460, 0, 0); }else{ Localisation_set(3000 - 45, 1780, M_PI); Trajectoire_bezier(&trajectoire1, 3000 - 45, 1780, 3000 - 480, 1780, 3000 - 710, 1342, 3000 - 960, 1410, 0, 0); Trajectoire_bezier(&trajectoire2, 3000 - 960, 1410, 3000 - 1014, 1424, 3000 - 1053, 1432, 3000 - 1092, 1460, 0, 0); } Trajectoire_composee_init(&trajectoire_composee); Trajectoire_composee_ajout(&trajectoire_composee, &trajectoire1); Trajectoire_composee_ajout(&trajectoire_composee, &trajectoire2); etat_sss = SSS_AVANCE; break; case SSS_AVANCE: Trajet_config(TRAJECT_CONFIG_RAPIDE); if(Strategie_parcourir_trajet(trajectoire_composee, step_ms, EVITEMENT_SANS_EVITEMENT) == ACTION_TERMINEE){ etat_sss = SSS_DANCE; } break; case SSS_DANCE: return ACTION_TERMINEE; } return ACTION_EN_COURS; } enum etat_action_t Strategie_groupie_2(uint32_t step_ms, enum couleur_t couleur){ static enum{ SSS_INIT, SSS_AVANCE, SSS_DANCE } etat_sss = SSS_INIT; static struct trajectoire_t trajectoire_composee; static struct trajectoire_t trajectoire1, trajectoire2, trajectoire3; switch(etat_sss){ case SSS_INIT: if(couleur == COULEUR_JAUNE){ Localisation_set(45, 1600, 0); Trajectoire_bezier(&trajectoire1, 45, 1600, 326, 1600, 935, 980, 1500, 1380, 0, 0); }else{ Localisation_set(3000 - 45, 1600, M_PI); Trajectoire_bezier(&trajectoire1, 3000 - 45, 1600, 3000 - 326, 1600, 3000 - 935, 980, 3000 - 1500, 1380, 0, 0); } etat_sss = SSS_AVANCE; break; case SSS_AVANCE: Trajet_config(TRAJECT_CONFIG_RAPIDE); if(Strategie_parcourir_trajet(trajectoire1, step_ms, EVITEMENT_SANS_EVITEMENT) == ACTION_TERMINEE){ etat_sss = SSS_DANCE; } break; case SSS_DANCE: return ACTION_TERMINEE; } return ACTION_EN_COURS; } enum etat_action_t Strategie_groupie_3(uint32_t step_ms, enum couleur_t couleur){ static enum{ SSS_INIT, SSS_AVANCE, SSS_DANCE } etat_sss = SSS_INIT; static struct trajectoire_t trajectoire_composee; static struct trajectoire_t trajectoire1, trajectoire2, trajectoire3; switch(etat_sss){ case SSS_INIT: Localisation_set(45, 1895, 0); Trajectoire_droite(&trajectoire1, 45, 1895, 1135, 1895, 0, 0); Trajectoire_circulaire(&trajectoire2, 1135, 1645, M_PI/2, 0, 250, 0, -M_PI/2); Trajectoire_droite(&trajectoire3, 1385, 1645, 1385, 1580, 0, 0); Trajectoire_composee_init(&trajectoire_composee); Trajectoire_composee_ajout(&trajectoire_composee, &trajectoire1); Trajectoire_composee_ajout(&trajectoire_composee, &trajectoire2); Trajectoire_composee_ajout(&trajectoire_composee, &trajectoire3); etat_sss = SSS_AVANCE; break; case SSS_AVANCE: Trajet_config(TRAJECT_CONFIG_RAPIDE); if(Strategie_parcourir_trajet(trajectoire_composee, step_ms, EVITEMENT_SANS_EVITEMENT) == ACTION_TERMINEE){ etat_sss = SSS_DANCE; } break; case SSS_DANCE: return ACTION_TERMINEE; } return ACTION_EN_COURS; } void PAMI_dance(int identifiant){ switch (identifiant) { case 0: sleep_ms(500); Servomoteur_set(DOIGT_AVANCE); sleep_ms(250); Servomoteur_set(DOIGT_RETRAIT); sleep_ms(250); // t = 1,0 s sleep_ms(750); // t = 1,75 s Servomoteur_set(DOIGT_AVANCE); sleep_ms(250); Servomoteur_set(DOIGT_RETRAIT); sleep_ms(250); // t = 2,25 s sleep_ms(950); // t = 3,2 s for(int i =0; i<3;i++){ Servomoteur_set(DOIGT_AVANCE); sleep_ms(200); Servomoteur_set(DOIGT_RETRAIT); sleep_ms(200); }// t = 4,4 s sleep_ms(1400); // t = 5,8 break; case 1: case 2: case 3: sleep_ms(1100); // t = 1,1 s Servomoteur_set(DOIGT_AVANCE); sleep_ms(250); Servomoteur_set(DOIGT_RETRAIT); sleep_ms(250); // t = 1,6 s sleep_ms(800); // t = 2,4 s Servomoteur_set(DOIGT_AVANCE); sleep_ms(250); Servomoteur_set(DOIGT_RETRAIT); sleep_ms(250); // t = 2,9 s sleep_ms(1600); // t = 4,5 s for(int i =0; i<3;i++){ Servomoteur_set(DOIGT_AVANCE); sleep_ms(150); Servomoteur_set(DOIGT_RETRAIT); sleep_ms(150); }// t = 5,4 s sleep_ms(400); // t = 5,8 s break; default: break; } }