Programme carte strategie (disco)

Dependencies:   mbed SerialHalfDuplex SDFileSystem DISCO-F469NI_portrait liaison_Bluetooth ident_crac

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;