compile fix
This commit is contained in:
parent
303f32ad6d
commit
745d009acc
25
plotter.cpp
25
plotter.cpp
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue