Programme carte strategie (disco)

Dependencies:   mbed SerialHalfDuplex SDFileSystem DISCO-F469NI_portrait liaison_Bluetooth ident_crac

Committer:
Sitkah
Date:
Fri Apr 20 09:16:13 2018 +0000
Revision:
30:a1e37af4bbde
Parent:
29:41e02746041d
Child:
31:833fc481b002
ne pas en prendre compte !;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sitkah 29:41e02746041d 1 #include "global.h"
Sitkah 29:41e02746041d 2
Sitkah 29:41e02746041d 3 //#include "StrategieManager.h"
Sitkah 29:41e02746041d 4
Sitkah 29:41e02746041d 5
Sitkah 29:41e02746041d 6
Sitkah 29:41e02746041d 7 #define M_PI 3.14159265358979323846
Sitkah 29:41e02746041d 8 #define BLEU 0xFF1467E5
Sitkah 29:41e02746041d 9 #define ROUGE 0xFFFF0000
Sitkah 29:41e02746041d 10 #define VERT 0xFF00FF00
Sitkah 29:41e02746041d 11 #define JAUNE 0xFFFEFE00
Sitkah 29:41e02746041d 12 #define BLANC 0xFF000000
Sitkah 29:41e02746041d 13 #define DIY_GREY 0xFFDFDFDF
antbig 0:ad97421fb1fb 14
Sitkah 29:41e02746041d 15 char tableau_aff[10][50];
Sitkah 29:41e02746041d 16 char tableau_etat[22][50]=
Sitkah 29:41e02746041d 17 {
Sitkah 29:41e02746041d 18 "Check_carte_screen",
Sitkah 29:41e02746041d 19 "Check_carte_screen_wait_ack",
Sitkah 29:41e02746041d 20 "Check_cartes",
Sitkah 29:41e02746041d 21 "Check_cartes_wait_ack",
Sitkah 29:41e02746041d 22 "Wait_force",
Sitkah 29:41e02746041d 23 "Config",
Sitkah 29:41e02746041d 24 "Game_init",
Sitkah 29:41e02746041d 25 "Game_wait_for_jack",
Sitkah 29:41e02746041d 26 "Game_start",
Sitkah 29:41e02746041d 27 "Game_next_instruction",
Sitkah 29:41e02746041d 28 "Game_instruction",
Sitkah 29:41e02746041d 29 "Game_wait_ack",
Sitkah 29:41e02746041d 30 "Game_jump_time",
Sitkah 29:41e02746041d 31 "Game_jump_config",
Sitkah 29:41e02746041d 32 "Game_jump_position",
Sitkah 29:41e02746041d 33 "Game_wait_end_instruction",
Sitkah 29:41e02746041d 34 "Warning_timeout",
Sitkah 29:41e02746041d 35 "Waring_end_balise_wait",
Sitkah 29:41e02746041d 36 "Warning_end_last_instruction",
Sitkah 29:41e02746041d 37 "Warning_switch_strategie",
Sitkah 29:41e02746041d 38 "End",
Sitkah 29:41e02746041d 39 "End_loop",
Sitkah 29:41e02746041d 40 };
Sitkah 29:41e02746041d 41
Sitkah 29:41e02746041d 42
Sitkah 29:41e02746041d 43
Sitkah 29:41e02746041d 44 Ticker ticker;
Sitkah 29:41e02746041d 45 TS_DISCO_F469NI ts;
Sitkah 29:41e02746041d 46 LCD_DISCO_F469NI lcd;
Sitkah 29:41e02746041d 47
Sitkah 29:41e02746041d 48 TS_StateTypeDef TS_State;
Sitkah 29:41e02746041d 49
Sitkah 29:41e02746041d 50 Ticker chrono;
Sitkah 29:41e02746041d 51 Timeout AffTime;
Sitkah 29:41e02746041d 52 Timer timer;
antbig 0:ad97421fb1fb 53 Timer cartesCheker;//Le timer pour le timeout de la vérification des cartes
antbig 0:ad97421fb1fb 54 Timer gameTimer;
antbig 0:ad97421fb1fb 55 Timer debugetatTimer;
antbig 5:dcd817534b57 56 Timer timeoutWarning;
antbig 5:dcd817534b57 57 Timer timeoutWarningWaitEnd;
antbig 0:ad97421fb1fb 58 Timeout chronoEnd;//permet d'envoyer la trame CAN pour la fin
antbig 0:ad97421fb1fb 59
Sitkah 29:41e02746041d 60 unsigned char screenChecktry = 0;
Sitkah 29:41e02746041d 61 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};
Sitkah 29:41e02746041d 62
Sitkah 29:41e02746041d 63 char counter = 0;
Sitkah 29:41e02746041d 64 char check;
Sitkah 29:41e02746041d 65 char Jack = 1;
Sitkah 29:41e02746041d 66
Sitkah 29:41e02746041d 67 int flag = 0, flag_strat = 0, flag_timer;
Sitkah 29:41e02746041d 68 char Ack_strat = 0;
Sitkah 29:41e02746041d 69 signed char Strat = 0;
antbig 0:ad97421fb1fb 70 signed char FIFO_lecture=0;//Position du fifo de lecture des messages CAN
antbig 0:ad97421fb1fb 71
antbig 0:ad97421fb1fb 72 signed short x_robot,y_robot,theta_robot;//La position du robot
ClementBreteau 25:f140c93a8666 73 signed short target_x_robot, target_y_robot, target_theta_robot;
ClementBreteau 25:f140c93a8666 74 E_InstructionType actionPrecedente;
antbig 12:14729d584500 75 signed short start_move_x,start_move_y,start_move_theta;//La position du robot lors du début d'un mouvement, utilisé pour reprendre le mouvement apres stop balise
Sitkah 29:41e02746041d 76 //unsigned char FIFO_ecriture=0; //Position du fifo pour la reception CAN
Sitkah 29:41e02746041d 77 int flagSendCan=1;
Sitkah 29:41e02746041d 78 unsigned char Cote = 0; //0 -> bleu | 1 -> jaune
ClementBreteau 15:c2fc239e85df 79
antbig 0:ad97421fb1fb 80 unsigned char checkCurrent = 0;
antbig 0:ad97421fb1fb 81 unsigned char countAliveCard = 0;
antbig 0:ad97421fb1fb 82
Sitkah 29:41e02746041d 83 signed char Strategie = 0; //N° de la strategie (1-10)
antbig 1:116040d14164 84
ClementBreteau 14:c8fc06c4887f 85 unsigned char ModeDemo = 0; // Si à 1, indique que l'on est dans le mode demo
ClementBreteau 14:c8fc06c4887f 86
antbig 5:dcd817534b57 87 unsigned char countRobotNear = 0;//Le nombre de robot à proximité
antbig 5:dcd817534b57 88
antbig 12:14729d584500 89 unsigned char ingnorBaliseOnce = 0;
antbig 12:14729d584500 90
antbig 28:acd18776ed2d 91 unsigned char ingnorInversionOnce = 0;//Pour ignorer l'inversion des instruction une fois
antbig 28:acd18776ed2d 92
antbig 28:acd18776ed2d 93 struct S_Instruction instruction;
antbig 28:acd18776ed2d 94
Sitkah 30:a1e37af4bbde 95 char couleur1, couleur2, couleur3;
Sitkah 29:41e02746041d 96 float cptf;
Sitkah 29:41e02746041d 97 int cpt,cpt1;
Sitkah 29:41e02746041d 98
Sitkah 29:41e02746041d 99 typedef enum {INIT, ATT, CHOIX, DEMO, DEMO_EN_COURS, SELECT_SIDE, TACTIQUE, DETAILS,LECTURE, LAUNCH, AFF_WAIT_JACK, WAIT_JACK, COMPTEUR, FIN} T_etat;
Sitkah 29:41e02746041d 100 T_etat etat = INIT;
Sitkah 29:41e02746041d 101 E_stratGameEtat gameEtat = ETAT_CHECK_CARTES;
Sitkah 29:41e02746041d 102 E_stratGameEtat lastEtat = ETAT_CHECK_CARTES;
Sitkah 29:41e02746041d 103
Sitkah 29:41e02746041d 104
Sitkah 29:41e02746041d 105 /////////////////DEFINITION DES BOUTONS////////////////////
Sitkah 29:41e02746041d 106 Button COTE_BLEU(0, 25, 400, 300, "Bleu");
Sitkah 29:41e02746041d 107 Button COTE_JAUNE(0, 350, 400, 300, "Jaune");
Sitkah 29:41e02746041d 108 Button RETOUR (0, 680, 400, 110, "--Precedent--");
Sitkah 29:41e02746041d 109 Button LANCER (0, 200, 400, 200, "--LANCER--");
Sitkah 29:41e02746041d 110 Button CHECK (0, 420, 400, 200, "Valider");
Sitkah 29:41e02746041d 111 Button MATCH (0, 50, 400, 320, "Match");
Sitkah 29:41e02746041d 112 Button DEMONSTRATION (0, 400, 400, 320, "Demo");
Sitkah 30:a1e37af4bbde 113 Button TEST_MOTEUR(0, 25, 400, 200, "Demo immeuble");
Sitkah 30:a1e37af4bbde 114 Button TEST_BRAS(0, 250, 400, 200, "Demo Bluetooth");
Sitkah 29:41e02746041d 115 Button FORCE_LAUNCH(0, 50, 400, 320, "Force Launch");
Sitkah 29:41e02746041d 116 Button SUIVANT(0,380,200,100,"Suivant");
Sitkah 29:41e02746041d 117 ////////////////////////////////////////////////////////////
Sitkah 29:41e02746041d 118
Sitkah 29:41e02746041d 119 void SendRawId (unsigned short id);
Sitkah 29:41e02746041d 120 void SelectionStrat (unsigned char numeroStrat);
Sitkah 29:41e02746041d 121 void Setflag(void);
Sitkah 29:41e02746041d 122 void can2Rx_ISR(void);
Sitkah 29:41e02746041d 123 signed char Bouton_Strat (void);
Sitkah 29:41e02746041d 124
Sitkah 29:41e02746041d 125 void print_segment(int nombre, int decalage);
Sitkah 29:41e02746041d 126 void affichage_compteur (int nombre);
Sitkah 29:41e02746041d 127 void effacer_segment(long couleur);
Sitkah 29:41e02746041d 128
Sitkah 30:a1e37af4bbde 129 unsigned short telemetreDistance=0;
Sitkah 30:a1e37af4bbde 130 unsigned short telemetreDistance1=0;
Sitkah 30:a1e37af4bbde 131 unsigned short telemetreDistance2=0;
Sitkah 30:a1e37af4bbde 132 unsigned short telemetreDistance3=0;
Sitkah 29:41e02746041d 133
Sitkah 29:41e02746041d 134 #ifdef ROBOT_BIG
Sitkah 29:41e02746041d 135
Sitkah 29:41e02746041d 136
Sitkah 29:41e02746041d 137 unsigned short id_check[NOMBRE_CARTES]= {CHECK_MOTEUR,CHECK_BALISE,CHECK_ACTIONNEURS_AVANT,CHECK_ACTIONNEURS_ARRIERE};
Sitkah 29:41e02746041d 138 unsigned short id_alive[NOMBRE_CARTES]= {ALIVE_MOTEUR,ALIVE_BALISE,ALIVE_ACTIONNEURS_AVANT,ALIVE_ACTIONNEURS_ARRIERE};
Sitkah 29:41e02746041d 139
Sitkah 29:41e02746041d 140 InterruptIn jack(PA_6); // entrée analogique en interruption pour le jack
Sitkah 29:41e02746041d 141 #else
Sitkah 29:41e02746041d 142
Sitkah 29:41e02746041d 143
Sitkah 29:41e02746041d 144 unsigned short id_check[NOMBRE_CARTES]= {CHECK_MOTEUR};
Sitkah 29:41e02746041d 145 unsigned short id_alive[NOMBRE_CARTES]= {ALIVE_MOTEUR};
Sitkah 30:a1e37af4bbde 146 InterruptIn jack(PA_6); // entrée analogique en interruption pour le jack
Sitkah 29:41e02746041d 147
Sitkah 29:41e02746041d 148
Sitkah 29:41e02746041d 149 #endif
Sitkah 29:41e02746041d 150
Sitkah 29:41e02746041d 151
Sitkah 29:41e02746041d 152
Sitkah 29:41e02746041d 153
Sitkah 29:41e02746041d 154
ClementBreteau 14:c8fc06c4887f 155
antbig 4:88431b537477 156 /****************************************************************************************/
antbig 4:88431b537477 157 /* FUNCTION NAME: chronometre_ISR */
antbig 4:88431b537477 158 /* DESCRIPTION : Interruption à la fin des 90s du match */
antbig 4:88431b537477 159 /****************************************************************************************/
antbig 0:ad97421fb1fb 160 void chronometre_ISR (void)
antbig 0:ad97421fb1fb 161 {
antbig 0:ad97421fb1fb 162 SendRawId(ASSERVISSEMENT_STOP);//On stope les moteurs
antbig 0:ad97421fb1fb 163 SendRawId(GLOBAL_GAME_END);//Indication fin de match
Sitkah 29:41e02746041d 164 etat=FIN;
antbig 0:ad97421fb1fb 165 gameTimer.stop();//Arret du timer
antbig 0:ad97421fb1fb 166
antbig 1:116040d14164 167 #ifdef ROBOT_BIG
antbig 12:14729d584500 168 wait_ms(2000);
antbig 0:ad97421fb1fb 169 doFunnyAction();
antbig 0:ad97421fb1fb 170 #endif
antbig 0:ad97421fb1fb 171
antbig 1:116040d14164 172 while(1);//On bloque la programme dans l'interruption
antbig 0:ad97421fb1fb 173 }
antbig 0:ad97421fb1fb 174
Sitkah 29:41e02746041d 175
Sitkah 29:41e02746041d 176
antbig 4:88431b537477 177 /****************************************************************************************/
antbig 8:0edc7dfb7f7e 178 /* FUNCTION NAME: jack_ISR */
antbig 8:0edc7dfb7f7e 179 /* DESCRIPTION : Interruption en changement d'état sur le Jack */
antbig 8:0edc7dfb7f7e 180 /****************************************************************************************/
antbig 8:0edc7dfb7f7e 181 void jack_ISR (void)
antbig 8:0edc7dfb7f7e 182 {
antbig 8:0edc7dfb7f7e 183 if(gameEtat == ETAT_GAME_WAIT_FOR_JACK) {
antbig 8:0edc7dfb7f7e 184 gameEtat = ETAT_GAME_START;//On débute le match
Sitkah 29:41e02746041d 185 etat=COMPTEUR;
antbig 8:0edc7dfb7f7e 186 }
antbig 8:0edc7dfb7f7e 187 }
antbig 8:0edc7dfb7f7e 188
antbig 8:0edc7dfb7f7e 189 /****************************************************************************************/
Sitkah 29:41e02746041d 190 /* FUNCTION NAME: SelectionStrat */
Sitkah 29:41e02746041d 191 /* DESCRIPTION : Affiche la Stratégie sélectionnée sur l'ihm */
Sitkah 29:41e02746041d 192 /****************************************************************************************/
Sitkah 29:41e02746041d 193
Sitkah 29:41e02746041d 194
Sitkah 29:41e02746041d 195 void SelectionStrat (unsigned char Strategie)
Sitkah 29:41e02746041d 196 {
Sitkah 29:41e02746041d 197 lcd.SetBackColor(LCD_COLOR_WHITE);
Sitkah 29:41e02746041d 198 lcd.SetTextColor(LCD_COLOR_BLACK);
Sitkah 29:41e02746041d 199
Sitkah 29:41e02746041d 200 switch (Strategie+1)
Sitkah 29:41e02746041d 201 {
Sitkah 29:41e02746041d 202 case 0x1 :
Sitkah 29:41e02746041d 203 //description de Strategie n°1
Sitkah 29:41e02746041d 204 lcd.DisplayStringAt(150, 0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
Sitkah 29:41e02746041d 205 break;
Sitkah 29:41e02746041d 206
Sitkah 29:41e02746041d 207 case 0x2 :
Sitkah 29:41e02746041d 208 //description de Strategie n°2
Sitkah 29:41e02746041d 209 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
Sitkah 29:41e02746041d 210 break;
Sitkah 29:41e02746041d 211
Sitkah 29:41e02746041d 212 case 0x3 :
Sitkah 29:41e02746041d 213 //description de Strategie n°3
Sitkah 29:41e02746041d 214 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
Sitkah 29:41e02746041d 215 break;
Sitkah 29:41e02746041d 216
Sitkah 29:41e02746041d 217 case 0x4 :
Sitkah 29:41e02746041d 218 //description de Strategie n°4
Sitkah 29:41e02746041d 219 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
Sitkah 29:41e02746041d 220 break;
Sitkah 29:41e02746041d 221
Sitkah 29:41e02746041d 222 case 0x5 :
Sitkah 29:41e02746041d 223 //description de Strategie n°5
Sitkah 29:41e02746041d 224 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
Sitkah 29:41e02746041d 225 break;
Sitkah 29:41e02746041d 226
Sitkah 29:41e02746041d 227 case 0x6 :
Sitkah 29:41e02746041d 228 //description de Strategie n°5
Sitkah 29:41e02746041d 229 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
Sitkah 29:41e02746041d 230 break;
Sitkah 29:41e02746041d 231
Sitkah 29:41e02746041d 232 case 0x7 :
Sitkah 29:41e02746041d 233 //description de Strategie n°5
Sitkah 29:41e02746041d 234 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
Sitkah 29:41e02746041d 235 break;
Sitkah 29:41e02746041d 236
Sitkah 29:41e02746041d 237 case 0x8 :
Sitkah 29:41e02746041d 238 //description de Strategie n°5
Sitkah 29:41e02746041d 239 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
Sitkah 29:41e02746041d 240 break;
Sitkah 29:41e02746041d 241
Sitkah 29:41e02746041d 242 case 0x9 :
Sitkah 29:41e02746041d 243 //description de Strategie n°5
Sitkah 29:41e02746041d 244 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
Sitkah 29:41e02746041d 245 break;
Sitkah 29:41e02746041d 246
Sitkah 29:41e02746041d 247 case 0xA :
Sitkah 29:41e02746041d 248 //description de Strategie n°5
Sitkah 29:41e02746041d 249 lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE);
Sitkah 29:41e02746041d 250 break;
Sitkah 29:41e02746041d 251 }
Sitkah 29:41e02746041d 252 }
Sitkah 29:41e02746041d 253
Sitkah 29:41e02746041d 254 void Setflag(void)
Sitkah 29:41e02746041d 255 {
Sitkah 29:41e02746041d 256 flagSendCan = 1;
Sitkah 29:41e02746041d 257 }
Sitkah 29:41e02746041d 258
Sitkah 30:a1e37af4bbde 259 void affichage_debug(int Var){
Sitkah 29:41e02746041d 260 int i;
Sitkah 29:41e02746041d 261 int conv=(int)Var;
Sitkah 29:41e02746041d 262 SUIVANT.Draw(ROUGE, 0);
Sitkah 29:41e02746041d 263 for(i=0;i<9;i++){
Sitkah 29:41e02746041d 264 strcpy(tableau_aff[i],"");
Sitkah 29:41e02746041d 265 strcpy(tableau_aff[i],tableau_aff[i+1]);
Sitkah 29:41e02746041d 266 }
Sitkah 29:41e02746041d 267 strcpy(tableau_aff[9],tableau_etat[conv]);
Sitkah 29:41e02746041d 268 for(i=0;i<10;i++){
Sitkah 29:41e02746041d 269 lcd.SetBackColor(BLEU);
Sitkah 29:41e02746041d 270 lcd.DisplayStringAt(0, LINE(20+i), (uint8_t *)tableau_aff[i], LEFT_MODE);
Sitkah 29:41e02746041d 271 }
Sitkah 30:a1e37af4bbde 272 /*while(!ack_bluetooth){
Sitkah 30:a1e37af4bbde 273 //liaison_bluetooth();
Sitkah 29:41e02746041d 274 }
Sitkah 30:a1e37af4bbde 275 ack_bluetooth=0;*/
Sitkah 30:a1e37af4bbde 276 /*while(SUIVANT.Touched()==0);
Sitkah 30:a1e37af4bbde 277 while(SUIVANT.Touched());*/
Sitkah 29:41e02746041d 278 }
Sitkah 29:41e02746041d 279
Sitkah 29:41e02746041d 280
Sitkah 29:41e02746041d 281 void automate_etat_ihm(void)
Sitkah 29:41e02746041d 282 {
Sitkah 29:41e02746041d 283 int j;
Sitkah 29:41e02746041d 284 if (j==0){
Sitkah 29:41e02746041d 285 ts.Init(lcd.GetXSize(), lcd.GetYSize());
Sitkah 29:41e02746041d 286 j++;
Sitkah 29:41e02746041d 287 }
Sitkah 29:41e02746041d 288 ts.GetState(&TS_State);
Sitkah 29:41e02746041d 289 switch (etat)
Sitkah 29:41e02746041d 290 {
Sitkah 29:41e02746041d 291 case INIT :
Sitkah 29:41e02746041d 292 ts.GetState(&TS_State);
Sitkah 29:41e02746041d 293 canProcessRx();
Sitkah 30:a1e37af4bbde 294
Sitkah 30:a1e37af4bbde 295 CANMessage trame_Tx = CANMessage();
Sitkah 30:a1e37af4bbde 296 trame_Tx.len = 1;
Sitkah 30:a1e37af4bbde 297 trame_Tx.format = CANStandard;
Sitkah 30:a1e37af4bbde 298 trame_Tx.type = CANData;
Sitkah 30:a1e37af4bbde 299
Sitkah 30:a1e37af4bbde 300
Sitkah 29:41e02746041d 301 lcd.SetBackColor(LCD_COLOR_WHITE);
Sitkah 29:41e02746041d 302 lcd.SetTextColor(LCD_COLOR_BLACK);
Sitkah 29:41e02746041d 303 lcd.Clear (LCD_COLOR_WHITE);
Sitkah 29:41e02746041d 304 wait(0.15);
Sitkah 29:41e02746041d 305 lcd.DisplayStringAt(0, 10, (uint8_t *)"Verification des cartes", LEFT_MODE);
Sitkah 29:41e02746041d 306 //cartes non verifiées////////////////
Sitkah 29:41e02746041d 307 lcd.SetTextColor(DIY_GREY);
Sitkah 29:41e02746041d 308 lcd.FillRect(0,400,400,150); //carte moteur
Sitkah 29:41e02746041d 309 lcd.FillRect(0,600,400,150); //Balise
Sitkah 29:41e02746041d 310
Sitkah 29:41e02746041d 311 lcd.SetTextColor(LCD_COLOR_BLACK);
Sitkah 29:41e02746041d 312 lcd.SetBackColor(DIY_GREY);
Sitkah 29:41e02746041d 313 lcd.DisplayStringAt(80, 450, (uint8_t *)"Carte Moteur", LEFT_MODE);
Sitkah 29:41e02746041d 314 lcd.DisplayStringAt(110,650 , (uint8_t *)"Balise", LEFT_MODE);
Sitkah 29:41e02746041d 315 ////////////////////////////////////////
Sitkah 29:41e02746041d 316
Sitkah 29:41e02746041d 317 FORCE_LAUNCH.Draw(0xFFFF0000, 0);
Sitkah 29:41e02746041d 318
Sitkah 29:41e02746041d 319 /*while(flag == 0)
Sitkah 29:41e02746041d 320 {
Sitkah 29:41e02746041d 321 ts.GetState(&TS_State);
Sitkah 29:41e02746041d 322 canProcessRx();
Sitkah 29:41e02746041d 323 if (FORCE_LAUNCH.Touched())
Sitkah 29:41e02746041d 324 {
Sitkah 29:41e02746041d 325 etat = CHOIX;
Sitkah 29:41e02746041d 326 gameEtat = ETAT_CONFIG;
Sitkah 29:41e02746041d 327 flag = 1;
Sitkah 29:41e02746041d 328 while(FORCE_LAUNCH.Touched());
Sitkah 29:41e02746041d 329 }
Sitkah 29:41e02746041d 330 }*/
Sitkah 29:41e02746041d 331
Sitkah 29:41e02746041d 332 etat=ATT;
Sitkah 29:41e02746041d 333 break;
Sitkah 29:41e02746041d 334
Sitkah 29:41e02746041d 335 case ATT :
Sitkah 29:41e02746041d 336 if (flag==1){
Sitkah 29:41e02746041d 337 etat = CHOIX;
Sitkah 29:41e02746041d 338 gameEtat = ETAT_CONFIG;
Sitkah 29:41e02746041d 339 }
Sitkah 29:41e02746041d 340 else if (FORCE_LAUNCH.Touched()){
Sitkah 29:41e02746041d 341 etat = CHOIX;
Sitkah 29:41e02746041d 342 gameEtat = ETAT_CONFIG;
Sitkah 30:a1e37af4bbde 343 while(FORCE_LAUNCH.Touched());
Sitkah 29:41e02746041d 344 }
Sitkah 29:41e02746041d 345
Sitkah 29:41e02746041d 346 break;
Sitkah 29:41e02746041d 347
Sitkah 29:41e02746041d 348
Sitkah 29:41e02746041d 349 case CHOIX :
Sitkah 29:41e02746041d 350 lcd.SetBackColor(LCD_COLOR_WHITE);
Sitkah 29:41e02746041d 351 lcd.SetTextColor(LCD_COLOR_BLACK);
Sitkah 29:41e02746041d 352 lcd.Clear (LCD_COLOR_WHITE);
Sitkah 29:41e02746041d 353 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Match ou demonstration ?", LEFT_MODE);
Sitkah 29:41e02746041d 354 DEMONSTRATION.Draw(LCD_COLOR_LIGHTGREEN, 0);
Sitkah 29:41e02746041d 355 MATCH.Draw(0xFFF01010, 0);
Sitkah 29:41e02746041d 356 while(etat == CHOIX)
Sitkah 29:41e02746041d 357 {
Sitkah 29:41e02746041d 358 canProcessRx();
Sitkah 29:41e02746041d 359 if(DEMONSTRATION.Touched())
Sitkah 29:41e02746041d 360 {
Sitkah 29:41e02746041d 361 etat = DEMO;
Sitkah 29:41e02746041d 362 while(DEMONSTRATION.Touched());
Sitkah 29:41e02746041d 363 }
Sitkah 29:41e02746041d 364
Sitkah 29:41e02746041d 365 if(MATCH.Touched())
Sitkah 29:41e02746041d 366 {
Sitkah 29:41e02746041d 367 etat = SELECT_SIDE;
Sitkah 29:41e02746041d 368 while(MATCH.Touched());
Sitkah 29:41e02746041d 369 }
Sitkah 29:41e02746041d 370
Sitkah 29:41e02746041d 371 }
Sitkah 29:41e02746041d 372 break;
Sitkah 29:41e02746041d 373
Sitkah 29:41e02746041d 374 case DEMO :
Sitkah 29:41e02746041d 375 lcd.Clear(LCD_COLOR_WHITE);
Sitkah 29:41e02746041d 376
Sitkah 29:41e02746041d 377 TEST_MOTEUR.Draw(0xFFF0F0F0, 0);
Sitkah 29:41e02746041d 378 TEST_BRAS.Draw(0xFFF0F0F0, 0);
Sitkah 29:41e02746041d 379 RETOUR.Draw(0xFFFF0000, 0);
Sitkah 29:41e02746041d 380 if(gameEtat == ETAT_CONFIG) {//C'est bon on a le droit de modifier les config //
Sitkah 29:41e02746041d 381 InversStrat = 0;//Pas d'inversion de la couleur // A changer , discussion avec l'ihm
Sitkah 29:41e02746041d 382 }
Sitkah 29:41e02746041d 383 while (etat == DEMO)
Sitkah 29:41e02746041d 384 {
Sitkah 29:41e02746041d 385 canProcessRx();
Sitkah 29:41e02746041d 386 if(TEST_MOTEUR.Touched())
Sitkah 29:41e02746041d 387 {
Sitkah 30:a1e37af4bbde 388 //Strat = 0x10;
Sitkah 29:41e02746041d 389 while(TEST_MOTEUR.Touched());
Sitkah 29:41e02746041d 390 TEST_MOTEUR.Draw(0xFFF0F0F0, 0);
Sitkah 29:41e02746041d 391 etat = DEMO_EN_COURS;
Sitkah 30:a1e37af4bbde 392 ModeDemo=0;
Sitkah 29:41e02746041d 393 }
Sitkah 29:41e02746041d 394
Sitkah 29:41e02746041d 395 if(TEST_BRAS.Touched())
Sitkah 29:41e02746041d 396 {
Sitkah 30:a1e37af4bbde 397 //Strat = 0x11;
Sitkah 29:41e02746041d 398 while(TEST_BRAS.Touched());
Sitkah 29:41e02746041d 399 TEST_MOTEUR.Draw(0xFFF0F0F0, 0);
Sitkah 29:41e02746041d 400 etat = DEMO_EN_COURS;
Sitkah 30:a1e37af4bbde 401 ModeDemo=1;
Sitkah 29:41e02746041d 402 }
Sitkah 29:41e02746041d 403
Sitkah 29:41e02746041d 404 if(RETOUR.Touched())
Sitkah 29:41e02746041d 405 {
Sitkah 29:41e02746041d 406 etat = CHOIX;
Sitkah 29:41e02746041d 407 while(RETOUR.Touched());
Sitkah 29:41e02746041d 408 }
Sitkah 29:41e02746041d 409 if(gameEtat == ETAT_CONFIG) {//C'est bon on a le droit de modifier les config
Sitkah 30:a1e37af4bbde 410 /*if (Strat< 0x10){ // Si la strat est une strat de match, on desactive le mode demo
Sitkah 29:41e02746041d 411 ModeDemo = 0;
Sitkah 29:41e02746041d 412 }
Sitkah 29:41e02746041d 413 else { // sinon, on active le mode demo, utile pour la fin de la demo
Sitkah 29:41e02746041d 414 ModeDemo = 1;
Sitkah 30:a1e37af4bbde 415 }*/
Sitkah 29:41e02746041d 416
Sitkah 29:41e02746041d 417 Ack_strat = 1;
Sitkah 29:41e02746041d 418 wait_ms(10);
Sitkah 30:a1e37af4bbde 419 //tactile_printf("Strat %d, Asser desactive",Strat);
Sitkah 29:41e02746041d 420 }
Sitkah 30:a1e37af4bbde 421 //SelectionStrat(Strategie);
Sitkah 29:41e02746041d 422 }
Sitkah 29:41e02746041d 423 break;
Sitkah 29:41e02746041d 424
Sitkah 29:41e02746041d 425 case DEMO_EN_COURS:
Sitkah 29:41e02746041d 426 lcd.Clear(LCD_COLOR_WHITE);
Sitkah 29:41e02746041d 427 lcd.SetBackColor(LCD_COLOR_WHITE);
Sitkah 29:41e02746041d 428 lcd.DisplayStringAt(20, LINE(10), (uint8_t *)"DEMONSTRATION EN COURS", LEFT_MODE);
Sitkah 29:41e02746041d 429
Sitkah 29:41e02746041d 430
Sitkah 30:a1e37af4bbde 431 while(etat == DEMO_EN_COURS)
Sitkah 29:41e02746041d 432 {
Sitkah 29:41e02746041d 433 canProcessRx();
Sitkah 29:41e02746041d 434
Sitkah 30:a1e37af4bbde 435 /*if (Ack_strat == 1)
Sitkah 29:41e02746041d 436 {
Sitkah 29:41e02746041d 437 if(gameEtat == ETAT_CONFIG) {
Sitkah 29:41e02746041d 438 gameEtat = ETAT_GAME_INIT;
Sitkah 29:41e02746041d 439 }
Sitkah 29:41e02746041d 440 while (flag_strat != 1)
Sitkah 29:41e02746041d 441 {
Sitkah 29:41e02746041d 442 canProcessRx();
Sitkah 29:41e02746041d 443 }
Sitkah 29:41e02746041d 444 etat = DEMO;
Sitkah 29:41e02746041d 445 flag_strat = 0;
Sitkah 30:a1e37af4bbde 446 }*/
Sitkah 30:a1e37af4bbde 447 if(ModeDemo==0){
Sitkah 30:a1e37af4bbde 448 CANMessage msgTx=CANMessage();
Sitkah 30:a1e37af4bbde 449 msgTx.id=0x090; // Monter immeuble
Sitkah 30:a1e37af4bbde 450 msgTx.len=3;
Sitkah 30:a1e37af4bbde 451 msgTx.format=CANStandard;
Sitkah 30:a1e37af4bbde 452 msgTx.type=CANData;
Sitkah 30:a1e37af4bbde 453 // Rayon sur 2 octets
Sitkah 30:a1e37af4bbde 454 msgTx.data[0]=4;
Sitkah 30:a1e37af4bbde 455 msgTx.data[1]=3;
Sitkah 30:a1e37af4bbde 456 msgTx.data[2]=2;
Sitkah 30:a1e37af4bbde 457 can2.write(msgTx);
Sitkah 30:a1e37af4bbde 458 ModeDemo==3;
Sitkah 30:a1e37af4bbde 459 while(1);
Sitkah 29:41e02746041d 460 }
Sitkah 30:a1e37af4bbde 461 else if (ModeDemo==1){
Sitkah 30:a1e37af4bbde 462 CANMessage msgTx=CANMessage();
Sitkah 30:a1e37af4bbde 463 msgTx.id=DATA_TELEMETRE; // Monter immeuble
Sitkah 30:a1e37af4bbde 464 msgTx.len=1;
Sitkah 30:a1e37af4bbde 465 msgTx.format=CANStandard;
Sitkah 30:a1e37af4bbde 466 msgTx.type=CANData;
Sitkah 30:a1e37af4bbde 467 // Rayon sur 2 octets
Sitkah 30:a1e37af4bbde 468 msgTx.data[0]=0;
Sitkah 30:a1e37af4bbde 469 can2.write(msgTx);
Sitkah 30:a1e37af4bbde 470 wait(1);
Sitkah 30:a1e37af4bbde 471 etat=DEMO;
Sitkah 30:a1e37af4bbde 472 }
Sitkah 30:a1e37af4bbde 473
Sitkah 30:a1e37af4bbde 474
Sitkah 29:41e02746041d 475
Sitkah 29:41e02746041d 476 }
Sitkah 29:41e02746041d 477 Ack_strat = 0;
Sitkah 29:41e02746041d 478 break;
Sitkah 29:41e02746041d 479
Sitkah 29:41e02746041d 480 case SELECT_SIDE :
Sitkah 29:41e02746041d 481 lcd.Clear(LCD_COLOR_WHITE);
Sitkah 29:41e02746041d 482 lcd.SetBackColor(LCD_COLOR_WHITE);
Sitkah 29:41e02746041d 483 lcd.SetTextColor(LCD_COLOR_BLACK);
Sitkah 29:41e02746041d 484
Sitkah 29:41e02746041d 485 lcd.DisplayStringAt(70, LINE(0), (uint8_t *)"Choisir le cote", LEFT_MODE);
Sitkah 29:41e02746041d 486 COTE_BLEU.Draw(BLEU, 0);
Sitkah 29:41e02746041d 487 COTE_JAUNE.Draw(JAUNE, 0);
Sitkah 29:41e02746041d 488 RETOUR.Draw(LCD_COLOR_RED, 0);
Sitkah 29:41e02746041d 489
Sitkah 29:41e02746041d 490
Sitkah 29:41e02746041d 491 while (etat == SELECT_SIDE)
Sitkah 29:41e02746041d 492 {
Sitkah 29:41e02746041d 493 canProcessRx();
Sitkah 29:41e02746041d 494 if(COTE_BLEU.Touched())
Sitkah 29:41e02746041d 495 {
Sitkah 29:41e02746041d 496 Cote = 0x0;
Sitkah 29:41e02746041d 497 InversStrat = Cote;
Sitkah 29:41e02746041d 498 etat = TACTIQUE;
Sitkah 30:a1e37af4bbde 499 trame_Tx.id=CHOICE_COLOR;
Sitkah 30:a1e37af4bbde 500 trame_Tx.data[0]=Cote;
Sitkah 30:a1e37af4bbde 501 can2.write(trame_Tx);
Sitkah 29:41e02746041d 502 while(COTE_BLEU.Touched());
Sitkah 30:a1e37af4bbde 503
Sitkah 29:41e02746041d 504 }
Sitkah 29:41e02746041d 505
Sitkah 29:41e02746041d 506 if(COTE_JAUNE.Touched())
Sitkah 29:41e02746041d 507 {
Sitkah 29:41e02746041d 508 Cote = 0x1;
Sitkah 29:41e02746041d 509 InversStrat= Cote;
Sitkah 29:41e02746041d 510 etat = TACTIQUE;
Sitkah 30:a1e37af4bbde 511 trame_Tx.id=CHOICE_COLOR;
Sitkah 30:a1e37af4bbde 512 trame_Tx.data[0]=Cote;
Sitkah 30:a1e37af4bbde 513 can2.write(trame_Tx);
Sitkah 29:41e02746041d 514 while(COTE_JAUNE.Touched());
Sitkah 29:41e02746041d 515 }
Sitkah 29:41e02746041d 516
Sitkah 29:41e02746041d 517 if(RETOUR.Touched())
Sitkah 29:41e02746041d 518 {
Sitkah 29:41e02746041d 519 etat = CHOIX;
Sitkah 29:41e02746041d 520 while(RETOUR.Touched());
Sitkah 29:41e02746041d 521 }
Sitkah 29:41e02746041d 522 }
Sitkah 29:41e02746041d 523
Sitkah 29:41e02746041d 524 break;
Sitkah 29:41e02746041d 525
Sitkah 29:41e02746041d 526 case TACTIQUE :
Sitkah 29:41e02746041d 527 if (Cote == 0){
Sitkah 29:41e02746041d 528 lcd.Clear(BLEU);
Sitkah 29:41e02746041d 529 lcd.SetBackColor(BLEU);
Sitkah 29:41e02746041d 530 }
Sitkah 29:41e02746041d 531 else if (Cote == 1){
Sitkah 29:41e02746041d 532 lcd.Clear(JAUNE);
Sitkah 29:41e02746041d 533 lcd.SetBackColor(JAUNE);
Sitkah 29:41e02746041d 534 }
Sitkah 29:41e02746041d 535 else {
Sitkah 29:41e02746041d 536 lcd.Clear(BLEU);
Sitkah 29:41e02746041d 537 lcd.SetBackColor(BLEU);
Sitkah 29:41e02746041d 538 }
Sitkah 29:41e02746041d 539
Sitkah 29:41e02746041d 540 lcd.SetTextColor(LCD_COLOR_BLACK);
Sitkah 29:41e02746041d 541
Sitkah 29:41e02746041d 542 lcd.DisplayStringAt(20, LINE(0), (uint8_t *)"Choisir une strategie", LEFT_MODE);
Sitkah 29:41e02746041d 543
Sitkah 29:41e02746041d 544 Strategie = Bouton_Strat(); // retourne valeur de Strategie si bouton strat renvoi -1 on reviens en arriere
Sitkah 29:41e02746041d 545 if (Strategie == -1)
Sitkah 29:41e02746041d 546 {
Sitkah 29:41e02746041d 547 etat = SELECT_SIDE;
Sitkah 29:41e02746041d 548 }
Sitkah 29:41e02746041d 549 else
Sitkah 29:41e02746041d 550 {
Sitkah 29:41e02746041d 551 etat = DETAILS;
Sitkah 29:41e02746041d 552 }
Sitkah 29:41e02746041d 553 wait(0.1);
Sitkah 29:41e02746041d 554 break;
Sitkah 29:41e02746041d 555
Sitkah 29:41e02746041d 556 case DETAILS :
Sitkah 29:41e02746041d 557 lcd.Clear(LCD_COLOR_WHITE);
Sitkah 29:41e02746041d 558 lcd.SetBackColor(LCD_COLOR_WHITE);
Sitkah 29:41e02746041d 559 lcd.SetTextColor(LCD_COLOR_BLACK);
Sitkah 29:41e02746041d 560 CHECK.Draw(VERT);
Sitkah 29:41e02746041d 561 RETOUR.Draw(LCD_COLOR_RED);
Sitkah 29:41e02746041d 562
Sitkah 29:41e02746041d 563 SelectionStrat(Strategie);
Sitkah 29:41e02746041d 564
Sitkah 29:41e02746041d 565 while (etat == DETAILS)
Sitkah 29:41e02746041d 566 {
Sitkah 29:41e02746041d 567 canProcessRx();
Sitkah 29:41e02746041d 568 if (CHECK.Touched())
Sitkah 29:41e02746041d 569 {
Sitkah 29:41e02746041d 570 if(gameEtat == ETAT_CONFIG) {
Sitkah 29:41e02746041d 571 gameEtat = ETAT_GAME_INIT;
Sitkah 29:41e02746041d 572 etat=LECTURE;
Sitkah 29:41e02746041d 573
Sitkah 29:41e02746041d 574 }
Sitkah 29:41e02746041d 575 while(CHECK.Touched());
Sitkah 29:41e02746041d 576 }
Sitkah 29:41e02746041d 577
Sitkah 29:41e02746041d 578 if(RETOUR.Touched())
Sitkah 29:41e02746041d 579 {
Sitkah 29:41e02746041d 580 etat = TACTIQUE;
Sitkah 29:41e02746041d 581 while(RETOUR.Touched());
Sitkah 29:41e02746041d 582 }
Sitkah 29:41e02746041d 583 }
Sitkah 29:41e02746041d 584 break;
Sitkah 29:41e02746041d 585
Sitkah 29:41e02746041d 586
Sitkah 29:41e02746041d 587 case LECTURE :
Sitkah 29:41e02746041d 588 break;
Sitkah 29:41e02746041d 589 case AFF_WAIT_JACK :
Sitkah 29:41e02746041d 590 lcd.Clear(BLANC);
Sitkah 29:41e02746041d 591 lcd.SetBackColor(LCD_COLOR_WHITE);
Sitkah 29:41e02746041d 592 lcd.SetTextColor(LCD_COLOR_BLACK);
Sitkah 29:41e02746041d 593
Sitkah 29:41e02746041d 594 if (Cote == 0){
Sitkah 29:41e02746041d 595 lcd.Clear(BLEU);
Sitkah 29:41e02746041d 596 lcd.SetBackColor(BLEU);
Sitkah 29:41e02746041d 597 }
Sitkah 29:41e02746041d 598 else if (Cote == 1){
Sitkah 29:41e02746041d 599 lcd.Clear(JAUNE);
Sitkah 29:41e02746041d 600 lcd.SetBackColor(JAUNE);
Sitkah 29:41e02746041d 601 }
Sitkah 29:41e02746041d 602 else {
Sitkah 29:41e02746041d 603 lcd.Clear(BLEU);
Sitkah 29:41e02746041d 604 lcd.SetBackColor(BLEU);
Sitkah 29:41e02746041d 605 }
Sitkah 29:41e02746041d 606 canProcessRx();
Sitkah 29:41e02746041d 607 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"En attente du Jack", CENTER_MODE);
Sitkah 29:41e02746041d 608 etat=WAIT_JACK;
Sitkah 29:41e02746041d 609 break;
Sitkah 29:41e02746041d 610
Sitkah 29:41e02746041d 611 case WAIT_JACK:
Sitkah 29:41e02746041d 612 break;
Sitkah 29:41e02746041d 613
Sitkah 29:41e02746041d 614 case COMPTEUR:
Sitkah 29:41e02746041d 615 cptf=gameTimer.read();
Sitkah 29:41e02746041d 616 lcd.SetTextColor(LCD_COLOR_BLACK);
Sitkah 29:41e02746041d 617 cpt=int(cptf);
Sitkah 29:41e02746041d 618 if(cpt != cpt1){
Sitkah 29:41e02746041d 619 lcd.Clear(BLEU);
Sitkah 29:41e02746041d 620 affichage_compteur(90-cpt);
Sitkah 29:41e02746041d 621 }
Sitkah 29:41e02746041d 622 cpt1=cpt;
Sitkah 29:41e02746041d 623 flag_timer=0;
Sitkah 29:41e02746041d 624
Sitkah 29:41e02746041d 625 affichage_debug(gameEtat);
Sitkah 29:41e02746041d 626
Sitkah 29:41e02746041d 627
Sitkah 29:41e02746041d 628 break;
Sitkah 29:41e02746041d 629
Sitkah 29:41e02746041d 630 case FIN :
Sitkah 29:41e02746041d 631 lcd.Clear (LCD_COLOR_WHITE);
Sitkah 29:41e02746041d 632 lcd.SetBackColor(LCD_COLOR_WHITE);
Sitkah 29:41e02746041d 633 lcd.DisplayStringAt(120, 190, (uint8_t *)"LANCEMENT", LEFT_MODE);
Sitkah 29:41e02746041d 634 lcd.SetTextColor(LCD_COLOR_BLACK);
Sitkah 29:41e02746041d 635 lcd.DisplayStringAt(120, 210, (uint8_t *)"REDEMARAGE", LEFT_MODE);
Sitkah 29:41e02746041d 636 lcd.DisplayStringAt(120, 230, (uint8_t *)"NECESSAIRE", LEFT_MODE);
Sitkah 29:41e02746041d 637 while(1); // force le redemarage du robot
Sitkah 29:41e02746041d 638 //break;
Sitkah 29:41e02746041d 639
Sitkah 29:41e02746041d 640 }
Sitkah 29:41e02746041d 641 }
Sitkah 29:41e02746041d 642
Sitkah 29:41e02746041d 643
Sitkah 29:41e02746041d 644
Sitkah 29:41e02746041d 645 /****************************************************************************************/
antbig 4:88431b537477 646 /* FUNCTION NAME: automate_process */
antbig 4:88431b537477 647 /* DESCRIPTION : Automate de gestion de la stratégie du robot */
antbig 4:88431b537477 648 /****************************************************************************************/
Sitkah 29:41e02746041d 649 void automate_process(void){
antbig 1:116040d14164 650 static unsigned char AX12_enchainement = 0;
antbig 1:116040d14164 651 static unsigned char MV_enchainement = 0;
antbig 0:ad97421fb1fb 652 signed char localData1 = 0;
antbig 0:ad97421fb1fb 653 signed short localData2 = 0;
antbig 0:ad97421fb1fb 654 unsigned short localData3 = 0;
ClementBreteau 14:c8fc06c4887f 655 //signed short localData4 = 0;
antbig 1:116040d14164 656 unsigned char localData5 = 0;
antbig 0:ad97421fb1fb 657
antbig 12:14729d584500 658 if(gameTimer.read_ms() >= 89000) {//Fin du match (On autorise 2s pour déposer des éléments
antbig 0:ad97421fb1fb 659 gameTimer.stop();
antbig 0:ad97421fb1fb 660 gameTimer.reset();
antbig 0:ad97421fb1fb 661 gameEtat = ETAT_END;//Fin du temps
Sitkah 29:41e02746041d 662 etat=FIN;
antbig 0:ad97421fb1fb 663 }
antbig 0:ad97421fb1fb 664
antbig 0:ad97421fb1fb 665 if(lastEtat != gameEtat || debugetatTimer.read_ms() >= 1000) {
antbig 0:ad97421fb1fb 666 lastEtat = gameEtat;
antbig 0:ad97421fb1fb 667 debugetatTimer.reset();
antbig 11:ed13a480ddca 668 sendStratEtat((unsigned char)gameEtat, (unsigned char)actual_instruction);
antbig 0:ad97421fb1fb 669 }
antbig 0:ad97421fb1fb 670
antbig 0:ad97421fb1fb 671 switch(gameEtat)
antbig 0:ad97421fb1fb 672 {
Sitkah 30:a1e37af4bbde 673
Sitkah 29:41e02746041d 674 case ETAT_CHECK_CARTES:
antbig 0:ad97421fb1fb 675 /*
antbig 0:ad97421fb1fb 676 Il faut faire une boucle pour verifier toutes les cartes les une apres les autres
antbig 0:ad97421fb1fb 677 */
antbig 0:ad97421fb1fb 678 waitingAckFrom = id_alive[checkCurrent];//On indique que l'on attend un ack de la carte IHM
antbig 11:ed13a480ddca 679 SendRawId(id_check[checkCurrent]);//On demande à la carte d'indiquer ça présence
antbig 0:ad97421fb1fb 680
antbig 0:ad97421fb1fb 681 screenChecktry++;//On incrèment le conteur de tentative de 1
antbig 0:ad97421fb1fb 682 cartesCheker.reset();//On reset le timeOut
antbig 0:ad97421fb1fb 683 cartesCheker.start();//On lance le timer pour le timeout
antbig 0:ad97421fb1fb 684 gameEtat = ETAT_CHECK_CARTES_WAIT_ACK;
Sitkah 29:41e02746041d 685 break;
ClementBreteau 14:c8fc06c4887f 686
antbig 0:ad97421fb1fb 687 case ETAT_CHECK_CARTES_WAIT_ACK:
antbig 0:ad97421fb1fb 688 /*
antbig 0:ad97421fb1fb 689 On attend l'ack de la carte en cours de vérification
antbig 0:ad97421fb1fb 690 */
antbig 0:ad97421fb1fb 691 //printf("cartesCheker = %d waitingAckFrom = %d\n",cartesCheker.read_ms(), waitingAckFrom);
antbig 0:ad97421fb1fb 692 if(waitingAckFrom == 0) {//C'est bon la carte est en ligne
antbig 0:ad97421fb1fb 693 cartesCheker.stop();
antbig 0:ad97421fb1fb 694 screenChecktry = 0;
antbig 0:ad97421fb1fb 695 countAliveCard++;
antbig 11:ed13a480ddca 696 checkCurrent++;
antbig 0:ad97421fb1fb 697 if(checkCurrent >= NOMBRE_CARTES) {
Sitkah 29:41e02746041d 698 printf("all card check, missing %d cards\n",(NOMBRE_CARTES-countAliveCard));
antbig 0:ad97421fb1fb 699 if(countAliveCard >= NOMBRE_CARTES) {
antbig 0:ad97421fb1fb 700 gameEtat = ETAT_CONFIG;
Sitkah 29:41e02746041d 701 flag=1;
Sitkah 30:a1e37af4bbde 702 //tactile_printf("Selection couleur et strategie");
Sitkah 29:41e02746041d 703 }
Sitkah 29:41e02746041d 704 else {
antbig 0:ad97421fb1fb 705 gameEtat = ETAT_WAIT_FORCE;//Passage en attente de forçage du lancement
antbig 0:ad97421fb1fb 706 waitingAckFrom = ECRAN_ALL_CHECK;
antbig 0:ad97421fb1fb 707 }
Sitkah 29:41e02746041d 708 }
Sitkah 29:41e02746041d 709 else
antbig 0:ad97421fb1fb 710 gameEtat = ETAT_CHECK_CARTES;
Sitkah 29:41e02746041d 711 }
Sitkah 29:41e02746041d 712 else if(cartesCheker.read_ms () > 100) {
antbig 0:ad97421fb1fb 713 cartesCheker.stop();
antbig 0:ad97421fb1fb 714 if(screenChecktry >=3) {
antbig 12:14729d584500 715 //printf("missing card %d\n",id_check[checkCurrent]);
antbig 0:ad97421fb1fb 716 screenChecktry = 0;
antbig 11:ed13a480ddca 717 checkCurrent++;
antbig 12:14729d584500 718
Sitkah 29:41e02746041d 719 if(checkCurrent >= NOMBRE_CARTES){
Sitkah 29:41e02746041d 720 if(countAliveCard == NOMBRE_CARTES){
antbig 0:ad97421fb1fb 721 gameEtat = ETAT_CONFIG;
Sitkah 29:41e02746041d 722 flag=1;
Sitkah 29:41e02746041d 723 }
Sitkah 29:41e02746041d 724 else{
Sitkah 29:41e02746041d 725 gameEtat = ETAT_WAIT_FORCE;
antbig 0:ad97421fb1fb 726 waitingAckFrom = ECRAN_ALL_CHECK;
antbig 0:ad97421fb1fb 727 }
Sitkah 29:41e02746041d 728 }
Sitkah 29:41e02746041d 729 else
antbig 0:ad97421fb1fb 730 gameEtat = ETAT_CHECK_CARTES;
Sitkah 29:41e02746041d 731
Sitkah 29:41e02746041d 732 }
Sitkah 29:41e02746041d 733 else
antbig 0:ad97421fb1fb 734 gameEtat = ETAT_CHECK_CARTES;
Sitkah 29:41e02746041d 735
antbig 0:ad97421fb1fb 736 }
Sitkah 29:41e02746041d 737 break;
antbig 0:ad97421fb1fb 738 case ETAT_WAIT_FORCE:
antbig 0:ad97421fb1fb 739 /*
antbig 0:ad97421fb1fb 740 Attente du forçage de la part de la carte IHM
antbig 0:ad97421fb1fb 741 */
antbig 0:ad97421fb1fb 742 if(waitingAckFrom == 0) {
antbig 0:ad97421fb1fb 743 gameEtat = ETAT_CONFIG;
antbig 0:ad97421fb1fb 744 }
Sitkah 29:41e02746041d 745 break;
antbig 0:ad97421fb1fb 746 case ETAT_CONFIG:
antbig 0:ad97421fb1fb 747 /*
antbig 0:ad97421fb1fb 748 Attente de l'odre de choix de mode,
antbig 0:ad97421fb1fb 749 Il est possible de modifier la couleur et l'id de la stratégie
antbig 0:ad97421fb1fb 750 Il est aussi possible d'envoyer les ordres de debug
antbig 0:ad97421fb1fb 751 */
ClementBreteau 14:c8fc06c4887f 752 modeTelemetre = 0;
Sitkah 29:41e02746041d 753 break;
antbig 1:116040d14164 754 case ETAT_GAME_INIT:
antbig 0:ad97421fb1fb 755 //On charge la liste des instructions
Sitkah 29:41e02746041d 756
Sitkah 29:41e02746041d 757 loadAllInstruction(Strategie);//Mise en cache de toute les instructions
Sitkah 29:41e02746041d 758 led3=1;
ClementBreteau 14:c8fc06c4887f 759
antbig 0:ad97421fb1fb 760 gameEtat = ETAT_GAME_WAIT_FOR_JACK;
Sitkah 29:41e02746041d 761 if (etat == DEMO_EN_COURS)
Sitkah 29:41e02746041d 762 {
Sitkah 29:41e02746041d 763 SendRawId(DEBUG_FAKE_JAKE);
Sitkah 29:41e02746041d 764 }
Sitkah 29:41e02746041d 765 else
Sitkah 29:41e02746041d 766 {
Sitkah 29:41e02746041d 767 etat = AFF_WAIT_JACK;
Sitkah 29:41e02746041d 768 }
Sitkah 30:a1e37af4bbde 769 //tactile_printf("Attente du JACK.");
antbig 12:14729d584500 770 setAsservissementEtat(1);//On réactive l'asservissement
antbig 12:14729d584500 771 jack.mode(PullDown); // désactivation de la résistance interne du jack
antbig 8:0edc7dfb7f7e 772 jack.fall(&jack_ISR); // création de l'interrupt attachée au changement d'état (front descendant) sur le jack
antbig 12:14729d584500 773
antbig 12:14729d584500 774 #ifdef ROBOT_BIG //le gros robot n'a pas de recalage bordure pour ce placer au début, on lui envoit donc ça position
antbig 12:14729d584500 775 localData2 = POSITION_DEBUT_T;
antbig 12:14729d584500 776 localData3 = POSITION_DEBUT_Y;
antbig 12:14729d584500 777 if(InversStrat == 1) {
antbig 27:76ead555a63d 778 localData2 = 1800-localData2;//Inversion theta
antbig 28:acd18776ed2d 779 if(localData2 > 1800) localData2 -= 3600;
antbig 28:acd18776ed2d 780 else if(localData2 <= -1800) localData2 += 3600;
antbig 12:14729d584500 781 localData3 = 3000 - POSITION_DEBUT_Y;//Inversion du Y
antbig 12:14729d584500 782 }
antbig 12:14729d584500 783 SetOdometrie(ODOMETRIE_BIG_POSITION, POSITION_DEBUT_X,localData3,localData2);
ClementBreteau 18:cc5fec34ed9c 784 #endif
ClementBreteau 18:cc5fec34ed9c 785 #ifdef ROBOT_SMALL
clementlignie 22:a466d08ac42b 786 localData2 = POSITION_DEBUT_T;
clementlignie 22:a466d08ac42b 787 localData3 = POSITION_DEBUT_Y;
clementlignie 22:a466d08ac42b 788 if(InversStrat == 1) {
clementlignie 22:a466d08ac42b 789 localData2 = -localData2;//Inversion theta
clementlignie 22:a466d08ac42b 790 localData3 = 3000 - POSITION_DEBUT_Y;//Inversion du Y
clementlignie 22:a466d08ac42b 791 }
clementlignie 22:a466d08ac42b 792 SetOdometrie(ODOMETRIE_SMALL_POSITION, POSITION_DEBUT_X,localData3,localData2);
ClementBreteau 18:cc5fec34ed9c 793 #endif
antbig 0:ad97421fb1fb 794 break;
antbig 0:ad97421fb1fb 795 case ETAT_GAME_WAIT_FOR_JACK:
antbig 12:14729d584500 796 //On attend le jack
antbig 1:116040d14164 797 break;
antbig 1:116040d14164 798 case ETAT_GAME_START:
Sitkah 29:41e02746041d 799
antbig 1:116040d14164 800 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
ClementBreteau 14:c8fc06c4887f 801
ClementBreteau 14:c8fc06c4887f 802 if (ModeDemo == 0){
ClementBreteau 14:c8fc06c4887f 803 chronoEnd.attach(&chronometre_ISR,90);//On lance le chrono de 90s
ClementBreteau 14:c8fc06c4887f 804 gameTimer.start();
ClementBreteau 14:c8fc06c4887f 805 }
antbig 1:116040d14164 806 gameTimer.reset();
antbig 12:14729d584500 807 jack.fall(NULL);//On désactive l'interruption du jack
Sitkah 29:41e02746041d 808 SendRawId(GLOBAL_START);
Sitkah 29:41e02746041d 809 Jack=0; //à envoyer sur le CAN et en direct pour l'automate de l'ihm ou sur CANV
Sitkah 30:a1e37af4bbde 810 //tactile_printf("Start");//Pas vraiment utile mais bon
antbig 0:ad97421fb1fb 811 break;
antbig 0:ad97421fb1fb 812 case ETAT_GAME_LOAD_NEXT_INSTRUCTION:
antbig 0:ad97421fb1fb 813 /*
antbig 0:ad97421fb1fb 814 Chargement de l'instruction suivante ou arret du robot si il n'y a plus d'instruction
antbig 0:ad97421fb1fb 815 */
antbig 0:ad97421fb1fb 816 //printf("load next instruction\n");
ClementBreteau 14:c8fc06c4887f 817
antbig 0:ad97421fb1fb 818 if(actual_instruction >= nb_instructions || actual_instruction == 255) {
antbig 0:ad97421fb1fb 819 gameEtat = ETAT_END;
antbig 0:ad97421fb1fb 820 //Il n'y a plus d'instruction, fin du jeu
antbig 0:ad97421fb1fb 821 } else {
antbig 0:ad97421fb1fb 822 instruction = strat_instructions[actual_instruction];
antbig 0:ad97421fb1fb 823 //On effectue le traitement de l'instruction
antbig 0:ad97421fb1fb 824 gameEtat = ETAT_GAME_PROCESS_INSTRUCTION;
antbig 0:ad97421fb1fb 825 }
antbig 0:ad97421fb1fb 826 screenChecktry = 0;
antbig 28:acd18776ed2d 827 ingnorInversionOnce = 0;
antbig 0:ad97421fb1fb 828 break;
antbig 0:ad97421fb1fb 829 case ETAT_GAME_PROCESS_INSTRUCTION:
antbig 0:ad97421fb1fb 830 /*
antbig 0:ad97421fb1fb 831 Traitement de l'instruction, envoie de la trame CAN
antbig 0:ad97421fb1fb 832 */
antbig 0:ad97421fb1fb 833 //debug_Instruction(instruction);
ClementBreteau 25:f140c93a8666 834
ClementBreteau 25:f140c93a8666 835 actionPrecedente = instruction.order;
antbig 0:ad97421fb1fb 836 switch(instruction.order)
antbig 0:ad97421fb1fb 837 {
antbig 12:14729d584500 838 case MV_COURBURE://C'est un rayon de courbure
ClementBreteau 26:2f4fcc2354f3 839 actionPrecedente = MV_COURBURE;
antbig 6:eddfa414fd11 840 waitingAckID = ASSERVISSEMENT_COURBURE;
antbig 6:eddfa414fd11 841 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
Sitkah 30:a1e37af4bbde 842 if(instruction.nextActionType == ENCHAINEMENT){
antbig 6:eddfa414fd11 843 MV_enchainement++;
antbig 6:eddfa414fd11 844 localData5 = 1;
antbig 6:eddfa414fd11 845 } else {
antbig 6:eddfa414fd11 846 if(MV_enchainement > 0) {
antbig 6:eddfa414fd11 847 localData5 = 2;
antbig 6:eddfa414fd11 848 MV_enchainement = 0;
antbig 6:eddfa414fd11 849 } else {
antbig 6:eddfa414fd11 850 localData5 = 0;
antbig 6:eddfa414fd11 851 }
antbig 0:ad97421fb1fb 852 }
antbig 11:ed13a480ddca 853 localData1 = ((instruction.direction == LEFT)?1:-1);
ClementBreteau 23:ab87d308eaf9 854 localData2 = instruction.arg3;
antbig 28:acd18776ed2d 855 if(InversStrat == 1 && ingnorInversionOnce == 0)
antbig 12:14729d584500 856 {
antbig 12:14729d584500 857 localData1 = -localData1;//Inversion de la direction
ClementBreteau 23:ab87d308eaf9 858 #ifdef ROBOT_BIG
ClementBreteau 25:f140c93a8666 859 localData2 = -localData2;
ClementBreteau 26:2f4fcc2354f3 860 localData1 = -localData1;//Inversion de la direction
ClementBreteau 23:ab87d308eaf9 861 #endif
antbig 12:14729d584500 862 }
ClementBreteau 25:f140c93a8666 863 BendRadius(instruction.arg1, localData2, localData1, localData5);
ClementBreteau 18:cc5fec34ed9c 864
antbig 28:acd18776ed2d 865
antbig 28:acd18776ed2d 866 target_theta_robot = localData2 - theta_robot;
antbig 28:acd18776ed2d 867 /*
ClementBreteau 26:2f4fcc2354f3 868 if(instruction.direction == LEFT){
antbig 28:acd18776ed2d 869
ClementBreteau 26:2f4fcc2354f3 870 }else{
antbig 28:acd18776ed2d 871 target_theta_robot = theta_robot + localData2;
antbig 28:acd18776ed2d 872 }*/
ClementBreteau 26:2f4fcc2354f3 873
antbig 0:ad97421fb1fb 874 break;
antbig 12:14729d584500 875 case MV_LINE://Ligne droite
antbig 0:ad97421fb1fb 876 waitingAckID = ASSERVISSEMENT_RECALAGE;
antbig 0:ad97421fb1fb 877 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
antbig 0:ad97421fb1fb 878 if(instruction.nextActionType == ENCHAINEMENT) {
antbig 1:116040d14164 879 MV_enchainement++;
antbig 1:116040d14164 880 localData5 = 1;
antbig 1:116040d14164 881 } else {
antbig 12:14729d584500 882 if(MV_enchainement > 0) {//Utilisé en cas d'enchainement,
antbig 1:116040d14164 883 localData5 = 2;
antbig 1:116040d14164 884 MV_enchainement = 0;
antbig 1:116040d14164 885 } else {
antbig 1:116040d14164 886 localData5 = 0;
antbig 1:116040d14164 887 }
antbig 0:ad97421fb1fb 888 }
ClementBreteau 16:7321fb3bb396 889 #ifdef ROBOT_BIG
antbig 28:acd18776ed2d 890 if(InversStrat == 1 && ingnorInversionOnce == 0) {
ClementBreteau 15:c2fc239e85df 891 /*if (instruction.direction == FORWARD) instruction.direction = BACKWARD;
ClementBreteau 15:c2fc239e85df 892 else instruction.direction = FORWARD;*/
ClementBreteau 15:c2fc239e85df 893 instruction.direction = ((instruction.direction == FORWARD)?BACKWARD:FORWARD);
ClementBreteau 15:c2fc239e85df 894 }
ClementBreteau 16:7321fb3bb396 895 #endif
antbig 1:116040d14164 896 localData2 = (((instruction.direction == FORWARD)?1:-1)*instruction.arg1);
antbig 1:116040d14164 897 GoStraight(localData2, 0, 0, localData5);
ClementBreteau 14:c8fc06c4887f 898
ClementBreteau 26:2f4fcc2354f3 899 target_x_robot = x_robot + localData2*cos((double)theta_robot*M_PI/1800);
ClementBreteau 26:2f4fcc2354f3 900 target_y_robot = y_robot + localData2*sin((double)theta_robot*M_PI/1800);
ClementBreteau 25:f140c93a8666 901 target_theta_robot = theta_robot;
ClementBreteau 25:f140c93a8666 902
antbig 0:ad97421fb1fb 903 break;
antbig 12:14729d584500 904 case MV_TURN: //Rotation sur place
antbig 0:ad97421fb1fb 905 if(instruction.direction == RELATIVE) {
antbig 0:ad97421fb1fb 906 localData2 = instruction.arg3;
antbig 12:14729d584500 907 } else {//C'est un rotation absolu, il faut la convertir en relative
antbig 12:14729d584500 908 localData2 = instruction.arg3;
antbig 12:14729d584500 909
antbig 12:14729d584500 910 localData2 = (localData2 - theta_robot)%3600;
antbig 12:14729d584500 911 if(localData2 > 1800) {
antbig 12:14729d584500 912 localData2 = localData2-3600;
antbig 12:14729d584500 913 }
antbig 12:14729d584500 914
antbig 0:ad97421fb1fb 915 }
ClementBreteau 23:ab87d308eaf9 916 #ifdef ROBOT_SMALL
antbig 28:acd18776ed2d 917 if(InversStrat == 1 && ingnorInversionOnce == 0) {
clementlignie 22:a466d08ac42b 918 localData2 = -localData2;
clementlignie 22:a466d08ac42b 919 }
ClementBreteau 23:ab87d308eaf9 920 #endif
antbig 28:acd18776ed2d 921 #ifdef ROBOT_BIG
antbig 28:acd18776ed2d 922 if(InversStrat == 1 && ingnorInversionOnce == 0) {
antbig 28:acd18776ed2d 923 if(instruction.direction == RELATIVE) {
antbig 28:acd18776ed2d 924 localData2 = instruction.arg3;
antbig 28:acd18776ed2d 925 } else {//C'est un rotation absolu, il faut la convertir en relative
antbig 28:acd18776ed2d 926
antbig 28:acd18776ed2d 927 localData2 = 1800-instruction.arg3;//Inversion theta
antbig 28:acd18776ed2d 928 if(localData2 > 1800) localData2 -= 3600;
antbig 28:acd18776ed2d 929 else if(localData2 <= -1800) localData2 += 3600;
antbig 28:acd18776ed2d 930
antbig 28:acd18776ed2d 931 localData2 = (localData2 - theta_robot)%3600;
antbig 28:acd18776ed2d 932 if(localData2 > 1800) {
antbig 28:acd18776ed2d 933 localData2 = localData2-3600;
antbig 28:acd18776ed2d 934 }
antbig 28:acd18776ed2d 935
antbig 28:acd18776ed2d 936 }
antbig 28:acd18776ed2d 937 }
antbig 28:acd18776ed2d 938 #endif
antbig 0:ad97421fb1fb 939 Rotate(localData2);
antbig 0:ad97421fb1fb 940 waitingAckID = ASSERVISSEMENT_ROTATION;
antbig 0:ad97421fb1fb 941 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
antbig 28:acd18776ed2d 942
antbig 0:ad97421fb1fb 943 break;
antbig 0:ad97421fb1fb 944 case MV_XYT:
antbig 0:ad97421fb1fb 945 if(instruction.direction == BACKWARD) {
antbig 0:ad97421fb1fb 946 localData1 = -1;
antbig 0:ad97421fb1fb 947 } else {
antbig 0:ad97421fb1fb 948 localData1 = 1;
antbig 0:ad97421fb1fb 949 }
antbig 2:8d8e2cf798a3 950
antbig 28:acd18776ed2d 951 if(InversStrat == 1 && ingnorInversionOnce == 0) {
antbig 12:14729d584500 952 localData2 = -instruction.arg3;
antbig 2:8d8e2cf798a3 953 localData3 = 3000 - instruction.arg2;//Inversion du Y
antbig 2:8d8e2cf798a3 954 } else {
antbig 2:8d8e2cf798a3 955 localData3 = instruction.arg2;
antbig 12:14729d584500 956 localData2 = instruction.arg3;
antbig 2:8d8e2cf798a3 957 }
ClementBreteau 23:ab87d308eaf9 958
ClementBreteau 23:ab87d308eaf9 959 #ifdef ROBOT_BIG
antbig 28:acd18776ed2d 960 if(InversStrat == 1 && ingnorInversionOnce == 0) {
ClementBreteau 23:ab87d308eaf9 961 localData1 = -localData1;
antbig 27:76ead555a63d 962 localData2 = 1800-instruction.arg3;//Inversion theta
antbig 28:acd18776ed2d 963 if(localData2 > 1800) localData2 -= 3600;
antbig 28:acd18776ed2d 964 else if(localData2 <= -1800) localData2 += 3600;
ClementBreteau 23:ab87d308eaf9 965 }
ClementBreteau 23:ab87d308eaf9 966 #endif
ClementBreteau 23:ab87d308eaf9 967
antbig 12:14729d584500 968 GoToPosition(instruction.arg1,localData3,localData2,localData1);
antbig 0:ad97421fb1fb 969 waitingAckID = ASSERVISSEMENT_XYT;
antbig 0:ad97421fb1fb 970 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
ClementBreteau 25:f140c93a8666 971
ClementBreteau 25:f140c93a8666 972 target_x_robot = instruction.arg1;
ClementBreteau 25:f140c93a8666 973 target_y_robot = localData3;
ClementBreteau 25:f140c93a8666 974 target_theta_robot = localData2;
ClementBreteau 25:f140c93a8666 975
antbig 0:ad97421fb1fb 976 break;
antbig 0:ad97421fb1fb 977 case MV_RECALAGE:
antbig 0:ad97421fb1fb 978 waitingAckID = ASSERVISSEMENT_RECALAGE;
antbig 0:ad97421fb1fb 979 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
antbig 11:ed13a480ddca 980 instruction.nextActionType = WAIT;
antbig 12:14729d584500 981 localData2 = (((instruction.direction == FORWARD)?1:-1)*3000);//On indique une distance de 3000 pour etre sur que le robot va ce recaler
antbig 11:ed13a480ddca 982
antbig 11:ed13a480ddca 983 if(instruction.precision == RECALAGE_Y) {
antbig 11:ed13a480ddca 984 localData5 = 2;
antbig 28:acd18776ed2d 985 if(InversStrat == 1 && ingnorInversionOnce == 0) {
antbig 11:ed13a480ddca 986 localData3 = 3000 - instruction.arg1;//Inversion du Y
antbig 11:ed13a480ddca 987 } else {
antbig 11:ed13a480ddca 988 localData3 = instruction.arg1;
antbig 11:ed13a480ddca 989 }
antbig 11:ed13a480ddca 990 } else {
antbig 11:ed13a480ddca 991 localData5 = 1;
antbig 11:ed13a480ddca 992 localData3 = instruction.arg1;
antbig 11:ed13a480ddca 993 }
antbig 11:ed13a480ddca 994
antbig 11:ed13a480ddca 995 GoStraight(localData2, localData5, localData3, 0);
antbig 0:ad97421fb1fb 996 break;
antbig 0:ad97421fb1fb 997 case ACTION:
ClementBreteau 18:cc5fec34ed9c 998 int tempo = 0;
Sitkah 30:a1e37af4bbde 999 waitingAckID= ACK_ACTION; //On veut un ack de type action
Sitkah 30:a1e37af4bbde 1000 waitingAckFrom = ACKNOWLEDGE_HERKULEX; //de la part des herkulex
ClementBreteau 18:cc5fec34ed9c 1001 tempo = doAction(instruction.arg1,instruction.arg2,instruction.arg3);
ClementBreteau 18:cc5fec34ed9c 1002 if(tempo == 1){
antbig 0:ad97421fb1fb 1003 //L'action est spécifique
antbig 11:ed13a480ddca 1004 if((waitingAckFrom == 0 && waitingAckID == 0) || instruction.nextActionType == ENCHAINEMENT) {
ClementBreteau 18:cc5fec34ed9c 1005
antbig 11:ed13a480ddca 1006 actual_instruction = instruction.nextLineOK;//On indique que l'on va charger l'instruction suivante
antbig 11:ed13a480ddca 1007 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
Sitkah 30:a1e37af4bbde 1008 }
Sitkah 30:a1e37af4bbde 1009 else {
ClementBreteau 15:c2fc239e85df 1010 gameEtat = ETAT_GAME_WAIT_ACK;
antbig 11:ed13a480ddca 1011 }
ClementBreteau 18:cc5fec34ed9c 1012 #ifdef ROBOT_SMALL
ClementBreteau 18:cc5fec34ed9c 1013 actual_instruction = instruction.nextLineOK;//On indique que l'on va charger l'instruction suivante
ClementBreteau 18:cc5fec34ed9c 1014 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
ClementBreteau 18:cc5fec34ed9c 1015 #endif
antbig 11:ed13a480ddca 1016 return;
ClementBreteau 18:cc5fec34ed9c 1017 #ifdef ROBOT_SMALL
ClementBreteau 18:cc5fec34ed9c 1018 } else if (tempo == 2) {
ClementBreteau 18:cc5fec34ed9c 1019 // on est dans le cas de l'avance selon le telemetre
ClementBreteau 18:cc5fec34ed9c 1020 waitingAckID = ASSERVISSEMENT_RECALAGE;
ClementBreteau 18:cc5fec34ed9c 1021 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
ClementBreteau 18:cc5fec34ed9c 1022
ClementBreteau 18:cc5fec34ed9c 1023 localData2 = (((instruction.direction == FORWARD)?1:-1)*instruction.arg1);
ClementBreteau 18:cc5fec34ed9c 1024 GoStraight(telemetreDistance, 0, 0, 0);
ClementBreteau 18:cc5fec34ed9c 1025 // on reset la distance du telemetre à 0
ClementBreteau 18:cc5fec34ed9c 1026 telemetreDistance = 5000;
ClementBreteau 18:cc5fec34ed9c 1027 #endif
ClementBreteau 18:cc5fec34ed9c 1028 }else{
antbig 0:ad97421fb1fb 1029 //C'est un AX12 qu'il faut bouger
ClementBreteau 15:c2fc239e85df 1030 //AX12_setGoal(instruction.arg1,instruction.arg3/10,instruction.arg2);
ClementBreteau 15:c2fc239e85df 1031 //AX12_enchainement++;
ClementBreteau 14:c8fc06c4887f 1032
antbig 0:ad97421fb1fb 1033 }
antbig 0:ad97421fb1fb 1034 break;
antbig 0:ad97421fb1fb 1035 default:
antbig 0:ad97421fb1fb 1036 //Instruction inconnue, on l'ignore
antbig 0:ad97421fb1fb 1037 break;
antbig 0:ad97421fb1fb 1038 }
antbig 0:ad97421fb1fb 1039
antbig 0:ad97421fb1fb 1040
antbig 0:ad97421fb1fb 1041
antbig 0:ad97421fb1fb 1042 if(instruction.nextActionType == JUMP || instruction.nextActionType == WAIT) {
antbig 0:ad97421fb1fb 1043 gameEtat = ETAT_GAME_WAIT_ACK;//Il faut attendre que la carte est bien reçu l'acknowledge
antbig 0:ad97421fb1fb 1044 screenChecktry++;//On incrèment le conteur de tentative de 1
antbig 0:ad97421fb1fb 1045 cartesCheker.reset();//On reset le timeOut
antbig 0:ad97421fb1fb 1046 cartesCheker.start();
antbig 1:116040d14164 1047 if(AX12_enchainement > 0) {
ClementBreteau 15:c2fc239e85df 1048 //AX12_processChange();//Il faut lancer le déplacement des AX12
ClementBreteau 15:c2fc239e85df 1049 //AX12_enchainement = 0;
antbig 1:116040d14164 1050 }
antbig 0:ad97421fb1fb 1051 } else {//C'est un enchainement
ClementBreteau 15:c2fc239e85df 1052 if(instruction.order == MV_LINE){
Sitkah 30:a1e37af4bbde 1053 gameEtat = ETAT_GAME_WAIT_ACK;
Sitkah 30:a1e37af4bbde 1054 }
Sitkah 30:a1e37af4bbde 1055 else{
ClementBreteau 15:c2fc239e85df 1056 actual_instruction = instruction.nextLineOK;//On indique que l'on va charger l'instruction suivante
ClementBreteau 15:c2fc239e85df 1057 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;//C'est un enchainement, on charge directement l'instruction suivante
ClementBreteau 15:c2fc239e85df 1058 }
antbig 0:ad97421fb1fb 1059 }
antbig 0:ad97421fb1fb 1060
antbig 0:ad97421fb1fb 1061 break;
antbig 0:ad97421fb1fb 1062 case ETAT_GAME_WAIT_ACK:
antbig 0:ad97421fb1fb 1063 /*
antbig 0:ad97421fb1fb 1064 Attente de l'ack de l'instruction
antbig 0:ad97421fb1fb 1065 */
Sitkah 30:a1e37af4bbde 1066 canProcessRx();
Sitkah 30:a1e37af4bbde 1067 if(waitingAckID == 0 && waitingAckFrom == 0) {//Les ack ont été reset, c'est bon on continue
antbig 0:ad97421fb1fb 1068 //if(true) {
antbig 0:ad97421fb1fb 1069 cartesCheker.stop();
antbig 0:ad97421fb1fb 1070 if(instruction.nextActionType == JUMP) {
antbig 11:ed13a480ddca 1071 if(instruction.jumpAction == JUMP_POSITION) {
antbig 11:ed13a480ddca 1072 gameEtat = ETAT_GAME_JUMP_POSITION;
Sitkah 30:a1e37af4bbde 1073 }
Sitkah 30:a1e37af4bbde 1074 else {//Pour eviter les erreurs, on dit que c'est par défaut un jump time
antbig 0:ad97421fb1fb 1075 gameEtat = ETAT_GAME_JUMP_TIME;
antbig 0:ad97421fb1fb 1076 cartesCheker.reset();//On reset le timeOut
antbig 11:ed13a480ddca 1077 cartesCheker.start();
antbig 0:ad97421fb1fb 1078 }
Sitkah 30:a1e37af4bbde 1079 }
Sitkah 30:a1e37af4bbde 1080 else if(instruction.nextActionType == WAIT) { ///Actualisation des waiting ack afin d'attendre la fin des actions
antbig 0:ad97421fb1fb 1081 gameEtat = ETAT_GAME_WAIT_END_INSTRUCTION;
antbig 0:ad97421fb1fb 1082 switch(instruction.order)
antbig 0:ad97421fb1fb 1083 {
antbig 0:ad97421fb1fb 1084 case MV_COURBURE:
antbig 0:ad97421fb1fb 1085 waitingAckID = ASSERVISSEMENT_COURBURE;
antbig 0:ad97421fb1fb 1086 waitingAckFrom = INSTRUCTION_END_MOTEUR;
antbig 0:ad97421fb1fb 1087 break;
antbig 0:ad97421fb1fb 1088 case MV_LINE:
antbig 0:ad97421fb1fb 1089 waitingAckID = ASSERVISSEMENT_RECALAGE;
antbig 0:ad97421fb1fb 1090 waitingAckFrom = INSTRUCTION_END_MOTEUR;
antbig 0:ad97421fb1fb 1091 break;
antbig 0:ad97421fb1fb 1092 case MV_TURN:
antbig 0:ad97421fb1fb 1093 waitingAckID = ASSERVISSEMENT_ROTATION;
antbig 0:ad97421fb1fb 1094 waitingAckFrom = INSTRUCTION_END_MOTEUR;
antbig 0:ad97421fb1fb 1095 break;
antbig 0:ad97421fb1fb 1096 case MV_XYT:
antbig 0:ad97421fb1fb 1097 waitingAckID = ASSERVISSEMENT_XYT;
antbig 0:ad97421fb1fb 1098 waitingAckFrom = INSTRUCTION_END_MOTEUR;
antbig 0:ad97421fb1fb 1099 break;
antbig 0:ad97421fb1fb 1100 case MV_RECALAGE:
antbig 0:ad97421fb1fb 1101 waitingAckID = ASSERVISSEMENT_RECALAGE;
antbig 0:ad97421fb1fb 1102 waitingAckFrom = INSTRUCTION_END_MOTEUR;
antbig 0:ad97421fb1fb 1103 break;
antbig 0:ad97421fb1fb 1104 case ACTION:
ClementBreteau 15:c2fc239e85df 1105
ClementBreteau 15:c2fc239e85df 1106 if (modeTelemetre == 0){
ClementBreteau 18:cc5fec34ed9c 1107 if (telemetreDistance == 0){
Sitkah 30:a1e37af4bbde 1108 waitingAckID = ACK_ACTION;// ack de type action
Sitkah 30:a1e37af4bbde 1109 waitingAckFrom = ACKNOWLEDGE_HERKULEX; //de la part des herkulex/actionneurs
ClementBreteau 18:cc5fec34ed9c 1110 }else if(telemetreDistance == 5000){
ClementBreteau 18:cc5fec34ed9c 1111 // on est dans le cas ou l'on fait une ligne suivant la distance du telemetre
ClementBreteau 18:cc5fec34ed9c 1112 waitingAckID = ASSERVISSEMENT_RECALAGE;
ClementBreteau 18:cc5fec34ed9c 1113 waitingAckFrom = INSTRUCTION_END_MOTEUR;
ClementBreteau 18:cc5fec34ed9c 1114 telemetreDistance = 0;
ClementBreteau 18:cc5fec34ed9c 1115 }
ClementBreteau 15:c2fc239e85df 1116 }else{ // si on attend la reponse du telemetre
ClementBreteau 15:c2fc239e85df 1117 //modeTelemetre = 1;
ClementBreteau 15:c2fc239e85df 1118 waitingAckID = OBJET_SUR_TABLE;
ClementBreteau 15:c2fc239e85df 1119 waitingAckFrom = 0;
ClementBreteau 15:c2fc239e85df 1120 }
antbig 0:ad97421fb1fb 1121 break;
antbig 0:ad97421fb1fb 1122 default:
antbig 0:ad97421fb1fb 1123 break;
antbig 0:ad97421fb1fb 1124 }
Sitkah 30:a1e37af4bbde 1125 }
Sitkah 30:a1e37af4bbde 1126 else {
antbig 0:ad97421fb1fb 1127 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
antbig 0:ad97421fb1fb 1128 actual_instruction = instruction.nextLineOK;//On indique que l'on va charger l'instruction suivante
antbig 0:ad97421fb1fb 1129 }
Sitkah 30:a1e37af4bbde 1130 }
Sitkah 30:a1e37af4bbde 1131 else if(cartesCheker.read_ms () > 50){
antbig 0:ad97421fb1fb 1132 cartesCheker.stop();
antbig 0:ad97421fb1fb 1133 if(screenChecktry >=2) {//La carte n'a pas reçus l'information, on passe à l'instruction d'erreur
antbig 0:ad97421fb1fb 1134 actual_instruction = instruction.nextLineError;
antbig 0:ad97421fb1fb 1135 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
Sitkah 30:a1e37af4bbde 1136 }
Sitkah 30:a1e37af4bbde 1137 else {
antbig 0:ad97421fb1fb 1138 gameEtat = ETAT_GAME_PROCESS_INSTRUCTION;//On retourne dans l'etat d'envois de l'instruction
Sitkah 30:a1e37af4bbde 1139 //gameEtat=ETAT_GAME_WAIT_END_INSTRUCTION;
antbig 0:ad97421fb1fb 1140 }
antbig 0:ad97421fb1fb 1141 }
antbig 0:ad97421fb1fb 1142 break;
antbig 0:ad97421fb1fb 1143
antbig 0:ad97421fb1fb 1144 case ETAT_GAME_JUMP_TIME:
antbig 0:ad97421fb1fb 1145 if(cartesCheker.read_ms () >= instruction.JumpTimeOrX) {
antbig 0:ad97421fb1fb 1146 cartesCheker.stop();//On arrete le timer
antbig 0:ad97421fb1fb 1147 actual_instruction = instruction.nextLineOK;//On indique que l'on va charger l'instruction suivante
antbig 0:ad97421fb1fb 1148 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;//On charge l'instruction suivante
antbig 0:ad97421fb1fb 1149 }
antbig 0:ad97421fb1fb 1150 break;
ClementBreteau 15:c2fc239e85df 1151
ClementBreteau 15:c2fc239e85df 1152 case ETAT_GAME_JUMP_CONFIG:
ClementBreteau 15:c2fc239e85df 1153 signed int depasX = 1, depasY = 1; // servent à indiquer le sens de dépassement des coordonnées
ClementBreteau 15:c2fc239e85df 1154 // 1 si l'instruction est plus grande que la position du robot
ClementBreteau 15:c2fc239e85df 1155 // -1 si l'instruction est plus petite que la position du robot
ClementBreteau 15:c2fc239e85df 1156 // 0 si l'instruction et position du robot sont proche de moins de 1cm
ClementBreteau 15:c2fc239e85df 1157 if (abs(x_robot-instruction.JumpTimeOrX)<10){
ClementBreteau 15:c2fc239e85df 1158 depasX = 0;
ClementBreteau 15:c2fc239e85df 1159 }else if(x_robot > instruction.JumpTimeOrX){
ClementBreteau 15:c2fc239e85df 1160 depasX = -1;
ClementBreteau 15:c2fc239e85df 1161 }
ClementBreteau 15:c2fc239e85df 1162
ClementBreteau 15:c2fc239e85df 1163 if(abs(y_robot-instruction.JumpY)<10){
ClementBreteau 15:c2fc239e85df 1164 depasY = 0;
ClementBreteau 15:c2fc239e85df 1165 }else if(y_robot > instruction.JumpY){
ClementBreteau 15:c2fc239e85df 1166 depasY = -1;
ClementBreteau 15:c2fc239e85df 1167 }
ClementBreteau 15:c2fc239e85df 1168
ClementBreteau 15:c2fc239e85df 1169 gameEtat = ETAT_GAME_JUMP_POSITION;
ClementBreteau 15:c2fc239e85df 1170 break;
antbig 0:ad97421fb1fb 1171 case ETAT_GAME_JUMP_POSITION:
ClementBreteau 15:c2fc239e85df 1172 bool Xok = false, Yok = false;
ClementBreteau 15:c2fc239e85df 1173
ClementBreteau 15:c2fc239e85df 1174 if (depasX == 0){
ClementBreteau 15:c2fc239e85df 1175 Xok = true;
ClementBreteau 15:c2fc239e85df 1176 }else if ((instruction.JumpTimeOrX - x_robot)*depasX < -5){
ClementBreteau 15:c2fc239e85df 1177 Xok = true;
ClementBreteau 15:c2fc239e85df 1178 }
ClementBreteau 15:c2fc239e85df 1179
ClementBreteau 15:c2fc239e85df 1180 if (depasY == 0){
ClementBreteau 15:c2fc239e85df 1181 Yok = true;
ClementBreteau 15:c2fc239e85df 1182 }else if ((instruction.JumpY - y_robot)*depasY < -5){
ClementBreteau 15:c2fc239e85df 1183 Yok = true;
ClementBreteau 15:c2fc239e85df 1184 }
ClementBreteau 15:c2fc239e85df 1185
ClementBreteau 15:c2fc239e85df 1186 // on teste si les deux coordonnées ont été dépassées, si oui on lance l'instruction suivante
ClementBreteau 15:c2fc239e85df 1187 if (Xok && Yok){
ClementBreteau 15:c2fc239e85df 1188 actual_instruction = instruction.nextLineOK;//On indique que l'on va charger l'instruction suivante
ClementBreteau 15:c2fc239e85df 1189 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;//On charge l'instruction suivante
ClementBreteau 15:c2fc239e85df 1190 }
ClementBreteau 15:c2fc239e85df 1191
antbig 0:ad97421fb1fb 1192 break;
antbig 0:ad97421fb1fb 1193 case ETAT_GAME_WAIT_END_INSTRUCTION:
Sitkah 30:a1e37af4bbde 1194 canProcessRx();
antbig 0:ad97421fb1fb 1195 if(waitingAckID == 0 && waitingAckFrom ==0) {//On attend que la carte nous indique que l'instruction est terminée
antbig 0:ad97421fb1fb 1196 actual_instruction = instruction.nextLineOK;//On indique que l'on va charger l'instruction suivante
antbig 0:ad97421fb1fb 1197 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;//On charge l'instruction suivante
antbig 0:ad97421fb1fb 1198 }
antbig 0:ad97421fb1fb 1199 break;
antbig 0:ad97421fb1fb 1200
antbig 0:ad97421fb1fb 1201
antbig 5:dcd817534b57 1202 case ETAT_WARNING_TIMEOUT://Attente de la trame fin de danger ou du timeout de 2s
antbig 12:14729d584500 1203 if(timeoutWarning.read_ms() >= BALISE_TIMEOUT)//ça fait plus de 2s, il faut changer de stratégie
antbig 5:dcd817534b57 1204 {
antbig 5:dcd817534b57 1205 gameEtat = ETAT_WARNING_SWITCH_STRATEGIE;
antbig 5:dcd817534b57 1206 }
antbig 5:dcd817534b57 1207 break;
antbig 5:dcd817534b57 1208 case ETAT_WARING_END_BALISE_WAIT://Attente d'une seconde apres la fin d'un End Balise pour etre sur que c'est bon
antbig 12:14729d584500 1209 if(timeoutWarningWaitEnd.read_ms() >= 1000) {//c'est bon, on repart
antbig 12:14729d584500 1210 //actual_instruction = instruction.nextLineError;
antbig 12:14729d584500 1211 gameEtat = ETAT_WARNING_END_LAST_INSTRUCTION;
antbig 12:14729d584500 1212 }
antbig 5:dcd817534b57 1213 break;
antbig 5:dcd817534b57 1214 case ETAT_WARNING_END_LAST_INSTRUCTION://trouver le meilleur moyen de reprendre l'instruction en cours
ClementBreteau 25:f140c93a8666 1215 /*
antbig 12:14729d584500 1216 #ifdef ROBOT_BIG
ClementBreteau 15:c2fc239e85df 1217 actual_instruction = instruction.nextLineError;// 2 //Modification directe... c'est pas bien mais ça marchait pour le match 5
antbig 12:14729d584500 1218 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
ClementBreteau 20:de595e4ff01d 1219 #else
antbig 12:14729d584500 1220 actual_instruction = instruction.nextLineError;
antbig 12:14729d584500 1221 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
ClementBreteau 20:de595e4ff01d 1222 #endif
ClementBreteau 25:f140c93a8666 1223 gameEtat = ETAT_END;*/
ClementBreteau 21:590cdacb6a35 1224
ClementBreteau 25:f140c93a8666 1225 switch(actionPrecedente){
ClementBreteau 25:f140c93a8666 1226 case MV_LINE:
antbig 27:76ead555a63d 1227
ClementBreteau 25:f140c93a8666 1228 if(instruction.direction == BACKWARD) {
ClementBreteau 25:f140c93a8666 1229 localData1 = -1;
ClementBreteau 25:f140c93a8666 1230 } else {
ClementBreteau 25:f140c93a8666 1231 localData1 = 1;
ClementBreteau 25:f140c93a8666 1232 }
antbig 27:76ead555a63d 1233
ClementBreteau 25:f140c93a8666 1234 GoToPosition(target_x_robot,target_y_robot,target_theta_robot,localData1);
antbig 27:76ead555a63d 1235 debugXYTTarget(target_x_robot,target_y_robot,target_theta_robot);
antbig 27:76ead555a63d 1236 waitingAckID = ASSERVISSEMENT_XYT;
antbig 27:76ead555a63d 1237 waitingAckFrom = ACKNOWLEDGE_MOTEUR;
antbig 27:76ead555a63d 1238 gameEtat = ETAT_GAME_WAIT_ACK;
antbig 27:76ead555a63d 1239 instruction.order = MV_XYT;
antbig 28:acd18776ed2d 1240 instruction.arg1 = target_x_robot;
antbig 28:acd18776ed2d 1241 instruction.arg2 = target_y_robot;
antbig 28:acd18776ed2d 1242 instruction.arg3 = target_theta_robot;
antbig 28:acd18776ed2d 1243 instruction.direction = (localData1)?FORWARD:BACKWARD;
antbig 28:acd18776ed2d 1244 ingnorInversionOnce = 1;//Pour éviter que l'ago recalcul l'inversion
antbig 27:76ead555a63d 1245 return;
ClementBreteau 25:f140c93a8666 1246
ClementBreteau 25:f140c93a8666 1247 case MV_XYT:
antbig 27:76ead555a63d 1248 gameEtat = ETAT_GAME_PROCESS_INSTRUCTION;
ClementBreteau 25:f140c93a8666 1249 break;
ClementBreteau 25:f140c93a8666 1250
ClementBreteau 26:2f4fcc2354f3 1251 case MV_COURBURE:
antbig 28:acd18776ed2d 1252 //target_theta_robot = theta_robot - target_theta_robot;
antbig 28:acd18776ed2d 1253 //instruction.arg3 = instruction.arg3 - target_theta_robot;
ClementBreteau 26:2f4fcc2354f3 1254 if(instruction.direction == LEFT){
ClementBreteau 26:2f4fcc2354f3 1255 target_theta_robot = target_theta_robot - theta_robot;
ClementBreteau 26:2f4fcc2354f3 1256 }else{
antbig 28:acd18776ed2d 1257 target_theta_robot = theta_robot + target_theta_robot;
antbig 28:acd18776ed2d 1258 }
antbig 28:acd18776ed2d 1259
antbig 28:acd18776ed2d 1260
antbig 28:acd18776ed2d 1261 target_theta_robot = (target_theta_robot)%3600;
antbig 28:acd18776ed2d 1262 if(target_theta_robot > 1800) {
antbig 28:acd18776ed2d 1263 target_theta_robot = target_theta_robot-3600;
antbig 28:acd18776ed2d 1264 }
antbig 28:acd18776ed2d 1265 if(InversStrat == 1) {
antbig 28:acd18776ed2d 1266 target_theta_robot = -target_theta_robot;
antbig 28:acd18776ed2d 1267 }
antbig 28:acd18776ed2d 1268 instruction.arg3 = target_theta_robot;
antbig 28:acd18776ed2d 1269
antbig 28:acd18776ed2d 1270
antbig 28:acd18776ed2d 1271 gameEtat = ETAT_GAME_PROCESS_INSTRUCTION;
antbig 28:acd18776ed2d 1272
ClementBreteau 25:f140c93a8666 1273 break;
antbig 27:76ead555a63d 1274 default:
antbig 27:76ead555a63d 1275 actual_instruction = instruction.nextLineOK;//On indique que l'on va charger l'instruction suivante
antbig 27:76ead555a63d 1276 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
antbig 27:76ead555a63d 1277 break;
ClementBreteau 25:f140c93a8666 1278 }
ClementBreteau 25:f140c93a8666 1279
antbig 27:76ead555a63d 1280 //actual_instruction = instruction.nextLineOK;//On indique que l'on va charger l'instruction suivante
antbig 27:76ead555a63d 1281 //gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
antbig 5:dcd817534b57 1282 break;
antbig 5:dcd817534b57 1283 case ETAT_WARNING_SWITCH_STRATEGIE://Si à la fin du timeout il y a toujours un robot, passer à l'instruction d'erreur
antbig 5:dcd817534b57 1284 actual_instruction = instruction.nextLineError;
antbig 5:dcd817534b57 1285 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
antbig 12:14729d584500 1286 ingnorBaliseOnce = 1;
antbig 5:dcd817534b57 1287 break;
ClementBreteau 20:de595e4ff01d 1288
ClementBreteau 20:de595e4ff01d 1289
ClementBreteau 20:de595e4ff01d 1290
ClementBreteau 14:c8fc06c4887f 1291 case ETAT_END:
ClementBreteau 14:c8fc06c4887f 1292 if (ModeDemo){
ClementBreteau 14:c8fc06c4887f 1293 gameEtat = ETAT_CHECK_CARTE_SCREEN;
ClementBreteau 14:c8fc06c4887f 1294 ModeDemo = 1;
ClementBreteau 14:c8fc06c4887f 1295 } else {
ClementBreteau 14:c8fc06c4887f 1296 gameEtat = ETAT_END_LOOP;
ClementBreteau 14:c8fc06c4887f 1297 }
antbig 0:ad97421fb1fb 1298 break;
antbig 0:ad97421fb1fb 1299 case ETAT_END_LOOP:
antbig 0:ad97421fb1fb 1300 //Rien, on tourne en rond
ClementBreteau 18:cc5fec34ed9c 1301
antbig 0:ad97421fb1fb 1302 break;
antbig 0:ad97421fb1fb 1303 default:
ClementBreteau 20:de595e4ff01d 1304
antbig 0:ad97421fb1fb 1305 break;
ClementBreteau 20:de595e4ff01d 1306 }
Sitkah 29:41e02746041d 1307 }
Sitkah 29:41e02746041d 1308
Sitkah 29:41e02746041d 1309
Sitkah 29:41e02746041d 1310
Sitkah 29:41e02746041d 1311
Sitkah 29:41e02746041d 1312
antbig 4:88431b537477 1313 /****************************************************************************************/
antbig 4:88431b537477 1314 /* FUNCTION NAME: canProcessRx */
Sitkah 29:41e02746041d 1315 /* DESCRIPTION : Fait évoluer l'automate de l'IHM en fonction des receptions sur le CAN*/
antbig 4:88431b537477 1316 /****************************************************************************************/
antbig 0:ad97421fb1fb 1317 void canProcessRx(void)
Sitkah 29:41e02746041d 1318 {
antbig 0:ad97421fb1fb 1319 static signed char FIFO_occupation=0,FIFO_max_occupation=0;
Sitkah 29:41e02746041d 1320 char useless1 = 0;
Sitkah 29:41e02746041d 1321
antbig 0:ad97421fb1fb 1322 FIFO_occupation=FIFO_ecriture-FIFO_lecture;
antbig 0:ad97421fb1fb 1323 if(FIFO_occupation<0)
antbig 0:ad97421fb1fb 1324 FIFO_occupation=FIFO_occupation+SIZE_FIFO;
antbig 0:ad97421fb1fb 1325 if(FIFO_max_occupation<FIFO_occupation)
antbig 0:ad97421fb1fb 1326 FIFO_max_occupation=FIFO_occupation;
antbig 0:ad97421fb1fb 1327 if(FIFO_occupation!=0) {
Sitkah 29:41e02746041d 1328 int identifiant=msgRxBuffer[FIFO_lecture].id;
Sitkah 29:41e02746041d 1329 switch(identifiant) {
Sitkah 29:41e02746041d 1330
Sitkah 29:41e02746041d 1331 case ALIVE_MOTEUR:
Sitkah 29:41e02746041d 1332 if (etat == ATT) {
Sitkah 29:41e02746041d 1333
Sitkah 29:41e02746041d 1334 lcd.SetTextColor(LCD_COLOR_LIGHTGREEN);
Sitkah 29:41e02746041d 1335 lcd.FillRect(0,75,400,150); //carte moteur
Sitkah 29:41e02746041d 1336 lcd.SetTextColor(LCD_COLOR_BLACK);
Sitkah 29:41e02746041d 1337 lcd.SetBackColor(LCD_COLOR_LIGHTGREEN);
Sitkah 29:41e02746041d 1338 lcd.DisplayStringAt(80, 135, (uint8_t *)"Carte Moteur", LEFT_MODE);
Sitkah 29:41e02746041d 1339 }
Sitkah 29:41e02746041d 1340 break;
Sitkah 29:41e02746041d 1341
Sitkah 29:41e02746041d 1342 case ALIVE_BALISE:
Sitkah 29:41e02746041d 1343 if (etat == ATT) {
Sitkah 29:41e02746041d 1344
Sitkah 29:41e02746041d 1345 lcd.SetTextColor(LCD_COLOR_LIGHTGREEN);
Sitkah 29:41e02746041d 1346 lcd.FillRect(0,250,400,150); //carte AX12
Sitkah 29:41e02746041d 1347 lcd.SetTextColor(LCD_COLOR_BLACK);
Sitkah 29:41e02746041d 1348 lcd.SetBackColor(LCD_COLOR_LIGHTGREEN);
Sitkah 29:41e02746041d 1349 lcd.DisplayStringAt(110, 310, (uint8_t *)"Balise", LEFT_MODE);
Sitkah 29:41e02746041d 1350 }
Sitkah 29:41e02746041d 1351 break;
Sitkah 29:41e02746041d 1352
Sitkah 29:41e02746041d 1353 case RESET_IHM:
Sitkah 29:41e02746041d 1354 etat = CHOIX;
Sitkah 29:41e02746041d 1355 break;
Sitkah 29:41e02746041d 1356
antbig 4:88431b537477 1357 case DEBUG_FAKE_JAKE://Permet de lancer le match à distance
ClementBreteau 23:ab87d308eaf9 1358 case GLOBAL_JACK:
antbig 1:116040d14164 1359 if(gameEtat == ETAT_GAME_WAIT_FOR_JACK) {
antbig 1:116040d14164 1360 gameEtat = ETAT_GAME_START;
ClementBreteau 23:ab87d308eaf9 1361 SendRawId(ACKNOWLEDGE_JACK);
antbig 1:116040d14164 1362 }
antbig 1:116040d14164 1363 break;
antbig 1:116040d14164 1364
Sitkah 30:a1e37af4bbde 1365 case ALIVE_ACTIONNEURS_AVANT: //pas de break donc passe directement dans ECRAN_ALL_CHECK mais conserve l'ident initial
ClementBreteau 23:ab87d308eaf9 1366 case ALIVE_ACTIONNEURS_ARRIERE:
Sitkah 30:a1e37af4bbde 1367 case ALIVE_HERKULEX:
antbig 0:ad97421fb1fb 1368 case ECRAN_ALL_CHECK:
antbig 0:ad97421fb1fb 1369 if(waitingAckFrom == msgRxBuffer[FIFO_lecture].id) {
antbig 0:ad97421fb1fb 1370 waitingAckFrom = 0;//C'est la bonne carte qui indique qu'elle est en ligne
antbig 0:ad97421fb1fb 1371 }
ClementBreteau 15:c2fc239e85df 1372 break;
antbig 0:ad97421fb1fb 1373
Sitkah 30:a1e37af4bbde 1374
Sitkah 30:a1e37af4bbde 1375
Sitkah 30:a1e37af4bbde 1376
Sitkah 30:a1e37af4bbde 1377 /////////////////////////////////////Acknowledges de Reception de la demande d'action////////////////////////////////////////
Sitkah 30:a1e37af4bbde 1378 case ACKNOWLEDGE_HERKULEX:
Sitkah 30:a1e37af4bbde 1379 case ACKNOWLEDGE_BALISE: //pas de break donc passe directement dans INSTRUCTION_END_AX12 mais conserve l'ident initial
antbig 0:ad97421fb1fb 1380 case ACKNOWLEDGE_MOTEUR:
Sitkah 30:a1e37af4bbde 1381 case ACKNOWLEDGE_TELEMETRE:
Sitkah 30:a1e37af4bbde 1382 /////////////////////////////////////////////Acknowledges de la fin d'action/////////////////////////////////////////////////
antbig 0:ad97421fb1fb 1383 case INSTRUCTION_END_BALISE:
antbig 0:ad97421fb1fb 1384 case INSTRUCTION_END_MOTEUR:
Sitkah 30:a1e37af4bbde 1385 case INSTRUCTION_END_HERKULEX:
antbig 11:ed13a480ddca 1386 if(waitingAckFrom == msgRxBuffer[FIFO_lecture].id && ((unsigned short)msgRxBuffer[FIFO_lecture].data[0]|((unsigned short)(msgRxBuffer[FIFO_lecture].data[1])<<8) == waitingAckID)) {
Sitkah 30:a1e37af4bbde 1387 //SendRawId(waitingAckID);
antbig 0:ad97421fb1fb 1388 waitingAckFrom = 0;
Sitkah 30:a1e37af4bbde 1389 waitingAckID = 0;
antbig 0:ad97421fb1fb 1390 }
Sitkah 30:a1e37af4bbde 1391
antbig 0:ad97421fb1fb 1392 break;
antbig 1:116040d14164 1393 #ifdef ROBOT_BIG
antbig 0:ad97421fb1fb 1394 case ODOMETRIE_BIG_POSITION:
antbig 0:ad97421fb1fb 1395 #else
antbig 0:ad97421fb1fb 1396 case ODOMETRIE_SMALL_POSITION:
antbig 0:ad97421fb1fb 1397 #endif
antbig 0:ad97421fb1fb 1398 x_robot=msgRxBuffer[FIFO_lecture].data[0]|((unsigned short)(msgRxBuffer[FIFO_lecture].data[1])<<8);
antbig 0:ad97421fb1fb 1399 y_robot=msgRxBuffer[FIFO_lecture].data[2]|((unsigned short)(msgRxBuffer[FIFO_lecture].data[3])<<8);
antbig 0:ad97421fb1fb 1400 theta_robot=msgRxBuffer[FIFO_lecture].data[4]|((signed short)(msgRxBuffer[FIFO_lecture].data[5])<<8);
antbig 0:ad97421fb1fb 1401 break;
Sitkah 29:41e02746041d 1402
Sitkah 30:a1e37af4bbde 1403 //case SERVO_AX12_SETGOAL:
antbig 9:d0042422d95a 1404 //SendAck(0x114, SERVO_AX12_SETGOAL);
ClementBreteau 14:c8fc06c4887f 1405 //if(AX12_isLocal(msgRxBuffer[FIFO_lecture].data[0]))
ClementBreteau 14:c8fc06c4887f 1406 //AX12_setGoal(msgRxBuffer[FIFO_lecture].data[0], msgRxBuffer[FIFO_lecture].data[1]|((unsigned short)(msgRxBuffer[FIFO_lecture].data[2])<<8), msgRxBuffer[FIFO_lecture].data[3]|((unsigned short)(msgRxBuffer[FIFO_lecture].data[4])<<8));
antbig 5:dcd817534b57 1407
Sitkah 30:a1e37af4bbde 1408 //break;
ClementBreteau 14:c8fc06c4887f 1409
Sitkah 30:a1e37af4bbde 1410 /*case SERVO_AX12_PROCESS:
ClementBreteau 14:c8fc06c4887f 1411 SendAck(0x114, SERVO_AX12_PROCESS);
ClementBreteau 14:c8fc06c4887f 1412 //AX12_processChange(1);
antbig 0:ad97421fb1fb 1413 break;
ClementBreteau 14:c8fc06c4887f 1414
antbig 1:116040d14164 1415 case SERVO_AX12_DONE:
ClementBreteau 15:c2fc239e85df 1416 SendRawId(POMPE_PWM);
Sitkah 30:a1e37af4bbde 1417 //SendAck(0x114, SERVO_AX12_DONE);
antbig 1:116040d14164 1418 AX12_notifyCANEnd(((unsigned short)(msgRxBuffer[FIFO_lecture].data[0])));
ClementBreteau 14:c8fc06c4887f 1419
ClementBreteau 15:c2fc239e85df 1420 gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;
ClementBreteau 14:c8fc06c4887f 1421 waitingAckFrom = 0;
ClementBreteau 14:c8fc06c4887f 1422 waitingAckID = 0;*/
ClementBreteau 14:c8fc06c4887f 1423
Sitkah 30:a1e37af4bbde 1424 //break;
Sitkah 30:a1e37af4bbde 1425 case ACK_ACTION:
Sitkah 30:a1e37af4bbde 1426 if(waitingAckID == msgRxBuffer[FIFO_lecture].id) {
Sitkah 30:a1e37af4bbde 1427 waitingAckFrom = 0;
Sitkah 30:a1e37af4bbde 1428 waitingAckID = 0;
Sitkah 30:a1e37af4bbde 1429 }
Sitkah 30:a1e37af4bbde 1430 break;
Sitkah 30:a1e37af4bbde 1431
ClementBreteau 16:7321fb3bb396 1432 case BALISE_DANGER :
ClementBreteau 16:7321fb3bb396 1433 SendAck(ACKNOWLEDGE_BALISE, BALISE_END_DANGER);
ClementBreteau 16:7321fb3bb396 1434 break;
ClementBreteau 16:7321fb3bb396 1435
antbig 5:dcd817534b57 1436 case BALISE_STOP:
antbig 5:dcd817534b57 1437 SendAck(ACKNOWLEDGE_BALISE, BALISE_STOP);
antbig 28:acd18776ed2d 1438 if (instruction.order != MV_TURN && instruction.order != ACTION ){ //J'ai rajouté cette ligne mais il faut tester avec et sans pour voir le comportement du robot,
ClementBreteau 16:7321fb3bb396 1439 if(needToStop() != 0 && ingnorBaliseOnce ==0) {
ClementBreteau 16:7321fb3bb396 1440 if(gameEtat > ETAT_GAME_START && gameEtat != ETAT_WARNING_TIMEOUT)
ClementBreteau 16:7321fb3bb396 1441 {
ClementBreteau 16:7321fb3bb396 1442 SendRawId(ASSERVISSEMENT_STOP);
ClementBreteau 26:2f4fcc2354f3 1443 //while(1); // ligne à décommenter si on est en homologation
ClementBreteau 16:7321fb3bb396 1444 if(gameEtat != ETAT_WARING_END_BALISE_WAIT) {
ClementBreteau 16:7321fb3bb396 1445 timeoutWarning.reset();
ClementBreteau 16:7321fb3bb396 1446 timeoutWarning.start();//Reset du timer utiliser par le timeout
ClementBreteau 16:7321fb3bb396 1447 }
antbig 27:76ead555a63d 1448 gameEtat = ETAT_WARNING_TIMEOUT;
antbig 12:14729d584500 1449 }
antbig 12:14729d584500 1450 }
antbig 28:acd18776ed2d 1451 }
antbig 12:14729d584500 1452 ingnorBaliseOnce = 0;
antbig 5:dcd817534b57 1453 break;
ClementBreteau 16:7321fb3bb396 1454
antbig 5:dcd817534b57 1455 case BALISE_END_DANGER:
ClementBreteau 16:7321fb3bb396 1456 SendAck(ACKNOWLEDGE_BALISE, BALISE_END_DANGER);
antbig 5:dcd817534b57 1457 if(gameEtat == ETAT_WARNING_TIMEOUT) {
antbig 5:dcd817534b57 1458 timeoutWarningWaitEnd.reset();
antbig 5:dcd817534b57 1459 timeoutWarningWaitEnd.start();
antbig 5:dcd817534b57 1460 gameEtat = ETAT_WARING_END_BALISE_WAIT;
antbig 5:dcd817534b57 1461 }
antbig 5:dcd817534b57 1462 break;
antbig 12:14729d584500 1463
ClementBreteau 14:c8fc06c4887f 1464 case OBJET_SUR_TABLE:
ClementBreteau 15:c2fc239e85df 1465 if (msgRxBuffer[FIFO_lecture].data[1] == 0xff){
ClementBreteau 15:c2fc239e85df 1466
ClementBreteau 15:c2fc239e85df 1467 gameEtat = ETAT_WARNING_END_LAST_INSTRUCTION;
ClementBreteau 15:c2fc239e85df 1468 }
ClementBreteau 15:c2fc239e85df 1469 else{
ClementBreteau 15:c2fc239e85df 1470
ClementBreteau 15:c2fc239e85df 1471 waitingAckFrom = 0;
ClementBreteau 15:c2fc239e85df 1472 waitingAckID = 0;
ClementBreteau 15:c2fc239e85df 1473
ClementBreteau 15:c2fc239e85df 1474 strat_instructions[actual_instruction+1].arg1 = returnX(strat_instructions[actual_instruction].arg2);
ClementBreteau 15:c2fc239e85df 1475 strat_instructions[actual_instruction+1].arg2 = returnY(strat_instructions[actual_instruction].arg2);
ClementBreteau 15:c2fc239e85df 1476 }
ClementBreteau 15:c2fc239e85df 1477 modeTelemetre = 0;
ClementBreteau 14:c8fc06c4887f 1478 break;
Sitkah 29:41e02746041d 1479
Sitkah 30:a1e37af4bbde 1480 case RECEPTION_DATA:
Sitkah 30:a1e37af4bbde 1481 telemetreDistance=char_to_short_transformation(msgRxBuffer[FIFO_lecture].data[0], msgRxBuffer[FIFO_lecture].data[1]);
Sitkah 30:a1e37af4bbde 1482 telemetreDistance= (float)telemetreDistance*100*35.5+50;
Sitkah 30:a1e37af4bbde 1483 waitingAckFrom = 0;
Sitkah 30:a1e37af4bbde 1484 waitingAckID = 0;
Sitkah 30:a1e37af4bbde 1485 break;
Sitkah 30:a1e37af4bbde 1486
Sitkah 30:a1e37af4bbde 1487 case RECEPTION_RECALAGE: // BEURK
Sitkah 30:a1e37af4bbde 1488 telemetreDistance=char_to_short_transformation(msgRxBuffer[FIFO_lecture].data[0], msgRxBuffer[FIFO_lecture].data[1]);
Sitkah 30:a1e37af4bbde 1489 telemetreDistance1=char_to_short_transformation(msgRxBuffer[FIFO_lecture].data[2], msgRxBuffer[FIFO_lecture].data[3]);
Sitkah 30:a1e37af4bbde 1490 telemetreDistance2=char_to_short_transformation(msgRxBuffer[FIFO_lecture].data[4], msgRxBuffer[FIFO_lecture].data[5]);
Sitkah 30:a1e37af4bbde 1491 telemetreDistance3=char_to_short_transformation(msgRxBuffer[FIFO_lecture].data[6], msgRxBuffer[FIFO_lecture].data[7]);
Sitkah 30:a1e37af4bbde 1492 /*telemetreDistance= (float)telemetreDistance*3.3*1159.6-687.5+98;
Sitkah 30:a1e37af4bbde 1493 telemetreDistance1= (float)telemetreDistance1*3.3*1159.6-687.5+98;
Sitkah 30:a1e37af4bbde 1494 telemetreDistance2= (float)telemetreDistance2*3.3*1159.6-687.5+98;
Sitkah 30:a1e37af4bbde 1495 telemetreDistance3= (float)telemetreDistance3*3.3*1159.6-687.5+98;
Sitkah 30:a1e37af4bbde 1496 telemetreDistance-=170;
Sitkah 30:a1e37af4bbde 1497 telemetreDistance1-=170;
Sitkah 30:a1e37af4bbde 1498 telemetreDistance2-=170;
Sitkah 30:a1e37af4bbde 1499 telemetreDistance3-=170;*/
Sitkah 30:a1e37af4bbde 1500
Sitkah 30:a1e37af4bbde 1501 /*telemetreDistance= (float)telemetreDistance*100*35.5+50;
Sitkah 30:a1e37af4bbde 1502 telemetreDistance1= (float)telemetreDistance1*100*35.5+50;
Sitkah 30:a1e37af4bbde 1503 telemetreDistance2= (float)telemetreDistance2*100*35.5+50;
Sitkah 30:a1e37af4bbde 1504 telemetreDistance3= (float)telemetreDistance3*100*35.5+50;*/
Sitkah 30:a1e37af4bbde 1505
Sitkah 30:a1e37af4bbde 1506
Sitkah 30:a1e37af4bbde 1507 waitingAckFrom = 0;
Sitkah 30:a1e37af4bbde 1508 waitingAckID = 0;
Sitkah 30:a1e37af4bbde 1509 break;
Sitkah 29:41e02746041d 1510
Sitkah 30:a1e37af4bbde 1511 case RECEPTION_COULEUR:
Sitkah 30:a1e37af4bbde 1512 couleur1=msgRxBuffer[FIFO_lecture].data[0];
Sitkah 30:a1e37af4bbde 1513 couleur2=msgRxBuffer[FIFO_lecture].data[1];
Sitkah 30:a1e37af4bbde 1514 couleur3=msgRxBuffer[FIFO_lecture].data[2];
Sitkah 30:a1e37af4bbde 1515 break;
Sitkah 30:a1e37af4bbde 1516
Sitkah 29:41e02746041d 1517 }
antbig 0:ad97421fb1fb 1518 FIFO_lecture=(FIFO_lecture+1)%SIZE_FIFO;
antbig 0:ad97421fb1fb 1519 }
antbig 0:ad97421fb1fb 1520 }
Sitkah 29:41e02746041d 1521
Sitkah 29:41e02746041d 1522
Sitkah 29:41e02746041d 1523
Sitkah 29:41e02746041d 1524
Sitkah 29:41e02746041d 1525
Sitkah 29:41e02746041d 1526 /****************************************************************************************/
Sitkah 29:41e02746041d 1527 /* FUNCTION NAME: Bouton_Strat */
Sitkah 29:41e02746041d 1528 /* DESCRIPTION : Sélection de la strat sur le lcd puis envoie sur CAN (à modifier!) */
Sitkah 29:41e02746041d 1529 /****************************************************************************************/
Sitkah 29:41e02746041d 1530 signed char Bouton_Strat (void)
Sitkah 29:41e02746041d 1531 {
Sitkah 29:41e02746041d 1532 Button STRAT_1 (0, 30, 190, 110, strat_sd[0]);
Sitkah 29:41e02746041d 1533 Button STRAT_2 (210, 30, 190, 110, strat_sd[1]);
Sitkah 29:41e02746041d 1534 Button STRAT_3 (0, 150, 190, 110, strat_sd[2]);
Sitkah 29:41e02746041d 1535 Button STRAT_4 (210, 150, 190, 110, strat_sd[3]);
Sitkah 29:41e02746041d 1536 Button STRAT_5 (0, 270, 190, 110,strat_sd[4]);
Sitkah 29:41e02746041d 1537 Button STRAT_6 (210, 270, 190, 110, strat_sd[5]);
Sitkah 29:41e02746041d 1538 Button STRAT_7 (0, 390, 190, 110, strat_sd[6]);
Sitkah 29:41e02746041d 1539 Button STRAT_8 (210, 390, 190, 110, strat_sd[7]);
Sitkah 29:41e02746041d 1540 Button STRAT_9 (0, 510, 190, 110, strat_sd[8]);
Sitkah 29:41e02746041d 1541 Button STRAT_10 (210, 510, 190, 110, strat_sd[9]);
Sitkah 29:41e02746041d 1542 Button RETOUR (0, 680, 400, 110, "--Precedent--");
Sitkah 29:41e02746041d 1543 //Definition des boutons
Sitkah 29:41e02746041d 1544
Sitkah 29:41e02746041d 1545 Ack_strat = 0;
Sitkah 29:41e02746041d 1546 Strat = 0;
Sitkah 29:41e02746041d 1547 STRAT_1.Draw(0xFFF0F0F0, 0);
Sitkah 29:41e02746041d 1548 STRAT_2.Draw(0xFFF0F0F0, 0);
Sitkah 29:41e02746041d 1549 STRAT_3.Draw(0xFFF0F0F0, 0);
Sitkah 29:41e02746041d 1550 STRAT_4.Draw(0xFFF0F0F0, 0);
Sitkah 29:41e02746041d 1551 STRAT_5.Draw(0xFFF0F0F0, 0);
Sitkah 29:41e02746041d 1552 STRAT_6.Draw(0xFFF0F0F0, 0);
Sitkah 29:41e02746041d 1553 STRAT_7.Draw(0xFFF0F0F0, 0);
Sitkah 29:41e02746041d 1554 STRAT_8.Draw(0xFFF0F0F0, 0);
Sitkah 29:41e02746041d 1555 STRAT_9.Draw(0xFFF0F0F0, 0);
Sitkah 29:41e02746041d 1556 STRAT_10.Draw(0xFFF0F0F0, 0);
Sitkah 29:41e02746041d 1557 RETOUR.Draw(0xFFFF0000, 0);
Sitkah 29:41e02746041d 1558
Sitkah 29:41e02746041d 1559 while(Ack_strat == 0)
Sitkah 29:41e02746041d 1560 {
Sitkah 29:41e02746041d 1561 canProcessRx();
Sitkah 29:41e02746041d 1562 CANMessage msgTx=CANMessage();
Sitkah 30:a1e37af4bbde 1563 //msgTx.id=ECRAN_CHOICE_STRAT;
Sitkah 29:41e02746041d 1564 if (RETOUR.Touched())
Sitkah 29:41e02746041d 1565 return -1;
Sitkah 29:41e02746041d 1566 while(RETOUR.Touched());
Sitkah 29:41e02746041d 1567 //////////////////////////////STRATEGIE N°1
Sitkah 29:41e02746041d 1568 if (STRAT_1.Touched()){
Sitkah 29:41e02746041d 1569 Strat = 0;
Sitkah 30:a1e37af4bbde 1570 //msgTx.data[0] = 0x1;
Sitkah 30:a1e37af4bbde 1571 //can2.write(msgTx);
Sitkah 29:41e02746041d 1572 while(STRAT_1.Touched());
Sitkah 29:41e02746041d 1573 Ack_strat =1;
Sitkah 29:41e02746041d 1574 }
Sitkah 29:41e02746041d 1575 /////////////////////////////STRATEGIE N°2
Sitkah 29:41e02746041d 1576 if (STRAT_2.Touched()){
Sitkah 29:41e02746041d 1577 Strat = 1;
Sitkah 30:a1e37af4bbde 1578 //msgTx.data[0] = 0x2;
Sitkah 30:a1e37af4bbde 1579 //can2.write(msgTx);
Sitkah 29:41e02746041d 1580 while(STRAT_2.Touched());
Sitkah 29:41e02746041d 1581 Ack_strat =1;
Sitkah 29:41e02746041d 1582 }
Sitkah 29:41e02746041d 1583 //////////////////////////////STRATEGIE N°3
Sitkah 29:41e02746041d 1584 if (STRAT_3.Touched()){
Sitkah 29:41e02746041d 1585 Strat = 2;
Sitkah 30:a1e37af4bbde 1586 //msgTx.data[0] = 0x3;
Sitkah 30:a1e37af4bbde 1587 //can2.write(msgTx);
Sitkah 29:41e02746041d 1588 while(STRAT_3.Touched());
Sitkah 29:41e02746041d 1589 Ack_strat =1;
Sitkah 29:41e02746041d 1590 }
Sitkah 29:41e02746041d 1591 /////////////////////////////STRATEGIE N°4
Sitkah 29:41e02746041d 1592 if (STRAT_4.Touched()){
Sitkah 29:41e02746041d 1593 Strat = 3;
Sitkah 30:a1e37af4bbde 1594 //msgTx.data[0] = 0x4;
Sitkah 30:a1e37af4bbde 1595 //can2.write(msgTx);
Sitkah 29:41e02746041d 1596 while(STRAT_4.Touched());
Sitkah 29:41e02746041d 1597 Ack_strat =1;
Sitkah 29:41e02746041d 1598 }
Sitkah 29:41e02746041d 1599 ///////////////////////////////STRATEGIE N°5
Sitkah 29:41e02746041d 1600 if (STRAT_5.Touched()){
Sitkah 29:41e02746041d 1601 Strat = 4;
Sitkah 30:a1e37af4bbde 1602 //msgTx.data[0] = 0x5;
Sitkah 30:a1e37af4bbde 1603 //can2.write(msgTx);
Sitkah 29:41e02746041d 1604 while(STRAT_5.Touched());
Sitkah 29:41e02746041d 1605 Ack_strat =1;
Sitkah 29:41e02746041d 1606 }
Sitkah 29:41e02746041d 1607 ////////////////////////////////STRATEGIE N°6
Sitkah 29:41e02746041d 1608 if (STRAT_6.Touched()){
Sitkah 29:41e02746041d 1609 Strat = 5;
Sitkah 30:a1e37af4bbde 1610 //msgTx.data[0] = 0x6;
Sitkah 30:a1e37af4bbde 1611 //can2.write(msgTx);
Sitkah 29:41e02746041d 1612 while(STRAT_6.Touched());
Sitkah 29:41e02746041d 1613 Ack_strat =1;
Sitkah 29:41e02746041d 1614 }
Sitkah 29:41e02746041d 1615 /////////////////////////////////STRATEGIE N°7
Sitkah 29:41e02746041d 1616 if (STRAT_7.Touched()){
Sitkah 29:41e02746041d 1617 Strat = 6;
Sitkah 30:a1e37af4bbde 1618 //msgTx.data[0] = 0x7;
Sitkah 30:a1e37af4bbde 1619 //can2.write(msgTx);
Sitkah 29:41e02746041d 1620 while(STRAT_7.Touched());
Sitkah 29:41e02746041d 1621 Ack_strat =1;
Sitkah 29:41e02746041d 1622 }
Sitkah 29:41e02746041d 1623 /////////////////////////////////STRATEGIE N°8
Sitkah 29:41e02746041d 1624 if (STRAT_8.Touched()){
Sitkah 29:41e02746041d 1625 Strat = 7;
Sitkah 30:a1e37af4bbde 1626 //msgTx.data[0] = 0x8;
Sitkah 30:a1e37af4bbde 1627 //can2.write(msgTx);
Sitkah 29:41e02746041d 1628 while(STRAT_8.Touched());
Sitkah 29:41e02746041d 1629 Ack_strat =1;
Sitkah 29:41e02746041d 1630 }
Sitkah 29:41e02746041d 1631 /////////////////////////////////STRATEGIE N°9
Sitkah 29:41e02746041d 1632 if (STRAT_9.Touched()){
Sitkah 29:41e02746041d 1633 Strat = 8;
Sitkah 30:a1e37af4bbde 1634 //msgTx.data[0] = 0x9;
Sitkah 30:a1e37af4bbde 1635 //can2.write(msgTx);
Sitkah 29:41e02746041d 1636 while(STRAT_9.Touched());
Sitkah 29:41e02746041d 1637 Ack_strat =1;
Sitkah 29:41e02746041d 1638 }
Sitkah 29:41e02746041d 1639 ///////////////////////////////////STRATEGIE N°10
Sitkah 29:41e02746041d 1640 if (STRAT_10.Touched()){
Sitkah 29:41e02746041d 1641 Strat = 9;
Sitkah 30:a1e37af4bbde 1642 //msgTx.data[0] = 0xA;
Sitkah 30:a1e37af4bbde 1643 //can2.write(msgTx);
Sitkah 29:41e02746041d 1644 while(STRAT_10.Touched());
Sitkah 29:41e02746041d 1645 Ack_strat =1;
Sitkah 29:41e02746041d 1646 }
Sitkah 29:41e02746041d 1647
Sitkah 29:41e02746041d 1648 }
Sitkah 29:41e02746041d 1649 return Strat;
Sitkah 29:41e02746041d 1650
Sitkah 29:41e02746041d 1651 }
Sitkah 29:41e02746041d 1652
Sitkah 29:41e02746041d 1653 void affichage_compteur (int nombre)
Sitkah 29:41e02746041d 1654 {
Sitkah 29:41e02746041d 1655 int dizaine=0,unite=0;
Sitkah 29:41e02746041d 1656 dizaine = nombre/10;
Sitkah 29:41e02746041d 1657 unite = nombre-(10*dizaine);
Sitkah 29:41e02746041d 1658 print_segment(unite,0);
Sitkah 29:41e02746041d 1659 print_segment(dizaine,200);
Sitkah 29:41e02746041d 1660
Sitkah 29:41e02746041d 1661 }
Sitkah 29:41e02746041d 1662
Sitkah 29:41e02746041d 1663
Sitkah 29:41e02746041d 1664 //****print_segment***
Sitkah 29:41e02746041d 1665 //Dessine en 7 segment le nombre en parametre
Sitkah 29:41e02746041d 1666 // A
Sitkah 29:41e02746041d 1667 // =====
Sitkah 29:41e02746041d 1668 // | |
Sitkah 29:41e02746041d 1669 // B | G | E
Sitkah 29:41e02746041d 1670 // |=====|
Sitkah 29:41e02746041d 1671 // C | | F
Sitkah 29:41e02746041d 1672 // | |
Sitkah 29:41e02746041d 1673 // =====
Sitkah 29:41e02746041d 1674 // D
Sitkah 29:41e02746041d 1675 /*
Sitkah 29:41e02746041d 1676 position pour le chiffre des unites
Sitkah 29:41e02746041d 1677 lcd.FillRect(460,75,120,25);// A
Sitkah 29:41e02746041d 1678 lcd.FillRect(435,100,25,120);// B
Sitkah 29:41e02746041d 1679 lcd.FillRect(435,245,25,120);// C
Sitkah 29:41e02746041d 1680 lcd.FillRect(460,365,120,25);// D
Sitkah 29:41e02746041d 1681 lcd.FillRect(580,100,25,120);// E
Sitkah 29:41e02746041d 1682 lcd.FillRect(580,245,25,120);// F
Sitkah 29:41e02746041d 1683 lcd.FillRect(460,220,120,25);// G
Sitkah 29:41e02746041d 1684
Sitkah 29:41e02746041d 1685 position pour le chiffre des dizaines
Sitkah 29:41e02746041d 1686 lcd.FillRect(260,75,120,25);// A
Sitkah 29:41e02746041d 1687 lcd.FillRect(235,100,25,120);// B
Sitkah 29:41e02746041d 1688 lcd.FillRect(235,245,25,120);// C
Sitkah 29:41e02746041d 1689 lcd.FillRect(260,365,120,25);// D
Sitkah 29:41e02746041d 1690 lcd.FillRect(380,100,25,120);// E
Sitkah 29:41e02746041d 1691 lcd.FillRect(380,245,25,120);// F
Sitkah 29:41e02746041d 1692 lcd.FillRect(260,220,120,25);// G
Sitkah 29:41e02746041d 1693 */
Sitkah 29:41e02746041d 1694
Sitkah 29:41e02746041d 1695 void print_segment(int nombre, int decalage)
Sitkah 29:41e02746041d 1696 {
Sitkah 29:41e02746041d 1697 switch(nombre)
Sitkah 29:41e02746041d 1698 {
Sitkah 29:41e02746041d 1699 case 0:
Sitkah 29:41e02746041d 1700 lcd.FillRect(240-decalage,75,120,25);
Sitkah 29:41e02746041d 1701 lcd.FillRect(215-decalage,100,25,120);
Sitkah 29:41e02746041d 1702 lcd.FillRect(215-decalage,245,25,120);
Sitkah 29:41e02746041d 1703 lcd.FillRect(360-decalage,245,25,120);
Sitkah 29:41e02746041d 1704 lcd.FillRect(360-decalage,100,25,120);
Sitkah 29:41e02746041d 1705 lcd.FillRect(240-decalage,365,120,25);
Sitkah 29:41e02746041d 1706 break;
Sitkah 29:41e02746041d 1707
Sitkah 29:41e02746041d 1708 case 1:
Sitkah 29:41e02746041d 1709 lcd.FillRect(360-decalage,100,25,120);// E
Sitkah 29:41e02746041d 1710 lcd.FillRect(360-decalage,245,25,120);// F
Sitkah 29:41e02746041d 1711 break;
Sitkah 29:41e02746041d 1712
Sitkah 29:41e02746041d 1713 case 2:
Sitkah 29:41e02746041d 1714 lcd.FillRect(240-decalage,75,120,25);// A
Sitkah 29:41e02746041d 1715 lcd.FillRect(215-decalage,245,25,120);// C
Sitkah 29:41e02746041d 1716 lcd.FillRect(240-decalage,365,120,25);// D
Sitkah 29:41e02746041d 1717 lcd.FillRect(360-decalage,100,25,120);// E
Sitkah 29:41e02746041d 1718 lcd.FillRect(240-decalage,220,120,25);// G
Sitkah 29:41e02746041d 1719 break;
Sitkah 29:41e02746041d 1720
Sitkah 29:41e02746041d 1721 case 3:
Sitkah 29:41e02746041d 1722 lcd.FillRect(240-decalage,75,120,25);// A
Sitkah 29:41e02746041d 1723 lcd.FillRect(360-decalage,100,25,120);// E
Sitkah 29:41e02746041d 1724 lcd.FillRect(240-decalage,220,120,25);// G
Sitkah 29:41e02746041d 1725 lcd.FillRect(240-decalage,365,120,25);// D
Sitkah 29:41e02746041d 1726 lcd.FillRect(360-decalage,245,25,120);// F
Sitkah 29:41e02746041d 1727 break;
Sitkah 29:41e02746041d 1728
Sitkah 29:41e02746041d 1729 case 4:
Sitkah 29:41e02746041d 1730 lcd.FillRect(215-decalage,100,25,120);// B
Sitkah 29:41e02746041d 1731 lcd.FillRect(360-decalage,100,25,120);// E
Sitkah 29:41e02746041d 1732 lcd.FillRect(360-decalage,245,25,120);// F
Sitkah 29:41e02746041d 1733 lcd.FillRect(240-decalage,220,120,25);// G
Sitkah 29:41e02746041d 1734 break;
Sitkah 29:41e02746041d 1735
Sitkah 29:41e02746041d 1736 case 5:
Sitkah 29:41e02746041d 1737 lcd.FillRect(240-decalage,75,120,25);// A
Sitkah 29:41e02746041d 1738 lcd.FillRect(215-decalage,100,25,120);// B
Sitkah 29:41e02746041d 1739 lcd.FillRect(240-decalage,220,120,25);// G
Sitkah 29:41e02746041d 1740 lcd.FillRect(240-decalage,365,120,25);// D
Sitkah 29:41e02746041d 1741 lcd.FillRect(360-decalage,245,25,120);// F
Sitkah 29:41e02746041d 1742 break;
Sitkah 29:41e02746041d 1743
Sitkah 29:41e02746041d 1744 case 6:
Sitkah 29:41e02746041d 1745 lcd.FillRect(240-decalage,75,120,25);// A
Sitkah 29:41e02746041d 1746 lcd.FillRect(215-decalage,100,25,120);// B
Sitkah 29:41e02746041d 1747 lcd.FillRect(215-decalage,245,25,120);// C
Sitkah 29:41e02746041d 1748 lcd.FillRect(240-decalage,365,120,25);// D
Sitkah 29:41e02746041d 1749 lcd.FillRect(360-decalage,245,25,120);// F
Sitkah 29:41e02746041d 1750 lcd.FillRect(240-decalage,220,120,25);// G
Sitkah 29:41e02746041d 1751 break;
Sitkah 29:41e02746041d 1752
Sitkah 29:41e02746041d 1753 case 7:
Sitkah 29:41e02746041d 1754 lcd.FillRect(240-decalage,75,120,25);// A
Sitkah 29:41e02746041d 1755 lcd.FillRect(360-decalage,100,25,120);// E
Sitkah 29:41e02746041d 1756 lcd.FillRect(360-decalage,245,25,120);// F
Sitkah 29:41e02746041d 1757 break;
Sitkah 29:41e02746041d 1758
Sitkah 29:41e02746041d 1759 case 8:
Sitkah 29:41e02746041d 1760 lcd.FillRect(240-decalage,75,120,25); // A
Sitkah 29:41e02746041d 1761 lcd.FillRect(215-decalage,100,25,120);
Sitkah 29:41e02746041d 1762 lcd.FillRect(215-decalage,245,25,120);
Sitkah 29:41e02746041d 1763 lcd.FillRect(360-decalage,245,25,120);//...
Sitkah 29:41e02746041d 1764 lcd.FillRect(360-decalage,100,25,120);
Sitkah 29:41e02746041d 1765 lcd.FillRect(240-decalage,365,120,25);
Sitkah 29:41e02746041d 1766 lcd.FillRect(240-decalage,220,120,25);// G
Sitkah 29:41e02746041d 1767 break;
Sitkah 29:41e02746041d 1768
Sitkah 29:41e02746041d 1769 case 9:
Sitkah 29:41e02746041d 1770 lcd.FillRect(240-decalage,75,120,25);// A
Sitkah 29:41e02746041d 1771 lcd.FillRect(215-decalage,100,25,120);// B
Sitkah 29:41e02746041d 1772 lcd.FillRect(240-decalage,365,120,25);// D
Sitkah 29:41e02746041d 1773 lcd.FillRect(360-decalage,100,25,120);// E
Sitkah 29:41e02746041d 1774 lcd.FillRect(360-decalage,245,25,120);// F
Sitkah 29:41e02746041d 1775 lcd.FillRect(240-decalage,220,120,25);// G
Sitkah 29:41e02746041d 1776 break;
Sitkah 29:41e02746041d 1777 }
Sitkah 29:41e02746041d 1778 }
Sitkah 29:41e02746041d 1779
Sitkah 29:41e02746041d 1780 void effacer_segment(long couleur)
Sitkah 29:41e02746041d 1781 {
Sitkah 29:41e02746041d 1782 lcd.SetTextColor(couleur);
Sitkah 29:41e02746041d 1783 lcd.FillRect(240-200,75,120,25); // A
Sitkah 29:41e02746041d 1784 lcd.FillRect(215-200,100,25,120);
Sitkah 29:41e02746041d 1785 lcd.FillRect(215-200,245,25,120);
Sitkah 29:41e02746041d 1786 lcd.FillRect(360-200,245,25,120);//...
Sitkah 29:41e02746041d 1787 lcd.FillRect(360-200,100,25,120);
Sitkah 29:41e02746041d 1788 lcd.FillRect(240-200,365,120,25);
Sitkah 29:41e02746041d 1789 lcd.FillRect(240-200,220,120,25);// G
Sitkah 29:41e02746041d 1790
Sitkah 29:41e02746041d 1791 lcd.FillRect(240,75,120,25); // A
Sitkah 29:41e02746041d 1792 lcd.FillRect(215,100,25,120);
Sitkah 29:41e02746041d 1793 lcd.FillRect(215,245,25,120);
Sitkah 29:41e02746041d 1794 lcd.FillRect(360,245,25,120);//...
Sitkah 29:41e02746041d 1795 lcd.FillRect(360,100,25,120);
Sitkah 29:41e02746041d 1796 lcd.FillRect(240,365,120,25);
Sitkah 29:41e02746041d 1797 lcd.FillRect(240,220,120,25);// G
Sitkah 29:41e02746041d 1798 }