Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of CRAC-Strat_2017_homologation_petit_rob by
Diff: Strategie/Strategie.cpp
- Revision:
- 1:116040d14164
- Parent:
- 0:ad97421fb1fb
- Child:
- 2:8d8e2cf798a3
--- 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;
