diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 9be8df78..f95f7fee 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1234,7 +1234,7 @@ void setup() // so the next time the firmware gets updated, it will know from which version it has been updated. update_current_firmware_version_to_eeprom(); if (eeprom_read_byte((uint8_t*)EEPROM_UVLO) == 1) { //previous print was terminated by UVLO - if (lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_RECOVER_PRINT)) recover_print(); + if (lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_RECOVER_PRINT, false)) recover_print(); else { eeprom_update_byte((uint8_t*)EEPROM_UVLO, 0); lcd_update_enable(true); @@ -2685,6 +2685,11 @@ void process_commands() homing_flag = false; + SERIAL_ECHOLNPGM("Homing happened"); + SERIAL_ECHOPGM("Current position X AXIS:"); + MYSERIAL.println(current_position[X_AXIS]); + SERIAL_ECHOPGM("Current position Y_AXIS:"); + MYSERIAL.println(current_position[Y_AXIS]); break; #ifdef ENABLE_AUTO_BED_LEVELING @@ -6798,8 +6803,14 @@ void serialecho_temperatures() { void uvlo_() { //SERIAL_ECHOLNPGM("UVLO"); save_print_to_eeprom(); - 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]); + float current_position_bckp[2]; + + current_position_bckp[X_AXIS] = st_get_position_mm(X_AXIS); + current_position_bckp[Y_AXIS] = st_get_position_mm(Y_AXIS); + + + 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]); eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_Z), current_position[Z_AXIS]); 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); @@ -6829,82 +6840,52 @@ void recover_print() { lcd_update_enable(true); lcd_update(2); lcd_setstatuspgm(WELCOME_MSG); - //char cmd1[30]; + target_temperature[active_extruder] = eeprom_read_byte((uint8_t*)EEPROM_UVLO_TARGET_HOTEND); target_temperature_bed = eeprom_read_byte((uint8_t*)EEPROM_UVLO_TARGET_BED); + //x_rec = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0)); + //y_rec = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4)); + float z_pos = UVLO_Z_AXIS_SHIFT + eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION_Z)); setTargetHotend0(210); //need to change to stored temperature setTargetBed(55); //SERIAL_ECHOPGM("Target temperature:"); //MYSERIAL.println(target_temperature[0]); //SERIAL_ECHOPGM("Target temp bed:"); //MYSERIAL.println(target_temperature_bed); - //homeaxis(X_AXIS); - //homeaxis(Y_AXIS); - //home_xy(); - float z_pos = UVLO_Z_AXIS_SHIFT + eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION_Z)); - //plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); - SERIAL_ECHOPGM("current_position[Z_AXIS]:"); - MYSERIAL.println(current_position[Z_AXIS]); - SERIAL_ECHOPGM("z_pos"); - MYSERIAL.println(z_pos); enquecommand_P(PSTR("G28 X")); enquecommand_P(PSTR("G28 Y")); strcpy(cmd, "G92 Z"); strcat(cmd, ftostr43(z_pos)); - //fprintf(cmd, PSTR("G92 Z3.3%f"), z_pos); enquecommand(cmd); - //enquecommand_P(PSTR("G92 Z2.2")); + eeprom_update_byte((uint8_t*)EEPROM_UVLO, 0); while ((abs(degHotend(0)- target_temperature[0])>5) || (abs(degBed() -target_temperature_bed)>3)) { //wait for heater and bed to reach target temp delay_keep_alive(1000); } - //enquecommand_P("G28 W"); - /*float x_rec, y_rec; - x_rec = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0)); - y_rec = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4)); - strcpy(cmd1, "G1 X"); - strcat(cmd1, ftostr32(x_rec)); - strcat(cmd1, " Y"); - strcat(cmd1, ftostr32(y_rec)); - enquecommand(cmd1); - enquecommand_P(PSTR("G1 Z" STRINGIFY(-UVLO_Z_AXIS_SHIFT))); - enquecommand_P(PSTR("G1 E" STRINGIFY(DEFAULT_RETRACTION)));*/ - - - //current_position[X_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0)); - //current_position[Y_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4)); - - /*SERIAL_ECHOPGM("Current position [X_AXIS]:"); - MYSERIAL.println(current_position[X_AXIS]); - SERIAL_ECHOPGM("Current position [Y_AXIS]:"); - MYSERIAL.println(current_position[Y_AXIS]);*/ - //plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 40, active_extruder); - //st_synchronize(); - /*current_position[Z_AXIS] -= UVLO_Z_AXIS_SHIFT; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 40, active_extruder); - st_synchronize(); - current_position[E_AXIS] += DEFAULT_RETRACTION; //unretract - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400, active_extruder); - st_synchronize();*/ - - //enquecommand_P(PSTR("G1 Z" STRINGIFY(-UVLO_Z_AXIS_SHIFT))); - //enquecommand_P(PSTR("G1 E" STRINGIFY(DEFAULT_RETRACTION))); restore_print_from_eeprom(); SERIAL_ECHOPGM("current_position[Z_AXIS]:"); MYSERIAL.print(current_position[Z_AXIS]); } void restore_print_from_eeprom() { + float x_rec, y_rec; char cmd[30]; char* c; char filename[13]; char str[5] = ".gco"; + x_rec = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0)); + y_rec = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4)); + //SERIAL_ECHOPGM("X pos read from EEPROM:"); + //MYSERIAL.println(x_rec); + //SERIAL_ECHOPGM("Y pos read from EEPROM:"); + //MYSERIAL.println(y_rec); for (int i = 0; i < 8; i++) { filename[i] = eeprom_read_byte((uint8_t*)EEPROM_FILENAME + i); } filename[8] = '\0'; + MYSERIAL.print(filename); strcat(filename, str); sprintf_P(cmd, PSTR("M23 %s"), filename); @@ -6914,13 +6895,19 @@ void restore_print_from_eeprom() { uint32_t position = eeprom_read_dword((uint32_t*)(EEPROM_FILE_POSITION)); SERIAL_ECHOPGM("Position read from eeprom:"); MYSERIAL.println(position); + sprintf_P(cmd, PSTR("M26 %lu"), position); + //card.setIndex(int32_t(position)); //set from which SD card byte we will start + //if (card.cardOK && code_seen('S')) { + // card.setIndex(code_value_long()); + //} - card.setIndex(position); - enquecommand_P(PSTR("M24")); - sprintf_P(cmd, PSTR("M26 S%d"), position); + 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)); + strcat(cmd, " Y"); + strcat(cmd, ftostr32(y_rec)); enquecommand(cmd); - enquecommand_P(PSTR("M83")); - //SERIAL_ECHO(cmdbuffer + bufindr + 1); enquecommand_P(PSTR("G1 Z" STRINGIFY(-UVLO_Z_AXIS_SHIFT))); enquecommand_P(PSTR("G1 E" STRINGIFY(DEFAULT_RETRACTION)" F2000")); } diff --git a/Firmware/pins.h b/Firmware/pins.h index b49651cb..d19ad26b 100644 --- a/Firmware/pins.h +++ b/Firmware/pins.h @@ -499,7 +499,7 @@ #ifdef ULTRA_LCD -#define KILL_PIN 32 +//#define KILL_PIN 32 #ifdef NEWPANEL