pour trouver l'automate de reception can
Fork of CRAC-Strat_copy by
Diff: Strategie/Strategie.cpp
- Revision:
- 1:116040d14164
- Parent:
- 0:ad97421fb1fb
- Child:
- 2:8d8e2cf798a3
diff -r ad97421fb1fb -r 116040d14164 Strategie/Strategie.cpp --- a/Strategie/Strategie.cpp Wed Apr 13 22:04:54 2016 +0000 +++ b/Strategie/Strategie.cpp Fri Apr 15 10:49:40 2016 +0000 @@ -21,6 +21,8 @@ unsigned char checkCurrent = 0; unsigned char countAliveCard = 0; +unsigned char InversStrat = 0;//Si à 1, indique que l'on part de l'autre cote de la table(inversion des Y) + void chronometre_ISR (void) { @@ -28,20 +30,23 @@ SendRawId(GLOBAL_GAME_END);//Indication fin de match gameTimer.stop();//Arret du timer -#if ROBOT_TYPE == ROBOT_BIG +#ifdef ROBOT_BIG doFunnyAction(); #endif - gameEtat = ETAT_END_LOOP; + while(1);//On bloque la programme dans l'interruption } void automate_process(void) { static struct S_Instruction instruction; + static unsigned char AX12_enchainement = 0; + static unsigned char MV_enchainement = 0; signed char localData1 = 0; signed short localData2 = 0; unsigned short localData3 = 0; signed short localData4 = 0; + unsigned char localData5 = 0; if(gameTimer.read_ms() >= 88000) {//Fin du match (On autorise 2s pour déposer des éléments gameTimer.stop(); @@ -160,25 +165,22 @@ Il est aussi possible d'envoyer les ordres de debug */ break; - case ETAT_GAME_START: + case ETAT_GAME_INIT: //On charge la liste des instructions strcpy(cheminFileStart,"/local/test.txt");//On ouvre le fichier test.txt loadAllInstruction();//Mise en cache de toute les instructions - fakeJack.reset();//Utiliser pour simuler le jack - fakeJack.start();//Utiliser pour simuler le jack gameEtat = ETAT_GAME_WAIT_FOR_JACK; SendRawId(ECRAN_ACK_START_MATCH); tactile_printf("Attente du JACK."); break; case ETAT_GAME_WAIT_FOR_JACK: //TODO Attendre le jack - if(fakeJack.read_ms() > 3000) {//Utiliser pour simuler le jack - fakeJack.stop(); - gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION; - gameTimer.reset(); - gameTimer.start(); - chronoEnd.attach(&chronometre_ISR,90); - } + break; + case ETAT_GAME_START: + gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION; + gameTimer.reset(); + gameTimer.start(); + chronoEnd.attach(&chronometre_ISR,90); break; case ETAT_GAME_LOAD_NEXT_INSTRUCTION: /* @@ -195,6 +197,7 @@ //actual_instruction++; } screenChecktry = 0; + wait_ms(100); break; case ETAT_GAME_PROCESS_INSTRUCTION: /* @@ -213,9 +216,18 @@ waitingAckID = ASSERVISSEMENT_RECALAGE; waitingAckFrom = ACKNOWLEDGE_MOTEUR; if(instruction.nextActionType == ENCHAINEMENT) { - //TODO - flag dans le trame pour indiquer l'enchainement - + MV_enchainement++; + localData5 = 1; + } else { + if(MV_enchainement > 0) { + localData5 = 2; + MV_enchainement = 0; + } else { + localData5 = 0; + } } + localData2 = (((instruction.direction == FORWARD)?1:-1)*instruction.arg1); + GoStraight(localData2, 0, 0, localData5); break; case MV_TURN: if(instruction.direction == RELATIVE) { @@ -251,12 +263,11 @@ //L'action est spécifique } else { //C'est un AX12 qu'il faut bouger + AX12_setGoal(instruction.arg1,instruction.arg3,instruction.arg2); + AX12_enchainement++; } - - //TODO - mettre l'ACK à jour - if(instruction.nextActionType == ENCHAINEMENT) { - //TODO - flag dans le trame pour indiquer l'enchainement - } + waitingAckFrom = 0; + waitingAckID = 0; break; default: //Instruction inconnue, on l'ignore @@ -270,6 +281,10 @@ screenChecktry++;//On incrèment le conteur de tentative de 1 cartesCheker.reset();//On reset le timeOut cartesCheker.start(); + if(AX12_enchainement > 0) { + AX12_processChange();//Il faut lancer le déplacement des AX12 + AX12_enchainement = 0; + } } else {//C'est un enchainement actual_instruction = instruction.nextLineOK;//On indique que l'on va charger l'instruction suivante gameEtat = ETAT_GAME_LOAD_NEXT_INSTRUCTION;//C'est un enchainement, on charge directement l'instruction suivante @@ -318,7 +333,8 @@ waitingAckFrom = INSTRUCTION_END_MOTEUR; break; case ACTION: - //TODO + waitingAckFrom = SERVO_AX12_DONE; + waitingAckID = instruction.arg1; break; default: break; @@ -385,6 +401,13 @@ case ASSERVISSEMENT_STOP: break; + + case DEBUG_FAKE_JAKE: + if(gameEtat == ETAT_GAME_WAIT_FOR_JACK) { + gameEtat = ETAT_GAME_START; + } + break; + case ALIVE_BALISE: case ALIVE_MOTEUR: case ALIVE_IHM: @@ -405,7 +428,7 @@ waitingAckID = 0; } break; -#if ROBOT_TYPE == ROBOT_BIG +#ifdef ROBOT_BIG case ODOMETRIE_BIG_POSITION: #else case ODOMETRIE_SMALL_POSITION: @@ -417,7 +440,7 @@ case ECRAN_START_MATCH: if(gameEtat == ETAT_CONFIG) { - gameEtat = ETAT_GAME_START; + gameEtat = ETAT_GAME_INIT; } break; case SERVO_AX12_SETGOAL: @@ -428,6 +451,9 @@ case SERVO_AX12_PROCESS: AX12_processChange(); break; + case SERVO_AX12_DONE: + AX12_notifyCANEnd(((unsigned short)(msgRxBuffer[FIFO_lecture].data[0]))); + break; } FIFO_lecture=(FIFO_lecture+1)%SIZE_FIFO;