m

Revision:
0:a89fe490343e
Child:
1:785b37686185
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Strategie.cpp	Mon May 20 23:04:57 2019 +0000
@@ -0,0 +1,325 @@
+#include "Strategie.h"
+
+char bufferScore[3]={'0','0','0'}; 
+//extern I2CSlave i2c;
+bool typeMovement = DEPLACEMENT_AVANT;
+
+extern int distanceUltrasonGauche;
+extern int distanceUltrasonDroit;
+extern int distanceUltrasonArriere;
+
+extern int distanceTOF1;
+extern int distanceTOF2;
+extern int distanceTOF3;
+extern int distanceTOF4;
+extern int distanceTOF5;
+
+
+extern bool stopCapteurs;
+
+
+void updateAndWriteScore(char n1, char n2, char n3)
+{
+    bufferScore[0] = n1;
+    bufferScore[1] = n2;
+    bufferScore[2] = n3;
+    write(bufferScore);
+}
+
+void LectureI2CCarteCapteur(deplacement robot)
+{
+    traitementBufferCapteurs();
+    if(AnalyseDistance(distanceUltrasonGauche, distanceUltrasonDroit, distanceUltrasonArriere, typeMovement) == ROBOT)
+    {
+            if( ((distanceUltrasonGauche <= 300)  || (distanceUltrasonDroit <= 300)) && (typeMovement == DEPLACEMENT_AVANT) )
+            {
+                    stopCapteurs = true;           
+            }
+            else if ( (distanceUltrasonArriere <= 300) && (typeMovement == DEPLACEMENT_ARRIERE) )
+            {
+                    stopCapteurs = true;
+            }
+            else 
+            {
+                    stopCapteurs = false;
+            }
+    }
+    else
+    {
+        stopCapteurs = false;   
+    }
+}
+
+void strategieClassiqueViolet(deplacement robot, Pompe pompe, Demarreur demarreur, Bras brasGauche, Bras brasDroit, BrasPousser brasPousserGauche,  BrasPousser brasPousserDroit)
+{
+    write(bufferScore);
+    Timer tempsMatch; // timer en seconde
+    int etapeMatch = 0;
+    while(demarreur.getState() == false)
+    {
+        //on attend
+        //pc.printf("On attend le depart du Robot Thanos\n\r");
+    }
+    lancerTimerEcran();
+    tempsMatch.start();
+    while(tempsMatch  <= TEMPSMATCH)
+    {   
+        switch (etapeMatch) {
+
+            case 0 : /* On active l'expérience */ 
+            {
+                typeMovement = DEPLACEMENT_AVANT;
+                robot.ligne_droite(25000);
+                robot.poussette(300);
+                updateAndWriteScore('0', '4', '0');
+                etapeMatch++;
+                
+            break;
+            }
+            case 1 : /* On pousse le palet bleu de la pente de l'accélérateur */ 
+            {
+                typeMovement = DEPLACEMENT_ARRIERE;
+                robot.marche_arriere(-11200);
+                typeMovement = DEPLACEMENT_AVANT;
+                robot.rotation_rel(90);
+                robot.ligne_droite(130000);
+                brasDroit.activerBras();
+                robot.ligne_droite(16000);
+                brasDroit.desactiverBras();
+                updateAndWriteScore('0', '5', '0');
+                etapeMatch++;
+            
+            break;
+            }
+            case 2 : /* On récupère le goldenium */ 
+            {
+                robot.ligne_droite(54500);
+                robot.rotation_rel(-90);
+                pompe.activer();
+                robot.poussette(1000);
+                typeMovement = DEPLACEMENT_ARRIERE;
+                robot.marche_arriere(-10000);
+                typeMovement = DEPLACEMENT_AVANT;
+                updateAndWriteScore('0', '8', '0');
+                etapeMatch++;
+            
+            break;
+            }
+            case 3 : /* On met le goldenium dans la balance */ 
+            {
+                
+                robot.rotation_rel(-90);
+                robot.ligne_droite(97000);
+                robot.rotation_rel(-90);
+                robot.ligne_droite(104000);
+                robot.poussette(1000);
+                pompe.desactiver();
+                wait(2);
+                updateAndWriteScore('1', '0', '4');
+                etapeMatch++;
+            
+            break;
+            }
+            case 4 : /* On pousse la zone de chaos dans la zone du redium  */ 
+            {
+                typeMovement = DEPLACEMENT_ARRIERE;
+                robot.marche_arriere(-8000);
+                typeMovement = DEPLACEMENT_AVANT;
+                robot.rotation_rel(135);
+                brasPousserGauche.activerBras();
+                brasPousserDroit.activerBras();
+                robot.ligne_droite(112500);
+                updateAndWriteScore('1', '2', '4');
+                etapeMatch++;
+            
+            break;
+            }
+            case 5 : /* On pousse le palet vert ou le vert et les deux bleus dans la balance en passant par la pente */ 
+            {
+                brasPousserGauche.desactiverBras();
+                brasPousserDroit.desactiverBras();
+                typeMovement = DEPLACEMENT_ARRIERE;
+                robot.marche_arriere(-8000);
+                typeMovement = DEPLACEMENT_AVANT;
+                robot.rotation_rel(-90);
+                robot.ligne_droite(45000);
+                robot.rotation_rel(-42);
+                robot.ligne_droite(86000);
+                robot.rotation_rel(-90);
+                brasPousserGauche.activerBras();
+                brasPousserDroit.activerBras();
+                //mettre la fonction pente 
+                robot.commande_vitesse(30,30);
+                wait(7);
+                robot.commande_vitesse(150,150);
+                wait(3);
+                updateAndWriteScore('1', '3', '4');
+                etapeMatch++;
+            
+            break;
+            }
+            case 6 : /* On redescant de la pente */ 
+            {
+                robot.commande_vitesse(-30,-30);
+                wait(2);
+                brasPousserGauche.desactiverBras();
+                brasPousserDroit.desactiverBras();
+                robot.commande_vitesse(-50,-50);
+                wait_ms(10000);
+                robot.vitesse_nulle_D(0);
+                robot.vitesse_nulle_G(0);
+                etapeMatch++;
+            
+            break;
+            }
+            default:
+            {
+                robot.vitesse_nulle_D(0);
+                robot.vitesse_nulle_G(0);
+                motors_stop();
+                pompe.desactiver();
+            }
+        }  
+    }
+    
+    //Arrêter les moteurs
+    robot.vitesse_nulle_D(0);
+    robot.vitesse_nulle_G(0);
+    motors_stop();
+    pompe.desactiver();
+    while(1);
+}
+
+
+
+
+
+
+void strategieClassiqueJaune(deplacement robot, Pompe pompe, Demarreur demarreur, Bras brasGauche, Bras brasDroit, BrasPousser brasPousserGauche,  BrasPousser brasPousserDroit)
+{
+    write(bufferScore);
+    Timer tempsMatch; // timer en seconde
+    int etapeMatch = 5;
+    while(demarreur.getState() == false)
+    {
+        //on attend
+        //pc.printf("On attend le depart du Robot Thanos\n\r");
+    }
+    lancerTimerEcran();
+    tempsMatch.start();
+    while(tempsMatch  <= TEMPSMATCH)
+    {   
+        switch (etapeMatch) {
+
+            case 0 : /* On active l'expérience */ 
+            {
+                robot.ligne_droite(25000);
+                robot.poussette(300);
+                updateAndWriteScore('0', '4', '0');
+                etapeMatch++;
+                
+            break;
+            }
+            case 1 : /* On pousse le palet bleu de la pente de l'accélérateur */ 
+            {
+                robot.marche_arriere(-11200);
+                robot.rotation_rel(-90);
+                robot.ligne_droite(130000);
+                brasDroit.activerBras();
+                robot.ligne_droite(16000);
+                brasDroit.desactiverBras();
+                updateAndWriteScore('0', '5', '0');
+                etapeMatch++;
+            
+            break;
+            }
+            case 2 : /* On récupère le goldenium */ 
+            {
+                robot.ligne_droite(54500);
+                robot.rotation_rel(90);
+                pompe.activer();
+                robot.poussette(1000);
+                robot.marche_arriere(-10000);
+                updateAndWriteScore('0', '8', '0');
+                etapeMatch++;
+            
+            break;
+            }
+            case 3 : /* On met le goldenium dans la balance */ 
+            {
+                
+                robot.rotation_rel(90);
+                robot.ligne_droite(96000);
+                robot.rotation_rel(90);
+                robot.ligne_droite(104000);
+                robot.poussette(1000);
+                pompe.desactiver();
+                wait(2);
+                updateAndWriteScore('1', '0', '4');
+                etapeMatch++;
+            
+            break;
+            }
+            case 4 : /* On pousse la zone de chaos dans la zone du redium  */ 
+            {
+                
+                robot.marche_arriere(-8000);
+                robot.rotation_rel(-135);
+                brasPousserGauche.activerBras();
+                brasPousserDroit.activerBras();
+                robot.ligne_droite(112500);
+                updateAndWriteScore('1', '2', '4');
+                etapeMatch++;
+            
+            break;
+            }
+            case 5 : /* On pousse le palet vert ou le vert et les deux bleus dans la balance en passant par la pente */ 
+            {
+                brasPousserGauche.desactiverBras();
+                brasPousserDroit.desactiverBras();
+                /*robot.marche_arriere(-8000);
+                robot.rotation_rel(-90);
+                robot.ligne_droite(45000);
+                robot.rotation_rel(-42);
+                robot.ligne_droite(86000);*/
+                robot.rotation_rel(90);
+                brasPousserGauche.activerBras();
+                brasPousserDroit.activerBras();
+                robot.commande_vitesse(30,30);
+                wait(7);
+                robot.commande_vitesse(150,150);
+                wait(3);
+                updateAndWriteScore('1', '3', '4');
+                etapeMatch++;
+            
+            break;
+            }
+            case 6 : /* On redescant de la pente */ 
+            {
+                robot.commande_vitesse(-30,-30);
+                wait(2);
+                brasPousserGauche.desactiverBras();
+                brasPousserDroit.desactiverBras();
+                robot.commande_vitesse(-50,-50);
+                wait_ms(10000);
+                robot.vitesse_nulle_D(0);
+                robot.vitesse_nulle_G(0);
+                etapeMatch++;
+            
+            break;
+            }
+            default:
+            {
+                robot.vitesse_nulle_D(0);
+                robot.vitesse_nulle_G(0);
+                motors_stop();
+            }
+        }  
+    }
+    
+    //Arrêter les moteurs
+    robot.vitesse_nulle_D(0);
+    robot.vitesse_nulle_G(0);
+    motors_stop();
+    while(1);
+}
\ No newline at end of file