FRC_equipe1 / Mbed 2 deprecated FRC_2019

Dependencies:   mbed

Revision:
34:cea05fa02f37
Parent:
33:c70ded6dd380
Child:
35:6c6321b97ae6
--- a/main.cpp	Fri Jun 07 11:42:29 2019 +0000
+++ b/main.cpp	Fri Jun 07 14:20:02 2019 +0000
@@ -22,62 +22,52 @@
     Robot robot;
     
     while(1)
-    {
-        automate_run(robot);
-        // Trois balles en début de partie à l'aveugle
-        
-        /*if( !automate_aveugle(robot, ejecte) );
-        else if(automate_fin_de_partie(robot))
-        {
-            robot.stopRouleau();
-            break;
-        }
-            
-        automate_ejecte(robot, ejecte);*/
-        
-        // Gestion du lancer de balle
-        /*automate_testABalle(robot, ejecte);
-        automate_ejecte(robot, ejecte);
-        
-        // Recherche de balles
-        automate_testLasers(robot);
-        if(!robot.aBalle())
-            automate_deplacement(robot);
-        
-        // Gestion de la vitesse en fonction de l'état actuel
-        automate_vitesse(robot);*/
-    }
+        automate_run(robot);   
 }
 
 void automate_run(Robot& robot)
 {
     bool ejecte = false;
-    typedef enum{ATTENTE,RUN} type_etat;
+    typedef enum{ATTENTE, RUN_AVEUGLE, RECHERCHE_BALLES, FIN_PARTIE} type_etat;
     static type_etat etat = ATTENTE;
     static Timer T_partie;
     
+    if(T_partie.read() > 80.0f)
+        etat = FIN_PARTIE;
+    
     switch(etat)
     {
         case ATTENTE:
             if(!Robot::Jack)
             {
                 T_partie.start();
-                etat = RUN;
+                etat = RUN_AVEUGLE;
             }
             break;
-        case RUN:
-            if(T_partie.read() < 30.0f)
-            {
-                /*while( !*/automate_aveugle(robot, ejecte)/* )*/;
-                automate_ejecte(robot, ejecte);
-            }
-            else
-            {
-                T_partie.stop();
-                robot.stopRouleau();
-                automate_fin_de_partie(robot);
-            }
+            
+        case RUN_AVEUGLE:
+            automate_aveugle(robot, ejecte);
+            automate_ejecte(robot, ejecte);
             break;
+            
+        case RECHERCHE_BALLES:
+            // Gestion du lancer de balle
+            automate_testABalle(robot, ejecte);
+            automate_ejecte(robot, ejecte);
+            
+            // Recherche de balles
+            automate_testLasers(robot);
+            if(!robot.aBalle())
+                automate_deplacement(robot);
+            
+            // Gestion de la vitesse en fonction de l'état actuel
+            automate_vitesse(robot);
+            break;
+            
+        case FIN_PARTIE:
+            T_partie.stop();
+            robot.stopRouleau();
+            break; 
     }
 }
 
@@ -115,94 +105,44 @@
     return false;
 }
 
-/*bool automate_arretUrgence(Robot& robot)
-{
-    typedef enum{RAS, PERCEPTION, ARRET_URGENCE, ATTENTE_REPLACEMENT} type_etat;
-    static type_etat etat = RAS;
-    
-    // Timer pour la durée sur la ligne blanche
-    static Timer timerCNY;
-    
-    switch(etat)
-    {
-        case RAS :
-            if( robot.surBlanc( Robot::CNY_GAUCHE ) && robot.surBlanc( Robot::CNY_DROIT )){
-                etat = PERCEPTION;
-                timerCNY.start();
-            }
-            break;
-            
-        case PERCEPTION :
-            if( robot.surBlanc( Robot::CNY_GAUCHE ) && robot.surBlanc( Robot::CNY_DROIT ) && timerCNY.read() >= 0.15f )
-                etat = ARRET_URGENCE;
-            else if( timerCNY.read() >= 0.15f ){
-                etat = RAS;
-                timerCNY.stop();
-                timerCNY.reset();
-            }
-            break;
-            
-        case ARRET_URGENCE :
-            timerCNY.stop();
-            timerCNY.reset();
-            
-            etat = ATTENTE_REPLACEMENT;
-            
-            return true;
-            
-        case ATTENTE_REPLACEMENT :
-            if( !robot.surBlanc( Robot:: CNY_GAUCHE )  && !robot.surBlanc( Robot::CNY_DROIT ))
-                etat = RAS;
-            break;
-    }
-    
-    return false;
-}*/
-
 bool automate_aveugle(Robot& robot, bool& ejecte)
 {
-    typedef enum{STRAIGHT1, PREMIER_TOURNE_D, TOURNE_D, STRAIGHT2, TOURNE_G} type_etat;
+    typedef enum{STRAIGHT1, TOURNE_G, STRAIGHT2, STRAIGHT3, FIN_AVEUGLE} type_etat;
     static type_etat etat = STRAIGHT1;
     
-    static Timer T_ejecte;
-    static int cptBalles = 0;
-    
-    if(cptBalles == 2)
-        return true;
-    
     switch(etat)
     {
         case STRAIGHT1:
             if(robot.avance(1850 - DIST_CENTRE))
-            {
-                ejecte = true;
-                etat = PREMIER_TOURNE_D;
-            }
-            break;
-            
-        case PREMIER_TOURNE_D:
-            if(robot.tourne(ANGLE_DROIT))
-                etat = STRAIGHT2;
-            break;
-            
-        case TOURNE_D:                
-            if(robot.tourne(ANGLE_DROIT))
-                etat = STRAIGHT2;
-            break;
-            
-        case STRAIGHT2:
-            if(robot.avance(1500))
                 etat = TOURNE_G;
             break;
             
         case TOURNE_G:
-            if(robot.tourne(-ANGLE_DROIT))
+            if( robot.tourne(-100) )
+            {
+                ejecte = true;
+                etat = STRAIGHT2;
+            }
+            break;
+            
+        case STRAIGHT2:
+            if( robot.GoToXYT(2000, 1850, 180) )
             {
                 ejecte = true;
-                cptBalles++;
-                etat = TOURNE_D;
+                etat = STRAIGHT3;
             }
             break;
+            
+        case STRAIGHT3:
+            if( robot.GoToXYT(3500, 1850, 50) )
+            {
+                ejecte = true;
+                etat = FIN_AVEUGLE;
+            }
+            break;
+            
+        case FIN_AVEUGLE:
+            return true;
     }
     
     return false;
@@ -317,6 +257,7 @@
             
         case CORRECT_DROITE:
             robot.tourne(450);
+            break;
             
         case GO_STRAIGHT:
             robot.avance();