Time is good

Dependencies:   RoboClaw mbed

Fork of Robot2016_2-0 by ARES

Files at this revision

API Documentation at this revision

Comitter:
Jagang
Date:
Fri May 06 23:55:01 2016 +0000
Parent:
97:42167cfeb8d7
Child:
99:1fcb088f8f36
Commit message:
petit push ? romain;

Changed in this revision

deplacement.cpp Show annotated file Show diff for this revision Revisions of this file
entete.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/deplacement.cpp	Fri May 06 22:15:43 2016 +0000
+++ b/deplacement.cpp	Fri May 06 23:55:01 2016 +0000
@@ -1,10 +1,15 @@
 #include "entete.h"
 
-void GotoDist(float timer) {
+int max(int a, int b)
+{
+    return (a<b)?b:a;
+}
+
+void GotoDist(float timer, int acc, int speed, int decc) {
     Timer t;
     
-    roboclaw.SpeedAccelM1(accel_dista, vitesse_dista);
-    roboclaw.SpeedAccelM2(accel_dista, vitesse_dista);
+    roboclaw.SpeedAccelM1(acc, speed);
+    roboclaw.SpeedAccelM2(acc, speed);
     
     t.reset();
     t.start();
@@ -17,8 +22,8 @@
             t.stop();
             while (Ravance != 1);
             wait_ms(1);
-            roboclaw.SpeedAccelM1(accel_dista, vitesse_dista);
-            roboclaw.SpeedAccelM2(accel_dista, vitesse_dista);
+            roboclaw.SpeedAccelM1(acc, speed);
+            roboclaw.SpeedAccelM2(acc, speed);
             t.start();
         }
     }
@@ -32,29 +37,17 @@
     wait(waiting_time);
 }
 
-void GotoArr(float timer) {
+void GotoArr(float timer, int acc, int speed, int decc)  {
     Timer t;
     
-    roboclaw.SpeedAccelM1(accel_dista, -vitesse_dista);
-    roboclaw.SpeedAccelM2(accel_dista, -vitesse_dista);
+    roboclaw.SpeedAccelM1(acc, -speed);
+    roboclaw.SpeedAccelM2(acc, -speed);
     wait_ms(1);
     
     t.reset();
     t.start();
     
-    while (t.read() < timer) {
-        if (Ravance != 1) {
-            roboclaw.ForwardM1(0);
-            wait_ms(1);
-            roboclaw.ForwardM2(0);
-            t.stop();
-            while (Ravance != 1);
-            wait_ms(1);
-            roboclaw.SpeedAccelM1(accel_dista, -vitesse_dista);
-            roboclaw.SpeedAccelM2(accel_dista, -vitesse_dista);
-            t.start();
-        }
-    }
+    while (t.read() < timer);
     
     roboclaw.ForwardM1(0);
     wait_ms(1);
@@ -72,13 +65,13 @@
     wait_ms(10);
     int distance_ticks_left = -theta_*ENTRAXE/(2*(DIAMETRE_ROUE_GAUCHE*3.14159/4096));
     int distance_ticks_right = theta_*ENTRAXE/(2*(DIAMETRE_ROUE_DROITE*3.14159/4096));
-
-    if (theta_ < 0)
-        roboclaw.SpeedAccelDeccelPositionM1M2(accel_angle, vitesse_angle, deccel_angle, distance_ticks_right, accel_angle, vitesse_angle, deccel_angle, distance_ticks_left, 1);
-    else
-        roboclaw.SpeedAccelDeccelPositionM1M2(accel_angle, vitesse_angle, deccel_angle, distance_ticks_right, accel_angle, vitesse_angle, deccel_angle, distance_ticks_left, 1);
+    
+    roboclaw.SpeedAccelDeccelPositionM1M2(accel_angle, vitesse_angle, deccel_angle, distance_ticks_right, accel_angle, vitesse_angle, deccel_angle, distance_ticks_left, 1);
 
     wait(3);
+    wait_ms(10);
+    roboclaw.ResetEnc();
+    wait_ms(10);
     roboclaw.ForwardM1(0);
     wait_ms(10);
     roboclaw.ForwardM2(0);
@@ -97,19 +90,36 @@
     
     wait_ms(10);
     int EncM1 = roboclaw.ReadEncM1();
+    int EncM1_t = 0;
     wait_ms(10);
     int EncM2 = roboclaw.ReadEncM2();
+    int EncM2_t = 0;
+    
+    int speed = 500;
+    
+    Timer t;
+    
+    t.start();
     
     
-    while(abs(EncM1 - distance_ticks_right) > 20 || abs(EncM2 - distance_ticks_left) > 20)
+    while((abs(EncM1 - distance_ticks_right) > 20 || abs(EncM2 - distance_ticks_left) > 20) && (speed > 2 || t.read() < 0.5f))
     {
-        wait_ms(10);
+        wait_ms(200);
         EncM1 = roboclaw.ReadEncM1();
         wait_ms(10);
         EncM2 = roboclaw.ReadEncM2();
+        
+        speed = abs(EncM1 - EncM1_t);
+        speed = max(abs(EncM2 - EncM2_t),speed);
+        EncM1_t = EncM1;
+        EncM2_t = EncM2;
     }
     
     wait(0.1);
+    
+    wait_ms(10);
+    roboclaw.ResetEnc();
+    wait_ms(10);
     roboclaw.ForwardM1(0);
     wait_ms(10);
     roboclaw.ForwardM2(0);
--- a/entete.h	Fri May 06 22:15:43 2016 +0000
+++ b/entete.h	Fri May 06 23:55:01 2016 +0000
@@ -6,6 +6,26 @@
 
 #define PI 3.14159f
 
+#define ENTRAXE 243.8
+#define DIAMETRE_ROUE_GAUCHE 61.7
+#define DIAMETRE_ROUE_DROITE 61.8
+
+#define accel_angle 3200
+#define vitesse_angle 3200
+#define deccel_angle 3200
+
+#define accel_dista 4000
+#define vitesse_dista 4000
+#define deccel_dista 4000
+
+#define waiting_time 1
+#define GAUCHE 1
+#define DROITE -1
+
+#define VERT 1
+#define VIOLET 2
+#define NOIR 3
+
 /* Classes du projet : 
 AX12
 Roboclaw
@@ -38,8 +58,8 @@
 void init_globals();
 
 //vFonctions deplacement.cpp
-void GotoDist (float timer);
-void GotoArr(float timer);
+void GotoDist (float timer, int acc=accel_dista, int speed=vitesse_dista, int decc=deccel_dista);
+void GotoArr(float timer, int acc=accel_dista, int speed=vitesse_dista, int decc=deccel_dista);
 void GotoThet(double theta_);
 void GotoDistPos(double distance);
 
@@ -49,24 +69,4 @@
 void depart(void);
 void changeCamp(void);
 
-#define ENTRAXE 243.8
-#define DIAMETRE_ROUE_GAUCHE 61.7
-#define DIAMETRE_ROUE_DROITE 61.8
-
-#define accel_angle 3200
-#define vitesse_angle 3200
-#define deccel_angle 3200
-
-#define accel_dista 4000
-#define vitesse_dista 4000
-#define deccel_dista 4000
-
-#define waiting_time 1
-#define GAUCHE 1
-#define DROITE -1
-
-#define VERT 1
-#define VIOLET 2
-#define NOIR 3
-
 #endif
\ No newline at end of file
--- a/main.cpp	Fri May 06 22:15:43 2016 +0000
+++ b/main.cpp	Fri May 06 23:55:01 2016 +0000
@@ -54,54 +54,55 @@
         GotoArr(9.2);
         R_SEUIL_SHARP = 0.25;
         GotoDist(2.5);
-        GotoThet(-3.04);
+        GotoThet(-PI/2.f);
         R_SEUIL_SHARP = 0.35;
         GotoDist(5.5);
         R_SEUIL_SHARP = 1;
         GotoDist(4.5);
         GotoArr(3);
         R_SEUIL_SHARP = 0.35;
-        GotoThet(3.04);
+        GotoThet(PI/2.f);
         GotoDist(3.5);
-        GotoThet(-3.04);
+        GotoThet(-PI/2.f);
         R_SEUIL_SHARP = 1; 
         GotoDist(4.6);
     }
-    else if (SCouleur == VIOLET) {  
+    else// if (SCouleur == VIOLET)
+    {  
         end.attach(&endFonc, 90);
-        GotoDist(9.0);
-        GotoArr(9.2);
+        GotoDist(9.0,2000,2000,2000);
+        GotoArr(5);
         R_SEUIL_SHARP = 0.25;
-        GotoDist(2.5);
-        GotoThet(3.04);
+        GotoDist(1.25);
+        GotoThet(PI/2.f);
         R_SEUIL_SHARP = 0.35;
-        GotoDist(5.5);
+        GotoDist(2.75);
         R_SEUIL_SHARP = 1;
-        GotoDist(4.5);
-        GotoArr(4);
+        GotoDist(2.25);
+        GotoArr(2);
         R_SEUIL_SHARP = 0.35;
-        GotoThet(-3.04);
-        GotoDist(3.5);
-        GotoThet(3.04);
+        GotoThet(-PI/2.f);
+        GotoDist(1.75);
+        GotoThet(PI/2.f);
         R_SEUIL_SHARP = 1; 
-        GotoDist(4.6);
+        GotoDist(2.3);
     }
-    else {
-        GotoDistPos(100);
+   /* else {
+        GotoDistPos(200);
         GotoThet(PI/2.f);
-        GotoDistPos(200);
+        GotoDistPos(400);
         
         GotoThet(PI/2.f);
         GotoThet(PI/2.f);
         
-        GotoDistPos(200);
+        GotoDistPos(400);
         
         GotoThet(-PI/2.f);
         
-        GotoDistPos(100);
+        GotoDistPos(200);
         GotoThet(PI/2.f);
         GotoThet(PI/2.f);
-    }
+    }*/
 
     while(1);
 }