Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Encoder HIDScope MODSERIAL mbed QEI
Fork of Inverse_kinematics by
main.cpp
- Committer:
- CasperK
- Date:
- 2018-10-17
- Revision:
- 3:56cbed6caacc
- Parent:
- 2:ffd0553701d3
- Child:
- 4:f36406c9e42f
File content as of revision 3:56cbed6caacc:
#include "mbed.h"
#include "math.h"
#include "MODSERIAL.h"
DigitalIn button(SW2);
DigitalOut directionpin1(D7);
DigitalOut directionpin2(D8);
MODSERIAL pc(USBTX, USBRX);
volatile bool emg0Bool = false;
volatile bool emg1Bool = false;
volatile bool emg2Bool = false;
volatile bool y_direction = true;
volatile double x_position = 0;
volatile double y_position = 0;
volatile double motor1_angle;
volatile double motor2_angle;
volatile int 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() {
//direction of the motion
if (emg0Bool && !emg1Bool) {
directionpin1 = true;
directionpin2 = true;
direction = 1;
}
else if (!emg0Bool && emg1Bool) {
directionpin1 = false;
directionpin2 = false;
direction = -1;
}
if (emg0Bool || emg1Bool){
//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 () {
if (emg2Bool) {
//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) {
if (button) {
y_direction = !y_direction;
}
xDirection();
yDirection();
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
}
}
