From 047f2a8389fe7b98b3a087106c47aa8e090df38b Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 18 Jan 2017 17:57:32 +0100 Subject: [PATCH 1/4] Added writing flag to EEPROM, that we started/finished print to detect printer reset and need for filaments adjustment. --- Firmware/Configuration.h | 2 +- Firmware/ConfigurationStore.cpp | 4 ++++ Firmware/Marlin_main.cpp | 12 ++++++++++++ Firmware/ultralcd.cpp | 3 +++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 629c377b5..9db6dfabf 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -43,7 +43,7 @@ #define EEPROM_BED_CORRECTION_FRONT (EEPROM_BED_CORRECTION_RIGHT-1) #define EEPROM_BED_CORRECTION_REAR (EEPROM_BED_CORRECTION_FRONT-1) #define EEPROM_TOSHIBA_FLASH_AIR_COMPATIBLITY (EEPROM_BED_CORRECTION_REAR-1) -#define EEPROM_STEPS_PER_UNIT_E (EEPROM_TOSHIBA_FLASH_AIR_COMPATIBLITY-4) +#define EEPROM_PRINT_FLAG (EEPROM_TOSHIBA_FLASH_AIR_COMPATIBLITY-1) // Currently running firmware, each digit stored as uint16_t. // The flavor differentiates a dev, alpha, beta, release candidate or a release version. diff --git a/Firmware/ConfigurationStore.cpp b/Firmware/ConfigurationStore.cpp index aba92a60f..7535d77c8 100644 --- a/Firmware/ConfigurationStore.cpp +++ b/Firmware/ConfigurationStore.cpp @@ -120,6 +120,10 @@ void Config_StoreSettings() #endif #endif + /*MYSERIAL.print("Top address used:\n"); + MYSERIAL.print(i); + MYSERIAL.print("\n"); + */ char ver2[4]=EEPROM_VERSION; i=EEPROM_OFFSET; EEPROM_WRITE_VAR(i,ver2); // validate data diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 5e79b9508..f7b20cd36 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -2051,6 +2051,18 @@ void process_commands() #endif } + else if (code_seen("SetF")) { +#ifdef SNMM + bool not_finished = (eeprom_read_byte((unsigned char*)EEPROM_PRINT_FLAG) != PRINT_FINISHED); + eeprom_update_byte((unsigned char*)EEPROM_PRINT_FLAG, PRINT_STARTED); + if (not_finished) enquecommand_front_P(PSTR("PRUSA Y")); +#endif + } + else if (code_seen("ResF")) { +#ifdef SNMM + eeprom_update_byte((unsigned char*)EEPROM_PRINT_FLAG, PRINT_FINISHED); +#endif + } //else if (code_seen('Cal')) { // lcd_calibration(); // } diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 23bacc69e..696dc6db6 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -582,6 +582,9 @@ void lcd_commands() { // M84: Disable steppers. enquecommand_P(PSTR("M84")); +#ifdef SNMM + enquecommand_P(PSTR("PRUSA ResF")); //resets flag at the end of the print (used for SNMM) +#endif autotempShutdown(); lcd_commands_step = 2; } From 040a738202aa80f43cc74071cd4c2380d558457c Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Fri, 20 Jan 2017 15:43:02 +0100 Subject: [PATCH 2/4] improved load filament, creating M701 --- Firmware/Marlin.h | 1 + Firmware/Marlin_main.cpp | 40 ++++++++++++++++++++++++- Firmware/ultralcd.cpp | 65 ++++------------------------------------ 3 files changed, 45 insertions(+), 61 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 015099fb4..59aea54ea 100644 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -284,6 +284,7 @@ extern unsigned long starttime; extern unsigned long stoptime; extern bool is_usb_printing; extern bool homing_flag; +extern bool loading_flag; extern unsigned int usb_printing_counter; extern unsigned long kicktime; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index f7b20cd36..9e52f124d 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -272,6 +272,7 @@ unsigned long total_filament_used; unsigned int heating_status; unsigned int heating_status_counter; bool custom_message; +bool loading_flag = false; unsigned int custom_message_type; unsigned int custom_message_state; @@ -2067,7 +2068,7 @@ void process_commands() // lcd_calibration(); // } - } + } else if (code_seen('^')) { // nothing, this is a version line } else if(code_seen('G')) @@ -5062,6 +5063,43 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp #endif } break; + case 701: //M701: load filament + { + enable_z(); + custom_message = true; + custom_message_type = 2; + axis_relative_modes[3] = true; + + lcd_setstatuspgm(MSG_LOADING_FILAMENT); + current_position[E_AXIS] += 70; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400 / 60, active_extruder); //fast sequence + + current_position[E_AXIS] += 40; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 100 / 60, active_extruder); //slow sequence + st_synchronize(); + + if (!farm_mode && loading_flag) { + bool clean = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_FILAMENT_CLEAN); + + while (!clean) { + lcd_update_enable(true); + lcd_update(2); + current_position[E_AXIS] += 40; + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 100 / 60, active_extruder); //slow sequence + st_synchronize(); + clean = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_FILAMENT_CLEAN); + } + } + lcd_update_enable(true); + lcd_update(2); + lcd_setstatuspgm(WELCOME_MSG); + disable_z(); + loading_flag = false; + custom_message = false; + custom_message_type = 0; + } + break; + case 999: // M999: Restart after being stopped Stopped = false; lcd_reset_alert_level(); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 696dc6db6..22eeae7b7 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -497,62 +497,6 @@ static void lcd_status_screen() void lcd_commands() { - if (lcd_commands_type == LCD_COMMAND_LOAD_FILAMENT) //// load filament sequence - { - if (lcd_commands_step == 0) { lcd_commands_step = 7; custom_message = true;} - if (lcd_commands_step == 1 && !blocks_queued()) - { - lcd_commands_step = 0; - lcd_commands_type = 0; - lcd_setstatuspgm(WELCOME_MSG); - disable_z(); - custom_message = false; - custom_message_type = 0; - - } - - - if (lcd_commands_step == 2 && !blocks_queued()) - { - lcd_commands_step = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_FILAMENT_CLEAN) ? 1 : 4; - lcd_update_enable(true); - lcdDrawUpdate = 2; - - } - if (lcd_commands_step == 3 && !blocks_queued()) { - lcd_commands_step = farm_mode ? 1:2; //don't show question about clear color if we are in farm mode - } - - if (lcd_commands_step == 4 && !blocks_queued()) - { - //lcd_setstatuspgm(MSG_LOADING_FILAMENT); - enquecommand_P(PSTR(LOAD_FILAMENT_2)); //slow_sequence - lcd_commands_step = 3; - } - if (lcd_commands_step == 5 && !blocks_queued()) - { - enquecommand_P(PSTR(LOAD_FILAMENT_1)); //fast sequence - lcd_setstatuspgm(MSG_LOADING_FILAMENT); - //enquecommand_P(PSTR("G4")); //dwell - lcd_commands_step = 4; - } - if (lcd_commands_step == 6 && !blocks_queued()) - { - lcd_setstatuspgm(MSG_INSERT_FILAMENT); - enquecommand_P(PSTR(LOAD_FILAMENT_0)); //set E relative - enquecommand_P(PSTR("G1 E0.1 F400")); - lcd_commands_step = 5; - } - if (lcd_commands_step == 7 && !blocks_queued()) - { - lcd_setstatuspgm(MSG_PLEASE_WAIT); - enable_z(); - custom_message = true; - custom_message_type = 2; - lcd_commands_step = 6; - } - } - if (lcd_commands_type == LCD_COMMAND_STOP_PRINT) /// stop print { @@ -1125,10 +1069,9 @@ void lcd_LoadFilament() if (degHotend0() > EXTRUDE_MINTEMP) { custom_message = true; - lcd_commands_type = LCD_COMMAND_LOAD_FILAMENT; - SERIAL_ECHOLN("Loading filament"); - // commands() will handle the rest - + loading_flag = true; + enquecommand_P(PSTR("M701")); + SERIAL_ECHOLN("Loading filament"); } else { @@ -4206,6 +4149,8 @@ static void menu_action_function(menuFunc_t data) { } static void menu_action_sdfile(const char* filename, char* longFilename) { + loading_flag = false; + char cmd[30]; char* c; sprintf_P(cmd, PSTR("M23 %s"), filename); From c553c7f368b5fc80455c75e9c46386307caa7809 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Fri, 20 Jan 2017 16:20:45 +0100 Subject: [PATCH 3/4] M702: Unload filament; load filament fast sequence length: 65mm --- Firmware/Marlin_main.cpp | 18 +++++++++++++++--- Firmware/language_en.h | 1 + Firmware/ultralcd.cpp | 7 +++---- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 9e52f124d..4d666109b 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -5068,10 +5068,9 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp enable_z(); custom_message = true; custom_message_type = 2; - axis_relative_modes[3] = true; - + lcd_setstatuspgm(MSG_LOADING_FILAMENT); - current_position[E_AXIS] += 70; + current_position[E_AXIS] += 65; plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400 / 60, active_extruder); //fast sequence current_position[E_AXIS] += 40; @@ -5099,6 +5098,19 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp custom_message_type = 0; } break; + case 702: + { + /*custom_message = true; + custom_message_type = 2; + lcd_setstatuspgm(MSG_UNLOADING_FILAMENT); //need to be tranlated to other languages + */ + 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); + /*custom_message = false; + custom_message_type = 0; + */ + } + break; case 999: // M999: Restart after being stopped Stopped = false; diff --git a/Firmware/language_en.h b/Firmware/language_en.h index 69f85b6ff..12fd99b15 100644 --- a/Firmware/language_en.h +++ b/Firmware/language_en.h @@ -250,6 +250,7 @@ #define(length=20, lines=8) MSG_CLEAN_NOZZLE_E "E calibration finished. Please clean the nozzle. Click when done." #define(length=20, lines=3) MSG_WAITING_TEMP "Waiting for heater and bed cooling" #define(length=20, lines=2) MSG_FILAMENT_CLEAN "Is color clear?" +//#define(lenght=20, lines=1) MSG_UNLOADING_FILAMENT "Unloading filament" #define MSG_BED_CORRECTION_MENU "Bed level correct" #define MSG_BED_CORRECTION_LEFT "Left side um" diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 22eeae7b7..431343d5a 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -859,9 +859,8 @@ void lcd_unLoadFilament() { if (degHotend0() > EXTRUDE_MINTEMP) { - - enquecommand_P(PSTR(UNLOAD_FILAMENT_0)); - enquecommand_P(PSTR(UNLOAD_FILAMENT_1)); + + enquecommand_P(PSTR("M702")); //unload filament } else { @@ -1070,7 +1069,7 @@ void lcd_LoadFilament() { custom_message = true; loading_flag = true; - enquecommand_P(PSTR("M701")); + enquecommand_P(PSTR("M701")); //load filament SERIAL_ECHOLN("Loading filament"); } else From cc30f910eba71efc522f72d03c8249d2ca86d934 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 25 Jan 2017 18:54:54 +0100 Subject: [PATCH 4/4] Messages in Italian language corrected; added message when unloading filament; "yes", color is clear is default when loading filament --- Firmware/ConfigurationStore.cpp | 4 +- Firmware/Marlin_main.cpp | 16 ++--- Firmware/language_all.cpp | 44 ++++++++----- Firmware/language_all.h | 2 + Firmware/language_cz.h | 7 ++- Firmware/language_en.h | 4 +- Firmware/language_es.h | 3 +- Firmware/language_it.h | 23 +++---- Firmware/language_pl.h | 3 +- Firmware/ultralcd.cpp | 107 ++++++++++++++++++-------------- Firmware/ultralcd.h | 2 +- 11 files changed, 124 insertions(+), 91 deletions(-) diff --git a/Firmware/ConfigurationStore.cpp b/Firmware/ConfigurationStore.cpp index 7535d77c8..7c900bd45 100644 --- a/Firmware/ConfigurationStore.cpp +++ b/Firmware/ConfigurationStore.cpp @@ -275,8 +275,8 @@ void Config_RetrieveSettings() EEPROM_READ_VAR(i,minsegmenttime); EEPROM_READ_VAR(i,max_jerk[X_AXIS]); EEPROM_READ_VAR(i,max_jerk[Y_AXIS]); - EEPROM_READ_VAR(i,max_jerk[Z_AXIS]); - EEPROM_READ_VAR(i,max_jerk[E_AXIS]); + EEPROM_READ_VAR(i,max_jerk[Z_AXIS]); + EEPROM_READ_VAR(i,max_jerk[E_AXIS]); EEPROM_READ_VAR(i,add_homing); #ifndef ULTIPANEL int plaPreheatHotendTemp, plaPreheatHPBTemp, plaPreheatFanSpeed; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 4d666109b..fde5e6392 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -5078,7 +5078,7 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp st_synchronize(); if (!farm_mode && loading_flag) { - bool clean = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_FILAMENT_CLEAN); + bool clean = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_FILAMENT_CLEAN, false, true); while (!clean) { lcd_update_enable(true); @@ -5086,7 +5086,7 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp current_position[E_AXIS] += 40; plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 100 / 60, active_extruder); //slow sequence st_synchronize(); - clean = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_FILAMENT_CLEAN); + clean = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_FILAMENT_CLEAN, false, true); } } lcd_update_enable(true); @@ -5100,15 +5100,17 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp break; case 702: { - /*custom_message = true; + custom_message = true; custom_message_type = 2; - lcd_setstatuspgm(MSG_UNLOADING_FILAMENT); //need to be tranlated to other languages - */ + lcd_setstatuspgm(MSG_UNLOADING_FILAMENT); //need to be tranlated to spanish language + 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); - /*custom_message = false; + st_synchronize(); + lcd_setstatuspgm(WELCOME_MSG); + custom_message = false; custom_message_type = 0; - */ + } break; diff --git a/Firmware/language_all.cpp b/Firmware/language_all.cpp index 3f1c5b5fe..e94a3dd31 100644 --- a/Firmware/language_all.cpp +++ b/Firmware/language_all.cpp @@ -197,7 +197,7 @@ const char * const MSG_BED_DONE_LANG_TABLE[LANG_NUM] PROGMEM = { const char MSG_BED_HEATING_EN[] PROGMEM = "Bed Heating"; const char MSG_BED_HEATING_CZ[] PROGMEM = "Zahrivani bed"; -const char MSG_BED_HEATING_IT[] PROGMEM = "Piatto riscaldam."; +const char MSG_BED_HEATING_IT[] PROGMEM = "Riscald. letto"; const char MSG_BED_HEATING_ES[] PROGMEM = "Base Calentando"; const char MSG_BED_HEATING_PL[] PROGMEM = "Grzanie stolika.."; const char * const MSG_BED_HEATING_LANG_TABLE[LANG_NUM] PROGMEM = { @@ -465,7 +465,7 @@ const char * const MSG_CHANGE_EXTR_LANG_TABLE[LANG_NUM] PROGMEM = { const char MSG_CHANGE_SUCCESS_EN[] PROGMEM = "Change success!"; const char MSG_CHANGE_SUCCESS_CZ[] PROGMEM = "Zmena uspesna!"; -const char MSG_CHANGE_SUCCESS_IT[] PROGMEM = "Cambia. riuscito!"; +const char MSG_CHANGE_SUCCESS_IT[] PROGMEM = "Cambio riuscito!"; const char MSG_CHANGE_SUCCESS_ES[] PROGMEM = "Cambiar bien!"; const char MSG_CHANGE_SUCCESS_PL[] PROGMEM = "Wymiana ok!"; const char * const MSG_CHANGE_SUCCESS_LANG_TABLE[LANG_NUM] PROGMEM = { @@ -478,7 +478,7 @@ const char * const MSG_CHANGE_SUCCESS_LANG_TABLE[LANG_NUM] PROGMEM = { const char MSG_CHANGING_FILAMENT_EN[] PROGMEM = "Changing filament!"; const char MSG_CHANGING_FILAMENT_CZ[] PROGMEM = "Vymena filamentu!"; -const char MSG_CHANGING_FILAMENT_IT[] PROGMEM = "Mutevole fil.!"; +const char MSG_CHANGING_FILAMENT_IT[] PROGMEM = "Cambiando filam."; const char MSG_CHANGING_FILAMENT_ES[] PROGMEM = "Cambiando fil.!"; const char MSG_CHANGING_FILAMENT_PL[] PROGMEM = "Wymiana filamentu"; const char * const MSG_CHANGING_FILAMENT_LANG_TABLE[LANG_NUM] PROGMEM = { @@ -633,11 +633,12 @@ const char * const MSG_END_FILE_LIST_LANG_TABLE[1] PROGMEM = { const char MSG_ERROR_EN[] PROGMEM = "ERROR:"; const char MSG_ERROR_CZ[] PROGMEM = "CHYBA:"; +const char MSG_ERROR_IT[] PROGMEM = "ERRORE:"; const char MSG_ERROR_PL[] PROGMEM = "BLAD:"; const char * const MSG_ERROR_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_ERROR_EN, MSG_ERROR_CZ, - MSG_ERROR_EN, + MSG_ERROR_IT, MSG_ERROR_EN, MSG_ERROR_PL }; @@ -947,7 +948,7 @@ const char * const MSG_HEATING_LANG_TABLE[LANG_NUM] PROGMEM = { const char MSG_HEATING_COMPLETE_EN[] PROGMEM = "Heating done."; const char MSG_HEATING_COMPLETE_CZ[] PROGMEM = "Zahrivani OK."; -const char MSG_HEATING_COMPLETE_IT[] PROGMEM = "Riscaldamento fatto."; +const char MSG_HEATING_COMPLETE_IT[] PROGMEM = "Riscald. completo"; const char MSG_HEATING_COMPLETE_ES[] PROGMEM = "Calentando listo."; const char MSG_HEATING_COMPLETE_PL[] PROGMEM = "Grzanie OK."; const char * const MSG_HEATING_COMPLETE_LANG_TABLE[LANG_NUM] PROGMEM = { @@ -1090,7 +1091,7 @@ const char * const MSG_LANGUAGE_SELECT_LANG_TABLE[LANG_NUM] PROGMEM = { const char MSG_LOADING_COLOR_EN[] PROGMEM = "Loading color"; const char MSG_LOADING_COLOR_CZ[] PROGMEM = "Cisteni barvy"; -const char MSG_LOADING_COLOR_IT[] PROGMEM = "Cargando color"; +const char MSG_LOADING_COLOR_IT[] PROGMEM = "Caricando colore"; const char MSG_LOADING_COLOR_ES[] PROGMEM = "Cargando color"; const char MSG_LOADING_COLOR_PL[] PROGMEM = "Czyszcz. koloru"; const char * const MSG_LOADING_COLOR_LANG_TABLE[LANG_NUM] PROGMEM = { @@ -1103,7 +1104,7 @@ const char * const MSG_LOADING_COLOR_LANG_TABLE[LANG_NUM] PROGMEM = { const char MSG_LOADING_FILAMENT_EN[] PROGMEM = "Loading filament"; const char MSG_LOADING_FILAMENT_CZ[] PROGMEM = "Zavadeni filamentu"; -const char MSG_LOADING_FILAMENT_IT[] PROGMEM = "Cargando fil."; +const char MSG_LOADING_FILAMENT_IT[] PROGMEM = "Caricando filam."; const char MSG_LOADING_FILAMENT_ES[] PROGMEM = "Cargando fil."; const char MSG_LOADING_FILAMENT_PL[] PROGMEM = "Wprow. filamentu"; const char * const MSG_LOADING_FILAMENT_LANG_TABLE[LANG_NUM] PROGMEM = { @@ -1199,7 +1200,7 @@ const char * const MSG_MAIN_LANG_TABLE[LANG_NUM] PROGMEM = { }; const char MSG_MARK_FIL_EN[] PROGMEM = "Mark filament 100mm from extruder body. Click when done."; -const char MSG_MARK_FIL_CZ[] PROGMEM = "Oznacte filament 100 mm od tela extruderu. Potvrdte tlacitkem."; +const char MSG_MARK_FIL_CZ[] PROGMEM = "Oznacte filament 100 mm od tela extruderu a po te potvrdte tlacitkem."; const char MSG_MARK_FIL_IT[] PROGMEM = "Segnare il filamento a 100 mm di distanza dal corpo dell'estrusore. Click per continuare."; const char MSG_MARK_FIL_ES[] PROGMEM = "Marque el filamento 100 mm por encima del final del extrusor. Hacer clic una vez terminado."; const char MSG_MARK_FIL_PL[] PROGMEM = "Prosze oznaczyc filament 100 mm od ciala ekstrudera. Potwierdzic przyciskiem."; @@ -1418,7 +1419,7 @@ const char * const MSG_NO_LANG_TABLE[LANG_NUM] PROGMEM = { const char MSG_NOT_COLOR_EN[] PROGMEM = "Color not clear"; const char MSG_NOT_COLOR_CZ[] PROGMEM = "Barva neni cista"; -const char MSG_NOT_COLOR_IT[] PROGMEM = "Color no claro"; +const char MSG_NOT_COLOR_IT[] PROGMEM = "Colore non puro"; const char MSG_NOT_COLOR_ES[] PROGMEM = "Color no claro"; const char MSG_NOT_COLOR_PL[] PROGMEM = "Kolor zanieczysz."; const char * const MSG_NOT_COLOR_LANG_TABLE[LANG_NUM] PROGMEM = { @@ -1431,7 +1432,7 @@ const char * const MSG_NOT_COLOR_LANG_TABLE[LANG_NUM] PROGMEM = { const char MSG_NOT_LOADED_EN[] PROGMEM = "Filament not loaded"; const char MSG_NOT_LOADED_CZ[] PROGMEM = "Filament nezaveden"; -const char MSG_NOT_LOADED_IT[] PROGMEM = "Fil. no cargado"; +const char MSG_NOT_LOADED_IT[] PROGMEM = "Fil. non caricato"; const char MSG_NOT_LOADED_ES[] PROGMEM = "Fil. no cargado"; const char MSG_NOT_LOADED_PL[] PROGMEM = "Brak filamentu"; const char * const MSG_NOT_LOADED_LANG_TABLE[LANG_NUM] PROGMEM = { @@ -1583,10 +1584,10 @@ const char * const MSG_PREHEAT_NOZZLE_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_PREHEAT_NOZZLE_PL }; -const char MSG_PRESS_EN[] PROGMEM = "And press the knob"; -const char MSG_PRESS_CZ[] PROGMEM = "A stisknete tlacitko"; -const char MSG_PRESS_IT[] PROGMEM = "Y pulse el mando"; -const char MSG_PRESS_ES[] PROGMEM = "Y pulse el mando"; +const char MSG_PRESS_EN[] PROGMEM = "and press the knob"; +const char MSG_PRESS_CZ[] PROGMEM = "a stisknete tlacitko"; +const char MSG_PRESS_IT[] PROGMEM = "e cliccare manopola"; +const char MSG_PRESS_ES[] PROGMEM = "y pulse el mando"; const char MSG_PRESS_PL[] PROGMEM = "Nacisnij przycisk"; const char * const MSG_PRESS_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_PRESS_EN, @@ -2161,7 +2162,7 @@ const char * const MSG_SHOW_END_STOPS_LANG_TABLE[LANG_NUM] PROGMEM = { const char MSG_SILENT_MODE_OFF_EN[] PROGMEM = "Mode [high power]"; const char MSG_SILENT_MODE_OFF_CZ[] PROGMEM = "Mod [vys. vykon]"; -const char MSG_SILENT_MODE_OFF_IT[] PROGMEM = "Mode [prestante]"; +const char MSG_SILENT_MODE_OFF_IT[] PROGMEM = "Mode [forte]"; const char MSG_SILENT_MODE_OFF_ES[] PROGMEM = "Modo [mas fuerza]"; const char MSG_SILENT_MODE_OFF_PL[] PROGMEM = "Mod [w wydajnosc]"; const char * const MSG_SILENT_MODE_OFF_LANG_TABLE[LANG_NUM] PROGMEM = { @@ -2404,6 +2405,19 @@ const char * const MSG_UNKNOWN_COMMAND_LANG_TABLE[1] PROGMEM = { MSG_UNKNOWN_COMMAND_EN }; +const char MSG_UNLOADING_FILAMENT_EN[] PROGMEM = "Unloading filament"; +const char MSG_UNLOADING_FILAMENT_CZ[] PROGMEM = "Vysouvam filament"; +const char MSG_UNLOADING_FILAMENT_IT[] PROGMEM = "Rilasc. filamento"; +const char MSG_UNLOADING_FILAMENT_ES[] PROGMEM = "Soltando filamento"; +const char MSG_UNLOADING_FILAMENT_PL[] PROGMEM = "Wysuwam filament"; +const char * const MSG_UNLOADING_FILAMENT_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_UNLOADING_FILAMENT_EN, + MSG_UNLOADING_FILAMENT_CZ, + MSG_UNLOADING_FILAMENT_IT, + MSG_UNLOADING_FILAMENT_ES, + MSG_UNLOADING_FILAMENT_PL +}; + const char MSG_UNLOAD_FILAMENT_EN[] PROGMEM = "Unload filament"; const char MSG_UNLOAD_FILAMENT_CZ[] PROGMEM = "Vyjmout filament"; const char MSG_UNLOAD_FILAMENT_IT[] PROGMEM = "Scarica filamento"; diff --git a/Firmware/language_all.h b/Firmware/language_all.h index c09f63953..cae53a987 100644 --- a/Firmware/language_all.h +++ b/Firmware/language_all.h @@ -518,6 +518,8 @@ extern const char* const MSG_TUNE_LANG_TABLE[LANG_NUM]; #define MSG_TUNE LANG_TABLE_SELECT(MSG_TUNE_LANG_TABLE) extern const char* const MSG_UNKNOWN_COMMAND_LANG_TABLE[1]; #define MSG_UNKNOWN_COMMAND LANG_TABLE_SELECT_EXPLICIT(MSG_UNKNOWN_COMMAND_LANG_TABLE, 0) +extern const char* const MSG_UNLOADING_FILAMENT_LANG_TABLE[LANG_NUM]; +#define MSG_UNLOADING_FILAMENT LANG_TABLE_SELECT(MSG_UNLOADING_FILAMENT_LANG_TABLE) extern const char* const MSG_UNLOAD_FILAMENT_LANG_TABLE[LANG_NUM]; #define MSG_UNLOAD_FILAMENT LANG_TABLE_SELECT(MSG_UNLOAD_FILAMENT_LANG_TABLE) extern const char* const MSG_USB_PRINTING_LANG_TABLE[LANG_NUM]; diff --git a/Firmware/language_cz.h b/Firmware/language_cz.h index f9f7cca57..4759b1725 100644 --- a/Firmware/language_cz.h +++ b/Firmware/language_cz.h @@ -88,7 +88,7 @@ #define MSG_PLEASE_WAIT "Prosim cekejte" #define MSG_LOADING_COLOR "Cisteni barvy" #define MSG_CHANGE_SUCCESS "Zmena uspesna!" -#define MSG_PRESS "A stisknete tlacitko" +#define MSG_PRESS "a stisknete tlacitko" #define MSG_INSERT_FILAMENT "Vlozte filament" #define MSG_CHANGING_FILAMENT "Vymena filamentu!" @@ -258,7 +258,8 @@ #define MSG_CONFIRM_NOZZLE_CLEAN_FIL_ADJ "Filamenty jsou srovnany. Pro uspesnou kalibraci prosim ocistete trysku. Po te potvrdte tlacitkem." #define MSG_CALIBRATE_E "Kalibrovat E" #define MSG_E_CAL_KNOB "Otacejte tlacitkem dokud znacka nedosahne tela extruderu. Potvrdte tlacitkem." -#define MSG_MARK_FIL "Oznacte filament 100 mm od tela extruderu. Potvrdte tlacitkem." +#define MSG_MARK_FIL "Oznacte filament 100 mm od tela extruderu a po te potvrdte tlacitkem." #define MSG_CLEAN_NOZZLE_E "E kalibrace ukoncena. Prosim ocistete trysku. Po te potvrdte tlacitkem." #define MSG_WAITING_TEMP "Cekani na zchladnuti trysky a podlozky." -#define MSG_FILAMENT_CLEAN "Je barva cista?" \ No newline at end of file +#define MSG_FILAMENT_CLEAN "Je barva cista?" +#define MSG_UNLOADING_FILAMENT "Vysouvam filament" \ No newline at end of file diff --git a/Firmware/language_en.h b/Firmware/language_en.h index 12fd99b15..3d1649fa2 100644 --- a/Firmware/language_en.h +++ b/Firmware/language_en.h @@ -85,7 +85,7 @@ #define(length=20) MSG_PLEASE_WAIT "Please wait" #define MSG_LOADING_COLOR "Loading color" #define MSG_CHANGE_SUCCESS "Change success!" -#define(length=20) MSG_PRESS "And press the knob" +#define(length=20) MSG_PRESS "and press the knob" #define(length=20) MSG_INSERT_FILAMENT "Insert filament" #define(length=20) MSG_CHANGING_FILAMENT "Changing filament!" @@ -250,7 +250,7 @@ #define(length=20, lines=8) MSG_CLEAN_NOZZLE_E "E calibration finished. Please clean the nozzle. Click when done." #define(length=20, lines=3) MSG_WAITING_TEMP "Waiting for heater and bed cooling" #define(length=20, lines=2) MSG_FILAMENT_CLEAN "Is color clear?" -//#define(lenght=20, lines=1) MSG_UNLOADING_FILAMENT "Unloading filament" +#define(lenght=20, lines=1) MSG_UNLOADING_FILAMENT "Unloading filament" #define MSG_BED_CORRECTION_MENU "Bed level correct" #define MSG_BED_CORRECTION_LEFT "Left side um" diff --git a/Firmware/language_es.h b/Firmware/language_es.h index 61085bbff..cd593172d 100644 --- a/Firmware/language_es.h +++ b/Firmware/language_es.h @@ -59,7 +59,7 @@ #define MSG_PLEASE_WAIT "Espera" #define MSG_LOADING_COLOR "Cargando color" #define MSG_CHANGE_SUCCESS "Cambiar bien!" -#define MSG_PRESS "Y pulse el mando" +#define MSG_PRESS "y pulse el mando" #define MSG_INSERT_FILAMENT "Inserta filamento" #define MSG_CHANGING_FILAMENT "Cambiando fil.!" #define MSG_SILENT_MODE_ON "Modo [silencio]" @@ -252,3 +252,4 @@ #define MSG_CLEAN_NOZZLE_E "E calibrado. Limpiar la boquilla. Haga clic una vez terminado." #define MSG_WAITING_TEMP "Esperando enfriamiento de la cama y del extrusor." #define MSG_FILAMENT_CLEAN "Es el nuevo color nitido?" +#define MSG_UNLOADING_FILAMENT "Soltando filamento" \ No newline at end of file diff --git a/Firmware/language_it.h b/Firmware/language_it.h index 9e3e9c92d..7940819c5 100644 --- a/Firmware/language_it.h +++ b/Firmware/language_it.h @@ -64,27 +64,27 @@ #define MSG_SUPPORT "Support" #define MSG_YES "Si" #define MSG_NO "No" -#define MSG_NOT_LOADED "Fil. no cargado" -#define MSG_NOT_COLOR "Color no claro" -#define MSG_LOADING_COLOR "Cargando color" -#define MSG_CHANGE_SUCCESS "Cambia. riuscito!" -#define MSG_PRESS "Y pulse el mando" +#define MSG_NOT_LOADED "Fil. non caricato" +#define MSG_NOT_COLOR "Colore non puro" +#define MSG_LOADING_COLOR "Caricando colore" +#define MSG_CHANGE_SUCCESS "Cambio riuscito!" +#define MSG_PRESS "e cliccare manopola" #define MSG_INSERT_FILAMENT "Inserire filamento" -#define MSG_CHANGING_FILAMENT "Mutevole fil.!" +#define MSG_CHANGING_FILAMENT "Cambiando filam." #define MSG_PLEASE_WAIT "Aspetta" #define MSG_PREHEAT_NOZZLE "Preris. ugello!" -#define MSG_HEATING_COMPLETE "Riscaldamento fatto." -#define MSG_BED_HEATING "Piatto riscaldam." +#define MSG_HEATING_COMPLETE "Riscald. completo" +#define MSG_BED_HEATING "Riscald. letto" #define MSG_BED_DONE "Piatto fatto." -#define MSG_ERROR "ERROR:" +#define MSG_ERROR "ERRORE:" #define MSG_CORRECTLY "Cambiato corr.?" -#define MSG_LOADING_FILAMENT "Cargando fil." +#define MSG_LOADING_FILAMENT "Caricando filam." #define MSG_UNLOAD_FILAMENT "Scarica filamento" #define MSG_LOAD_FILAMENT "Carica filamento" #define MSG_SILENT_MODE_ON "Modo [silenzioso]" -#define MSG_SILENT_MODE_OFF "Mode [prestante]" +#define MSG_SILENT_MODE_OFF "Mode [forte]" #define MSG_REBOOT "Riavvia stampante" #define MSG_TAKE_EFFECT " per attualizzare" @@ -247,3 +247,4 @@ #define MSG_CLEAN_NOZZLE_E "Calibrazione E terminata. Si prega di pulire l'ugello. Click per continuare." #define MSG_WAITING_TEMP "In attesa del raffreddamento della testina e del piatto." #define MSG_FILAMENT_CLEAN "Il colore e' nitido?" +#define MSG_UNLOADING_FILAMENT "Rilasc. filamento" \ No newline at end of file diff --git a/Firmware/language_pl.h b/Firmware/language_pl.h index c471c0761..24476d455 100644 --- a/Firmware/language_pl.h +++ b/Firmware/language_pl.h @@ -257,4 +257,5 @@ #define MSG_MARK_FIL "Prosze oznaczyc filament 100 mm od ciala ekstrudera. Potwierdzic przyciskiem." #define MSG_CLEAN_NOZZLE_E "Kalibracja E skonczona. Prosze oczyscic dysze. Potem potwierdzic przyciskiem. " #define MSG_WAITING_TEMP "Oczekiwanie na wychlodzenie dyszy i podkladki." -#define MSG_FILAMENT_CLEAN "Czy kolor jest czysty?" \ No newline at end of file +#define MSG_FILAMENT_CLEAN "Czy kolor jest czysty?" +#define MSG_UNLOADING_FILAMENT "Wysuwam filament" \ No newline at end of file diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 431343d5a..9f0458123 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -1712,49 +1712,58 @@ void lcd_wait_for_click() } } -int8_t lcd_show_fullscreen_message_yes_no_and_wait_P(const char *msg, bool allow_timeouting) +int8_t lcd_show_fullscreen_message_yes_no_and_wait_P(const char *msg, bool allow_timeouting, bool default_yes) { - lcd_display_message_fullscreen_P(msg); - lcd.setCursor(1, 2); - lcd_printPGM(MSG_YES); - lcd.setCursor(0, 3); - lcd_printPGM(PSTR(">")); - lcd_printPGM(MSG_NO); - bool yes = false; + lcd_display_message_fullscreen_P(msg); + + if (default_yes) { + lcd.setCursor(0, 2); + lcd_printPGM(PSTR(">")); + lcd_printPGM(MSG_YES); + lcd.setCursor(1, 3); + lcd_printPGM(MSG_NO); + } + else { + lcd.setCursor(1, 2); + lcd_printPGM(MSG_YES); + lcd.setCursor(0, 3); + lcd_printPGM(PSTR(">")); + lcd_printPGM(MSG_NO); + } + bool yes = default_yes ? true : false; - // Wait for user confirmation or a timeout. - unsigned long previous_millis_cmd = millis(); - int8_t enc_dif = encoderDiff; - for (;;) { - if (allow_timeouting && millis() - previous_millis_cmd > LCD_TIMEOUT_TO_STATUS) - return -1; - manage_heater(); - manage_inactivity(true); - if (abs((enc_dif - encoderDiff)) > 4) { - if (abs(enc_dif - encoderDiff) > 1) { - lcd.setCursor(0, 2); - if (enc_dif > encoderDiff && yes) { - lcd_printPGM((PSTR(" "))); - lcd.setCursor(0, 3); - lcd_printPGM((PSTR(">"))); - yes = false; - } else if (enc_dif < encoderDiff && ! yes) { - lcd_printPGM((PSTR(">"))); - lcd.setCursor(0, 3); - lcd_printPGM((PSTR(" "))); - yes = true; - } - enc_dif = encoderDiff; - } - } - if (lcd_clicked()) { - while (lcd_clicked()) ; - delay(10); - while (lcd_clicked()) ; - return yes; - } - } + // Wait for user confirmation or a timeout. + unsigned long previous_millis_cmd = millis(); + int8_t enc_dif = encoderDiff; + for (;;) { + if (allow_timeouting && millis() - previous_millis_cmd > LCD_TIMEOUT_TO_STATUS) + return -1; + manage_heater(); + manage_inactivity(true); + if (abs(enc_dif - encoderDiff) > 4) { + lcd.setCursor(0, 2); + if (enc_dif > encoderDiff && yes) { + lcd_printPGM((PSTR(" "))); + lcd.setCursor(0, 3); + lcd_printPGM((PSTR(">"))); + yes = false; + } + else if (enc_dif < encoderDiff && !yes) { + lcd_printPGM((PSTR(">"))); + lcd.setCursor(0, 3); + lcd_printPGM((PSTR(" "))); + yes = true; + } + enc_dif = encoderDiff; + } + if (lcd_clicked()) { + while (lcd_clicked()); + delay(10); + while (lcd_clicked()); + return yes; + } + } } void lcd_bed_calibration_show_result(BedSkewOffsetDetectionResultType result, uint8_t point_too_far_mask) @@ -2209,14 +2218,15 @@ void lcd_mesh_calibration_z() void lcd_calibrate_extruder() { if (degHotend0() > EXTRUDE_MINTEMP) { - current_position[E_AXIS] = 0; + current_position[E_AXIS] = 0; //set initial position to zero plan_set_e_position(current_position[E_AXIS]); - - long steps_start = current_position[E_AXIS]*axis_steps_per_unit[E_AXIS]; + + //long steps_start = st_get_position(E_AXIS); + long steps_final; float e_steps_per_unit; - float feedrate = (180 / axis_steps_per_unit[E_AXIS]) * 5; - float e_shift_calibration = (axis_steps_per_unit[E_AXIS] > 180 ) ? ((180 / axis_steps_per_unit[E_AXIS]) * 70): 70; + float feedrate = (180 / axis_steps_per_unit[E_AXIS]) * 3; //initial automatic extrusion feedrate (depends on current value of axis_steps_per_unit to avoid too fast extrusion) + float e_shift_calibration = (axis_steps_per_unit[E_AXIS] > 180 ) ? ((180 / axis_steps_per_unit[E_AXIS]) * 70): 70; //length of initial automatic extrusion sequence const char *msg_e_cal_knob = MSG_E_CAL_KNOB; const char *msg_next_e_cal_knob = lcd_display_message_fullscreen_P(msg_e_cal_knob); const bool multi_screen = msg_next_e_cal_knob != NULL; @@ -2243,7 +2253,7 @@ void lcd_calibrate_extruder() { //manage_inactivity(true); manage_heater(); - if (abs(encoderDiff) >= ENCODER_PULSES_PER_STEP) { + if (abs(encoderDiff) >= ENCODER_PULSES_PER_STEP) { //adjusting mark by knob rotation delay_keep_alive(50); //previous_millis_cmd = millis(); encoderPosition += (encoderDiff / ENCODER_PULSES_PER_STEP); @@ -2258,9 +2268,10 @@ void lcd_calibrate_extruder() { } steps_final = current_position[E_AXIS] * axis_steps_per_unit[E_AXIS]; + //steps_final = st_get_position(E_AXIS); lcdDrawUpdate = 1; - e_steps_per_unit = ((float)(steps_final - steps_start)) / 100.f; - if (e_steps_per_unit < MIN_E_STEPS_PER_UNIT) e_steps_per_unit = MIN_E_STEPS_PER_UNIT; + e_steps_per_unit = ((float)(steps_final)) / 100.0f; + if (e_steps_per_unit < MIN_E_STEPS_PER_UNIT) e_steps_per_unit = MIN_E_STEPS_PER_UNIT; if (e_steps_per_unit > MAX_E_STEPS_PER_UNIT) e_steps_per_unit = MAX_E_STEPS_PER_UNIT; lcd_implementation_clear(); diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index 02b40e77a..e2396a353 100644 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -49,7 +49,7 @@ void lcd_mylang(); extern void lcd_wait_for_click(); extern void lcd_show_fullscreen_message_and_wait_P(const char *msg); // 0: no, 1: yes, -1: timeouted - extern int8_t lcd_show_fullscreen_message_yes_no_and_wait_P(const char *msg, bool allow_timeouting = true); + extern int8_t lcd_show_fullscreen_message_yes_no_and_wait_P(const char *msg, bool allow_timeouting = true, bool default_yes = false); // Ask the user to move the Z axis up to the end stoppers and let // the user confirm that it has been done.