sequences des strats
Diff: Strategie.cpp
- 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