ER2

Dependencies:   mbed

Committer:
dorian06
Date:
Wed Jun 02 07:18:21 2021 +0000
Revision:
1:3396edc39360
Parent:
0:517981cf0540
bluetooth

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dorian06 1:3396edc39360 1 // pour faire 1 tour on fait 34(nombre de crans pour 1 tour)*Mcran*vitesse
dorian06 1:3396edc39360 2 // sa represente le temp pour faire un tour
dorian06 0:517981cf0540 3
dorian06 1:3396edc39360 4 #include "mbed.h"
dorian06 1:3396edc39360 5 #define Mcran 0.01099 //distance par cran en metre
dorian06 1:3396edc39360 6 #define vitesse 0.7 //vitesse en m/s (a remesurer avec le robot sur piste)
dorian06 1:3396edc39360 7 #define vmot1TOUR 50 // rapport cyclique 50%
dorian06 1:3396edc39360 8 #define vmot2TOUR -50 //rappot cyclique de -50%
dorian06 1:3396edc39360 9 #define vmot_avance 50
dorian06 1:3396edc39360 10 #define vmot_recule -50
dorian06 1:3396edc39360 11 #define vmot_stop 0
dorian06 0:517981cf0540 12 Serial DebugUART(USBTX, USBRX);
dorian06 1:3396edc39360 13 Serial BTH(p13,p14); //module bleutooth tx,rx
dorian06 1:3396edc39360 14 Timer T1; //utiliser pour faire un tour
dorian06 1:3396edc39360 15 Timer T2; //utiliser pour faire un demi tour
dorian06 1:3396edc39360 16 PwmOut mot1(p23); // mot droit
dorian06 1:3396edc39360 17 PwmOut mot2(p22); //mot gauche
dorian06 1:3396edc39360 18 DigitalOut sens_droit(p11); // definir le sens du moteur droit
dorian06 1:3396edc39360 19 DigitalOut sens_gauche(p12);// definir le sens du moteur gauche
dorian06 1:3396edc39360 20 void sens_vitesse(int,int); // gestin du sens et de la vitesse et du moteur 1 periode entre [-100;100] puis le moteur 1=droit 2=gauche
dorian06 0:517981cf0540 21 int main(void)
dorian06 0:517981cf0540 22 {
dorian06 1:3396edc39360 23 float Ttour=1.40;//34*0.01099*0.7;// calcul du temps mis pour faire un tour
dorian06 1:3396edc39360 24 float Tdemi=0.70;//17*0.01099*0.7;//calcul du temps mis pour faire un demi tour
dorian06 1:3396edc39360 25 //printf("Ttour=%g",Ttour);
dorian06 1:3396edc39360 26 //printf("Tdemi=%g",Tdemi);
dorian06 1:3396edc39360 27 DebugUART.baud(9600); //vitesse de comunication
dorian06 1:3396edc39360 28 BTH.baud(9600); // vitesse de comunication
dorian06 1:3396edc39360 29 char CAR,CH; // caracter envoyé
dorian06 1:3396edc39360 30 mot1.period_us(100); //periode des moteurs
dorian06 1:3396edc39360 31 mot2.period_us(100);
dorian06 0:517981cf0540 32 while(1) {
dorian06 0:517981cf0540 33 if (BTH.readable()) {
dorian06 1:3396edc39360 34 CH=CAR;
dorian06 1:3396edc39360 35 CAR=BTH.getc();
dorian06 1:3396edc39360 36 //printf("\n\r caractere lu = %c %c",CAR,CH);//affiche le caractere
dorian06 1:3396edc39360 37 }
dorian06 1:3396edc39360 38
dorian06 1:3396edc39360 39 if(CAR=='A') { //A tour sur lui meme POSSIBLE AVEC LES CRANS 34
dorian06 1:3396edc39360 40 if(CH!=CAR) {
dorian06 1:3396edc39360 41 T1.start();
dorian06 1:3396edc39360 42 //printf("start");
dorian06 1:3396edc39360 43 sens_vitesse(vmot1TOUR,1); //moteur droit rapport cyclique 50 sens avancer
dorian06 1:3396edc39360 44 sens_vitesse(vmot2TOUR,2); //moteur gauche rapport cyclique 50 sens reculer
dorian06 1:3396edc39360 45 }
dorian06 1:3396edc39360 46
dorian06 1:3396edc39360 47 if (T1.read()>=Ttour) {
dorian06 1:3396edc39360 48 printf("t1");
dorian06 1:3396edc39360 49 T1.stop();
dorian06 1:3396edc39360 50 T1.reset();
dorian06 1:3396edc39360 51 sens_vitesse(vmot_stop,1);
dorian06 1:3396edc39360 52 sens_vitesse(vmot_stop,2);
dorian06 1:3396edc39360 53 }
dorian06 1:3396edc39360 54 }
dorian06 1:3396edc39360 55 if(CAR=='B') { //B robot avance
dorian06 1:3396edc39360 56 sens_vitesse(vmot_avance,1);
dorian06 1:3396edc39360 57 sens_vitesse(vmot_avance,2);
dorian06 1:3396edc39360 58 }
dorian06 1:3396edc39360 59
dorian06 1:3396edc39360 60
dorian06 1:3396edc39360 61 if(CAR=='C') { //C demi tour sur lui meme POSSIBLE AVEC LES CRANS 17
dorian06 1:3396edc39360 62 if(CH!=CAR) {
dorian06 1:3396edc39360 63 T2.start();
dorian06 1:3396edc39360 64 sens_vitesse(vmot1TOUR,1); //moteur droit rapport cyclique 50 sens avancer
dorian06 1:3396edc39360 65 sens_vitesse(vmot2TOUR,2); //moteur gauche rapport cyclique 50 sens reculer
dorian06 1:3396edc39360 66 }
dorian06 1:3396edc39360 67
dorian06 1:3396edc39360 68 if (T2.read()>=Tdemi) {
dorian06 1:3396edc39360 69 T2.stop();
dorian06 1:3396edc39360 70 T2.reset();
dorian06 1:3396edc39360 71 sens_vitesse(vmot_stop,1);
dorian06 1:3396edc39360 72 sens_vitesse(vmot_stop,2);
dorian06 1:3396edc39360 73 }
dorian06 1:3396edc39360 74 }
dorian06 1:3396edc39360 75 if(CAR=='F') { //F droit
dorian06 1:3396edc39360 76 sens_vitesse(vmot_avance,1); //moteur gauche rapport cyclique 50 sens avancer
dorian06 1:3396edc39360 77 sens_vitesse(vmot_stop,2); //moteur droit stop
dorian06 1:3396edc39360 78
dorian06 1:3396edc39360 79
dorian06 1:3396edc39360 80 }
dorian06 1:3396edc39360 81 if(CAR=='E') { //E stop
dorian06 1:3396edc39360 82 sens_vitesse(vmot_stop,1); //moteur droit stop
dorian06 1:3396edc39360 83 sens_vitesse(vmot_stop,2); //moteur gauche stop
dorian06 1:3396edc39360 84
dorian06 1:3396edc39360 85 }
dorian06 1:3396edc39360 86
dorian06 1:3396edc39360 87 if(CAR=='D') { //D gauche
dorian06 1:3396edc39360 88 sens_vitesse(vmot_avance,2); //moteur droit rapport cyclique 50 sens avancer
dorian06 1:3396edc39360 89 sens_vitesse(vmot_stop,1); //moteur gauche stop
dorian06 1:3396edc39360 90
dorian06 1:3396edc39360 91 }
dorian06 1:3396edc39360 92 // G epreuve de la bute
dorian06 1:3396edc39360 93
dorian06 1:3396edc39360 94 if(CAR=='H') { //H robot recule
dorian06 1:3396edc39360 95 sens_vitesse(vmot_recule,1);
dorian06 1:3396edc39360 96 sens_vitesse(vmot_recule,2);
dorian06 0:517981cf0540 97 }
dorian06 0:517981cf0540 98
dorian06 0:517981cf0540 99 }
dorian06 1:3396edc39360 100
dorian06 1:3396edc39360 101 }
dorian06 1:3396edc39360 102
dorian06 1:3396edc39360 103
dorian06 1:3396edc39360 104 void sens_vitesse(int Periode,int mot)
dorian06 1:3396edc39360 105 {
dorian06 1:3396edc39360 106 int sens;
dorian06 1:3396edc39360 107 if (Periode<=0) { // determination du sens 1 si peride inf a 0
dorian06 1:3396edc39360 108 sens=1;
dorian06 1:3396edc39360 109 Periode=abs(Periode); // valeurs abs de la periode donc en positif
dorian06 1:3396edc39360 110 } else {
dorian06 1:3396edc39360 111 sens=0;
dorian06 1:3396edc39360 112 }
dorian06 1:3396edc39360 113 if((mot==1)&&(sens==1)) {
dorian06 1:3396edc39360 114 sens_gauche.write(1);
dorian06 1:3396edc39360 115 mot1.pulsewidth_us(100-Periode); // 100-periode car sinon vitesse est de la difference entre 100 et la periode
dorian06 1:3396edc39360 116
dorian06 1:3396edc39360 117 } else if((mot==1)&& (sens==0)) {
dorian06 1:3396edc39360 118 sens_gauche.write(0);
dorian06 1:3396edc39360 119 mot1.pulsewidth_us(Periode);
dorian06 1:3396edc39360 120 }
dorian06 1:3396edc39360 121
dorian06 1:3396edc39360 122 if((mot==2)&&(sens==1)) {
dorian06 1:3396edc39360 123 sens_droit.write(1);
dorian06 1:3396edc39360 124 mot2.pulsewidth_us(100-Periode); // 100-periode car sinon vitesse est de la difference entre 100 et la periode
dorian06 1:3396edc39360 125 } else if((mot==2)&& (sens==0)) {
dorian06 1:3396edc39360 126 sens_droit.write(0);
dorian06 1:3396edc39360 127 mot2.pulsewidth_us(Periode);
dorian06 1:3396edc39360 128 }
dorian06 0:517981cf0540 129 }