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;
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));
}
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);
if ( delayTime > 20000) delayTime = delayTime - 20000;
@ -85,11 +85,11 @@ void Plotter::moveRelative(int32_t deltaX, int32_t deltaY)
if( deltaX > 50 || deltaY > 50 )
{
//compensate backlash
if((prevDiamondAngle < 10000 || prevDiamondAngle > 30000 ) && deltaX < 0) deltaX = deltaX - BACKLASHX;
else ((prevDiamondAngle > 10000 && prevDiamondAngle < 30000 ) && deltaX > 0) deltaX = deltaX + BACKLASHX;
if((_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;
else 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;
//delay
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);
_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.setDutyB(65535-(deltaY+currentPos.Y)*SCALEY);
_pwm.setDutyB(65535-(deltaY+currentPos.y)*SCALEY);
if( deltaX > 50 || deltaY > 50 )
{
//set prev
prevDiamondAngle = currentDiamondAngle;
prevSteps = steps;
//set current position
currentPos.x = deltaX+currentPos.x;
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 deltaY = ny - currentPos.y; //121 units per mm
moveRelatvie(deltaX, deltaY);
moveRelative(deltaX, deltaY);
}

View file

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