parent
cba5692673
commit
e08f8eed05
7 changed files with 409 additions and 600 deletions
|
@ -229,6 +229,7 @@ void refresh_cmd_timeout(void);
|
|||
extern float homing_feedrate[];
|
||||
extern bool axis_relative_modes[];
|
||||
extern int feedmultiply;
|
||||
extern int extrudemultiply; // Sets extrude multiply factor (in percent) for all extruders
|
||||
extern bool volumetric_enabled;
|
||||
extern int extruder_multiply[EXTRUDERS]; // sets extrude multiply factor (in percent) for each extruder individually
|
||||
extern float filament_size[EXTRUDERS]; // cross-sectional area of filament (in millimeters), typically around 1.75 or 2.85, 0 disables the volumetric calculations for the extruder.
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
// G4 - Dwell S<seconds> or P<milliseconds>
|
||||
// G10 - retract filament according to settings of M207
|
||||
// G11 - retract recover filament according to settings of M208
|
||||
// G28 - Home one or more axes
|
||||
// G28 - Home all Axis
|
||||
// G29 - Detailed Z-Probe, probes the bed at 3 or more points. Will fail if you haven't homed yet.
|
||||
// G30 - Single Z Probe, probes bed at current XY location.
|
||||
// G31 - Dock sled (Z_PROBE_SLED only)
|
||||
|
@ -210,6 +210,7 @@ int homing_bump_divisor[] = HOMING_BUMP_DIVISOR;
|
|||
bool axis_relative_modes[] = AXIS_RELATIVE_MODES;
|
||||
int feedmultiply = 100; //100->1 200->2
|
||||
int saved_feedmultiply;
|
||||
int extrudemultiply = 100; //100->1 200->2
|
||||
int extruder_multiply[EXTRUDERS] = ARRAY_BY_EXTRUDERS(100, 100, 100, 100);
|
||||
bool volumetric_enabled = false;
|
||||
float filament_size[EXTRUDERS] = ARRAY_BY_EXTRUDERS(DEFAULT_NOMINAL_FILAMENT_DIA, DEFAULT_NOMINAL_FILAMENT_DIA, DEFAULT_NOMINAL_FILAMENT_DIA, DEFAULT_NOMINAL_FILAMENT_DIA);
|
||||
|
@ -476,6 +477,8 @@ bool enquecommand(const char *cmd)
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void setup_killpin()
|
||||
{
|
||||
#if defined(KILL_PIN) && KILL_PIN > -1
|
||||
|
@ -963,10 +966,10 @@ static void axis_is_at_home(int axis) {
|
|||
return;
|
||||
}
|
||||
else if (dual_x_carriage_mode == DXC_DUPLICATION_MODE) {
|
||||
float xoff = home_offset[X_AXIS];
|
||||
current_position[X_AXIS] = base_home_pos(X_AXIS) + xoff;
|
||||
min_pos[X_AXIS] = base_min_pos(X_AXIS) + xoff;
|
||||
max_pos[X_AXIS] = min(base_max_pos(X_AXIS) + xoff, max(extruder_offset[1][X_AXIS], X2_MAX_POS) - duplicate_extruder_x_offset);
|
||||
current_position[X_AXIS] = base_home_pos(X_AXIS) + home_offset[X_AXIS];
|
||||
min_pos[X_AXIS] = base_min_pos(X_AXIS) + home_offset[X_AXIS];
|
||||
max_pos[X_AXIS] = min(base_max_pos(X_AXIS) + home_offset[X_AXIS],
|
||||
max(extruder_offset[1][X_AXIS], X2_MAX_POS) - duplicate_extruder_x_offset);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1020,27 +1023,16 @@ static void axis_is_at_home(int axis) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Some planner shorthand inline functions
|
||||
* Shorthand to tell the planner our current position (in mm).
|
||||
*/
|
||||
inline void line_to_current_position() {
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate/60, active_extruder);
|
||||
}
|
||||
inline void line_to_z(float zPosition) {
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60, active_extruder);
|
||||
}
|
||||
inline void line_to_destination() {
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
|
||||
}
|
||||
inline void sync_plan_position() {
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_AUTO_BED_LEVELING
|
||||
|
||||
#ifdef AUTO_BED_LEVELING_GRID
|
||||
|
||||
#ifndef DELTA
|
||||
|
||||
static void set_bed_level_equation_lsq(double *plane_equation_coefficients) {
|
||||
vector_3 planeNormal = vector_3(-plane_equation_coefficients[0], -plane_equation_coefficients[1], 1);
|
||||
planeNormal.debug("planeNormal");
|
||||
|
@ -1059,10 +1051,9 @@ inline void sync_plan_position() {
|
|||
|
||||
sync_plan_position();
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // !DELTA
|
||||
|
||||
#else // !AUTO_BED_LEVELING_GRID
|
||||
#else // not AUTO_BED_LEVELING_GRID
|
||||
|
||||
static void set_bed_level_equation_3pts(float z_at_pt_1, float z_at_pt_2, float z_at_pt_3) {
|
||||
|
||||
|
@ -1089,10 +1080,9 @@ inline void sync_plan_position() {
|
|||
sync_plan_position();
|
||||
}
|
||||
|
||||
#endif // !AUTO_BED_LEVELING_GRID
|
||||
#endif // AUTO_BED_LEVELING_GRID
|
||||
|
||||
static void run_z_probe() {
|
||||
|
||||
#ifdef DELTA
|
||||
|
||||
float start_z = current_position[Z_AXIS];
|
||||
|
@ -1112,14 +1102,14 @@ inline void sync_plan_position() {
|
|||
calculate_delta(current_position);
|
||||
plan_set_position(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], current_position[E_AXIS]);
|
||||
|
||||
#else // !DELTA
|
||||
#else
|
||||
|
||||
plan_bed_level_matrix.set_to_identity();
|
||||
feedrate = homing_feedrate[Z_AXIS];
|
||||
|
||||
// move down until you find the bed
|
||||
float zPosition = -10;
|
||||
line_to_z(zPosition);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60, active_extruder);
|
||||
st_synchronize();
|
||||
|
||||
// we have to let the planner know where we are right now as it is not where we said to go.
|
||||
|
@ -1128,20 +1118,21 @@ inline void sync_plan_position() {
|
|||
|
||||
// move up the retract distance
|
||||
zPosition += home_retract_mm(Z_AXIS);
|
||||
line_to_z(zPosition);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60, active_extruder);
|
||||
st_synchronize();
|
||||
endstops_hit_on_purpose();
|
||||
|
||||
// move back down slowly to find bed
|
||||
if (homing_bump_divisor[Z_AXIS] >= 1)
|
||||
if (homing_bump_divisor[Z_AXIS] >= 1) {
|
||||
feedrate = homing_feedrate[Z_AXIS]/homing_bump_divisor[Z_AXIS];
|
||||
}
|
||||
else {
|
||||
feedrate = homing_feedrate[Z_AXIS]/10;
|
||||
SERIAL_ECHOLN("Warning: The Homing Bump Feedrate Divisor cannot be less than 1");
|
||||
SERIAL_ECHOLN("Warning: The Homing Bump Feedrate Divisor cannot be less then 1");
|
||||
}
|
||||
|
||||
zPosition -= home_retract_mm(Z_AXIS) * 2;
|
||||
line_to_z(zPosition);
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60, active_extruder);
|
||||
st_synchronize();
|
||||
endstops_hit_on_purpose();
|
||||
|
||||
|
@ -1149,7 +1140,7 @@ inline void sync_plan_position() {
|
|||
// make sure the planner knows where we are as it may be a bit different than we last said to move to
|
||||
sync_plan_position();
|
||||
|
||||
#endif // !DELTA
|
||||
#endif
|
||||
}
|
||||
|
||||
static void do_blocking_move_to(float x, float y, float z) {
|
||||
|
@ -1170,14 +1161,14 @@ inline void sync_plan_position() {
|
|||
feedrate = homing_feedrate[Z_AXIS];
|
||||
|
||||
current_position[Z_AXIS] = z;
|
||||
line_to_current_position();
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate/60, active_extruder);
|
||||
st_synchronize();
|
||||
|
||||
feedrate = xy_travel_speed;
|
||||
|
||||
current_position[X_AXIS] = x;
|
||||
current_position[Y_AXIS] = y;
|
||||
line_to_current_position();
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate/60, active_extruder);
|
||||
st_synchronize();
|
||||
|
||||
#endif
|
||||
|
@ -1190,6 +1181,7 @@ inline void sync_plan_position() {
|
|||
saved_feedmultiply = feedmultiply;
|
||||
feedmultiply = 100;
|
||||
previous_millis_cmd = millis();
|
||||
|
||||
enable_endstops(true);
|
||||
}
|
||||
|
||||
|
@ -1197,12 +1189,12 @@ inline void sync_plan_position() {
|
|||
#ifdef ENDSTOPS_ONLY_FOR_HOMING
|
||||
enable_endstops(false);
|
||||
#endif
|
||||
|
||||
feedrate = saved_feedrate;
|
||||
feedmultiply = saved_feedmultiply;
|
||||
previous_millis_cmd = millis();
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
static void engage_z_probe() {
|
||||
// Engage Z Servo endstop if enabled
|
||||
#ifdef SERVO_ENDSTOPS
|
||||
|
@ -1250,59 +1242,13 @@ static void engage_z_probe() {
|
|||
SERIAL_ERROR_START;
|
||||
SERIAL_ERRORLNPGM("Z-Probe failed to engage!");
|
||||
LCD_ALERTMESSAGEPGM("Err: ZPROBE");
|
||||
=======
|
||||
static void engage_z_probe() {
|
||||
|
||||
#ifdef SERVO_ENDSTOPS
|
||||
|
||||
// Engage Z Servo endstop if enabled
|
||||
if (servo_endstops[Z_AXIS] >= 0) {
|
||||
#if SERVO_LEVELING
|
||||
servos[servo_endstops[Z_AXIS]].attach(0);
|
||||
#endif
|
||||
servos[servo_endstops[Z_AXIS]].write(servo_endstop_angles[Z_AXIS * 2]);
|
||||
#if SERVO_LEVELING
|
||||
delay(PROBE_SERVO_DEACTIVATION_DELAY);
|
||||
servos[servo_endstops[Z_AXIS]].detach();
|
||||
#endif
|
||||
}
|
||||
|
||||
#elif defined(Z_PROBE_ALLEN_KEY)
|
||||
|
||||
feedrate = homing_feedrate[X_AXIS];
|
||||
|
||||
// Move to the start position to initiate deployment
|
||||
destination[X_AXIS] = Z_PROBE_ALLEN_KEY_DEPLOY_X;
|
||||
destination[Y_AXIS] = Z_PROBE_ALLEN_KEY_DEPLOY_Y;
|
||||
destination[Z_AXIS] = Z_PROBE_ALLEN_KEY_DEPLOY_Z;
|
||||
prepare_move_raw();
|
||||
|
||||
// Home X to touch the belt
|
||||
feedrate = homing_feedrate[X_AXIS]/10;
|
||||
destination[X_AXIS] = 0;
|
||||
prepare_move_raw();
|
||||
|
||||
// Home Y for safety
|
||||
feedrate = homing_feedrate[X_AXIS]/2;
|
||||
destination[Y_AXIS] = 0;
|
||||
prepare_move_raw();
|
||||
|
||||
st_synchronize();
|
||||
|
||||
bool z_min_endstop = (READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING);
|
||||
if (z_min_endstop) {
|
||||
if (!Stopped) {
|
||||
SERIAL_ERROR_START;
|
||||
SERIAL_ERRORLNPGM("Z-Probe failed to engage!");
|
||||
LCD_ALERTMESSAGEPGM("Err: ZPROBE");
|
||||
>>>>>>> MarlinFirmware/Development
|
||||
}
|
||||
Stop();
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // Z_PROBE_ALLEN_KEY
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
static void retract_z_probe() {
|
||||
// Retract Z Servo endstop if enabled
|
||||
#ifdef SERVO_ENDSTOPS
|
||||
|
@ -1365,75 +1311,9 @@ static void retract_z_probe() {
|
|||
SERIAL_ERROR_START;
|
||||
SERIAL_ERRORLNPGM("Z-Probe failed to retract!");
|
||||
LCD_ALERTMESSAGEPGM("Err: ZPROBE");
|
||||
=======
|
||||
}
|
||||
|
||||
static void retract_z_probe(const float z_after=Z_RAISE_AFTER_PROBING) {
|
||||
|
||||
#ifdef SERVO_ENDSTOPS
|
||||
|
||||
// Retract Z Servo endstop if enabled
|
||||
if (servo_endstops[Z_AXIS] >= 0) {
|
||||
|
||||
if (z_after > 0) {
|
||||
do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], z_after);
|
||||
st_synchronize();
|
||||
>>>>>>> MarlinFirmware/Development
|
||||
}
|
||||
|
||||
#if SERVO_LEVELING
|
||||
servos[servo_endstops[Z_AXIS]].attach(0);
|
||||
#endif
|
||||
|
||||
servos[servo_endstops[Z_AXIS]].write(servo_endstop_angles[Z_AXIS * 2 + 1]);
|
||||
|
||||
#if SERVO_LEVELING
|
||||
delay(PROBE_SERVO_DEACTIVATION_DELAY);
|
||||
servos[servo_endstops[Z_AXIS]].detach();
|
||||
#endif
|
||||
}
|
||||
|
||||
#elif defined(Z_PROBE_ALLEN_KEY)
|
||||
|
||||
// Move up for safety
|
||||
feedrate = homing_feedrate[X_AXIS];
|
||||
destination[Z_AXIS] = current_position[Z_AXIS] + Z_RAISE_AFTER_PROBING;
|
||||
prepare_move_raw();
|
||||
|
||||
// Move to the start position to initiate retraction
|
||||
destination[X_AXIS] = Z_PROBE_ALLEN_KEY_RETRACT_X;
|
||||
destination[Y_AXIS] = Z_PROBE_ALLEN_KEY_RETRACT_Y;
|
||||
destination[Z_AXIS] = Z_PROBE_ALLEN_KEY_RETRACT_Z;
|
||||
prepare_move_raw();
|
||||
|
||||
// Move the nozzle down to push the probe into retracted position
|
||||
feedrate = homing_feedrate[Z_AXIS]/10;
|
||||
destination[Z_AXIS] = current_position[Z_AXIS] - Z_PROBE_ALLEN_KEY_RETRACT_DEPTH;
|
||||
prepare_move_raw();
|
||||
|
||||
// Move up for safety
|
||||
feedrate = homing_feedrate[Z_AXIS]/2;
|
||||
destination[Z_AXIS] = current_position[Z_AXIS] + Z_PROBE_ALLEN_KEY_RETRACT_DEPTH * 2;
|
||||
prepare_move_raw();
|
||||
|
||||
// Home XY for safety
|
||||
feedrate = homing_feedrate[X_AXIS]/2;
|
||||
destination[X_AXIS] = 0;
|
||||
destination[Y_AXIS] = 0;
|
||||
prepare_move_raw();
|
||||
|
||||
st_synchronize();
|
||||
|
||||
bool z_min_endstop = (READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING);
|
||||
if (!z_min_endstop) {
|
||||
if (!Stopped) {
|
||||
SERIAL_ERROR_START;
|
||||
SERIAL_ERRORLNPGM("Z-Probe failed to retract!");
|
||||
LCD_ALERTMESSAGEPGM("Err: ZPROBE");
|
||||
}
|
||||
Stop();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
}
|
||||
|
@ -1445,7 +1325,7 @@ static void retract_z_probe() {
|
|||
ProbeEngageAndRetract = (ProbeEngage | ProbeRetract)
|
||||
};
|
||||
|
||||
// Probe bed height at position (x,y), returns the measured z value
|
||||
/// Probe bed height at position (x,y), returns the measured z value
|
||||
static float probe_pt(float x, float y, float z_before, ProbeAction retract_action=ProbeEngageAndRetract, int verbose_level=1) {
|
||||
// move to right place
|
||||
do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], z_before);
|
||||
|
@ -1459,7 +1339,7 @@ static void retract_z_probe() {
|
|||
float measured_z = current_position[Z_AXIS];
|
||||
|
||||
#if !defined(Z_PROBE_SLED) && !defined(Z_PROBE_ALLEN_KEY)
|
||||
if (retract_action & ProbeRetract) retract_z_probe(z_before);
|
||||
if (retract_action & ProbeRetract) retract_z_probe();
|
||||
#endif
|
||||
|
||||
if (verbose_level > 2) {
|
||||
|
@ -1476,11 +1356,6 @@ static void retract_z_probe() {
|
|||
}
|
||||
|
||||
#ifdef DELTA
|
||||
|
||||
/**
|
||||
* All DELTA leveling in the Marlin uses NONLINEAR_BED_LEVELING
|
||||
*/
|
||||
|
||||
static void extrapolate_one_point(int x, int y, int xdir, int ydir) {
|
||||
if (bed_level[x][y] != 0.0) {
|
||||
return; // Don't overwrite good values.
|
||||
|
@ -1544,37 +1419,18 @@ static void homeaxis(int axis) {
|
|||
|
||||
if (axis==X_AXIS ? HOMEAXIS_DO(X) :
|
||||
axis==Y_AXIS ? HOMEAXIS_DO(Y) :
|
||||
axis == Z_AXIS ? HOMEAXIS_DO(Z) : 0) {
|
||||
|
||||
int axis_home_dir;
|
||||
|
||||
axis==Z_AXIS ? HOMEAXIS_DO(Z) :
|
||||
0) {
|
||||
int axis_home_dir = home_dir(axis);
|
||||
#ifdef DUAL_X_CARRIAGE
|
||||
if (axis == X_AXIS) axis_home_dir = x_home_dir(active_extruder);
|
||||
#else
|
||||
axis_home_dir = home_dir(axis);
|
||||
if (axis == X_AXIS)
|
||||
axis_home_dir = x_home_dir(active_extruder);
|
||||
#endif
|
||||
|
||||
current_position[axis] = 0;
|
||||
sync_plan_position();
|
||||
|
||||
#ifndef Z_PROBE_SLED
|
||||
// Engage Servo endstop if enabled
|
||||
#ifdef SERVO_ENDSTOPS
|
||||
#if SERVO_LEVELING
|
||||
if (axis == Z_AXIS) {
|
||||
engage_z_probe();
|
||||
}
|
||||
else
|
||||
#endif // SERVO_LEVELING
|
||||
|
||||
if (servo_endstops[axis] > -1)
|
||||
servos[servo_endstops[axis]].write(servo_endstop_angles[axis * 2]);
|
||||
|
||||
#endif // SERVO_ENDSTOPS
|
||||
|
||||
#endif // Z_PROBE_SLED
|
||||
|
||||
<<<<<<< HEAD
|
||||
#ifndef Z_PROBE_SLED
|
||||
// Engage Servo endstop if enabled and we are not using Z_PROBE_AND_ENDSTOP unless we are using Z_SAFE_HOMING
|
||||
#ifdef SERVO_ENDSTOPS && (defined (Z_SAFE_HOMING) || ! defined (Z_PROBE_AND_ENDSTOP))
|
||||
|
@ -1589,33 +1445,33 @@ static void homeaxis(int axis) {
|
|||
}
|
||||
#endif
|
||||
#endif // Z_PROBE_SLED
|
||||
=======
|
||||
>>>>>>> MarlinFirmware/Development
|
||||
#ifdef Z_DUAL_ENDSTOPS
|
||||
if (axis==Z_AXIS) In_Homing_Process(true);
|
||||
#endif
|
||||
|
||||
destination[axis] = 1.5 * max_length(axis) * axis_home_dir;
|
||||
feedrate = homing_feedrate[axis];
|
||||
line_to_destination();
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
|
||||
st_synchronize();
|
||||
|
||||
current_position[axis] = 0;
|
||||
sync_plan_position();
|
||||
destination[axis] = -home_retract_mm(axis) * axis_home_dir;
|
||||
line_to_destination();
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
|
||||
st_synchronize();
|
||||
|
||||
destination[axis] = 2*home_retract_mm(axis) * axis_home_dir;
|
||||
|
||||
if (homing_bump_divisor[axis] >= 1)
|
||||
{
|
||||
feedrate = homing_feedrate[axis]/homing_bump_divisor[axis];
|
||||
else {
|
||||
}
|
||||
else
|
||||
{
|
||||
feedrate = homing_feedrate[axis]/10;
|
||||
SERIAL_ECHOLN("Warning: The Homing Bump Feedrate Divisor cannot be less than 1");
|
||||
SERIAL_ECHOLN("Warning: The Homing Bump Feedrate Divisor cannot be less then 1");
|
||||
}
|
||||
|
||||
line_to_destination();
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
|
||||
st_synchronize();
|
||||
#ifdef Z_DUAL_ENDSTOPS
|
||||
if (axis==Z_AXIS)
|
||||
|
@ -1630,7 +1486,7 @@ static void homeaxis(int axis) {
|
|||
destination[axis] = fabs(z_endstop_adj);
|
||||
if (z_endstop_adj < 0) Lock_z_motor(true); else Lock_z2_motor(true);
|
||||
}
|
||||
line_to_destination();
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
|
||||
st_synchronize();
|
||||
Lock_z_motor(false);
|
||||
Lock_z2_motor(false);
|
||||
|
@ -1643,7 +1499,7 @@ static void homeaxis(int axis) {
|
|||
if (endstop_adj[axis] * axis_home_dir < 0) {
|
||||
sync_plan_position();
|
||||
destination[axis] = endstop_adj[axis];
|
||||
line_to_destination();
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
|
||||
st_synchronize();
|
||||
}
|
||||
#endif
|
||||
|
@ -1879,16 +1735,17 @@ inline void gcode_G4() {
|
|||
*/
|
||||
inline void gcode_G28() {
|
||||
#ifdef ENABLE_AUTO_BED_LEVELING
|
||||
plan_bed_level_matrix.set_to_identity(); //Reset the plane ("erase" all leveling data)
|
||||
#ifdef DELTA
|
||||
reset_bed_level();
|
||||
#else
|
||||
plan_bed_level_matrix.set_to_identity(); //Reset the plane ("erase" all leveling data)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(MESH_BED_LEVELING)
|
||||
uint8_t mbl_was_active = mbl.active;
|
||||
mbl.active = 0;
|
||||
#endif
|
||||
#endif // MESH_BED_LEVELING
|
||||
|
||||
saved_feedrate = feedrate;
|
||||
saved_feedmultiply = feedmultiply;
|
||||
|
@ -1911,7 +1768,7 @@ inline void gcode_G28() {
|
|||
|
||||
for (int i = X_AXIS; i <= Z_AXIS; i++) destination[i] = 3 * Z_MAX_LENGTH;
|
||||
feedrate = 1.732 * homing_feedrate[X_AXIS];
|
||||
line_to_destination();
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
|
||||
st_synchronize();
|
||||
endstops_hit_on_purpose();
|
||||
|
||||
|
@ -1959,7 +1816,7 @@ inline void gcode_G28() {
|
|||
} else {
|
||||
feedrate *= sqrt(pow(max_length(X_AXIS) / max_length(Y_AXIS), 2) + 1);
|
||||
}
|
||||
line_to_destination();
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
|
||||
st_synchronize();
|
||||
|
||||
axis_is_at_home(X_AXIS);
|
||||
|
@ -1967,7 +1824,7 @@ inline void gcode_G28() {
|
|||
sync_plan_position();
|
||||
destination[X_AXIS] = current_position[X_AXIS];
|
||||
destination[Y_AXIS] = current_position[Y_AXIS];
|
||||
line_to_destination();
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
|
||||
feedrate = 0.0;
|
||||
st_synchronize();
|
||||
endstops_hit_on_purpose();
|
||||
|
@ -2035,7 +1892,7 @@ inline void gcode_G28() {
|
|||
#ifndef Z_PROBE_AND_ENDSTOP
|
||||
destination[Z_AXIS] = -Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS); // Set destination away from bed
|
||||
feedrate = max_feedrate[Z_AXIS];
|
||||
line_to_destination();
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
|
||||
st_synchronize();
|
||||
#endif
|
||||
#endif
|
||||
|
@ -2048,11 +1905,11 @@ inline void gcode_G28() {
|
|||
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[Z_AXIS] = -Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS); // Set destination away from bed
|
||||
feedrate = XY_TRAVEL_SPEED;
|
||||
feedrate = XY_TRAVEL_SPEED / 60;
|
||||
current_position[Z_AXIS] = 0;
|
||||
|
||||
sync_plan_position();
|
||||
line_to_destination();
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
|
||||
st_synchronize();
|
||||
current_position[X_AXIS] = destination[X_AXIS];
|
||||
current_position[Y_AXIS] = destination[Y_AXIS];
|
||||
|
@ -2074,7 +1931,7 @@ inline void gcode_G28() {
|
|||
plan_set_position(cpx, cpy, current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
destination[Z_AXIS] = -Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS); // Set destination away from bed
|
||||
feedrate = max_feedrate[Z_AXIS];
|
||||
line_to_destination();
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
|
||||
st_synchronize();
|
||||
HOMEAXIS(Z);
|
||||
}
|
||||
|
@ -2127,7 +1984,7 @@ inline void gcode_G28() {
|
|||
destination[Z_AXIS] = current_position[Z_AXIS];
|
||||
destination[E_AXIS] = current_position[E_AXIS];
|
||||
feedrate = homing_feedrate[X_AXIS];
|
||||
line_to_destination();
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
|
||||
st_synchronize();
|
||||
current_position[Z_AXIS] = MESH_HOME_SEARCH_Z;
|
||||
sync_plan_position();
|
||||
|
@ -2141,19 +1998,6 @@ inline void gcode_G28() {
|
|||
endstops_hit_on_purpose();
|
||||
}
|
||||
|
||||
#if defined(MESH_BED_LEVELING) || defined(ENABLE_AUTO_BED_LEVELING)
|
||||
|
||||
// Check for known positions in X and Y
|
||||
inline bool can_run_bed_leveling() {
|
||||
if (axis_known_position[X_AXIS] && axis_known_position[Y_AXIS]) return true;
|
||||
LCD_MESSAGEPGM(MSG_POSITION_UNKNOWN);
|
||||
SERIAL_ECHO_START;
|
||||
SERIAL_ECHOLNPGM(MSG_POSITION_UNKNOWN);
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif // MESH_BED_LEVELING || ENABLE_AUTO_BED_LEVELING
|
||||
|
||||
#ifdef MESH_BED_LEVELING
|
||||
|
||||
/**
|
||||
|
@ -2168,10 +2012,6 @@ inline void gcode_G28() {
|
|||
*
|
||||
*/
|
||||
inline void gcode_G29() {
|
||||
|
||||
// Prevent leveling without first homing in X and Y
|
||||
if (!can_run_bed_leveling()) return;
|
||||
|
||||
static int probe_point = -1;
|
||||
int state = 0;
|
||||
if (code_seen('S') || code_seen('s')) {
|
||||
|
@ -2288,8 +2128,13 @@ inline void gcode_G28() {
|
|||
*/
|
||||
inline void gcode_G29() {
|
||||
|
||||
// Prevent leveling without first homing in X and Y
|
||||
if (!can_run_bed_leveling()) return;
|
||||
// Prevent user from running a G29 without first homing in X and Y
|
||||
if (!axis_known_position[X_AXIS] || !axis_known_position[Y_AXIS]) {
|
||||
LCD_MESSAGEPGM(MSG_POSITION_UNKNOWN);
|
||||
SERIAL_ECHO_START;
|
||||
SERIAL_ECHOLNPGM(MSG_POSITION_UNKNOWN);
|
||||
return;
|
||||
}
|
||||
|
||||
int verbose_level = 1;
|
||||
|
||||
|
@ -2371,15 +2216,16 @@ inline void gcode_G28() {
|
|||
|
||||
st_synchronize();
|
||||
|
||||
if (!dryrun) {
|
||||
// make sure the bed_level_rotation_matrix is identity or the planner will get it wrong
|
||||
plan_bed_level_matrix.set_to_identity();
|
||||
|
||||
if (!dryrun)
|
||||
{
|
||||
#ifdef DELTA
|
||||
reset_bed_level();
|
||||
#else //!DELTA
|
||||
|
||||
// make sure the bed_level_rotation_matrix is identity or the planner will get it incorectly
|
||||
//vector_3 corrected_position = plan_get_position_mm();
|
||||
//corrected_position.debug("position before G29");
|
||||
plan_bed_level_matrix.set_to_identity();
|
||||
vector_3 uncorrected_position = plan_get_position();
|
||||
//uncorrected_position.debug("position during G29");
|
||||
current_position[X_AXIS] = uncorrected_position.x;
|
||||
|
@ -2387,7 +2233,7 @@ inline void gcode_G28() {
|
|||
current_position[Z_AXIS] = uncorrected_position.z;
|
||||
sync_plan_position();
|
||||
|
||||
#endif // !DELTA
|
||||
#endif
|
||||
}
|
||||
|
||||
setup_for_endstop_move();
|
||||
|
@ -2448,12 +2294,13 @@ inline void gcode_G28() {
|
|||
|
||||
// raise extruder
|
||||
float measured_z,
|
||||
z_before = Z_RAISE_BETWEEN_PROBINGS + (probePointCounter ? current_position[Z_AXIS] : 0);
|
||||
z_before = probePointCounter == 0 ? Z_RAISE_BEFORE_PROBING : current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS;
|
||||
|
||||
#ifdef DELTA
|
||||
// Avoid probing the corners (outside the round or hexagon print surface) on a delta printer.
|
||||
float distance_from_center = sqrt(xProbe*xProbe + yProbe*yProbe);
|
||||
if (distance_from_center > DELTA_PROBABLE_RADIUS) continue;
|
||||
if (distance_from_center > DELTA_PROBABLE_RADIUS)
|
||||
continue;
|
||||
#endif //DELTA
|
||||
|
||||
// Enhanced G29 - Do not retract servo between probes
|
||||
|
@ -2481,11 +2328,6 @@ inline void gcode_G28() {
|
|||
#endif
|
||||
|
||||
probePointCounter++;
|
||||
|
||||
manage_heater();
|
||||
manage_inactivity();
|
||||
lcd_update();
|
||||
|
||||
} //xProbe
|
||||
} //yProbe
|
||||
|
||||
|
@ -2572,14 +2414,16 @@ inline void gcode_G28() {
|
|||
if (verbose_level > 0)
|
||||
plan_bed_level_matrix.debug(" \n\nBed Level Correction Matrix:");
|
||||
|
||||
if (!dryrun) {
|
||||
// Correct the Z height difference from z-probe position and hotend tip position.
|
||||
// The Z height on homing is measured by Z-Probe, but the probe is quite far from the hotend.
|
||||
// When the bed is uneven, this height must be corrected.
|
||||
float x_tmp = current_position[X_AXIS] + X_PROBE_OFFSET_FROM_EXTRUDER,
|
||||
y_tmp = current_position[Y_AXIS] + Y_PROBE_OFFSET_FROM_EXTRUDER,
|
||||
z_tmp = current_position[Z_AXIS],
|
||||
real_z = (float)st_get_position(Z_AXIS) / axis_steps_per_unit[Z_AXIS]; //get the real Z (since the auto bed leveling is already correcting the plane)
|
||||
if (!dryrun)
|
||||
{
|
||||
float x_tmp, y_tmp, z_tmp, real_z;
|
||||
real_z = float(st_get_position(Z_AXIS)) / axis_steps_per_unit[Z_AXIS]; //get the real Z (since the auto bed leveling is already correcting the plane)
|
||||
x_tmp = current_position[X_AXIS] + X_PROBE_OFFSET_FROM_EXTRUDER;
|
||||
y_tmp = current_position[Y_AXIS] + Y_PROBE_OFFSET_FROM_EXTRUDER;
|
||||
z_tmp = current_position[Z_AXIS];
|
||||
|
||||
apply_rotation_xyz(plan_bed_level_matrix, x_tmp, y_tmp, z_tmp); //Apply the correction sending the probe offset
|
||||
current_position[Z_AXIS] = z_tmp - real_z + current_position[Z_AXIS]; //The difference is added to current position and sent to planner.
|
||||
|
@ -3947,7 +3791,7 @@ inline void gcode_M221() {
|
|||
extruder_multiply[tmp_extruder] = sval;
|
||||
}
|
||||
else {
|
||||
extruder_multiply[active_extruder] = sval;
|
||||
extrudemultiply = sval;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4384,7 +4228,7 @@ inline void gcode_M400() { st_synchronize(); }
|
|||
//SERIAL_PROTOCOLPGM("Filament dia (measured mm):");
|
||||
//SERIAL_PROTOCOL(filament_width_meas);
|
||||
//SERIAL_PROTOCOLPGM("Extrusion ratio(%):");
|
||||
//SERIAL_PROTOCOL(extruder_multiply[active_extruder]);
|
||||
//SERIAL_PROTOCOL(extrudemultiply);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4857,14 +4701,18 @@ void process_commands() {
|
|||
gcode_G28();
|
||||
break;
|
||||
|
||||
#if defined(ENABLE_AUTO_BED_LEVELING) || defined(MESH_BED_LEVELING)
|
||||
case 29: // G29 Detailed Z-Probe, probes the bed at 3 or more points.
|
||||
#if defined(MESH_BED_LEVELING)
|
||||
case 29: // G29 Handle mesh based leveling
|
||||
gcode_G29();
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_AUTO_BED_LEVELING
|
||||
|
||||
case 29: // G29 Detailed Z-Probe, probes the bed at 3 or more points.
|
||||
gcode_G29();
|
||||
break;
|
||||
|
||||
#ifndef Z_PROBE_SLED
|
||||
|
||||
case 30: // G30 Single Z Probe
|
||||
|
@ -5560,7 +5408,9 @@ void prepare_move()
|
|||
#ifdef SCARA //for now same as delta-code
|
||||
|
||||
float difference[NUM_AXIS];
|
||||
for (int8_t i = 0; i < NUM_AXIS; i++) difference[i] = destination[i] - current_position[i];
|
||||
for (int8_t i=0; i < NUM_AXIS; i++) {
|
||||
difference[i] = destination[i] - current_position[i];
|
||||
}
|
||||
|
||||
float cartesian_mm = sqrt( sq(difference[X_AXIS]) +
|
||||
sq(difference[Y_AXIS]) +
|
||||
|
@ -5569,17 +5419,16 @@ void prepare_move()
|
|||
if (cartesian_mm < 0.000001) { return; }
|
||||
float seconds = 6000 * cartesian_mm / feedrate / feedmultiply;
|
||||
int steps = max(1, int(scara_segments_per_second * seconds));
|
||||
|
||||
//SERIAL_ECHOPGM("mm="); SERIAL_ECHO(cartesian_mm);
|
||||
//SERIAL_ECHOPGM(" seconds="); SERIAL_ECHO(seconds);
|
||||
//SERIAL_ECHOPGM(" steps="); SERIAL_ECHOLN(steps);
|
||||
|
||||
for (int s = 1; s <= steps; s++) {
|
||||
float fraction = float(s) / float(steps);
|
||||
for(int8_t i=0; i < NUM_AXIS; i++) {
|
||||
destination[i] = current_position[i] + difference[i] * fraction;
|
||||
}
|
||||
|
||||
|
||||
calculate_delta(destination);
|
||||
//SERIAL_ECHOPGM("destination[X_AXIS]="); SERIAL_ECHOLN(destination[X_AXIS]);
|
||||
//SERIAL_ECHOPGM("destination[Y_AXIS]="); SERIAL_ECHOLN(destination[Y_AXIS]);
|
||||
|
@ -5592,33 +5441,29 @@ void prepare_move()
|
|||
destination[E_AXIS], feedrate*feedmultiply/60/100.0,
|
||||
active_extruder);
|
||||
}
|
||||
|
||||
#endif // SCARA
|
||||
|
||||
#ifdef DELTA
|
||||
|
||||
float difference[NUM_AXIS];
|
||||
for (int8_t i=0; i < NUM_AXIS; i++) difference[i] = destination[i] - current_position[i];
|
||||
|
||||
for (int8_t i=0; i < NUM_AXIS; i++) {
|
||||
difference[i] = destination[i] - current_position[i];
|
||||
}
|
||||
float cartesian_mm = sqrt(sq(difference[X_AXIS]) +
|
||||
sq(difference[Y_AXIS]) +
|
||||
sq(difference[Z_AXIS]));
|
||||
if (cartesian_mm < 0.000001) cartesian_mm = abs(difference[E_AXIS]);
|
||||
if (cartesian_mm < 0.000001) return;
|
||||
if (cartesian_mm < 0.000001) { cartesian_mm = abs(difference[E_AXIS]); }
|
||||
if (cartesian_mm < 0.000001) { return; }
|
||||
float seconds = 6000 * cartesian_mm / feedrate / feedmultiply;
|
||||
int steps = max(1, int(delta_segments_per_second * seconds));
|
||||
|
||||
// SERIAL_ECHOPGM("mm="); SERIAL_ECHO(cartesian_mm);
|
||||
// SERIAL_ECHOPGM(" seconds="); SERIAL_ECHO(seconds);
|
||||
// SERIAL_ECHOPGM(" steps="); SERIAL_ECHOLN(steps);
|
||||
|
||||
for (int s = 1; s <= steps; s++) {
|
||||
float fraction = float(s) / float(steps);
|
||||
for (int8_t i = 0; i < NUM_AXIS; i++) destination[i] = current_position[i] + difference[i] * fraction;
|
||||
for(int8_t i=0; i < NUM_AXIS; i++) {
|
||||
destination[i] = current_position[i] + difference[i] * fraction;
|
||||
}
|
||||
calculate_delta(destination);
|
||||
#ifdef ENABLE_AUTO_BED_LEVELING
|
||||
adjust_delta(destination);
|
||||
#endif
|
||||
plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS],
|
||||
destination[E_AXIS], feedrate*feedmultiply/60/100.0,
|
||||
active_extruder);
|
||||
|
@ -5670,13 +5515,13 @@ void prepare_move()
|
|||
#if ! (defined DELTA || defined SCARA)
|
||||
// Do not use feedmultiply for E or Z only moves
|
||||
if( (current_position[X_AXIS] == destination [X_AXIS]) && (current_position[Y_AXIS] == destination [Y_AXIS])) {
|
||||
line_to_destination();
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder);
|
||||
} else {
|
||||
#if defined(MESH_BED_LEVELING)
|
||||
mesh_plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], (feedrate/60)*(feedmultiply/100.0), active_extruder);
|
||||
mesh_plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate*feedmultiply/60/100.0, active_extruder);
|
||||
return;
|
||||
#else
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], (feedrate/60)*(feedmultiply/100.0), active_extruder);
|
||||
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate*feedmultiply/60/100.0, active_extruder);
|
||||
#endif // MESH_BED_LEVELING
|
||||
}
|
||||
#endif // !(DELTA || SCARA)
|
||||
|
|
|
@ -369,7 +369,7 @@ static void lcd_implementation_status_screen() {
|
|||
lcd_printPGM(PSTR("dia:"));
|
||||
lcd_print(ftostr12ns(filament_width_meas));
|
||||
lcd_printPGM(PSTR(" factor:"));
|
||||
lcd_print(itostr3(volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM]));
|
||||
lcd_print(itostr3(extrudemultiply));
|
||||
lcd_print('%');
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -545,7 +545,7 @@ float junction_deviation = 0.1;
|
|||
block->steps[Z_AXIS] = labs(dz);
|
||||
block->steps[E_AXIS] = labs(de);
|
||||
block->steps[E_AXIS] *= volumetric_multiplier[active_extruder];
|
||||
block->steps[E_AXIS] *= extruder_multiply[active_extruder];
|
||||
block->steps[E_AXIS] *= extrudemultiply;
|
||||
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])));
|
||||
|
||||
|
@ -679,7 +679,7 @@ float junction_deviation = 0.1;
|
|||
delta_mm[Y_AXIS] = dy / axis_steps_per_unit[Y_AXIS];
|
||||
#endif
|
||||
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[active_extruder] * extrudemultiply / 100.0;
|
||||
|
||||
if (block->steps[X_AXIS] <= dropsegments && block->steps[Y_AXIS] <= dropsegments && block->steps[Z_AXIS] <= dropsegments) {
|
||||
block->millimeters = fabs(delta_mm[E_AXIS]);
|
||||
|
|
|
@ -515,36 +515,31 @@ ISR(TIMER1_COMPA_vect) {
|
|||
}
|
||||
|
||||
if (TEST(out_bits, Z_AXIS)) { // -direction
|
||||
|
||||
Z_APPLY_DIR(INVERT_Z_DIR,0);
|
||||
count_direction[Z_AXIS] = -1;
|
||||
|
||||
if (check_endstops) {
|
||||
|
||||
#if defined(Z_MIN_PIN) && Z_MIN_PIN >= 0
|
||||
|
||||
#ifdef Z_DUAL_ENDSTOPS
|
||||
|
||||
bool z_min_endstop = READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING,
|
||||
z2_min_endstop =
|
||||
#if defined(Z2_MIN_PIN) && Z2_MIN_PIN >= 0
|
||||
READ(Z2_MIN_PIN) != Z2_MIN_ENDSTOP_INVERTING
|
||||
if (check_endstops)
|
||||
{
|
||||
#if defined(Z_MIN_PIN) && Z_MIN_PIN > -1
|
||||
#ifndef Z_DUAL_ENDSTOPS
|
||||
UPDATE_ENDSTOP(z, Z, min, MIN);
|
||||
#else
|
||||
z_min_endstop
|
||||
bool z_min_endstop=(READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING);
|
||||
#if defined(Z2_MIN_PIN) && Z2_MIN_PIN > -1
|
||||
bool z2_min_endstop=(READ(Z2_MIN_PIN) != Z2_MIN_ENDSTOP_INVERTING);
|
||||
#else
|
||||
bool z2_min_endstop=z_min_endstop;
|
||||
#endif
|
||||
;
|
||||
|
||||
bool z_min_both = z_min_endstop && old_z_min_endstop,
|
||||
z2_min_both = z2_min_endstop && old_z2_min_endstop;
|
||||
if ((z_min_both || z2_min_both) && current_block->steps[Z_AXIS] > 0) {
|
||||
if(((z_min_endstop && old_z_min_endstop) || (z2_min_endstop && old_z2_min_endstop)) && (current_block->steps[Z_AXIS] > 0))
|
||||
{
|
||||
endstops_trigsteps[Z_AXIS] = count_position[Z_AXIS];
|
||||
endstop_z_hit=true;
|
||||
if (!performing_homing || (performing_homing && z_min_both && z2_min_both)) //if not performing home or if both endstops were trigged during homing...
|
||||
if (!(performing_homing) || ((performing_homing)&&(z_min_endstop && old_z_min_endstop)&&(z2_min_endstop && old_z2_min_endstop))) //if not performing home or if both endstops were trigged during homing...
|
||||
{
|
||||
step_events_completed = current_block->step_event_count;
|
||||
}
|
||||
}
|
||||
old_z_min_endstop = z_min_endstop;
|
||||
old_z2_min_endstop = z2_min_endstop;
|
||||
<<<<<<< HEAD
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -561,55 +556,37 @@ ISR(TIMER1_COMPA_vect) {
|
|||
old_z_probe_endstop = z_probe_endstop;
|
||||
#endif
|
||||
}
|
||||
=======
|
||||
|
||||
#else // !Z_DUAL_ENDSTOPS
|
||||
|
||||
UPDATE_ENDSTOP(z, Z, min, MIN);
|
||||
|
||||
#endif // !Z_DUAL_ENDSTOPS
|
||||
|
||||
#endif // Z_MIN_PIN
|
||||
|
||||
} // check_endstops
|
||||
|
||||
>>>>>>> MarlinFirmware/Development
|
||||
}
|
||||
else { // +direction
|
||||
|
||||
Z_APPLY_DIR(!INVERT_Z_DIR,0);
|
||||
count_direction[Z_AXIS] = 1;
|
||||
|
||||
if (check_endstops) {
|
||||
|
||||
#if defined(Z_MAX_PIN) && Z_MAX_PIN >= 0
|
||||
|
||||
#ifdef Z_DUAL_ENDSTOPS
|
||||
|
||||
bool z_max_endstop = READ(Z_MAX_PIN) != Z_MAX_ENDSTOP_INVERTING,
|
||||
z2_max_endstop =
|
||||
#if defined(Z2_MAX_PIN) && Z2_MAX_PIN >= 0
|
||||
READ(Z2_MAX_PIN) != Z2_MAX_ENDSTOP_INVERTING
|
||||
#ifndef Z_DUAL_ENDSTOPS
|
||||
UPDATE_ENDSTOP(z, Z, max, MAX);
|
||||
#else
|
||||
z_max_endstop
|
||||
bool z_max_endstop=(READ(Z_MAX_PIN) != Z_MAX_ENDSTOP_INVERTING);
|
||||
#if defined(Z2_MAX_PIN) && Z2_MAX_PIN > -1
|
||||
bool z2_max_endstop=(READ(Z2_MAX_PIN) != Z2_MAX_ENDSTOP_INVERTING);
|
||||
#else
|
||||
bool z2_max_endstop=z_max_endstop;
|
||||
#endif
|
||||
;
|
||||
|
||||
bool z_max_both = z_max_endstop && old_z_max_endstop,
|
||||
z2_max_both = z2_max_endstop && old_z2_max_endstop;
|
||||
if ((z_max_both || z2_max_both) && current_block->steps[Z_AXIS] > 0) {
|
||||
if(((z_max_endstop && old_z_max_endstop) || (z2_max_endstop && old_z2_max_endstop)) && (current_block->steps[Z_AXIS] > 0))
|
||||
{
|
||||
endstops_trigsteps[Z_AXIS] = count_position[Z_AXIS];
|
||||
endstop_z_hit=true;
|
||||
|
||||
// if (z_max_both) SERIAL_ECHOLN("z_max_endstop = true");
|
||||
// if (z2_max_both) SERIAL_ECHOLN("z2_max_endstop = true");
|
||||
// if (z_max_endstop && old_z_max_endstop) SERIAL_ECHOLN("z_max_endstop = true");
|
||||
// if (z2_max_endstop && old_z2_max_endstop) SERIAL_ECHOLN("z2_max_endstop = true");
|
||||
|
||||
if (!performing_homing || (performing_homing && z_max_both && z2_max_both)) //if not performing home or if both endstops were trigged during homing...
|
||||
|
||||
if (!(performing_homing) || ((performing_homing)&&(z_max_endstop && old_z_max_endstop)&&(z2_max_endstop && old_z2_max_endstop))) //if not performing home or if both endstops were trigged during homing...
|
||||
{
|
||||
step_events_completed = current_block->step_event_count;
|
||||
}
|
||||
}
|
||||
old_z_max_endstop = z_max_endstop;
|
||||
old_z2_max_endstop = z2_max_endstop;
|
||||
<<<<<<< HEAD
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -626,20 +603,6 @@ ISR(TIMER1_COMPA_vect) {
|
|||
#endif
|
||||
}
|
||||
}
|
||||
=======
|
||||
|
||||
#else // !Z_DUAL_ENDSTOPS
|
||||
|
||||
UPDATE_ENDSTOP(z, Z, max, MAX);
|
||||
|
||||
#endif // !Z_DUAL_ENDSTOPS
|
||||
|
||||
#endif // Z_MAX_PIN
|
||||
|
||||
} // check_endstops
|
||||
|
||||
} // +direction
|
||||
>>>>>>> MarlinFirmware/Development
|
||||
|
||||
#ifndef ADVANCE
|
||||
if (TEST(out_bits, E_AXIS)) { // -direction
|
||||
|
|
|
@ -485,7 +485,7 @@ static void lcd_tune_menu() {
|
|||
MENU_MULTIPLIER_ITEM_EDIT(int3, MSG_BED, &target_temperature_bed, 0, BED_MAXTEMP - 15);
|
||||
#endif
|
||||
MENU_MULTIPLIER_ITEM_EDIT(int3, MSG_FAN_SPEED, &fanSpeed, 0, 255);
|
||||
MENU_ITEM_EDIT(int3, MSG_FLOW, &extruder_multiply[active_extruder], 10, 999);
|
||||
MENU_ITEM_EDIT(int3, MSG_FLOW, &extrudemultiply, 10, 999);
|
||||
MENU_ITEM_EDIT(int3, MSG_FLOW MSG_F0, &extruder_multiply[0], 10, 999);
|
||||
#if TEMP_SENSOR_1 != 0
|
||||
MENU_ITEM_EDIT(int3, MSG_FLOW MSG_F1, &extruder_multiply[1], 10, 999);
|
||||
|
|
|
@ -624,7 +624,7 @@ static void lcd_implementation_status_screen()
|
|||
|
||||
static void lcd_implementation_drawmenu_generic(bool sel, uint8_t row, const char* pstr, char pre_char, char post_char) {
|
||||
char c;
|
||||
uint8_t n = LCD_WIDTH - 2;
|
||||
uint8_t n = LCD_WIDTH - 1 - (LCD_WIDTH < 20 ? 1 : 2);
|
||||
lcd.setCursor(0, row);
|
||||
lcd.print(sel ? pre_char : ' ');
|
||||
while ((c = pgm_read_byte(pstr)) && n > 0) {
|
||||
|
@ -633,11 +633,12 @@ static void lcd_implementation_drawmenu_generic(bool sel, uint8_t row, const cha
|
|||
}
|
||||
while(n--) lcd.print(' ');
|
||||
lcd.print(post_char);
|
||||
lcd.print(' ');
|
||||
}
|
||||
|
||||
static void lcd_implementation_drawmenu_setting_edit_generic(bool sel, uint8_t row, const char* pstr, char pre_char, char* data) {
|
||||
char c;
|
||||
uint8_t n = LCD_WIDTH - 2 - lcd_strlen(data);
|
||||
uint8_t n = LCD_WIDTH - 1 - (LCD_WIDTH < 20 ? 1 : 2) - lcd_strlen(data);
|
||||
lcd.setCursor(0, row);
|
||||
lcd.print(sel ? pre_char : ' ');
|
||||
while ((c = pgm_read_byte(pstr)) && n > 0) {
|
||||
|
@ -650,7 +651,7 @@ static void lcd_implementation_drawmenu_setting_edit_generic(bool sel, uint8_t r
|
|||
}
|
||||
static void lcd_implementation_drawmenu_setting_edit_generic_P(bool sel, uint8_t row, const char* pstr, char pre_char, const char* data) {
|
||||
char c;
|
||||
uint8_t n = LCD_WIDTH - 2 - lcd_strlen_P(data);
|
||||
uint8_t n = LCD_WIDTH - 1 - (LCD_WIDTH < 20 ? 1 : 2) - lcd_strlen_P(data);
|
||||
lcd.setCursor(0, row);
|
||||
lcd.print(sel ? pre_char : ' ');
|
||||
while ((c = pgm_read_byte(pstr)) && n > 0) {
|
||||
|
@ -687,11 +688,11 @@ void lcd_implementation_drawedit(const char* pstr, char* value) {
|
|||
lcd.setCursor(1, 1);
|
||||
lcd_printPGM(pstr);
|
||||
lcd.print(':');
|
||||
lcd.setCursor(LCD_WIDTH - lcd_strlen(value), 1);
|
||||
lcd.setCursor(LCD_WIDTH - (LCD_WIDTH < 20 ? 0 : 1) - lcd_strlen(value), 1);
|
||||
lcd_print(value);
|
||||
}
|
||||
|
||||
static void lcd_implementation_drawmenu_sd(bool sel, uint8_t row, const char* pstr, const char* filename, char* longFilename, uint8_t concat, char post_char) {
|
||||
static void lcd_implementation_drawmenu_sd(bool sel, uint8_t row, const char* pstr, const char* filename, char* longFilename, uint8_t concat) {
|
||||
char c;
|
||||
uint8_t n = LCD_WIDTH - concat;
|
||||
lcd.setCursor(0, row);
|
||||
|
@ -705,15 +706,14 @@ static void lcd_implementation_drawmenu_sd(bool sel, uint8_t row, const char* ps
|
|||
filename++;
|
||||
}
|
||||
while (n--) lcd.print(' ');
|
||||
lcd.print(post_char);
|
||||
}
|
||||
|
||||
static void lcd_implementation_drawmenu_sdfile(bool sel, uint8_t row, const char* pstr, const char* filename, char* longFilename) {
|
||||
lcd_implementation_drawmenu_sd(sel, row, pstr, filename, longFilename, 2, ' ');
|
||||
lcd_implementation_drawmenu_sd(sel, row, pstr, filename, longFilename, 1);
|
||||
}
|
||||
|
||||
static void lcd_implementation_drawmenu_sddirectory(bool sel, uint8_t row, const char* pstr, const char* filename, char* longFilename) {
|
||||
lcd_implementation_drawmenu_sd(sel, row, pstr, filename, longFilename, 2, LCD_STR_FOLDER[0]);
|
||||
lcd_implementation_drawmenu_sd(sel, row, pstr, filename, longFilename, 2);
|
||||
}
|
||||
|
||||
#define lcd_implementation_drawmenu_back(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0])
|
||||
|
|
Loading…
Reference in a new issue