Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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);
}