diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index c23a3156..f2f1e9bc 100644 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -422,4 +422,6 @@ extern int busy_state; bool gcode_M45(bool onlyZ); void gcode_M701(); -#define UVLO !(PINE & (1<<4)) \ No newline at end of file +#define UVLO !(PINE & (1<<4)) + +void extr_unload2(); diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index bc08a0b2..08cca873 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -5818,6 +5818,9 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp custom_message = true; custom_message_type = 2; lcd_setstatuspgm(MSG_UNLOADING_FILAMENT); + +// extr_unload2(); + current_position[E_AXIS] -= 80; plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 7000 / 60, active_extruder); st_synchronize(); @@ -7046,6 +7049,12 @@ void uvlo_() disable_x(); disable_y(); + tmc2130_set_current_h(Z_AXIS, 12); + tmc2130_set_current_r(Z_AXIS, 12); + tmc2130_set_current_h(E_AXIS, 20); + tmc2130_set_current_r(E_AXIS, 20); + + // Indicate that the interrupt has been triggered. SERIAL_ECHOLNPGM("UVLO"); @@ -7573,3 +7582,76 @@ void print_mesh_bed_leveling_table() } SERIAL_ECHOLNPGM(""); } + + +#define FIL_LOAD_LENGTH 60 + +void extr_unload2() { //unloads filament +// float tmp_motor[3] = DEFAULT_PWM_MOTOR_CURRENT; +// float tmp_motor_loud[3] = DEFAULT_PWM_MOTOR_CURRENT_LOUD; +// int8_t SilentMode; + uint8_t snmm_extruder = 0; + if (degHotend0() > EXTRUDE_MINTEMP) { + lcd_implementation_clear(); + lcd_display_message_fullscreen_P(PSTR("")); + max_feedrate[E_AXIS] = 50; + lcd.setCursor(0, 0); lcd_printPGM(MSG_UNLOADING_FILAMENT); +// lcd.print(" "); +// lcd.print(snmm_extruder + 1); + lcd.setCursor(0, 2); lcd_printPGM(MSG_PLEASE_WAIT); + if (current_position[Z_AXIS] < 15) { + current_position[Z_AXIS] += 15; //lifting in Z direction to make space for extrusion + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 25, active_extruder); + } + + current_position[E_AXIS] += 10; //extrusion + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 10, active_extruder); +// digipot_current(2, E_MOTOR_HIGH_CURRENT); + if (current_temperature[0] < 230) { //PLA & all other filaments + current_position[E_AXIS] += 5.4; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2800 / 60, active_extruder); + current_position[E_AXIS] += 3.2; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + current_position[E_AXIS] += 3; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3400 / 60, active_extruder); + } + else { //ABS + current_position[E_AXIS] += 3.1; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2000 / 60, active_extruder); + current_position[E_AXIS] += 3.1; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2500 / 60, active_extruder); + current_position[E_AXIS] += 4; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 3000 / 60, active_extruder); + /*current_position[X_AXIS] += 23; //delay + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder); //delay + current_position[X_AXIS] -= 23; //delay + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 600 / 60, active_extruder); //delay*/ + delay_keep_alive(4700); + } + + max_feedrate[E_AXIS] = 80; + current_position[E_AXIS] -= (bowden_length[snmm_extruder] + 60 + FIL_LOAD_LENGTH) / 2; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 500, active_extruder); + current_position[E_AXIS] -= (bowden_length[snmm_extruder] + 60 + FIL_LOAD_LENGTH) / 2; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 500, active_extruder); + st_synchronize(); + //digipot_init(); +// if (SilentMode == 1) digipot_current(2, tmp_motor[2]); //set back to normal operation currents +// else digipot_current(2, tmp_motor_loud[2]); + lcd_update_enable(true); +// lcd_return_to_status(); + max_feedrate[E_AXIS] = 50; + } + else { + + lcd_implementation_clear(); + lcd.setCursor(0, 0); + lcd_printPGM(MSG_ERROR); + lcd.setCursor(0, 2); + lcd_printPGM(MSG_PREHEAT_NOZZLE); + + delay(2000); + lcd_implementation_clear(); + } +// lcd_return_to_status(); +}