commit
e7aae314de
|
@ -70,7 +70,7 @@ Here are some standard links for getting your machine calibrated:
|
||||||
|
|
||||||
// Optional custom name for your RepStrap or other custom machine
|
// Optional custom name for your RepStrap or other custom machine
|
||||||
// Displayed in the LCD "Ready" message
|
// Displayed in the LCD "Ready" message
|
||||||
// #define CUSTOM_MACHINE_NAME "This RepRap"
|
// #define CUSTOM_MACHINE_NAME "3D Printer"
|
||||||
|
|
||||||
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
|
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
|
||||||
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
|
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
|
||||||
|
|
|
@ -850,6 +850,11 @@ void get_command()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float code_has_value() {
|
||||||
|
char c = *(strchr_pointer + 1);
|
||||||
|
return (c >= '0' && c <= '9') || c == '-' || c == '+' || c == '.';
|
||||||
|
}
|
||||||
|
|
||||||
float code_value() {
|
float code_value() {
|
||||||
float ret;
|
float ret;
|
||||||
char *e = strchr(strchr_pointer, 'E');
|
char *e = strchr(strchr_pointer, 'E');
|
||||||
|
@ -1814,22 +1819,25 @@ inline void gcode_G28() {
|
||||||
|
|
||||||
home_all_axis = !(homeX || homeY || homeZ) || (homeX && homeY && homeZ);
|
home_all_axis = !(homeX || homeY || homeZ) || (homeX && homeY && homeZ);
|
||||||
|
|
||||||
|
if (home_all_axis || homeZ) {
|
||||||
|
|
||||||
#if Z_HOME_DIR > 0 // If homing away from BED do Z first
|
#if Z_HOME_DIR > 0 // If homing away from BED do Z first
|
||||||
|
|
||||||
if (home_all_axis || homeZ) HOMEAXIS(Z);
|
HOMEAXIS(Z);
|
||||||
|
|
||||||
#elif !defined(Z_SAFE_HOMING) && defined(Z_RAISE_BEFORE_HOMING) && Z_RAISE_BEFORE_HOMING > 0
|
#elif !defined(Z_SAFE_HOMING) && defined(Z_RAISE_BEFORE_HOMING) && Z_RAISE_BEFORE_HOMING > 0
|
||||||
|
|
||||||
// Raise Z before homing any other axes
|
// Raise Z before homing any other axes
|
||||||
if (home_all_axis || homeZ) {
|
// (Does this need to be "negative home direction?" Why not just use Z_RAISE_BEFORE_HOMING?)
|
||||||
destination[Z_AXIS] = -Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS); // Set destination away from bed
|
destination[Z_AXIS] = -Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS);
|
||||||
feedrate = max_feedrate[Z_AXIS] * 60;
|
feedrate = max_feedrate[Z_AXIS] * 60;
|
||||||
line_to_destination();
|
line_to_destination();
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
} // home_all_axis || homeZ
|
||||||
|
|
||||||
#ifdef QUICK_HOME
|
#ifdef QUICK_HOME
|
||||||
|
|
||||||
if (home_all_axis || (homeX && homeY)) { // First diagonal move
|
if (home_all_axis || (homeX && homeY)) { // First diagonal move
|
||||||
|
@ -1897,68 +1905,70 @@ inline void gcode_G28() {
|
||||||
if (home_all_axis || homeY) HOMEAXIS(Y);
|
if (home_all_axis || homeY) HOMEAXIS(Y);
|
||||||
|
|
||||||
// Set the X position, if included
|
// Set the X position, if included
|
||||||
// Adds the home_offset as well, which may be wrong
|
if (code_seen(axis_codes[X_AXIS]) && code_has_value())
|
||||||
if (code_seen(axis_codes[X_AXIS])) {
|
current_position[X_AXIS] = code_value();
|
||||||
float v = code_value();
|
|
||||||
if (v) current_position[X_AXIS] = v
|
|
||||||
#ifndef SCARA
|
|
||||||
+ home_offset[X_AXIS]
|
|
||||||
#endif
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the Y position, if included
|
// Set the Y position, if included
|
||||||
// Adds the home_offset as well, which may be wrong
|
if (code_seen(axis_codes[Y_AXIS]) && code_has_value())
|
||||||
if (code_seen(axis_codes[Y_AXIS])) {
|
current_position[Y_AXIS] = code_value();
|
||||||
float v = code_value();
|
|
||||||
if (v) current_position[Y_AXIS] = v
|
|
||||||
#ifndef SCARA
|
|
||||||
+ home_offset[Y_AXIS]
|
|
||||||
#endif
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Home Z last if homing towards the bed
|
// Home Z last if homing towards the bed
|
||||||
#if Z_HOME_DIR < 0
|
#if Z_HOME_DIR < 0
|
||||||
|
|
||||||
#ifndef Z_SAFE_HOMING
|
if (home_all_axis || homeZ) {
|
||||||
|
|
||||||
if (home_all_axis || homeZ) HOMEAXIS(Z);
|
#ifdef Z_SAFE_HOMING
|
||||||
|
|
||||||
#else // Z_SAFE_HOMING
|
|
||||||
|
|
||||||
if (home_all_axis) {
|
if (home_all_axis) {
|
||||||
|
|
||||||
|
current_position[Z_AXIS] = 0;
|
||||||
|
sync_plan_position();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Set the probe (or just the nozzle) destination to the safe homing point
|
||||||
|
//
|
||||||
|
// NOTE: If current_position[X_AXIS] or current_position[Y_AXIS] were set above
|
||||||
|
// then this may not work as expected.
|
||||||
destination[X_AXIS] = round(Z_SAFE_HOMING_X_POINT - X_PROBE_OFFSET_FROM_EXTRUDER);
|
destination[X_AXIS] = round(Z_SAFE_HOMING_X_POINT - X_PROBE_OFFSET_FROM_EXTRUDER);
|
||||||
destination[Y_AXIS] = round(Z_SAFE_HOMING_Y_POINT - Y_PROBE_OFFSET_FROM_EXTRUDER);
|
destination[Y_AXIS] = round(Z_SAFE_HOMING_Y_POINT - Y_PROBE_OFFSET_FROM_EXTRUDER);
|
||||||
destination[Z_AXIS] = -Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS); // Set destination away from bed
|
destination[Z_AXIS] = -Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS); // Set destination away from bed
|
||||||
feedrate = XY_TRAVEL_SPEED;
|
feedrate = XY_TRAVEL_SPEED;
|
||||||
current_position[Z_AXIS] = 0;
|
// This could potentially move X, Y, Z all together
|
||||||
|
|
||||||
sync_plan_position();
|
|
||||||
line_to_destination();
|
line_to_destination();
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
|
|
||||||
|
// Set current X, Y is the Z_SAFE_HOMING_POINT minus PROBE_OFFSET_FROM_EXTRUDER
|
||||||
current_position[X_AXIS] = destination[X_AXIS];
|
current_position[X_AXIS] = destination[X_AXIS];
|
||||||
current_position[Y_AXIS] = destination[Y_AXIS];
|
current_position[Y_AXIS] = destination[Y_AXIS];
|
||||||
|
|
||||||
|
// Home the Z axis
|
||||||
HOMEAXIS(Z);
|
HOMEAXIS(Z);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Let's see if X and Y are homed and probe is inside bed area.
|
else if (homeZ) { // Don't need to Home Z twice
|
||||||
if (homeZ) {
|
|
||||||
|
|
||||||
|
// Let's see if X and Y are homed
|
||||||
if (axis_known_position[X_AXIS] && axis_known_position[Y_AXIS]) {
|
if (axis_known_position[X_AXIS] && axis_known_position[Y_AXIS]) {
|
||||||
|
|
||||||
|
// Make sure the probe is within the physical limits
|
||||||
|
// NOTE: This doesn't necessarily ensure the probe is also within the bed!
|
||||||
float cpx = current_position[X_AXIS], cpy = current_position[Y_AXIS];
|
float cpx = current_position[X_AXIS], cpy = current_position[Y_AXIS];
|
||||||
if ( cpx >= X_MIN_POS - X_PROBE_OFFSET_FROM_EXTRUDER
|
if ( cpx >= X_MIN_POS - X_PROBE_OFFSET_FROM_EXTRUDER
|
||||||
&& cpx <= X_MAX_POS - X_PROBE_OFFSET_FROM_EXTRUDER
|
&& cpx <= X_MAX_POS - X_PROBE_OFFSET_FROM_EXTRUDER
|
||||||
&& cpy >= Y_MIN_POS - Y_PROBE_OFFSET_FROM_EXTRUDER
|
&& cpy >= Y_MIN_POS - Y_PROBE_OFFSET_FROM_EXTRUDER
|
||||||
&& cpy <= Y_MAX_POS - Y_PROBE_OFFSET_FROM_EXTRUDER) {
|
&& cpy <= Y_MAX_POS - Y_PROBE_OFFSET_FROM_EXTRUDER) {
|
||||||
|
// Set the plan current position to X, Y, 0
|
||||||
current_position[Z_AXIS] = 0;
|
current_position[Z_AXIS] = 0;
|
||||||
plan_set_position(cpx, cpy, 0, current_position[E_AXIS]);
|
plan_set_position(cpx, cpy, 0, current_position[E_AXIS]); // = sync_plan_position
|
||||||
destination[Z_AXIS] = -Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS); // Set destination away from bed
|
|
||||||
feedrate = max_feedrate[Z_AXIS] * 60; // max_feedrate is in mm/s. line_to_destination is feedrate/60.
|
// Set Z destination away from bed and raise the axis
|
||||||
|
// NOTE: This should always just be Z_RAISE_BEFORE_HOMING unless...???
|
||||||
|
destination[Z_AXIS] = -Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS);
|
||||||
|
feedrate = max_feedrate[Z_AXIS] * 60; // feedrate (mm/m) = max_feedrate (mm/s)
|
||||||
line_to_destination();
|
line_to_destination();
|
||||||
st_synchronize();
|
st_synchronize();
|
||||||
|
|
||||||
|
// Home the Z axis
|
||||||
HOMEAXIS(Z);
|
HOMEAXIS(Z);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1972,22 +1982,27 @@ inline void gcode_G28() {
|
||||||
SERIAL_ECHO_START;
|
SERIAL_ECHO_START;
|
||||||
SERIAL_ECHOLNPGM(MSG_POSITION_UNKNOWN);
|
SERIAL_ECHOLNPGM(MSG_POSITION_UNKNOWN);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#endif // Z_SAFE_HOMING
|
} // !home_all_axes && homeZ
|
||||||
|
|
||||||
|
#else // !Z_SAFE_HOMING
|
||||||
|
|
||||||
|
HOMEAXIS(Z);
|
||||||
|
|
||||||
|
#endif // !Z_SAFE_HOMING
|
||||||
|
|
||||||
|
} // home_all_axis || homeZ
|
||||||
|
|
||||||
#endif // Z_HOME_DIR < 0
|
#endif // Z_HOME_DIR < 0
|
||||||
|
|
||||||
// Set the Z position, if included
|
// Set the Z position, if included
|
||||||
// Adds the home_offset as well, which may be wrong
|
if (code_seen(axis_codes[Z_AXIS]) && code_has_value())
|
||||||
if (code_seen(axis_codes[Z_AXIS])) {
|
current_position[Z_AXIS] = code_value();
|
||||||
float v = code_value();
|
|
||||||
if (v) current_position[Z_AXIS] = v + home_offset[Z_AXIS];
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(ENABLE_AUTO_BED_LEVELING) && (Z_HOME_DIR < 0)
|
#if defined(ENABLE_AUTO_BED_LEVELING) && (Z_HOME_DIR < 0)
|
||||||
if (home_all_axis || homeZ) current_position[Z_AXIS] += zprobe_zoffset; // Add Z_Probe offset (the distance is negative)
|
if (home_all_axis || homeZ) current_position[Z_AXIS] += zprobe_zoffset; // Add Z_Probe offset (the distance is negative)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sync_plan_position();
|
sync_plan_position();
|
||||||
|
|
||||||
#endif // else DELTA
|
#endif // else DELTA
|
||||||
|
|
|
@ -70,7 +70,7 @@ Here are some standard links for getting your machine calibrated:
|
||||||
|
|
||||||
// Optional custom name for your RepStrap or other custom machine
|
// Optional custom name for your RepStrap or other custom machine
|
||||||
// Displayed in the LCD "Ready" message
|
// Displayed in the LCD "Ready" message
|
||||||
// #define CUSTOM_MACHINE_NAME "This RepRap"
|
// #define CUSTOM_MACHINE_NAME "3D Printer"
|
||||||
|
|
||||||
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
|
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
|
||||||
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
|
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
|
||||||
|
|
|
@ -64,7 +64,7 @@ Here are some standard links for getting your machine calibrated:
|
||||||
|
|
||||||
// Optional custom name for your RepStrap or other custom machine
|
// Optional custom name for your RepStrap or other custom machine
|
||||||
// Displayed in the LCD "Ready" message
|
// Displayed in the LCD "Ready" message
|
||||||
// #define CUSTOM_MACHINE_NAME "This RepRap"
|
// #define CUSTOM_MACHINE_NAME "3D Printer"
|
||||||
|
|
||||||
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
|
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
|
||||||
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
|
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
|
||||||
|
|
|
@ -64,7 +64,7 @@ Here are some standard links for getting your machine calibrated:
|
||||||
|
|
||||||
// Optional custom name for your RepStrap or other custom machine
|
// Optional custom name for your RepStrap or other custom machine
|
||||||
// Displayed in the LCD "Ready" message
|
// Displayed in the LCD "Ready" message
|
||||||
// #define CUSTOM_MACHINE_NAME "This RepRap"
|
// #define CUSTOM_MACHINE_NAME "3D Printer"
|
||||||
|
|
||||||
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
|
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
|
||||||
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
|
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
|
||||||
|
|
|
@ -82,7 +82,7 @@ Here are some standard links for getting your machine calibrated:
|
||||||
|
|
||||||
// Optional custom name for your RepStrap or other custom machine
|
// Optional custom name for your RepStrap or other custom machine
|
||||||
// Displayed in the LCD "Ready" message
|
// Displayed in the LCD "Ready" message
|
||||||
// #define CUSTOM_MACHINE_NAME "This RepRap"
|
// #define CUSTOM_MACHINE_NAME "3D Printer"
|
||||||
|
|
||||||
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
|
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
|
||||||
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
|
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
|
||||||
|
|
|
@ -64,7 +64,7 @@ Here are some standard links for getting your machine calibrated:
|
||||||
|
|
||||||
// Optional custom name for your RepStrap or other custom machine
|
// Optional custom name for your RepStrap or other custom machine
|
||||||
// Displayed in the LCD "Ready" message
|
// Displayed in the LCD "Ready" message
|
||||||
// #define CUSTOM_MACHINE_NAME "This RepRap"
|
// #define CUSTOM_MACHINE_NAME "3D Printer"
|
||||||
|
|
||||||
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
|
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
|
||||||
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
|
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
|
||||||
|
|
|
@ -64,7 +64,7 @@ Here are some standard links for getting your machine calibrated:
|
||||||
|
|
||||||
// Optional custom name for your RepStrap or other custom machine
|
// Optional custom name for your RepStrap or other custom machine
|
||||||
// Displayed in the LCD "Ready" message
|
// Displayed in the LCD "Ready" message
|
||||||
// #define CUSTOM_MACHINE_NAME "This RepRap"
|
// #define CUSTOM_MACHINE_NAME "3D Printer"
|
||||||
|
|
||||||
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
|
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
|
||||||
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
|
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
|
||||||
|
|
|
@ -64,7 +64,7 @@ Here are some standard links for getting your machine calibrated:
|
||||||
|
|
||||||
// Optional custom name for your RepStrap or other custom machine
|
// Optional custom name for your RepStrap or other custom machine
|
||||||
// Displayed in the LCD "Ready" message
|
// Displayed in the LCD "Ready" message
|
||||||
// #define CUSTOM_MACHINE_NAME "This RepRap"
|
// #define CUSTOM_MACHINE_NAME "3D Printer"
|
||||||
|
|
||||||
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
|
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
|
||||||
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
|
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
|
||||||
|
|
|
@ -70,7 +70,7 @@
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#ifndef MACHINE_NAME
|
#ifndef MACHINE_NAME
|
||||||
#define MACHINE_NAME "Mendel"
|
#define MACHINE_NAME "3D Printer"
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -504,7 +504,7 @@ float junction_deviation = 0.1;
|
||||||
|
|
||||||
#ifdef PREVENT_DANGEROUS_EXTRUDE
|
#ifdef PREVENT_DANGEROUS_EXTRUDE
|
||||||
if (de) {
|
if (de) {
|
||||||
if (degHotend(active_extruder) < extrude_min_temp) {
|
if (degHotend(extruder) < extrude_min_temp) {
|
||||||
position[E_AXIS] = target[E_AXIS]; // Behave as if the move really took place, but ignore E part
|
position[E_AXIS] = target[E_AXIS]; // Behave as if the move really took place, but ignore E part
|
||||||
de = 0; // no difference
|
de = 0; // no difference
|
||||||
SERIAL_ECHO_START;
|
SERIAL_ECHO_START;
|
||||||
|
@ -541,8 +541,8 @@ float junction_deviation = 0.1;
|
||||||
|
|
||||||
block->steps[Z_AXIS] = labs(dz);
|
block->steps[Z_AXIS] = labs(dz);
|
||||||
block->steps[E_AXIS] = labs(de);
|
block->steps[E_AXIS] = labs(de);
|
||||||
block->steps[E_AXIS] *= volumetric_multiplier[active_extruder];
|
block->steps[E_AXIS] *= volumetric_multiplier[extruder];
|
||||||
block->steps[E_AXIS] *= extruder_multiply[active_extruder];
|
block->steps[E_AXIS] *= extruder_multiply[extruder];
|
||||||
block->steps[E_AXIS] /= 100;
|
block->steps[E_AXIS] /= 100;
|
||||||
block->step_event_count = max(block->steps[X_AXIS], max(block->steps[Y_AXIS], max(block->steps[Z_AXIS], block->steps[E_AXIS])));
|
block->step_event_count = max(block->steps[X_AXIS], max(block->steps[Y_AXIS], max(block->steps[Z_AXIS], block->steps[E_AXIS])));
|
||||||
|
|
||||||
|
@ -676,7 +676,7 @@ float junction_deviation = 0.1;
|
||||||
delta_mm[Y_AXIS] = dy / axis_steps_per_unit[Y_AXIS];
|
delta_mm[Y_AXIS] = dy / axis_steps_per_unit[Y_AXIS];
|
||||||
#endif
|
#endif
|
||||||
delta_mm[Z_AXIS] = dz / axis_steps_per_unit[Z_AXIS];
|
delta_mm[Z_AXIS] = dz / axis_steps_per_unit[Z_AXIS];
|
||||||
delta_mm[E_AXIS] = (de / axis_steps_per_unit[E_AXIS]) * volumetric_multiplier[active_extruder] * extruder_multiply[active_extruder] / 100.0;
|
delta_mm[E_AXIS] = (de / axis_steps_per_unit[E_AXIS]) * volumetric_multiplier[extruder] * extruder_multiply[extruder] / 100.0;
|
||||||
|
|
||||||
if (block->steps[X_AXIS] <= dropsegments && block->steps[Y_AXIS] <= dropsegments && block->steps[Z_AXIS] <= dropsegments) {
|
if (block->steps[X_AXIS] <= dropsegments && block->steps[Y_AXIS] <= dropsegments && block->steps[Z_AXIS] <= dropsegments) {
|
||||||
block->millimeters = fabs(delta_mm[E_AXIS]);
|
block->millimeters = fabs(delta_mm[E_AXIS]);
|
||||||
|
|
|
@ -1072,10 +1072,7 @@ void st_init() {
|
||||||
TCCR0A &= ~BIT(WGM01);
|
TCCR0A &= ~BIT(WGM01);
|
||||||
TCCR0A &= ~BIT(WGM00);
|
TCCR0A &= ~BIT(WGM00);
|
||||||
#endif
|
#endif
|
||||||
e_steps[0] = 0;
|
e_steps[0] = e_steps[1] = e_steps[2] = e_steps[3] = 0;
|
||||||
e_steps[1] = 0;
|
|
||||||
e_steps[2] = 0;
|
|
||||||
e_steps[3] = 0;
|
|
||||||
TIMSK0 |= BIT(OCIE0A);
|
TIMSK0 |= BIT(OCIE0A);
|
||||||
#endif //ADVANCE
|
#endif //ADVANCE
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue