initial
This commit is contained in:
commit
dd6f37a960
15 changed files with 1841 additions and 0 deletions
91
plotter.cpp
Normal file
91
plotter.cpp
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
#include "plotter.h"
|
||||
|
||||
const int SCALEX=5;
|
||||
const int SCALEY=5;
|
||||
|
||||
Plotter::Plotter(volatile unsigned char *penPort, const char penPin, Serial* serial): _pwm( &TCCR1A, &TCCR1B, &OCR1A, &OCR1B, &ICR1, 0b00000001)
|
||||
{
|
||||
_serial=serial;
|
||||
_penPort=penPort;
|
||||
_penPin=penPin;
|
||||
basicposition();
|
||||
}
|
||||
|
||||
Point Plotter::getCurrentPos()
|
||||
{
|
||||
return currentPos;
|
||||
}
|
||||
|
||||
|
||||
void Plotter::demo()
|
||||
{
|
||||
moveto(65535,0);
|
||||
moveto(65535,42129);
|
||||
moveto(0,42129);
|
||||
moveto(0,0);
|
||||
pd();
|
||||
pu();
|
||||
}
|
||||
|
||||
void Plotter::basicposition()
|
||||
{
|
||||
moveto(0, 0);
|
||||
}
|
||||
|
||||
void Plotter::pd()
|
||||
{
|
||||
_delay_us(1000);
|
||||
writePin(_penPort, _penPin, true);
|
||||
_delay_us(1000);
|
||||
}
|
||||
|
||||
void Plotter::pu()
|
||||
{
|
||||
_delay_us(1000);
|
||||
writePin(_penPort, _penPin, false);
|
||||
_delay_us(1000);
|
||||
}
|
||||
|
||||
void Plotter::moveto(Point *pt)
|
||||
{
|
||||
moveto((*pt).x,(*pt).y);
|
||||
}
|
||||
|
||||
void Plotter::moveto(const uint16_t nx, const uint16_t ny)
|
||||
{
|
||||
int deltaX = nx - currentPos.x; //-5100
|
||||
int deltaY = ny - currentPos.y; //0
|
||||
|
||||
int steps;
|
||||
int32_t StepSizeX=0;
|
||||
int32_t StepSizeY=0;
|
||||
|
||||
if( abs(deltaX) > abs(deltaY))
|
||||
{
|
||||
if(deltaX != 0) StepSizeX = 100*(deltaX/abs(deltaX));// -100
|
||||
if(deltaY != 0) StepSizeY = ((int32_t)abs(deltaY)*100)/abs((int32_t)deltaX)*(deltaY/abs(deltaY));// 0
|
||||
steps = deltaX/StepSizeX;
|
||||
}
|
||||
else
|
||||
{
|
||||
StepSizeX = (((int32_t)abs(deltaX)*100)/abs((int32_t)deltaY))*(deltaX/abs(deltaX));
|
||||
StepSizeY = 100*(deltaY/abs(deltaY));
|
||||
steps = deltaY/StepSizeY;
|
||||
}
|
||||
|
||||
for( int i = 0; i < steps; i++)
|
||||
{
|
||||
_pwm.setDutyA(65535-(currentPos.x+i*StepSizeX)*SCALEX);
|
||||
_pwm.setDutyB(65535-(currentPos.y+i*StepSizeY)*SCALEY);
|
||||
_delay_us(10000);
|
||||
}
|
||||
|
||||
|
||||
_pwm.setDutyA(65535-nx*SCALEX);
|
||||
_pwm.setDutyB(65535-ny*SCALEY);
|
||||
if( abs((currentPos.x+steps*StepSizeX) - nx) > 10 || abs((currentPos.y+steps*StepSizeY) - ny) > 10 ) _delay_us(200000);
|
||||
|
||||
currentPos.x = nx;
|
||||
currentPos.y = ny;
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue