sequences des strats
Strategie.cpp
- Committer:
- JimmyAREM
- Date:
- 2019-05-20
- Revision:
- 0:a89fe490343e
- Child:
- 1:785b37686185
File content as of revision 0:a89fe490343e:
#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); }