Eki Liptiay / Mbed 2 deprecated PseudoScript

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
ekiliptiay
Date:
Tue Oct 30 11:39:57 2018 +0000
Commit message:
Pseudo;

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 8f027052f23a main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Oct 30 11:39:57 2018 +0000
@@ -0,0 +1,194 @@
+#include "mbed.h"
+
+// Load all the necessary pins, buttons, etc.
+
+// Load all the EMGs
+AnalogIn EMG1; // Move X
+AnalogIn EMG2; // Move Y
+AnalogIn EMG3; // Change direction
+
+// Initiate motor 1
+PwmOut pwmpin1(D6);
+DigitalOut directionpin1(D7);
+InterruptIn motor1A(D12);   // Encoder 1a
+InterruptIn motor1B(D13);   // Encoder 1b
+QEI         Encoder1(D12,D13,NC,64);    // Note that we use X2 encoding, so there are 4200 counts/rotation, as opposed to 8400 from the documentation.
+
+// Initiate motor 2
+DigitalOut directionpin2(D4);
+PwmOut pwmpin2(D5);
+InterruptIn motor2A(D10);   // Encoder 1a
+InterruptIn motor2B(D11);   // Encoder 1b
+QEI         Encoder2(D10,D11,NC,64);    // Note that we use X2 encoding, so there are 4200 counts/rotation, as opposed to 8400 from the documentation.
+
+// -------------------------------------------------------------------------- \\
+
+double FilterEMG1(EMG1){
+    filter emg1
+    return filteredemg1
+}
+
+double FilterEMG2(EMG2){
+    filter emg2
+    return filteredemg2
+}
+
+double FilterEMG3(EMG3){
+    filter emg3
+    return filteredemg3
+}
+
+// ----------------------Read & relate the emgs --------------------------- \\
+
+// We want to know whether we should move X or Y
+bool DirBool = 1; // initialise with moving X
+void ChangeDir(emg3 lezen){
+    // Read EMG 3
+    if(voldoet emg3 aan de voorwaarde? verander dan de x/y bool.){
+        DirBool = !DirBool;
+        return DirBool;
+}
+
+// Start moving in the x-direction
+void MoveX(bool DirBool, EMG1){
+    // first, we check whether or not we should even move in the x-direction
+    if(DirBool == 1){ // We can move in the x-direction if this is true
+ // we make a list of 2 long, checking emg 1 and 2
+ *list*
+ check whether emg 1 is active or not
+ if(emg1 voldoet aan statement){
+     request a change in motor angle // could be done by saying motorangle = motorangle - something we want, check convention!!!
+     }
+     if(emg2 voldoet aan statement){
+         request a change in motor angle // could be done by saying motorangle = motorangle - something we want, check convention!!!
+         }
+         return de angle die we willen veranderen voor de motoren
+ }
+
+// When we should move, we should relate this change in x-direction to a change 
+// in the motor angles, this comes from the inverse kinematics.
+ 
+ void MoveY(bool DirBool, EMG1){
+    // first, we check whether or not we should even move in the y-direction
+    if(DirBool == 0){ // We can move in the y-direction if this is true
+ // we make a list of 2 long, checking emg 1 and 2
+ *list*
+ check whether emg 1 is active or not
+ if(emg1 voldoet aan statement){
+     request a change in motor angle // could be done by saying motorangle = motorangle - something we want, check convention!!!
+     }
+     if(emg2 voldoet aan statement){
+         request a change in motor angle // could be done by saying motorangle = motorangle - something we want, check convention!!!
+         }
+         return de angle die we willen veranderen voor de motoren
+ }
+ 
+// When we should move, we should relate this change in y-direction to a change 
+// in the motor angles, this comes from the inverse kinematics.
+
+// ----------Set the desired motor positions & get the actual ones---------- \\
+
+// Get position motor 1 should be in
+double GetReferencePosition1(){
+    return ReferencePosition1;
+}
+
+// Get position motor 1 actually is in
+double GetActualPosition1(){
+    double ActualPosition = Encoder1.getPulses(); // Gets the actual amount of counts from motor 1. Note the minus sign for convention (CCW = positive counts.)
+    return ActualPosition1;
+}
+
+// Get position motor 2 should be in
+double GetReferencePosition2(){
+    return ReferencePosition2;
+}
+
+// Get position motor 2 actually is in
+double GetActualPosition2(){
+    double ActualPosition2 = Encoder2.getPulses(); // Gets the actual amount of counts from motor 1. Note the minus sign for convention (CCW = positive counts.)
+    return ActualPosition2;
+}
+
+// PID controller for motor 1
+double PID_controller1(double error){
+    static double error_integral = 0;
+    static double error_prev = error; // initialization with this value only done once!
+    static BiQuad LowPassFilter(0.0640, 0.1279, 0.0640, -1.1683, 0.4241);
+    double Ts = 0.01;
+    
+    // Proportional part
+        
+        double Kp = 0.1;
+        double u_k = Kp*error;
+
+    // Integral part
+        double Ki = 0.1;
+        error_integral = error_integral + error * Ts;
+        double u_i = Ki * error_integral;
+    
+    // Derivative part
+        double Kd = 10.1;
+        double error_derivative = (error - error_prev)/Ts;
+        double filtered_error_derivative = LowPassFilter.step(error_derivative);
+        double u_d = Kd * filtered_error_derivative;
+        error_prev = error;
+    // Sum all parts and return it
+    return u_k + u_i + u_d;
+}
+
+// PID controller for motor 2
+double PID_controller2(double error){
+    static double error_integral = 0;
+    static double error_prev = error; // initialization with this value only done once!
+    static BiQuad LowPassFilter(0.0640, 0.1279, 0.0640, -1.1683, 0.4241);
+    double Ts = 0.01;
+    
+    // Proportional part
+        
+        double Kp = 0.1;
+        double u_k = Kp*error;
+
+    // Integral part
+        double Ki = 0.1;
+        error_integral = error_integral + error * Ts;
+        double u_i = Ki * error_integral;
+    
+    // Derivative part
+        double Kd = 10.1;
+        double error_derivative = (error - error_prev)/Ts;
+        double filtered_error_derivative = LowPassFilter.step(error_derivative);
+        double u_d = Kd * filtered_error_derivative;
+        error_prev = error;
+    // Sum all parts and return it
+    return u_k + u_i + u_d;
+}
+
+void SetMotor1(double motorValue){
+    // Given -1<=motorValue<=1, this sets the PWM and direction
+    // bits for motor 1. Positive value makes motor rotating
+    // ccw. motorValues outside range are truncated to
+    // within range
+    if (motorValue >=0) directionpin1=1;
+        else directionpin1=0;
+    if (fabs(motorValue)>1) pwmpin1 = 1;
+        else pwmpin1 = fabs(motorValue);
+}
+
+void SetMotor2(double motorValue){
+    // Given -1<=motorValue<=1, this sets the PWM and direction
+    // bits for motor 1. Positive value makes motor rotating
+    // ccw. motorValues outside range are truncated to
+    // within range
+    if (motorValue >=0) directionpin2=1;
+        else directionpin2=0;
+    if (fabs(motorValue)>1) pwmpin2 = 1;
+        else pwmpin2 = fabs(motorValue);
+}
+
+int main()
+{
+    while (true) {
+
+    }
+}
\ No newline at end of file
diff -r 000000000000 -r 8f027052f23a mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Oct 30 11:39:57 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/e95d10626187
\ No newline at end of file