ER2

Dependencies:   mbed

Revision:
1:3396edc39360
Parent:
0:517981cf0540
diff -r 517981cf0540 -r 3396edc39360 main.cpp
--- a/main.cpp	Mon May 17 09:12:35 2021 +0000
+++ b/main.cpp	Wed Jun 02 07:18:21 2021 +0000
@@ -1,21 +1,129 @@
-#include "mbed.h"
-
+// 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);
-
+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)
 {
-    DebugUART.baud(9600);
-    BTH.baud(9600);
-
-    char le_caractere_lu;
-
+    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()) {
-            le_caractere_lu=BTH.getc();
-            printf("\n\r caractere lu = %c",le_caractere_lu);
+            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);
+    }
 }
\ No newline at end of file