Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revert/cleanup mininum extruder height during M600 #3121

Merged
merged 2 commits into from
Apr 22, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions Firmware/Configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -551,9 +551,10 @@ enum CalibrationStatus

// Try to maintain a minimum distance from the bed even when Z is
// unknown when doing the following operations
#define MIN_Z_FOR_LOAD 50
#define MIN_Z_FOR_UNLOAD 50
#define MIN_Z_FOR_PREHEAT 10
#define MIN_Z_FOR_LOAD 50 // lcd filament loading or autoload
#define MIN_Z_FOR_UNLOAD 50 // lcd filament unloading
#define MIN_Z_FOR_SWAP 27 // filament change (including M600)
#define MIN_Z_FOR_PREHEAT 10 // lcd preheat

#include "Configuration_adv.h"
#include "thermistortables.h"
Expand Down
12 changes: 6 additions & 6 deletions Firmware/Marlin_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3622,12 +3622,12 @@ static T gcode_M600_filament_change_z_shift()
#ifdef FILAMENTCHANGE_ZADD
static_assert(Z_MAX_POS < (255 - FILAMENTCHANGE_ZADD), "Z-range too high, change the T type from uint8_t to uint16_t");
// avoid floating point arithmetics when not necessary - results in shorter code
T z_shift = T(FILAMENTCHANGE_ZADD); // always move above printout
T ztmp = T( current_position[Z_AXIS] );
T z_shift = 0;
if(ztmp < T(25)){
z_shift = T(25) - ztmp; // make sure to be at least 25mm above the heat bed
}
return z_shift + T(FILAMENTCHANGE_ZADD); // always move above printout
if((ztmp + z_shift) < T(MIN_Z_FOR_SWAP)){
z_shift = T(MIN_Z_FOR_SWAP) - ztmp; // make sure to be at least 25mm above the heat bed
}
return z_shift;
#else
return T(0);
#endif
Expand Down Expand Up @@ -3676,7 +3676,7 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float

// Unload filament
if (mmu_enabled) extr_unload(); //unload just current filament for multimaterial printers (used also in M702)
else unload_filament(); //unload filament for single material (used also in M702)
else unload_filament(true); //unload filament for single material (used also in M702)
//finish moves
st_synchronize();

Expand Down
9 changes: 5 additions & 4 deletions Firmware/ultralcd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4885,7 +4885,7 @@ void lcd_wizard(WizState state)
lcd_display_message_fullscreen_P(_i("Now I will preheat nozzle for PLA."));
wait_preheat();
//unload current filament
unload_filament();
unload_filament(true);
//load filament
lcd_wizard_load();
setTargetHotend(0, 0); //we are finished, cooldown nozzle
Expand Down Expand Up @@ -6200,13 +6200,14 @@ static void change_extr_menu(){
}
#endif //SNMM

//unload filament for single material printer (used in M702 gcode)
void unload_filament()
// unload filament for single material printer (used in M702 gcode)
// @param automatic: If true, unload_filament is part of a unload+load sequence (M600)
void unload_filament(bool automatic)
{
custom_message_type = CustomMsg::FilamentLoading;
lcd_setstatuspgm(_T(MSG_UNLOADING_FILAMENT));

raise_z_above(MIN_Z_FOR_UNLOAD);
raise_z_above(automatic? MIN_Z_FOR_SWAP: MIN_Z_FOR_UNLOAD);

// extr_unload2();

Expand Down
2 changes: 1 addition & 1 deletion Firmware/ultralcd.h
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ extern bool bFilamentAction;
void mFilamentItem(uint16_t nTemp,uint16_t nTempBed);
void mFilamentItemForce();
void lcd_generic_preheat_menu();
void unload_filament();
void unload_filament(bool automatic = false);

void stack_error();
void lcd_printer_connected();
Expand Down