Biorobotics, basic motor control with button and potmeter

Dependencies:   HIDScope mbed

Files at this revision

API Documentation at this revision

Comitter:
Frimzenner
Date:
Fri Oct 06 10:19:50 2017 +0000
Commit message:
Motor control with potmeter and button;

Changed in this revision

HIDScope.lib Show annotated file Show diff for this revision Revisions of this file
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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/HIDScope.lib	Fri Oct 06 10:19:50 2017 +0000
@@ -0,0 +1,1 @@
+http://os.mbed.com/users/tomlankhorst/code/HIDScope/#d23c6edecc49
--- /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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri Oct 06 10:19:50 2017 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/mbed_official/code/mbed/builds/675da3299148
\ No newline at end of file