code de la carte IHM avant les bugs et avant le travail effectué avec Melchior

Dependencies:   mbed SerialHalfDuplex SDFileSystem liaison_Bluetooth ident_crac DISCO-F469NI_portrait

Committer:
maximilienlv
Date:
Wed Mar 11 16:35:39 2020 +0000
Revision:
15:5ece9c3ba389
Parent:
14:6aa8aa1699ad
Child:
16:c6c765e8b982
case bras avants et arrieres

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gabrieltetar 1:7e925468f9d9 1 #include "global.h"
gabrieltetar 1:7e925468f9d9 2 #include <string.h>
gabrieltetar 1:7e925468f9d9 3 #include <sstream>
gabrieltetar 1:7e925468f9d9 4 #include <math.h>
gabrieltetar 1:7e925468f9d9 5 #include <vector>
gabrieltetar 1:7e925468f9d9 6
gabrieltetar 1:7e925468f9d9 7
gabrieltetar 1:7e925468f9d9 8 #define M_PI 3.14159265358979323846
gabrieltetar 1:7e925468f9d9 9 #define VERT 0xFF00FF00
gabrieltetar 1:7e925468f9d9 10 #define ROUGE 0xFFFF0000
gabrieltetar 1:7e925468f9d9 11 #define BLEU 0xFF0000FF
gabrieltetar 1:7e925468f9d9 12 #define JAUNE 0xFFFDD835//FEFE00
gabrieltetar 1:7e925468f9d9 13 #define BLANC 0xFF000000
gabrieltetar 1:7e925468f9d9 14 #define ORANGE 0xFFFFA500
gabrieltetar 1:7e925468f9d9 15 #define NOIR 0xFF000000
gabrieltetar 1:7e925468f9d9 16 #define DIY_GREY 0xFFDFDFDF
gabrieltetar 1:7e925468f9d9 17 #define VIOLET 0xFF4527A0
gabrieltetar 1:7e925468f9d9 18
gabrieltetar 1:7e925468f9d9 19 char tableau_aff[10][50];
gabrieltetar 1:7e925468f9d9 20 char tableau_etat[22][50]= {
gabrieltetar 1:7e925468f9d9 21 "Check_carte_screen",
gabrieltetar 1:7e925468f9d9 22 "Check_carte_screen_wait_ack",
gabrieltetar 1:7e925468f9d9 23 "Check_cartes",
gabrieltetar 1:7e925468f9d9 24 "Check_cartes_wait_ack",
gabrieltetar 1:7e925468f9d9 25 "Wait_force",
gabrieltetar 1:7e925468f9d9 26 "Config",
gabrieltetar 1:7e925468f9d9 27 "Game_init",
gabrieltetar 1:7e925468f9d9 28 "Game_wait_for_jack",
gabrieltetar 1:7e925468f9d9 29 "Game_start",
gabrieltetar 1:7e925468f9d9 30 "Game_next_instruction",
gabrieltetar 1:7e925468f9d9 31 "Game_instruction",
gabrieltetar 1:7e925468f9d9 32 "Game_wait_ack",
gabrieltetar 1:7e925468f9d9 33 "Game_jump_time",
gabrieltetar 1:7e925468f9d9 34 "Game_jump_config",
gabrieltetar 1:7e925468f9d9 35 "Game_jump_position",
gabrieltetar 1:7e925468f9d9 36 "Game_wait_end_instruction",
gabrieltetar 1:7e925468f9d9 37 "Warning_timeout",
gabrieltetar 1:7e925468f9d9 38 "Waring_end_balise_wait",
gabrieltetar 1:7e925468f9d9 39 "Warning_end_last_instruction",
gabrieltetar 1:7e925468f9d9 40 "Warning_switch_strategie",
gabrieltetar 1:7e925468f9d9 41 "End",
gabrieltetar 1:7e925468f9d9 42 "End_loop",
gabrieltetar 1:7e925468f9d9 43 };
gabrieltetar 1:7e925468f9d9 44
gabrieltetar 1:7e925468f9d9 45 int waitingAckID_FIN;
gabrieltetar 1:7e925468f9d9 46 int waitingAckFrom_FIN;
gabrieltetar 1:7e925468f9d9 47
gabrieltetar 1:7e925468f9d9 48 Ticker ticker;
gabrieltetar 1:7e925468f9d9 49 TS_DISCO_F469NI ts;
gabrieltetar 1:7e925468f9d9 50 LCD_DISCO_F469NI lcd;
gabrieltetar 1:7e925468f9d9 51
gabrieltetar 1:7e925468f9d9 52 TS_StateTypeDef TS_State;
gabrieltetar 1:7e925468f9d9 53
gabrieltetar 1:7e925468f9d9 54 Ticker chrono;
gabrieltetar 1:7e925468f9d9 55 Timeout AffTime;
gabrieltetar 1:7e925468f9d9 56 Timer timer;
gabrieltetar 1:7e925468f9d9 57 Timer cartesCheker;//Le timer pour le timeout de la vérification des cartes
gabrieltetar 1:7e925468f9d9 58 Timer gameTimer;
gabrieltetar 1:7e925468f9d9 59 Timer debugetatTimer;
gabrieltetar 1:7e925468f9d9 60 Timer timeoutWarning;
gabrieltetar 1:7e925468f9d9 61 Timer timeoutWarningWaitEnd;
gabrieltetar 1:7e925468f9d9 62 Timeout chronoEnd;//permet d'envoyer la trame CAN pour la fin
gabrieltetar 1:7e925468f9d9 63
gabrieltetar 1:7e925468f9d9 64 unsigned char screenChecktry = 0;
gabrieltetar 1:7e925468f9d9 65 unsigned char test[32] = {32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32};
gabrieltetar 1:7e925468f9d9 66
gabrieltetar 1:7e925468f9d9 67 char counter = 0;
gabrieltetar 1:7e925468f9d9 68 char check;
gabrieltetar 1:7e925468f9d9 69 char Jack = 1;
gabrieltetar 1:7e925468f9d9 70 short SCORE_GLOBAL=0;
gabrieltetar 1:7e925468f9d9 71 short SCORE_GR=0;
gabrieltetar 1:7e925468f9d9 72 short SCORE_PR=0;
gabrieltetar 14:6aa8aa1699ad 73 unsigned short distance_recalage;
gabrieltetar 14:6aa8aa1699ad 74 unsigned short distance_revenir;
gabrieltetar 1:7e925468f9d9 75
gabrieltetar 14:6aa8aa1699ad 76 unsigned short x;
gabrieltetar 14:6aa8aa1699ad 77 unsigned short y;
gabrieltetar 14:6aa8aa1699ad 78 unsigned char isStopEnable = 1;//Permet de savoir si il faut autoriser le stop via les balises
gabrieltetar 1:7e925468f9d9 79 int flag = 0, flag_strat = 0, flag_timer;
gabrieltetar 1:7e925468f9d9 80 int flagReceptionTelemetres = 0, flagNonRepriseErrorMot = 0;
gabrieltetar 1:7e925468f9d9 81 char Ack_strat = 0;
gabrieltetar 1:7e925468f9d9 82 signed char Strat = 0;
gabrieltetar 1:7e925468f9d9 83 signed char FIFO_lecture=0;//Position du fifo de lecture des messages CAN
gabrieltetar 1:7e925468f9d9 84
gabrieltetar 1:7e925468f9d9 85 signed short x_robot,y_robot,theta_robot;//La position du robot
gabrieltetar 1:7e925468f9d9 86 signed short target_x_robot, target_y_robot, target_theta_robot;
gabrieltetar 1:7e925468f9d9 87 E_InstructionType actionPrecedente;
gabrieltetar 1:7e925468f9d9 88 //unsigned char FIFO_ecriture=0; //Position du fifo pour la reception CAN
gabrieltetar 1:7e925468f9d9 89 int flagSendCan=1;
gabrieltetar 1:7e925468f9d9 90 unsigned char Cote = 0; //0 -> JAUNE | 1 -> VIOLET
gabrieltetar 1:7e925468f9d9 91 unsigned short angleRecalage = 0;
gabrieltetar 1:7e925468f9d9 92 unsigned char checkCurrent = 0;
gabrieltetar 1:7e925468f9d9 93 unsigned char countAliveCard = 0;
gabrieltetar 1:7e925468f9d9 94 unsigned char ligne=0;
gabrieltetar 1:7e925468f9d9 95
gabrieltetar 1:7e925468f9d9 96
gabrieltetar 1:7e925468f9d9 97 int Fevitement=0;
gabrieltetar 1:7e925468f9d9 98 int EvitEtat= 0;
gabrieltetar 1:7e925468f9d9 99 int stop_evitement=0;
gabrieltetar 1:7e925468f9d9 100
gabrieltetar 1:7e925468f9d9 101
gabrieltetar 1:7e925468f9d9 102
gabrieltetar 1:7e925468f9d9 103
gabrieltetar 1:7e925468f9d9 104
gabrieltetar 1:7e925468f9d9 105 signed char Strategie = 0; //N° de la strategie (1-10)
gabrieltetar 1:7e925468f9d9 106
gabrieltetar 1:7e925468f9d9 107 unsigned char ModeDemo = 0; // Si à 1, indique que l'on est dans le mode demo
gabrieltetar 1:7e925468f9d9 108
gabrieltetar 1:7e925468f9d9 109 unsigned char countRobotNear = 0;//Le nombre de robot à proximité
gabrieltetar 1:7e925468f9d9 110
gabrieltetar 1:7e925468f9d9 111 unsigned char ingnorBaliseOnce = 0;//une fois détecté réinitialise
gabrieltetar 1:7e925468f9d9 112 unsigned char ingnorBalise = 0;//0:balise ignore 1:on ecoute la balise
gabrieltetar 1:7e925468f9d9 113 short direction;
gabrieltetar 1:7e925468f9d9 114
gabrieltetar 1:7e925468f9d9 115 unsigned char ingnorInversionOnce = 0;//Pour ignorer l'inversion des instruction une fois
gabrieltetar 1:7e925468f9d9 116
gabrieltetar 1:7e925468f9d9 117 struct S_Instruction instruction;
gabrieltetar 1:7e925468f9d9 118 struct S_Dodge_queue dodgeq;
gabrieltetar 1:7e925468f9d9 119
gabrieltetar 1:7e925468f9d9 120 char couleur1, couleur2, couleur3;
gabrieltetar 1:7e925468f9d9 121 float cptf;
gabrieltetar 1:7e925468f9d9 122 int cpt,cpt1;
gabrieltetar 1:7e925468f9d9 123
gabrieltetar 14:6aa8aa1699ad 124 typedef enum {INIT, ATT, CHOIX, DEMO, TEST_MOTEUR, TEST_COULEUR, TEST_SERVO_BRAS, TEST_VENTOUSE, TEST_ELECTROV,TEST_AUD, SELECT_SIDE, TACTIQUE, DETAILS,LECTURE, LAUNCH, AFF_WAIT_JACK, WAIT_JACK, COMPTEUR, FIN} T_etat;
gabrieltetar 1:7e925468f9d9 125 T_etat etat = INIT;
gabrieltetar 1:7e925468f9d9 126 E_stratGameEtat gameEtat = ETAT_CHECK_CARTES;
gabrieltetar 1:7e925468f9d9 127 E_stratGameEtat memGameEtat= gameEtat;
gabrieltetar 1:7e925468f9d9 128 E_stratGameEtat lastEtat = ETAT_CHECK_CARTES;
gabrieltetar 1:7e925468f9d9 129 E_Stratposdebut etat_pos=RECALAGE_1;
gabrieltetar 1:7e925468f9d9 130
gabrieltetar 1:7e925468f9d9 131 /////////////////DEFINITION DES BOUTONS////////////////////
gabrieltetar 1:7e925468f9d9 132 Button COTE_JAUNE(0, 25, 400, 300, "JAUNE");
gabrieltetar 1:7e925468f9d9 133 Button COTE_VIOLET(0, 350, 400, 300, "VIOLET");
gabrieltetar 1:7e925468f9d9 134 Button RETOUR (0, 680, 400, 110, "--Precedent--");
gabrieltetar 1:7e925468f9d9 135 Button LANCER (0, 200, 400, 200, "--LANCER--");
gabrieltetar 1:7e925468f9d9 136 Button CHECK (0, 420, 400, 200, "Valider");
gabrieltetar 1:7e925468f9d9 137 Button MATCH (0, 50, 400, 320, "Match");
gabrieltetar 1:7e925468f9d9 138 Button DEMONSTRATION (0, 400, 400, 320, "Demo");
gabrieltetar 10:1964bb91b925 139 //menu demo
gabrieltetar 7:44eec996a76e 140 Button TEST_VENT(0, 25, 400, 100, "Test ventouses");
gabrieltetar 14:6aa8aa1699ad 141 Button TEST_MOT(0, 135, 400, 100, "Test moteur");
gabrieltetar 7:44eec996a76e 142 Button TEST_COUL(0,245,400,100,"Test capteurs couleur");
gabrieltetar 7:44eec996a76e 143 Button TEST_BRAS(0,355,400,100,"Test Bras");
gabrieltetar 10:1964bb91b925 144 Button TEST_AUDIO(0,465,400,100,"Test Audio");
gabrieltetar 14:6aa8aa1699ad 145 Button TEST_ELECTRV(0,575,400,100,"Test Divers");
gabrieltetar 10:1964bb91b925 146 //menu demo/demo/
gabrieltetar 10:1964bb91b925 147 Button TEST_A(0,25,195,100,"A");
gabrieltetar 10:1964bb91b925 148 Button TEST_B(205,25,195,100,"B");
gabrieltetar 10:1964bb91b925 149 Button TEST_C(0,135,195,100,"C");
gabrieltetar 10:1964bb91b925 150 Button TEST_D(205,135,195,100,"D");
gabrieltetar 10:1964bb91b925 151 Button TEST_NUM(0,245,400,100,"Bras num");
gabrieltetar 10:1964bb91b925 152 Button TEST_PLUS(205,355,195,100,"+");
gabrieltetar 10:1964bb91b925 153 Button TEST_MOINS(0,355,195,100,"-");
gabrieltetar 7:44eec996a76e 154
gabrieltetar 7:44eec996a76e 155
gabrieltetar 1:7e925468f9d9 156 Button FORCE_LAUNCH(0, 50, 400, 320, "Force Launch");
gabrieltetar 1:7e925468f9d9 157 Button SUIVANT(0,380,200,100,"Suivant");
gabrieltetar 1:7e925468f9d9 158 ////////////////////////////////////////////////////////////
gabrieltetar 1:7e925468f9d9 159
gabrieltetar 1:7e925468f9d9 160 void SendRawId (unsigned short id);
gabrieltetar 1:7e925468f9d9 161 void SelectionStrat (unsigned char numeroStrat);
gabrieltetar 1:7e925468f9d9 162 void Setflag(void);
gabrieltetar 1:7e925468f9d9 163 void can2Rx_ISR(void);
gabrieltetar 1:7e925468f9d9 164 signed char Bouton_Strat (void);
gabrieltetar 1:7e925468f9d9 165 signed char blocage_balise;
gabrieltetar 1:7e925468f9d9 166 void print_segment(int nombre, int decalage);
gabrieltetar 1:7e925468f9d9 167 void affichage_compteur (int nombre);
gabrieltetar 1:7e925468f9d9 168 void effacer_segment(long couleur);
gabrieltetar 14:6aa8aa1699ad 169 unsigned char doAction(unsigned char id, unsigned short arg1, short arg2);
gabrieltetar 1:7e925468f9d9 170 unsigned short telemetreDistance=0;
gabrieltetar 1:7e925468f9d9 171 unsigned short telemetreDistance_avant_gauche=0;
gabrieltetar 1:7e925468f9d9 172 unsigned short telemetreDistance_avant_droite=0;
gabrieltetar 1:7e925468f9d9 173 unsigned short telemetreDistance_arriere_gauche=0;
gabrieltetar 1:7e925468f9d9 174 unsigned short telemetreDistance_arriere_droite=0;
gabrieltetar 1:7e925468f9d9 175
gabrieltetar 1:7e925468f9d9 176 unsigned char DT_AVD_interrupt=0;
gabrieltetar 1:7e925468f9d9 177 unsigned char DT_AVG_interrupt=0;
gabrieltetar 1:7e925468f9d9 178 unsigned char DT_ARD_interrupt=0;
gabrieltetar 1:7e925468f9d9 179 unsigned char DT_ARG_interrupt=0;
gabrieltetar 1:7e925468f9d9 180
gabrieltetar 1:7e925468f9d9 181
gabrieltetar 1:7e925468f9d9 182
gabrieltetar 1:7e925468f9d9 183 unsigned short id_check[NOMBRE_CARTES]= {CHECK_MOTEUR,CHECK_BALISE};
gabrieltetar 1:7e925468f9d9 184 unsigned short id_alive[NOMBRE_CARTES]= {ALIVE_MOTEUR,ALIVE_BALISE};
gabrieltetar 1:7e925468f9d9 185 InterruptIn jack(PG_11); // entrée numerique en interruption pour le jack
gabrieltetar 1:7e925468f9d9 186
gabrieltetar 1:7e925468f9d9 187
gabrieltetar 1:7e925468f9d9 188
gabrieltetar 1:7e925468f9d9 189
gabrieltetar 1:7e925468f9d9 190
gabrieltetar 1:7e925468f9d9 191
gabrieltetar 1:7e925468f9d9 192 /****************************************************************************************/
gabrieltetar 1:7e925468f9d9 193 /* FUNCTION NAME: chronometre_ISR */
gabrieltetar 1:7e925468f9d9 194 /* DESCRIPTION : Interruption à la fin des 90s du match */
gabrieltetar 1:7e925468f9d9 195 /****************************************************************************************/
gabrieltetar 1:7e925468f9d9 196 void chronometre_ISR (void)
gabrieltetar 1:7e925468f9d9 197 {
gabrieltetar 1:7e925468f9d9 198 SendRawId(ASSERVISSEMENT_STOP);//On stope les moteurs
gabrieltetar 1:7e925468f9d9 199 SendRawId(GLOBAL_GAME_END);//Indication fin de match
gabrieltetar 1:7e925468f9d9 200 etat=FIN;
gabrieltetar 1:7e925468f9d9 201 gameTimer.stop();//Arret du timer
gabrieltetar 1:7e925468f9d9 202
gabrieltetar 1:7e925468f9d9 203 while(1);//On bloque la programme dans l'interruption
gabrieltetar 1:7e925468f9d9 204 }
gabrieltetar 1:7e925468f9d9 205
gabrieltetar 1:7e925468f9d9 206
gabrieltetar 1:7e925468f9d9 207
gabrieltetar 1:7e925468f9d9 208 /****************************************************************************************/
gabrieltetar 1:7e925468f9d9 209 /* FUNCTION NAME: jack_ISR */
gabrieltetar 1:7e925468f9d9 210 /* DESCRIPTION : Interruption en changement d'état sur le Jack */
gabrieltetar 1:7e925468f9d9 211 /****************************************************************************************/
gabrieltetar 1:7e925468f9d9 212 void jack_ISR (void)
gabrieltetar 1:7e925468f9d9 213 {
gabrieltetar 1:7e925468f9d9 214 if(gameEtat == ETAT_GAME_WAIT_FOR_JACK) {
gabrieltetar 1:7e925468f9d9 215 gameEtat = ETAT_GAME_START;//On débute le match
gabrieltetar 14:6aa8aa1699ad 216 etat=COMPTEUR;
gabrieltetar 1:7e925468f9d9 217 blocage_balise=1;
gabrieltetar 1:7e925468f9d9 218 }
gabrieltetar 1:7e925468f9d9 219 }
gabrieltetar 1:7e925468f9d9 220
gabrieltetar 1:7e925468f9d9 221 /****************************************************************************************/
gabrieltetar 1:7e925468f9d9 222 /* FUNCTION NAME: SelectionStrat */
gabrieltetar 1:7e925468f9d9 223 /* DESCRIPTION : Affiche la Stratégie sélectionnée sur l'ihm */
gabrieltetar 1:7e925468f9d9 224 /****************************************************************************************/
gabrieltetar 1:7e925468f9d9 225
gabrieltetar 1:7e925468f9d9 226
gabrieltetar 1:7e925468f9d9 227 void SelectionStrat (unsigned char Strategie)
gabrieltetar 1:7e925468f9d9 228 {
gabrieltetar 1:7e925468f9d9 229 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 230 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 1:7e925468f9d9 231
gabrieltetar 1:7e925468f9d9 232 switch (Strategie+1) {
gabrieltetar 1:7e925468f9d9 233 case 0x1 :
gabrieltetar 1:7e925468f9d9 234 //description de Strategie n°1
gabrieltetar 1:7e925468f9d9 235 lcd.DisplayStringAt(150, 0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
gabrieltetar 1:7e925468f9d9 236 break;
gabrieltetar 1:7e925468f9d9 237
gabrieltetar 1:7e925468f9d9 238 case 0x2 :
gabrieltetar 1:7e925468f9d9 239 //description de Strategie n°2
gabrieltetar 1:7e925468f9d9 240 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
gabrieltetar 1:7e925468f9d9 241 break;
gabrieltetar 1:7e925468f9d9 242
gabrieltetar 1:7e925468f9d9 243 case 0x3 :
gabrieltetar 1:7e925468f9d9 244 //description de Strategie n°3
gabrieltetar 1:7e925468f9d9 245 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
gabrieltetar 1:7e925468f9d9 246 break;
gabrieltetar 1:7e925468f9d9 247
gabrieltetar 1:7e925468f9d9 248 case 0x4 :
gabrieltetar 1:7e925468f9d9 249 //description de Strategie n°4
gabrieltetar 1:7e925468f9d9 250 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
gabrieltetar 1:7e925468f9d9 251 break;
gabrieltetar 1:7e925468f9d9 252
gabrieltetar 1:7e925468f9d9 253 case 0x5 :
gabrieltetar 1:7e925468f9d9 254 //description de Strategie n°5
gabrieltetar 1:7e925468f9d9 255 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
gabrieltetar 1:7e925468f9d9 256 break;
gabrieltetar 1:7e925468f9d9 257
gabrieltetar 1:7e925468f9d9 258 case 0x6 :
gabrieltetar 1:7e925468f9d9 259 //description de Strategie n°5
gabrieltetar 1:7e925468f9d9 260 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
gabrieltetar 1:7e925468f9d9 261 break;
gabrieltetar 1:7e925468f9d9 262
gabrieltetar 1:7e925468f9d9 263 case 0x7 :
gabrieltetar 1:7e925468f9d9 264 //description de Strategie n°5
gabrieltetar 1:7e925468f9d9 265 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
gabrieltetar 1:7e925468f9d9 266 break;
gabrieltetar 1:7e925468f9d9 267
gabrieltetar 1:7e925468f9d9 268 case 0x8 :
gabrieltetar 1:7e925468f9d9 269 //description de Strategie n°5
gabrieltetar 1:7e925468f9d9 270 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
gabrieltetar 1:7e925468f9d9 271 break;
gabrieltetar 1:7e925468f9d9 272
gabrieltetar 1:7e925468f9d9 273 case 0x9 :
gabrieltetar 1:7e925468f9d9 274 //description de Strategie n°5
gabrieltetar 1:7e925468f9d9 275 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
gabrieltetar 1:7e925468f9d9 276 break;
gabrieltetar 1:7e925468f9d9 277
gabrieltetar 1:7e925468f9d9 278 case 0xA :
gabrieltetar 1:7e925468f9d9 279 //description de Strategie n°5
gabrieltetar 1:7e925468f9d9 280 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
gabrieltetar 1:7e925468f9d9 281 break;
gabrieltetar 1:7e925468f9d9 282 }
gabrieltetar 1:7e925468f9d9 283 }
gabrieltetar 1:7e925468f9d9 284
gabrieltetar 1:7e925468f9d9 285 void Setflag(void)
gabrieltetar 1:7e925468f9d9 286 {
gabrieltetar 10:1964bb91b925 287 flagSendCan = 1;//gab le zgeg
gabrieltetar 1:7e925468f9d9 288 }
gabrieltetar 1:7e925468f9d9 289
gabrieltetar 1:7e925468f9d9 290
gabrieltetar 1:7e925468f9d9 291 //Affiche une variable sur l'écran tactile//
gabrieltetar 1:7e925468f9d9 292 void affichage_var(double Var)
gabrieltetar 1:7e925468f9d9 293 {
gabrieltetar 1:7e925468f9d9 294 if(ligne==7)
gabrieltetar 1:7e925468f9d9 295 ligne=0;
gabrieltetar 1:7e925468f9d9 296 char aff[10]="toto";
gabrieltetar 1:7e925468f9d9 297 sprintf(aff,"%lf ",Var);
gabrieltetar 1:7e925468f9d9 298 lcd.DisplayStringAt(120, LINE(20+(ligne)), (uint8_t *)aff, LEFT_MODE);
gabrieltetar 1:7e925468f9d9 299 //ligne++;
gabrieltetar 1:7e925468f9d9 300
gabrieltetar 1:7e925468f9d9 301 }
gabrieltetar 1:7e925468f9d9 302
gabrieltetar 1:7e925468f9d9 303
gabrieltetar 1:7e925468f9d9 304 /****************************************************************************************/
gabrieltetar 1:7e925468f9d9 305 /* FUNCTION NAME: affichage_debug */
gabrieltetar 1:7e925468f9d9 306 /* DESCRIPTION : Affiche l'état de gameEtat sur l'écran lcd */
gabrieltetar 1:7e925468f9d9 307 /****************************************************************************************/
gabrieltetar 1:7e925468f9d9 308 void affichage_debug(int Var)
gabrieltetar 1:7e925468f9d9 309 {
gabrieltetar 1:7e925468f9d9 310 int i;
gabrieltetar 1:7e925468f9d9 311 int conv=(int)Var;
gabrieltetar 1:7e925468f9d9 312 SUIVANT.Draw(ROUGE, 0);
gabrieltetar 1:7e925468f9d9 313 for(i=0; i<9; i++) {
gabrieltetar 1:7e925468f9d9 314 strcpy(tableau_aff[i],"");
gabrieltetar 1:7e925468f9d9 315 strcpy(tableau_aff[i],tableau_aff[i+1]);
gabrieltetar 1:7e925468f9d9 316 }
gabrieltetar 1:7e925468f9d9 317 strcpy(tableau_aff[9],tableau_etat[conv]);
gabrieltetar 1:7e925468f9d9 318
gabrieltetar 1:7e925468f9d9 319 for(i=0; i<10; i++) {
gabrieltetar 1:7e925468f9d9 320 lcd.SetBackColor(VERT);
gabrieltetar 1:7e925468f9d9 321 lcd.DisplayStringAt(0, LINE(20+i), (uint8_t *)tableau_aff[i], LEFT_MODE);
gabrieltetar 1:7e925468f9d9 322 }
gabrieltetar 1:7e925468f9d9 323 /*while(!ack_bluetooth){ // mode pas à pas en bluetooth ou via écran
gabrieltetar 1:7e925468f9d9 324 //liaison_bluetooth();
gabrieltetar 1:7e925468f9d9 325 }
gabrieltetar 1:7e925468f9d9 326 ack_bluetooth=0;*/
gabrieltetar 1:7e925468f9d9 327 /*while(SUIVANT.Touched()==0);
gabrieltetar 1:7e925468f9d9 328 while(SUIVANT.Touched());*/
gabrieltetar 1:7e925468f9d9 329 }
gabrieltetar 1:7e925468f9d9 330
gabrieltetar 1:7e925468f9d9 331 /****************************************************************************************/
gabrieltetar 1:7e925468f9d9 332 /* FUNCTION NAME: automate_etat_ihm */
gabrieltetar 1:7e925468f9d9 333 /* DESCRIPTION : Automate de gestion de l'affichage */
gabrieltetar 1:7e925468f9d9 334 /****************************************************************************************/
gabrieltetar 1:7e925468f9d9 335 void automate_etat_ihm(void)
gabrieltetar 1:7e925468f9d9 336 {
gabrieltetar 10:1964bb91b925 337 char toto[2];
gabrieltetar 1:7e925468f9d9 338 int j;
gabrieltetar 10:1964bb91b925 339 unsigned char maximilien=1;
gabrieltetar 1:7e925468f9d9 340 if (j==0) {
gabrieltetar 1:7e925468f9d9 341 ts.Init(lcd.GetXSize(), lcd.GetYSize());
gabrieltetar 1:7e925468f9d9 342 j++;
gabrieltetar 1:7e925468f9d9 343 }
gabrieltetar 1:7e925468f9d9 344 ts.GetState(&TS_State);
gabrieltetar 1:7e925468f9d9 345 switch (etat) {
gabrieltetar 1:7e925468f9d9 346 case INIT : //intialise l'écran et passe à l'attente d'initialisation des cartes
gabrieltetar 1:7e925468f9d9 347 ts.GetState(&TS_State);
gabrieltetar 1:7e925468f9d9 348 canProcessRx();
gabrieltetar 1:7e925468f9d9 349 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 350 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 1:7e925468f9d9 351 lcd.Clear (LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 352 wait(0.15);
gabrieltetar 1:7e925468f9d9 353 lcd.DisplayStringAt(0, 10, (uint8_t *)"Verification des cartes", LEFT_MODE);
gabrieltetar 1:7e925468f9d9 354 //cartes non verifiées////////////////
gabrieltetar 1:7e925468f9d9 355 lcd.SetTextColor(DIY_GREY);
gabrieltetar 1:7e925468f9d9 356 lcd.FillRect(0,400,400,150); //carte moteur
gabrieltetar 1:7e925468f9d9 357 lcd.FillRect(0,600,400,150); //Balise
gabrieltetar 1:7e925468f9d9 358 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 1:7e925468f9d9 359 lcd.SetBackColor(DIY_GREY);
gabrieltetar 1:7e925468f9d9 360 lcd.DisplayStringAt(80, 450, (uint8_t *)"Carte Moteur", LEFT_MODE);
gabrieltetar 1:7e925468f9d9 361 lcd.DisplayStringAt(110,650, (uint8_t *)"Balise", LEFT_MODE);
gabrieltetar 1:7e925468f9d9 362 ////////////////////////////////////////
gabrieltetar 1:7e925468f9d9 363 FORCE_LAUNCH.Draw(0xFFFF0000, 0);
gabrieltetar 1:7e925468f9d9 364
gabrieltetar 1:7e925468f9d9 365 etat=ATT;
gabrieltetar 1:7e925468f9d9 366 break;
gabrieltetar 1:7e925468f9d9 367
gabrieltetar 1:7e925468f9d9 368 case ATT : //Si les cartes sont présentes passe directement à choix sinon attente de force Launch (cette partie est encore buggée mais les cartes affichent bien leur présence donc faut juste force launch tout le temps...)
gabrieltetar 1:7e925468f9d9 369 if (flag==1) {
gabrieltetar 1:7e925468f9d9 370 etat = CHOIX;
gabrieltetar 1:7e925468f9d9 371 gameEtat = ETAT_CONFIG;
gabrieltetar 1:7e925468f9d9 372 } else if (FORCE_LAUNCH.Touched()) {
gabrieltetar 1:7e925468f9d9 373 etat = CHOIX;
gabrieltetar 1:7e925468f9d9 374 gameEtat = ETAT_CONFIG;
gabrieltetar 1:7e925468f9d9 375 while(FORCE_LAUNCH.Touched());
gabrieltetar 1:7e925468f9d9 376 }
gabrieltetar 1:7e925468f9d9 377
gabrieltetar 1:7e925468f9d9 378 break;
gabrieltetar 1:7e925468f9d9 379
gabrieltetar 1:7e925468f9d9 380
gabrieltetar 1:7e925468f9d9 381 case CHOIX : //Match ou DEMO
gabrieltetar 1:7e925468f9d9 382 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 383 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 1:7e925468f9d9 384 lcd.Clear (LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 385 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Match ou demonstration ?", LEFT_MODE);
gabrieltetar 1:7e925468f9d9 386 DEMONSTRATION.Draw(LCD_COLOR_LIGHTGREEN, 0);
gabrieltetar 1:7e925468f9d9 387 MATCH.Draw(0xFFF01010, 0);
gabrieltetar 1:7e925468f9d9 388 while(etat == CHOIX) {
gabrieltetar 1:7e925468f9d9 389 canProcessRx();
gabrieltetar 1:7e925468f9d9 390 if(DEMONSTRATION.Touched()) {
gabrieltetar 1:7e925468f9d9 391 etat = DEMO;
gabrieltetar 1:7e925468f9d9 392 while(DEMONSTRATION.Touched());
gabrieltetar 1:7e925468f9d9 393 }
gabrieltetar 1:7e925468f9d9 394
gabrieltetar 1:7e925468f9d9 395 if(MATCH.Touched()) {
gabrieltetar 1:7e925468f9d9 396 etat = SELECT_SIDE;
gabrieltetar 1:7e925468f9d9 397 while(MATCH.Touched());
gabrieltetar 1:7e925468f9d9 398 }
gabrieltetar 1:7e925468f9d9 399
gabrieltetar 1:7e925468f9d9 400 }
gabrieltetar 1:7e925468f9d9 401 break;
gabrieltetar 1:7e925468f9d9 402
gabrieltetar 1:7e925468f9d9 403 case DEMO :
gabrieltetar 10:1964bb91b925 404 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 10:1964bb91b925 405 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 7:44eec996a76e 406 lcd.Clear (LCD_COLOR_WHITE);
gabrieltetar 7:44eec996a76e 407 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"DEMO", LEFT_MODE);
gabrieltetar 1:7e925468f9d9 408 RETOUR.Draw(0xFFFF0000, 0);
gabrieltetar 7:44eec996a76e 409 TEST_VENT.Draw(VERT, 0);
gabrieltetar 14:6aa8aa1699ad 410 TEST_MOT.Draw(VERT, 0);
gabrieltetar 7:44eec996a76e 411 TEST_COUL.Draw(VERT, 0);
gabrieltetar 7:44eec996a76e 412 TEST_BRAS.Draw(VERT, 0);
gabrieltetar 10:1964bb91b925 413 TEST_AUDIO.Draw(VERT, 0);
gabrieltetar 10:1964bb91b925 414 TEST_ELECTRV.Draw(VERT, 0);
gabrieltetar 14:6aa8aa1699ad 415 maximilien=0;
gabrieltetar 7:44eec996a76e 416 while (etat == DEMO) {
gabrieltetar 1:7e925468f9d9 417 canProcessRx();
gabrieltetar 7:44eec996a76e 418 if(TEST_VENT.Touched()) {
gabrieltetar 7:44eec996a76e 419 while(TEST_VENT.Touched());
gabrieltetar 7:44eec996a76e 420 etat = TEST_VENTOUSE;
gabrieltetar 14:6aa8aa1699ad 421 } else if(TEST_MOT.Touched()) {
gabrieltetar 14:6aa8aa1699ad 422 while(TEST_MOT.Touched());
gabrieltetar 14:6aa8aa1699ad 423 etat = TEST_MOTEUR;
gabrieltetar 10:1964bb91b925 424 } else if(TEST_ELECTRV.Touched()) {
gabrieltetar 10:1964bb91b925 425 while(TEST_ELECTRV.Touched());
gabrieltetar 10:1964bb91b925 426 etat = TEST_ELECTROV;
gabrieltetar 7:44eec996a76e 427 } else if (TEST_COUL.Touched()) {
gabrieltetar 7:44eec996a76e 428 while(TEST_COUL.Touched());
gabrieltetar 7:44eec996a76e 429 etat =TEST_COULEUR ;
gabrieltetar 7:44eec996a76e 430 } else if (TEST_BRAS.Touched()) {
gabrieltetar 7:44eec996a76e 431 while(TEST_BRAS.Touched());
gabrieltetar 7:44eec996a76e 432 etat =TEST_SERVO_BRAS ;
gabrieltetar 10:1964bb91b925 433 } else if(TEST_AUDIO.Touched()) {
gabrieltetar 10:1964bb91b925 434 while(TEST_AUDIO.Touched());
gabrieltetar 14:6aa8aa1699ad 435 etat=TEST_AUD;
gabrieltetar 7:44eec996a76e 436 } else if(RETOUR.Touched()) {
gabrieltetar 7:44eec996a76e 437 while(RETOUR.Touched());
gabrieltetar 1:7e925468f9d9 438 etat = CHOIX;
gabrieltetar 1:7e925468f9d9 439 }
gabrieltetar 1:7e925468f9d9 440 }
gabrieltetar 1:7e925468f9d9 441 break;
gabrieltetar 1:7e925468f9d9 442
gabrieltetar 1:7e925468f9d9 443
gabrieltetar 10:1964bb91b925 444 case TEST_VENTOUSE:
gabrieltetar 10:1964bb91b925 445 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 10:1964bb91b925 446 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 10:1964bb91b925 447 lcd.Clear (LCD_COLOR_WHITE);
gabrieltetar 7:44eec996a76e 448 lcd.Clear (LCD_COLOR_WHITE);
gabrieltetar 7:44eec996a76e 449 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Test Ventouse", LEFT_MODE);
gabrieltetar 10:1964bb91b925 450 sprintf(toto,"%hd",maximilien);
gabrieltetar 10:1964bb91b925 451 lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE);
gabrieltetar 1:7e925468f9d9 452 RETOUR.Draw(0xFFFF0000,0);
gabrieltetar 10:1964bb91b925 453 TEST_A.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 454 TEST_NUM.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 455 TEST_PLUS.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 456 TEST_MOINS.Draw(BLEU, BLANC);
gabrieltetar 11:848ea39838bf 457 while(etat==TEST_VENTOUSE) {
gabrieltetar 7:44eec996a76e 458 if(RETOUR.Touched()) {
gabrieltetar 7:44eec996a76e 459 while (RETOUR.Touched());
gabrieltetar 7:44eec996a76e 460 etat=DEMO;
gabrieltetar 10:1964bb91b925 461 } else if(TEST_A.Touched()) {
gabrieltetar 10:1964bb91b925 462 while (TEST_A.Touched());
gabrieltetar 14:6aa8aa1699ad 463 //SendRawId(TEST_VENT_A);
gabrieltetar 10:1964bb91b925 464 TEST_A.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 465 } else if(TEST_NUM.Touched()) {
gabrieltetar 10:1964bb91b925 466 while (TEST_NUM.Touched());
gabrieltetar 10:1964bb91b925 467 TEST_NUM.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 468 switch(maximilien){
gabrieltetar 10:1964bb91b925 469 case 1:
gabrieltetar 14:6aa8aa1699ad 470 //SendRawId(TEST_VENT_1);
gabrieltetar 10:1964bb91b925 471 break;
gabrieltetar 10:1964bb91b925 472 case 2:
gabrieltetar 14:6aa8aa1699ad 473 //SendRawId(TEST_VENT_2);
gabrieltetar 10:1964bb91b925 474 break;
gabrieltetar 10:1964bb91b925 475 case 3:
gabrieltetar 14:6aa8aa1699ad 476 //SendRawId(TEST_VENT_3);
gabrieltetar 10:1964bb91b925 477 break;
gabrieltetar 10:1964bb91b925 478 case 4:
gabrieltetar 14:6aa8aa1699ad 479 //SendRawId(TEST_VENT_4);
gabrieltetar 10:1964bb91b925 480 break;
gabrieltetar 10:1964bb91b925 481 case 5:
gabrieltetar 14:6aa8aa1699ad 482 //SendRawId(TEST_VENT_5);
gabrieltetar 10:1964bb91b925 483 break;
gabrieltetar 10:1964bb91b925 484 case 6:
gabrieltetar 14:6aa8aa1699ad 485 //SendRawId(TEST_VENT_6);
gabrieltetar 10:1964bb91b925 486 break;
gabrieltetar 10:1964bb91b925 487 }
gabrieltetar 10:1964bb91b925 488 } else if(TEST_PLUS.Touched()) {
gabrieltetar 10:1964bb91b925 489 while (TEST_PLUS.Touched());
gabrieltetar 10:1964bb91b925 490 TEST_PLUS.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 491 if(maximilien!=6)maximilien++;
gabrieltetar 10:1964bb91b925 492 sprintf(toto,"%hd",maximilien);
gabrieltetar 10:1964bb91b925 493 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 10:1964bb91b925 494 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 10:1964bb91b925 495 lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE);
gabrieltetar 10:1964bb91b925 496 } else if(TEST_MOINS.Touched()) {
gabrieltetar 10:1964bb91b925 497 while (TEST_MOINS.Touched());
gabrieltetar 10:1964bb91b925 498 TEST_MOINS.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 499 if(maximilien!=1)maximilien--;
gabrieltetar 10:1964bb91b925 500 sprintf(toto,"%hd",maximilien);
gabrieltetar 10:1964bb91b925 501 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 10:1964bb91b925 502 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 10:1964bb91b925 503 lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE);
gabrieltetar 10:1964bb91b925 504 }
gabrieltetar 7:44eec996a76e 505 }
gabrieltetar 7:44eec996a76e 506 break;
gabrieltetar 10:1964bb91b925 507
gabrieltetar 10:1964bb91b925 508 case TEST_ELECTROV:
gabrieltetar 10:1964bb91b925 509 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 10:1964bb91b925 510 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 10:1964bb91b925 511 lcd.Clear (LCD_COLOR_WHITE);
gabrieltetar 7:44eec996a76e 512 lcd.Clear (LCD_COLOR_WHITE);
gabrieltetar 14:6aa8aa1699ad 513 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"A : Manches B : Pavillon", LEFT_MODE);
gabrieltetar 7:44eec996a76e 514 RETOUR.Draw(0xFFFF0000,0);
gabrieltetar 10:1964bb91b925 515 TEST_A.Draw(BLEU, BLANC);
gabrieltetar 14:6aa8aa1699ad 516 TEST_B.Draw(BLEU, BLANC);
gabrieltetar 11:848ea39838bf 517 while(etat==TEST_ELECTROV) {
gabrieltetar 1:7e925468f9d9 518 if(RETOUR.Touched()) {
gabrieltetar 1:7e925468f9d9 519 while (RETOUR.Touched());
gabrieltetar 1:7e925468f9d9 520 etat=DEMO;
gabrieltetar 10:1964bb91b925 521 } else if(TEST_A.Touched()) {
gabrieltetar 10:1964bb91b925 522 while (TEST_A.Touched());
gabrieltetar 14:6aa8aa1699ad 523 //SendRawId(TEST_ELECTROV_A);
gabrieltetar 10:1964bb91b925 524 TEST_A.Draw(BLEU, BLANC);
gabrieltetar 14:6aa8aa1699ad 525 } else if(TEST_B.Touched()) {
gabrieltetar 14:6aa8aa1699ad 526 while (TEST_B.Touched());
gabrieltetar 14:6aa8aa1699ad 527 //SendRawId(TEST_ELECTROV_A);
gabrieltetar 14:6aa8aa1699ad 528 TEST_B.Draw(BLEU, BLANC);
gabrieltetar 14:6aa8aa1699ad 529 }
gabrieltetar 14:6aa8aa1699ad 530 }
gabrieltetar 14:6aa8aa1699ad 531 break;
gabrieltetar 14:6aa8aa1699ad 532
gabrieltetar 14:6aa8aa1699ad 533 case TEST_AUD:
gabrieltetar 14:6aa8aa1699ad 534
gabrieltetar 14:6aa8aa1699ad 535 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 14:6aa8aa1699ad 536 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 14:6aa8aa1699ad 537 lcd.Clear (LCD_COLOR_WHITE);
gabrieltetar 14:6aa8aa1699ad 538 lcd.Clear (LCD_COLOR_WHITE);
gabrieltetar 14:6aa8aa1699ad 539 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Test Audio", LEFT_MODE);
gabrieltetar 14:6aa8aa1699ad 540 sprintf(toto,"%hd",maximilien);
gabrieltetar 14:6aa8aa1699ad 541 lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE);
gabrieltetar 14:6aa8aa1699ad 542 RETOUR.Draw(0xFFFF0000,0);
gabrieltetar 14:6aa8aa1699ad 543 TEST_NUM.Draw(BLEU, BLANC);
gabrieltetar 14:6aa8aa1699ad 544 TEST_PLUS.Draw(BLEU, BLANC);
gabrieltetar 14:6aa8aa1699ad 545 TEST_MOINS.Draw(BLEU, BLANC);
gabrieltetar 14:6aa8aa1699ad 546 while(etat==TEST_AUD) {
gabrieltetar 14:6aa8aa1699ad 547 if(RETOUR.Touched()) {
gabrieltetar 14:6aa8aa1699ad 548 while (RETOUR.Touched());
gabrieltetar 14:6aa8aa1699ad 549 etat=DEMO;
gabrieltetar 10:1964bb91b925 550 } else if(TEST_NUM.Touched()) {
gabrieltetar 10:1964bb91b925 551 while (TEST_NUM.Touched());
gabrieltetar 10:1964bb91b925 552 TEST_NUM.Draw(BLEU, BLANC);
gabrieltetar 14:6aa8aa1699ad 553 Debug_Audio(3,maximilien);
gabrieltetar 10:1964bb91b925 554 } else if(TEST_PLUS.Touched()) {
gabrieltetar 10:1964bb91b925 555 while (TEST_PLUS.Touched());
gabrieltetar 10:1964bb91b925 556 TEST_PLUS.Draw(BLEU, BLANC);
gabrieltetar 14:6aa8aa1699ad 557 if(maximilien!=10)maximilien++;
gabrieltetar 10:1964bb91b925 558 sprintf(toto,"%hd",maximilien);
gabrieltetar 10:1964bb91b925 559 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 10:1964bb91b925 560 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 10:1964bb91b925 561 lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE);
gabrieltetar 10:1964bb91b925 562 } else if(TEST_MOINS.Touched()) {
gabrieltetar 10:1964bb91b925 563 while (TEST_MOINS.Touched());
gabrieltetar 10:1964bb91b925 564 TEST_MOINS.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 565 if(maximilien!=1)maximilien--;
gabrieltetar 10:1964bb91b925 566 sprintf(toto,"%hd",maximilien);
gabrieltetar 10:1964bb91b925 567 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 10:1964bb91b925 568 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 10:1964bb91b925 569 lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE);
gabrieltetar 10:1964bb91b925 570 }
gabrieltetar 10:1964bb91b925 571 }
gabrieltetar 10:1964bb91b925 572 break;
gabrieltetar 14:6aa8aa1699ad 573
gabrieltetar 10:1964bb91b925 574 case TEST_SERVO_BRAS:
gabrieltetar 10:1964bb91b925 575
gabrieltetar 10:1964bb91b925 576 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 10:1964bb91b925 577 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 10:1964bb91b925 578 lcd.Clear (LCD_COLOR_WHITE);
gabrieltetar 10:1964bb91b925 579 lcd.Clear (LCD_COLOR_WHITE);
gabrieltetar 10:1964bb91b925 580 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Test Bras", LEFT_MODE);
gabrieltetar 10:1964bb91b925 581 sprintf(toto,"%hd",maximilien);
gabrieltetar 10:1964bb91b925 582 lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE);
gabrieltetar 10:1964bb91b925 583 RETOUR.Draw(0xFFFF0000,0);
gabrieltetar 10:1964bb91b925 584 TEST_A.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 585 TEST_B.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 586 TEST_C.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 587 TEST_D.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 588 TEST_NUM.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 589 TEST_PLUS.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 590 TEST_MOINS.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 591 while(etat==TEST_SERVO_BRAS) {
gabrieltetar 10:1964bb91b925 592 if(RETOUR.Touched()) {
gabrieltetar 10:1964bb91b925 593 while (RETOUR.Touched());
gabrieltetar 10:1964bb91b925 594 etat=DEMO;
gabrieltetar 10:1964bb91b925 595 } else if(TEST_A.Touched()) {
gabrieltetar 10:1964bb91b925 596 while (TEST_A.Touched());
gabrieltetar 10:1964bb91b925 597 SendRawId(TEST_BRAS_A);
gabrieltetar 10:1964bb91b925 598 TEST_A.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 599 } else if(TEST_B.Touched()) {
gabrieltetar 10:1964bb91b925 600 while (TEST_B.Touched());
gabrieltetar 10:1964bb91b925 601 SendRawId(TEST_BRAS_B);
gabrieltetar 10:1964bb91b925 602 TEST_B.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 603 } else if(TEST_C.Touched()) {
gabrieltetar 10:1964bb91b925 604 while (TEST_C.Touched());
gabrieltetar 10:1964bb91b925 605 SendRawId(TEST_BRAS_C);
gabrieltetar 10:1964bb91b925 606 TEST_C.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 607 } else if(TEST_D.Touched()) {
gabrieltetar 10:1964bb91b925 608 while (TEST_D.Touched());
gabrieltetar 10:1964bb91b925 609 SendRawId(TEST_BRAS_D);
gabrieltetar 10:1964bb91b925 610 TEST_D.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 611 } else if(TEST_NUM.Touched()) {
gabrieltetar 10:1964bb91b925 612 while (TEST_NUM.Touched());
gabrieltetar 10:1964bb91b925 613 TEST_NUM.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 614 switch(maximilien){
gabrieltetar 10:1964bb91b925 615 case 1:
gabrieltetar 10:1964bb91b925 616 SendRawId(TEST_BRAS_1);
gabrieltetar 10:1964bb91b925 617 break;
gabrieltetar 10:1964bb91b925 618 case 2:
gabrieltetar 10:1964bb91b925 619 SendRawId(TEST_BRAS_2);
gabrieltetar 10:1964bb91b925 620 break;
gabrieltetar 10:1964bb91b925 621 case 3:
gabrieltetar 10:1964bb91b925 622 SendRawId(TEST_BRAS_3);
gabrieltetar 10:1964bb91b925 623 break;
gabrieltetar 10:1964bb91b925 624 case 4:
gabrieltetar 10:1964bb91b925 625 SendRawId(TEST_BRAS_4);
gabrieltetar 10:1964bb91b925 626 break;
gabrieltetar 10:1964bb91b925 627 case 5:
gabrieltetar 10:1964bb91b925 628 SendRawId(TEST_BRAS_5);
gabrieltetar 10:1964bb91b925 629 break;
gabrieltetar 10:1964bb91b925 630 case 6:
gabrieltetar 10:1964bb91b925 631 SendRawId(TEST_BRAS_6);
gabrieltetar 10:1964bb91b925 632 break;
gabrieltetar 10:1964bb91b925 633 }
gabrieltetar 10:1964bb91b925 634 } else if(TEST_PLUS.Touched()) {
gabrieltetar 10:1964bb91b925 635 while (TEST_PLUS.Touched());
gabrieltetar 10:1964bb91b925 636 TEST_PLUS.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 637 if(maximilien!=6)maximilien++;
gabrieltetar 10:1964bb91b925 638 sprintf(toto,"%hd",maximilien);
gabrieltetar 10:1964bb91b925 639 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 10:1964bb91b925 640 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 10:1964bb91b925 641 lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE);
gabrieltetar 10:1964bb91b925 642 } else if(TEST_MOINS.Touched()) {
gabrieltetar 10:1964bb91b925 643 while (TEST_MOINS.Touched());
gabrieltetar 10:1964bb91b925 644 TEST_MOINS.Draw(BLEU, BLANC);
gabrieltetar 10:1964bb91b925 645 if(maximilien!=1)maximilien--;
gabrieltetar 10:1964bb91b925 646 sprintf(toto,"%hd",maximilien);
gabrieltetar 10:1964bb91b925 647 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 10:1964bb91b925 648 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 10:1964bb91b925 649 lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE);
gabrieltetar 1:7e925468f9d9 650 }
gabrieltetar 1:7e925468f9d9 651 }
gabrieltetar 1:7e925468f9d9 652 break;
gabrieltetar 7:44eec996a76e 653
gabrieltetar 7:44eec996a76e 654 case TEST_COULEUR:
gabrieltetar 7:44eec996a76e 655 lcd.Clear (LCD_COLOR_WHITE);
gabrieltetar 7:44eec996a76e 656 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Test Couleur", LEFT_MODE);
gabrieltetar 7:44eec996a76e 657 RETOUR.Draw(0xFFFF0000,0);
gabrieltetar 7:44eec996a76e 658 while(etat==TEST_COULEUR) {
gabrieltetar 7:44eec996a76e 659 if(RETOUR.Touched()) {
gabrieltetar 7:44eec996a76e 660 while (RETOUR.Touched());
gabrieltetar 7:44eec996a76e 661 etat=DEMO;
gabrieltetar 7:44eec996a76e 662 lcd.Clear (LCD_COLOR_WHITE);
gabrieltetar 7:44eec996a76e 663 }
gabrieltetar 7:44eec996a76e 664 }
gabrieltetar 1:7e925468f9d9 665 break;
gabrieltetar 1:7e925468f9d9 666
gabrieltetar 14:6aa8aa1699ad 667 case TEST_MOTEUR:
gabrieltetar 14:6aa8aa1699ad 668 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 14:6aa8aa1699ad 669 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 14:6aa8aa1699ad 670 lcd.Clear (LCD_COLOR_WHITE);
gabrieltetar 7:44eec996a76e 671 lcd.Clear (LCD_COLOR_WHITE);
gabrieltetar 14:6aa8aa1699ad 672 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Test Moteur", LEFT_MODE);
gabrieltetar 14:6aa8aa1699ad 673 RETOUR.Draw(0xFFFF0000,0);
gabrieltetar 14:6aa8aa1699ad 674 TEST_A.Draw(BLEU, BLANC);
gabrieltetar 14:6aa8aa1699ad 675 TEST_B.Draw(BLEU, BLANC);
gabrieltetar 14:6aa8aa1699ad 676 while(etat==TEST_MOTEUR) {
gabrieltetar 1:7e925468f9d9 677 if(RETOUR.Touched()) {
gabrieltetar 14:6aa8aa1699ad 678 while (RETOUR.Touched());
gabrieltetar 1:7e925468f9d9 679 etat=DEMO;
gabrieltetar 14:6aa8aa1699ad 680 } else if(TEST_A.Touched()) {
gabrieltetar 14:6aa8aa1699ad 681 while (TEST_A.Touched());
gabrieltetar 14:6aa8aa1699ad 682 BendRadius(150,1800,1,0);
gabrieltetar 14:6aa8aa1699ad 683 TEST_A.Draw(BLEU, BLANC);
gabrieltetar 14:6aa8aa1699ad 684 } else if(TEST_B.Touched()) {
gabrieltetar 14:6aa8aa1699ad 685 while (TEST_B.Touched());
gabrieltetar 14:6aa8aa1699ad 686 BendRadius(150,1800,0,0);
gabrieltetar 14:6aa8aa1699ad 687 TEST_B.Draw(BLEU, BLANC);
gabrieltetar 14:6aa8aa1699ad 688 }
gabrieltetar 1:7e925468f9d9 689 }
gabrieltetar 1:7e925468f9d9 690 break; ///////////////////////////////////////////FIN DES DEMOS/////////////////////////////////////////////////
gabrieltetar 1:7e925468f9d9 691
gabrieltetar 1:7e925468f9d9 692
gabrieltetar 1:7e925468f9d9 693 case SELECT_SIDE : // CHOIX DU COTE DU TERRAIN + INVERSION DE LA STRAT SI COTE ORANGE+ ENVOI DU COTE A LA CARTE CAPTEUR/ACTIONNEURS
gabrieltetar 1:7e925468f9d9 694 lcd.Clear(LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 695 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 696 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 1:7e925468f9d9 697
gabrieltetar 1:7e925468f9d9 698 lcd.DisplayStringAt(70, LINE(0), (uint8_t *)"Choisir le cote", LEFT_MODE);
gabrieltetar 1:7e925468f9d9 699 COTE_JAUNE.Draw(JAUNE, 0);
gabrieltetar 1:7e925468f9d9 700 COTE_VIOLET.Draw(VIOLET, 0);
gabrieltetar 1:7e925468f9d9 701 RETOUR.Draw(LCD_COLOR_RED, 0);
gabrieltetar 1:7e925468f9d9 702
gabrieltetar 1:7e925468f9d9 703
gabrieltetar 1:7e925468f9d9 704 while (etat == SELECT_SIDE) {
gabrieltetar 1:7e925468f9d9 705 canProcessRx();
gabrieltetar 1:7e925468f9d9 706 if(COTE_JAUNE.Touched()) {
gabrieltetar 1:7e925468f9d9 707 Cote = 0x0;
gabrieltetar 1:7e925468f9d9 708 InversStrat = Cote;
gabrieltetar 1:7e925468f9d9 709 etat = TACTIQUE;
gabrieltetar 1:7e925468f9d9 710 CANMessage trame_Tx = CANMessage();
gabrieltetar 1:7e925468f9d9 711 trame_Tx.len = 1;
gabrieltetar 1:7e925468f9d9 712 trame_Tx.format = CANStandard;
gabrieltetar 1:7e925468f9d9 713 trame_Tx.type = CANData;
gabrieltetar 1:7e925468f9d9 714 trame_Tx.id=CHOICE_COLOR;
gabrieltetar 1:7e925468f9d9 715 trame_Tx.data[0]=Cote;
gabrieltetar 1:7e925468f9d9 716 can2.write(trame_Tx);
gabrieltetar 1:7e925468f9d9 717 while(COTE_JAUNE.Touched());
gabrieltetar 1:7e925468f9d9 718
gabrieltetar 1:7e925468f9d9 719 }
gabrieltetar 1:7e925468f9d9 720
gabrieltetar 1:7e925468f9d9 721 if(COTE_VIOLET.Touched()) {
gabrieltetar 1:7e925468f9d9 722 Cote = 0x1;
gabrieltetar 1:7e925468f9d9 723 InversStrat= Cote;
gabrieltetar 1:7e925468f9d9 724 etat = TACTIQUE;
gabrieltetar 1:7e925468f9d9 725 CANMessage trame_Tx = CANMessage();
gabrieltetar 1:7e925468f9d9 726 trame_Tx.len = 1;
gabrieltetar 1:7e925468f9d9 727 trame_Tx.format = CANStandard;
gabrieltetar 1:7e925468f9d9 728 trame_Tx.type = CANData;
gabrieltetar 1:7e925468f9d9 729 trame_Tx.id=CHOICE_COLOR;
gabrieltetar 1:7e925468f9d9 730 trame_Tx.data[0]=Cote;
gabrieltetar 1:7e925468f9d9 731 can2.write(trame_Tx);
gabrieltetar 1:7e925468f9d9 732 while(COTE_VIOLET.Touched());
gabrieltetar 1:7e925468f9d9 733 }
gabrieltetar 1:7e925468f9d9 734
gabrieltetar 1:7e925468f9d9 735 if(RETOUR.Touched()) {
gabrieltetar 1:7e925468f9d9 736 etat = CHOIX;
gabrieltetar 1:7e925468f9d9 737 while(RETOUR.Touched());
gabrieltetar 1:7e925468f9d9 738 }
gabrieltetar 1:7e925468f9d9 739 }
gabrieltetar 1:7e925468f9d9 740
gabrieltetar 1:7e925468f9d9 741 break;
gabrieltetar 1:7e925468f9d9 742
gabrieltetar 1:7e925468f9d9 743 case TACTIQUE : //AFFICHE LA LISTE DES STRATS AFIN DE SELECTIONNER CELLE VOULUE
gabrieltetar 1:7e925468f9d9 744 if (Cote == 0) {
gabrieltetar 1:7e925468f9d9 745 lcd.Clear(JAUNE);
gabrieltetar 1:7e925468f9d9 746 lcd.SetBackColor(JAUNE);
gabrieltetar 1:7e925468f9d9 747 } else if (Cote == 1) {
gabrieltetar 1:7e925468f9d9 748 lcd.Clear(VIOLET);
gabrieltetar 1:7e925468f9d9 749 lcd.SetBackColor(VIOLET);
gabrieltetar 1:7e925468f9d9 750 } else {
gabrieltetar 1:7e925468f9d9 751 lcd.Clear(BLEU);
gabrieltetar 1:7e925468f9d9 752 lcd.SetBackColor(BLEU);
gabrieltetar 1:7e925468f9d9 753 }
gabrieltetar 1:7e925468f9d9 754
gabrieltetar 1:7e925468f9d9 755 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 1:7e925468f9d9 756
gabrieltetar 1:7e925468f9d9 757 lcd.DisplayStringAt(20, LINE(0), (uint8_t *)"Choisir une strategie", LEFT_MODE);
gabrieltetar 1:7e925468f9d9 758
gabrieltetar 1:7e925468f9d9 759 Strategie = Bouton_Strat(); // retourne valeur de Strategie si bouton strat renvoi -1 on reviens en arriere
gabrieltetar 1:7e925468f9d9 760 if (Strategie == -1) {
gabrieltetar 1:7e925468f9d9 761 etat = SELECT_SIDE;
gabrieltetar 1:7e925468f9d9 762 } else {
gabrieltetar 1:7e925468f9d9 763 etat = DETAILS;
gabrieltetar 1:7e925468f9d9 764 }
gabrieltetar 1:7e925468f9d9 765 wait(0.1);
gabrieltetar 1:7e925468f9d9 766 break;
gabrieltetar 1:7e925468f9d9 767
gabrieltetar 1:7e925468f9d9 768 case DETAILS : //SECONDE VALIDATION DE LA STRAT
gabrieltetar 1:7e925468f9d9 769 lcd.Clear(LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 770 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 771 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 1:7e925468f9d9 772 CHECK.Draw(VERT);
gabrieltetar 1:7e925468f9d9 773 RETOUR.Draw(LCD_COLOR_RED);
gabrieltetar 1:7e925468f9d9 774
gabrieltetar 1:7e925468f9d9 775 SelectionStrat(Strategie); //affiche la stratégie selectionnée
gabrieltetar 1:7e925468f9d9 776
gabrieltetar 1:7e925468f9d9 777 while (etat == DETAILS) {
gabrieltetar 1:7e925468f9d9 778 canProcessRx();
gabrieltetar 1:7e925468f9d9 779 if (CHECK.Touched()) {
gabrieltetar 1:7e925468f9d9 780 if(gameEtat == ETAT_CONFIG) {
gabrieltetar 1:7e925468f9d9 781 gameEtat = ETAT_GAME_INIT;
gabrieltetar 1:7e925468f9d9 782 etat=LECTURE;
gabrieltetar 1:7e925468f9d9 783
gabrieltetar 1:7e925468f9d9 784 }
gabrieltetar 1:7e925468f9d9 785 while(CHECK.Touched());
gabrieltetar 1:7e925468f9d9 786 }
gabrieltetar 1:7e925468f9d9 787
gabrieltetar 1:7e925468f9d9 788 if(RETOUR.Touched()) {
gabrieltetar 1:7e925468f9d9 789 etat = TACTIQUE;
gabrieltetar 1:7e925468f9d9 790 while(RETOUR.Touched());
gabrieltetar 1:7e925468f9d9 791 }
gabrieltetar 1:7e925468f9d9 792 }
gabrieltetar 1:7e925468f9d9 793 break;
gabrieltetar 1:7e925468f9d9 794
gabrieltetar 1:7e925468f9d9 795
gabrieltetar 1:7e925468f9d9 796 case LECTURE :
gabrieltetar 1:7e925468f9d9 797 break;
gabrieltetar 1:7e925468f9d9 798 case AFF_WAIT_JACK : //FONCTIONS D'AFFICHAGE DE L'ATTENTE DU JACK
gabrieltetar 1:7e925468f9d9 799 lcd.Clear(BLANC);
gabrieltetar 1:7e925468f9d9 800 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 801 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 1:7e925468f9d9 802
gabrieltetar 1:7e925468f9d9 803 if (Cote == 0) {
gabrieltetar 1:7e925468f9d9 804 lcd.Clear(VERT);
gabrieltetar 1:7e925468f9d9 805 lcd.SetBackColor(VERT);
gabrieltetar 1:7e925468f9d9 806 } else if (Cote == 1) {
gabrieltetar 1:7e925468f9d9 807 lcd.Clear(ORANGE);
gabrieltetar 1:7e925468f9d9 808 lcd.SetBackColor(ORANGE);
gabrieltetar 1:7e925468f9d9 809 } else {
gabrieltetar 1:7e925468f9d9 810 lcd.Clear(VERT);
gabrieltetar 1:7e925468f9d9 811 lcd.SetBackColor(VERT);
gabrieltetar 1:7e925468f9d9 812 }
gabrieltetar 1:7e925468f9d9 813 canProcessRx();
gabrieltetar 1:7e925468f9d9 814 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"En attente du Jack", CENTER_MODE);
gabrieltetar 1:7e925468f9d9 815 etat=WAIT_JACK;
gabrieltetar 1:7e925468f9d9 816 break;
gabrieltetar 1:7e925468f9d9 817
gabrieltetar 1:7e925468f9d9 818 case WAIT_JACK: //VERITABLE ATTENTE DU JACK
gabrieltetar 1:7e925468f9d9 819 break;
gabrieltetar 1:7e925468f9d9 820
gabrieltetar 1:7e925468f9d9 821 case COMPTEUR: //PEUT AFFICHER UN COMPTEUR DU TEMPS RESTANT AVANT LA FIN DE LA PARTIE OU BIEN TRES UTILE POUR PRINT DES VARIABLES CHAQUE SEC EX: gameEtat
gabrieltetar 1:7e925468f9d9 822 cptf=gameTimer.read();
gabrieltetar 1:7e925468f9d9 823 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 1:7e925468f9d9 824 cpt=(int)cptf;
gabrieltetar 1:7e925468f9d9 825 if(cpt != cpt1) {
gabrieltetar 1:7e925468f9d9 826 lcd.Clear(VERT);
gabrieltetar 1:7e925468f9d9 827 // affichage_compteur(100-cpt);
gabrieltetar 1:7e925468f9d9 828 //affichage_compteur(SCORE_PR);
gabrieltetar 1:7e925468f9d9 829 affichage_var(SCORE_PR);
gabrieltetar 1:7e925468f9d9 830 if(liaison_pr.paquet_en_attente()) {
gabrieltetar 1:7e925468f9d9 831 PaquetDomotique *paquet=liaison_pr.lire();
gabrieltetar 1:7e925468f9d9 832 if(paquet->identifiant==PAQUET_IDENTIFIANT_AJOUTERSCORE) {
gabrieltetar 1:7e925468f9d9 833 SCORE_PR+=convertir_score(paquet);
gabrieltetar 1:7e925468f9d9 834 }
gabrieltetar 1:7e925468f9d9 835 delete paquet;
gabrieltetar 1:7e925468f9d9 836 }
gabrieltetar 1:7e925468f9d9 837 }
gabrieltetar 1:7e925468f9d9 838 cpt1=cpt;
gabrieltetar 1:7e925468f9d9 839 flag_timer=0;
gabrieltetar 1:7e925468f9d9 840
gabrieltetar 1:7e925468f9d9 841 //affichage_debug(gameEtat);
gabrieltetar 1:7e925468f9d9 842 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 843
gabrieltetar 1:7e925468f9d9 844 break;
gabrieltetar 1:7e925468f9d9 845
gabrieltetar 1:7e925468f9d9 846 case FIN : //AFFICHAGE DE FIN AVEC LE SCORE FINAL
gabrieltetar 1:7e925468f9d9 847 lcd.Clear (LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 848 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 5:81aac085516f 849
gabrieltetar 1:7e925468f9d9 850 //affichage_compteur(SCORE_PR);
gabrieltetar 1:7e925468f9d9 851 affichage_var(SCORE_PR);
gabrieltetar 5:81aac085516f 852
gabrieltetar 1:7e925468f9d9 853 while(1); // force le redemarage du robot
gabrieltetar 1:7e925468f9d9 854 //break;
gabrieltetar 1:7e925468f9d9 855
gabrieltetar 1:7e925468f9d9 856 }
gabrieltetar 1:7e925468f9d9 857 }
gabrieltetar 1:7e925468f9d9 858
gabrieltetar 1:7e925468f9d9 859
gabrieltetar 1:7e925468f9d9 860
gabrieltetar 1:7e925468f9d9 861 /****************************************************************************************/
gabrieltetar 1:7e925468f9d9 862 /* FUNCTION NAME: automate_process */
gabrieltetar 1:7e925468f9d9 863 /* DESCRIPTION : Automate de gestion de la stratégie du robot */
gabrieltetar 1:7e925468f9d9 864 /****************************************************************************************/
gabrieltetar 1:7e925468f9d9 865 void automate_process(void)
gabrieltetar 1:7e925468f9d9 866 {
gabrieltetar 1:7e925468f9d9 867 static unsigned char AX12_enchainement = 0;
gabrieltetar 1:7e925468f9d9 868 static unsigned char MV_enchainement = 0;
gabrieltetar 1:7e925468f9d9 869 signed char localData1 = 0;
gabrieltetar 1:7e925468f9d9 870 signed short localData2 = 0;
gabrieltetar 1:7e925468f9d9 871 unsigned short localData3 = 0;
gabrieltetar 1:7e925468f9d9 872 //signed short localData4 = 0;
gabrieltetar 1:7e925468f9d9 873 unsigned char localData5 = 0;
gabrieltetar 1:7e925468f9d9 874
gabrieltetar 1:7e925468f9d9 875
gabrieltetar 1:7e925468f9d9 876 if(gameTimer.read_ms() >= 99000) {//Fin du match (On autorise 2s pour déposer des éléments
gabrieltetar 1:7e925468f9d9 877 gameTimer.stop();
gabrieltetar 1:7e925468f9d9 878 gameTimer.reset();
gabrieltetar 1:7e925468f9d9 879 gameEtat = ETAT_END;//Fin du temps
gabrieltetar 1:7e925468f9d9 880 etat=FIN;
gabrieltetar 1:7e925468f9d9 881 }
gabrieltetar 1:7e925468f9d9 882
gabrieltetar 1:7e925468f9d9 883 if(lastEtat != gameEtat || debugetatTimer.read_ms() >= 1000) {
gabrieltetar 1:7e925468f9d9 884 lastEtat = gameEtat;
gabrieltetar 1:7e925468f9d9 885 debugetatTimer.reset();
gabrieltetar 1:7e925468f9d9 886 sendStratEtat((unsigned char)gameEtat, (unsigned char)actual_instruction);
gabrieltetar 1:7e925468f9d9 887 }
gabrieltetar 1:7e925468f9d9 888
gabrieltetar 1:7e925468f9d9 889
gabrieltetar 1:7e925468f9d9 890
gabrieltetar 1:7e925468f9d9 891 switch(gameEtat) {
gabrieltetar 1:7e925468f9d9 892
gabrieltetar 1:7e925468f9d9 893 case ETAT_CHECK_CARTES:
gabrieltetar 1:7e925468f9d9 894 /*
gabrieltetar 1:7e925468f9d9 895 Il faut faire une boucle pour verifier toutes les cartes les une apres les autres
gabrieltetar 1:7e925468f9d9 896 */
gabrieltetar 1:7e925468f9d9 897 waitingAckFrom = id_alive[checkCurrent];//On indique que l'on attend un ack de la carte IHM
gabrieltetar 1:7e925468f9d9 898 SendRawId(id_check[checkCurrent]);//On demande à la carte d'indiquer ça présence
gabrieltetar 1:7e925468f9d9 899
gabrieltetar 1:7e925468f9d9 900 screenChecktry++;//On incrèment le conteur de tentative de 1
gabrieltetar 1:7e925468f9d9 901 cartesCheker.reset();//On reset le timeOut
gabrieltetar 1:7e925468f9d9 902 cartesCheker.start();//On lance le timer pour le timeout
gabrieltetar 1:7e925468f9d9 903 gameEtat = ETAT_CHECK_CARTES_WAIT_ACK;
gabrieltetar 1:7e925468f9d9 904 break;
gabrieltetar 1:7e925468f9d9 905
gabrieltetar 1:7e925468f9d9 906 case ETAT_CHECK_CARTES_WAIT_ACK:
gabrieltetar 1:7e925468f9d9 907 /*
gabrieltetar 1:7e925468f9d9 908 On attend l'ack de la carte en cours de vérification
gabrieltetar 1:7e925468f9d9 909 */
gabrieltetar 1:7e925468f9d9 910 //printf("cartesCheker = %d waitingAckFrom = %d\n",cartesCheker.read_ms(), waitingAckFrom);
gabrieltetar 1:7e925468f9d9 911 if(waitingAckFrom == 0) {//C'est bon la carte est en ligne
gabrieltetar 1:7e925468f9d9 912 cartesCheker.stop();
gabrieltetar 1:7e925468f9d9 913 screenChecktry = 0;
gabrieltetar 1:7e925468f9d9 914 countAliveCard++;
gabrieltetar 1:7e925468f9d9 915 checkCurrent++;
gabrieltetar 1:7e925468f9d9 916 if(checkCurrent >= NOMBRE_CARTES) {
gabrieltetar 1:7e925468f9d9 917 printf("all card check, missing %d cards\n",(NOMBRE_CARTES-countAliveCard));
gabrieltetar 1:7e925468f9d9 918 if(countAliveCard >= NOMBRE_CARTES) {
gabrieltetar 1:7e925468f9d9 919 gameEtat = ETAT_CONFIG;
gabrieltetar 1:7e925468f9d9 920 SendRawId(ECRAN_ALL_CHECK);
gabrieltetar 1:7e925468f9d9 921 flag=1;
gabrieltetar 1:7e925468f9d9 922
gabrieltetar 1:7e925468f9d9 923 //tactile_printf("Selection couleur et strategie");
gabrieltetar 1:7e925468f9d9 924 } else {
gabrieltetar 1:7e925468f9d9 925 gameEtat = ETAT_WAIT_FORCE;//Passage en attente de forçage du lancement
gabrieltetar 1:7e925468f9d9 926 waitingAckFrom = ECRAN_ALL_CHECK;
gabrieltetar 1:7e925468f9d9 927 }
gabrieltetar 1:7e925468f9d9 928 } else
gabrieltetar 1:7e925468f9d9 929 gameEtat = ETAT_CHECK_CARTES;
gabrieltetar 1:7e925468f9d9 930 } else if(cartesCheker.read_ms () > 100) {
gabrieltetar 1:7e925468f9d9 931 cartesCheker.stop();
gabrieltetar 1:7e925468f9d9 932 if(screenChecktry >=3) {
gabrieltetar 1:7e925468f9d9 933 //printf("missing card %d\n",id_check[checkCurrent]);
gabrieltetar 1:7e925468f9d9 934 screenChecktry = 0;
gabrieltetar 1:7e925468f9d9 935 checkCurrent++;
gabrieltetar 1:7e925468f9d9 936
gabrieltetar 1:7e925468f9d9 937 if(checkCurrent >= NOMBRE_CARTES) {
gabrieltetar 1:7e925468f9d9 938 if(countAliveCard == NOMBRE_CARTES) {
gabrieltetar 1:7e925468f9d9 939 gameEtat = ETAT_CONFIG;
gabrieltetar 1:7e925468f9d9 940 flag=1;
gabrieltetar 1:7e925468f9d9 941 } else {
gabrieltetar 1:7e925468f9d9 942 gameEtat = ETAT_WAIT_FORCE;
gabrieltetar 1:7e925468f9d9 943 waitingAckFrom = ECRAN_ALL_CHECK;
gabrieltetar 1:7e925468f9d9 944 }
gabrieltetar 1:7e925468f9d9 945 } else
gabrieltetar 1:7e925468f9d9 946 gameEtat = ETAT_CHECK_CARTES;
gabrieltetar 1:7e925468f9d9 947
gabrieltetar 1:7e925468f9d9 948 } else
gabrieltetar 1:7e925468f9d9 949 gameEtat = ETAT_CHECK_CARTES;
gabrieltetar 1:7e925468f9d9 950
gabrieltetar 1:7e925468f9d9 951 }
gabrieltetar 1:7e925468f9d9 952 break;
gabrieltetar 1:7e925468f9d9 953 case ETAT_WAIT_FORCE:
gabrieltetar 1:7e925468f9d9 954 /*
gabrieltetar 1:7e925468f9d9 955 Attente du forçage de la part de la carte IHM
gabrieltetar 1:7e925468f9d9 956 */
gabrieltetar 1:7e925468f9d9 957 if(waitingAckFrom == 0) {
gabrieltetar 1:7e925468f9d9 958 gameEtat = ETAT_CONFIG;
gabrieltetar 1:7e925468f9d9 959 }
gabrieltetar 1:7e925468f9d9 960 break;
gabrieltetar 1:7e925468f9d9 961 case ETAT_CONFIG:
gabrieltetar 1:7e925468f9d9 962 /*
gabrieltetar 1:7e925468f9d9 963 Attente de l'odre de choix de mode,
gabrieltetar 1:7e925468f9d9 964 Il est possible de modifier la couleur et l'id de la stratégie
gabrieltetar 1:7e925468f9d9 965 Il est aussi possible d'envoyer les ordres de debug
gabrieltetar 1:7e925468f9d9 966 */
gabrieltetar 1:7e925468f9d9 967 modeTelemetre = 0;
gabrieltetar 1:7e925468f9d9 968 break;
gabrieltetar 1:7e925468f9d9 969 case ETAT_GAME_INIT:
gabrieltetar 1:7e925468f9d9 970 //On charge la liste des instructions
gabrieltetar 1:7e925468f9d9 971
gabrieltetar 1:7e925468f9d9 972 loadAllInstruction(Strategie);//Mise en cache de toute les instructions
gabrieltetar 1:7e925468f9d9 973 led3=1;
gabrieltetar 1:7e925468f9d9 974
gabrieltetar 1:7e925468f9d9 975 SendRawId(GLOBAL_START);
gabrieltetar 1:7e925468f9d9 976
gabrieltetar 1:7e925468f9d9 977 gameEtat = ETAT_GAME_WAIT_FOR_JACK;
gabrieltetar 10:1964bb91b925 978 Debug_Audio(3,7);
gabrieltetar 14:6aa8aa1699ad 979 if (etat == TEST_MOTEUR|| etat ==TEST_VENTOUSE || etat == TEST_COULEUR || etat ==TEST_SERVO_BRAS) {
gabrieltetar 1:7e925468f9d9 980 SendRawId(DEBUG_FAKE_JAKE);
gabrieltetar 1:7e925468f9d9 981 } else {
gabrieltetar 1:7e925468f9d9 982 etat = AFF_WAIT_JACK;
gabrieltetar 1:7e925468f9d9 983 }
gabrieltetar 1:7e925468f9d9 984 //tactile_printf("Attente du JACK.");
gabrieltetar 1:7e925468f9d9 985 setAsservissementEtat(1);//On réactive l'asservissement
gabrieltetar 1:7e925468f9d9 986 jack.mode(PullDown); // désactivation de la résistance interne du jack
gabrieltetar 1:7e925468f9d9 987 jack.fall(&jack_ISR); // création de l'interrupt attachée au changement d'état (front descendant) sur le jack
gabrieltetar 1:7e925468f9d9 988
gabrieltetar 1:7e925468f9d9 989 localData2 = POSITION_DEBUT_T;
gabrieltetar 1:7e925468f9d9 990 localData3 = POSITION_DEBUT_Y;
gabrieltetar 1:7e925468f9d9 991 if(InversStrat == 1) {
gabrieltetar 1:7e925468f9d9 992 localData2 = -localData2;//Inversion theta
gabrieltetar 1:7e925468f9d9 993 localData3 = 3000 - POSITION_DEBUT_Y;//Inversion du Y
gabrieltetar 1:7e925468f9d9 994 }
gabrieltetar 1:7e925468f9d9 995 SetOdometrie(ODOMETRIE_SMALL_POSITION, POSITION_DEBUT_X,1800,localData2);
gabrieltetar 1:7e925468f9d9 996
gabrieltetar 1:7e925468f9d9 997 instruction = strat_instructions[actual_instruction];
gabrieltetar 1:7e925468f9d9 998 //On effectue le traitement de l'instruction
gabrieltetar 1:7e925468f9d9 999
gabrieltetar 1:7e925468f9d9 1000 break;
gabrieltetar 1:7e925468f9d9 1001 case ETAT_GAME_WAIT_FOR_JACK:
gabrieltetar 1:7e925468f9d9 1002 if(instruction.order==POSITION_DEBUT) {
gabrieltetar 1:7e925468f9d9 1003 switch(etat_pos) { // AUTOMATE PERMETTANT AU ROBOT DE SE POSITIONNER TOUT SEUL AU DEBUT DE LA PARTIE (Ne PAS RETIRER LE JACK PENDANT CE TEMPS !!!)
gabrieltetar 1:7e925468f9d9 1004 case RECALAGE_1:
gabrieltetar 1:7e925468f9d9 1005 SendRawId(RECALAGE_START);
gabrieltetar 1:7e925468f9d9 1006 waitingAckID = ASSERVISSEMENT_RECALAGE;
gabrieltetar 1:7e925468f9d9 1007 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
gabrieltetar 1:7e925468f9d9 1008 GoStraight(3000, 1,MOITIEE_ROBOT, 0); //on se recale contre le mur donc il faut donner la valeur du centre du robot (les -5 qui trainent sont dus au tables pourraves sur place)
gabrieltetar 1:7e925468f9d9 1009 while(waitingAckID !=0 && waitingAckFrom !=0)
gabrieltetar 1:7e925468f9d9 1010 canProcessRx();
gabrieltetar 1:7e925468f9d9 1011 waitingAckID_FIN=ASSERVISSEMENT_RECALAGE;
gabrieltetar 1:7e925468f9d9 1012 waitingAckFrom_FIN= INSTRUCTION_END_MOTEUR;
gabrieltetar 1:7e925468f9d9 1013 while(waitingAckID_FIN!=0 && waitingAckFrom_FIN !=0)
gabrieltetar 1:7e925468f9d9 1014 canProcessRx();
gabrieltetar 1:7e925468f9d9 1015 etat_pos=RECULER_1;
gabrieltetar 1:7e925468f9d9 1016 break;
gabrieltetar 1:7e925468f9d9 1017
gabrieltetar 1:7e925468f9d9 1018 case RECULER_1:
gabrieltetar 1:7e925468f9d9 1019 waitingAckID = ASSERVISSEMENT_RECALAGE;
gabrieltetar 1:7e925468f9d9 1020 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
gabrieltetar 1:7e925468f9d9 1021 GoStraight(-100, 0, 0, 0);//-450
gabrieltetar 1:7e925468f9d9 1022 while(waitingAckID !=0 && waitingAckFrom !=0)
gabrieltetar 1:7e925468f9d9 1023 canProcessRx();
gabrieltetar 1:7e925468f9d9 1024 waitingAckID_FIN=ASSERVISSEMENT_RECALAGE;
gabrieltetar 1:7e925468f9d9 1025 waitingAckFrom_FIN = INSTRUCTION_END_MOTEUR;
gabrieltetar 1:7e925468f9d9 1026 while(waitingAckID_FIN!=0 && waitingAckFrom_FIN !=0)
gabrieltetar 1:7e925468f9d9 1027 canProcessRx();
gabrieltetar 1:7e925468f9d9 1028 etat_pos=TOURNER;
gabrieltetar 1:7e925468f9d9 1029 break;
gabrieltetar 1:7e925468f9d9 1030
gabrieltetar 1:7e925468f9d9 1031 case TOURNER:
gabrieltetar 1:7e925468f9d9 1032 waitingAckID = ASSERVISSEMENT_ROTATION;
gabrieltetar 1:7e925468f9d9 1033 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
gabrieltetar 1:7e925468f9d9 1034 if(Cote==0) {
gabrieltetar 1:7e925468f9d9 1035 localData2 = 900;
gabrieltetar 1:7e925468f9d9 1036 } else {
gabrieltetar 1:7e925468f9d9 1037 localData2=-900;
gabrieltetar 1:7e925468f9d9 1038 }
gabrieltetar 1:7e925468f9d9 1039 Rotate(localData2);
gabrieltetar 1:7e925468f9d9 1040 while(waitingAckID !=0 && waitingAckFrom !=0)
gabrieltetar 1:7e925468f9d9 1041 canProcessRx();
gabrieltetar 1:7e925468f9d9 1042 waitingAckID_FIN=ASSERVISSEMENT_ROTATION;
gabrieltetar 1:7e925468f9d9 1043 waitingAckFrom_FIN = INSTRUCTION_END_MOTEUR;
gabrieltetar 1:7e925468f9d9 1044 while(waitingAckID_FIN!=0 && waitingAckFrom_FIN !=0)
gabrieltetar 1:7e925468f9d9 1045 canProcessRx();
gabrieltetar 1:7e925468f9d9 1046 etat_pos=RECALAGE_2;
gabrieltetar 1:7e925468f9d9 1047 break;
gabrieltetar 1:7e925468f9d9 1048
gabrieltetar 1:7e925468f9d9 1049 case RECALAGE_2:
gabrieltetar 1:7e925468f9d9 1050 waitingAckID = ASSERVISSEMENT_RECALAGE;
gabrieltetar 1:7e925468f9d9 1051 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
gabrieltetar 1:7e925468f9d9 1052 if(Cote==1) {
gabrieltetar 1:7e925468f9d9 1053 localData3=3000-(MOITIEE_ROBOT);
gabrieltetar 1:7e925468f9d9 1054 } else {
gabrieltetar 1:7e925468f9d9 1055 localData3=MOITIEE_ROBOT;
gabrieltetar 1:7e925468f9d9 1056 }
gabrieltetar 1:7e925468f9d9 1057 GoStraight(3000, 2,localData3, 0); //on se recale contre le mur donc il faut donner la valeur du centre du robot
gabrieltetar 1:7e925468f9d9 1058 while(waitingAckID !=0 && waitingAckFrom !=0)
gabrieltetar 1:7e925468f9d9 1059 canProcessRx();
gabrieltetar 1:7e925468f9d9 1060 waitingAckID_FIN=ASSERVISSEMENT_RECALAGE;
gabrieltetar 1:7e925468f9d9 1061 waitingAckFrom_FIN = INSTRUCTION_END_MOTEUR;
gabrieltetar 1:7e925468f9d9 1062 while(waitingAckID_FIN!=0 && waitingAckFrom_FIN !=0)
gabrieltetar 1:7e925468f9d9 1063 canProcessRx();
gabrieltetar 1:7e925468f9d9 1064 etat_pos=RECULER_2;
gabrieltetar 1:7e925468f9d9 1065 break;
gabrieltetar 1:7e925468f9d9 1066
gabrieltetar 1:7e925468f9d9 1067 case RECULER_2:
gabrieltetar 1:7e925468f9d9 1068 waitingAckID = ASSERVISSEMENT_RECALAGE;
gabrieltetar 1:7e925468f9d9 1069 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
gabrieltetar 1:7e925468f9d9 1070 GoStraight(-100, 0, 0, 0);
gabrieltetar 1:7e925468f9d9 1071 while(waitingAckID !=0 && waitingAckFrom !=0)
gabrieltetar 1:7e925468f9d9 1072 canProcessRx();
gabrieltetar 1:7e925468f9d9 1073 waitingAckID_FIN=ASSERVISSEMENT_RECALAGE;
gabrieltetar 1:7e925468f9d9 1074 waitingAckFrom_FIN = INSTRUCTION_END_MOTEUR;
gabrieltetar 1:7e925468f9d9 1075 while(waitingAckID_FIN!=0 && waitingAckFrom_FIN !=0)
gabrieltetar 1:7e925468f9d9 1076 canProcessRx();
gabrieltetar 1:7e925468f9d9 1077 etat_pos=GOTOPOS;
gabrieltetar 1:7e925468f9d9 1078 break;
gabrieltetar 1:7e925468f9d9 1079
gabrieltetar 1:7e925468f9d9 1080 case GOTOPOS:
gabrieltetar 1:7e925468f9d9 1081 localData1 = -1;
gabrieltetar 1:7e925468f9d9 1082
gabrieltetar 1:7e925468f9d9 1083 if(InversStrat == 1 && ingnorInversionOnce == 0) {
gabrieltetar 1:7e925468f9d9 1084 localData2 = -instruction.arg3;
gabrieltetar 1:7e925468f9d9 1085 localData3 = 3000 - instruction.arg2;//Inversion du Y
gabrieltetar 1:7e925468f9d9 1086 } else {
gabrieltetar 1:7e925468f9d9 1087 localData3 = instruction.arg2;
gabrieltetar 1:7e925468f9d9 1088 localData2 = instruction.arg3;
gabrieltetar 1:7e925468f9d9 1089 }
gabrieltetar 1:7e925468f9d9 1090
gabrieltetar 1:7e925468f9d9 1091 GoToPosition(instruction.arg1,localData3,localData2,localData1);
gabrieltetar 1:7e925468f9d9 1092 waitingAckID = ASSERVISSEMENT_XYT;
gabrieltetar 1:7e925468f9d9 1093 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
gabrieltetar 1:7e925468f9d9 1094
gabrieltetar 1:7e925468f9d9 1095 while(waitingAckID !=0 && waitingAckFrom !=0)
gabrieltetar 1:7e925468f9d9 1096 canProcessRx();
gabrieltetar 1:7e925468f9d9 1097 waitingAckID_FIN=ASSERVISSEMENT_XYT;
gabrieltetar 1:7e925468f9d9 1098 waitingAckFrom_FIN = INSTRUCTION_END_MOTEUR;
gabrieltetar 1:7e925468f9d9 1099 while(waitingAckID_FIN!=0 && waitingAckFrom_FIN !=0)
gabrieltetar 1:7e925468f9d9 1100 canProcessRx();
gabrieltetar 1:7e925468f9d9 1101 etat_pos=FIN_POS;
gabrieltetar 1:7e925468f9d9 1102 break;
gabrieltetar 1:7e925468f9d9 1103 case FIN_POS:
gabrieltetar 1:7e925468f9d9 1104 actual_instruction = instruction.nextLineOK;
gabrieltetar 1:7e925468f9d9 1105 break;
gabrieltetar 1:7e925468f9d9 1106 }
gabrieltetar 1:7e925468f9d9 1107 }
gabrieltetar 1:7e925468f9d9 1108
gabrieltetar 1:7e925468f9d9 1109
gabrieltetar 1:7e925468f9d9 1110 break;
gabrieltetar 1:7e925468f9d9 1111 case ETAT_GAME_START:
gabrieltetar 10:1964bb91b925 1112 Debug_Audio(3,3);
gabrieltetar 1:7e925468f9d9 1113 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
gabrieltetar 1:7e925468f9d9 1114
gabrieltetar 1:7e925468f9d9 1115 if (ModeDemo == 0) {
gabrieltetar 1:7e925468f9d9 1116 chronoEnd.attach(&chronometre_ISR,100);//On lance le chrono de 90s
gabrieltetar 1:7e925468f9d9 1117 gameTimer.start();
gabrieltetar 1:7e925468f9d9 1118 }
gabrieltetar 1:7e925468f9d9 1119 gameTimer.reset();
gabrieltetar 1:7e925468f9d9 1120 jack.fall(NULL);//On désactive l'interruption du jack
gabrieltetar 1:7e925468f9d9 1121 //SendRawId(GLOBAL_START);
gabrieltetar 1:7e925468f9d9 1122 Jack=0; //à envoyer sur le CAN et en direct pour l'automate de l'ihm ou sur CANV
gabrieltetar 1:7e925468f9d9 1123 //tactile_printf("Start");//Pas vraiment utile mais bon
gabrieltetar 1:7e925468f9d9 1124 break;
gabrieltetar 1:7e925468f9d9 1125 case ETAT_GAME_LOAD_NEXT_INSTRUCTION:
gabrieltetar 1:7e925468f9d9 1126 flagNonRepriseErrorMot = 0;
gabrieltetar 1:7e925468f9d9 1127 /*
gabrieltetar 1:7e925468f9d9 1128 Chargement de l'instruction suivante ou arret du robot si il n'y a plus d'instruction
gabrieltetar 1:7e925468f9d9 1129 */
gabrieltetar 1:7e925468f9d9 1130 //printf("load next instruction\n");
gabrieltetar 1:7e925468f9d9 1131 if(dodgeq.nb > 0){//dodge q
gabrieltetar 1:7e925468f9d9 1132 instruction.order=dodgeq.inst[dodgeq.nb-1].order;
gabrieltetar 1:7e925468f9d9 1133 instruction.arg1=dodgeq.inst[dodgeq.nb-1].arg1;
gabrieltetar 1:7e925468f9d9 1134 instruction.arg2=dodgeq.inst[dodgeq.nb-1].arg2;
gabrieltetar 1:7e925468f9d9 1135 instruction.arg3=dodgeq.inst[dodgeq.nb-1].arg3;
gabrieltetar 1:7e925468f9d9 1136 gameEtat=ETAT_GAME_PROCESS_INSTRUCTION;
gabrieltetar 1:7e925468f9d9 1137 dodgeq.nb--;
gabrieltetar 1:7e925468f9d9 1138 }//end dodge q
gabrieltetar 1:7e925468f9d9 1139 else{// no dodge q
gabrieltetar 1:7e925468f9d9 1140 if(actual_instruction >= nb_instructions || actual_instruction == 255) {
gabrieltetar 1:7e925468f9d9 1141 gameEtat = ETAT_END;
gabrieltetar 1:7e925468f9d9 1142 //Il n'y a plus d'instruction, fin du jeu
gabrieltetar 1:7e925468f9d9 1143 } else {
gabrieltetar 1:7e925468f9d9 1144 instruction = strat_instructions[actual_instruction];
gabrieltetar 1:7e925468f9d9 1145 //On effectue le traitement de l'instruction
gabrieltetar 1:7e925468f9d9 1146 gameEtat = ETAT_GAME_PROCESS_INSTRUCTION;
gabrieltetar 1:7e925468f9d9 1147 }
gabrieltetar 1:7e925468f9d9 1148 }//end no dodge q
gabrieltetar 1:7e925468f9d9 1149 screenChecktry = 0;
gabrieltetar 1:7e925468f9d9 1150 ingnorInversionOnce = 0;
gabrieltetar 1:7e925468f9d9 1151 break;
gabrieltetar 1:7e925468f9d9 1152 case ETAT_GAME_PROCESS_INSTRUCTION:
gabrieltetar 1:7e925468f9d9 1153 /*
gabrieltetar 1:7e925468f9d9 1154 Traitement de l'instruction, envoie de la trame CAN
gabrieltetar 1:7e925468f9d9 1155 */
gabrieltetar 1:7e925468f9d9 1156 //debug_Instruction(instruction);
gabrieltetar 1:7e925468f9d9 1157 //affichage_debug(gameEtat);
gabrieltetar 1:7e925468f9d9 1158 //rn42_Tx.printf("A");//lance l'electron
gabrieltetar 1:7e925468f9d9 1159 actionPrecedente = instruction.order;
gabrieltetar 1:7e925468f9d9 1160 switch(instruction.order) {
gabrieltetar 1:7e925468f9d9 1161 case MV_BEZIER: {
gabrieltetar 1:7e925468f9d9 1162 static vector< vector<short> >P1;
gabrieltetar 1:7e925468f9d9 1163 static vector< vector<short> >C1;
gabrieltetar 1:7e925468f9d9 1164 static vector< vector<short> >C2;
gabrieltetar 1:7e925468f9d9 1165 static int i = 0;
gabrieltetar 1:7e925468f9d9 1166
gabrieltetar 1:7e925468f9d9 1167 //Ajoute une ligne aux tableaux pour chaques courbes de la trajectoire
gabrieltetar 1:7e925468f9d9 1168 P1.push_back(vector<short>()); //Nouvelle ligne
gabrieltetar 1:7e925468f9d9 1169 C1.push_back(vector<short>()); //Nouvelle ligne
gabrieltetar 1:7e925468f9d9 1170 C2.push_back(vector<short>()); //Nouvelle ligne
gabrieltetar 1:7e925468f9d9 1171
gabrieltetar 1:7e925468f9d9 1172 P1[i].push_back(instruction.arg1); //Nouvelle colonne X
gabrieltetar 1:7e925468f9d9 1173 C1[i].push_back(instruction.arg3); //Nouvelle colonne X
gabrieltetar 1:7e925468f9d9 1174 C2[i].push_back(instruction.arg5); //Nouvelle colonne X
gabrieltetar 1:7e925468f9d9 1175
gabrieltetar 1:7e925468f9d9 1176 if(InversStrat == 1 && ingnorInversionOnce == 0) {
gabrieltetar 1:7e925468f9d9 1177 P1[i].push_back(3000-instruction.arg2); //Nouvelle colonne Y
gabrieltetar 1:7e925468f9d9 1178 C1[i].push_back(3000-instruction.arg4); //Nouvelle colonne Y
gabrieltetar 1:7e925468f9d9 1179 C2[i].push_back(3000-instruction.arg6); //Nouvelle colonne Y
gabrieltetar 1:7e925468f9d9 1180 } else {
gabrieltetar 1:7e925468f9d9 1181 P1[i].push_back(instruction.arg2); //Nouvelle colonne Y
gabrieltetar 1:7e925468f9d9 1182 C1[i].push_back(instruction.arg4); //Nouvelle colonne Y
gabrieltetar 1:7e925468f9d9 1183 C2[i].push_back(instruction.arg6); //Nouvelle colonne Y
gabrieltetar 1:7e925468f9d9 1184 }
gabrieltetar 1:7e925468f9d9 1185
gabrieltetar 1:7e925468f9d9 1186 i++;
gabrieltetar 1:7e925468f9d9 1187
gabrieltetar 1:7e925468f9d9 1188 if(instruction.nextActionType == WAIT) { //Si il n'y a qu'une seule courbe ou que c'est la dernière courbe de la trajectoire
gabrieltetar 1:7e925468f9d9 1189 //Passage des points dans des variables temporaires pour pouvoir clear les vector avant d'être bloqué dans l'attente de l'ack
gabrieltetar 1:7e925468f9d9 1190 //Empeche les vector de ne pas être reset si l'ack n'est pas reçu avant la fin du match
gabrieltetar 1:7e925468f9d9 1191 int nbCourbes = P1.size();
gabrieltetar 1:7e925468f9d9 1192 short P1_temp[nbCourbes][2];
gabrieltetar 1:7e925468f9d9 1193 short C1_temp[nbCourbes][2];
gabrieltetar 1:7e925468f9d9 1194 short C2_temp[nbCourbes][2];
gabrieltetar 1:7e925468f9d9 1195
gabrieltetar 1:7e925468f9d9 1196 for(int j=0; j<nbCourbes; j++) {
gabrieltetar 1:7e925468f9d9 1197 for(int i=0; i<2; i++) {
gabrieltetar 1:7e925468f9d9 1198 P1_temp[j][i] = P1[j][i];
gabrieltetar 1:7e925468f9d9 1199 C1_temp[j][i] = C1[j][i];
gabrieltetar 1:7e925468f9d9 1200 C2_temp[j][i] = C2[j][i];
gabrieltetar 1:7e925468f9d9 1201 }
gabrieltetar 1:7e925468f9d9 1202 }
gabrieltetar 1:7e925468f9d9 1203
gabrieltetar 1:7e925468f9d9 1204 //Clear des tableaux de points pour la prochaine trajectoire
gabrieltetar 1:7e925468f9d9 1205 P1.clear();
gabrieltetar 1:7e925468f9d9 1206 C1.clear();
gabrieltetar 1:7e925468f9d9 1207 C2.clear();
gabrieltetar 1:7e925468f9d9 1208 i = 0;
gabrieltetar 1:7e925468f9d9 1209
gabrieltetar 1:7e925468f9d9 1210 //Calcul de la courbe et envoi des valeurs
gabrieltetar 1:7e925468f9d9 1211 if(instruction.direction == FORWARD) {
gabrieltetar 1:7e925468f9d9 1212 courbeBezier(nbCourbes, P1_temp, C1_temp, C2_temp, 0);
gabrieltetar 1:7e925468f9d9 1213 } else if(instruction.direction == BACKWARD) {
gabrieltetar 1:7e925468f9d9 1214 courbeBezier(nbCourbes, P1_temp, C1_temp, C2_temp, 1);
gabrieltetar 1:7e925468f9d9 1215 }
gabrieltetar 1:7e925468f9d9 1216
gabrieltetar 1:7e925468f9d9 1217 waitingAckID = ASSERVISSEMENT_BEZIER;
gabrieltetar 1:7e925468f9d9 1218 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
gabrieltetar 1:7e925468f9d9 1219 }
gabrieltetar 1:7e925468f9d9 1220 break;
gabrieltetar 1:7e925468f9d9 1221 }
gabrieltetar 1:7e925468f9d9 1222 case MV_COURBURE://C'est un rayon de courbure
gabrieltetar 10:1964bb91b925 1223 Debug_Audio(3,6);
gabrieltetar 1:7e925468f9d9 1224 float alpha=0, theta=0;
gabrieltetar 1:7e925468f9d9 1225 unsigned short alph=0;
gabrieltetar 1:7e925468f9d9 1226 actionPrecedente = MV_COURBURE;
gabrieltetar 1:7e925468f9d9 1227 waitingAckID = ASSERVISSEMENT_COURBURE;
gabrieltetar 1:7e925468f9d9 1228 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
gabrieltetar 1:7e925468f9d9 1229 if(instruction.nextActionType == ENCHAINEMENT) {
gabrieltetar 1:7e925468f9d9 1230 MV_enchainement++;
gabrieltetar 1:7e925468f9d9 1231 localData5 = 1;
gabrieltetar 1:7e925468f9d9 1232 } else {
gabrieltetar 1:7e925468f9d9 1233 if(MV_enchainement > 0) {
gabrieltetar 1:7e925468f9d9 1234 localData5 = 2;
gabrieltetar 1:7e925468f9d9 1235 MV_enchainement = 0;
gabrieltetar 1:7e925468f9d9 1236 } else {
gabrieltetar 1:7e925468f9d9 1237 localData5 = 0;
gabrieltetar 1:7e925468f9d9 1238 }
gabrieltetar 1:7e925468f9d9 1239 }
gabrieltetar 1:7e925468f9d9 1240 if(InversStrat == 1 && ingnorInversionOnce == 0) {
gabrieltetar 1:7e925468f9d9 1241 if(instruction.direction == LEFT) instruction.direction = RIGHT;
gabrieltetar 1:7e925468f9d9 1242 else instruction.direction = LEFT;
gabrieltetar 1:7e925468f9d9 1243 }
gabrieltetar 1:7e925468f9d9 1244
gabrieltetar 1:7e925468f9d9 1245 localData1 = ((instruction.direction == LEFT)?1:-1);
gabrieltetar 1:7e925468f9d9 1246 localData2 = instruction.arg3;
gabrieltetar 1:7e925468f9d9 1247 /*if(InversStrat == 1 && ingnorInversionOnce == 0) {
gabrieltetar 1:7e925468f9d9 1248 localData1 = -localData1;//Inversion de la direction
gabrieltetar 1:7e925468f9d9 1249 }*/
gabrieltetar 1:7e925468f9d9 1250
gabrieltetar 1:7e925468f9d9 1251 BendRadius(instruction.arg1, localData2, localData1, localData5);
gabrieltetar 1:7e925468f9d9 1252 if(localData2>0) {
gabrieltetar 1:7e925468f9d9 1253 direction=1;
gabrieltetar 1:7e925468f9d9 1254 } else {
gabrieltetar 1:7e925468f9d9 1255 direction=-1;
gabrieltetar 1:7e925468f9d9 1256 }
gabrieltetar 1:7e925468f9d9 1257 if(localData2>0)alph=localData2;
gabrieltetar 1:7e925468f9d9 1258 else alph=-localData2;
gabrieltetar 1:7e925468f9d9 1259 alpha = localData2*M_PI/1800.0f;
gabrieltetar 1:7e925468f9d9 1260 theta = theta_robot*M_PI/1800.0f;
gabrieltetar 1:7e925468f9d9 1261
gabrieltetar 1:7e925468f9d9 1262 if(instruction.direction == LEFT) { //-------------LEFT
gabrieltetar 1:7e925468f9d9 1263 if(alph<450){ // 1 XYT
gabrieltetar 1:7e925468f9d9 1264 dodgeq.inst[0].order = MV_XYT;
gabrieltetar 1:7e925468f9d9 1265 dodgeq.inst[0].arg1 = x_robot + instruction.arg1*(sin(alpha+theta)-sin(theta));// X
gabrieltetar 1:7e925468f9d9 1266 dodgeq.inst[0].arg2 = y_robot + instruction.arg1*(cos(theta)-cos(alpha+theta));// Y
gabrieltetar 1:7e925468f9d9 1267 dodgeq.inst[0].arg3 = theta_robot + alph;// T
gabrieltetar 1:7e925468f9d9 1268 }
gabrieltetar 1:7e925468f9d9 1269 else if(alph<900){
gabrieltetar 1:7e925468f9d9 1270 for(int c=0;c<2;c++){ // 2 points de passages
gabrieltetar 1:7e925468f9d9 1271 dodgeq.inst[c].order = MV_XYT;
gabrieltetar 1:7e925468f9d9 1272 dodgeq.inst[c].arg1 = x_robot + instruction.arg1*(sin(alpha+theta)-sin(theta));// X
gabrieltetar 1:7e925468f9d9 1273 dodgeq.inst[c].arg2 = y_robot + instruction.arg1*(cos(theta)-cos(alpha+theta));// Y
gabrieltetar 1:7e925468f9d9 1274 dodgeq.inst[c].arg3 = theta_robot + alph;// T
gabrieltetar 1:7e925468f9d9 1275 alpha-=alpha/2.0f;
gabrieltetar 1:7e925468f9d9 1276 alph-=alph/2;
gabrieltetar 1:7e925468f9d9 1277 }
gabrieltetar 1:7e925468f9d9 1278 }
gabrieltetar 1:7e925468f9d9 1279 else if(alph<1350){
gabrieltetar 1:7e925468f9d9 1280 for(int c=0;c<3;c++){ // 3 points de passages
gabrieltetar 1:7e925468f9d9 1281 dodgeq.inst[c].order = MV_XYT;
gabrieltetar 1:7e925468f9d9 1282 dodgeq.inst[c].arg1 = x_robot + instruction.arg1*(sin(alpha+theta)-sin(theta));// X
gabrieltetar 1:7e925468f9d9 1283 dodgeq.inst[c].arg2 = y_robot + instruction.arg1*(cos(theta)-cos(alpha+theta));// Y
gabrieltetar 1:7e925468f9d9 1284 dodgeq.inst[c].arg3 = theta_robot + alph;// T
gabrieltetar 1:7e925468f9d9 1285 alpha-=alpha/3.0f;
gabrieltetar 1:7e925468f9d9 1286 alph-=alph/3;
gabrieltetar 1:7e925468f9d9 1287 }
gabrieltetar 1:7e925468f9d9 1288 }
gabrieltetar 1:7e925468f9d9 1289 else if(alph<1800){
gabrieltetar 1:7e925468f9d9 1290 for(int c=0;c<4;c++){ // 4 points de passages
gabrieltetar 1:7e925468f9d9 1291 dodgeq.inst[c].order = MV_XYT;
gabrieltetar 1:7e925468f9d9 1292 dodgeq.inst[c].arg1 = x_robot + instruction.arg1*(sin(alpha+theta)-sin(theta));// X
gabrieltetar 1:7e925468f9d9 1293 dodgeq.inst[c].arg2 = y_robot + instruction.arg1*(cos(theta)-cos(alpha+theta));// Y
gabrieltetar 1:7e925468f9d9 1294 dodgeq.inst[c].arg3 = theta_robot + alph;// T
gabrieltetar 1:7e925468f9d9 1295 alpha-=alpha/4.0f;
gabrieltetar 1:7e925468f9d9 1296 alph-=alph/4;
gabrieltetar 1:7e925468f9d9 1297 }
gabrieltetar 1:7e925468f9d9 1298 }
gabrieltetar 1:7e925468f9d9 1299 else if(alph<2250){
gabrieltetar 1:7e925468f9d9 1300 for(int c=0;c<5;c++){ // 5 points de passages
gabrieltetar 1:7e925468f9d9 1301 dodgeq.inst[c].order = MV_XYT;
gabrieltetar 1:7e925468f9d9 1302 dodgeq.inst[c].arg1 = x_robot + instruction.arg1*(sin(alpha+theta)-sin(theta));// X
gabrieltetar 1:7e925468f9d9 1303 dodgeq.inst[c].arg2 = y_robot + instruction.arg1*(cos(theta)-cos(alpha+theta));// Y
gabrieltetar 1:7e925468f9d9 1304 dodgeq.inst[c].arg3 = theta_robot + alph;// T
gabrieltetar 1:7e925468f9d9 1305 alpha-=alpha/5.0f;
gabrieltetar 1:7e925468f9d9 1306 alph-=alph/5;
gabrieltetar 1:7e925468f9d9 1307 }
gabrieltetar 1:7e925468f9d9 1308 }
gabrieltetar 1:7e925468f9d9 1309 else {
gabrieltetar 1:7e925468f9d9 1310 for(int c=0;c<6;c++){ // 6 points de passages
gabrieltetar 1:7e925468f9d9 1311 dodgeq.inst[c].order = MV_XYT;
gabrieltetar 1:7e925468f9d9 1312 dodgeq.inst[c].arg1 = x_robot + instruction.arg1*(sin(alpha+theta)-sin(theta));// X
gabrieltetar 1:7e925468f9d9 1313 dodgeq.inst[c].arg2 = y_robot + instruction.arg1*(cos(theta)-cos(alpha+theta));// Y
gabrieltetar 1:7e925468f9d9 1314 dodgeq.inst[c].arg3 = theta_robot + alph;// T
gabrieltetar 1:7e925468f9d9 1315 alpha-=alpha/6.0f;
gabrieltetar 1:7e925468f9d9 1316 alph-=alph/6;
gabrieltetar 1:7e925468f9d9 1317 }
gabrieltetar 1:7e925468f9d9 1318 }
gabrieltetar 1:7e925468f9d9 1319 } else { //-----------------------------------------RIGHT
gabrieltetar 1:7e925468f9d9 1320 if(alph<450){ // 1 XYT
gabrieltetar 1:7e925468f9d9 1321 dodgeq.inst[0].order = MV_XYT;
gabrieltetar 1:7e925468f9d9 1322 dodgeq.inst[0].arg1 = x_robot + instruction.arg1*(sin(alpha-theta)+sin(theta));// X
gabrieltetar 1:7e925468f9d9 1323 dodgeq.inst[0].arg2 = y_robot + instruction.arg1*(cos(alpha-theta)-cos(theta));// Y
gabrieltetar 1:7e925468f9d9 1324 dodgeq.inst[0].arg3 = theta_robot - alph;// T
gabrieltetar 1:7e925468f9d9 1325 }
gabrieltetar 1:7e925468f9d9 1326 else if(alph<900){
gabrieltetar 1:7e925468f9d9 1327 for(int c=0;c<2;c++){ // 2 points de passages
gabrieltetar 1:7e925468f9d9 1328 dodgeq.inst[c].order = MV_XYT;
gabrieltetar 1:7e925468f9d9 1329 dodgeq.inst[c].arg1 = x_robot + instruction.arg1*(sin(alpha-theta)+sin(theta));// X
gabrieltetar 1:7e925468f9d9 1330 dodgeq.inst[c].arg2 = y_robot + instruction.arg1*(cos(alpha-theta)-cos(theta));// Y
gabrieltetar 1:7e925468f9d9 1331 dodgeq.inst[c].arg3 = theta_robot - alph;// T
gabrieltetar 1:7e925468f9d9 1332 alpha-=alpha/2.0f;
gabrieltetar 1:7e925468f9d9 1333 }
gabrieltetar 1:7e925468f9d9 1334 }
gabrieltetar 1:7e925468f9d9 1335 else if(alph<1350){
gabrieltetar 1:7e925468f9d9 1336 for(int c=0;c<3;c++){ // 3 points de passages
gabrieltetar 1:7e925468f9d9 1337 dodgeq.inst[c].order = MV_XYT;
gabrieltetar 1:7e925468f9d9 1338 dodgeq.inst[c].arg1 = x_robot + instruction.arg1*(sin(alpha-theta)+sin(theta));// X
gabrieltetar 1:7e925468f9d9 1339 dodgeq.inst[c].arg2 = y_robot + instruction.arg1*(cos(alpha-theta)-cos(theta));// Y
gabrieltetar 1:7e925468f9d9 1340 dodgeq.inst[c].arg3 = theta_robot - alph;// T
gabrieltetar 1:7e925468f9d9 1341 alpha-=alpha/3.0f;
gabrieltetar 1:7e925468f9d9 1342 }
gabrieltetar 1:7e925468f9d9 1343 }
gabrieltetar 1:7e925468f9d9 1344 else if(alph<1800){
gabrieltetar 1:7e925468f9d9 1345 for(int c=0;c<4;c++){ // 4 points de passages
gabrieltetar 1:7e925468f9d9 1346 dodgeq.inst[c].order = MV_XYT;
gabrieltetar 1:7e925468f9d9 1347 dodgeq.inst[c].arg1 = x_robot + instruction.arg1*(sin(alpha-theta)+sin(theta));// X
gabrieltetar 1:7e925468f9d9 1348 dodgeq.inst[c].arg2 = y_robot + instruction.arg1*(cos(alpha-theta)-cos(theta));// Y
gabrieltetar 1:7e925468f9d9 1349 dodgeq.inst[c].arg3 = theta_robot - alph;// T
gabrieltetar 1:7e925468f9d9 1350 alpha-=alpha/4.0f;
gabrieltetar 1:7e925468f9d9 1351 }
gabrieltetar 1:7e925468f9d9 1352 }
gabrieltetar 1:7e925468f9d9 1353 else if(alph<2250){
gabrieltetar 1:7e925468f9d9 1354 for(int c=0;c<5;c++){ // 5 points de passages
gabrieltetar 1:7e925468f9d9 1355 dodgeq.inst[c].order = MV_XYT;
gabrieltetar 1:7e925468f9d9 1356 dodgeq.inst[c].arg1 = x_robot + instruction.arg1*(sin(alpha-theta)+sin(theta));// X
gabrieltetar 1:7e925468f9d9 1357 dodgeq.inst[c].arg2 = y_robot + instruction.arg1*(cos(alpha-theta)-cos(theta));// Y
gabrieltetar 1:7e925468f9d9 1358 dodgeq.inst[c].arg3 = theta_robot - alph;// T
gabrieltetar 1:7e925468f9d9 1359 alpha-=alpha/5.0f;
gabrieltetar 1:7e925468f9d9 1360 }
gabrieltetar 1:7e925468f9d9 1361 }
gabrieltetar 1:7e925468f9d9 1362 else {
gabrieltetar 1:7e925468f9d9 1363 for(int c=0;c<6;c++){ // 6 points de passages
gabrieltetar 1:7e925468f9d9 1364 dodgeq.inst[c].order = MV_XYT;
gabrieltetar 1:7e925468f9d9 1365 dodgeq.inst[c].arg1 = x_robot + instruction.arg1*(sin(alpha-theta)+sin(theta));// X
gabrieltetar 1:7e925468f9d9 1366 dodgeq.inst[c].arg2 = y_robot + instruction.arg1*(cos(alpha-theta)-cos(theta));// Y
gabrieltetar 1:7e925468f9d9 1367 dodgeq.inst[c].arg3 = theta_robot - alph;// T
gabrieltetar 1:7e925468f9d9 1368 alpha-=alpha/6.0f;
gabrieltetar 1:7e925468f9d9 1369 }
gabrieltetar 1:7e925468f9d9 1370 }
gabrieltetar 1:7e925468f9d9 1371 }
gabrieltetar 1:7e925468f9d9 1372 break;
gabrieltetar 1:7e925468f9d9 1373
gabrieltetar 1:7e925468f9d9 1374
gabrieltetar 1:7e925468f9d9 1375
gabrieltetar 1:7e925468f9d9 1376 case MV_LINE://Ligne droite
gabrieltetar 10:1964bb91b925 1377 Debug_Audio(3,8);
gabrieltetar 1:7e925468f9d9 1378 waitingAckID = ASSERVISSEMENT_RECALAGE;
gabrieltetar 1:7e925468f9d9 1379 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
gabrieltetar 1:7e925468f9d9 1380 if(instruction.nextActionType == ENCHAINEMENT) {
gabrieltetar 1:7e925468f9d9 1381 MV_enchainement++;
gabrieltetar 1:7e925468f9d9 1382 localData5 = 1;
gabrieltetar 1:7e925468f9d9 1383 } else {
gabrieltetar 1:7e925468f9d9 1384 if(MV_enchainement > 0) {//Utilisé en cas d'enchainement,
gabrieltetar 1:7e925468f9d9 1385 localData5 = 2;
gabrieltetar 1:7e925468f9d9 1386 MV_enchainement = 0;
gabrieltetar 1:7e925468f9d9 1387 } else {
gabrieltetar 1:7e925468f9d9 1388 localData5 = 0;
gabrieltetar 1:7e925468f9d9 1389 }
gabrieltetar 1:7e925468f9d9 1390 }
gabrieltetar 1:7e925468f9d9 1391 localData2 = (((instruction.direction == FORWARD)?1:-1)*instruction.arg1);
gabrieltetar 1:7e925468f9d9 1392 GoStraight(localData2, 0, 0, localData5);
gabrieltetar 1:7e925468f9d9 1393
gabrieltetar 1:7e925468f9d9 1394 target_x_robot = x_robot + localData2*cos((double)theta_robot*M_PI/1800);
gabrieltetar 1:7e925468f9d9 1395 target_y_robot = y_robot + localData2*sin((double)theta_robot*M_PI/1800);
gabrieltetar 1:7e925468f9d9 1396 target_theta_robot = theta_robot;
gabrieltetar 1:7e925468f9d9 1397
gabrieltetar 1:7e925468f9d9 1398 break;
gabrieltetar 1:7e925468f9d9 1399 case MV_TURN: //Rotation sur place
gabrieltetar 10:1964bb91b925 1400 Debug_Audio(3,9);
gabrieltetar 1:7e925468f9d9 1401 target_x_robot = x_robot;
gabrieltetar 1:7e925468f9d9 1402 target_y_robot = y_robot;
gabrieltetar 1:7e925468f9d9 1403 target_theta_robot = theta_robot + localData2;
gabrieltetar 1:7e925468f9d9 1404 localData2 = instruction.arg3;
gabrieltetar 1:7e925468f9d9 1405
gabrieltetar 1:7e925468f9d9 1406 if(InversStrat == 1 && ingnorInversionOnce == 0) {
gabrieltetar 1:7e925468f9d9 1407 localData2 = -localData2;
gabrieltetar 1:7e925468f9d9 1408 }
gabrieltetar 1:7e925468f9d9 1409
gabrieltetar 1:7e925468f9d9 1410
gabrieltetar 1:7e925468f9d9 1411 if(instruction.direction == ABSOLUTE) {
gabrieltetar 1:7e925468f9d9 1412 //C'est un rotation absolu, il faut la convertir en relative
gabrieltetar 1:7e925468f9d9 1413
gabrieltetar 1:7e925468f9d9 1414 localData2 = (localData2 - theta_robot)%3600;
gabrieltetar 1:7e925468f9d9 1415 if(localData2 > 1800) localData2 = localData2-3600;
gabrieltetar 1:7e925468f9d9 1416
gabrieltetar 1:7e925468f9d9 1417 else if(localData2 <-1800) localData2 = localData2+3600;
gabrieltetar 1:7e925468f9d9 1418 }
gabrieltetar 1:7e925468f9d9 1419
gabrieltetar 1:7e925468f9d9 1420
gabrieltetar 1:7e925468f9d9 1421 waitingAckID = ASSERVISSEMENT_ROTATION;
gabrieltetar 1:7e925468f9d9 1422 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
gabrieltetar 1:7e925468f9d9 1423 Rotate(localData2);
gabrieltetar 1:7e925468f9d9 1424
gabrieltetar 1:7e925468f9d9 1425 break;
gabrieltetar 1:7e925468f9d9 1426 case MV_XYT:
gabrieltetar 10:1964bb91b925 1427 Debug_Audio(3,10);
gabrieltetar 1:7e925468f9d9 1428 if(instruction.direction == BACKWARD) {
gabrieltetar 1:7e925468f9d9 1429 localData1 = -1;
gabrieltetar 1:7e925468f9d9 1430 } else {
gabrieltetar 1:7e925468f9d9 1431 localData1 = 1;
gabrieltetar 1:7e925468f9d9 1432 }
gabrieltetar 1:7e925468f9d9 1433
gabrieltetar 1:7e925468f9d9 1434 if(InversStrat == 1 && ingnorInversionOnce == 0) {
gabrieltetar 1:7e925468f9d9 1435 localData2 = -instruction.arg3;
gabrieltetar 1:7e925468f9d9 1436 localData3 = 3000 - instruction.arg2;//Inversion du Y
gabrieltetar 1:7e925468f9d9 1437 } else {
gabrieltetar 1:7e925468f9d9 1438 localData3 = instruction.arg2;
gabrieltetar 1:7e925468f9d9 1439 localData2 = instruction.arg3;
gabrieltetar 1:7e925468f9d9 1440 }
gabrieltetar 1:7e925468f9d9 1441
gabrieltetar 1:7e925468f9d9 1442 GoToPosition(instruction.arg1,localData3,localData2,localData1);
gabrieltetar 1:7e925468f9d9 1443 waitingAckID = ASSERVISSEMENT_XYT;
gabrieltetar 1:7e925468f9d9 1444 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
gabrieltetar 1:7e925468f9d9 1445
gabrieltetar 1:7e925468f9d9 1446 target_x_robot = instruction.arg1;
gabrieltetar 1:7e925468f9d9 1447 target_y_robot = localData3;
gabrieltetar 1:7e925468f9d9 1448 target_theta_robot = localData2;
gabrieltetar 1:7e925468f9d9 1449
gabrieltetar 1:7e925468f9d9 1450 break;
gabrieltetar 1:7e925468f9d9 1451 case MV_RECALAGE:
gabrieltetar 1:7e925468f9d9 1452 if(instruction.nextActionType == MECANIQUE) {
gabrieltetar 1:7e925468f9d9 1453 instruction.nextActionType = WAIT;
gabrieltetar 1:7e925468f9d9 1454
gabrieltetar 1:7e925468f9d9 1455 waitingAckID = ASSERVISSEMENT_RECALAGE;
gabrieltetar 1:7e925468f9d9 1456 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
gabrieltetar 1:7e925468f9d9 1457
gabrieltetar 1:7e925468f9d9 1458 localData2 = (((instruction.direction == FORWARD)?1:-1)*3000);//On indique une distance de 3000 pour etre sur que le robot va ce recaler
gabrieltetar 1:7e925468f9d9 1459
gabrieltetar 1:7e925468f9d9 1460 if(instruction.precision == RECALAGE_Y) {
gabrieltetar 1:7e925468f9d9 1461 localData5 = 2;
gabrieltetar 1:7e925468f9d9 1462 if(InversStrat == 1 && ingnorInversionOnce == 0) {
gabrieltetar 1:7e925468f9d9 1463 localData3 = 3000 - instruction.arg1;//Inversion du Y
gabrieltetar 1:7e925468f9d9 1464 } else {
gabrieltetar 1:7e925468f9d9 1465 localData3 = instruction.arg1;
gabrieltetar 1:7e925468f9d9 1466 }
gabrieltetar 1:7e925468f9d9 1467 } else {
gabrieltetar 1:7e925468f9d9 1468 localData5 = 1;
gabrieltetar 1:7e925468f9d9 1469 localData3 = instruction.arg1;
gabrieltetar 1:7e925468f9d9 1470 }
gabrieltetar 1:7e925468f9d9 1471 GoStraight(localData2, localData5, localData3, 0);
gabrieltetar 1:7e925468f9d9 1472 } else { //CAPTEUR
gabrieltetar 1:7e925468f9d9 1473 SendRawId(DATA_RECALAGE);
gabrieltetar 1:7e925468f9d9 1474 waitingAckID = RECEPTION_RECALAGE;
gabrieltetar 1:7e925468f9d9 1475 waitingAckFrom = ACKNOWLEDGE_TELEMETRE;
gabrieltetar 1:7e925468f9d9 1476
gabrieltetar 1:7e925468f9d9 1477 // On attend que les variables soient actualisé
gabrieltetar 1:7e925468f9d9 1478 while(!(waitingAckID == 0 && waitingAckFrom == 0))
gabrieltetar 1:7e925468f9d9 1479 canProcessRx();
gabrieltetar 1:7e925468f9d9 1480 while(!(waitingAckID_FIN==0 && waitingAckFrom_FIN==0))
gabrieltetar 1:7e925468f9d9 1481 canProcessRx();
gabrieltetar 1:7e925468f9d9 1482
gabrieltetar 1:7e925468f9d9 1483 if(instruction.precision == RECALAGE_Y) { // ((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600)) (theta_robot < 900 && theta_robot > -900)
gabrieltetar 1:7e925468f9d9 1484 SetOdometrie(ODOMETRIE_SMALL_POSITION, x_robot, recalageDistanceY(), theta_robot);
gabrieltetar 1:7e925468f9d9 1485 } else if(instruction.precision == RECALAGE_X) {
gabrieltetar 1:7e925468f9d9 1486 SetOdometrie(ODOMETRIE_SMALL_POSITION, recalageDistanceX(), y_robot, theta_robot);
gabrieltetar 1:7e925468f9d9 1487 } else if(instruction.precision == RECALAGE_T) {
gabrieltetar 1:7e925468f9d9 1488 SetOdometrie(ODOMETRIE_SMALL_POSITION, x_robot, y_robot, recalageAngulaireCapteur() );
gabrieltetar 1:7e925468f9d9 1489 }
gabrieltetar 1:7e925468f9d9 1490 }
gabrieltetar 1:7e925468f9d9 1491 break;
gabrieltetar 1:7e925468f9d9 1492
gabrieltetar 1:7e925468f9d9 1493 case ACTION:
gabrieltetar 1:7e925468f9d9 1494
gabrieltetar 1:7e925468f9d9 1495 waitingAckID_FIN = 0;
gabrieltetar 1:7e925468f9d9 1496 waitingAckFrom_FIN = 0;
gabrieltetar 1:7e925468f9d9 1497 int tempo = 0;
gabrieltetar 1:7e925468f9d9 1498 waitingAckID= ACK_ACTION; //On veut un ack de type action
gabrieltetar 1:7e925468f9d9 1499 waitingAckFrom = ACKNOWLEDGE_HERKULEX; //de la part des herkulex
gabrieltetar 14:6aa8aa1699ad 1500 tempo = doAction(instruction.arg1,instruction.arg2,instruction.arg3);
gabrieltetar 1:7e925468f9d9 1501 // unsigned char test=(unsigned char) tempo;
gabrieltetar 1:7e925468f9d9 1502 // SendMsgCan(0x5BD, &test,1);
gabrieltetar 1:7e925468f9d9 1503 if(tempo == 1) {
gabrieltetar 1:7e925468f9d9 1504 //L'action est spécifique
gabrieltetar 1:7e925468f9d9 1505 if((waitingAckFrom == 0 && waitingAckID == 0) && instruction.nextActionType == ENCHAINEMENT) {
gabrieltetar 1:7e925468f9d9 1506 actual_instruction = instruction.nextLineOK;//On indique que l'on va charger l'instruction suivante
gabrieltetar 1:7e925468f9d9 1507 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
gabrieltetar 1:7e925468f9d9 1508 } else {
gabrieltetar 1:7e925468f9d9 1509 gameEtat = ETAT_GAME_WAIT_ACK;
gabrieltetar 1:7e925468f9d9 1510 }
gabrieltetar 1:7e925468f9d9 1511 return;
gabrieltetar 1:7e925468f9d9 1512 } else if (tempo == 2) {
gabrieltetar 1:7e925468f9d9 1513 // on est dans le cas de l'avance selon le telemetre
gabrieltetar 1:7e925468f9d9 1514 waitingAckID = ASSERVISSEMENT_RECALAGE;
gabrieltetar 1:7e925468f9d9 1515 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
gabrieltetar 1:7e925468f9d9 1516
gabrieltetar 1:7e925468f9d9 1517 localData2 = (((instruction.direction == FORWARD)?1:-1)*instruction.arg1);
gabrieltetar 1:7e925468f9d9 1518 GoStraight(telemetreDistance, 0, 0, 0);
gabrieltetar 1:7e925468f9d9 1519 // on reset la distance du telemetre à 0
gabrieltetar 1:7e925468f9d9 1520 telemetreDistance = 5000;
gabrieltetar 1:7e925468f9d9 1521 } else {
gabrieltetar 1:7e925468f9d9 1522 //C'est un AX12 qu'il faut bouger
gabrieltetar 1:7e925468f9d9 1523 //AX12_setGoal(instruction.arg1,instruction.arg3/10,instruction.arg2);
gabrieltetar 1:7e925468f9d9 1524 //AX12_enchainement++;
gabrieltetar 1:7e925468f9d9 1525
gabrieltetar 1:7e925468f9d9 1526 }
gabrieltetar 1:7e925468f9d9 1527 break;
gabrieltetar 1:7e925468f9d9 1528 default:
gabrieltetar 1:7e925468f9d9 1529 //Instruction inconnue, on l'ignore
gabrieltetar 1:7e925468f9d9 1530 break;
gabrieltetar 1:7e925468f9d9 1531 }
gabrieltetar 1:7e925468f9d9 1532
gabrieltetar 1:7e925468f9d9 1533 if(instruction.nextActionType == JUMP || instruction.nextActionType == WAIT) {
gabrieltetar 1:7e925468f9d9 1534 gameEtat = ETAT_GAME_WAIT_ACK;//Il faut attendre que la carte est bien reçu l'acknowledge
gabrieltetar 1:7e925468f9d9 1535 screenChecktry++;//On incrèment le conteur de tentative de 1
gabrieltetar 1:7e925468f9d9 1536 cartesCheker.reset();//On reset le timeOut
gabrieltetar 1:7e925468f9d9 1537 cartesCheker.start();
gabrieltetar 1:7e925468f9d9 1538 if(AX12_enchainement > 0) {
gabrieltetar 1:7e925468f9d9 1539 //AX12_processChange();//Il faut lancer le déplacement des AX12
gabrieltetar 1:7e925468f9d9 1540 //AX12_enchainement = 0;
gabrieltetar 1:7e925468f9d9 1541 }
gabrieltetar 1:7e925468f9d9 1542 } else { //C'est un enchainement
gabrieltetar 1:7e925468f9d9 1543 if(instruction.order == MV_LINE) {
gabrieltetar 1:7e925468f9d9 1544 gameEtat = ETAT_GAME_WAIT_ACK;
gabrieltetar 1:7e925468f9d9 1545 } else {
gabrieltetar 1:7e925468f9d9 1546 actual_instruction = instruction.nextLineOK;//On indique que l'on va charger l'instruction suivante
gabrieltetar 1:7e925468f9d9 1547 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;//C'est un enchainement, on charge directement l'instruction suivante
gabrieltetar 1:7e925468f9d9 1548 }
gabrieltetar 1:7e925468f9d9 1549 }
gabrieltetar 1:7e925468f9d9 1550
gabrieltetar 1:7e925468f9d9 1551 break;
gabrieltetar 1:7e925468f9d9 1552 case ETAT_GAME_WAIT_ACK:
gabrieltetar 1:7e925468f9d9 1553 canProcessRx();
gabrieltetar 1:7e925468f9d9 1554 //SendSpeed(200);//--------------------------------------------------MODE RALENTI !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
gabrieltetar 1:7e925468f9d9 1555 if(waitingAckID == 0 && waitingAckFrom == 0) {//Les ack ont été reset, c'est bon on continue
gabrieltetar 1:7e925468f9d9 1556 //if(true) {
gabrieltetar 1:7e925468f9d9 1557 cartesCheker.stop();
gabrieltetar 1:7e925468f9d9 1558 if(instruction.nextActionType == JUMP) {
gabrieltetar 1:7e925468f9d9 1559 if(instruction.jumpAction == JUMP_POSITION) {
gabrieltetar 1:7e925468f9d9 1560 gameEtat = ETAT_GAME_JUMP_POSITION;
gabrieltetar 1:7e925468f9d9 1561 } else { //Pour eviter les erreurs, on dit que c'est par défaut un jump time
gabrieltetar 1:7e925468f9d9 1562 gameEtat = ETAT_GAME_JUMP_TIME;
gabrieltetar 1:7e925468f9d9 1563 cartesCheker.reset();//On reset le timeOut
gabrieltetar 1:7e925468f9d9 1564 cartesCheker.start();
gabrieltetar 1:7e925468f9d9 1565 }
gabrieltetar 1:7e925468f9d9 1566 } else if(instruction.nextActionType == WAIT) { ///Actualisation des waiting ack afin d'attendre la fin des actions
gabrieltetar 1:7e925468f9d9 1567 /*wait_ms(200);
gabrieltetar 1:7e925468f9d9 1568 #ifdef ROBOT_BIG
gabrieltetar 1:7e925468f9d9 1569 SetOdometrie(ODOMETRIE_BIG_POSITION, x_robot, y_robot, theta_robot);
gabrieltetar 1:7e925468f9d9 1570 #else
gabrieltetar 1:7e925468f9d9 1571 SetOdometrie(ODOMETRIE_SMALL_POSITION, x_robot, y_robot, theta_robot);
gabrieltetar 1:7e925468f9d9 1572 #endif
gabrieltetar 1:7e925468f9d9 1573 wait_ms(200);*/
gabrieltetar 1:7e925468f9d9 1574
gabrieltetar 1:7e925468f9d9 1575 gameEtat = ETAT_GAME_WAIT_END_INSTRUCTION;
gabrieltetar 1:7e925468f9d9 1576 switch(instruction.order) {
gabrieltetar 1:7e925468f9d9 1577 case MV_BEZIER:
gabrieltetar 1:7e925468f9d9 1578 waitingAckID_FIN = ASSERVISSEMENT_BEZIER;
gabrieltetar 1:7e925468f9d9 1579 waitingAckFrom_FIN = INSTRUCTION_END_MOTEUR;
gabrieltetar 1:7e925468f9d9 1580 break;
gabrieltetar 1:7e925468f9d9 1581 case MV_COURBURE:
gabrieltetar 1:7e925468f9d9 1582 waitingAckID_FIN = ASSERVISSEMENT_COURBURE;
gabrieltetar 1:7e925468f9d9 1583 waitingAckFrom_FIN = INSTRUCTION_END_MOTEUR;
gabrieltetar 1:7e925468f9d9 1584 break;
gabrieltetar 1:7e925468f9d9 1585 case MV_LINE:
gabrieltetar 1:7e925468f9d9 1586 waitingAckID_FIN = ASSERVISSEMENT_RECALAGE;
gabrieltetar 1:7e925468f9d9 1587 waitingAckFrom_FIN = INSTRUCTION_END_MOTEUR;
gabrieltetar 1:7e925468f9d9 1588 break;
gabrieltetar 1:7e925468f9d9 1589 case MV_TURN:
gabrieltetar 1:7e925468f9d9 1590 waitingAckID_FIN = ASSERVISSEMENT_ROTATION;
gabrieltetar 1:7e925468f9d9 1591 waitingAckFrom_FIN = INSTRUCTION_END_MOTEUR;
gabrieltetar 1:7e925468f9d9 1592 break;
gabrieltetar 1:7e925468f9d9 1593 case MV_XYT:
gabrieltetar 1:7e925468f9d9 1594 waitingAckID_FIN = ASSERVISSEMENT_XYT;
gabrieltetar 1:7e925468f9d9 1595 waitingAckFrom_FIN = INSTRUCTION_END_MOTEUR;
gabrieltetar 1:7e925468f9d9 1596 break;
gabrieltetar 1:7e925468f9d9 1597 case MV_RECALAGE:
gabrieltetar 1:7e925468f9d9 1598 waitingAckID_FIN = ASSERVISSEMENT_RECALAGE;
gabrieltetar 1:7e925468f9d9 1599 waitingAckFrom_FIN = INSTRUCTION_END_MOTEUR;
gabrieltetar 1:7e925468f9d9 1600 break;
gabrieltetar 1:7e925468f9d9 1601 case ACTION:
gabrieltetar 1:7e925468f9d9 1602
gabrieltetar 1:7e925468f9d9 1603 if (modeTelemetre == 0) {
gabrieltetar 1:7e925468f9d9 1604 if (telemetreDistance == 0) {
gabrieltetar 1:7e925468f9d9 1605 waitingAckID_FIN = ACK_FIN_ACTION;// ack de type action
gabrieltetar 1:7e925468f9d9 1606 waitingAckFrom_FIN = ACKNOWLEDGE_HERKULEX; //de la part des herkulex/actionneurs
gabrieltetar 1:7e925468f9d9 1607 } else if(telemetreDistance == 5000) {
gabrieltetar 1:7e925468f9d9 1608 // on est dans le cas ou l'on fait une ligne suivant la distance du telemetre
gabrieltetar 1:7e925468f9d9 1609 //waitingAckID_FIN = ASSERVISSEMENT_RECALAGE;
gabrieltetar 1:7e925468f9d9 1610 //waitingAckFrom_FIN = INSTRUCTION_END_MOTEUR;
gabrieltetar 1:7e925468f9d9 1611 telemetreDistance = 0;
gabrieltetar 1:7e925468f9d9 1612 }
gabrieltetar 1:7e925468f9d9 1613 } else { // si on attend la reponse du telemetre
gabrieltetar 1:7e925468f9d9 1614 //modeTelemetre = 1;
gabrieltetar 1:7e925468f9d9 1615 waitingAckID_FIN = OBJET_SUR_TABLE;
gabrieltetar 1:7e925468f9d9 1616 waitingAckFrom_FIN = 0;
gabrieltetar 1:7e925468f9d9 1617 }
gabrieltetar 1:7e925468f9d9 1618 break;
gabrieltetar 1:7e925468f9d9 1619 default:
gabrieltetar 1:7e925468f9d9 1620 break;
gabrieltetar 1:7e925468f9d9 1621 }
gabrieltetar 1:7e925468f9d9 1622 } else {
gabrieltetar 1:7e925468f9d9 1623 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
gabrieltetar 1:7e925468f9d9 1624 actual_instruction = instruction.nextLineOK;//On indique que l'on va charger l'instruction suivante
gabrieltetar 1:7e925468f9d9 1625 }
gabrieltetar 1:7e925468f9d9 1626 } else if(cartesCheker.read_ms () > 1000) {
gabrieltetar 1:7e925468f9d9 1627 cartesCheker.stop();
gabrieltetar 1:7e925468f9d9 1628 if(screenChecktry >=2) {//La carte n'a pas reçus l'information, on passe à l'instruction d'erreur
gabrieltetar 1:7e925468f9d9 1629 actual_instruction = instruction.nextLineError;
gabrieltetar 1:7e925468f9d9 1630 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
gabrieltetar 1:7e925468f9d9 1631 } else {
gabrieltetar 1:7e925468f9d9 1632 gameEtat = ETAT_GAME_PROCESS_INSTRUCTION;//On retourne dans l'etat d'envois de l'instruction
gabrieltetar 1:7e925468f9d9 1633 }
gabrieltetar 1:7e925468f9d9 1634 }
gabrieltetar 1:7e925468f9d9 1635 break;
gabrieltetar 1:7e925468f9d9 1636
gabrieltetar 1:7e925468f9d9 1637 case ETAT_GAME_JUMP_TIME:
gabrieltetar 1:7e925468f9d9 1638 if(cartesCheker.read_ms () >= instruction.JumpTimeOrX) {
gabrieltetar 1:7e925468f9d9 1639 cartesCheker.stop();//On arrete le timer
gabrieltetar 1:7e925468f9d9 1640 actual_instruction = instruction.nextLineOK;//On indique que l'on va charger l'instruction suivante
gabrieltetar 1:7e925468f9d9 1641 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;//On charge l'instruction suivante
gabrieltetar 1:7e925468f9d9 1642 }
gabrieltetar 1:7e925468f9d9 1643 break;
gabrieltetar 1:7e925468f9d9 1644
gabrieltetar 1:7e925468f9d9 1645 case ETAT_GAME_JUMP_CONFIG:
gabrieltetar 1:7e925468f9d9 1646 signed int depasX = 1, depasY = 1; // servent à indiquer le sens de dépassement des coordonnées
gabrieltetar 1:7e925468f9d9 1647 // 1 si l'instruction est plus grande que la position du robot
gabrieltetar 1:7e925468f9d9 1648 // -1 si l'instruction est plus petite que la position du robot
gabrieltetar 1:7e925468f9d9 1649 // 0 si l'instruction et position du robot sont proche de moins de 1cm
gabrieltetar 1:7e925468f9d9 1650 if (abs(x_robot-instruction.JumpTimeOrX)<10) {
gabrieltetar 1:7e925468f9d9 1651 depasX = 0;
gabrieltetar 1:7e925468f9d9 1652 } else if(x_robot > instruction.JumpTimeOrX) {
gabrieltetar 1:7e925468f9d9 1653 depasX = -1;
gabrieltetar 1:7e925468f9d9 1654 }
gabrieltetar 1:7e925468f9d9 1655
gabrieltetar 1:7e925468f9d9 1656 if(abs(y_robot-instruction.JumpY)<10) {
gabrieltetar 1:7e925468f9d9 1657 depasY = 0;
gabrieltetar 1:7e925468f9d9 1658 } else if(y_robot > instruction.JumpY) {
gabrieltetar 1:7e925468f9d9 1659 depasY = -1;
gabrieltetar 1:7e925468f9d9 1660 }
gabrieltetar 1:7e925468f9d9 1661
gabrieltetar 1:7e925468f9d9 1662 gameEtat = ETAT_GAME_JUMP_POSITION;
gabrieltetar 1:7e925468f9d9 1663 break;
gabrieltetar 1:7e925468f9d9 1664 case ETAT_GAME_JUMP_POSITION:
gabrieltetar 1:7e925468f9d9 1665 bool Xok = false, Yok = false;
gabrieltetar 1:7e925468f9d9 1666
gabrieltetar 1:7e925468f9d9 1667 if (depasX == 0) {
gabrieltetar 1:7e925468f9d9 1668 Xok = true;
gabrieltetar 1:7e925468f9d9 1669 } else if ((instruction.JumpTimeOrX - x_robot)*depasX < -5) {
gabrieltetar 1:7e925468f9d9 1670 Xok = true;
gabrieltetar 1:7e925468f9d9 1671 }
gabrieltetar 1:7e925468f9d9 1672
gabrieltetar 1:7e925468f9d9 1673 if (depasY == 0) {
gabrieltetar 1:7e925468f9d9 1674 Yok = true;
gabrieltetar 1:7e925468f9d9 1675 } else if ((instruction.JumpY - y_robot)*depasY < -5) {
gabrieltetar 1:7e925468f9d9 1676 Yok = true;
gabrieltetar 1:7e925468f9d9 1677 }
gabrieltetar 1:7e925468f9d9 1678
gabrieltetar 1:7e925468f9d9 1679 // on teste si les deux coordonnées ont été dépassées, si oui on lance l'instruction suivante
gabrieltetar 1:7e925468f9d9 1680 if (Xok && Yok) {
gabrieltetar 1:7e925468f9d9 1681 actual_instruction = instruction.nextLineOK;//On indique que l'on va charger l'instruction suivante
gabrieltetar 1:7e925468f9d9 1682 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;//On charge l'instruction suivante
gabrieltetar 1:7e925468f9d9 1683 }
gabrieltetar 1:7e925468f9d9 1684
gabrieltetar 1:7e925468f9d9 1685 break;
gabrieltetar 1:7e925468f9d9 1686 case ETAT_GAME_WAIT_END_INSTRUCTION:
gabrieltetar 1:7e925468f9d9 1687 canProcessRx();
gabrieltetar 1:7e925468f9d9 1688 if(waitingAckID_FIN == 0 && waitingAckFrom_FIN ==0) {//On attend que la carte nous indique que l'instruction est terminée
gabrieltetar 1:7e925468f9d9 1689 actual_instruction = instruction.nextLineOK;//On indique que l'on va charger l'instruction suivante
gabrieltetar 1:7e925468f9d9 1690 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;//On charge l'instruction suivante
gabrieltetar 1:7e925468f9d9 1691 }
gabrieltetar 1:7e925468f9d9 1692
gabrieltetar 1:7e925468f9d9 1693 break;
gabrieltetar 1:7e925468f9d9 1694
gabrieltetar 1:7e925468f9d9 1695 case ETAT_END:
gabrieltetar 10:1964bb91b925 1696 Debug_Audio(3,4);
gabrieltetar 1:7e925468f9d9 1697 if (ModeDemo) {
gabrieltetar 1:7e925468f9d9 1698 gameEtat = ETAT_CHECK_CARTE_SCREEN;
gabrieltetar 1:7e925468f9d9 1699 ModeDemo = 1;
gabrieltetar 1:7e925468f9d9 1700 } else {
gabrieltetar 1:7e925468f9d9 1701 gameEtat = ETAT_END_LOOP;
gabrieltetar 1:7e925468f9d9 1702 }
gabrieltetar 1:7e925468f9d9 1703 break;
gabrieltetar 1:7e925468f9d9 1704 case ETAT_END_LOOP:
gabrieltetar 1:7e925468f9d9 1705 //Rien, on tourne en rond
gabrieltetar 1:7e925468f9d9 1706
gabrieltetar 1:7e925468f9d9 1707 break;
gabrieltetar 1:7e925468f9d9 1708 default:
gabrieltetar 1:7e925468f9d9 1709
gabrieltetar 1:7e925468f9d9 1710 break;
gabrieltetar 1:7e925468f9d9 1711 }
gabrieltetar 1:7e925468f9d9 1712 }
gabrieltetar 1:7e925468f9d9 1713
gabrieltetar 1:7e925468f9d9 1714
gabrieltetar 1:7e925468f9d9 1715
gabrieltetar 1:7e925468f9d9 1716
gabrieltetar 1:7e925468f9d9 1717
gabrieltetar 1:7e925468f9d9 1718 /****************************************************************************************/
gabrieltetar 1:7e925468f9d9 1719 /* FUNCTION NAME: canProcessRx */
gabrieltetar 1:7e925468f9d9 1720 /* DESCRIPTION : Fait évoluer l'automate de l'IHM en fonction des receptions sur le CAN*/
gabrieltetar 1:7e925468f9d9 1721 /****************************************************************************************/
gabrieltetar 1:7e925468f9d9 1722 void canProcessRx(void)
gabrieltetar 1:7e925468f9d9 1723 {
gabrieltetar 1:7e925468f9d9 1724 static signed char FIFO_occupation=0,FIFO_max_occupation=0;
gabrieltetar 1:7e925468f9d9 1725 char message[10]="toto";
gabrieltetar 1:7e925468f9d9 1726 char message1[10]="toto";
gabrieltetar 1:7e925468f9d9 1727 char message2[10]="toto";
gabrieltetar 1:7e925468f9d9 1728 char message3[10]="toto";
gabrieltetar 1:7e925468f9d9 1729 char message4[10]="toto";
gabrieltetar 1:7e925468f9d9 1730 FIFO_occupation=FIFO_ecriture-FIFO_lecture;
gabrieltetar 1:7e925468f9d9 1731
gabrieltetar 1:7e925468f9d9 1732 if(FIFO_occupation<0)
gabrieltetar 1:7e925468f9d9 1733 FIFO_occupation=FIFO_occupation+SIZE_FIFO;
gabrieltetar 1:7e925468f9d9 1734
gabrieltetar 1:7e925468f9d9 1735 if(FIFO_max_occupation<FIFO_occupation) {
gabrieltetar 1:7e925468f9d9 1736 FIFO_max_occupation=FIFO_occupation;
gabrieltetar 1:7e925468f9d9 1737 //SendRawId(
gabrieltetar 1:7e925468f9d9 1738 }
gabrieltetar 1:7e925468f9d9 1739
gabrieltetar 1:7e925468f9d9 1740 if(FIFO_occupation!=0) {
gabrieltetar 1:7e925468f9d9 1741 int identifiant=msgRxBuffer[FIFO_lecture].id;
gabrieltetar 1:7e925468f9d9 1742
gabrieltetar 1:7e925468f9d9 1743 if (waitingId == identifiant) waitingId = 0;
gabrieltetar 1:7e925468f9d9 1744 switch(identifiant) {
gabrieltetar 1:7e925468f9d9 1745
gabrieltetar 1:7e925468f9d9 1746 case ALIVE_MOTEUR:
gabrieltetar 1:7e925468f9d9 1747 if (etat == ATT) {
gabrieltetar 1:7e925468f9d9 1748
gabrieltetar 1:7e925468f9d9 1749 lcd.SetTextColor(LCD_COLOR_LIGHTGREEN);
gabrieltetar 1:7e925468f9d9 1750 lcd.FillRect(0,400,400,150);
gabrieltetar 1:7e925468f9d9 1751 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 1:7e925468f9d9 1752 lcd.SetBackColor(LCD_COLOR_LIGHTGREEN);
gabrieltetar 1:7e925468f9d9 1753 lcd.DisplayStringAt(80, 450, (uint8_t *)"Carte Moteur", LEFT_MODE);
gabrieltetar 1:7e925468f9d9 1754 }
gabrieltetar 1:7e925468f9d9 1755 break;
gabrieltetar 1:7e925468f9d9 1756
gabrieltetar 1:7e925468f9d9 1757 case ALIVE_BALISE:
gabrieltetar 1:7e925468f9d9 1758 if (etat == ATT) {
gabrieltetar 1:7e925468f9d9 1759
gabrieltetar 1:7e925468f9d9 1760 lcd.SetTextColor(LCD_COLOR_LIGHTGREEN);
gabrieltetar 1:7e925468f9d9 1761 lcd.FillRect(0,600,400,150); //carte AX12
gabrieltetar 1:7e925468f9d9 1762 lcd.SetTextColor(LCD_COLOR_BLACK);
gabrieltetar 1:7e925468f9d9 1763 lcd.SetBackColor(LCD_COLOR_LIGHTGREEN);
gabrieltetar 1:7e925468f9d9 1764 lcd.DisplayStringAt(110, 650, (uint8_t *)"Balise", LEFT_MODE);
gabrieltetar 1:7e925468f9d9 1765 }
gabrieltetar 1:7e925468f9d9 1766 break;
gabrieltetar 1:7e925468f9d9 1767
gabrieltetar 1:7e925468f9d9 1768 case RESET_IHM:
gabrieltetar 1:7e925468f9d9 1769 etat = CHOIX;
gabrieltetar 1:7e925468f9d9 1770 break;
gabrieltetar 1:7e925468f9d9 1771
gabrieltetar 1:7e925468f9d9 1772 case DEBUG_FAKE_JAKE://Permet de lancer le match à distance
gabrieltetar 1:7e925468f9d9 1773 case GLOBAL_JACK:
gabrieltetar 1:7e925468f9d9 1774 if(gameEtat == ETAT_GAME_WAIT_FOR_JACK) {
gabrieltetar 1:7e925468f9d9 1775 gameEtat = ETAT_GAME_START;
gabrieltetar 1:7e925468f9d9 1776 SendRawId(ACKNOWLEDGE_JACK);
gabrieltetar 1:7e925468f9d9 1777 }
gabrieltetar 1:7e925468f9d9 1778 break;
gabrieltetar 1:7e925468f9d9 1779
gabrieltetar 1:7e925468f9d9 1780 case ALIVE_ACTIONNEURS_AVANT: //pas de break donc passe directement dans ECRAN_ALL_CHECK mais conserve l'ident initial
gabrieltetar 1:7e925468f9d9 1781 case ALIVE_ACTIONNEURS_ARRIERE:
gabrieltetar 1:7e925468f9d9 1782 case ALIVE_HERKULEX:
gabrieltetar 1:7e925468f9d9 1783 case ECRAN_ALL_CHECK:
gabrieltetar 1:7e925468f9d9 1784 if(waitingAckFrom == msgRxBuffer[FIFO_lecture].id) {
gabrieltetar 1:7e925468f9d9 1785 waitingAckFrom = 0;//C'est la bonne carte qui indique qu'elle est en ligne
gabrieltetar 1:7e925468f9d9 1786 }
gabrieltetar 1:7e925468f9d9 1787 flag=1;
gabrieltetar 1:7e925468f9d9 1788 break;
gabrieltetar 1:7e925468f9d9 1789
gabrieltetar 1:7e925468f9d9 1790 case ASSERVISSEMENT_ERROR_MOTEUR://erreur asservissement
gabrieltetar 1:7e925468f9d9 1791 {
gabrieltetar 1:7e925468f9d9 1792
gabrieltetar 1:7e925468f9d9 1793 unsigned short recieveAckID;// = (unsigned short)msgRxBuffer[FIFO_lecture].data[0] | ( ((unsigned short)msgRxBuffer[FIFO_lecture].data[1]) <<8);
gabrieltetar 1:7e925468f9d9 1794 memcpy(&recieveAckID, msgRxBuffer[FIFO_lecture].data, 2);
gabrieltetar 1:7e925468f9d9 1795 if(recieveAckID == waitingAckID_FIN && waitingAckFrom_FIN == INSTRUCTION_END_MOTEUR)
gabrieltetar 1:7e925468f9d9 1796 {
gabrieltetar 1:7e925468f9d9 1797 if(flagNonRepriseErrorMot) {
gabrieltetar 1:7e925468f9d9 1798 actual_instruction = instruction.nextLineError;
gabrieltetar 1:7e925468f9d9 1799 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
gabrieltetar 1:7e925468f9d9 1800 flagNonRepriseErrorMot = 0;
gabrieltetar 1:7e925468f9d9 1801 } else {
gabrieltetar 1:7e925468f9d9 1802 flagNonRepriseErrorMot = 1;
gabrieltetar 1:7e925468f9d9 1803 timeoutWarningWaitEnd.reset();
gabrieltetar 1:7e925468f9d9 1804 timeoutWarningWaitEnd.start();
gabrieltetar 1:7e925468f9d9 1805 //gameEtat = ETAT_WARING_END_BALISE_WAIT;
gabrieltetar 1:7e925468f9d9 1806 }
gabrieltetar 1:7e925468f9d9 1807 }
gabrieltetar 1:7e925468f9d9 1808 /*
gabrieltetar 1:7e925468f9d9 1809 if(flagNonRepriseErrorMot) {
gabrieltetar 1:7e925468f9d9 1810 actual_instruction = instruction.nextLineError;
gabrieltetar 1:7e925468f9d9 1811 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
gabrieltetar 1:7e925468f9d9 1812 flagNonRepriseErrorMot = 0;
gabrieltetar 1:7e925468f9d9 1813 } else {
gabrieltetar 1:7e925468f9d9 1814 flagNonRepriseErrorMot = 1;
gabrieltetar 1:7e925468f9d9 1815 gameEtat = ETAT_WARNING_END_LAST_INSTRUCTION;
gabrieltetar 1:7e925468f9d9 1816 }*/
gabrieltetar 1:7e925468f9d9 1817 } break;
gabrieltetar 1:7e925468f9d9 1818
gabrieltetar 1:7e925468f9d9 1819 /////////////////////////////////////Acknowledges de Reception de la demande d'action////////////////////////////////////////
gabrieltetar 1:7e925468f9d9 1820 case ACKNOWLEDGE_HERKULEX:
gabrieltetar 1:7e925468f9d9 1821 case ACKNOWLEDGE_BALISE: //pas de break donc passe directement dans ACK_FIN_ACTION mais conserve l'ident initial
gabrieltetar 1:7e925468f9d9 1822
gabrieltetar 1:7e925468f9d9 1823 case ACKNOWLEDGE_TELEMETRE:
gabrieltetar 1:7e925468f9d9 1824 /////////////////////////////////////////////Acknowledges de la fin d'action/////////////////////////////////////////////////
gabrieltetar 1:7e925468f9d9 1825 case ACKNOWLEDGE_MOTEUR:
gabrieltetar 1:7e925468f9d9 1826 case INSTRUCTION_END_BALISE:
gabrieltetar 1:7e925468f9d9 1827 case ACK_FIN_ACTION:
gabrieltetar 1:7e925468f9d9 1828 case INSTRUCTION_END_MOTEUR:
gabrieltetar 1:7e925468f9d9 1829 unsigned short recieveAckID;// = (unsigned short)msgRxBuffer[FIFO_lecture].data[0] | ( ((unsigned short)msgRxBuffer[FIFO_lecture].data[1]) <<8);
gabrieltetar 1:7e925468f9d9 1830 memcpy(&recieveAckID, msgRxBuffer[FIFO_lecture].data, 2);
gabrieltetar 1:7e925468f9d9 1831 /*
gabrieltetar 1:7e925468f9d9 1832 //on desactive la balise dans les rotations XYT
gabrieltetar 1:7e925468f9d9 1833 if(msgRxBuffer[FIFO_lecture].id==ACKNOWLEDGE_MOTEUR && ASSERVISSEMENT_XYT==recieveAckID)ingnorBalise=1;
gabrieltetar 1:7e925468f9d9 1834 if(msgRxBuffer[FIFO_lecture].id==INSTRUCTION_END_MOTEUR && ASSERVISSEMENT_XYT_ROTATE==recieveAckID)ingnorBalise=0;
gabrieltetar 1:7e925468f9d9 1835
gabrieltetar 1:7e925468f9d9 1836 //on desactive la balise dans les rotations
gabrieltetar 1:7e925468f9d9 1837 if(msgRxBuffer[FIFO_lecture].id==ACKNOWLEDGE_MOTEUR && ASSERVISSEMENT_ROTATION==recieveAckID)ingnorBalise=1;
gabrieltetar 1:7e925468f9d9 1838 if(msgRxBuffer[FIFO_lecture].id==INSTRUCTION_END_MOTEUR && ASSERVISSEMENT_ROTATION==recieveAckID)ingnorBalise=0;
gabrieltetar 1:7e925468f9d9 1839 */
gabrieltetar 1:7e925468f9d9 1840
gabrieltetar 1:7e925468f9d9 1841 // SendMsgCan(0x666,&ingnorBalise,1);
gabrieltetar 1:7e925468f9d9 1842
gabrieltetar 1:7e925468f9d9 1843 if( waitingAckFrom == msgRxBuffer[FIFO_lecture].id && recieveAckID == waitingAckID ) {
gabrieltetar 1:7e925468f9d9 1844 waitingAckFrom = 0;
gabrieltetar 1:7e925468f9d9 1845 waitingAckID = 0;
gabrieltetar 1:7e925468f9d9 1846 }
gabrieltetar 1:7e925468f9d9 1847 if( waitingAckFrom_FIN == msgRxBuffer[FIFO_lecture].id && recieveAckID == waitingAckID_FIN ) {
gabrieltetar 1:7e925468f9d9 1848 waitingAckFrom_FIN = 0;
gabrieltetar 1:7e925468f9d9 1849 waitingAckID_FIN = 0;
gabrieltetar 1:7e925468f9d9 1850 }
gabrieltetar 1:7e925468f9d9 1851
gabrieltetar 1:7e925468f9d9 1852 /*
gabrieltetar 1:7e925468f9d9 1853 if((waitingAckFrom == msgRxBuffer[FIFO_lecture].id) &&
gabrieltetar 1:7e925468f9d9 1854 ((unsigned short)msgRxBuffer[FIFO_lecture].data[0] | (((unsigned short)msgRxBuffer[FIFO_lecture].data[1])<<8) == waitingAckID) )
gabrieltetar 1:7e925468f9d9 1855 {
gabrieltetar 1:7e925468f9d9 1856 waitingAckFrom = 0;
gabrieltetar 1:7e925468f9d9 1857 waitingAckID = 0;
gabrieltetar 1:7e925468f9d9 1858 }
gabrieltetar 1:7e925468f9d9 1859 if(waitingAckFrom_FIN == msgRxBuffer[FIFO_lecture].id && ((unsigned short)msgRxBuffer[FIFO_lecture].data[0]
gabrieltetar 1:7e925468f9d9 1860 |(((unsigned short)msgRxBuffer[FIFO_lecture].data[1])<<8) == waitingAckID_FIN))
gabrieltetar 1:7e925468f9d9 1861 {
gabrieltetar 1:7e925468f9d9 1862 waitingAckFrom_FIN = 0;
gabrieltetar 1:7e925468f9d9 1863 waitingAckID_FIN = 0;
gabrieltetar 1:7e925468f9d9 1864 }
gabrieltetar 1:7e925468f9d9 1865 */
gabrieltetar 1:7e925468f9d9 1866 break;
gabrieltetar 1:7e925468f9d9 1867 case ODOMETRIE_BIG_POSITION:
gabrieltetar 1:7e925468f9d9 1868 case ODOMETRIE_SMALL_POSITION:
gabrieltetar 1:7e925468f9d9 1869
gabrieltetar 1:7e925468f9d9 1870 x_robot=msgRxBuffer[FIFO_lecture].data[0]|((unsigned short)(msgRxBuffer[FIFO_lecture].data[1])<<8);
gabrieltetar 1:7e925468f9d9 1871 y_robot=msgRxBuffer[FIFO_lecture].data[2]|((unsigned short)(msgRxBuffer[FIFO_lecture].data[3])<<8);
gabrieltetar 1:7e925468f9d9 1872 theta_robot=msgRxBuffer[FIFO_lecture].data[4]|((signed short)(msgRxBuffer[FIFO_lecture].data[5])<<8);
gabrieltetar 1:7e925468f9d9 1873 break;
gabrieltetar 1:7e925468f9d9 1874
gabrieltetar 1:7e925468f9d9 1875 case ACK_ACTION:
gabrieltetar 1:7e925468f9d9 1876 if(waitingAckID == msgRxBuffer[FIFO_lecture].id) {
gabrieltetar 1:7e925468f9d9 1877 waitingAckFrom = 0;
gabrieltetar 1:7e925468f9d9 1878 waitingAckID = 0;
gabrieltetar 1:7e925468f9d9 1879 }
gabrieltetar 1:7e925468f9d9 1880 break;
gabrieltetar 1:7e925468f9d9 1881
gabrieltetar 1:7e925468f9d9 1882 case BALISE_DANGER :
gabrieltetar 1:7e925468f9d9 1883 SendAck(ACKNOWLEDGE_BALISE, BALISE_END_DANGER);
gabrieltetar 1:7e925468f9d9 1884 balise_danger();
gabrieltetar 1:7e925468f9d9 1885 break;
gabrieltetar 1:7e925468f9d9 1886
gabrieltetar 1:7e925468f9d9 1887 case BALISE_STOP:
gabrieltetar 1:7e925468f9d9 1888 SendAck(ACKNOWLEDGE_BALISE, BALISE_STOP);
gabrieltetar 1:7e925468f9d9 1889 balise_stop(FIFO_lecture);
gabrieltetar 1:7e925468f9d9 1890 break;
gabrieltetar 1:7e925468f9d9 1891
gabrieltetar 1:7e925468f9d9 1892 case BALISE_END_DANGER:
gabrieltetar 1:7e925468f9d9 1893 SendAck(ACKNOWLEDGE_BALISE, BALISE_END_DANGER);
gabrieltetar 1:7e925468f9d9 1894 balise_end_danger(&instruction,&dodgeq,&gameEtat,target_x_robot,target_y_robot,target_theta_robot, theta_robot,x_robot,y_robot);
gabrieltetar 1:7e925468f9d9 1895 break;
gabrieltetar 1:7e925468f9d9 1896
gabrieltetar 1:7e925468f9d9 1897 case RECEPTION_DATA:
gabrieltetar 1:7e925468f9d9 1898 telemetreDistance=char_to_short_transformation(msgRxBuffer[FIFO_lecture].data[0], msgRxBuffer[FIFO_lecture].data[1]);
gabrieltetar 1:7e925468f9d9 1899 telemetreDistance= (float)telemetreDistance*100.0f*35.5f+50.0f;
gabrieltetar 1:7e925468f9d9 1900 waitingAckFrom = 0;
gabrieltetar 1:7e925468f9d9 1901 waitingAckID = 0;
gabrieltetar 1:7e925468f9d9 1902 break;
gabrieltetar 1:7e925468f9d9 1903
gabrieltetar 1:7e925468f9d9 1904 case RECEPTION_RECALAGE:
gabrieltetar 1:7e925468f9d9 1905 wait_us(150);
gabrieltetar 1:7e925468f9d9 1906 flagReceptionTelemetres = 1;
gabrieltetar 1:7e925468f9d9 1907 // telemetreDistance_avant_droite = char_to_short_transformation(msgRxBuffer[FIFO_lecture].data[0], msgRxBuffer[FIFO_lecture].data[1]); //on récupère la distance traité par l'autre micro
gabrieltetar 1:7e925468f9d9 1908 memcpy(&telemetreDistance_avant_droite,msgRxBuffer[FIFO_lecture].data,2);
gabrieltetar 1:7e925468f9d9 1909 telemetreDistance_avant_gauche = char_to_short_transformation(msgRxBuffer[FIFO_lecture].data[2], msgRxBuffer[FIFO_lecture].data[3]);
gabrieltetar 1:7e925468f9d9 1910 telemetreDistance_arriere_gauche = char_to_short_transformation(msgRxBuffer[FIFO_lecture].data[4], msgRxBuffer[FIFO_lecture].data[5]);
gabrieltetar 1:7e925468f9d9 1911 telemetreDistance_arriere_droite = char_to_short_transformation(msgRxBuffer[FIFO_lecture].data[6], msgRxBuffer[FIFO_lecture].data[7]);
gabrieltetar 1:7e925468f9d9 1912
gabrieltetar 1:7e925468f9d9 1913
gabrieltetar 1:7e925468f9d9 1914 if(ModeDemo==1) {
gabrieltetar 1:7e925468f9d9 1915 sprintf(message,"%04dmm L:%d",telemetreDistance_avant_droite,DT_AVD_interrupt);
gabrieltetar 1:7e925468f9d9 1916 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 1917 lcd.DisplayStringAt(0, LINE(8),(unsigned char *)"LASER AVD : ",LEFT_MODE);
gabrieltetar 1:7e925468f9d9 1918 lcd.DisplayStringAt(200, LINE(8),(unsigned char *)message, LEFT_MODE);
gabrieltetar 1:7e925468f9d9 1919
gabrieltetar 1:7e925468f9d9 1920 sprintf(message1,"%04dmm L:%d",telemetreDistance_avant_gauche,DT_AVG_interrupt);
gabrieltetar 1:7e925468f9d9 1921 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 1922 lcd.DisplayStringAt(0, LINE(10),(unsigned char *)"LASER AVG : ",LEFT_MODE);
gabrieltetar 1:7e925468f9d9 1923 lcd.DisplayStringAt(200, LINE(10),(unsigned char *)message1, LEFT_MODE);
gabrieltetar 1:7e925468f9d9 1924
gabrieltetar 1:7e925468f9d9 1925
gabrieltetar 1:7e925468f9d9 1926 sprintf(message4,"%04d",theta_robot);
gabrieltetar 1:7e925468f9d9 1927 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 1928 lcd.DisplayStringAt(0, LINE(13),(unsigned char *)"THETA: ",LEFT_MODE);
gabrieltetar 1:7e925468f9d9 1929 lcd.DisplayStringAt(200, LINE(13),(unsigned char *)message4, LEFT_MODE);
gabrieltetar 1:7e925468f9d9 1930
gabrieltetar 1:7e925468f9d9 1931
gabrieltetar 1:7e925468f9d9 1932 sprintf(message2,"%04dmm L:%d",telemetreDistance_arriere_gauche,DT_ARG_interrupt);
gabrieltetar 1:7e925468f9d9 1933 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 1934 lcd.DisplayStringAt(0, LINE(16),(unsigned char *)"LASER ARG : ",LEFT_MODE);
gabrieltetar 1:7e925468f9d9 1935 lcd.DisplayStringAt(200, LINE(16),(unsigned char *)message2, LEFT_MODE);
gabrieltetar 1:7e925468f9d9 1936
gabrieltetar 1:7e925468f9d9 1937 sprintf(message3,"%04dmm L:%d",telemetreDistance_arriere_droite,DT_ARD_interrupt);
gabrieltetar 1:7e925468f9d9 1938 lcd.SetBackColor(LCD_COLOR_WHITE);
gabrieltetar 1:7e925468f9d9 1939 lcd.DisplayStringAt(0, LINE(18),(unsigned char *)"LASER ARD : ",LEFT_MODE);
gabrieltetar 1:7e925468f9d9 1940 lcd.DisplayStringAt(200, LINE(18),(unsigned char *)message3, LEFT_MODE);
gabrieltetar 1:7e925468f9d9 1941 }
gabrieltetar 1:7e925468f9d9 1942 break;
gabrieltetar 1:7e925468f9d9 1943 case RECEPTION_TELEMETRE_LOGIQUE:
gabrieltetar 1:7e925468f9d9 1944
gabrieltetar 1:7e925468f9d9 1945 DT_AVD_interrupt=msgRxBuffer[FIFO_lecture].data[0];
gabrieltetar 1:7e925468f9d9 1946 DT_AVG_interrupt=msgRxBuffer[FIFO_lecture].data[1];
gabrieltetar 1:7e925468f9d9 1947 DT_ARG_interrupt=msgRxBuffer[FIFO_lecture].data[2];
gabrieltetar 1:7e925468f9d9 1948 DT_ARD_interrupt=msgRxBuffer[FIFO_lecture].data[3];
gabrieltetar 1:7e925468f9d9 1949
gabrieltetar 1:7e925468f9d9 1950 break;
gabrieltetar 1:7e925468f9d9 1951 case RECEPTION_COULEUR:
gabrieltetar 1:7e925468f9d9 1952 if (blocage_balise==0) {
gabrieltetar 1:7e925468f9d9 1953 couleur1=msgRxBuffer[FIFO_lecture].data[0];
gabrieltetar 1:7e925468f9d9 1954 couleur2=msgRxBuffer[FIFO_lecture].data[1];
gabrieltetar 1:7e925468f9d9 1955 couleur3=msgRxBuffer[FIFO_lecture].data[2];
gabrieltetar 1:7e925468f9d9 1956
gabrieltetar 1:7e925468f9d9 1957 /*lcd.DisplayStringAt(0,LINE(16),(unsigned char *)couleur1+'0',LEFT_MODE);
gabrieltetar 1:7e925468f9d9 1958 lcd.DisplayStringAt(0,LINE(16+1),(unsigned char *)couleur2+'0',LEFT_MODE);
gabrieltetar 1:7e925468f9d9 1959 lcd.DisplayStringAt(0,LINE(16+2),(unsigned char *)couleur3+'0',LEFT_MODE);*/
gabrieltetar 1:7e925468f9d9 1960 }
gabrieltetar 1:7e925468f9d9 1961
gabrieltetar 1:7e925468f9d9 1962 break;
gabrieltetar 10:1964bb91b925 1963 default:
gabrieltetar 10:1964bb91b925 1964 break;
gabrieltetar 1:7e925468f9d9 1965 /*
gabrieltetar 1:7e925468f9d9 1966 case NO_BLOC: //il n'y a pas de bloc, on saute les étapes liées à l'attrape bloc
gabrieltetar 1:7e925468f9d9 1967 actual_instruction = instruction.nextLineError;
gabrieltetar 1:7e925468f9d9 1968 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
gabrieltetar 1:7e925468f9d9 1969 // waitingAckID_FIN=0;
gabrieltetar 1:7e925468f9d9 1970 // waitingAckFrom_FIN=0;
gabrieltetar 1:7e925468f9d9 1971 SendRawId(0x40);
gabrieltetar 1:7e925468f9d9 1972 break;*/
gabrieltetar 1:7e925468f9d9 1973 }
gabrieltetar 1:7e925468f9d9 1974 FIFO_lecture=(FIFO_lecture+1)%SIZE_FIFO;
gabrieltetar 1:7e925468f9d9 1975 }
gabrieltetar 1:7e925468f9d9 1976 }
gabrieltetar 1:7e925468f9d9 1977
gabrieltetar 1:7e925468f9d9 1978
gabrieltetar 1:7e925468f9d9 1979
gabrieltetar 1:7e925468f9d9 1980
gabrieltetar 1:7e925468f9d9 1981
gabrieltetar 1:7e925468f9d9 1982 /****************************************************************************************/
gabrieltetar 1:7e925468f9d9 1983 /* FUNCTION NAME: Bouton_Strat */
gabrieltetar 1:7e925468f9d9 1984 /* DESCRIPTION : Sélection de la strat sur le lcd puis envoie sur CAN (à modifier!) */
gabrieltetar 1:7e925468f9d9 1985 /****************************************************************************************/
gabrieltetar 1:7e925468f9d9 1986 signed char Bouton_Strat (void)
gabrieltetar 1:7e925468f9d9 1987 {
gabrieltetar 1:7e925468f9d9 1988 Button STRAT_1 (0, 30, 190, 110, strat_sd[0]);
gabrieltetar 1:7e925468f9d9 1989 Button STRAT_2 (210, 30, 190, 110, strat_sd[1]);
gabrieltetar 1:7e925468f9d9 1990 Button STRAT_3 (0, 150, 190, 110, strat_sd[2]);
gabrieltetar 1:7e925468f9d9 1991 Button STRAT_4 (210, 150, 190, 110, strat_sd[3]);
gabrieltetar 1:7e925468f9d9 1992 Button STRAT_5 (0, 270, 190, 110,strat_sd[4]);
gabrieltetar 1:7e925468f9d9 1993 Button STRAT_6 (210, 270, 190, 110, strat_sd[5]);
gabrieltetar 1:7e925468f9d9 1994 Button STRAT_7 (0, 390, 190, 110, strat_sd[6]);
gabrieltetar 1:7e925468f9d9 1995 Button STRAT_8 (210, 390, 190, 110, strat_sd[7]);
gabrieltetar 1:7e925468f9d9 1996 Button STRAT_9 (0, 510, 190, 110, strat_sd[8]);
gabrieltetar 1:7e925468f9d9 1997 Button STRAT_10 (210, 510, 190, 110, strat_sd[9]);
gabrieltetar 1:7e925468f9d9 1998 Button RETOUR (0, 680, 400, 110, "--Precedent--");
gabrieltetar 1:7e925468f9d9 1999 //Definition des boutons
gabrieltetar 1:7e925468f9d9 2000
gabrieltetar 1:7e925468f9d9 2001 Ack_strat = 0;
gabrieltetar 1:7e925468f9d9 2002 Strat = 0;
gabrieltetar 1:7e925468f9d9 2003 STRAT_1.Draw(0xFFF0F0F0, 0);
gabrieltetar 1:7e925468f9d9 2004 STRAT_2.Draw(0xFFF0F0F0, 0);
gabrieltetar 1:7e925468f9d9 2005 STRAT_3.Draw(0xFFF0F0F0, 0);
gabrieltetar 1:7e925468f9d9 2006 STRAT_4.Draw(0xFFF0F0F0, 0);
gabrieltetar 1:7e925468f9d9 2007 STRAT_5.Draw(0xFFF0F0F0, 0);
gabrieltetar 1:7e925468f9d9 2008 STRAT_6.Draw(0xFFF0F0F0, 0);
gabrieltetar 1:7e925468f9d9 2009 STRAT_7.Draw(0xFFF0F0F0, 0);
gabrieltetar 1:7e925468f9d9 2010 STRAT_8.Draw(0xFFF0F0F0, 0);
gabrieltetar 1:7e925468f9d9 2011 STRAT_9.Draw(0xFFF0F0F0, 0);
gabrieltetar 1:7e925468f9d9 2012 STRAT_10.Draw(0xFFF0F0F0, 0);
gabrieltetar 1:7e925468f9d9 2013 RETOUR.Draw(0xFFFF0000, 0);
gabrieltetar 1:7e925468f9d9 2014
gabrieltetar 1:7e925468f9d9 2015 while(Ack_strat == 0) {
gabrieltetar 1:7e925468f9d9 2016 canProcessRx();
gabrieltetar 1:7e925468f9d9 2017 CANMessage msgTx=CANMessage();
gabrieltetar 1:7e925468f9d9 2018 //msgTx.id=ECRAN_CHOICE_STRAT;
gabrieltetar 1:7e925468f9d9 2019 if (RETOUR.Touched())
gabrieltetar 1:7e925468f9d9 2020 return -1;
gabrieltetar 1:7e925468f9d9 2021 while(RETOUR.Touched());
gabrieltetar 1:7e925468f9d9 2022 //////////////////////////////STRATEGIE N°1
gabrieltetar 1:7e925468f9d9 2023 if (STRAT_1.Touched()) {
gabrieltetar 1:7e925468f9d9 2024 Strat = 0;
gabrieltetar 1:7e925468f9d9 2025 //msgTx.data[0] = 0x1;
gabrieltetar 1:7e925468f9d9 2026 //can2.write(msgTx);
gabrieltetar 1:7e925468f9d9 2027 while(STRAT_1.Touched());
gabrieltetar 1:7e925468f9d9 2028 Ack_strat =1;
gabrieltetar 1:7e925468f9d9 2029 }
gabrieltetar 1:7e925468f9d9 2030 /////////////////////////////STRATEGIE N°2
gabrieltetar 1:7e925468f9d9 2031 if (STRAT_2.Touched()) {
gabrieltetar 1:7e925468f9d9 2032 Strat = 1;
gabrieltetar 1:7e925468f9d9 2033 //msgTx.data[0] = 0x2;
gabrieltetar 1:7e925468f9d9 2034 //can2.write(msgTx);
gabrieltetar 1:7e925468f9d9 2035 while(STRAT_2.Touched());
gabrieltetar 1:7e925468f9d9 2036 Ack_strat =1;
gabrieltetar 1:7e925468f9d9 2037 }
gabrieltetar 1:7e925468f9d9 2038 //////////////////////////////STRATEGIE N°3
gabrieltetar 1:7e925468f9d9 2039 if (STRAT_3.Touched()) {
gabrieltetar 1:7e925468f9d9 2040 Strat = 2;
gabrieltetar 1:7e925468f9d9 2041 //msgTx.data[0] = 0x3;
gabrieltetar 1:7e925468f9d9 2042 //can2.write(msgTx);
gabrieltetar 1:7e925468f9d9 2043 while(STRAT_3.Touched());
gabrieltetar 1:7e925468f9d9 2044 Ack_strat =1;
gabrieltetar 1:7e925468f9d9 2045 }
gabrieltetar 1:7e925468f9d9 2046 /////////////////////////////STRATEGIE N°4
gabrieltetar 1:7e925468f9d9 2047 if (STRAT_4.Touched()) {
gabrieltetar 1:7e925468f9d9 2048 Strat = 3;
gabrieltetar 1:7e925468f9d9 2049 //msgTx.data[0] = 0x4;
gabrieltetar 1:7e925468f9d9 2050 //can2.write(msgTx);
gabrieltetar 1:7e925468f9d9 2051 while(STRAT_4.Touched());
gabrieltetar 1:7e925468f9d9 2052 Ack_strat =1;
gabrieltetar 1:7e925468f9d9 2053 }
gabrieltetar 1:7e925468f9d9 2054 ///////////////////////////////STRATEGIE N°5
gabrieltetar 1:7e925468f9d9 2055 if (STRAT_5.Touched()) {
gabrieltetar 1:7e925468f9d9 2056 Strat = 4;
gabrieltetar 1:7e925468f9d9 2057 //msgTx.data[0] = 0x5;
gabrieltetar 1:7e925468f9d9 2058 //can2.write(msgTx);
gabrieltetar 1:7e925468f9d9 2059 while(STRAT_5.Touched());
gabrieltetar 1:7e925468f9d9 2060 Ack_strat =1;
gabrieltetar 1:7e925468f9d9 2061 }
gabrieltetar 1:7e925468f9d9 2062 ////////////////////////////////STRATEGIE N°6
gabrieltetar 1:7e925468f9d9 2063 if (STRAT_6.Touched()) {
gabrieltetar 1:7e925468f9d9 2064 Strat = 5;
gabrieltetar 1:7e925468f9d9 2065 //msgTx.data[0] = 0x6;
gabrieltetar 1:7e925468f9d9 2066 //can2.write(msgTx);
gabrieltetar 1:7e925468f9d9 2067 while(STRAT_6.Touched());
gabrieltetar 1:7e925468f9d9 2068 Ack_strat =1;
gabrieltetar 1:7e925468f9d9 2069 }
gabrieltetar 1:7e925468f9d9 2070 /////////////////////////////////STRATEGIE N°7
gabrieltetar 1:7e925468f9d9 2071 if (STRAT_7.Touched()) {
gabrieltetar 1:7e925468f9d9 2072 Strat = 6;
gabrieltetar 1:7e925468f9d9 2073 //msgTx.data[0] = 0x7;
gabrieltetar 1:7e925468f9d9 2074 //can2.write(msgTx);
gabrieltetar 1:7e925468f9d9 2075 while(STRAT_7.Touched());
gabrieltetar 1:7e925468f9d9 2076 Ack_strat =1;
gabrieltetar 1:7e925468f9d9 2077 }
gabrieltetar 1:7e925468f9d9 2078 /////////////////////////////////STRATEGIE N°8
gabrieltetar 1:7e925468f9d9 2079 if (STRAT_8.Touched()) {
gabrieltetar 1:7e925468f9d9 2080 Strat = 7;
gabrieltetar 1:7e925468f9d9 2081 //msgTx.data[0] = 0x8;
gabrieltetar 1:7e925468f9d9 2082 //can2.write(msgTx);
gabrieltetar 1:7e925468f9d9 2083 while(STRAT_8.Touched());
gabrieltetar 1:7e925468f9d9 2084 Ack_strat =1;
gabrieltetar 1:7e925468f9d9 2085 }
gabrieltetar 1:7e925468f9d9 2086 /////////////////////////////////STRATEGIE N°9
gabrieltetar 1:7e925468f9d9 2087 if (STRAT_9.Touched()) {
gabrieltetar 1:7e925468f9d9 2088 Strat = 8;
gabrieltetar 1:7e925468f9d9 2089 //msgTx.data[0] = 0x9;
gabrieltetar 1:7e925468f9d9 2090 //can2.write(msgTx);
gabrieltetar 1:7e925468f9d9 2091 while(STRAT_9.Touched());
gabrieltetar 1:7e925468f9d9 2092 Ack_strat =1;
gabrieltetar 1:7e925468f9d9 2093 }
gabrieltetar 1:7e925468f9d9 2094 ///////////////////////////////////STRATEGIE N°10
gabrieltetar 1:7e925468f9d9 2095 if (STRAT_10.Touched()) {
gabrieltetar 1:7e925468f9d9 2096 Strat = 9;
gabrieltetar 1:7e925468f9d9 2097 //msgTx.data[0] = 0xA;
gabrieltetar 1:7e925468f9d9 2098 //can2.write(msgTx);
gabrieltetar 1:7e925468f9d9 2099 while(STRAT_10.Touched());
gabrieltetar 1:7e925468f9d9 2100 Ack_strat =1;
gabrieltetar 1:7e925468f9d9 2101 }
gabrieltetar 1:7e925468f9d9 2102
gabrieltetar 1:7e925468f9d9 2103 }
gabrieltetar 1:7e925468f9d9 2104 return Strat;
gabrieltetar 1:7e925468f9d9 2105
gabrieltetar 1:7e925468f9d9 2106 }
gabrieltetar 1:7e925468f9d9 2107
gabrieltetar 1:7e925468f9d9 2108 void affichage_compteur (int nombre)
gabrieltetar 1:7e925468f9d9 2109 {
gabrieltetar 1:7e925468f9d9 2110 int dizaine=0,unite=0,centaine=0;
gabrieltetar 1:7e925468f9d9 2111 centaine = nombre/100;
gabrieltetar 1:7e925468f9d9 2112 dizaine = nombre/10;
gabrieltetar 1:7e925468f9d9 2113 unite = nombre-(10*dizaine);
gabrieltetar 1:7e925468f9d9 2114 print_segment(unite,-50);
gabrieltetar 1:7e925468f9d9 2115 print_segment(dizaine,100);
gabrieltetar 1:7e925468f9d9 2116 if(centaine!=0) {
gabrieltetar 1:7e925468f9d9 2117 print_segment(centaine,350);
gabrieltetar 1:7e925468f9d9 2118 }
gabrieltetar 1:7e925468f9d9 2119
gabrieltetar 1:7e925468f9d9 2120 }
gabrieltetar 1:7e925468f9d9 2121
gabrieltetar 1:7e925468f9d9 2122
gabrieltetar 1:7e925468f9d9 2123 //****print_segment***
gabrieltetar 1:7e925468f9d9 2124 //Dessine en 7 segment le nombre en parametre
gabrieltetar 1:7e925468f9d9 2125 // A
gabrieltetar 1:7e925468f9d9 2126 // =====
gabrieltetar 1:7e925468f9d9 2127 // | |
gabrieltetar 1:7e925468f9d9 2128 // B | G | E
gabrieltetar 1:7e925468f9d9 2129 // |=====|
gabrieltetar 1:7e925468f9d9 2130 // C | | F
gabrieltetar 1:7e925468f9d9 2131 // | |
gabrieltetar 1:7e925468f9d9 2132 // =====
gabrieltetar 1:7e925468f9d9 2133 // D
gabrieltetar 1:7e925468f9d9 2134 /*
gabrieltetar 1:7e925468f9d9 2135 position pour le chiffre des unites
gabrieltetar 1:7e925468f9d9 2136 lcd.FillRect(460,75,120,25);// A
gabrieltetar 1:7e925468f9d9 2137 lcd.FillRect(435,100,25,120);// B
gabrieltetar 1:7e925468f9d9 2138 lcd.FillRect(435,245,25,120);// C
gabrieltetar 1:7e925468f9d9 2139 lcd.FillRect(460,365,120,25);// D
gabrieltetar 1:7e925468f9d9 2140 lcd.FillRect(580,100,25,120);// E
gabrieltetar 1:7e925468f9d9 2141 lcd.FillRect(580,245,25,120);// F
gabrieltetar 1:7e925468f9d9 2142 lcd.FillRect(460,220,120,25);// G
gabrieltetar 1:7e925468f9d9 2143
gabrieltetar 1:7e925468f9d9 2144 position pour le chiffre des dizaines
gabrieltetar 1:7e925468f9d9 2145 lcd.FillRect(260,75,120,25);// A
gabrieltetar 1:7e925468f9d9 2146 lcd.FillRect(235,100,25,120);// B
gabrieltetar 1:7e925468f9d9 2147 lcd.FillRect(235,245,25,120);// C
gabrieltetar 1:7e925468f9d9 2148 lcd.FillRect(260,365,120,25);// D
gabrieltetar 1:7e925468f9d9 2149 lcd.FillRect(380,100,25,120);// E
gabrieltetar 1:7e925468f9d9 2150 lcd.FillRect(380,245,25,120);// F
gabrieltetar 1:7e925468f9d9 2151 lcd.FillRect(260,220,120,25);// G
gabrieltetar 1:7e925468f9d9 2152 */
gabrieltetar 1:7e925468f9d9 2153
gabrieltetar 1:7e925468f9d9 2154 void print_segment(int nombre, int decalage)
gabrieltetar 1:7e925468f9d9 2155 {
gabrieltetar 1:7e925468f9d9 2156
gabrieltetar 1:7e925468f9d9 2157 switch(nombre) {
gabrieltetar 1:7e925468f9d9 2158 case 0:
gabrieltetar 1:7e925468f9d9 2159 lcd.FillRect(240-decalage,75,120,25);
gabrieltetar 1:7e925468f9d9 2160 lcd.FillRect(215-decalage,100,25,120);
gabrieltetar 1:7e925468f9d9 2161 lcd.FillRect(215-decalage,245,25,120);
gabrieltetar 1:7e925468f9d9 2162 lcd.FillRect(360-decalage,245,25,120);
gabrieltetar 1:7e925468f9d9 2163 lcd.FillRect(360-decalage,100,25,120);
gabrieltetar 1:7e925468f9d9 2164 lcd.FillRect(240-decalage,365,120,25);
gabrieltetar 1:7e925468f9d9 2165 break;
gabrieltetar 1:7e925468f9d9 2166
gabrieltetar 1:7e925468f9d9 2167 case 1:
gabrieltetar 1:7e925468f9d9 2168 lcd.FillRect(360-decalage,100,25,120);// E
gabrieltetar 1:7e925468f9d9 2169 lcd.FillRect(360-decalage,245,25,120);// F
gabrieltetar 1:7e925468f9d9 2170 break;
gabrieltetar 1:7e925468f9d9 2171
gabrieltetar 1:7e925468f9d9 2172 case 2:
gabrieltetar 1:7e925468f9d9 2173 lcd.FillRect(240-decalage,75,120,25);// A
gabrieltetar 1:7e925468f9d9 2174 lcd.FillRect(215-decalage,245,25,120);// C
gabrieltetar 1:7e925468f9d9 2175 lcd.FillRect(240-decalage,365,120,25);// D
gabrieltetar 1:7e925468f9d9 2176 lcd.FillRect(360-decalage,100,25,120);// E
gabrieltetar 1:7e925468f9d9 2177 lcd.FillRect(240-decalage,220,120,25);// G
gabrieltetar 1:7e925468f9d9 2178 break;
gabrieltetar 1:7e925468f9d9 2179
gabrieltetar 1:7e925468f9d9 2180 case 3:
gabrieltetar 1:7e925468f9d9 2181 lcd.FillRect(240-decalage,75,120,25);// A
gabrieltetar 1:7e925468f9d9 2182 lcd.FillRect(360-decalage,100,25,120);// E
gabrieltetar 1:7e925468f9d9 2183 lcd.FillRect(240-decalage,220,120,25);// G
gabrieltetar 1:7e925468f9d9 2184 lcd.FillRect(240-decalage,365,120,25);// D
gabrieltetar 1:7e925468f9d9 2185 lcd.FillRect(360-decalage,245,25,120);// F
gabrieltetar 1:7e925468f9d9 2186 break;
gabrieltetar 1:7e925468f9d9 2187
gabrieltetar 1:7e925468f9d9 2188 case 4:
gabrieltetar 1:7e925468f9d9 2189 lcd.FillRect(215-decalage,100,25,120);// B
gabrieltetar 1:7e925468f9d9 2190 lcd.FillRect(360-decalage,100,25,120);// E
gabrieltetar 1:7e925468f9d9 2191 lcd.FillRect(360-decalage,245,25,120);// F
gabrieltetar 1:7e925468f9d9 2192 lcd.FillRect(240-decalage,220,120,25);// G
gabrieltetar 1:7e925468f9d9 2193 break;
gabrieltetar 1:7e925468f9d9 2194
gabrieltetar 1:7e925468f9d9 2195 case 5:
gabrieltetar 1:7e925468f9d9 2196 lcd.FillRect(240-decalage,75,120,25);// A
gabrieltetar 1:7e925468f9d9 2197 lcd.FillRect(215-decalage,100,25,120);// B
gabrieltetar 1:7e925468f9d9 2198 lcd.FillRect(240-decalage,220,120,25);// G
gabrieltetar 1:7e925468f9d9 2199 lcd.FillRect(240-decalage,365,120,25);// D
gabrieltetar 1:7e925468f9d9 2200 lcd.FillRect(360-decalage,245,25,120);// F
gabrieltetar 1:7e925468f9d9 2201 break;
gabrieltetar 1:7e925468f9d9 2202
gabrieltetar 1:7e925468f9d9 2203 case 6:
gabrieltetar 1:7e925468f9d9 2204 lcd.FillRect(240-decalage,75,120,25);// A
gabrieltetar 1:7e925468f9d9 2205 lcd.FillRect(215-decalage,100,25,120);// B
gabrieltetar 1:7e925468f9d9 2206 lcd.FillRect(215-decalage,245,25,120);// C
gabrieltetar 1:7e925468f9d9 2207 lcd.FillRect(240-decalage,365,120,25);// D
gabrieltetar 1:7e925468f9d9 2208 lcd.FillRect(360-decalage,245,25,120);// F
gabrieltetar 1:7e925468f9d9 2209 lcd.FillRect(240-decalage,220,120,25);// G
gabrieltetar 1:7e925468f9d9 2210 break;
gabrieltetar 1:7e925468f9d9 2211
gabrieltetar 1:7e925468f9d9 2212 case 7:
gabrieltetar 1:7e925468f9d9 2213 lcd.FillRect(240-decalage,75,120,25);// A
gabrieltetar 1:7e925468f9d9 2214 lcd.FillRect(360-decalage,100,25,120);// E
gabrieltetar 1:7e925468f9d9 2215 lcd.FillRect(360-decalage,245,25,120);// F
gabrieltetar 1:7e925468f9d9 2216 break;
gabrieltetar 1:7e925468f9d9 2217
gabrieltetar 1:7e925468f9d9 2218 case 8:
gabrieltetar 1:7e925468f9d9 2219 lcd.FillRect(240-decalage,75,120,25); // A
gabrieltetar 1:7e925468f9d9 2220 lcd.FillRect(215-decalage,100,25,120);
gabrieltetar 1:7e925468f9d9 2221 lcd.FillRect(215-decalage,245,25,120);
gabrieltetar 1:7e925468f9d9 2222 lcd.FillRect(360-decalage,245,25,120);//...
gabrieltetar 1:7e925468f9d9 2223 lcd.FillRect(360-decalage,100,25,120);
gabrieltetar 1:7e925468f9d9 2224 lcd.FillRect(240-decalage,365,120,25);
gabrieltetar 1:7e925468f9d9 2225 lcd.FillRect(240-decalage,220,120,25);// G
gabrieltetar 1:7e925468f9d9 2226 break;
gabrieltetar 1:7e925468f9d9 2227
gabrieltetar 1:7e925468f9d9 2228 case 9:
gabrieltetar 1:7e925468f9d9 2229 lcd.FillRect(240-decalage,75,120,25);// A
gabrieltetar 1:7e925468f9d9 2230 lcd.FillRect(215-decalage,100,25,120);// B
gabrieltetar 1:7e925468f9d9 2231 lcd.FillRect(240-decalage,365,120,25);// D
gabrieltetar 1:7e925468f9d9 2232 lcd.FillRect(360-decalage,100,25,120);// E
gabrieltetar 1:7e925468f9d9 2233 lcd.FillRect(360-decalage,245,25,120);// F
gabrieltetar 1:7e925468f9d9 2234 lcd.FillRect(240-decalage,220,120,25);// G
gabrieltetar 1:7e925468f9d9 2235 break;
gabrieltetar 1:7e925468f9d9 2236 }
gabrieltetar 1:7e925468f9d9 2237 }
gabrieltetar 1:7e925468f9d9 2238
gabrieltetar 1:7e925468f9d9 2239 void effacer_segment(long couleur)
gabrieltetar 1:7e925468f9d9 2240 {
gabrieltetar 1:7e925468f9d9 2241 lcd.SetTextColor(couleur);
gabrieltetar 1:7e925468f9d9 2242 lcd.FillRect(240-200,75,120,25); // A
gabrieltetar 1:7e925468f9d9 2243 lcd.FillRect(215-200,100,25,120);
gabrieltetar 1:7e925468f9d9 2244 lcd.FillRect(215-200,245,25,120);
gabrieltetar 1:7e925468f9d9 2245 lcd.FillRect(360-200,245,25,120);//...
gabrieltetar 1:7e925468f9d9 2246 lcd.FillRect(360-200,100,25,120);
gabrieltetar 1:7e925468f9d9 2247 lcd.FillRect(240-200,365,120,25);
gabrieltetar 1:7e925468f9d9 2248 lcd.FillRect(240-200,220,120,25);// G
gabrieltetar 1:7e925468f9d9 2249
gabrieltetar 1:7e925468f9d9 2250 lcd.FillRect(240,75,120,25); // A
gabrieltetar 1:7e925468f9d9 2251 lcd.FillRect(215,100,25,120);
gabrieltetar 1:7e925468f9d9 2252 lcd.FillRect(215,245,25,120);
gabrieltetar 1:7e925468f9d9 2253 lcd.FillRect(360,245,25,120);//...
gabrieltetar 1:7e925468f9d9 2254 lcd.FillRect(360,100,25,120);
gabrieltetar 1:7e925468f9d9 2255 lcd.FillRect(240,365,120,25);
gabrieltetar 1:7e925468f9d9 2256 lcd.FillRect(240,220,120,25);// G
gabrieltetar 1:7e925468f9d9 2257 }
gabrieltetar 1:7e925468f9d9 2258
gabrieltetar 1:7e925468f9d9 2259 short recalageAngulaireCapteur(void)
gabrieltetar 1:7e925468f9d9 2260 {
gabrieltetar 1:7e925468f9d9 2261 unsigned char nombresDeMesuresAuxTelemetresQuiSontCoherentes = 0;
gabrieltetar 1:7e925468f9d9 2262 unsigned int moyennageTelemetre = 0;
gabrieltetar 1:7e925468f9d9 2263 unsigned short angleAvant = 0;
gabrieltetar 1:7e925468f9d9 2264 unsigned short angleArriere = 0;
gabrieltetar 1:7e925468f9d9 2265 unsigned short orientationArrondie = 0;
gabrieltetar 1:7e925468f9d9 2266
gabrieltetar 1:7e925468f9d9 2267 unsigned short position_avant_gauche=0;
gabrieltetar 1:7e925468f9d9 2268 unsigned short position_avant_droite=0;
gabrieltetar 1:7e925468f9d9 2269 unsigned short position_arriere_gauche=0;
gabrieltetar 1:7e925468f9d9 2270 unsigned short position_arriere_droite=0;
gabrieltetar 1:7e925468f9d9 2271
gabrieltetar 1:7e925468f9d9 2272 unsigned short tempo= telemetreDistance_arriere_gauche;
gabrieltetar 1:7e925468f9d9 2273 telemetreDistance_arriere_gauche=telemetreDistance_arriere_droite;
gabrieltetar 1:7e925468f9d9 2274 telemetreDistance_arriere_droite=tempo;
gabrieltetar 1:7e925468f9d9 2275
gabrieltetar 1:7e925468f9d9 2276
gabrieltetar 1:7e925468f9d9 2277
gabrieltetar 1:7e925468f9d9 2278 if(theta_robot >= 450 && theta_robot <= 1350)
gabrieltetar 1:7e925468f9d9 2279 orientationArrondie = 90;
gabrieltetar 1:7e925468f9d9 2280 else if(theta_robot <= -450 && theta_robot >= -1350)
gabrieltetar 1:7e925468f9d9 2281 orientationArrondie = 270;
gabrieltetar 1:7e925468f9d9 2282 else if(theta_robot <= 450 && theta_robot >= -450)
gabrieltetar 1:7e925468f9d9 2283 orientationArrondie = 0;
gabrieltetar 1:7e925468f9d9 2284 else if(theta_robot >= 1350 && theta_robot <= -1350)
gabrieltetar 1:7e925468f9d9 2285 orientationArrondie = 180;
gabrieltetar 1:7e925468f9d9 2286
gabrieltetar 1:7e925468f9d9 2287 // Calcul de position pour faire la vérification de cohérence
gabrieltetar 1:7e925468f9d9 2288 if(orientationArrondie == 90 || orientationArrondie == 270) {
gabrieltetar 1:7e925468f9d9 2289 position_avant_gauche = (((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600))?3000:0) + (((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600))?-1:1)*telemetreDistance_avant_gauche;
gabrieltetar 1:7e925468f9d9 2290 position_avant_droite = (((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600))?3000:0) + (((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600))?-1:1)*telemetreDistance_avant_droite;
gabrieltetar 1:7e925468f9d9 2291 position_arriere_gauche = (((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600))?0:3000) + (((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600))?1:-1)*telemetreDistance_arriere_gauche;
gabrieltetar 1:7e925468f9d9 2292 position_arriere_droite = (((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600))?0:3000) + (((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600))?1:-1)*telemetreDistance_arriere_droite;
gabrieltetar 1:7e925468f9d9 2293
gabrieltetar 1:7e925468f9d9 2294 } else if(orientationArrondie == 0 || orientationArrondie == 180) {
gabrieltetar 1:7e925468f9d9 2295 position_avant_gauche = ((theta_robot < 900 && theta_robot > -900)?2000:0) + ((theta_robot < 900 && theta_robot > -900)?-1:1)*telemetreDistance_avant_gauche;
gabrieltetar 1:7e925468f9d9 2296 position_avant_droite = ((theta_robot < 900 && theta_robot > -900)?2000:0) + ((theta_robot < 900 && theta_robot > -900)?-1:1)*telemetreDistance_avant_droite;
gabrieltetar 1:7e925468f9d9 2297 position_arriere_gauche = ((theta_robot < 900 && theta_robot > -900)?0:2000) + ((theta_robot < 900 && theta_robot > -900)?1:-1)*telemetreDistance_arriere_gauche;
gabrieltetar 1:7e925468f9d9 2298 position_arriere_droite = ((theta_robot < 900 && theta_robot > -900)?0:2000) + ((theta_robot < 900 && theta_robot > -900)?1:-1)*telemetreDistance_arriere_droite;
gabrieltetar 1:7e925468f9d9 2299 }
gabrieltetar 1:7e925468f9d9 2300
gabrieltetar 1:7e925468f9d9 2301
gabrieltetar 1:7e925468f9d9 2302 if(orientationArrondie == 90 || orientationArrondie == 270) { // Si il est en axe Y
gabrieltetar 1:7e925468f9d9 2303 if(position_arriere_droite >= y_robot-instruction.arg1 && position_arriere_droite <= y_robot+instruction.arg1) { // Et que les mesures sont cohérentes
gabrieltetar 1:7e925468f9d9 2304 if(position_arriere_gauche >= y_robot-instruction.arg1 && position_arriere_gauche <= y_robot+instruction.arg1) {
gabrieltetar 1:7e925468f9d9 2305 if(telemetreDistance_arriere_droite > telemetreDistance_arriere_gauche)
gabrieltetar 1:7e925468f9d9 2306 angleArriere =900+(1800 * atan2((double)(telemetreDistance_arriere_droite-telemetreDistance_arriere_gauche), (double)ESPACE_INTER_TELEMETRE ))/M_PI;
gabrieltetar 1:7e925468f9d9 2307 else
gabrieltetar 1:7e925468f9d9 2308 angleArriere =(1800 * atan2( (double) ESPACE_INTER_TELEMETRE,(double) (telemetreDistance_arriere_gauche-telemetreDistance_arriere_droite) ))/M_PI;
gabrieltetar 1:7e925468f9d9 2309
gabrieltetar 1:7e925468f9d9 2310 nombresDeMesuresAuxTelemetresQuiSontCoherentes++;
gabrieltetar 1:7e925468f9d9 2311 moyennageTelemetre += angleArriere;
gabrieltetar 1:7e925468f9d9 2312 }
gabrieltetar 1:7e925468f9d9 2313 }
gabrieltetar 1:7e925468f9d9 2314 } else if(orientationArrondie == 0 || orientationArrondie == 180) { // Si il est en axe X
gabrieltetar 1:7e925468f9d9 2315 if(position_arriere_droite >= x_robot-instruction.arg1 && position_arriere_droite <= x_robot+instruction.arg1) { // Et que les mesures sont cohérentes
gabrieltetar 1:7e925468f9d9 2316 if(position_arriere_gauche >= x_robot-instruction.arg1 && position_arriere_gauche <= x_robot+instruction.arg1) {
gabrieltetar 1:7e925468f9d9 2317 if(telemetreDistance_arriere_droite > telemetreDistance_arriere_gauche)
gabrieltetar 1:7e925468f9d9 2318 angleArriere =900+(1800 * atan2( (double) (telemetreDistance_arriere_droite-telemetreDistance_arriere_gauche), (double) ESPACE_INTER_TELEMETRE ))/M_PI;
gabrieltetar 1:7e925468f9d9 2319 else
gabrieltetar 1:7e925468f9d9 2320 angleArriere =(1800 * atan2( (double) ESPACE_INTER_TELEMETRE,(double) (telemetreDistance_arriere_gauche-telemetreDistance_arriere_droite) ))/M_PI;
gabrieltetar 1:7e925468f9d9 2321
gabrieltetar 1:7e925468f9d9 2322 nombresDeMesuresAuxTelemetresQuiSontCoherentes++;
gabrieltetar 1:7e925468f9d9 2323 moyennageTelemetre += angleArriere;
gabrieltetar 1:7e925468f9d9 2324 }
gabrieltetar 1:7e925468f9d9 2325 }
gabrieltetar 1:7e925468f9d9 2326 }
gabrieltetar 1:7e925468f9d9 2327
gabrieltetar 1:7e925468f9d9 2328 if(orientationArrondie == 90 || orientationArrondie == 270) { // Si il est en axe Y
gabrieltetar 1:7e925468f9d9 2329 if(position_avant_droite >= y_robot-instruction.arg1 && position_avant_droite <= y_robot+instruction.arg1) { // Et que les mesures sont cohérentes
gabrieltetar 1:7e925468f9d9 2330 if(position_avant_gauche >= y_robot-instruction.arg1 && position_avant_gauche <= y_robot+instruction.arg1) {
gabrieltetar 1:7e925468f9d9 2331 if(telemetreDistance_avant_droite > telemetreDistance_avant_gauche)
gabrieltetar 1:7e925468f9d9 2332 angleAvant = (1800 * atan2( (double) ESPACE_INTER_TELEMETRE,(double) (telemetreDistance_avant_droite-telemetreDistance_avant_gauche) ))/M_PI;
gabrieltetar 1:7e925468f9d9 2333 else
gabrieltetar 1:7e925468f9d9 2334 angleAvant = 900 + (1800 * atan2( (double)( telemetreDistance_avant_gauche-telemetreDistance_avant_droite),(double) ESPACE_INTER_TELEMETRE ))/M_PI;
gabrieltetar 1:7e925468f9d9 2335
gabrieltetar 1:7e925468f9d9 2336 nombresDeMesuresAuxTelemetresQuiSontCoherentes++;
gabrieltetar 1:7e925468f9d9 2337 moyennageTelemetre += angleAvant;
gabrieltetar 1:7e925468f9d9 2338 }
gabrieltetar 1:7e925468f9d9 2339 }
gabrieltetar 1:7e925468f9d9 2340 } else if(orientationArrondie == 0 || orientationArrondie == 180) { // Si il est en axe X
gabrieltetar 1:7e925468f9d9 2341 if(position_avant_droite >= x_robot-instruction.arg1 && position_avant_droite <= x_robot+instruction.arg1) { // Et que les mesures sont cohérentes
gabrieltetar 1:7e925468f9d9 2342 if(position_avant_gauche >= x_robot-instruction.arg1 && position_avant_gauche <= x_robot+instruction.arg1) {
gabrieltetar 1:7e925468f9d9 2343 if(telemetreDistance_avant_droite > telemetreDistance_avant_gauche)
gabrieltetar 1:7e925468f9d9 2344 angleAvant = (1800 * atan2((double) ESPACE_INTER_TELEMETRE, (double) (telemetreDistance_avant_droite-telemetreDistance_avant_gauche) ))/M_PI;
gabrieltetar 1:7e925468f9d9 2345 else
gabrieltetar 1:7e925468f9d9 2346 angleAvant = 900 + (1800 * atan2( (double) (telemetreDistance_avant_gauche-telemetreDistance_avant_droite),(double) ESPACE_INTER_TELEMETRE ))/M_PI;
gabrieltetar 1:7e925468f9d9 2347
gabrieltetar 1:7e925468f9d9 2348 nombresDeMesuresAuxTelemetresQuiSontCoherentes++;
gabrieltetar 1:7e925468f9d9 2349 moyennageTelemetre += angleAvant;
gabrieltetar 1:7e925468f9d9 2350 }
gabrieltetar 1:7e925468f9d9 2351 }
gabrieltetar 1:7e925468f9d9 2352 }
gabrieltetar 1:7e925468f9d9 2353
gabrieltetar 1:7e925468f9d9 2354 angleRecalage = moyennageTelemetre/nombresDeMesuresAuxTelemetresQuiSontCoherentes;
gabrieltetar 1:7e925468f9d9 2355
gabrieltetar 1:7e925468f9d9 2356 if(nombresDeMesuresAuxTelemetresQuiSontCoherentes) {
gabrieltetar 1:7e925468f9d9 2357 if(orientationArrondie == 0) {
gabrieltetar 1:7e925468f9d9 2358 angleRecalage -= 900;
gabrieltetar 1:7e925468f9d9 2359
gabrieltetar 1:7e925468f9d9 2360 /*if(telemetreDistance_avant_droite > telemetreDistance_avant_gauche)
gabrieltetar 1:7e925468f9d9 2361 distanceRecalage = *);
gabrieltetar 1:7e925468f9d9 2362 else
gabrieltetar 1:7e925468f9d9 2363 distanceRecalage = 900 + (1800 * atan( (double)( (telemetreDistance_avant_droite-telemetreDistance_avant_gauche) / ESPACE_INTER_TELEMETRE )))/M_PI;*/
gabrieltetar 1:7e925468f9d9 2364 } else if(orientationArrondie == 90) {
gabrieltetar 1:7e925468f9d9 2365 angleRecalage += 0;
gabrieltetar 1:7e925468f9d9 2366 } else if(orientationArrondie == 180) {
gabrieltetar 1:7e925468f9d9 2367 angleRecalage += 900;
gabrieltetar 1:7e925468f9d9 2368 } else if(orientationArrondie == 270) {
gabrieltetar 1:7e925468f9d9 2369 angleRecalage += 1800;
gabrieltetar 1:7e925468f9d9 2370 }
gabrieltetar 1:7e925468f9d9 2371 }
gabrieltetar 1:7e925468f9d9 2372
gabrieltetar 1:7e925468f9d9 2373 return (nombresDeMesuresAuxTelemetresQuiSontCoherentes && (angleAvant-angleArriere<80 && angleAvant-angleArriere>-80)) ? angleRecalage : theta_robot;
gabrieltetar 1:7e925468f9d9 2374 }
gabrieltetar 1:7e925468f9d9 2375
gabrieltetar 1:7e925468f9d9 2376 short recalageDistanceX(void)
gabrieltetar 1:7e925468f9d9 2377 {
gabrieltetar 1:7e925468f9d9 2378 unsigned char nombresDeMesuresAuxTelemetresQuiSontCoherentes = 0;
gabrieltetar 1:7e925468f9d9 2379 unsigned int moyennageTelemetre = 0;
gabrieltetar 1:7e925468f9d9 2380
gabrieltetar 1:7e925468f9d9 2381 unsigned short tempo= telemetreDistance_arriere_gauche;
gabrieltetar 1:7e925468f9d9 2382 telemetreDistance_arriere_gauche=telemetreDistance_arriere_droite;
gabrieltetar 1:7e925468f9d9 2383 telemetreDistance_arriere_droite=tempo;
gabrieltetar 1:7e925468f9d9 2384
gabrieltetar 1:7e925468f9d9 2385 telemetreDistance_avant_gauche = ((theta_robot < 900 && theta_robot > -900)?2000:0) + ((theta_robot < 900 && theta_robot > -900)?-1:1)*telemetreDistance_avant_gauche;
gabrieltetar 1:7e925468f9d9 2386 telemetreDistance_avant_droite = ((theta_robot < 900 && theta_robot > -900)?2000:0) + ((theta_robot < 900 && theta_robot > -900)?-1:1)*telemetreDistance_avant_droite;
gabrieltetar 1:7e925468f9d9 2387 telemetreDistance_arriere_gauche = ((theta_robot < 900 && theta_robot > -900)?0:2000) + ((theta_robot < 900 && theta_robot > -900)?1:-1)*telemetreDistance_arriere_gauche;
gabrieltetar 1:7e925468f9d9 2388 telemetreDistance_arriere_droite = ((theta_robot < 900 && theta_robot > -900)?0:2000) + ((theta_robot < 900 && theta_robot > -900)?1:-1)*telemetreDistance_arriere_droite;
gabrieltetar 1:7e925468f9d9 2389
gabrieltetar 1:7e925468f9d9 2390 if(telemetreDistance_avant_gauche >= x_robot-instruction.arg1 && telemetreDistance_avant_gauche <= x_robot+instruction.arg1) {
gabrieltetar 1:7e925468f9d9 2391 nombresDeMesuresAuxTelemetresQuiSontCoherentes++;
gabrieltetar 1:7e925468f9d9 2392 moyennageTelemetre += telemetreDistance_avant_gauche;
gabrieltetar 1:7e925468f9d9 2393 }
gabrieltetar 1:7e925468f9d9 2394 if(telemetreDistance_avant_droite >= x_robot-instruction.arg1 && telemetreDistance_avant_droite <= x_robot+instruction.arg1) {
gabrieltetar 1:7e925468f9d9 2395 nombresDeMesuresAuxTelemetresQuiSontCoherentes++;
gabrieltetar 1:7e925468f9d9 2396 moyennageTelemetre += telemetreDistance_avant_droite;
gabrieltetar 1:7e925468f9d9 2397 }
gabrieltetar 1:7e925468f9d9 2398 if(telemetreDistance_arriere_gauche >= x_robot-instruction.arg1 && telemetreDistance_arriere_gauche <= x_robot+instruction.arg1) {
gabrieltetar 1:7e925468f9d9 2399 nombresDeMesuresAuxTelemetresQuiSontCoherentes++;
gabrieltetar 1:7e925468f9d9 2400 moyennageTelemetre += telemetreDistance_arriere_gauche;
gabrieltetar 1:7e925468f9d9 2401 }
gabrieltetar 1:7e925468f9d9 2402 if(telemetreDistance_arriere_droite >= x_robot-instruction.arg1 && telemetreDistance_arriere_droite <= x_robot+instruction.arg1) {
gabrieltetar 1:7e925468f9d9 2403 nombresDeMesuresAuxTelemetresQuiSontCoherentes++;
gabrieltetar 1:7e925468f9d9 2404 moyennageTelemetre += telemetreDistance_arriere_droite;
gabrieltetar 1:7e925468f9d9 2405 }
gabrieltetar 1:7e925468f9d9 2406
gabrieltetar 1:7e925468f9d9 2407 moyennageTelemetre /= nombresDeMesuresAuxTelemetresQuiSontCoherentes;
gabrieltetar 1:7e925468f9d9 2408
gabrieltetar 1:7e925468f9d9 2409 return (nombresDeMesuresAuxTelemetresQuiSontCoherentes)? moyennageTelemetre : x_robot; //SetOdometrie(ODOMETRIE_SMALL_POSITION, moyennageTelemetre, y_robot, theta_robot);
gabrieltetar 1:7e925468f9d9 2410 }
gabrieltetar 1:7e925468f9d9 2411
gabrieltetar 1:7e925468f9d9 2412 short recalageDistanceY(void)
gabrieltetar 1:7e925468f9d9 2413 {
gabrieltetar 1:7e925468f9d9 2414 unsigned char nombresDeMesuresAuxTelemetresQuiSontCoherentes = 0;
gabrieltetar 1:7e925468f9d9 2415 unsigned int moyennageTelemetre = 0;
gabrieltetar 1:7e925468f9d9 2416
gabrieltetar 1:7e925468f9d9 2417 unsigned short tempo= telemetreDistance_arriere_gauche;
gabrieltetar 1:7e925468f9d9 2418 telemetreDistance_arriere_gauche=telemetreDistance_arriere_droite;
gabrieltetar 1:7e925468f9d9 2419 telemetreDistance_arriere_droite=tempo;
gabrieltetar 1:7e925468f9d9 2420
gabrieltetar 1:7e925468f9d9 2421 telemetreDistance_avant_gauche = (((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600))?3000:0) + (((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600))?-1:1)*telemetreDistance_avant_gauche;
gabrieltetar 1:7e925468f9d9 2422 telemetreDistance_avant_droite = (((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600))?3000:0) + (((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600))?-1:1)*telemetreDistance_avant_droite;
gabrieltetar 1:7e925468f9d9 2423 telemetreDistance_arriere_gauche = (((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600))?0:3000) + (((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600))?1:-1)*telemetreDistance_arriere_gauche;
gabrieltetar 1:7e925468f9d9 2424 telemetreDistance_arriere_droite = (((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600))?0:3000) + (((theta_robot < 1800 && theta_robot > 0) || (theta_robot < -1800 && theta_robot > -3600))?1:-1)*telemetreDistance_arriere_droite;
gabrieltetar 1:7e925468f9d9 2425
gabrieltetar 1:7e925468f9d9 2426 if(telemetreDistance_avant_gauche >= y_robot-instruction.arg1 && telemetreDistance_avant_gauche <= y_robot+instruction.arg1) {
gabrieltetar 1:7e925468f9d9 2427 nombresDeMesuresAuxTelemetresQuiSontCoherentes++;
gabrieltetar 1:7e925468f9d9 2428 moyennageTelemetre += telemetreDistance_avant_gauche;
gabrieltetar 1:7e925468f9d9 2429 }
gabrieltetar 1:7e925468f9d9 2430 if(telemetreDistance_avant_droite >= y_robot-instruction.arg1 && telemetreDistance_avant_droite <= y_robot+instruction.arg1) {
gabrieltetar 1:7e925468f9d9 2431 nombresDeMesuresAuxTelemetresQuiSontCoherentes++;
gabrieltetar 1:7e925468f9d9 2432 moyennageTelemetre += telemetreDistance_avant_droite;
gabrieltetar 1:7e925468f9d9 2433 }
gabrieltetar 1:7e925468f9d9 2434 if(telemetreDistance_arriere_gauche >= y_robot-instruction.arg1 && telemetreDistance_arriere_gauche <= y_robot+instruction.arg1) {
gabrieltetar 1:7e925468f9d9 2435 nombresDeMesuresAuxTelemetresQuiSontCoherentes++;
gabrieltetar 1:7e925468f9d9 2436 moyennageTelemetre += telemetreDistance_arriere_gauche;
gabrieltetar 1:7e925468f9d9 2437 }
gabrieltetar 1:7e925468f9d9 2438 if(telemetreDistance_arriere_droite >= y_robot-instruction.arg1 && telemetreDistance_arriere_droite <= y_robot+instruction.arg1) {
gabrieltetar 1:7e925468f9d9 2439 nombresDeMesuresAuxTelemetresQuiSontCoherentes++;
gabrieltetar 1:7e925468f9d9 2440 moyennageTelemetre += telemetreDistance_arriere_droite;
gabrieltetar 1:7e925468f9d9 2441 }
gabrieltetar 1:7e925468f9d9 2442
gabrieltetar 1:7e925468f9d9 2443 moyennageTelemetre /= nombresDeMesuresAuxTelemetresQuiSontCoherentes;
gabrieltetar 1:7e925468f9d9 2444
gabrieltetar 1:7e925468f9d9 2445 return (nombresDeMesuresAuxTelemetresQuiSontCoherentes)? moyennageTelemetre : y_robot ; // SetOdometrie(ODOMETRIE_SMALL_POSITION, x_robot, moyennageTelemetre, theta_robot);
gabrieltetar 1:7e925468f9d9 2446 }
gabrieltetar 1:7e925468f9d9 2447
gabrieltetar 14:6aa8aa1699ad 2448 /*************************************************************************************************/
gabrieltetar 14:6aa8aa1699ad 2449 /* FUNCTION NAME: doAction */
gabrieltetar 14:6aa8aa1699ad 2450 /* DESCRIPTION : Effectuer une action specifique correspondant au numéro dans le fichier strat */
gabrieltetar 14:6aa8aa1699ad 2451 /*************************************************************************************************/
gabrieltetar 14:6aa8aa1699ad 2452
gabrieltetar 14:6aa8aa1699ad 2453 unsigned char doAction(unsigned char id, unsigned short arg1, short arg2)
gabrieltetar 14:6aa8aa1699ad 2454 {
gabrieltetar 14:6aa8aa1699ad 2455 int retour = 1;
gabrieltetar 14:6aa8aa1699ad 2456 CANMessage msgTx=CANMessage();
gabrieltetar 14:6aa8aa1699ad 2457 msgTx.format=CANStandard;
gabrieltetar 14:6aa8aa1699ad 2458 msgTx.type=CANData;
gabrieltetar 14:6aa8aa1699ad 2459 switch(id)
gabrieltetar 14:6aa8aa1699ad 2460 {
gabrieltetar 14:6aa8aa1699ad 2461 case 101: //bras avant droit
gabrieltetar 14:6aa8aa1699ad 2462 SendRawId(TEST_BRAS_1_AT);
gabrieltetar 14:6aa8aa1699ad 2463 break;
gabrieltetar 14:6aa8aa1699ad 2464 case 102: //bras avant millieu
gabrieltetar 14:6aa8aa1699ad 2465 SendRawId(TEST_BRAS_2_AT);
gabrieltetar 14:6aa8aa1699ad 2466 break;
gabrieltetar 14:6aa8aa1699ad 2467 case 103: //attraper presentoir arriere
gabrieltetar 14:6aa8aa1699ad 2468 //SendRawId(PRESENTOIR_ARRIERE);
gabrieltetar 14:6aa8aa1699ad 2469 break;
gabrieltetar 14:6aa8aa1699ad 2470 case 104: //balance avant
gabrieltetar 14:6aa8aa1699ad 2471 //SendRawId(BALANCE_AVANT);
gabrieltetar 14:6aa8aa1699ad 2472 break;
gabrieltetar 14:6aa8aa1699ad 2473 case 105: //balance arriere
gabrieltetar 14:6aa8aa1699ad 2474 //SendRawId(BALANCE_ARRIERE);
gabrieltetar 14:6aa8aa1699ad 2475 break;
gabrieltetar 14:6aa8aa1699ad 2476 case 106: //accelerateur avant
gabrieltetar 14:6aa8aa1699ad 2477 //SendRawId(ACCELERATEUR_AVANT);
gabrieltetar 14:6aa8aa1699ad 2478 //distance_recalage=arg1;
gabrieltetar 14:6aa8aa1699ad 2479 //distance_revenir=arg2;
gabrieltetar 14:6aa8aa1699ad 2480 //Send2Short(ACCELERATEUR_AVANT, distance_recalage,distance_revenir);
gabrieltetar 14:6aa8aa1699ad 2481 break;
gabrieltetar 14:6aa8aa1699ad 2482 case 107: //accelerateur arriere
gabrieltetar 14:6aa8aa1699ad 2483 //distance_recalage=arg1;
gabrieltetar 14:6aa8aa1699ad 2484 //distance_revenir=arg2;
gabrieltetar 14:6aa8aa1699ad 2485 //Send2Short(ACCELERATEUR_ARRIERE, distance_recalage,distance_revenir);
gabrieltetar 14:6aa8aa1699ad 2486 break;
gabrieltetar 14:6aa8aa1699ad 2487 case 108: //goldenium avant
gabrieltetar 14:6aa8aa1699ad 2488 //SendRawId(GOLDENIUM_AVANT);
gabrieltetar 14:6aa8aa1699ad 2489 x = arg1;
gabrieltetar 14:6aa8aa1699ad 2490 if(InversStrat == 1) {
gabrieltetar 14:6aa8aa1699ad 2491 y = 3000 - arg2;
gabrieltetar 14:6aa8aa1699ad 2492 } else {
gabrieltetar 14:6aa8aa1699ad 2493 y = arg2;
gabrieltetar 14:6aa8aa1699ad 2494 }
gabrieltetar 14:6aa8aa1699ad 2495 //Send2Short(GOLDENIUM_AVANT, x, y);
gabrieltetar 14:6aa8aa1699ad 2496 break;
gabrieltetar 14:6aa8aa1699ad 2497 case 109: //goldenium arriere
gabrieltetar 14:6aa8aa1699ad 2498 x=arg1;
gabrieltetar 14:6aa8aa1699ad 2499 y=arg2;
gabrieltetar 14:6aa8aa1699ad 2500 //Send2Short(GOLDENIUM_ARRIERE, x,y);
gabrieltetar 14:6aa8aa1699ad 2501 break;
gabrieltetar 14:6aa8aa1699ad 2502 case 110: //sol avant
gabrieltetar 14:6aa8aa1699ad 2503 //SendRawId(SOL_AVANT);
gabrieltetar 14:6aa8aa1699ad 2504 case 130: //sol avant
gabrieltetar 14:6aa8aa1699ad 2505 SendRawId(TEST_BRAS_1_RE);
gabrieltetar 14:6aa8aa1699ad 2506 break;
gabrieltetar 14:6aa8aa1699ad 2507 case 131: //sol avant
gabrieltetar 14:6aa8aa1699ad 2508 SendRawId(TEST_BRAS_2_RE);
gabrieltetar 14:6aa8aa1699ad 2509 break;
gabrieltetar 14:6aa8aa1699ad 2510 case 132: //sol avant
gabrieltetar 14:6aa8aa1699ad 2511 SendRawId(TEST_BRAS_3_RE);
gabrieltetar 14:6aa8aa1699ad 2512 break;
gabrieltetar 14:6aa8aa1699ad 2513 case 133: //sol avant
gabrieltetar 14:6aa8aa1699ad 2514 SendRawId(TEST_BRAS_4_RE);
gabrieltetar 14:6aa8aa1699ad 2515 break;
gabrieltetar 14:6aa8aa1699ad 2516 case 134: //sol avant
gabrieltetar 14:6aa8aa1699ad 2517 SendRawId(TEST_BRAS_5_RE);
gabrieltetar 14:6aa8aa1699ad 2518 break;
gabrieltetar 14:6aa8aa1699ad 2519 case 135: //sol avant
gabrieltetar 14:6aa8aa1699ad 2520 SendRawId(TEST_BRAS_6_RE);
gabrieltetar 14:6aa8aa1699ad 2521 break;
gabrieltetar 14:6aa8aa1699ad 2522 case 111: //sol arriere
gabrieltetar 14:6aa8aa1699ad 2523 // SendRawId(SOL_ARRIERE);
gabrieltetar 14:6aa8aa1699ad 2524 break;
gabrieltetar 14:6aa8aa1699ad 2525 case 112: //sol avant relache
gabrieltetar 14:6aa8aa1699ad 2526 //SendRawId(SOL_AVANT_RELACHE);
gabrieltetar 14:6aa8aa1699ad 2527 break;
gabrieltetar 14:6aa8aa1699ad 2528 case 113: //sol arriere relache
gabrieltetar 14:6aa8aa1699ad 2529 //SendRawId(SOL_ARRIERE_RELACHE);
gabrieltetar 14:6aa8aa1699ad 2530 break;
gabrieltetar 14:6aa8aa1699ad 2531 case 114://relache les 3 ventouses avants
gabrieltetar 14:6aa8aa1699ad 2532 // SendRawId(AVANT_RELACHE);
gabrieltetar 14:6aa8aa1699ad 2533 break;
gabrieltetar 14:6aa8aa1699ad 2534
gabrieltetar 14:6aa8aa1699ad 2535 case 115://bras avant gauche attraper
gabrieltetar 14:6aa8aa1699ad 2536 SendRawId(TEST_BRAS_3_AT);
gabrieltetar 14:6aa8aa1699ad 2537 break;
gabrieltetar 14:6aa8aa1699ad 2538
gabrieltetar 14:6aa8aa1699ad 2539 case 116://bras arreiere droit
gabrieltetar 14:6aa8aa1699ad 2540 SendRawId(TEST_BRAS_6_AT);
gabrieltetar 14:6aa8aa1699ad 2541 break;
gabrieltetar 14:6aa8aa1699ad 2542 /* case 116://relache une pompe
gabrieltetar 14:6aa8aa1699ad 2543 unsigned char arg_tempo;
gabrieltetar 14:6aa8aa1699ad 2544 if(InversStrat == 1) {
gabrieltetar 14:6aa8aa1699ad 2545 switch(arg1) {
gabrieltetar 14:6aa8aa1699ad 2546 case AV_DROIT:
gabrieltetar 14:6aa8aa1699ad 2547 arg_tempo = AV_GAUCHE;
gabrieltetar 14:6aa8aa1699ad 2548 break;
gabrieltetar 14:6aa8aa1699ad 2549 case AV_GAUCHE:
gabrieltetar 14:6aa8aa1699ad 2550 arg_tempo = AV_DROIT;
gabrieltetar 14:6aa8aa1699ad 2551 break;
gabrieltetar 14:6aa8aa1699ad 2552 case AR_DROIT:
gabrieltetar 14:6aa8aa1699ad 2553 arg_tempo = AR_GAUCHE;
gabrieltetar 14:6aa8aa1699ad 2554 break;
gabrieltetar 14:6aa8aa1699ad 2555 case AR_GAUCHE:
gabrieltetar 14:6aa8aa1699ad 2556 arg_tempo = AR_DROIT;
gabrieltetar 14:6aa8aa1699ad 2557 break;
gabrieltetar 14:6aa8aa1699ad 2558 default :
gabrieltetar 14:6aa8aa1699ad 2559 arg_tempo =(unsigned char)arg1;
gabrieltetar 14:6aa8aa1699ad 2560 break;
gabrieltetar 14:6aa8aa1699ad 2561 }
gabrieltetar 14:6aa8aa1699ad 2562
gabrieltetar 14:6aa8aa1699ad 2563 } else arg_tempo =(unsigned char)arg1;
gabrieltetar 14:6aa8aa1699ad 2564 SendMsgCan(HACHEUR_RELEASE_ATOM, &arg_tempo,1);
gabrieltetar 14:6aa8aa1699ad 2565 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2566 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2567 break;*/
gabrieltetar 14:6aa8aa1699ad 2568 case 117://bras arriere millieu
gabrieltetar 14:6aa8aa1699ad 2569 SendRawId(TEST_BRAS_5_AT);
gabrieltetar 14:6aa8aa1699ad 2570 break;
gabrieltetar 14:6aa8aa1699ad 2571 case 118://bras arriere gauche
gabrieltetar 14:6aa8aa1699ad 2572 SendRawId(TEST_BRAS_4_AT);
gabrieltetar 14:6aa8aa1699ad 2573 break;
gabrieltetar 14:6aa8aa1699ad 2574 case 119:
gabrieltetar 14:6aa8aa1699ad 2575 //SendRawId(VENTOUSE_AR_CENTRE_BALANCE);
gabrieltetar 14:6aa8aa1699ad 2576 break;
gabrieltetar 14:6aa8aa1699ad 2577 case 120:
gabrieltetar 14:6aa8aa1699ad 2578 //SendRawId(ACCELERATEUR_INSERTION_AVANT_GAUCHE);
gabrieltetar 14:6aa8aa1699ad 2579 break;
gabrieltetar 14:6aa8aa1699ad 2580
gabrieltetar 14:6aa8aa1699ad 2581 case 121:
gabrieltetar 14:6aa8aa1699ad 2582 //SendRawId(ACCELERATEUR_INSERTION_ARRIERE_GAUCHE);
gabrieltetar 14:6aa8aa1699ad 2583 break;
gabrieltetar 14:6aa8aa1699ad 2584
gabrieltetar 14:6aa8aa1699ad 2585 case 150:
gabrieltetar 14:6aa8aa1699ad 2586 SCORE_PR+=arg1;
gabrieltetar 14:6aa8aa1699ad 2587 liaison_Tx.envoyer_short(0x30,SCORE_PR);
gabrieltetar 14:6aa8aa1699ad 2588 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2589 waitingAckID = 0;
gabrieltetar 14:6aa8aa1699ad 2590 break;
gabrieltetar 14:6aa8aa1699ad 2591
gabrieltetar 14:6aa8aa1699ad 2592
gabrieltetar 14:6aa8aa1699ad 2593 case 200 :
gabrieltetar 14:6aa8aa1699ad 2594 SendRawId(DATA_TELEMETRE);
gabrieltetar 14:6aa8aa1699ad 2595 /*telemetreDistance = dataTelemetre();
gabrieltetar 14:6aa8aa1699ad 2596 wait_ms(1);
gabrieltetar 14:6aa8aa1699ad 2597 telemetreDistance = dataTelemetre();
gabrieltetar 14:6aa8aa1699ad 2598 telemetreDistance = telemetreDistance - 170;*/
gabrieltetar 14:6aa8aa1699ad 2599 break;
gabrieltetar 14:6aa8aa1699ad 2600
gabrieltetar 14:6aa8aa1699ad 2601 case 201 :
gabrieltetar 14:6aa8aa1699ad 2602 SendRawId(0x99);//
gabrieltetar 14:6aa8aa1699ad 2603 retour = 2;
gabrieltetar 14:6aa8aa1699ad 2604 break;
gabrieltetar 14:6aa8aa1699ad 2605
gabrieltetar 14:6aa8aa1699ad 2606
gabrieltetar 14:6aa8aa1699ad 2607 case 11://0 Désactiver le stop,1 Activer le stop saut de strat,2 Activer le stop avec evitement
gabrieltetar 14:6aa8aa1699ad 2608 isStopEnable =(unsigned char) arg1;
gabrieltetar 14:6aa8aa1699ad 2609 // SendMsgCan(0x5BC, &isStopEnable,1);
gabrieltetar 14:6aa8aa1699ad 2610 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2611 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2612 break;
gabrieltetar 14:6aa8aa1699ad 2613
gabrieltetar 14:6aa8aa1699ad 2614
gabrieltetar 14:6aa8aa1699ad 2615
gabrieltetar 14:6aa8aa1699ad 2616 case 20://Désactiver l'asservissement
gabrieltetar 14:6aa8aa1699ad 2617 setAsservissementEtat(0);
gabrieltetar 14:6aa8aa1699ad 2618 break;
gabrieltetar 14:6aa8aa1699ad 2619
gabrieltetar 14:6aa8aa1699ad 2620 case 21://Activer l'asservissement
gabrieltetar 14:6aa8aa1699ad 2621 setAsservissementEtat(1);
gabrieltetar 14:6aa8aa1699ad 2622 break;
gabrieltetar 14:6aa8aa1699ad 2623
gabrieltetar 14:6aa8aa1699ad 2624 case 22://Changer la vitesse du robot
gabrieltetar 14:6aa8aa1699ad 2625 SendSpeed(arg1);//,(unsigned short)arg2, (unsigned short)arg2);
gabrieltetar 14:6aa8aa1699ad 2626 wait_us(200);
gabrieltetar 14:6aa8aa1699ad 2627 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2628 waitingAckID = 0;
gabrieltetar 14:6aa8aa1699ad 2629 break;
gabrieltetar 14:6aa8aa1699ad 2630 case 23:
gabrieltetar 14:6aa8aa1699ad 2631 SendAccel(arg1,(unsigned short)arg2);//,(unsigned short)arg2, (unsigned short)arg2);
gabrieltetar 14:6aa8aa1699ad 2632 wait_us(200);
gabrieltetar 14:6aa8aa1699ad 2633 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2634 waitingAckID = 0;
gabrieltetar 14:6aa8aa1699ad 2635 break;
gabrieltetar 14:6aa8aa1699ad 2636
gabrieltetar 14:6aa8aa1699ad 2637
gabrieltetar 14:6aa8aa1699ad 2638 case 19: // CHANGER LA VITESSE + DECELERATION
gabrieltetar 14:6aa8aa1699ad 2639 //SendSpeedDecel(arg1,(unsigned short) arg2);
gabrieltetar 14:6aa8aa1699ad 2640 wait_us(200);
gabrieltetar 14:6aa8aa1699ad 2641 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2642 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2643 break;
gabrieltetar 14:6aa8aa1699ad 2644
gabrieltetar 14:6aa8aa1699ad 2645 case 30://Action tempo
gabrieltetar 14:6aa8aa1699ad 2646 wait_ms(arg1);
gabrieltetar 14:6aa8aa1699ad 2647 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2648 waitingAckID = 0;
gabrieltetar 14:6aa8aa1699ad 2649 break;
gabrieltetar 14:6aa8aa1699ad 2650 //pompe 1 à 6 ON
gabrieltetar 14:6aa8aa1699ad 2651 case 202 :
gabrieltetar 14:6aa8aa1699ad 2652 //SendRawId(TEST_VENT_1_ON);
gabrieltetar 14:6aa8aa1699ad 2653 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2654 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2655 break;
gabrieltetar 14:6aa8aa1699ad 2656 case 203 :
gabrieltetar 14:6aa8aa1699ad 2657 //SendRawId(TEST_VENT_2_ON);
gabrieltetar 14:6aa8aa1699ad 2658 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2659 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2660 break;
gabrieltetar 14:6aa8aa1699ad 2661 case 204 :
gabrieltetar 14:6aa8aa1699ad 2662 //SendRawId(TEST_VENT_3_ON);
gabrieltetar 14:6aa8aa1699ad 2663 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2664 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2665 break;
gabrieltetar 14:6aa8aa1699ad 2666 case 205 :
gabrieltetar 14:6aa8aa1699ad 2667 // SendRawId(TEST_VENT_4_ON);
gabrieltetar 14:6aa8aa1699ad 2668 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2669 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2670 break;
gabrieltetar 14:6aa8aa1699ad 2671 case 206 :
gabrieltetar 14:6aa8aa1699ad 2672 // SendRawId(TEST_VENT_5_ON);
gabrieltetar 14:6aa8aa1699ad 2673 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2674 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2675 break;
gabrieltetar 14:6aa8aa1699ad 2676 case 207 :
gabrieltetar 14:6aa8aa1699ad 2677 // SendRawId(TEST_VENT_6_ON);
gabrieltetar 14:6aa8aa1699ad 2678 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2679 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2680 break;
gabrieltetar 14:6aa8aa1699ad 2681 case 208 :
gabrieltetar 14:6aa8aa1699ad 2682 // SendRawId(TEST_VENT_1_OFF);
gabrieltetar 14:6aa8aa1699ad 2683 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2684 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2685 break;
gabrieltetar 14:6aa8aa1699ad 2686 case 209 :
gabrieltetar 14:6aa8aa1699ad 2687 //SendRawId(TEST_VENT_2_OFF);
gabrieltetar 14:6aa8aa1699ad 2688 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2689 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2690 break;
gabrieltetar 14:6aa8aa1699ad 2691 case 210 :
gabrieltetar 14:6aa8aa1699ad 2692 // SendRawId(TEST_VENT_3_OFF);
gabrieltetar 14:6aa8aa1699ad 2693 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2694 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2695 break;
gabrieltetar 14:6aa8aa1699ad 2696 case 211 :
gabrieltetar 14:6aa8aa1699ad 2697 //SendRawId(TEST_VENT_4_OFF);
gabrieltetar 14:6aa8aa1699ad 2698 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2699 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2700 break;
gabrieltetar 14:6aa8aa1699ad 2701 case 212 :
gabrieltetar 14:6aa8aa1699ad 2702 // SendRawId(TEST_VENT_5_OFF);
gabrieltetar 14:6aa8aa1699ad 2703 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2704 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2705 break;
gabrieltetar 14:6aa8aa1699ad 2706 case 213 :
gabrieltetar 14:6aa8aa1699ad 2707 //SendRawId(TEST_VENT_6_OFF);
gabrieltetar 14:6aa8aa1699ad 2708 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2709 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2710 break;
maximilienlv 15:5ece9c3ba389 2711 case 214://test bras competition (avant)
maximilienlv 15:5ece9c3ba389 2712 unsigned char argu_at = arg1;
maximilienlv 15:5ece9c3ba389 2713 SendMsgCan(BRAS_AT, &argu_at,sizeof(arg1));
gabrieltetar 14:6aa8aa1699ad 2714 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2715 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2716 break;
gabrieltetar 14:6aa8aa1699ad 2717
maximilienlv 15:5ece9c3ba389 2718 case 215://test bras competition(arriere)
maximilienlv 15:5ece9c3ba389 2719 unsigned char argu_re = arg1;
maximilienlv 15:5ece9c3ba389 2720 SendMsgCan(BRAS_RE, &argu_re,sizeof(argu_re));
gabrieltetar 14:6aa8aa1699ad 2721 waitingAckFrom = 0;
gabrieltetar 14:6aa8aa1699ad 2722 waitingAckID =0;
gabrieltetar 14:6aa8aa1699ad 2723 break;
gabrieltetar 14:6aa8aa1699ad 2724
gabrieltetar 14:6aa8aa1699ad 2725 default:
gabrieltetar 14:6aa8aa1699ad 2726 retour = 0;//L'action n'existe pas, il faut utiliser le CAN
gabrieltetar 14:6aa8aa1699ad 2727
gabrieltetar 14:6aa8aa1699ad 2728 }
gabrieltetar 14:6aa8aa1699ad 2729 return retour;//L'action est spécifique.
gabrieltetar 14:6aa8aa1699ad 2730
gabrieltetar 14:6aa8aa1699ad 2731 }