compile fix

This commit is contained in:
IMback 2017-09-25 19:22:43 +02:00
parent 303f32ad6d
commit 745d009acc
2 changed files with 15 additions and 14 deletions

View file

@ -60,14 +60,14 @@ void Plotter::pu()
} }
} }
static uint16_t Plotter::diamondAngle(int16_t y, int16_t x) //0 - 40000 uint16_t Plotter::diamondAngle(int16_t y, int16_t x) //0 - 40000
{ {
const int32_t scalar = 10000; const int32_t scalar = 10000;
if (y >= 0) return (x >= 0 ? ((int32_t)y*scalar)/(x+y) : 1*scalar-((int32_t)x*scalar)/(-x+y)); if (y >= 0) return (x >= 0 ? ((int32_t)y*scalar)/(x+y) : 1*scalar-((int32_t)x*scalar)/(-x+y));
else return (x < 0 ? 2*scalar-((int32_t)y*scalar)/(-x-y) : 3*scalar+((int32_t)x*scalar)/(x-y)); else return (x < 0 ? 2*scalar-((int32_t)y*scalar)/(-x-y) : 3*scalar+((int32_t)x*scalar)/(x-y));
} }
static uint16_t calculateDelayTime(uint16_t currentDiamondAngle, uint16_t prevDiamondAngle, uint16_t prevSteps) uint16_t Plotter::calculateDelayTime(uint16_t currentDiamondAngle, uint16_t prevDiamondAngle, uint16_t prevSteps)
{ {
uint16_t delayTime = abs(currentDiamondAngle - prevDiamondAngle); uint16_t delayTime = abs(currentDiamondAngle - prevDiamondAngle);
if ( delayTime > 20000) delayTime = delayTime - 20000; if ( delayTime > 20000) delayTime = delayTime - 20000;
@ -85,11 +85,11 @@ void Plotter::moveRelative(int32_t deltaX, int32_t deltaY)
if( deltaX > 50 || deltaY > 50 ) if( deltaX > 50 || deltaY > 50 )
{ {
//compensate backlash //compensate backlash
if((prevDiamondAngle < 10000 || prevDiamondAngle > 30000 ) && deltaX < 0) deltaX = deltaX - BACKLASHX; if((_prevDiamondAngle < 10000 || _prevDiamondAngle > 30000 ) && deltaX < 0) deltaX = deltaX - BACKLASHX;
else ((prevDiamondAngle > 10000 && prevDiamondAngle < 30000 ) && deltaX > 0) deltaX = deltaX + BACKLASHX; else if ((_prevDiamondAngle > 10000 && _prevDiamondAngle < 30000 ) && deltaX > 0) deltaX = deltaX + BACKLASHX;
if((prevDiamondAngle < 20000) && deltaY < 0) deltaY = deltaY - BACKLASHY; if((_prevDiamondAngle < 20000) && deltaY < 0) deltaY = deltaY - BACKLASHY;
else if ((prevDiamondAngle > 20000) && deltaY > 0) deltaY = deltaY + BACKLASHY; else if ((_prevDiamondAngle > 20000) && deltaY > 0) deltaY = deltaY + BACKLASHY;
//delay //delay
uint16_t currentDiamondAngle = diamondAngle(deltaX,deltaY); uint16_t currentDiamondAngle = diamondAngle(deltaX,deltaY);
@ -123,17 +123,18 @@ void Plotter::moveRelative(int32_t deltaX, int32_t deltaY)
_pwm.setDutyB(65535-(currentPos.y+i*StepSizeY)*SCALEY); _pwm.setDutyB(65535-(currentPos.y+i*StepSizeY)*SCALEY);
_delay_us(2000); _delay_us(2000);
} }
//set prev
_prevDiamondAngle = currentDiamondAngle;
_prevSteps = steps;
} }
else delay_us(100); else _delay_us(100);
_pwm.setDutyA(65535-(deltaX+currentPos.x)*SCALEX); _pwm.setDutyA(65535-(deltaX+currentPos.x)*SCALEX);
_pwm.setDutyB(65535-(deltaY+currentPos.Y)*SCALEY); _pwm.setDutyB(65535-(deltaY+currentPos.y)*SCALEY);
if( deltaX > 50 || deltaY > 50 ) if( deltaX > 50 || deltaY > 50 )
{ {
//set prev //set current position
prevDiamondAngle = currentDiamondAngle;
prevSteps = steps;
currentPos.x = deltaX+currentPos.x; currentPos.x = deltaX+currentPos.x;
currentPos.y = deltaY+currentPos.y; currentPos.y = deltaY+currentPos.y;
} }
@ -148,6 +149,6 @@ void Plotter::moveto(const uint16_t nx, const uint16_t ny)
{ {
int32_t deltaX = nx - currentPos.x; //117 units per mm int32_t deltaX = nx - currentPos.x; //117 units per mm
int32_t deltaY = ny - currentPos.y; //121 units per mm int32_t deltaY = ny - currentPos.y; //121 units per mm
moveRelatvie(deltaX, deltaY); moveRelative(deltaX, deltaY);
} }

View file

@ -26,8 +26,8 @@ private:
Serial* _serial; Serial* _serial;
static uint16_t diamondAngle(int16_t y, int16_t x); uint16_t diamondAngle(int16_t y, int16_t x);
static uint16_t calculateDelayTime(uint16_t currentDiamondAngle, uint16_t prevDiamondAngle, uint16_t prevSteps); uint16_t calculateDelayTime(uint16_t currentDiamondAngle, uint16_t prevDiamondAngle, uint16_t prevSteps);
public: public: