![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
ER2
main.cpp
- Committer:
- dorian06
- Date:
- 2021-06-02
- Revision:
- 1:3396edc39360
- Parent:
- 0:517981cf0540
File content as of revision 1:3396edc39360:
// pour faire 1 tour on fait 34(nombre de crans pour 1 tour)*Mcran*vitesse // sa represente le temp pour faire un tour #include "mbed.h" #define Mcran 0.01099 //distance par cran en metre #define vitesse 0.7 //vitesse en m/s (a remesurer avec le robot sur piste) #define vmot1TOUR 50 // rapport cyclique 50% #define vmot2TOUR -50 //rappot cyclique de -50% #define vmot_avance 50 #define vmot_recule -50 #define vmot_stop 0 Serial DebugUART(USBTX, USBRX); Serial BTH(p13,p14); //module bleutooth tx,rx Timer T1; //utiliser pour faire un tour Timer T2; //utiliser pour faire un demi tour PwmOut mot1(p23); // mot droit PwmOut mot2(p22); //mot gauche DigitalOut sens_droit(p11); // definir le sens du moteur droit DigitalOut sens_gauche(p12);// definir le sens du moteur gauche 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 int main(void) { float Ttour=1.40;//34*0.01099*0.7;// calcul du temps mis pour faire un tour float Tdemi=0.70;//17*0.01099*0.7;//calcul du temps mis pour faire un demi tour //printf("Ttour=%g",Ttour); //printf("Tdemi=%g",Tdemi); DebugUART.baud(9600); //vitesse de comunication BTH.baud(9600); // vitesse de comunication char CAR,CH; // caracter envoyé mot1.period_us(100); //periode des moteurs mot2.period_us(100); while(1) { if (BTH.readable()) { CH=CAR; CAR=BTH.getc(); //printf("\n\r caractere lu = %c %c",CAR,CH);//affiche le caractere } if(CAR=='A') { //A tour sur lui meme POSSIBLE AVEC LES CRANS 34 if(CH!=CAR) { T1.start(); //printf("start"); sens_vitesse(vmot1TOUR,1); //moteur droit rapport cyclique 50 sens avancer sens_vitesse(vmot2TOUR,2); //moteur gauche rapport cyclique 50 sens reculer } if (T1.read()>=Ttour) { printf("t1"); T1.stop(); T1.reset(); sens_vitesse(vmot_stop,1); sens_vitesse(vmot_stop,2); } } if(CAR=='B') { //B robot avance sens_vitesse(vmot_avance,1); sens_vitesse(vmot_avance,2); } if(CAR=='C') { //C demi tour sur lui meme POSSIBLE AVEC LES CRANS 17 if(CH!=CAR) { T2.start(); sens_vitesse(vmot1TOUR,1); //moteur droit rapport cyclique 50 sens avancer sens_vitesse(vmot2TOUR,2); //moteur gauche rapport cyclique 50 sens reculer } if (T2.read()>=Tdemi) { T2.stop(); T2.reset(); sens_vitesse(vmot_stop,1); sens_vitesse(vmot_stop,2); } } if(CAR=='F') { //F droit sens_vitesse(vmot_avance,1); //moteur gauche rapport cyclique 50 sens avancer sens_vitesse(vmot_stop,2); //moteur droit stop } if(CAR=='E') { //E stop sens_vitesse(vmot_stop,1); //moteur droit stop sens_vitesse(vmot_stop,2); //moteur gauche stop } if(CAR=='D') { //D gauche sens_vitesse(vmot_avance,2); //moteur droit rapport cyclique 50 sens avancer sens_vitesse(vmot_stop,1); //moteur gauche stop } // G epreuve de la bute if(CAR=='H') { //H robot recule sens_vitesse(vmot_recule,1); sens_vitesse(vmot_recule,2); } } } void sens_vitesse(int Periode,int mot) { int sens; if (Periode<=0) { // determination du sens 1 si peride inf a 0 sens=1; Periode=abs(Periode); // valeurs abs de la periode donc en positif } else { sens=0; } if((mot==1)&&(sens==1)) { sens_gauche.write(1); mot1.pulsewidth_us(100-Periode); // 100-periode car sinon vitesse est de la difference entre 100 et la periode } else if((mot==1)&& (sens==0)) { sens_gauche.write(0); mot1.pulsewidth_us(Periode); } if((mot==2)&&(sens==1)) { sens_droit.write(1); mot2.pulsewidth_us(100-Periode); // 100-periode car sinon vitesse est de la difference entre 100 et la periode } else if((mot==2)&& (sens==0)) { sens_droit.write(0); mot2.pulsewidth_us(Periode); } }