|
@@ -6770,24 +6770,23 @@ void serialecho_temperatures() {
|
|
|
void uvlo_() {
|
|
|
SERIAL_ECHOLNPGM("UVLO");
|
|
|
save_print_to_eeprom();
|
|
|
- float current_position_bckp[2];
|
|
|
- int feedrate_bckp = feedrate;
|
|
|
- current_position_bckp[X_AXIS] = st_get_position_mm(X_AXIS);
|
|
|
- current_position_bckp[Y_AXIS] = st_get_position_mm(Y_AXIS);
|
|
|
+ // feedrate in mm/min
|
|
|
+ int feedrate_bckp = blocks_queued() ? (block_buffer[block_buffer_tail].nominal_speed * 60.f) : feedrate;
|
|
|
|
|
|
- eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0), current_position_bckp[X_AXIS]);
|
|
|
- eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4), current_position_bckp[Y_AXIS]);
|
|
|
+ disable_x();
|
|
|
+ disable_y();
|
|
|
+ planner_abort_hard();
|
|
|
+
|
|
|
+ eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0), current_position[X_AXIS]);
|
|
|
+ eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4), current_position[Y_AXIS]);
|
|
|
eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_Z), current_position[Z_AXIS]);
|
|
|
EEPROM_save_B(EEPROM_UVLO_FEEDRATE, &feedrate_bckp);
|
|
|
eeprom_update_byte((uint8_t*)EEPROM_UVLO_TARGET_HOTEND, target_temperature[active_extruder]);
|
|
|
eeprom_update_byte((uint8_t*)EEPROM_UVLO_TARGET_BED, target_temperature_bed);
|
|
|
eeprom_update_byte((uint8_t*)EEPROM_UVLO_FAN_SPEED, fanSpeed);
|
|
|
- disable_x();
|
|
|
- disable_y();
|
|
|
- planner_abort_hard();
|
|
|
// Because the planner_abort_hard() initialized current_position[Z] from the stepper,
|
|
|
// Z baystep is no more applied. Reset it.
|
|
|
- babystep_reset();
|
|
|
+ //babystep_reset();
|
|
|
// Clean the input command queue.
|
|
|
cmdqueue_reset();
|
|
|
card.sdprinting = false;
|
|
@@ -6798,11 +6797,13 @@ void uvlo_() {
|
|
|
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400, active_extruder);
|
|
|
st_synchronize();
|
|
|
current_position[Z_AXIS] += UVLO_Z_AXIS_SHIFT;
|
|
|
+ eeprom_update_byte((uint8_t*)EEPROM_UVLO, 1);
|
|
|
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 40, active_extruder);
|
|
|
- st_synchronize();
|
|
|
- disable_z();
|
|
|
- eeprom_update_byte((uint8_t*)EEPROM_UVLO, 1);
|
|
|
- delay(10);
|
|
|
+ // Move the print head to the side of the print until all the power stored in the power supply capacitors is depleted.
|
|
|
+ current_position[X_AXIS] = (current_position[X_AXIS] < 0.5f * (X_MIN_POS + X_MAX_POS)) ? X_MIN_POS : X_MAX_POS;
|
|
|
+ plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 500, active_extruder);
|
|
|
+ st_synchronize();
|
|
|
+// disable_z();
|
|
|
|
|
|
SERIAL_ECHOLNPGM("UVLO - end");
|
|
|
cli();
|
|
@@ -6876,7 +6877,9 @@ void recover_print() {
|
|
|
current_position[Z_AXIS] = z_pos;
|
|
|
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
|
|
|
|
|
-
|
|
|
+ if (current_position[Z_AXIS] < 25)
|
|
|
+ // Lift the print head, so one may remove the excess priming material.
|
|
|
+ enquecommand_P(PSTR("G1 Z25 F800"));
|
|
|
enquecommand_P(PSTR("G28 X"));
|
|
|
enquecommand_P(PSTR("G28 Y"));
|
|
|
sprintf_P(cmd, PSTR("M109 S%d"), target_temperature[active_extruder]);
|
|
@@ -6931,10 +6934,10 @@ void restore_print_from_eeprom() {
|
|
|
SERIAL_ECHOPGM("Position read from eeprom:");
|
|
|
MYSERIAL.println(position);
|
|
|
|
|
|
- enquecommand_P(PSTR("M24")); //M24 - Start SD print
|
|
|
sprintf_P(cmd, PSTR("M26 S%lu"), position);
|
|
|
-
|
|
|
enquecommand(cmd);
|
|
|
+ enquecommand_P(PSTR("M24")); //M24 - Start SD print
|
|
|
+
|
|
|
enquecommand_P(PSTR("M83")); //E axis relative mode
|
|
|
strcpy(cmd, "G1 X");
|
|
|
strcat(cmd, ftostr32(x_rec));
|