Programme carte strategie (disco)
Dependencies: mbed SerialHalfDuplex SDFileSystem DISCO-F469NI_portrait liaison_Bluetooth ident_crac
Diff: Strategie/Strategie.cpp
- Revision:
- 5:dcd817534b57
- Parent:
- 4:88431b537477
- Child:
- 6:eddfa414fd11
diff -r 88431b537477 -r dcd817534b57 Strategie/Strategie.cpp --- a/Strategie/Strategie.cpp Sun Apr 17 14:03:03 2016 +0000 +++ b/Strategie/Strategie.cpp Sat Apr 23 09:16:14 2016 +0000 @@ -1,12 +1,14 @@ #include "Strategie.h" -E_stratGameEtat gameEtat = ETAT_CONFIG;//ETAT_CHECK_CARTE_SCREEN; +E_stratGameEtat gameEtat = ETAT_CHECK_CARTE_SCREEN; E_stratGameEtat lastEtat = ETAT_CHECK_CARTE_SCREEN; unsigned char screenChecktry = 0; Timer cartesCheker;//Le timer pour le timeout de la vérification des cartes Timer fakeJack; Timer gameTimer; Timer debugetatTimer; +Timer timeoutWarning; +Timer timeoutWarningWaitEnd; Timeout chronoEnd;//permet d'envoyer la trame CAN pour la fin unsigned short waitingAckID = 0;//L'id du ack attendu @@ -16,13 +18,20 @@ signed short x_robot,y_robot,theta_robot;//La position du robot +#ifdef ROBOT_BIG unsigned short id_check[NOMBRE_CARTES]= {CHECK_BALISE,CHECK_MOTEUR}; unsigned short id_alive[NOMBRE_CARTES]= {ALIVE_BALISE,ALIVE_MOTEUR}; +#else +unsigned short id_check[NOMBRE_CARTES]= {CHECK_BALISE,CHECK_MOTEUR,CHECK_ACTIONNEURS}; +unsigned short id_alive[NOMBRE_CARTES]= {ALIVE_BALISE,ALIVE_MOTEUR,ALIVE_ACTIONNEURS}; +#endif unsigned char checkCurrent = 0; unsigned char countAliveCard = 0; unsigned char InversStrat = 1;//Si à 1, indique que l'on part de l'autre cote de la table(inversion des Y) +unsigned char countRobotNear = 0;//Le nombre de robot à proximité + /****************************************************************************************/ /* FUNCTION NAME: chronometre_ISR */ /* DESCRIPTION : Interruption à la fin des 90s du match */ @@ -128,6 +137,7 @@ if(countAliveCard >= NOMBRE_CARTES) { gameEtat = ETAT_CONFIG; SendRawId(ECRAN_ALL_CHECK);//On dit à l'IHM que toutes les cartes sont en ligne + tactile_printf("Selection couleur et strategie"); } else { gameEtat = ETAT_WAIT_FORCE;//Passage en attente de forçage du lancement waitingAckFrom = ECRAN_ALL_CHECK; @@ -389,6 +399,24 @@ break; + case ETAT_WARNING_TIMEOUT://Attente de la trame fin de danger ou du timeout de 2s + if(timeoutWarning.read_ms() >= 2000)//ça fait plus de 2s, il faut changer de stratégie + { + gameEtat = ETAT_WARNING_SWITCH_STRATEGIE; + } + break; + case ETAT_WARING_END_BALISE_WAIT://Attente d'une seconde apres la fin d'un End Balise pour etre sur que c'est bon + + break; + case ETAT_WARNING_END_LAST_INSTRUCTION://trouver le meilleur moyen de reprendre l'instruction en cours + + break; + case ETAT_WARNING_SWITCH_STRATEGIE://Si à la fin du timeout il y a toujours un robot, passer à l'instruction d'erreur + actual_instruction = instruction.nextLineError; + gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION; + break; + + case ETAT_END: @@ -463,10 +491,10 @@ case SERVO_AX12_SETGOAL: if(AX12_isLocal(msgRxBuffer[FIFO_lecture].data[0])) 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)); - + break; case SERVO_AX12_PROCESS: - AX12_processChange(); + AX12_processChange(1); break; case SERVO_AX12_DONE: AX12_notifyCANEnd(((unsigned short)(msgRxBuffer[FIFO_lecture].data[0]))); @@ -503,6 +531,21 @@ can1.write(msgTx); } break; + case BALISE_STOP: + SendAck(ACKNOWLEDGE_BALISE, BALISE_STOP); + wait_ms(10); + SendRawId(ASSERVISSEMENT_STOP); + gameEtat = ETAT_WARNING_TIMEOUT; + timeoutWarning.reset(); + timeoutWarning.start();//Reset du timer utiliser par le timeout + break; + case BALISE_END_DANGER: + if(gameEtat == ETAT_WARNING_TIMEOUT) { + timeoutWarningWaitEnd.reset(); + timeoutWarningWaitEnd.start(); + gameEtat = ETAT_WARING_END_BALISE_WAIT; + } + break; } FIFO_lecture=(FIFO_lecture+1)%SIZE_FIFO;