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.
Diff: LinearMotion.cpp
- Revision:
- 1:cf60b60a1b5b
- Parent:
- 0:3058939fa37c
diff -r 3058939fa37c -r cf60b60a1b5b LinearMotion.cpp
--- a/LinearMotion.cpp Sat Apr 28 21:08:58 2012 +0000
+++ b/LinearMotion.cpp Fri May 04 06:25:41 2012 +0000
@@ -1,8 +1,5 @@
#include "LinearMotion.h"
-#define STEPS_PER_PIXEL 600
-#define Z_STEPS_PER_PIXEL 960
-#define STEP_BUFFER 4 // Make a gap of STEPS_PER_PIXEL/STEP_BUFFER between each pixel
-#define INITIAL_DELAY 1200 // in us
+
void LinearMotion::setStepMotors(Stepper * s1, Stepper * s2, Stepper * s3, DigitalOut * solenoid, bool * pause, bool * stop) {
_sol = solenoid;
@@ -93,12 +90,12 @@
Stepper ** stepMotor, int maxSpeed, bool solenoidOn) {
int fxy,fxz;
int rowLoc = 0;
- int delay = INITIAL_DELAY;
+ int delay = _initial_delay;
int delayPos = 0;
Vector lastRow = {-nextRow.x, -nextRow.y, -nextRow.z};
Vector dir = {1, 1, 1};
long stepsPerPixel;
- _z_slantways ? stepsPerPixel = Z_STEPS_PER_PIXEL : stepsPerPixel = STEPS_PER_PIXEL;
+ _z_slantways ? stepsPerPixel = _z_steps_per_pixel : stepsPerPixel = _steps_per_pixel;
if(delta.x < 0)
dir.x = 0; //towards motor
@@ -160,11 +157,11 @@
void LinearMotion::doLinear(Vector delta, Stepper** stepMotor, int maxSpeed, bool solenoidOn) {
int fxy,fxz;
int pixelLoc = 0;
- int delay = INITIAL_DELAY;
+ int delay = _initial_delay;
int farthestDelay = 0;
Vector dir = {1, 1, 1};
long stepsPerPixel;
- _z ? stepsPerPixel = Z_STEPS_PER_PIXEL : stepsPerPixel = STEPS_PER_PIXEL;
+ _z ? stepsPerPixel = _z_steps_per_pixel : stepsPerPixel = _steps_per_pixel;
if(delta.x < 0)
dir.x = 0; //towards motor
@@ -184,11 +181,11 @@
curPos.z = 0;
while (!(*_stopped) && (curPos.x<=delta.x)&&(curPos.y<=delta.y)&&(curPos.z<=delta.z)){
if (solenoidOn) {
- if ((reversing && ((delta.x - curPos.x - stepsPerPixel / STEP_BUFFER) % stepsPerPixel == 0)) ||
- (!reversing && ((curPos.x + stepsPerPixel / STEP_BUFFER) % stepsPerPixel == 0)))
+ if ((reversing && ((delta.x - curPos.x - stepsPerPixel / _step_buffer) % stepsPerPixel == 0)) ||
+ (!reversing && ((curPos.x + stepsPerPixel / _step_buffer) % stepsPerPixel == 0)))
*_sol = _bmp.isPixel(pixelLoc++, reversing);
- else if ((reversing && ((delta.x - curPos.x + stepsPerPixel / STEP_BUFFER) % stepsPerPixel == 0)) ||
- (!reversing && ((curPos.x - stepsPerPixel / STEP_BUFFER) % stepsPerPixel == 0)) )
+ else if ((reversing && ((delta.x - curPos.x + stepsPerPixel / _step_buffer) % stepsPerPixel == 0)) ||
+ (!reversing && ((curPos.x - stepsPerPixel / _step_buffer) % stepsPerPixel == 0)) )
*_sol = 0;
}
++curPos.x;
@@ -218,11 +215,20 @@
wait_us(delay); //Implement linear accelleration!
if (*_paused) {
enableSteppers(false);
+ *_sol = 0;
while(*_paused){printf("Pausing!\n\r");}
enableSteppers(true);
}
}
+ *_sol = 0;
}
+
+void LinearMotion::updateSettings(long steps_per_pixel, long initial_delay, long step_buffer) {
+ _steps_per_pixel = steps_per_pixel;
+ _z_steps_per_pixel = (steps_per_pixel * 8) / 5;
+ _step_buffer = step_buffer; // Make a gap of _steps_per_pixel/_step_buffer between each pixel
+ _initial_delay = initial_delay; // in us
+}
int LinearMotion::delayTime (int oldDelay, int stepNumber) {
return oldDelay - (2*oldDelay)/(4*stepNumber + 1);