Fix potential very bad geometry bug
This commit is contained in:
parent
254f42b118
commit
666671e306
1 changed files with 31 additions and 8 deletions
|
|
@ -91,7 +91,7 @@ SdFile root;
|
||||||
SdFile file;
|
SdFile file;
|
||||||
uint32_t filesize=0;
|
uint32_t filesize=0;
|
||||||
uint32_t sdpos=0;
|
uint32_t sdpos=0;
|
||||||
unsigned long timediff=0;
|
long timediff=0;
|
||||||
bool sdmode=false;
|
bool sdmode=false;
|
||||||
bool sdactive=false;
|
bool sdactive=false;
|
||||||
int16_t n;
|
int16_t n;
|
||||||
|
|
@ -347,8 +347,9 @@ inline bool code_seen(char code)
|
||||||
strchr_pointer = strchr(cmdbuffer[bufindr], code);
|
strchr_pointer = strchr(cmdbuffer[bufindr], code);
|
||||||
return (strchr_pointer != NULL); //Return True if a character was found
|
return (strchr_pointer != NULL); //Return True if a character was found
|
||||||
}
|
}
|
||||||
|
//experimental feedrate calc
|
||||||
|
float d=0;
|
||||||
|
float xdiff=0,ydiff=0,zdiff=0,ediff=0;
|
||||||
|
|
||||||
inline void process_commands()
|
inline void process_commands()
|
||||||
{
|
{
|
||||||
|
|
@ -360,11 +361,33 @@ inline void process_commands()
|
||||||
case 0: // G0 -> G1
|
case 0: // G0 -> G1
|
||||||
case 1: // G1
|
case 1: // G1
|
||||||
get_coordinates(); // For X Y Z E F
|
get_coordinates(); // For X Y Z E F
|
||||||
x_steps_to_take = abs(destination_x - current_x)*x_steps_per_unit;
|
xdiff=(destination_x - current_x);
|
||||||
y_steps_to_take = abs(destination_y - current_y)*y_steps_per_unit;
|
ydiff=(destination_y - current_y);
|
||||||
z_steps_to_take = abs(destination_z - current_z)*z_steps_per_unit;
|
zdiff=(destination_z - current_z);
|
||||||
e_steps_to_take = abs(destination_e - current_e)*e_steps_per_unit;
|
ediff=(destination_e - current_e);
|
||||||
|
x_steps_to_take = abs(xdiff)*x_steps_per_unit;
|
||||||
|
y_steps_to_take = abs(ydiff)*y_steps_per_unit;
|
||||||
|
z_steps_to_take = abs(zdiff)*z_steps_per_unit;
|
||||||
|
e_steps_to_take = abs(ediff)*e_steps_per_unit;
|
||||||
|
if(feedrate<10)
|
||||||
|
feedrate=10;
|
||||||
|
/*//experimental feedrate calc
|
||||||
|
if(abs(xdiff)>0.1 && abs(ydiff)>0.1)
|
||||||
|
d=sqrt(xdiff*xdiff+ydiff*ydiff);
|
||||||
|
else if(abs(xdiff)>0.1)
|
||||||
|
d=abs(xdiff);
|
||||||
|
else if(abs(ydiff)>0.1)
|
||||||
|
d=abs(ydiff);
|
||||||
|
else if(abs(zdiff)>0.05)
|
||||||
|
d=abs(zdiff);
|
||||||
|
else if(abs(ediff)>0.1)
|
||||||
|
d=abs(ediff);
|
||||||
|
else d=1; //extremely slow move, should be okay for moves under 0.1mm
|
||||||
|
time_for_move=(xdiff/(feedrate/60000000));
|
||||||
|
//time=60000000*dist/feedrate
|
||||||
|
//int feedz=(60000000*zdiff)/time_for_move;
|
||||||
|
//if(feedz>maxfeed)
|
||||||
|
*/
|
||||||
#define X_TIME_FOR_MOVE ((float)x_steps_to_take / (x_steps_per_unit*feedrate/60000000))
|
#define X_TIME_FOR_MOVE ((float)x_steps_to_take / (x_steps_per_unit*feedrate/60000000))
|
||||||
#define Y_TIME_FOR_MOVE ((float)y_steps_to_take / (y_steps_per_unit*feedrate/60000000))
|
#define Y_TIME_FOR_MOVE ((float)y_steps_to_take / (y_steps_per_unit*feedrate/60000000))
|
||||||
#define Z_TIME_FOR_MOVE ((float)z_steps_to_take / (z_steps_per_unit*feedrate/60000000))
|
#define Z_TIME_FOR_MOVE ((float)z_steps_to_take / (z_steps_per_unit*feedrate/60000000))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue