jkfodk

Dependencies:   Encoder MODSERIAL mbed

Files at this revision

API Documentation at this revision

Comitter:
Tess
Date:
Tue Oct 29 16:02:31 2013 +0000
Parent:
1:7cafc9042056
Child:
3:c4df318913b8
Commit message:
jfidj
;

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Fri Oct 25 09:22:16 2013 +0000
+++ b/main.cpp	Tue Oct 29 16:02:31 2013 +0000
@@ -49,17 +49,23 @@
     /* variable to store setpoint in */
     float setpointA;
     float setpointB;
+    float setpoint_beginA;
+    float setpoint_beginB;
+    float setpoint_rechtsonderA;
+    float setpoint_rechtsonderB;
     /* variable to store pwm value in*/
     float pwm_to_motorA;
+    float pwm_to_begin_motorA;
+    float pwm_to_begin_motorB;
     float pwm_to_motorB;
+    float pwm_to_rechtsonder_motorA;
+    float pwm_to_rechtsonder_motorB;
     int32_t positionmotorA_t0;
     int32_t positionmotorB_t0;
     int32_t positionmotorA_t_1;
     int32_t positionmotorB_t_1;
-    int32_t startingpositionmotorA;
-    int32_t startingpositionmotorB;
-    int32_t velocity_motorA;
-    int32_t velocity_motorB;
+    int32_t positiondifference_motorA;
+    int32_t positiondifference_motorB;
 
     //START OF CODE
 
@@ -67,84 +73,193 @@
     pc.baud(921600);
 
 
-    // in dit stukje code zorgen we ervoor dat de startpositie wordt bereikt.
-    motordirA.write(0);
-    pwm_motorA.write(.05);
-    positionmotorA_t0 = motorA.getPosition();
-    do {
-        wait(0.02);
-        positionmotorA_t_1 = positionmotorA_t0 ;
-        positionmotorA_t0 = motorA.getPosition();
-        velocity_motorA = (positionmotorA_t0 - positionmotorA_t_1) / 0.02;
-    } while(velocity_motorA <= 0.01);
-    startingpositionmotorA = motorA.getPosition();
-
+    // in dit stukje code zorgen we ervoor dat de startpositie wordt bereikt. Eerst B botsen dan A botsen
     motordirB.write(0);
-    pwm_motorB.write(.05);
+    pwm_motorB.write(.08);
     positionmotorB_t0 = motorB.getPosition();
     do {
-        wait(0.02);
+        wait(0.2);
         positionmotorB_t_1 = positionmotorB_t0;
         positionmotorB_t0 = motorB.getPosition();
-        velocity_motorB = (positionmotorB_t0 - positionmotorB_t_1) / 0.02;
-    } while(velocity_motorB <= 0.01);
-    startingpositionmotorB = motorB.getPosition();
+        positiondifference_motorB = abs(positionmotorB_t0 - positionmotorB_t_1);
+    } while(positiondifference_motorB > 10);
+    motorB.setPosition(0);
+    pwm_motorB.write(0);
 
+    motordirA.write(1);
+    pwm_motorA.write(.08);
+    positionmotorA_t0 = motorA.getPosition();
+    do {
+        wait(0.2);
+        positionmotorA_t_1 = positionmotorA_t0 ;
+        positionmotorA_t0 = motorA.getPosition();
+        positiondifference_motorA = abs(positionmotorA_t0 - positionmotorA_t_1);
+    } while(positiondifference_motorA > 10);
+    motorA.setPosition(0);
+    pwm_motorA.write(0);
+
+    // motor A moet als eerst naar x-as, moet 4.11 graden naar links om op de x-as te staan
+    // motor B moet 21.6 graden naar links.
+    // eerst motor A en dan motor B
 
-    /*Create a ticker, and let it call the     */
-    /*function 'setlooptimerflag' every 0.01s  */
-    Ticker looptimer;
-    looptimer.attach(setlooptimerflag,0.01);
+    // motordirA.write(1);
+    //setpoint_beginA = 63.5; // naar x-as gaan
+    //pwm_to_begin_motorA = setpoint_beginA *.001;
+    //keep_in_range(&pwm_to_begin_motorA, -1,1);
+    //pwm_motorA.write(abs(pwm_to_begin_motorA));
+    //motorA.setPosition(0);
+    //pwm_motorA.write(0);
 
-    //INFINITE LOOP
-    while(1) {
-        /* Wait until looptimer flag is true. */
-        /* '!=' means not-is-equal            */
+    //motordirB.write(1);
+    //setpoint_beginB = 192; // naar x-as gaan
+    //pwm_to_begin_motorB = setpoint_beginB *.001;
+    //keep_in_range(&pwm_to_begin_motorB, -1,1);
+    //pwm_motorB.write(abs(pwm_to_begin_motorB));
+    //motorB.setPosition(0);
+    //pwm_motorB.write(0);
+    Ticker looptimer1;
+    looptimer1.attach(setlooptimerflag,0.01);
+
+    while(pwm_to_begin_motorA >= 0) {
         while(looptimerflag != true);
-        /* Clear the looptimerflag, otherwise */
-        /* the program would simply continue  */
-        /* without waitingin the next iteration*/
+
         looptimerflag = false;
 
-        /* Read potmeter value, apply some math */
-        /* to get useful setpoint value         */
-        setpointA = (potmeterA.read()-0.5)*(631/2);
-        setpointB = (potmeterB.read()-0.5)*(871/2);  //1000 dan rotatie langzamer maken als lager maakt.
+        setpoint_beginA = 63;     // naar x-as gaan
+        pwm_to_begin_motorA = (setpoint_beginA - motorA.getPosition()) *.001;
+        keep_in_range(&pwm_to_begin_motorA, -1, 1 );
 
-        /* Print setpoint and current position to serial terminal*/
-        pc.printf("s: %f, %d ", setpointA, motorA.getPosition());
-        pc.printf("s: %f, %d \n\r", setpointB, motorB.getPosition());
+        //if(pwm_to_begin_motorA <= 0) {
+        //  motordirA.write(0);
+        // motorA.setPosition(0);
+        //pwm_motorA.write(0);
+        //} else {
+        motordirA.write(0);
+        pwm_motorA.write(abs(pwm_to_begin_motorA));
+    }
+motorA.setPosition(0);
+pwm_motorA.write(0);
+
+Ticker looptimer2;
+looptimer2.attach(setlooptimerflag,0.01);
+
+while(pwm_to_begin_motorB >= 0)
+{
+    while(looptimerflag != true);
+    looptimerflag = false;
 
-        /* This is a P-action! calculate error, multiply with gain, and store in pwm_to_motor */
-        pwm_to_motorA = (setpointA - motorA.getPosition())*.001;
-        pwm_to_motorB = (setpointB - motorB.getPosition())*.001;
-        /* Coerce pwm value if outside range          */
-        /* Not strictly needed here, but useful       */
-        /* if doing other calculations with pwm value */
-        keep_in_range(&pwm_to_motorA, -1,1);
-        keep_in_range(&pwm_to_motorB, -1,1);
+    setpoint_beginB = 192; //192
+    pwm_to_begin_motorB = (setpoint_beginB - motorB.getPosition()) *.001;
+    keep_in_range(&pwm_to_begin_motorB, -1,1);
+    //if(pwm_to_begin_motorB <= 0) {
+    //  motordirB.write(0);
+    //motorB.setPosition(0);
+    //pwm_motorB.write(0);
+    //} else {
+    motordirB.write(1);
+    pwm_motorB.write(abs(pwm_to_begin_motorB));
+}
+motorB.setPosition(0);
+pwm_motorB.write(0);
+
+// nu naar positie rechtsonderhoek A4 deze is motor A 531.6 en motor B 460
+// verder werken vanaf hier
+while(0) ///1
+{
+    while(looptimerflag != true);
+
+    looptimerflag = false;
 
-        /* Control the motor direction pin. based on   */
-        /* the sign of your pwm value.      If your    */
-        /* motor keeps spinning when running this code */
-        /* you probably need to swap the motor wires,  */
-        /* or swap the 'write(1)' and 'write(0)' below */
-        if(pwm_to_motorA > 0)
-            motordirA.write(1);
-        else
-            motordirA.write(0);
-        if(pwm_to_motorB > 0)
-            motordirB.write(1);
-        else
-            motordirB.write(0);
+    setpoint_rechtsonderA = 531;     // naar rechter onderhoek
+    pwm_to_rechtsonder_motorA = setpoint_rechtsonderA *.001;
+    keep_in_range(&pwm_to_rechtsonder_motorA, -1, 1 );
+    if(pwm_to_rechtsonder_motorA > 0.531) {
+        motordirA.write(0);
+        pwm_motorA.write(0);
+    } else
+        motordirA.write(1);
+    pwm_motorA.write(abs(pwm_to_rechtsonder_motorA));
+
+    while(looptimerflag != true);
+    looptimerflag = false;
+
+    setpoint_rechtsonderB = 460;
+    pwm_to_rechtsonder_motorB = setpoint_rechtsonderB *.001;
+    keep_in_range(&pwm_to_rechtsonder_motorB, -1,1);
+    if(pwm_to_rechtsonder_motorB > 0.460) {
+        motordirB.write(0);
+        pwm_motorB.write(0);
+    } else
+        motordirB.write(1);
+    pwm_motorB.write(abs(pwm_to_rechtsonder_motorB));
+
+}
 
 
-        //WRITE VALUE TO MOTOR
-        /* Take the absolute value of the PWM to send */
-        /* to the motor. */
-        pwm_motorA.write(abs(pwm_to_motorA));
-        pwm_motorB.write(abs(pwm_to_motorB));
-    }
+/*Create a ticker, and let it call the     */
+/*function 'setlooptimerflag' every 0.01s  */
+Ticker looptimer;
+looptimer.attach(setlooptimerflag,0.01);
+
+//INFINITE LOOP
+while(1)
+{
+    /* Wait until looptimer flag is true. */
+    /* '!=' means not-is-equal            */
+    while(looptimerflag != true);
+    /* Clear the looptimerflag, otherwise */
+    /* the program would simply continue  */
+    /* without waitingin the next iteration*/
+    looptimerflag = false;
+
+
+
+
+    /* Read potmeter value, apply some math */
+    /* to get useful setpoint value         */
+    setpointA = (potmeterA.read()-0.5)*(631/2); // bereik van 71 graden             dit afhankelijk van waar nul punt zit en waar heel wil. Dus afh. van EMG lezen
+    setpointB = (potmeterB.read()-0.5)*(415/2);  // bereik van 46.7 graden           1000 dan rotatie langzamer maken als lager maakt.
+
+
+    // motor A moet de hoek altijd binnen 53.4 tot en met 124.3 graden liggen
+    // motor B moet de hoek altijd binnen 30.2 tot en met -16.5 graden liggen
+    keep_in_range(&setpointA, 474, 1105);
+    keep_in_range(&setpointB, -147, 269);
+
+    /* Print setpoint and current position to serial terminal*/
+    pc.printf("s: %f, %d ", setpointA, motorA.getPosition());
+    pc.printf("s: %f, %d \n\r", setpointB, motorB.getPosition());
+
+    /* This is a P-action! calculate error, multiply with gain, and store in pwm_to_motor */
+    pwm_to_motorA = (setpointA - motorA.getPosition())*.001;
+    pwm_to_motorB = (setpointB - motorB.getPosition())*.001;
+    /* Coerce pwm value if outside range          */
+    /* Not strictly needed here, but useful       */
+    /* if doing other calculations with pwm value */
+    keep_in_range(&pwm_to_motorA, -1,1);
+    keep_in_range(&pwm_to_motorB, -1,1);
+
+    /* Control the motor direction pin. based on   */
+    /* the sign of your pwm value.      If your    */
+    /* motor keeps spinning when running this code */
+    /* you probably need to swap the motor wires,  */
+    /* or swap the 'write(1)' and 'write(0)' below */
+    if(pwm_to_motorA > 0)
+        motordirA.write(1);
+    else
+        motordirA.write(0);
+    if(pwm_to_motorB > 0)
+        motordirB.write(1);
+    else
+        motordirB.write(0);
+
+
+    //WRITE VALUE TO MOTOR
+    /* Take the absolute value of the PWM to send */
+    /* to the motor. */
+    pwm_motorA.write(abs(pwm_to_motorA));
+    pwm_motorB.write(abs(pwm_to_motorB));
+}
 }