Towards MMU2 without LCD
This commit is contained in:
parent
ca34edc5b0
commit
47ad2caab2
3 changed files with 178 additions and 181 deletions
|
|
@ -105,23 +105,19 @@ int16_t MMU2::version = -1, MMU2::buildnr = -1;
|
||||||
millis_t MMU2::prev_request, MMU2::prev_P0_request;
|
millis_t MMU2::prev_request, MMU2::prev_P0_request;
|
||||||
char MMU2::rx_buffer[MMU_RX_SIZE], MMU2::tx_buffer[MMU_TX_SIZE];
|
char MMU2::rx_buffer[MMU_RX_SIZE], MMU2::tx_buffer[MMU_TX_SIZE];
|
||||||
|
|
||||||
#if BOTH(HAS_LCD_MENU, MMU2_MENUS)
|
struct E_Step {
|
||||||
|
|
||||||
struct E_Step {
|
|
||||||
float extrude; //!< extrude distance in mm
|
float extrude; //!< extrude distance in mm
|
||||||
feedRate_t feedRate; //!< feed rate in mm/s
|
feedRate_t feedRate; //!< feed rate in mm/s
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr E_Step
|
static constexpr E_Step
|
||||||
ramming_sequence[] PROGMEM = { MMU2_RAMMING_SEQUENCE }
|
ramming_sequence[] PROGMEM = { MMU2_RAMMING_SEQUENCE }
|
||||||
, load_to_nozzle_sequence[] PROGMEM = { MMU2_LOAD_TO_NOZZLE_SEQUENCE }
|
, load_to_nozzle_sequence[] PROGMEM = { MMU2_LOAD_TO_NOZZLE_SEQUENCE }
|
||||||
#if HAS_PRUSA_MMU2S
|
#if HAS_PRUSA_MMU2S
|
||||||
, can_load_sequence[] PROGMEM = { MMU2_CAN_LOAD_SEQUENCE }
|
, can_load_sequence[] PROGMEM = { MMU2_CAN_LOAD_SEQUENCE }
|
||||||
, can_load_increment_sequence[] PROGMEM = { MMU2_CAN_LOAD_INCREMENT_SEQUENCE }
|
, can_load_increment_sequence[] PROGMEM = { MMU2_CAN_LOAD_INCREMENT_SEQUENCE }
|
||||||
#endif
|
#endif
|
||||||
;
|
;
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
MMU2::MMU2() {
|
MMU2::MMU2() {
|
||||||
rx_buffer[0] = '\0';
|
rx_buffer[0] = '\0';
|
||||||
|
|
@ -906,22 +902,21 @@ void MMU2::filament_runout() {
|
||||||
DEBUG_ECHOLNPGM(" succeeded.");
|
DEBUG_ECHOLNPGM(" succeeded.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if BOTH(HAS_LCD_MENU, MMU2_MENUS)
|
// Load filament into MMU2
|
||||||
|
void MMU2::load_filament(const uint8_t index) {
|
||||||
// Load filament into MMU2
|
|
||||||
void MMU2::load_filament(const uint8_t index) {
|
|
||||||
if (!enabled) return;
|
if (!enabled) return;
|
||||||
command(MMU_CMD_L0 + index);
|
command(MMU_CMD_L0 + index);
|
||||||
manage_response(false, false);
|
manage_response(false, false);
|
||||||
BUZZ(200, 404);
|
BUZZ(200, 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Switch material and load to nozzle
|
* Switch material and load to nozzle
|
||||||
*/
|
*/
|
||||||
bool MMU2::load_filament_to_nozzle(const uint8_t index) {
|
bool MMU2::load_filament_to_nozzle(const uint8_t index) {
|
||||||
|
|
||||||
if (!enabled) return false;
|
if (!enabled) return false;
|
||||||
|
|
||||||
|
|
@ -943,21 +938,21 @@ void MMU2::filament_runout() {
|
||||||
BUZZ(200, 404);
|
BUZZ(200, 404);
|
||||||
}
|
}
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load filament to nozzle of multimaterial printer
|
* Load filament to nozzle of multimaterial printer
|
||||||
*
|
*
|
||||||
* This function is used only only after T? (user select filament) and M600 (change filament).
|
* This function is used only only after T? (user select filament) and M600 (change filament).
|
||||||
* It is not used after T0 .. T4 command (select filament), in such case, gcode is responsible for loading
|
* It is not used after T0 .. T4 command (select filament), in such case, gcode is responsible for loading
|
||||||
* filament to nozzle.
|
* filament to nozzle.
|
||||||
*/
|
*/
|
||||||
void MMU2::load_to_nozzle() {
|
void MMU2::load_to_nozzle() {
|
||||||
if (!enabled) return;
|
if (!enabled) return;
|
||||||
execute_extruder_sequence((const E_Step *)load_to_nozzle_sequence, COUNT(load_to_nozzle_sequence));
|
execute_extruder_sequence((const E_Step *)load_to_nozzle_sequence, COUNT(load_to_nozzle_sequence));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MMU2::eject_filament(const uint8_t index, const bool recover) {
|
bool MMU2::eject_filament(const uint8_t index, const bool recover) {
|
||||||
|
|
||||||
if (!enabled) return false;
|
if (!enabled) return false;
|
||||||
|
|
||||||
|
|
@ -971,7 +966,7 @@ void MMU2::filament_runout() {
|
||||||
|
|
||||||
ENABLE_AXIS_E0();
|
ENABLE_AXIS_E0();
|
||||||
current_position.e -= MMU2_FILAMENTCHANGE_EJECT_FEED;
|
current_position.e -= MMU2_FILAMENTCHANGE_EJECT_FEED;
|
||||||
line_to_current_position(2500 / 60);
|
line_to_current_position(MMM_TO_MMS(2500));
|
||||||
planner.synchronize();
|
planner.synchronize();
|
||||||
command(MMU_CMD_E0 + index);
|
command(MMU_CMD_E0 + index);
|
||||||
manage_response(false, false);
|
manage_response(false, false);
|
||||||
|
|
@ -1001,12 +996,12 @@ void MMU2::filament_runout() {
|
||||||
DISABLE_AXIS_E0();
|
DISABLE_AXIS_E0();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unload from hotend and retract to MMU
|
* Unload from hotend and retract to MMU
|
||||||
*/
|
*/
|
||||||
bool MMU2::unload() {
|
bool MMU2::unload() {
|
||||||
|
|
||||||
if (!enabled) return false;
|
if (!enabled) return false;
|
||||||
|
|
||||||
|
|
@ -1029,16 +1024,16 @@ void MMU2::filament_runout() {
|
||||||
set_runout_valid(false);
|
set_runout_valid(false);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unload sequence to optimize shape of the tip of the unloaded filament
|
* Unload sequence to optimize shape of the tip of the unloaded filament
|
||||||
*/
|
*/
|
||||||
void MMU2::filament_ramming() {
|
void MMU2::filament_ramming() {
|
||||||
execute_extruder_sequence((const E_Step *)ramming_sequence, sizeof(ramming_sequence) / sizeof(E_Step));
|
execute_extruder_sequence((const E_Step *)ramming_sequence, sizeof(ramming_sequence) / sizeof(E_Step));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MMU2::execute_extruder_sequence(const E_Step * sequence, int steps) {
|
void MMU2::execute_extruder_sequence(const E_Step * sequence, int steps) {
|
||||||
|
|
||||||
planner.synchronize();
|
planner.synchronize();
|
||||||
ENABLE_AXIS_E0();
|
ENABLE_AXIS_E0();
|
||||||
|
|
@ -1060,8 +1055,6 @@ void MMU2::filament_runout() {
|
||||||
}
|
}
|
||||||
|
|
||||||
DISABLE_AXIS_E0();
|
DISABLE_AXIS_E0();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // HAS_LCD_MENU && MMU2_MENUS
|
|
||||||
|
|
||||||
#endif // HAS_PRUSA_MMU2
|
#endif // HAS_PRUSA_MMU2
|
||||||
|
|
|
||||||
|
|
@ -49,13 +49,11 @@ public:
|
||||||
static uint8_t get_current_tool();
|
static uint8_t get_current_tool();
|
||||||
static void set_filament_type(const uint8_t index, const uint8_t type);
|
static void set_filament_type(const uint8_t index, const uint8_t type);
|
||||||
|
|
||||||
#if BOTH(HAS_LCD_MENU, MMU2_MENUS)
|
|
||||||
static bool unload();
|
static bool unload();
|
||||||
static void load_filament(uint8_t);
|
static void load_filament(uint8_t);
|
||||||
static void load_all();
|
static void load_all();
|
||||||
static bool load_filament_to_nozzle(const uint8_t index);
|
static bool load_filament_to_nozzle(const uint8_t index);
|
||||||
static bool eject_filament(const uint8_t index, const bool recover);
|
static bool eject_filament(const uint8_t index, const bool recover);
|
||||||
#endif
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static bool rx_str_P(const char* str);
|
static bool rx_str_P(const char* str);
|
||||||
|
|
@ -72,11 +70,9 @@ private:
|
||||||
static bool get_response();
|
static bool get_response();
|
||||||
static void manage_response(const bool move_axes, const bool turn_off_nozzle);
|
static void manage_response(const bool move_axes, const bool turn_off_nozzle);
|
||||||
|
|
||||||
#if BOTH(HAS_LCD_MENU, MMU2_MENUS)
|
|
||||||
static void load_to_nozzle();
|
static void load_to_nozzle();
|
||||||
static void filament_ramming();
|
static void filament_ramming();
|
||||||
static void execute_extruder_sequence(const E_Step * sequence, int steps);
|
static void execute_extruder_sequence(const E_Step * sequence, int steps);
|
||||||
#endif
|
|
||||||
|
|
||||||
static void filament_runout();
|
static void filament_runout();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -874,6 +874,31 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||||
#error "INDIVIDUAL_AXIS_HOMING_MENU is incompatible with DELTA kinematics."
|
#error "INDIVIDUAL_AXIS_HOMING_MENU is incompatible with DELTA kinematics."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Multi-Material-Unit requirements
|
||||||
|
*/
|
||||||
|
#if HAS_PRUSA_MMU2
|
||||||
|
#if EXTRUDERS != 5
|
||||||
|
#undef SINGLENOZZLE
|
||||||
|
#error "PRUSA_MMU2(S) requires exactly 5 EXTRUDERS. Please update your Configuration."
|
||||||
|
#elif DISABLED(NOZZLE_PARK_FEATURE)
|
||||||
|
#error "PRUSA_MMU2(S) requires NOZZLE_PARK_FEATURE. Enable it to continue."
|
||||||
|
#elif ENABLED(HAS_PRUSA_MMU2S) && DISABLED(FILAMENT_RUNOUT_SENSOR)
|
||||||
|
#error "PRUSA_MMU2S requires FILAMENT_RUNOUT_SENSOR. Enable it to continue."
|
||||||
|
#elif ENABLED(MMU_EXTRUDER_SENSOR) && DISABLED(FILAMENT_RUNOUT_SENSOR)
|
||||||
|
#error "MMU_EXTRUDER_SENSOR requires FILAMENT_RUNOUT_SENSOR. Enable it to continue."
|
||||||
|
#elif HAS_PRUSA_MMU2S && !HAS_LCD_MENU
|
||||||
|
#error "PRUSA_MMU2S requires an LCD supporting MarlinUI to be enabled."
|
||||||
|
#elif ENABLED(MMU_EXTRUDER_SENSOR) && !HAS_LCD_MENU
|
||||||
|
#error "MMU_EXTRUDER_SENSOR requires an LCD supporting MarlinUI to be enabled."
|
||||||
|
#elif DISABLED(ADVANCED_PAUSE_FEATURE)
|
||||||
|
static_assert(nullptr == strstr(MMU2_FILAMENT_RUNOUT_SCRIPT, "M600"), "ADVANCED_PAUSE_FEATURE is required to use M600 with PRUSA_MMU2(S) / SMUFF_EMU_MMU2(S).");
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#if HAS_SMUFF && EXTRUDERS > 15
|
||||||
|
#error "Too many extruders for SMUFF_EMU_MMU2(S). (15 maximum)."
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Options only for EXTRUDERS > 1
|
* Options only for EXTRUDERS > 1
|
||||||
*/
|
*/
|
||||||
|
|
@ -2958,23 +2983,6 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
|
||||||
* Multi-Material-Unit requirements
|
|
||||||
*/
|
|
||||||
#if HAS_SMUFF && EXTRUDERS > 15
|
|
||||||
#error "Too many extruders for SMUFF_EMU_MMU2(S). (15 maximum)."
|
|
||||||
#elif HAS_PRUSA_MMU2
|
|
||||||
#if EXTRUDERS != 5
|
|
||||||
#error "PRUSA_MMU2 / PRUSA_MMU2S requires EXTRUDERS = 5."
|
|
||||||
#elif DISABLED(NOZZLE_PARK_FEATURE)
|
|
||||||
#error "PRUSA_MMU2 / PRUSA_MMU2S requires NOZZLE_PARK_FEATURE. Enable it to continue."
|
|
||||||
#elif EITHER(HAS_PRUSA_MMU2S, MMU_EXTRUDER_SENSOR) && DISABLED(FILAMENT_RUNOUT_SENSOR)
|
|
||||||
#error "PRUSA_MMU2S or MMU_EXTRUDER_SENSOR requires FILAMENT_RUNOUT_SENSOR. Enable it to continue."
|
|
||||||
#elif DISABLED(ADVANCED_PAUSE_FEATURE)
|
|
||||||
static_assert(nullptr == strstr(MMU2_FILAMENT_RUNOUT_SCRIPT, "M600"), "ADVANCED_PAUSE_FEATURE is required to use M600 with PRUSA_MMU2(S) / SMUFF_EMU_MMU2(S).");
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Advanced PRINTCOUNTER settings
|
* Advanced PRINTCOUNTER settings
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue