Control up to two motors using filtered EMG signals and a PID controller

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

Fork of Minor_test_serial by First Last

Revision:
15:b76b8cff4d8f
Parent:
14:664870b5d153
Child:
16:27430afe663e
--- a/main.cpp	Thu Sep 21 10:02:29 2017 +0000
+++ b/main.cpp	Thu Sep 21 11:00:55 2017 +0000
@@ -2,6 +2,10 @@
 #include "MODSERIAL.h"
 #include "HIDScope.h"
 #include "QEI.h"
+#include "FastPWM.h"
+
+enum robotStates {KILLED, ACTIVE};
+robotStates currentState = KILLED;
 
 QEI Encoder(D12,D13,NC,64, QEI::X4_ENCODING);
 MODSERIAL pc(USBTX, USBRX);
@@ -12,6 +16,11 @@
 
 // Defining inputs
 InterruptIn sw2(SW2);
+InterruptIn sw3(SW3);
+AnalogIn pot(A0);
+
+// Enabling motors
+bool motorsOn = true;
 
 
 float pwmPeriod = 1.0/5000.0;
@@ -28,28 +37,43 @@
     }
     
 void killSwitch(){
-    motor1_pwm.write(0.0);
+    pc.printf("Motors turned off");
+    currentState = KILLED;
     }
     
+void turnMotorsOn(){
+    pc.printf("Motors turned on");
+    currentState = ACTIVE; 
+    }
+
+    
 void M1switchDirection(){
     motor1_direction = !motor1_direction;
     }
 
 int frequency_pwm = 10000; //10kHz PWM
 
-
 int main()
     {
     motor1_direction = false;
     motor1_pwm.period(pwmPeriod);//T=1/f 
     sw2.fall(&killSwitch);
-
+    sw3.fall(&turnMotorsOn);
     pc.baud(115200);
-    encoderTicker.attach(readEncoder, 1.0);    
+    encoderTicker.attach(readEncoder, 1.0);
+      
     pc.printf("Encoder ticker attached and baudrate set");
     
-    motor1_pwm.write(100.0/100.0);//write Duty Cycle
-        
-    sw2.fall(&killSwitch);
+    while(true){
+            switch(currentState){
+                case KILLED:
+                    motor1_pwm.write(0.0);
+                    break;
+                case ACTIVE:
+                    motor1_pwm.write(pot.read()); // Motor speed proportional to pot meter                
+                    break;
+            }  
+        }
+    
     }