Tristan Vlogman / Mbed 2 deprecated locomotion_pid_action_refactor_EMG

Dependencies:   FastPWM HIDScope MODSERIAL QEI Matrix biquadFilter controller errorFetch mbed motorConfig refGen MatrixMath inverseKinematics

Fork of Minor_test_serial by First Last

Files at this revision

API Documentation at this revision

Comitter:
tvlogman
Date:
Fri Oct 13 16:24:50 2017 +0000
Parent:
27:a4228ea8fb8f
Child:
29:9aa4d63a9bd1
Commit message:
Fixed the direction problem! Changed pin of button2 as it was the same as the motor PWM out.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Fri Oct 13 11:59:15 2017 +0000
+++ b/main.cpp	Fri Oct 13 16:24:50 2017 +0000
@@ -8,7 +8,7 @@
 const float gearRatio = 131;
 
 // Controller parameters
-const float k_p = 0.5;
+const float k_p = 1;
 const float k_i = 0; // Still needs a reasonable value
 const float k_d = 0; // Again, still need to pick a reasonable value
 
@@ -33,7 +33,7 @@
 InterruptIn sw2(SW2);
 InterruptIn sw3(SW3);
 InterruptIn button1(D2);
-InterruptIn button2(D4);
+InterruptIn button2(D3);
 AnalogIn pot1(A0);
 AnalogIn pot2(A1);
 
@@ -118,15 +118,7 @@
 // motorController sets a motorValue based on the position error. Sign indicates direction and magnitude indicates speed. Right now this is a simple feedforward
 float motorController(float e_pos, float e_int, float e_der){
     float motorValue;
-    if(e_pos >= 0){
-        // Positive error yields positive motor value = counterclockwise rotation
-        motorValue = -1*((e_pos*k_p) + k_i*e_int + k_d*e_der + 0.45);
-        }    
-    else {
-        // Negative error yields negative motor value = clockwise rotation
-        motorValue = 1*((e_pos*k_p) + k_i*e_int + k_d*e_der + 0.45);
-     }
-     
+    motorValue = k_p*e_pos + k_d*e_der + k_i*e_int;
     return motorValue;
     }
     
@@ -135,18 +127,32 @@
     switch(currentState){
                 case KILLED:
                     motor1_pwm.write(0.0);
+                    // Set motor direction
+                    if (motorValue >=0){
+                        pc.printf("Fa! \r\n");
+                        motor1_direction = 0; //This doesn't seem to set motor 1 direction to 0
+                        pc.printf("M1D = %d \r\n", motor1_direction.read());
+                        pc.printf("Foo! \r\n");
+                        } else if(motorValue < 0){
+                        motor1_direction = 1;
+                        pc.printf("Bah!");
+                        }
                     ledR = 0;
                     ledG = 1;
                     ledB = 1;
                     break;
                 case ACTIVE:
+                    pc.printf("Got into ACTIVE \r\n");
                     // Set motor direction
                     if (motorValue >=0){
-                        motor1_direction = 0;
+                        pc.printf("Fa!");
+                        motor1_direction.write(0);
+                        pc.printf("Foo!");
+                        } else if(motorValue < 0){
+                        motor1_direction.write(1);
+                        pc.printf("Bah!");
                         }
-                    else {
-                        motor1_direction = 1;
-                        }
+                        
                     // Set motor speed
                     if (fabs(motorValue)>1){ 
                         motor1_pwm = 1;
@@ -166,6 +172,10 @@
     float motorValue = motorController(e_pos, e_int, e_der);
     float r = getReferencePosition();
     sendDataToPc(r, e_pos, e_int, e_der, motorValue);
+    pc.printf("Motorvalue is %.2f \r\n", motorValue);
+    pc.printf("Error is %.2f \r\n", e_pos);
+    pc.printf("Reference is %.2f \r\n", r);
+    pc.printf("motor1 direction is %d \r\n", motor1_direction.read());
     setMotor1(motorValue);
     }