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.
Dependencies: mbed
Diff: main.cpp
- Revision:
- 18:a7dc3a63d7eb
- Parent:
- 15:3d4543a6c100
--- a/main.cpp Mon Jun 03 16:37:37 2019 +0000 +++ b/main.cpp Wed Jun 05 12:32:47 2019 +0000 @@ -2,51 +2,98 @@ #include "CAN_asser.h" #include "Robot.h" -void testLasers(Robot&); +void testLasers(Robot&, bool&); void automate_testABalle(Robot&); -void automate_deplacement(Robot&); +void automate_deplacement(Robot&, bool&); -typedef enum{TURN_FAST,RETROUVE,GO_STRAIGHT} type_etat_deplacement; +typedef enum{TURN_FAST,RETROUVE,GO_STRAIGHT,CORRECT_GAUCHE,CORRECT_DROITE} type_etat_deplacement; type_etat_deplacement etat_deplacement = TURN_FAST; int main(void) { Robot robot; + bool autorCorrect = false; + DigitalIn Jack(PA_15); - robot.setSpeed(60,300); + robot.setSpeed(100,600); + robot.gobe(25); while(1) + if(!Jack) { automate_testABalle(robot); - testLasers(robot); + testLasers(robot, autorCorrect); if(!robot.aBalle()) - automate_deplacement(robot); + automate_deplacement(robot, autorCorrect); } } -void testLasers(Robot& robot) -{ +void testLasers(Robot& robot, bool& autorCorrect) +{ + const int diffMurBalle = 20; static float past_gauche, past_droit, actual_gauche, actual_droit; actual_gauche = robot.getDist(Laser::Gauche); actual_droit = robot.getDist(Laser::Droit); - - if(actual_droit < past_droit-30 && etat_deplacement == TURN_FAST) + switch(etat_deplacement) { - robot.stop(); - etat_deplacement = RETROUVE; - robot.setSpeed(30,300); - } - else if(actual_gauche < past_gauche-30 && etat_deplacement == RETROUVE) - { - robot.stop(); - etat_deplacement = GO_STRAIGHT; - robot.setSpeed(40,300); + case TURN_FAST: + if(actual_droit < past_droit - diffMurBalle) + { + robot.stop(); + etat_deplacement = RETROUVE; + robot.setSpeed(50,300); + } + break; + + case RETROUVE: + if(actual_droit < past_droit - diffMurBalle) + { + robot.stop(); + etat_deplacement = GO_STRAIGHT; + robot.setSpeed(100,500); + } + break; + + /*case GO_STRAIGHT: + if(actual_droit > past_droit + diffMurBalle) + { + etat_deplacement = CORRECT_GAUCHE; + robot.setSpeed(50,300); + } + else if(actual_gauche > past_gauche + diffMurBalle) + { + etat_deplacement = CORRECT_DROITE; + robot.setSpeed(50,300); + } + break;*/ + + /*case CORRECT_GAUCHE: + if(autorCorrect) //s'il a fini d'avancer + if(actual_droit < past_droit - diffMurBalle) + { + robot.stop(); + autorCorrect = false; + etat_deplacement = GO_STRAIGHT; + robot.setSpeed(80,300); + } + break; + + case CORRECT_DROITE: + if(autorCorrect) //s'il a fini d'avancer + if(actual_gauche < past_gauche - diffMurBalle) + { + robot.stop(); + autorCorrect = false; + etat_deplacement = GO_STRAIGHT; + robot.setSpeed(80,300); + } + break;*/ } @@ -59,31 +106,55 @@ typedef enum {ATTENTE,ABALLE} type_etat; static type_etat etat = ATTENTE; + PwmOut Servo_Ballon(PA_10); + PwmOut Mot_Ballon(PB_6); + + Servo_Ballon.period_ms(20); + Mot_Ballon.period_ms(20); + + static Timer T_ejecte; + switch(etat) { case ATTENTE: - robot.gobe(25); if(robot.aBalle()) { dbug.printf("A balle\n\r"); robot.stop(); + //Servo_Ballon.write(1); + robot.setSpeed(80,500); etat = ABALLE; } + else if( T_ejecte.read() >= 1.0f ) + { + robot.gobe(25); + //Reset du timer pour la prochaine balle + T_ejecte.stop(); + T_ejecte.reset(); + } break; case ABALLE: - if(robot.tourne(1800)) + /*if(robot.tourne(1800)) { - dbug.printf("Tourne\n\r"); - robot.ejecte(60); + dbug.printf("Tourne\n\r");*/ + robot.ejecte(70); + //} + if(!robot.aBalle()) + { + //Timer qui permet à la balle d'avoir le temps de quitter le reservoir + T_ejecte.start(); + // + Servo_Ballon.write(0); etat = ATTENTE; etat_deplacement = TURN_FAST; - } + robot.setSpeed(100,600); + } break; } } -void automate_deplacement(Robot& robot) +void automate_deplacement(Robot& robot, bool& autorCorrect) { switch(etat_deplacement) { @@ -97,7 +168,16 @@ case GO_STRAIGHT: robot.avance(); + //autorCorrect = true; break; + + /*case CORRECT_GAUCHE: + robot.tourne(-30); + break; + + case CORRECT_DROITE: + robot.tourne(30); + break;*/ } } @@ -258,7 +338,7 @@ case BALLE_STRAIGHT: robot.avance(); - /*static float allerJusqua; + static float allerJusqua; if(robot.getDist(Laser::Gauche,"mm") < robot.getDist(Laser::Droit,"mm")) allerJusqua = 0.95*robot.getDist(Laser::Gauche,"mm"); @@ -271,7 +351,7 @@ while(!robot.avance((int)allerJusqua)) { dbug.printf("%f\n\r", robot.getDist(Laser::Gauche,"mm")); - }*/ - /*break; + } + break; } }*/ \ No newline at end of file