
code avec modifs, programme mit dans les robots pour les derniers matchs
Dependencies: mbed SerialHalfDuplex SDFileSystem liaison_Bluetooth ident_crac DISCO-F469NI_portrait
Revision 21:d137ec53c3a9, committed 2020-06-24
- Comitter:
- gabrieltetar
- Date:
- Wed Jun 24 09:39:42 2020 +0000
- Parent:
- 20:2f0b1c48a35f
- Child:
- 22:c7763a7ec6c7
- Commit message:
- SPLIT - A TEST
Changed in this revision
--- a/Asservissement/Asservissement.cpp Tue Jun 23 13:31:38 2020 +0000 +++ b/Asservissement/Asservissement.cpp Wed Jun 24 09:39:42 2020 +0000 @@ -1,5 +1,4 @@ - -#include "Asservissement.h" +#include "global.h" /*********************************************************************************************************/ /* FUNCTION NAME: SendRawId */
--- a/Asservissement/Asservissement.h Tue Jun 23 13:31:38 2020 +0000 +++ b/Asservissement/Asservissement.h Wed Jun 24 09:39:42 2020 +0000 @@ -1,8 +1,6 @@ #ifndef CRAC_ASSERVISSEMENT #define CRAC_ASSERVISSEMENT -#include "global.h" - void Send2Short(unsigned short id, unsigned short d1, unsigned short d2); void SendMsgCan(unsigned short id, unsigned char* data, int len); void SendCharCan(unsigned short id, unsigned char data);
--- a/Evitement/Evitement.cpp Tue Jun 23 13:31:38 2020 +0000 +++ b/Evitement/Evitement.cpp Wed Jun 24 09:39:42 2020 +0000 @@ -73,29 +73,29 @@ /* FUNCTION NAME: Balise end Danger */ /* DESCRIPTION : FIFO -> BALISE_END_DANGER */ /****************************************************************************************/ -unsigned short balise_end_danger(S_Instruction* instruction,S_Dodge_queue* dodgeq, E_stratGameEtat* gameEtat, signed short target_x_robot, signed short target_y_robot, signed short target_theta_robot, signed short theta_robot,signed short x_robot,signed short y_robot){ +unsigned short balise_end_danger(S_Instruction* instruction,S_Dodge_queue* dodgeq, signed short target_x_robot, signed short target_y_robot, signed short target_theta_robot, signed short theta_robot,signed short x_robot,signed short y_robot){ Debug_Audio(3,1); switch(instruction->order){ case MV_LINE: - *gameEtat=ETAT_GAME_PROCESS_INSTRUCTION; + gameEtat=ETAT_GAME_PROCESS_INSTRUCTION; instruction->order = MV_XYT; instruction->arg1 = target_x_robot;// X instruction->arg2 = target_y_robot;// Y instruction->arg3 = target_theta_robot;// T break; case MV_TURN: - *gameEtat=ETAT_GAME_PROCESS_INSTRUCTION; + gameEtat=ETAT_GAME_PROCESS_INSTRUCTION; instruction->order = MV_XYT; instruction->arg1 = target_x_robot;// X instruction->arg2 = target_y_robot;// Y instruction->arg3 = target_theta_robot;// T break; case MV_XYT: - *gameEtat=ETAT_GAME_PROCESS_INSTRUCTION; + gameEtat=ETAT_GAME_PROCESS_INSTRUCTION; break; case MV_COURBURE: unsigned short alpha; - *gameEtat=ETAT_GAME_PROCESS_INSTRUCTION; + gameEtat=ETAT_GAME_PROCESS_INSTRUCTION; instruction->order=MV_XYT; if(instruction->direction==LEFT) alpha=(dodgeq->inst[0].arg3-theta_robot); else alpha=(theta_robot-dodgeq->inst[0].arg3);
--- a/Evitement/Evitement.h Tue Jun 23 13:31:38 2020 +0000 +++ b/Evitement/Evitement.h Wed Jun 24 09:39:42 2020 +0000 @@ -11,7 +11,7 @@ unsigned short balise_danger(void); unsigned short balise_stop(signed char FIFO_lecture); -unsigned short balise_end_danger(S_Instruction* instruction,S_Dodge_queue* dodgeq, E_stratGameEtat* gameEtat, signed short target_x_robot, signed short target_y_robot, signed short target_theta_robot, signed short theta_robot,signed short x_robot,signed short y_robot); +unsigned short balise_end_danger(S_Instruction* instruction,S_Dodge_queue* dodgeq, signed short target_x_robot, signed short target_y_robot, signed short target_theta_robot, signed short theta_robot,signed short x_robot,signed short y_robot);
--- a/Globals/global.h Tue Jun 23 13:31:38 2020 +0000 +++ b/Globals/global.h Wed Jun 24 09:39:42 2020 +0000 @@ -2,14 +2,15 @@ #define GLOBAL_H #include "mbed.h" + #include "ident_crac.h" - +#include "constantes.h" #include <CAN.h> #include <DirHandle.h> #include "SDFileSystem.h" #include "conv_data.h" -#include "constantes.h" + #include "Instruction.h" #include "Strategie.h" #include "lecture_repertoire.h" @@ -20,12 +21,13 @@ #include "LCD_DISCO_F469NI.h" #include "fonts.h" #include "F469_GUI.hpp" -#include "LiaisonBluetooth.h" #include "Evitement.h" +#include "ihm.h" + -//#include "peripheriques.h" extern Serial pc; - +//extern E_stratGameEtat gameEtat = ETAT_CHECK_CARTES; +//extern T_etat strat_etat_s = INIT; extern CAN can1; extern CAN can2; extern CANMessage msgRxBuffer[SIZE_FIFO]; @@ -34,9 +36,9 @@ extern char PATH[10][SIZE+8]; extern signed char nbStrat; - +extern unsigned short flag_check_carte; extern int ack_bluetooth; - +extern unsigned char Cote; extern DigitalOut led1,led2,led3,led4; extern LCD_DISCO_F469NI lcd; extern char cheminFileStart[SIZE+8]; //Le chemin du fichier de strat, utiliser strcpy(cheminFileStart,"/local/strat.txt");
--- a/Globals/ident_crac_2.h Tue Jun 23 13:31:38 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,207 +0,0 @@ -#ifndef CRAC_IDENTH -#define CRAC_IDENTH - -#define GLOBAL_GAME_END 0x004 // Stop fin du match -#define GLOBAL_START 0x002 // Start -#define GLOBAL_END_INIT_POSITION 0x005 // Fin positionnement robot avant depart -#define GLOBAL_FUNNY_ACTION 0x007 // Funny action start (0: start, 1: stop) -#define GLOBAL_JACK 0x008 -#define ACKNOWLEDGE_JACK 0X009 - -//#define BALISE_STOP 0x003 // Trame stop - -#define BALISE_DANGER 0xA // Trame danger - -#define BALISE_END_DANGER 0xB // Trame fin de danger - - -#define ASSERVISSEMENT_STOP 0x001 // Stop moteur -#define ASSERVISSEMENT_SPEED_DANGER 0x006 // Vitesse de danger - -#define ASSERVISSEMENT_XYT 0x020 // Asservissement (x,y,theta) (0 : au choix 1 : avant -1 : arrière) -#define ASSERVISSEMENT_XYT_ROTATE 0x030//premiere rotation durant xy theta -#define ASSERVISSEMENT_XYT_LINE 0x040//ligne droite durant xy theta - - -#define ASSERVISSEMENT_COURBURE 0x021 // Asservissement rayon de courbure (+ gauche, - droite , sens : 1avt , -1arr; enchainement => 1 oui, 0 => non, 2=>derniére instruction de l'enchainement) -#define ASSERVISSEMENT_CONFIG 0x022 // Asservissement paramètre (définir les valeurs de vitesse max et d'eccélération max) -#define ASSERVISSEMENT_ROTATION 0x023 // Asservissement rotation -#define ASSERVISSEMENT_RECALAGE 0x024 // Moteur tout droit (recalage : 0 mouvement seul, 1 x, 2y valeur : coordonnée à laquelle est recalé x/y; enchainement => 1 oui, 0 => non) -#define ACTION_BIG_DEMARRAGE 0x025 // Action de départ du GR (Lancement de la trajectoire de départ du GR) -#define ODOMETRIE_BIG_POSITION 0x026 // Odométrie position robot (Position actuel du robot) -#define ODOMETRIE_BIG_VITESSE 0x027 // Odométrie vitesse (Indication sur l'état actuel) -#define ODOMETRIE_SMALL_POSITION 0x028 // Odométrie position robot (Position actuel du robot) -#define ODOMETRIE_SMALL_VITESSE 0x029 // Odométrie vitesse (Indication sur l'état actuel) - - - -#define ASSERVISSEMENT_CONFIG_DECEL 0x019 // Asservissement paramètre (définir les valeurs de vitesse max et de decélération max) - - -//////////////////////////////////////////////////////////RESETS/////////////////////////////////////////////////// -#define RESET_BALISE 0x030 // Reset balise -#define RESET_MOTEUR 0x031 // Reset moteur -#define RESET_IHM 0x032 // Reset écran tactile -#define RESET_ACTIONNEURS 0x033 // Reset actionneurs -#define RESET_POMPES 0x034 // Reset pompes -#define RESET_AX12 0x035 // Reset AX12 -#define RESET_TELEMETRE 0x036 // Reset telemetre - - - -#define RESET_STRAT 0x3A // Reset stratégie - -//////////////////////////////////////////////////////////CHECK CARTES///////////////////////////////////////////////// -#define CHECK_BALISE 0x060 // Check balise -#define CHECK_MOTEUR 0x061 // Check moteur -#define CHECK_IHM 0x062 // Check écran tactile -#define CHECK_ACTIONNEURS_AVANT 0x063 // Check actionneurs -#define CHECK_ACTIONNEURS_ARRIERE 0x064 // Check pompes -#define CHECK_AX12 0x065 // Check AX12 -#define CHECK_OK_TELEMETRE 0x066 // Check telemetre - -//////////////////////////////////////////////////////////ACK CARTES/////////////////////////////////////////////////// -#define ALIVE_BALISE 0x070 // Alive balise -#define ALIVE_MOTEUR 0x071 // Alive moteur -#define ALIVE_IHM 0x072 // Alive écran tactile -#define ALIVE_ACTIONNEURS_AVANT 0x073 // Alive actionneurs -#define ALIVE_ACTIONNEURS_ARRIERE 0x074 // Alive pompes -#define ALIVE_HERKULEX 0x075 // Alive AX12 -#define ALIVE_TELEMETRE 0x076 // Alive telemetre - - -/////////////////////////////////////////////////////ACTIONS COMPLEXES///////////////////////////////////////////////// -#define MONTER_IMMEUBLE_DOUBLE 0x090 // Monte deux immeubles selon un code couleur -#define MONTER_IMMEUBLE 0x091 -#define ACK_ACTION 0x99 //autre action possible via les herkulex, ne peut pas passer en sendrawid - - - -/////////////////////////////////////////////////////////ACKS//////////////////////////////////////////////////////////// -#define ACKNOWLEDGE_BALISE 0x100 // Acknowledge balise -#define ACKNOWLEDGE_MOTEUR 0x101 // Acknowledge moteur -#define ACKNOWLEDGE_IHM 0x102 // Acknowledge ecran tactile -#define ACKNOWLEDGE_ACTIONNEURS 0x103 // Acknowledge actionneurs -#define ACKNOWLEDGE_POMPES 0x104 // Acknowledge pompes -#define ACKNOWLEDGE_TELEMETRE 0x105 // Acknowledge telemetre -#define ACKNOWLEDGE_HERKULEX 0x106 // Ack ax12 -#define ACKNOWLEDGE_STRAT 0x10A // Acknowledge pompes -#define ACKNOWLEDGE_CAMERA 0x108 //Acknowledge couleur caméra - - -#define INSTRUCTION_END_BALISE 0x110 // Fin instruction balise (Indique que l'instruction est terminée) -#define INSTRUCTION_END_MOTEUR 0x111 // Fin instruction moteur (Indique que l'instruction est terminée) -#define INSTRUCTION_END_IHM 0x112 // Fin instruction ecran tactile (Indique que l'instruction est terminée) -#define INSTRUCTION_END_ACTIONNEURS 0x113 // Fin instruction actionneurs (Indique que l'instruction est terminée) -#define ACK_FIN_ACTION 0x116 - - - -/////////////////////////////////////////////////////////ERREURS//////////////////////////////////////////////////////// -#define ERROR_OVERFLOW_BALISE 0x040 // Overflow odométrie -#define ERROR_OVERFLOW_MOTEUR 0x041 // Overflow asservissement -#define ERROR_OVERFLOW_IHM 0x042 // Overflow balise -#define ERROR_OVERFLOW_STRAT 0x043 // Overflow stratégie -#define ERROR_BALISE 0x785 // Bug balise -#define ERROR_RTC 0x786 // Bug RTC -#define ERROR_MOTEUR 0x787 // Bug moteur -#define ERROR_TELEMETRIE 0x788 // Bug télémètre -#define ERROR_STRATEGIE 0x789 // Bug stratégie - - - -/////////////////////////////////////////////////ACTIONS SIMPLES DU ROBOT///////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - -#define GABARIT 0x200 -#define GABARIT_D 0x201 -#define PRESENTOIR 0x202 - - - -//commande pompe -#define HACHEUR_GET_ATOM 0x520 -#define HACHEUR_GET_ATOM_ACK 0x521 - -#define HACHEUR_RELEASE_ATOM 0x522 -#define HACHEUR_RELEASE_ATOM_ACK 0x523 - -#define HACHEUR_GET_PRESENTOIR_AV 0x524 -#define HACHEUR_RELEASE_AV 0x525 - -#define HACHEUR_GET_PRESENTOIR_AR 0x526 -#define HACHEUR_RELEASE_AR 0x527 - -#define HACHEUR_STATUT_VENTOUSES 0x528 - -//#define BAISSER_ATTRAPE_BLOC_AvG 0x222 -#define RELEVER_ATTRAPE_BLOC_AvG 0x223 - -#define BAISSER_ATTRAPE_BLOC_AvD 0x224 -#define RELEVER_ATTRAPE_BLOC_AvD 0x225 - -#define INTER_BAISSER_ATTRAPE_BLOC_AvG 0x226 -#define INTER_BAISSER_ATTRAPE_BLOC_AvD 0x227 - -#define RANGER_ATTRAPE_BLOC_AvD 0x228 -#define RANGER_ATTRAPE_BLOC_AvG 0x229 - -#define BRAS_VENTOUSE_1 0x22A -#define BRAS_VENTOUSE_2 0x22B - -#define BRAS_ABEILLE_UP 0x202 -#define BRAS_ABEILLE_DOWN 0x203 -#define INCLINAISON_CHATEAU 0x204 -#define INCLINAISON_EPURATION 0x205 -#define ALLUMER_PANNEAU_UP 0x206 -#define ALLUMER_PANNEAU_DOWN 0x207 -#define BLOCAGE_BALLE 0x208 -#define LANCEMENT_MOTEUR_TIR_ON 0x209 -#define LANCEMENT_MOTEUR_TIR_OFF 0x20A -#define AIGUILLEUR_CENTRE 0x20B -#define AIGUILLEUR_GAUCHE 0x20C -#define AIGUILLEUR_DROITE 0x20D -#define TRI_BALLE 0x20E -#define NO_BLOC 0x20F - -///////////////////////////////////////////CAPTEURS/////////////////////////////////////////////////////////////////// -#define DATA_TELEMETRE 0x310 // Demande sa valeur à un télémètre parmis les -#define RECEPTION_DATA 0x311 // envoi de la valeur d'un des télémètres -#define TELEMETRE_OBJET 0x312 -#define OBJET_SUR_TABLE 0x313 -#define RECEPTION_RECALAGE 0x315 //Valeur des télémètres -#define DATA_RECALAGE 0x316 //Demande de la valeur de tous les télémètres afin de procèder au récalage -#define LIRE_PANNEAU 0x317 -#define VIBRO 0x318 - - -#define DATA_TELEMETRE_LOGIQUE 0x319 -#define RECEPTION_TELEMETRE_LOGIQUE 0x320 -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -///////////////////////////////////////////////////ENVOI DE PARAMETRES////////////////////////////////////////////////// -#define CHOICE_COLOR 0x602 // Couleur (0->VERT;1->ORANGE) -#define RECEPTION_COULEUR 0x603 //Code Couleur -#define ECRAN_ALL_CHECK 0x620 // Carte all check (Si provient de carte strat => toutes les cartes sont en ligne, Si provient IHM => forcer le lancement) - -///////////////////////////////////////////////////////////DEBUGS/////////////////////////////////////////////////////// -#define DEBUG_STRATEGIE_AUTOMATE 0x760 // Etat automate stratégie (Permet de savoir l'etat de l'automate) -#define DEBUG_FAKE_JAKE 0x761 // Fake jack (Permet d'outre passerr le JACk du robot) -#define DEBUG_ASSERV 0x762 // Info debug carte moteur - - - -#define POMPE_PWM 0x9A // pwm des pompes (pwm entre 0 et 100) - - -#define ASSERVISSEMENT_INFO_CONSIGNE 0x1F0 // Info Consigne et Commande moteur -#define ASSERVISSEMENT_CONFIG_KPP_DROITE 0x1F1 // Config coef KPP_Droit -#define ASSERVISSEMENT_CONFIG_KPI_DROITE 0x1F2 // Config coef KPI_Droit -#define ASSERVISSEMENT_CONFIG_KPD_DROITE 0x1F3 // Config coef KPD_Droit -#define ASSERVISSEMENT_CONFIG_KPP_GAUCHE 0x1F4 // Config coef KPP_Gauche -#define ASSERVISSEMENT_CONFIG_KPI_GAUCHE 0x1F5 // Config coef KPI_Gauche -#define ASSERVISSEMENT_CONFIG_KPD_GAUCHE 0x1F6 // Config coef KPD_Gauche -#define ASSERVISSEMENT_ENABLE 0x1F7 // Activation asservissement (0 : désactivation, 1 : activation) - -#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IHM/DISCO-F469NI_portrait.lib Wed Jun 24 09:39:42 2020 +0000 @@ -0,0 +1,1 @@ +http://os.mbed.com/teams/CRAC-Team/code/DISCO-F469NI_portrait/#d84fc295915e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IHM/ihm.cpp Wed Jun 24 09:39:42 2020 +0000 @@ -0,0 +1,741 @@ +#include "global.h" + +#define VERT 0xFF00FF00 +#define ROUGE 0xFFFF0000 +#define BLEU 0xFF0000FF +#define JAUNE 0xFFFDD835//FEFE00 +#define BLANC 0xFF000000 +#define ORANGE 0xFFFFA500 +#define NOIR 0xFF000000 +#define DIY_GREY 0xFFDFDFDF +#define VIOLET 0xFF4527A0 +TS_DISCO_F469NI ts; +LCD_DISCO_F469NI lcd; + + +TS_StateTypeDef TS_State; + + +/////////////////DEFINITION DES BOUTONS//////////////////// +Button COTE_JAUNE(0, 25, 400, 300, "JAUNE"); +Button COTE_VIOLET(0, 350, 400, 300, "VIOLET"); +Button RETOUR (0, 680, 400, 110, "--Precedent--"); +Button LANCER (0, 200, 400, 200, "--LANCER--"); +Button CHECK (0, 420, 400, 200, "Valider"); +Button MATCH (0, 50, 400, 320, "Match"); +Button DEMONSTRATION (0, 400, 400, 320, "Demo"); +//menu demo +Button TEST_VENT(0, 25, 400, 100, "Test ventouses"); +Button TEST_MOT(0, 135, 400, 100, "Test moteur"); +Button TEST_COUL(0,245,400,100,"Test capteurs couleur"); +Button TEST_BRAS(0,355,400,100,"Test Bras"); +Button TEST_AUDIO(0,465,400,100,"Test Audio"); +Button TEST_ELECTRV(0,575,400,100,"Test Divers"); +//menu demo/demo/ +Button TEST_A(0,25,195,100,"A"); +Button TEST_B(205,25,195,100,"B"); +Button TEST_C(0,135,195,100,"C"); +Button TEST_D(205,135,195,100,"D"); +Button TEST_NUM(0,245,400,100,"Bras num"); +Button TEST_PLUS(205,355,195,100,"+"); +Button TEST_MOINS(0,355,195,100,"-"); + + +Button FORCE_LAUNCH(0, 50, 400, 320, "Force Launch"); +Button SUIVANT(0,380,200,100,"Suivant"); +//////////////////////////////////////////////////////////// + +signed char Bouton_Strat (void); + +void SelectionStrat (unsigned char numeroStrat); + +/****************************************************************************************/ +/* FUNCTION NAME: automate_etat_ihm */ +/* DESCRIPTION : Automate de gestion de l'affichage */ +/****************************************************************************************/ +void automate_etat_ihm(void) +{ + char toto[2]; + int j; + unsigned char maximilien=1; + if (j==0) { + ts.Init(lcd.GetXSize(), lcd.GetYSize()); + j++; + } + ts.GetState(&TS_State); + switch (strat_etat_s) { + case INIT : //intialise l'écran et passe à l'attente d'initialisation des cartes + ts.GetState(&TS_State); + canProcessRx(); + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + lcd.Clear (LCD_COLOR_WHITE); + wait(0.15); + lcd.DisplayStringAt(0, 10, (uint8_t *)"Verification des cartes", LEFT_MODE); + //cartes non verifiées//////////////// + lcd.SetTextColor(DIY_GREY); + lcd.FillRect(0,400,400,150); //carte moteur + lcd.FillRect(0,600,400,150); //Balise + lcd.SetTextColor(LCD_COLOR_BLACK); + lcd.SetBackColor(DIY_GREY); + lcd.DisplayStringAt(80, 450, (uint8_t *)"Carte Moteur", LEFT_MODE); + lcd.DisplayStringAt(110,650, (uint8_t *)"Balise", LEFT_MODE); + //////////////////////////////////////// + FORCE_LAUNCH.Draw(0xFFFF0000, 0); + + strat_etat_s=ATT; + break; + + case ATT : //Si les cartes sont présentes passe directement à choix sinon attente de force Launch (cette partie est encore buggée mais les cartes affichent bien leur présence donc faut juste force launch tout le temps...) + if (flag_check_carte==1) { + strat_etat_s = CHOIX; + gameEtat = ETAT_CONFIG; + } else if (FORCE_LAUNCH.Touched()) { + strat_etat_s = CHOIX; + gameEtat = ETAT_CONFIG; + while(FORCE_LAUNCH.Touched()); + } + + break; + + + case CHOIX : //Match ou DEMO + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + lcd.Clear (LCD_COLOR_WHITE); + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Match ou demonstration ?", LEFT_MODE); + DEMONSTRATION.Draw(LCD_COLOR_LIGHTGREEN, 0); + MATCH.Draw(0xFFF01010, 0); + while(strat_etat_s == CHOIX) { + canProcessRx(); + if(DEMONSTRATION.Touched()) { + strat_etat_s = DEMO; + while(DEMONSTRATION.Touched()); + } + + if(MATCH.Touched()) { + strat_etat_s = SELECT_SIDE; + while(MATCH.Touched()); + } + + } + break; + + case DEMO : + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + lcd.Clear (LCD_COLOR_WHITE); + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"DEMO", LEFT_MODE); + RETOUR.Draw(0xFFFF0000, 0); + TEST_VENT.Draw(VERT, 0); + TEST_MOT.Draw(VERT, 0); + TEST_COUL.Draw(VERT, 0); + TEST_BRAS.Draw(VERT, 0); + TEST_AUDIO.Draw(VERT, 0); + TEST_ELECTRV.Draw(VERT, 0); + maximilien=0; + while (strat_etat_s == DEMO) { + canProcessRx(); + if(TEST_VENT.Touched()) { + while(TEST_VENT.Touched()); + strat_etat_s = TEST_VENTOUSE; + } else if(TEST_MOT.Touched()) { + while(TEST_MOT.Touched()); + strat_etat_s = TEST_MOTEUR; + } else if(TEST_ELECTRV.Touched()) { + while(TEST_ELECTRV.Touched()); + strat_etat_s = TEST_ELECTROV; + } else if (TEST_COUL.Touched()) { + while(TEST_COUL.Touched()); + strat_etat_s =TEST_COULEUR ; + } else if (TEST_BRAS.Touched()) { + while(TEST_BRAS.Touched()); + strat_etat_s =TEST_SERVO_BRAS ; + } else if(TEST_AUDIO.Touched()) { + while(TEST_AUDIO.Touched()); + strat_etat_s=TEST_AUD; + } else if(RETOUR.Touched()) { + while(RETOUR.Touched()); + strat_etat_s = CHOIX; + } + } + break; + + + case TEST_VENTOUSE: + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + lcd.Clear (LCD_COLOR_WHITE); + lcd.Clear (LCD_COLOR_WHITE); + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Test Ventouse", LEFT_MODE); + sprintf(toto,"%hd",maximilien); + lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); + RETOUR.Draw(0xFFFF0000,0); + TEST_A.Draw(BLEU, BLANC); + TEST_NUM.Draw(BLEU, BLANC); + TEST_PLUS.Draw(BLEU, BLANC); + TEST_MOINS.Draw(BLEU, BLANC); + while(strat_etat_s==TEST_VENTOUSE) { + if(RETOUR.Touched()) { + while (RETOUR.Touched()); + strat_etat_s=DEMO; + } else if(TEST_A.Touched()) { + while (TEST_A.Touched()); + //SendRawId(TEST_VENT_A); + TEST_A.Draw(BLEU, BLANC); + } else if(TEST_NUM.Touched()) { + while (TEST_NUM.Touched()); + TEST_NUM.Draw(BLEU, BLANC); + switch(maximilien){ + case 1: + SendRawId(TEST_VENT_1_ON); + break; + case 2: + SendRawId(TEST_VENT_1_OFF); + break; + case 3: + //SendRawId(TEST_VENT_3); + break; + case 4: + //SendRawId(TEST_VENT_4); + break; + case 5: + //SendRawId(TEST_VENT_5); + break; + case 6: + //SendRawId(TEST_VENT_6); + break; + } + } else if(TEST_PLUS.Touched()) { + while (TEST_PLUS.Touched()); + TEST_PLUS.Draw(BLEU, BLANC); + if(maximilien!=6)maximilien++; + sprintf(toto,"%hd",maximilien); + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); + } else if(TEST_MOINS.Touched()) { + while (TEST_MOINS.Touched()); + TEST_MOINS.Draw(BLEU, BLANC); + if(maximilien!=1)maximilien--; + sprintf(toto,"%hd",maximilien); + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); + } + } + break; + + case TEST_ELECTROV: + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + lcd.Clear (LCD_COLOR_WHITE); + lcd.Clear (LCD_COLOR_WHITE); + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"A : Manches B : Pavillon", LEFT_MODE); + RETOUR.Draw(0xFFFF0000,0); + TEST_A.Draw(BLEU, BLANC); + TEST_B.Draw(BLEU, BLANC); + while(strat_etat_s==TEST_ELECTROV) { + if(RETOUR.Touched()) { + while (RETOUR.Touched()); + strat_etat_s=DEMO; + } else if(TEST_A.Touched()) { + while (TEST_A.Touched()); + //SendRawId(TEST_ELECTROV_A); + TEST_A.Draw(BLEU, BLANC); + } else if(TEST_B.Touched()) { + while (TEST_B.Touched()); + //SendRawId(TEST_ELECTROV_A); + TEST_B.Draw(BLEU, BLANC); + } + } + break; + + case TEST_AUD: + + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + lcd.Clear (LCD_COLOR_WHITE); + lcd.Clear (LCD_COLOR_WHITE); + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Test Audio", LEFT_MODE); + sprintf(toto,"%hd",maximilien); + lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); + RETOUR.Draw(0xFFFF0000,0); + TEST_NUM.Draw(BLEU, BLANC); + TEST_PLUS.Draw(BLEU, BLANC); + TEST_MOINS.Draw(BLEU, BLANC); + while(strat_etat_s==TEST_AUD) { + if(RETOUR.Touched()) { + while (RETOUR.Touched()); + strat_etat_s=DEMO; + } else if(TEST_NUM.Touched()) { + while (TEST_NUM.Touched()); + TEST_NUM.Draw(BLEU, BLANC); + Debug_Audio(3,maximilien); + } else if(TEST_PLUS.Touched()) { + while (TEST_PLUS.Touched()); + TEST_PLUS.Draw(BLEU, BLANC); + if(maximilien!=20)maximilien++; + sprintf(toto,"%hd",maximilien); + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); + } else if(TEST_MOINS.Touched()) { + while (TEST_MOINS.Touched()); + TEST_MOINS.Draw(BLEU, BLANC); + if(maximilien!=1)maximilien--; + sprintf(toto,"%hd",maximilien); + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); + } + } + break; + + case TEST_SERVO_BRAS: + + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + lcd.Clear (LCD_COLOR_WHITE); + lcd.Clear (LCD_COLOR_WHITE); + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Test Bras", LEFT_MODE); + sprintf(toto,"%hd",maximilien); + lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); + RETOUR.Draw(0xFFFF0000,0); + TEST_A.Draw(BLEU, BLANC); + TEST_B.Draw(BLEU, BLANC); + TEST_C.Draw(BLEU, BLANC); + TEST_D.Draw(BLEU, BLANC); + TEST_NUM.Draw(BLEU, BLANC); + TEST_PLUS.Draw(BLEU, BLANC); + TEST_MOINS.Draw(BLEU, BLANC); + while(strat_etat_s==TEST_SERVO_BRAS) { + if(RETOUR.Touched()) { + while (RETOUR.Touched()); + strat_etat_s=DEMO; + } else if(TEST_A.Touched()) { + while (TEST_A.Touched()); + SendRawId(TEST_BRAS_A); + TEST_A.Draw(BLEU, BLANC); + } else if(TEST_B.Touched()) { + while (TEST_B.Touched()); + SendRawId(TEST_BRAS_B); + TEST_B.Draw(BLEU, BLANC); + } else if(TEST_C.Touched()) { + while (TEST_C.Touched()); + SendRawId(TEST_BRAS_C); + TEST_C.Draw(BLEU, BLANC); + } else if(TEST_D.Touched()) { + while (TEST_D.Touched()); + SendRawId(TEST_BRAS_D); + TEST_D.Draw(BLEU, BLANC); + } else if(TEST_NUM.Touched()) { + while (TEST_NUM.Touched()); + TEST_NUM.Draw(BLEU, BLANC); + switch(maximilien){ + case 1: + SendRawId(TEST_BRAS_1); + break; + case 2: + SendRawId(TEST_BRAS_2); + break; + case 3: + SendRawId(TEST_BRAS_3); + break; + case 4: + SendRawId(TEST_BRAS_4); + break; + case 5: + SendRawId(TEST_BRAS_5); + break; + case 6: + SendRawId(TEST_BRAS_6); + break; + } + } else if(TEST_PLUS.Touched()) { + while (TEST_PLUS.Touched()); + TEST_PLUS.Draw(BLEU, BLANC); + if(maximilien!=6)maximilien++; + sprintf(toto,"%hd",maximilien); + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); + } else if(TEST_MOINS.Touched()) { + while (TEST_MOINS.Touched()); + TEST_MOINS.Draw(BLEU, BLANC); + if(maximilien!=1)maximilien--; + sprintf(toto,"%hd",maximilien); + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); + } + } + break; + + case TEST_COULEUR: + lcd.Clear (LCD_COLOR_WHITE); + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Test Couleur", LEFT_MODE); + RETOUR.Draw(0xFFFF0000,0); + while(strat_etat_s==TEST_COULEUR) { + if(RETOUR.Touched()) { + while (RETOUR.Touched()); + strat_etat_s=DEMO; + lcd.Clear (LCD_COLOR_WHITE); + } + } + break; + + case TEST_MOTEUR: + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + lcd.Clear (LCD_COLOR_WHITE); + lcd.Clear (LCD_COLOR_WHITE); + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Test Moteur", LEFT_MODE); + RETOUR.Draw(0xFFFF0000,0); + TEST_A.Draw(BLEU, BLANC); + TEST_B.Draw(BLEU, BLANC); + while(strat_etat_s==TEST_MOTEUR) { + if(RETOUR.Touched()) { + while (RETOUR.Touched()); + strat_etat_s=DEMO; + } else if(TEST_A.Touched()) { + while (TEST_A.Touched()); + BendRadius(150,1800,1,0); + TEST_A.Draw(BLEU, BLANC); + } else if(TEST_B.Touched()) { + while (TEST_B.Touched()); + BendRadius(150,1800,0,0); + TEST_B.Draw(BLEU, BLANC); + } + } + break; ///////////////////////////////////////////FIN DES DEMOS///////////////////////////////////////////////// + + + case SELECT_SIDE : // CHOIX DU COTE DU TERRAIN + INVERSION DE LA STRAT SI COTE ORANGE+ ENVOI DU COTE A LA CARTE CAPTEUR/ACTIONNEURS + lcd.Clear(LCD_COLOR_WHITE); + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + + lcd.DisplayStringAt(70, LINE(0), (uint8_t *)"Choisir le cote", LEFT_MODE); + COTE_JAUNE.Draw(JAUNE, 0); + COTE_VIOLET.Draw(VIOLET, 0); + RETOUR.Draw(LCD_COLOR_RED, 0); + + + while (strat_etat_s == SELECT_SIDE) { + canProcessRx(); + if(COTE_JAUNE.Touched()) { + Cote = 0x0; + InversStrat = Cote; + strat_etat_s = TACTIQUE; + CANMessage trame_Tx = CANMessage(); + trame_Tx.len = 1; + trame_Tx.format = CANStandard; + trame_Tx.type = CANData; + trame_Tx.id=CHOICE_COLOR; + trame_Tx.data[0]=Cote; + can2.write(trame_Tx); + while(COTE_JAUNE.Touched()); + + } + + if(COTE_VIOLET.Touched()) { + Cote = 0x1; + InversStrat= Cote; + strat_etat_s = TACTIQUE; + CANMessage trame_Tx = CANMessage(); + trame_Tx.len = 1; + trame_Tx.format = CANStandard; + trame_Tx.type = CANData; + trame_Tx.id=CHOICE_COLOR; + trame_Tx.data[0]=Cote; + can2.write(trame_Tx); + while(COTE_VIOLET.Touched()); + } + + if(RETOUR.Touched()) { + strat_etat_s = CHOIX; + while(RETOUR.Touched()); + } + } + + break; + + case TACTIQUE : //AFFICHE LA LISTE DES STRATS AFIN DE SELECTIONNER CELLE VOULUE + if (Cote == 0) { + lcd.Clear(JAUNE); + lcd.SetBackColor(JAUNE); + } else if (Cote == 1) { + lcd.Clear(VIOLET); + lcd.SetBackColor(VIOLET); + } else { + lcd.Clear(BLEU); + lcd.SetBackColor(BLEU); + } + + lcd.SetTextColor(LCD_COLOR_BLACK); + + lcd.DisplayStringAt(20, LINE(0), (uint8_t *)"Choisir une strategie", LEFT_MODE); + + nbStrat = Bouton_Strat(); // retourne valeur de Strategie si bouton strat renvoi -1 on reviens en arriere + if (nbStrat == -1) { + strat_etat_s = SELECT_SIDE; + } else { + strat_etat_s = DETAILS; + } + wait(0.1); + break; + + case DETAILS : //SECONDE VALIDATION DE LA STRAT + lcd.Clear(LCD_COLOR_WHITE); + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + CHECK.Draw(VERT); + RETOUR.Draw(LCD_COLOR_RED); + + SelectionStrat(nbStrat); //affiche la stratégie selectionnée + + while (strat_etat_s == DETAILS) { + canProcessRx(); + if (CHECK.Touched()) { + if(gameEtat == ETAT_CONFIG) { + gameEtat = ETAT_GAME_INIT; + strat_etat_s=LECTURE; + + } + while(CHECK.Touched()); + } + + if(RETOUR.Touched()) { + strat_etat_s = TACTIQUE; + while(RETOUR.Touched()); + } + } + break; + + + case LECTURE : + break; + case AFF_WAIT_JACK : //FONCTIONS D'AFFICHAGE DE L'ATTENTE DU JACK + lcd.Clear(BLANC); + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + + if (Cote == 0) { + lcd.Clear(VERT); + lcd.SetBackColor(VERT); + } else if (Cote == 1) { + lcd.Clear(ORANGE); + lcd.SetBackColor(ORANGE); + } else { + lcd.Clear(VERT); + lcd.SetBackColor(VERT); + } + canProcessRx(); + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"En attente du Jack", CENTER_MODE); + strat_etat_s=WAIT_JACK; + break; + + case WAIT_JACK: //VERITABLE ATTENTE DU JACK + break; + + case FIN : //AFFICHAGE DE FIN AVEC LE SCORE FINAL + lcd.Clear (LCD_COLOR_WHITE); + lcd.SetBackColor(LCD_COLOR_WHITE); + + + while(1); // force le redemarage du robot + //break; + + } + } +/****************************************************************************************/ +/* FUNCTION NAME: Bouton_Strat */ +/* DESCRIPTION : Sélection de la strat sur le lcd puis envoie sur CAN (à modifier!) */ +/****************************************************************************************/ +signed char Bouton_Strat (void) +{ + char Ack_strat = 0; + signed char Strat = 0; + Button STRAT_1 (0, 30, 190, 110, strat_sd[0]); + Button STRAT_2 (210, 30, 190, 110, strat_sd[1]); + Button STRAT_3 (0, 150, 190, 110, strat_sd[2]); + Button STRAT_4 (210, 150, 190, 110, strat_sd[3]); + Button STRAT_5 (0, 270, 190, 110,strat_sd[4]); + Button STRAT_6 (210, 270, 190, 110, strat_sd[5]); + Button STRAT_7 (0, 390, 190, 110, strat_sd[6]); + Button STRAT_8 (210, 390, 190, 110, strat_sd[7]); + Button STRAT_9 (0, 510, 190, 110, strat_sd[8]); + Button STRAT_10 (210, 510, 190, 110, strat_sd[9]); + Button RETOUR (0, 680, 400, 110, "--Precedent--"); + //Definition des boutons + + Ack_strat = 0; + Strat = 0; + STRAT_1.Draw(0xFFF0F0F0, 0); + STRAT_2.Draw(0xFFF0F0F0, 0); + STRAT_3.Draw(0xFFF0F0F0, 0); + STRAT_4.Draw(0xFFF0F0F0, 0); + STRAT_5.Draw(0xFFF0F0F0, 0); + STRAT_6.Draw(0xFFF0F0F0, 0); + STRAT_7.Draw(0xFFF0F0F0, 0); + STRAT_8.Draw(0xFFF0F0F0, 0); + STRAT_9.Draw(0xFFF0F0F0, 0); + STRAT_10.Draw(0xFFF0F0F0, 0); + RETOUR.Draw(0xFFFF0000, 0); + + while(Ack_strat == 0) { + canProcessRx(); + CANMessage msgTx=CANMessage(); + //msgTx.id=ECRAN_CHOICE_STRAT; + if (RETOUR.Touched()) + return -1; + while(RETOUR.Touched()); + //////////////////////////////STRATEGIE N°1 + if (STRAT_1.Touched()) { + Strat = 0; + //msgTx.data[0] = 0x1; + //can2.write(msgTx); + while(STRAT_1.Touched()); + Ack_strat =1; + } + /////////////////////////////STRATEGIE N°2 + if (STRAT_2.Touched()) { + Strat = 1; + //msgTx.data[0] = 0x2; + //can2.write(msgTx); + while(STRAT_2.Touched()); + Ack_strat =1; + } + //////////////////////////////STRATEGIE N°3 + if (STRAT_3.Touched()) { + Strat = 2; + //msgTx.data[0] = 0x3; + //can2.write(msgTx); + while(STRAT_3.Touched()); + Ack_strat =1; + } + /////////////////////////////STRATEGIE N°4 + if (STRAT_4.Touched()) { + Strat = 3; + //msgTx.data[0] = 0x4; + //can2.write(msgTx); + while(STRAT_4.Touched()); + Ack_strat =1; + } + ///////////////////////////////STRATEGIE N°5 + if (STRAT_5.Touched()) { + Strat = 4; + //msgTx.data[0] = 0x5; + //can2.write(msgTx); + while(STRAT_5.Touched()); + Ack_strat =1; + } + ////////////////////////////////STRATEGIE N°6 + if (STRAT_6.Touched()) { + Strat = 5; + //msgTx.data[0] = 0x6; + //can2.write(msgTx); + while(STRAT_6.Touched()); + Ack_strat =1; + } + /////////////////////////////////STRATEGIE N°7 + if (STRAT_7.Touched()) { + Strat = 6; + //msgTx.data[0] = 0x7; + //can2.write(msgTx); + while(STRAT_7.Touched()); + Ack_strat =1; + } + /////////////////////////////////STRATEGIE N°8 + if (STRAT_8.Touched()) { + Strat = 7; + //msgTx.data[0] = 0x8; + //can2.write(msgTx); + while(STRAT_8.Touched()); + Ack_strat =1; + } + /////////////////////////////////STRATEGIE N°9 + if (STRAT_9.Touched()) { + Strat = 8; + //msgTx.data[0] = 0x9; + //can2.write(msgTx); + while(STRAT_9.Touched()); + Ack_strat =1; + } + ///////////////////////////////////STRATEGIE N°10 + if (STRAT_10.Touched()) { + Strat = 9; + //msgTx.data[0] = 0xA; + //can2.write(msgTx); + while(STRAT_10.Touched()); + Ack_strat =1; + } + + } + return Strat; + +} +/****************************************************************************************/ +/* FUNCTION NAME: SelectionStrat */ +/* DESCRIPTION : Affiche la Stratégie sélectionnée sur l'ihm */ +/****************************************************************************************/ + + +void SelectionStrat (unsigned char Strategie) +{ + lcd.SetBackColor(LCD_COLOR_WHITE); + lcd.SetTextColor(LCD_COLOR_BLACK); + + switch (Strategie+1) { + case 0x1 : + //description de Strategie n°1 + lcd.DisplayStringAt(150, 0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); + break; + + case 0x2 : + //description de Strategie n°2 + lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); + break; + + case 0x3 : + //description de Strategie n°3 + lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); + break; + + case 0x4 : + //description de Strategie n°4 + lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); + break; + + case 0x5 : + //description de Strategie n°5 + lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); + break; + + case 0x6 : + //description de Strategie n°5 + lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); + break; + + case 0x7 : + //description de Strategie n°5 + lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); + break; + + case 0x8 : + //description de Strategie n°5 + lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); + break; + + case 0x9 : + //description de Strategie n°5 + lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); + break; + + case 0xA : + //description de Strategie n°5 + lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); + break; + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IHM/ihm.h Wed Jun 24 09:39:42 2020 +0000 @@ -0,0 +1,6 @@ +#ifndef CRAC_IHM +#define CRAC_IHM + +void automate_etat_ihm(void); + +#endif \ No newline at end of file
--- a/Strategie/DISCO-F469NI_portrait.lib Tue Jun 23 13:31:38 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://os.mbed.com/teams/CRAC-Team/code/DISCO-F469NI_portrait/#d84fc295915e
--- a/Strategie/Strategie.cpp Tue Jun 23 13:31:38 2020 +0000 +++ b/Strategie/Strategie.cpp Wed Jun 24 09:39:42 2020 +0000 @@ -1,55 +1,16 @@ #include "global.h" -#include <string.h> -#include <sstream> -#include <math.h> -#include <vector> #define M_PI 3.14159265358979323846 -#define VERT 0xFF00FF00 -#define ROUGE 0xFFFF0000 -#define BLEU 0xFF0000FF -#define JAUNE 0xFFFDD835//FEFE00 -#define BLANC 0xFF000000 -#define ORANGE 0xFFFFA500 -#define NOIR 0xFF000000 -#define DIY_GREY 0xFFDFDFDF -#define VIOLET 0xFF4527A0 -char tableau_aff[10][50]; -char tableau_etat[22][50]= { - "Check_carte_screen", - "Check_carte_screen_wait_ack", - "Check_cartes", - "Check_cartes_wait_ack", - "Wait_force", - "Config", - "Game_init", - "Game_wait_for_jack", - "Game_start", - "Game_next_instruction", - "Game_instruction", - "Game_wait_ack", - "Game_jump_time", - "Game_jump_config", - "Game_jump_position", - "Game_wait_end_instruction", - "Warning_timeout", - "Waring_end_balise_wait", - "Warning_end_last_instruction", - "Warning_switch_strategie", - "End", - "End_loop", -}; +E_stratGameEtat gameEtat = ETAT_CHECK_CARTES; +T_etat strat_etat_s = INIT; int waitingAckID_FIN; int waitingAckFrom_FIN; Ticker ticker; -TS_DISCO_F469NI ts; -LCD_DISCO_F469NI lcd; -TS_StateTypeDef TS_State; Ticker chrono; Timeout AffTime; @@ -76,10 +37,10 @@ unsigned short x; unsigned short y; unsigned char isStopEnable = 1;//Permet de savoir si il faut autoriser le stop via les balises -int flag = 0, flag_strat = 0, flag_timer; +unsigned short flag_check_carte = 0, flag_strat = 0, flag_timer; int flagReceptionTelemetres = 0, flagNonRepriseErrorMot = 0; -char Ack_strat = 0; -signed char Strat = 0; + + signed char FIFO_lecture=0;//Position du fifo de lecture des messages CAN signed short x_robot,y_robot,theta_robot;//La position du robot @@ -92,22 +53,12 @@ unsigned char checkCurrent = 0; unsigned char countAliveCard = 0; unsigned char ligne=0; - - int Fevitement=0; int EvitEtat= 0; int stop_evitement=0; - - - - - signed char nbStrat = 0; //N° de la strategie (1-10) - unsigned char ModeDemo = 0; // Si à 1, indique que l'on est dans le mode demo - unsigned char countRobotNear = 0;//Le nombre de robot à proximité - unsigned char ingnorBaliseOnce = 0;//une fois détecté réinitialise unsigned char ingnorBalise = 0;//0:balise ignore 1:on ecoute la balise short direction; @@ -121,47 +72,15 @@ float cptf; int cpt,cpt1; -typedef enum {INIT, ATT, CHOIX, DEMO, TEST_MOTEUR, TEST_COULEUR, TEST_SERVO_BRAS, TEST_VENTOUSE, TEST_ELECTROV,TEST_AUD, SELECT_SIDE, TACTIQUE, DETAILS,LECTURE, LAUNCH, AFF_WAIT_JACK, WAIT_JACK, COMPTEUR, FIN} T_etat; -T_etat etat = INIT; -E_stratGameEtat gameEtat = ETAT_CHECK_CARTES; + + E_stratGameEtat memGameEtat= gameEtat; E_stratGameEtat lastEtat = ETAT_CHECK_CARTES; E_Stratposdebut etat_pos=RECALAGE_1; -/////////////////DEFINITION DES BOUTONS//////////////////// -Button COTE_JAUNE(0, 25, 400, 300, "JAUNE"); -Button COTE_VIOLET(0, 350, 400, 300, "VIOLET"); -Button RETOUR (0, 680, 400, 110, "--Precedent--"); -Button LANCER (0, 200, 400, 200, "--LANCER--"); -Button CHECK (0, 420, 400, 200, "Valider"); -Button MATCH (0, 50, 400, 320, "Match"); -Button DEMONSTRATION (0, 400, 400, 320, "Demo"); -//menu demo -Button TEST_VENT(0, 25, 400, 100, "Test ventouses"); -Button TEST_MOT(0, 135, 400, 100, "Test moteur"); -Button TEST_COUL(0,245,400,100,"Test capteurs couleur"); -Button TEST_BRAS(0,355,400,100,"Test Bras"); -Button TEST_AUDIO(0,465,400,100,"Test Audio"); -Button TEST_ELECTRV(0,575,400,100,"Test Divers"); -//menu demo/demo/ -Button TEST_A(0,25,195,100,"A"); -Button TEST_B(205,25,195,100,"B"); -Button TEST_C(0,135,195,100,"C"); -Button TEST_D(205,135,195,100,"D"); -Button TEST_NUM(0,245,400,100,"Bras num"); -Button TEST_PLUS(205,355,195,100,"+"); -Button TEST_MOINS(0,355,195,100,"-"); +void SendRawId (unsigned short id); +void can2Rx_ISR(void); - -Button FORCE_LAUNCH(0, 50, 400, 320, "Force Launch"); -Button SUIVANT(0,380,200,100,"Suivant"); -//////////////////////////////////////////////////////////// - -void SendRawId (unsigned short id); -void SelectionStrat (unsigned char numeroStrat); -void Setflag(void); -void can2Rx_ISR(void); -signed char Bouton_Strat (void); signed char blocage_balise; void print_segment(int nombre, int decalage); void affichage_compteur (int nombre); @@ -197,7 +116,7 @@ { SendRawId(ASSERVISSEMENT_STOP);//On stope les moteurs SendRawId(GLOBAL_GAME_END);//Indication fin de match - etat=FIN; + strat_etat_s=FIN; gameTimer.stop();//Arret du timer while(1);//On bloque la programme dans l'interruption @@ -213,616 +132,11 @@ { if(gameEtat == ETAT_GAME_WAIT_FOR_JACK) { gameEtat = ETAT_GAME_START;//On débute le match - etat=COMPTEUR; + //strat_etat_s=COMPTEUR; blocage_balise=1; } } -/****************************************************************************************/ -/* FUNCTION NAME: SelectionStrat */ -/* DESCRIPTION : Affiche la Stratégie sélectionnée sur l'ihm */ -/****************************************************************************************/ - - -void SelectionStrat (unsigned char Strategie) -{ - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - - switch (Strategie+1) { - case 0x1 : - //description de Strategie n°1 - lcd.DisplayStringAt(150, 0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); - break; - - case 0x2 : - //description de Strategie n°2 - lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); - break; - - case 0x3 : - //description de Strategie n°3 - lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); - break; - - case 0x4 : - //description de Strategie n°4 - lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); - break; - - case 0x5 : - //description de Strategie n°5 - lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); - break; - - case 0x6 : - //description de Strategie n°5 - lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); - break; - - case 0x7 : - //description de Strategie n°5 - lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); - break; - - case 0x8 : - //description de Strategie n°5 - lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); - break; - - case 0x9 : - //description de Strategie n°5 - lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); - break; - - case 0xA : - //description de Strategie n°5 - lcd.DisplayStringAt(150,0, (uint8_t *)strat_sd[Strategie], LEFT_MODE); - break; - } -} - -void Setflag(void) -{ - flagSendCan = 1;//gab le zgeg -} - - -//Affiche une variable sur l'écran tactile// -void affichage_var(double Var) -{ - if(ligne==7) - ligne=0; - char aff[10]="toto"; - sprintf(aff,"%lf ",Var); - lcd.DisplayStringAt(120, LINE(20+(ligne)), (uint8_t *)aff, LEFT_MODE); - //ligne++; - -} - - - -/****************************************************************************************/ -/* FUNCTION NAME: automate_etat_ihm */ -/* DESCRIPTION : Automate de gestion de l'affichage */ -/****************************************************************************************/ -void automate_etat_ihm(void) -{ - char toto[2]; - int j; - unsigned char maximilien=1; - if (j==0) { - ts.Init(lcd.GetXSize(), lcd.GetYSize()); - j++; - } - ts.GetState(&TS_State); - switch (etat) { - case INIT : //intialise l'écran et passe à l'attente d'initialisation des cartes - ts.GetState(&TS_State); - canProcessRx(); - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - lcd.Clear (LCD_COLOR_WHITE); - wait(0.15); - lcd.DisplayStringAt(0, 10, (uint8_t *)"Verification des cartes", LEFT_MODE); - //cartes non verifiées//////////////// - lcd.SetTextColor(DIY_GREY); - lcd.FillRect(0,400,400,150); //carte moteur - lcd.FillRect(0,600,400,150); //Balise - lcd.SetTextColor(LCD_COLOR_BLACK); - lcd.SetBackColor(DIY_GREY); - lcd.DisplayStringAt(80, 450, (uint8_t *)"Carte Moteur", LEFT_MODE); - lcd.DisplayStringAt(110,650, (uint8_t *)"Balise", LEFT_MODE); - //////////////////////////////////////// - FORCE_LAUNCH.Draw(0xFFFF0000, 0); - - etat=ATT; - break; - - case ATT : //Si les cartes sont présentes passe directement à choix sinon attente de force Launch (cette partie est encore buggée mais les cartes affichent bien leur présence donc faut juste force launch tout le temps...) - if (flag==1) { - etat = CHOIX; - gameEtat = ETAT_CONFIG; - } else if (FORCE_LAUNCH.Touched()) { - etat = CHOIX; - gameEtat = ETAT_CONFIG; - while(FORCE_LAUNCH.Touched()); - } - - break; - - - case CHOIX : //Match ou DEMO - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - lcd.Clear (LCD_COLOR_WHITE); - lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Match ou demonstration ?", LEFT_MODE); - DEMONSTRATION.Draw(LCD_COLOR_LIGHTGREEN, 0); - MATCH.Draw(0xFFF01010, 0); - while(etat == CHOIX) { - canProcessRx(); - if(DEMONSTRATION.Touched()) { - etat = DEMO; - while(DEMONSTRATION.Touched()); - } - - if(MATCH.Touched()) { - etat = SELECT_SIDE; - while(MATCH.Touched()); - } - - } - break; - - case DEMO : - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - lcd.Clear (LCD_COLOR_WHITE); - lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"DEMO", LEFT_MODE); - RETOUR.Draw(0xFFFF0000, 0); - TEST_VENT.Draw(VERT, 0); - TEST_MOT.Draw(VERT, 0); - TEST_COUL.Draw(VERT, 0); - TEST_BRAS.Draw(VERT, 0); - TEST_AUDIO.Draw(VERT, 0); - TEST_ELECTRV.Draw(VERT, 0); - maximilien=0; - while (etat == DEMO) { - canProcessRx(); - if(TEST_VENT.Touched()) { - while(TEST_VENT.Touched()); - etat = TEST_VENTOUSE; - } else if(TEST_MOT.Touched()) { - while(TEST_MOT.Touched()); - etat = TEST_MOTEUR; - } else if(TEST_ELECTRV.Touched()) { - while(TEST_ELECTRV.Touched()); - etat = TEST_ELECTROV; - } else if (TEST_COUL.Touched()) { - while(TEST_COUL.Touched()); - etat =TEST_COULEUR ; - } else if (TEST_BRAS.Touched()) { - while(TEST_BRAS.Touched()); - etat =TEST_SERVO_BRAS ; - } else if(TEST_AUDIO.Touched()) { - while(TEST_AUDIO.Touched()); - etat=TEST_AUD; - } else if(RETOUR.Touched()) { - while(RETOUR.Touched()); - etat = CHOIX; - } - } - break; - - - case TEST_VENTOUSE: - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - lcd.Clear (LCD_COLOR_WHITE); - lcd.Clear (LCD_COLOR_WHITE); - lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Test Ventouse", LEFT_MODE); - sprintf(toto,"%hd",maximilien); - lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); - RETOUR.Draw(0xFFFF0000,0); - TEST_A.Draw(BLEU, BLANC); - TEST_NUM.Draw(BLEU, BLANC); - TEST_PLUS.Draw(BLEU, BLANC); - TEST_MOINS.Draw(BLEU, BLANC); - while(etat==TEST_VENTOUSE) { - if(RETOUR.Touched()) { - while (RETOUR.Touched()); - etat=DEMO; - } else if(TEST_A.Touched()) { - while (TEST_A.Touched()); - //SendRawId(TEST_VENT_A); - TEST_A.Draw(BLEU, BLANC); - } else if(TEST_NUM.Touched()) { - while (TEST_NUM.Touched()); - TEST_NUM.Draw(BLEU, BLANC); - switch(maximilien){ - case 1: - SendRawId(TEST_VENT_1_ON); - break; - case 2: - SendRawId(TEST_VENT_1_OFF); - break; - case 3: - //SendRawId(TEST_VENT_3); - break; - case 4: - //SendRawId(TEST_VENT_4); - break; - case 5: - //SendRawId(TEST_VENT_5); - break; - case 6: - //SendRawId(TEST_VENT_6); - break; - } - } else if(TEST_PLUS.Touched()) { - while (TEST_PLUS.Touched()); - TEST_PLUS.Draw(BLEU, BLANC); - if(maximilien!=6)maximilien++; - sprintf(toto,"%hd",maximilien); - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); - } else if(TEST_MOINS.Touched()) { - while (TEST_MOINS.Touched()); - TEST_MOINS.Draw(BLEU, BLANC); - if(maximilien!=1)maximilien--; - sprintf(toto,"%hd",maximilien); - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); - } - } - break; - - case TEST_ELECTROV: - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - lcd.Clear (LCD_COLOR_WHITE); - lcd.Clear (LCD_COLOR_WHITE); - lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"A : Manches B : Pavillon", LEFT_MODE); - RETOUR.Draw(0xFFFF0000,0); - TEST_A.Draw(BLEU, BLANC); - TEST_B.Draw(BLEU, BLANC); - while(etat==TEST_ELECTROV) { - if(RETOUR.Touched()) { - while (RETOUR.Touched()); - etat=DEMO; - } else if(TEST_A.Touched()) { - while (TEST_A.Touched()); - //SendRawId(TEST_ELECTROV_A); - TEST_A.Draw(BLEU, BLANC); - } else if(TEST_B.Touched()) { - while (TEST_B.Touched()); - //SendRawId(TEST_ELECTROV_A); - TEST_B.Draw(BLEU, BLANC); - } - } - break; - - case TEST_AUD: - - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - lcd.Clear (LCD_COLOR_WHITE); - lcd.Clear (LCD_COLOR_WHITE); - lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Test Audio", LEFT_MODE); - sprintf(toto,"%hd",maximilien); - lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); - RETOUR.Draw(0xFFFF0000,0); - TEST_NUM.Draw(BLEU, BLANC); - TEST_PLUS.Draw(BLEU, BLANC); - TEST_MOINS.Draw(BLEU, BLANC); - while(etat==TEST_AUD) { - if(RETOUR.Touched()) { - while (RETOUR.Touched()); - etat=DEMO; - } else if(TEST_NUM.Touched()) { - while (TEST_NUM.Touched()); - TEST_NUM.Draw(BLEU, BLANC); - Debug_Audio(3,maximilien); - } else if(TEST_PLUS.Touched()) { - while (TEST_PLUS.Touched()); - TEST_PLUS.Draw(BLEU, BLANC); - if(maximilien!=20)maximilien++; - sprintf(toto,"%hd",maximilien); - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); - } else if(TEST_MOINS.Touched()) { - while (TEST_MOINS.Touched()); - TEST_MOINS.Draw(BLEU, BLANC); - if(maximilien!=1)maximilien--; - sprintf(toto,"%hd",maximilien); - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); - } - } - break; - - case TEST_SERVO_BRAS: - - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - lcd.Clear (LCD_COLOR_WHITE); - lcd.Clear (LCD_COLOR_WHITE); - lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Test Bras", LEFT_MODE); - sprintf(toto,"%hd",maximilien); - lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); - RETOUR.Draw(0xFFFF0000,0); - TEST_A.Draw(BLEU, BLANC); - TEST_B.Draw(BLEU, BLANC); - TEST_C.Draw(BLEU, BLANC); - TEST_D.Draw(BLEU, BLANC); - TEST_NUM.Draw(BLEU, BLANC); - TEST_PLUS.Draw(BLEU, BLANC); - TEST_MOINS.Draw(BLEU, BLANC); - while(etat==TEST_SERVO_BRAS) { - if(RETOUR.Touched()) { - while (RETOUR.Touched()); - etat=DEMO; - } else if(TEST_A.Touched()) { - while (TEST_A.Touched()); - SendRawId(TEST_BRAS_A); - TEST_A.Draw(BLEU, BLANC); - } else if(TEST_B.Touched()) { - while (TEST_B.Touched()); - SendRawId(TEST_BRAS_B); - TEST_B.Draw(BLEU, BLANC); - } else if(TEST_C.Touched()) { - while (TEST_C.Touched()); - SendRawId(TEST_BRAS_C); - TEST_C.Draw(BLEU, BLANC); - } else if(TEST_D.Touched()) { - while (TEST_D.Touched()); - SendRawId(TEST_BRAS_D); - TEST_D.Draw(BLEU, BLANC); - } else if(TEST_NUM.Touched()) { - while (TEST_NUM.Touched()); - TEST_NUM.Draw(BLEU, BLANC); - switch(maximilien){ - case 1: - SendRawId(TEST_BRAS_1); - break; - case 2: - SendRawId(TEST_BRAS_2); - break; - case 3: - SendRawId(TEST_BRAS_3); - break; - case 4: - SendRawId(TEST_BRAS_4); - break; - case 5: - SendRawId(TEST_BRAS_5); - break; - case 6: - SendRawId(TEST_BRAS_6); - break; - } - } else if(TEST_PLUS.Touched()) { - while (TEST_PLUS.Touched()); - TEST_PLUS.Draw(BLEU, BLANC); - if(maximilien!=6)maximilien++; - sprintf(toto,"%hd",maximilien); - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); - } else if(TEST_MOINS.Touched()) { - while (TEST_MOINS.Touched()); - TEST_MOINS.Draw(BLEU, BLANC); - if(maximilien!=1)maximilien--; - sprintf(toto,"%hd",maximilien); - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - lcd.DisplayStringAt(50, LINE(20), (unsigned char *)toto, LEFT_MODE); - } - } - break; - - case TEST_COULEUR: - lcd.Clear (LCD_COLOR_WHITE); - lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Test Couleur", LEFT_MODE); - RETOUR.Draw(0xFFFF0000,0); - while(etat==TEST_COULEUR) { - if(RETOUR.Touched()) { - while (RETOUR.Touched()); - etat=DEMO; - lcd.Clear (LCD_COLOR_WHITE); - } - } - break; - - case TEST_MOTEUR: - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - lcd.Clear (LCD_COLOR_WHITE); - lcd.Clear (LCD_COLOR_WHITE); - lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Test Moteur", LEFT_MODE); - RETOUR.Draw(0xFFFF0000,0); - TEST_A.Draw(BLEU, BLANC); - TEST_B.Draw(BLEU, BLANC); - while(etat==TEST_MOTEUR) { - if(RETOUR.Touched()) { - while (RETOUR.Touched()); - etat=DEMO; - } else if(TEST_A.Touched()) { - while (TEST_A.Touched()); - BendRadius(150,1800,1,0); - TEST_A.Draw(BLEU, BLANC); - } else if(TEST_B.Touched()) { - while (TEST_B.Touched()); - BendRadius(150,1800,0,0); - TEST_B.Draw(BLEU, BLANC); - } - } - break; ///////////////////////////////////////////FIN DES DEMOS///////////////////////////////////////////////// - - - case SELECT_SIDE : // CHOIX DU COTE DU TERRAIN + INVERSION DE LA STRAT SI COTE ORANGE+ ENVOI DU COTE A LA CARTE CAPTEUR/ACTIONNEURS - lcd.Clear(LCD_COLOR_WHITE); - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - - lcd.DisplayStringAt(70, LINE(0), (uint8_t *)"Choisir le cote", LEFT_MODE); - COTE_JAUNE.Draw(JAUNE, 0); - COTE_VIOLET.Draw(VIOLET, 0); - RETOUR.Draw(LCD_COLOR_RED, 0); - - - while (etat == SELECT_SIDE) { - canProcessRx(); - if(COTE_JAUNE.Touched()) { - Cote = 0x0; - InversStrat = Cote; - etat = TACTIQUE; - CANMessage trame_Tx = CANMessage(); - trame_Tx.len = 1; - trame_Tx.format = CANStandard; - trame_Tx.type = CANData; - trame_Tx.id=CHOICE_COLOR; - trame_Tx.data[0]=Cote; - can2.write(trame_Tx); - while(COTE_JAUNE.Touched()); - - } - - if(COTE_VIOLET.Touched()) { - Cote = 0x1; - InversStrat= Cote; - etat = TACTIQUE; - CANMessage trame_Tx = CANMessage(); - trame_Tx.len = 1; - trame_Tx.format = CANStandard; - trame_Tx.type = CANData; - trame_Tx.id=CHOICE_COLOR; - trame_Tx.data[0]=Cote; - can2.write(trame_Tx); - while(COTE_VIOLET.Touched()); - } - - if(RETOUR.Touched()) { - etat = CHOIX; - while(RETOUR.Touched()); - } - } - - break; - - case TACTIQUE : //AFFICHE LA LISTE DES STRATS AFIN DE SELECTIONNER CELLE VOULUE - if (Cote == 0) { - lcd.Clear(JAUNE); - lcd.SetBackColor(JAUNE); - } else if (Cote == 1) { - lcd.Clear(VIOLET); - lcd.SetBackColor(VIOLET); - } else { - lcd.Clear(BLEU); - lcd.SetBackColor(BLEU); - } - - lcd.SetTextColor(LCD_COLOR_BLACK); - - lcd.DisplayStringAt(20, LINE(0), (uint8_t *)"Choisir une strategie", LEFT_MODE); - - nbStrat = Bouton_Strat(); // retourne valeur de Strategie si bouton strat renvoi -1 on reviens en arriere - if (nbStrat == -1) { - etat = SELECT_SIDE; - } else { - etat = DETAILS; - } - wait(0.1); - break; - - case DETAILS : //SECONDE VALIDATION DE LA STRAT - lcd.Clear(LCD_COLOR_WHITE); - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - CHECK.Draw(VERT); - RETOUR.Draw(LCD_COLOR_RED); - - SelectionStrat(nbStrat); //affiche la stratégie selectionnée - - while (etat == DETAILS) { - canProcessRx(); - if (CHECK.Touched()) { - if(gameEtat == ETAT_CONFIG) { - gameEtat = ETAT_GAME_INIT; - etat=LECTURE; - - } - while(CHECK.Touched()); - } - - if(RETOUR.Touched()) { - etat = TACTIQUE; - while(RETOUR.Touched()); - } - } - break; - - - case LECTURE : - break; - case AFF_WAIT_JACK : //FONCTIONS D'AFFICHAGE DE L'ATTENTE DU JACK - lcd.Clear(BLANC); - lcd.SetBackColor(LCD_COLOR_WHITE); - lcd.SetTextColor(LCD_COLOR_BLACK); - - if (Cote == 0) { - lcd.Clear(VERT); - lcd.SetBackColor(VERT); - } else if (Cote == 1) { - lcd.Clear(ORANGE); - lcd.SetBackColor(ORANGE); - } else { - lcd.Clear(VERT); - lcd.SetBackColor(VERT); - } - canProcessRx(); - lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"En attente du Jack", CENTER_MODE); - etat=WAIT_JACK; - break; - - case WAIT_JACK: //VERITABLE ATTENTE DU JACK - break; - - case COMPTEUR: //PEUT AFFICHER UN COMPTEUR DU TEMPS RESTANT AVANT LA FIN DE LA PARTIE OU BIEN TRES UTILE POUR PRINT DES VARIABLES CHAQUE SEC EX: gameEtat - cptf=gameTimer.read(); - lcd.SetTextColor(LCD_COLOR_BLACK); - cpt=(int)cptf; - if(cpt != cpt1) { - lcd.Clear(VERT); - // affichage_compteur(100-cpt); - //affichage_compteur(SCORE_PR); - affichage_var(SCORE_PR); - } - cpt1=cpt; - flag_timer=0; - - - lcd.SetBackColor(LCD_COLOR_WHITE); - - break; - - case FIN : //AFFICHAGE DE FIN AVEC LE SCORE FINAL - lcd.Clear (LCD_COLOR_WHITE); - lcd.SetBackColor(LCD_COLOR_WHITE); - - //affichage_compteur(SCORE_PR); - affichage_var(SCORE_PR); - - while(1); // force le redemarage du robot - //break; - - } -} - /****************************************************************************************/ @@ -844,7 +158,7 @@ gameTimer.stop(); gameTimer.reset(); gameEtat = ETAT_END;//Fin du temps - etat=FIN; + strat_etat_s=FIN; } if(lastEtat != gameEtat || debugetatTimer.read_ms() >= 1000) { @@ -885,7 +199,7 @@ if(countAliveCard >= NOMBRE_CARTES) { gameEtat = ETAT_CONFIG; SendRawId(ECRAN_ALL_CHECK); - flag=1; + flag_check_carte=1; //tactile_printf("Selection couleur et strategie"); } else { @@ -904,7 +218,7 @@ if(checkCurrent >= NOMBRE_CARTES) { if(countAliveCard == NOMBRE_CARTES) { gameEtat = ETAT_CONFIG; - flag=1; + flag_check_carte=1; } else { gameEtat = ETAT_WAIT_FORCE; waitingAckFrom = ECRAN_ALL_CHECK; @@ -943,10 +257,10 @@ gameEtat = ETAT_GAME_WAIT_FOR_JACK; Debug_Audio(3,7); - if (etat == TEST_MOTEUR|| etat ==TEST_VENTOUSE || etat == TEST_COULEUR || etat ==TEST_SERVO_BRAS) { + if (strat_etat_s == TEST_MOTEUR|| strat_etat_s ==TEST_VENTOUSE || strat_etat_s == TEST_COULEUR || strat_etat_s ==TEST_SERVO_BRAS) { SendRawId(DEBUG_FAKE_JAKE); } else { - etat = AFF_WAIT_JACK; + strat_etat_s = AFF_WAIT_JACK; } //tactile_printf("Attente du JACK."); setAsservissementEtat(1);//On réactive l'asservissement @@ -1124,67 +438,6 @@ actionPrecedente = instruction.order; switch(instruction.order) { - case MV_BEZIER: { - static vector< vector<short> >P1; - static vector< vector<short> >C1; - static vector< vector<short> >C2; - static int i = 0; - - //Ajoute une ligne aux tableaux pour chaques courbes de la trajectoire - P1.push_back(vector<short>()); //Nouvelle ligne - C1.push_back(vector<short>()); //Nouvelle ligne - C2.push_back(vector<short>()); //Nouvelle ligne - - P1[i].push_back(instruction.arg1); //Nouvelle colonne X - C1[i].push_back(instruction.arg3); //Nouvelle colonne X - C2[i].push_back(instruction.arg5); //Nouvelle colonne X - - if(InversStrat == 1 && ingnorInversionOnce == 0) { - P1[i].push_back(3000-instruction.arg2); //Nouvelle colonne Y - C1[i].push_back(3000-instruction.arg4); //Nouvelle colonne Y - C2[i].push_back(3000-instruction.arg6); //Nouvelle colonne Y - } else { - P1[i].push_back(instruction.arg2); //Nouvelle colonne Y - C1[i].push_back(instruction.arg4); //Nouvelle colonne Y - C2[i].push_back(instruction.arg6); //Nouvelle colonne Y - } - - i++; - - if(instruction.nextActionType == WAIT) { //Si il n'y a qu'une seule courbe ou que c'est la dernière courbe de la trajectoire - //Passage des points dans des variables temporaires pour pouvoir clear les vector avant d'être bloqué dans l'attente de l'ack - //Empeche les vector de ne pas être reset si l'ack n'est pas reçu avant la fin du match - int nbCourbes = P1.size(); - short P1_temp[nbCourbes][2]; - short C1_temp[nbCourbes][2]; - short C2_temp[nbCourbes][2]; - - for(int j=0; j<nbCourbes; j++) { - for(int i=0; i<2; i++) { - P1_temp[j][i] = P1[j][i]; - C1_temp[j][i] = C1[j][i]; - C2_temp[j][i] = C2[j][i]; - } - } - - //Clear des tableaux de points pour la prochaine trajectoire - P1.clear(); - C1.clear(); - C2.clear(); - i = 0; - - //Calcul de la courbe et envoi des valeurs - if(instruction.direction == FORWARD) { - courbeBezier(nbCourbes, P1_temp, C1_temp, C2_temp, 0); - } else if(instruction.direction == BACKWARD) { - courbeBezier(nbCourbes, P1_temp, C1_temp, C2_temp, 1); - } - - waitingAckID = ASSERVISSEMENT_BEZIER; - waitingAckFrom = ACKNOWLEDGE_MOTEUR; - } - break; - } case MV_COURBURE://C'est un rayon de courbure Debug_Audio(3,6); float alpha=0, theta=0; @@ -1595,7 +848,7 @@ actual_instruction = instruction.nextLineError; gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION; } else { - gameEtat = ETAT_GAME_PROCESS_INSTRUCTION;//On retourne dans l'etat d'envois de l'instruction + gameEtat = ETAT_GAME_PROCESS_INSTRUCTION;//On retourne dans l'strat_etat_s d'envois de l'instruction } } break; @@ -1710,7 +963,7 @@ switch(identifiant) { case ALIVE_MOTEUR: - if (etat == ATT) { + if (strat_etat_s == ATT) { lcd.SetTextColor(LCD_COLOR_LIGHTGREEN); lcd.FillRect(0,400,400,150); @@ -1721,7 +974,7 @@ break; case ALIVE_BALISE: - if (etat == ATT) { + if (strat_etat_s == ATT) { lcd.SetTextColor(LCD_COLOR_LIGHTGREEN); lcd.FillRect(0,600,400,150); //carte AX12 @@ -1732,7 +985,7 @@ break; case RESET_IHM: - etat = CHOIX; + strat_etat_s = CHOIX; break; case DEBUG_FAKE_JAKE://Permet de lancer le match à distance @@ -1750,7 +1003,7 @@ if(waitingAckFrom == msgRxBuffer[FIFO_lecture].id) { waitingAckFrom = 0;//C'est la bonne carte qui indique qu'elle est en ligne } - flag=1; + flag_check_carte=1; break; case ASSERVISSEMENT_ERROR_MOTEUR://erreur asservissement @@ -1857,7 +1110,7 @@ case BALISE_END_DANGER: SendAck(ACKNOWLEDGE_BALISE, BALISE_END_DANGER); - balise_end_danger(&instruction,&dodgeq,&gameEtat,target_x_robot,target_y_robot,target_theta_robot, theta_robot,x_robot,y_robot); + balise_end_danger(&instruction,&dodgeq,target_x_robot,target_y_robot,target_theta_robot, theta_robot,x_robot,y_robot); break; case RECEPTION_DATA: @@ -1945,131 +1198,7 @@ -/****************************************************************************************/ -/* FUNCTION NAME: Bouton_Strat */ -/* DESCRIPTION : Sélection de la strat sur le lcd puis envoie sur CAN (à modifier!) */ -/****************************************************************************************/ -signed char Bouton_Strat (void) -{ - Button STRAT_1 (0, 30, 190, 110, strat_sd[0]); - Button STRAT_2 (210, 30, 190, 110, strat_sd[1]); - Button STRAT_3 (0, 150, 190, 110, strat_sd[2]); - Button STRAT_4 (210, 150, 190, 110, strat_sd[3]); - Button STRAT_5 (0, 270, 190, 110,strat_sd[4]); - Button STRAT_6 (210, 270, 190, 110, strat_sd[5]); - Button STRAT_7 (0, 390, 190, 110, strat_sd[6]); - Button STRAT_8 (210, 390, 190, 110, strat_sd[7]); - Button STRAT_9 (0, 510, 190, 110, strat_sd[8]); - Button STRAT_10 (210, 510, 190, 110, strat_sd[9]); - Button RETOUR (0, 680, 400, 110, "--Precedent--"); - //Definition des boutons - Ack_strat = 0; - Strat = 0; - STRAT_1.Draw(0xFFF0F0F0, 0); - STRAT_2.Draw(0xFFF0F0F0, 0); - STRAT_3.Draw(0xFFF0F0F0, 0); - STRAT_4.Draw(0xFFF0F0F0, 0); - STRAT_5.Draw(0xFFF0F0F0, 0); - STRAT_6.Draw(0xFFF0F0F0, 0); - STRAT_7.Draw(0xFFF0F0F0, 0); - STRAT_8.Draw(0xFFF0F0F0, 0); - STRAT_9.Draw(0xFFF0F0F0, 0); - STRAT_10.Draw(0xFFF0F0F0, 0); - RETOUR.Draw(0xFFFF0000, 0); - - while(Ack_strat == 0) { - canProcessRx(); - CANMessage msgTx=CANMessage(); - //msgTx.id=ECRAN_CHOICE_STRAT; - if (RETOUR.Touched()) - return -1; - while(RETOUR.Touched()); - //////////////////////////////STRATEGIE N°1 - if (STRAT_1.Touched()) { - Strat = 0; - //msgTx.data[0] = 0x1; - //can2.write(msgTx); - while(STRAT_1.Touched()); - Ack_strat =1; - } - /////////////////////////////STRATEGIE N°2 - if (STRAT_2.Touched()) { - Strat = 1; - //msgTx.data[0] = 0x2; - //can2.write(msgTx); - while(STRAT_2.Touched()); - Ack_strat =1; - } - //////////////////////////////STRATEGIE N°3 - if (STRAT_3.Touched()) { - Strat = 2; - //msgTx.data[0] = 0x3; - //can2.write(msgTx); - while(STRAT_3.Touched()); - Ack_strat =1; - } - /////////////////////////////STRATEGIE N°4 - if (STRAT_4.Touched()) { - Strat = 3; - //msgTx.data[0] = 0x4; - //can2.write(msgTx); - while(STRAT_4.Touched()); - Ack_strat =1; - } - ///////////////////////////////STRATEGIE N°5 - if (STRAT_5.Touched()) { - Strat = 4; - //msgTx.data[0] = 0x5; - //can2.write(msgTx); - while(STRAT_5.Touched()); - Ack_strat =1; - } - ////////////////////////////////STRATEGIE N°6 - if (STRAT_6.Touched()) { - Strat = 5; - //msgTx.data[0] = 0x6; - //can2.write(msgTx); - while(STRAT_6.Touched()); - Ack_strat =1; - } - /////////////////////////////////STRATEGIE N°7 - if (STRAT_7.Touched()) { - Strat = 6; - //msgTx.data[0] = 0x7; - //can2.write(msgTx); - while(STRAT_7.Touched()); - Ack_strat =1; - } - /////////////////////////////////STRATEGIE N°8 - if (STRAT_8.Touched()) { - Strat = 7; - //msgTx.data[0] = 0x8; - //can2.write(msgTx); - while(STRAT_8.Touched()); - Ack_strat =1; - } - /////////////////////////////////STRATEGIE N°9 - if (STRAT_9.Touched()) { - Strat = 8; - //msgTx.data[0] = 0x9; - //can2.write(msgTx); - while(STRAT_9.Touched()); - Ack_strat =1; - } - ///////////////////////////////////STRATEGIE N°10 - if (STRAT_10.Touched()) { - Strat = 9; - //msgTx.data[0] = 0xA; - //can2.write(msgTx); - while(STRAT_10.Touched()); - Ack_strat =1; - } - - } - return Strat; - -} void affichage_compteur (int nombre) {
--- a/Strategie/Strategie.h Tue Jun 23 13:31:38 2020 +0000 +++ b/Strategie/Strategie.h Wed Jun 24 09:39:42 2020 +0000 @@ -12,6 +12,26 @@ FIN_POS, }E_Stratposdebut; +typedef enum { + INIT, + ATT, + CHOIX, + DEMO, + TEST_MOTEUR, + TEST_COULEUR, + TEST_SERVO_BRAS, + TEST_VENTOUSE, + TEST_ELECTROV, + TEST_AUD, + SELECT_SIDE, + TACTIQUE, + DETAILS, + LECTURE, + LAUNCH, + AFF_WAIT_JACK, + WAIT_JACK, + FIN} T_etat; + typedef enum { ETAT_CHECK_CARTE_SCREEN, //Envoie check carte screen @@ -33,11 +53,10 @@ ETAT_END, ETAT_END_LOOP, } E_stratGameEtat; - +extern E_stratGameEtat gameEtat; +extern T_etat strat_etat_s; void canProcessRx(void); void Strategie(void); -void automate_etat_ihm(void); -void init_lcd(void); short recalageAngulaireCapteur(void); short recalageDistanceX(void); short recalageDistanceY(void);
--- a/Strategie/liaison_Bluetooth.lib Tue Jun 23 13:31:38 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://os.mbed.com/teams/CRAC-Team/code/liaison_Bluetooth/#1c3ff1ff1bc0
--- a/main.cpp Tue Jun 23 13:31:38 2020 +0000 +++ b/main.cpp Wed Jun 24 09:39:42 2020 +0000 @@ -16,7 +16,6 @@ unsigned short waitingAckFrom=0;//La provenance du ack attendu unsigned short waitingId=0; char modeTelemetre; // Si à 1, indique que l'on attend une reponse du telemetre - DigitalOut led1(LED1);//Led d'indication de problème, si elle clignote, c'est pas bon DigitalOut led2(LED2);//Led d'indication de problème, si elle clignote, c'est pas bon DigitalOut led3(LED3);//Led d'indication de problème, si elle clignote, c'est pas bon