Biorobotics, basic motor control with button and potmeter

Dependencies:   HIDScope mbed

Revision:
0:762bb19ac7d2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Oct 06 10:19:50 2017 +0000
@@ -0,0 +1,84 @@
+#include "mbed.h"
+#include "math.h"
+
+DigitalIn button1(D8);
+AnalogIn potMeterIn(A0);
+DigitalOut direction(D7);
+PwmOut mmp(D6);
+
+float valpow;
+int toggle = 0;
+
+
+int main()
+{
+    while(true) {
+       
+        if (button1 == false) {
+            toggle = !toggle;
+            wait(0.3f);
+        }
+        if (toggle == 0) {
+            direction = 0;
+        } else if (toggle == 1) {
+            direction = 1;
+        }
+        valpow = potMeterIn.read()/1023;
+        mmp.write(valpow);
+    }
+    //return;
+}
+
+/*
+float GetReferenceVelocity()
+{
+    // Returns reference velocity in rad/s.
+    // Positive value means clockwise rotation.
+    const float maxVelocity=8.4; // in rad/s of course!
+    float referenceVelocity;  // in rad/s
+    if (button1)   {
+        // Clockwise rotation
+        referenceVelocity = potMeterIn * maxVelocity;
+    } else {
+        // Counterclockwise rotation
+        referenceVelocity = -1*potMeterIn * maxVelocity;
+    }
+    return referenceVelocity;
+}
+
+void SetMotor1(float motorValue)
+{
+    // Given -1<=motorValue<=1, this sets the PWM and direction
+    // bits for motor 1. Positive value makes motor rotating
+    // clockwise. motorValues outside range are truncated to
+    // within range
+    if (motorValue >=0) {
+        motor1DirectionPin = 1;
+    } else {
+        motor1DirectionPin = 0;
+    }
+    if (fabs(motorValue)>1) {
+        motor1MagnitudePin = 1;
+    } else {
+        motor1MagnitudePin = fabs(motorValue);
+    }
+}
+
+float FeedForwardControl(float referenceVelocity)
+{
+    // very simple linear feed-forward control
+    const float MotorGain=8.4; // unit: (rad/s) / PWM
+    float motorValue = referenceVelocity / MotorGain;
+    return motorValue;
+}
+
+void MeasureAndControl(void)
+{
+    // This function measures the potmeter position, extracts a
+    // reference velocity from it, and controls the motor with
+    // a simple FeedForward controller. Call this from a Ticker.
+    float referenceVelocity = GetReferenceVelocity();
+    float motorValue = FeedForwardControl(referenceVelocity);
+    SetMotor1(motorValue);
+}
+*/
\ No newline at end of file