The program

Dependencies:   FileSystem_POPS Sound m3pi_test2 mbed

Fork of M3PI_SuiviLigne by Maxime Chevreau

Files at this revision

API Documentation at this revision

Comitter:
Maximousse
Date:
Thu May 03 12:08:03 2018 +0000
Parent:
3:b4b0c5219d2a
Commit message:
test3;

Changed in this revision

Sound.lib Show annotated file Show diff for this revision Revisions of this file
m3pi.lib Show annotated file Show diff for this revision Revisions of this file
main3.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r b4b0c5219d2a -r 22275847875d Sound.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Sound.lib	Thu May 03 12:08:03 2018 +0000
@@ -0,0 +1,1 @@
+http://os.mbed.com/users/suupen/code/Sound/#d526205994e9
diff -r b4b0c5219d2a -r 22275847875d m3pi.lib
--- a/m3pi.lib	Mon Nov 23 23:24:35 2015 +0000
+++ b/m3pi.lib	Thu May 03 12:08:03 2018 +0000
@@ -1,1 +1,1 @@
-https://developer.mbed.org/users/bouaziz/code/m3pi/#f65c5aa1775c
+https://os.mbed.com/teams/Polybot1/code/m3pi_test2/#a12166fc8c19
diff -r b4b0c5219d2a -r 22275847875d main3.cpp
--- a/main3.cpp	Mon Nov 23 23:24:35 2015 +0000
+++ b/main3.cpp	Thu May 03 12:08:03 2018 +0000
@@ -1,31 +1,166 @@
-
 #include "mbed.h"
 #include "m3pi.h"
 #include "MSCFileSystem.h"
 
 m3pi m3pi;                                  // Initialise the m3pi
 
-Serial xbee(p28,p27);
 DigitalOut resetxbee(p26);
-Serial pc(USBTX, USBRX);                    // For debugging and pc messages, uses commented out to prevent hanging
+DigitalOut led3(LED3);
+DigitalOut led1(LED1);
+DigitalIn push(p21);
+
+Serial pc(USBTX, USBRX);                    // For debugging and pc messages, uses commented out to prevent hangings
+Serial bt(p28,p27);
+
 MSCFileSystem fs("fs"); 
 
 BusOut myleds(LED1, LED2, LED3, LED4);
 
-int main() {
-    resetxbee =0;
-    wait(0.01);
-    resetxbee =1;
+const int THRESH = 200;
+
+unsigned short sensors[5], mems[5], nbCapt, memsNb;
+char tab[4];
+float position, proportional, last_proportional, integral;
+
+unsigned char dir;
+float speed, duration, s1, s2;
+char src='x';
+
+Timer timer;
+
+
+
+
+
+
+
+
+
+Serial& getCurrentSerial()
+{
+    return (src == 'u' ? pc : bt);
+}
+
+
+
+
+void set_motors(float mr, float ml)
+{
+    m3pi.left_motor(ml);
+    m3pi.right_motor(mr);
+}
+
+//------------------------------------------------------------------------------
+
+void getCapt(bool mem = false)
+{
+    int v = 0;
+    nbCapt = 0;
     
-    FILE *p= fopen("/fs/tt.txt","a+");
+    m3pi.calibrated_sensors(sensors);
+    
+    for(int i=0 ; i<5 ;i++)
+    {
+        sensors[i] = (sensors[i] > THRESH ? true : false);
+        if(sensors[i])
+        {
+            v += 0x1<<i;
+            nbCapt++;
+        }
+        if(mem)
+        {
+            mems[i] = sensors[i];
+            memsNb = nbCapt;
+        }
+    }
+    m3pi.leds(v);
+}
+
+//------------------------------------------------------------------------------
+
+void suiviIntersect(float intervalTour = 0.0f)
+{
+    bool done = false;
+    //forward = true;
+    unsigned int idx=0;
+    float vl, vr, omega, l_k=0, l_k1=0, sum=0, vmax=1.0f;
+    
+#if 1 // Low speed
+    const float Ki=0.007f, Kp=0.7f, Kd=1.5f, v=0.2;
+#else
+    const float Ki=0.0007f, Kp=0.07f, Kd=1.5f, v=0.80f;
+#endif
     m3pi.sensor_auto_calibrate();
-    wait(1.);
+    wait(1.0);
     
-    fprintf(p,"ecrire dans la cle USB\r\n");
-    fclose(p);
-    
-    while(1) {
+    Timer t; t.start();
+    while(!done)
+    {
+        idx++;
+        getCapt();
+        
+        // PID
+        l_k1 = l_k;
+        l_k = m3pi.line_position();
+        //v = sp;
+        omega = l_k*Kp; // Proportionnal
+        sum += l_k;
+        omega += sum*Ki; // Integral
+        omega += (l_k-l_k1)*Kd;
         
         
+        vl = v+omega < vmax ? (v+omega > -vmax ? v+omega : vmax) : vmax;
+        vr = v-omega < vmax ? (v-omega > -vmax ? v-omega : -vmax): vmax;
+        
+        vr *= 1.2;
+        vl *= 1.2;
+        set_motors(vr,vl);
+        
+        //---------------------INTERSECTION
+        if(sensors[0] || sensors[4]) {
+        char c = 'a';
+        //if ((c<='5') & (c>='1')) {
+        //    leds[c - '1'] = !leds[c - '1'];
+        //}
+        bt.printf("Voici un %c \n", c);
+        }
+        
+        /*
+        if(forward) set_motors(vr,vl);
+        else set_motors(-vl,-vr);
+        */
+        
+        m3pi.cls();
+        //const char* C [1]= {'0' + idx};
+        //m3pi.printf(C);
     }
+    
+    return;
 }
+
+
+
+
+
+
+
+
+
+
+int main() {
+    bt.baud(115200);
+    m3pi.cls();
+    wait(0.5);
+    
+    m3pi.sensor_auto_calibrate();
+    
+    set_motors(0.f,0.f);
+    char c = 'a';
+    bt.printf("Hello World!\n");
+
+    while(1)
+    {
+        getCapt();
+        suiviIntersect();
+    }
+}
\ No newline at end of file