Biorobotics, basic motor control with button and potmeter

Dependencies:   HIDScope mbed

main.cpp

Committer:
Frimzenner
Date:
2017-10-06
Revision:
0:762bb19ac7d2

File content as of revision 0:762bb19ac7d2:

#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);
}
*/