Werkt

Dependencies:   Encoder HIDScope MODSERIAL QEI mbed

Fork of Inverse_kinematics_PIDController by Casper Kroon

main.cpp

Committer:
CasperK
Date:
2018-10-17
Revision:
2:ffd0553701d3
Parent:
1:fc216448bb57
Child:
3:56cbed6caacc

File content as of revision 2:ffd0553701d3:

#include "mbed.h"
#include "math.h"
#include "MODSERIAL.h"

DigitalIn button(SW2);
DigitalOut directionpin1(D7);
DigitalOut directionpin2(D8);
MODSERIAL pc(USBTX, USBRX);

volatile bool emg0;
volatile bool emg1;
volatile bool emg2;
volatile bool y_direction;

volatile double x_position = 0;
volatile double y_position = 0;
volatile double motor1_angle;
volatile double motor2_angle;
volatile double direction;

const float length = 0.300; //length in m (placeholder)
const int C1 = 3; //motor 1 gear ratio (placeholder)
const int C2 = 3; //motor 2 gear ratio
    
void xDirection(double &motor1_angle, double &motor2_angle) {
        //direction of the motion
        if (emg0 && !emg1) {
            directionpin1 = true;
            directionpin2 = true;
            direction = 1;
        }
        else if (!emg0 && emg1) {
            directionpin1 = false;
            directionpin2 = false;
            direction = -1;
        }

    if (emg0 || emg1){
        //calculating the motion
        x_position = x_position + direction;
        motor1_angle = pow(sin( x_position ), -1) / length;
        y_position = y_position + direction;
        motor2_angle = pow(cos( x_position ), -1) / length;
    }
}

void yDirection (int &motor2_angle) {      
    if (emg2) {
        //direction of the motion
        if (y_direction) {
            directionpin2 = true;
            direction = 1;
        }
        else if (!y_direction) {
            directionpin2 = false;
            direction = -1;
        }
        
        //calculating the motion
        y_position = y_position + direction;
        motor2_angle = C2 * y_position;
    }
}

int main() {
    pc.printf(" ** program reset **\n\r");
    while (true) {
        xDirection(motor1_angle, motor2_angle);
        yDirection(motor2_angle);
        
        pc.printf("motor1 angle: %i\n\r", motor1_angle);
        pc.printf("motor2 angle: %i\n\r\n", motor2_angle);
        
        wait(0.5f); //can also be done with ticker, to be sure that it happens exactly every 0.5 seconds
    }
}