Browse Source

Merge branch 'MK3' into MK3_BED_LEVELING_PWM

Alex Voinea 5 years ago
parent
commit
e559a6b67f

+ 14 - 0
.editorconfig

@@ -0,0 +1,14 @@
+#-*-mode:conf-*-
+# editorconfig file (see EditorConfig.org)
+
+root                        = true
+
+[*]
+end_of_line                 = lf
+insert_final_newline        = true
+charset                     = utf-8
+trim_trailing_whitespace    = true
+indent_style                = space
+indent_size                 = 4
+tab_width                   = 4
+max_line_length             = 100

+ 9 - 3
Firmware/Configuration.h

@@ -16,8 +16,8 @@ extern uint16_t nPrinterType;
 extern PGM_P sPrinterName;
 extern PGM_P sPrinterName;
 
 
 // Firmware version
 // Firmware version
-#define FW_VERSION "3.8.1-RC1"
-#define FW_COMMIT_NR   2851
+#define FW_VERSION "3.8.1"
+#define FW_COMMIT_NR   2869
 // FW_VERSION_UNKNOWN means this is an unofficial build.
 // FW_VERSION_UNKNOWN means this is an unofficial build.
 // The firmware should only be checked into github with this symbol.
 // The firmware should only be checked into github with this symbol.
 #define FW_DEV_VERSION FW_VERSION_UNKNOWN
 #define FW_DEV_VERSION FW_VERSION_UNKNOWN
@@ -345,7 +345,7 @@ your extruder heater takes 2 minutes to hit the target on heating.
   #define Y_PROBE_OFFSET_FROM_EXTRUDER -29
   #define Y_PROBE_OFFSET_FROM_EXTRUDER -29
   #define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35
   #define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35
 
 
-  #define Z_RAISE_BEFORE_HOMING 4       // (in mm) Raise Z before homing (G28) for Probe Clearance.
+  #define Z_RAISE_BEFORE_HOMING 5       // (in mm) Raise Z before homing (G28) for Probe Clearance.
                                         // Be sure you have this distance over your Z_MAX_POS in case
                                         // Be sure you have this distance over your Z_MAX_POS in case
 
 
   #define XY_TRAVEL_SPEED 8000         // X and Y axis travel speed between probes, in mm/min
   #define XY_TRAVEL_SPEED 8000         // X and Y axis travel speed between probes, in mm/min
@@ -549,6 +549,12 @@ enum CalibrationStatus
     CALIBRATION_STATUS_UNKNOWN = 0,
     CALIBRATION_STATUS_UNKNOWN = 0,
 };
 };
 
 
+// Try to maintain a minimum distance from the bed even when Z is
+// unknown when doing the following operations
+#define MIN_Z_FOR_LOAD    50
+#define MIN_Z_FOR_UNLOAD  20
+#define MIN_Z_FOR_PREHEAT 10
+
 #include "Configuration_adv.h"
 #include "Configuration_adv.h"
 #include "thermistortables.h"
 #include "thermistortables.h"
 
 

+ 3 - 4
Firmware/Marlin.h

@@ -358,9 +358,6 @@ extern int fan_speed[2];
 // Handling multiple extruders pins
 // Handling multiple extruders pins
 extern uint8_t active_extruder;
 extern uint8_t active_extruder;
 
 
-
-#endif
-
 //Long pause
 //Long pause
 extern unsigned long pause_time;
 extern unsigned long pause_time;
 extern unsigned long start_pause_print;
 extern unsigned long start_pause_print;
@@ -513,4 +510,6 @@ void M600_wait_for_user(float HotendTempBckp);
 void M600_check_state(float nozzle_temp);
 void M600_check_state(float nozzle_temp);
 void load_filament_final_feed();
 void load_filament_final_feed();
 void marlin_wait_for_click();
 void marlin_wait_for_click();
-void marlin_rise_z(void);
+void raise_z_above(float target, bool plan=true);
+
+#endif

+ 84 - 46
Firmware/Marlin_main.cpp

@@ -1242,8 +1242,8 @@ void setup()
         // Once a firmware boots up, it forces at least a language selection, which changes
         // Once a firmware boots up, it forces at least a language selection, which changes
         // EEPROM_LANG to number lower than 0x0ff.
         // EEPROM_LANG to number lower than 0x0ff.
         // 1) Set a high power mode.
         // 1) Set a high power mode.
+	    eeprom_update_byte((uint8_t*)EEPROM_SILENT, SILENT_MODE_OFF);
 #ifdef TMC2130
 #ifdef TMC2130
-        eeprom_write_byte((uint8_t*)EEPROM_SILENT, 0);
         tmc2130_mode = TMC2130_MODE_NORMAL;
         tmc2130_mode = TMC2130_MODE_NORMAL;
 #endif //TMC2130
 #endif //TMC2130
         eeprom_write_byte((uint8_t*)EEPROM_WIZARD_ACTIVE, 1); //run wizard
         eeprom_write_byte((uint8_t*)EEPROM_WIZARD_ACTIVE, 1); //run wizard
@@ -2104,6 +2104,52 @@ bool check_commands() {
 	
 	
 }
 }
 
 
+
+// raise_z_above: slowly raise Z to the requested height
+//
+// contrarily to a simple move, this function will carefully plan a move
+// when the current Z position is unknown. In such cases, stallguard is
+// enabled and will prevent prolonged pushing against the Z tops
+void raise_z_above(float target, bool plan)
+{
+    if (current_position[Z_AXIS] >= target)
+        return;
+
+    // Z needs raising
+    current_position[Z_AXIS] = target;
+
+    if (axis_known_position[Z_AXIS])
+    {
+        // current position is known, it's safe to raise Z
+        if(plan) plan_buffer_line_curposXYZE(max_feedrate[Z_AXIS], active_extruder);
+        return;
+    }
+
+    // ensure Z is powered in normal mode to overcome initial load
+    enable_z();
+    st_synchronize();
+
+    // rely on crashguard to limit damage
+    bool z_endstop_enabled = enable_z_endstop(true);
+#ifdef TMC2130
+    tmc2130_home_enter(Z_AXIS_MASK);
+#endif //TMC2130
+    plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 60, active_extruder);
+    st_synchronize();
+#ifdef TMC2130
+    if (endstop_z_hit_on_purpose())
+    {
+        // not necessarily exact, but will avoid further vertical moves
+        current_position[Z_AXIS] = max_pos[Z_AXIS];
+        plan_set_position(current_position[X_AXIS], current_position[Y_AXIS],
+                          current_position[Z_AXIS], current_position[E_AXIS]);
+    }
+    tmc2130_home_exit();
+#endif //TMC2130
+    enable_z_endstop(z_endstop_enabled);
+}
+
+
 #ifdef TMC2130
 #ifdef TMC2130
 bool calibrate_z_auto()
 bool calibrate_z_auto()
 {
 {
@@ -2433,6 +2479,9 @@ void ramming() {
 
 
 #ifdef TMC2130
 #ifdef TMC2130
 void force_high_power_mode(bool start_high_power_section) {
 void force_high_power_mode(bool start_high_power_section) {
+#ifdef PSU_Delta
+	if (start_high_power_section == true) enable_force_z();
+#endif //PSU_Delta
 	uint8_t silent;
 	uint8_t silent;
 	silent = eeprom_read_byte((uint8_t*)EEPROM_SILENT);
 	silent = eeprom_read_byte((uint8_t*)EEPROM_SILENT);
 	if (silent == 1) {
 	if (silent == 1) {
@@ -2481,9 +2530,7 @@ static void gcode_G28(bool home_x_axis, long home_x_value, bool home_y_axis, lon
 
 
 	//if we are homing all axes, first move z higher to protect heatbed/steel sheet
 	//if we are homing all axes, first move z higher to protect heatbed/steel sheet
 	if (home_all_axes) {
 	if (home_all_axes) {
-		current_position[Z_AXIS] += MESH_HOME_Z_SEARCH;
-		feedrate = homing_feedrate[Z_AXIS];
-		plan_buffer_line_curposXYZE(feedrate / 60, active_extruder);
+        raise_z_above(MESH_HOME_Z_SEARCH);
 		st_synchronize();
 		st_synchronize();
 	}
 	}
 #ifdef ENABLE_AUTO_BED_LEVELING
 #ifdef ENABLE_AUTO_BED_LEVELING
@@ -2594,26 +2641,21 @@ static void gcode_G28(bool home_x_axis, long home_x_value, bool home_y_axis, lon
         #ifndef Z_SAFE_HOMING
         #ifndef Z_SAFE_HOMING
           if(home_z) {
           if(home_z) {
             #if defined (Z_RAISE_BEFORE_HOMING) && (Z_RAISE_BEFORE_HOMING > 0)
             #if defined (Z_RAISE_BEFORE_HOMING) && (Z_RAISE_BEFORE_HOMING > 0)
-              destination[Z_AXIS] = Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS) * (-1);    // Set destination away from bed
-              feedrate = max_feedrate[Z_AXIS];
-              plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
+              raise_z_above(Z_RAISE_BEFORE_HOMING);
               st_synchronize();
               st_synchronize();
             #endif // defined (Z_RAISE_BEFORE_HOMING) && (Z_RAISE_BEFORE_HOMING > 0)
             #endif // defined (Z_RAISE_BEFORE_HOMING) && (Z_RAISE_BEFORE_HOMING > 0)
             #if (defined(MESH_BED_LEVELING) && !defined(MK1BP))  // If Mesh bed leveling, move X&Y to safe position for home
             #if (defined(MESH_BED_LEVELING) && !defined(MK1BP))  // If Mesh bed leveling, move X&Y to safe position for home
-      			  if (!(axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] )) 
-      			  {
-                homeaxis(X_AXIS);
-                homeaxis(Y_AXIS);
-      			  } 
+              raise_z_above(MESH_HOME_Z_SEARCH);
+              st_synchronize();
+              if (!axis_known_position[X_AXIS]) homeaxis(X_AXIS);
+              if (!axis_known_position[Y_AXIS]) homeaxis(Y_AXIS);
               // 1st mesh bed leveling measurement point, corrected.
               // 1st mesh bed leveling measurement point, corrected.
               world2machine_initialize();
               world2machine_initialize();
               world2machine(pgm_read_float(bed_ref_points_4), pgm_read_float(bed_ref_points_4+1), destination[X_AXIS], destination[Y_AXIS]);
               world2machine(pgm_read_float(bed_ref_points_4), pgm_read_float(bed_ref_points_4+1), destination[X_AXIS], destination[Y_AXIS]);
               world2machine_reset();
               world2machine_reset();
               if (destination[Y_AXIS] < Y_MIN_POS)
               if (destination[Y_AXIS] < Y_MIN_POS)
                   destination[Y_AXIS] = Y_MIN_POS;
                   destination[Y_AXIS] = Y_MIN_POS;
-              destination[Z_AXIS] = MESH_HOME_Z_SEARCH;    // Set destination away from bed
-              feedrate = homing_feedrate[Z_AXIS]/10;
-              current_position[Z_AXIS] = 0;
+              feedrate = homing_feedrate[X_AXIS] / 20;
               enable_endstops(false);
               enable_endstops(false);
 #ifdef DEBUG_BUILD
 #ifdef DEBUG_BUILD
               SERIAL_ECHOLNPGM("plan_set_position()");
               SERIAL_ECHOLNPGM("plan_set_position()");
@@ -3140,15 +3182,6 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float
     custom_message_type = CustomMsg::Status;
     custom_message_type = CustomMsg::Status;
 }
 }
 
 
-//! @brief Rise Z if too low to avoid blob/jam before filament loading
-//!
-//! It doesn't plan_buffer_line(), as it expects plan_buffer_line() to be called after
-//! during extruding (loading) filament.
-void marlin_rise_z(void)
-{
-    if (current_position[Z_AXIS] < 20) current_position[Z_AXIS] += 30;
-}
-
 void gcode_M701()
 void gcode_M701()
 {
 {
 	printf_P(PSTR("gcode_M701 begin\n"));
 	printf_P(PSTR("gcode_M701 begin\n"));
@@ -3177,7 +3210,7 @@ void gcode_M701()
 		plan_buffer_line_curposXYZE(400 / 60, active_extruder); //fast sequence
 		plan_buffer_line_curposXYZE(400 / 60, active_extruder); //fast sequence
 		st_synchronize();
 		st_synchronize();
 
 
-		marlin_rise_z();
+        raise_z_above(MIN_Z_FOR_LOAD, false);
 		current_position[E_AXIS] += 30;
 		current_position[E_AXIS] += 30;
 		plan_buffer_line_curposXYZE(400 / 60, active_extruder); //fast sequence
 		plan_buffer_line_curposXYZE(400 / 60, active_extruder); //fast sequence
 		
 		
@@ -7604,27 +7637,33 @@ Sigma_Exit:
     case 350: 
     case 350: 
     {
     {
 	#ifdef TMC2130
 	#ifdef TMC2130
-		if(code_seen('E'))
+		for (int i=0; i<NUM_AXIS; i++) 
 		{
 		{
-			uint16_t res_new = code_value();
-			if ((res_new == 8) || (res_new == 16) || (res_new == 32) || (res_new == 64) || (res_new == 128))
+			if(code_seen(axis_codes[i]))
 			{
 			{
-				st_synchronize();
-				uint8_t axis = E_AXIS;
-				uint16_t res = tmc2130_get_res(axis);
-				tmc2130_set_res(axis, res_new);
-				cs.axis_ustep_resolution[axis] = res_new;
-				if (res_new > res)
-				{
-					uint16_t fac = (res_new / res);
-					cs.axis_steps_per_unit[axis] *= fac;
-					position[E_AXIS] *= fac;
-				}
-				else
+				uint16_t res_new = code_value();
+				bool res_valid = (res_new == 8) || (res_new == 16) || (res_new == 32); // resolutions valid for all axis
+				res_valid |= (i != E_AXIS) && ((res_new == 1) || (res_new == 2) || (res_new == 4)); // resolutions valid for X Y Z only
+				res_valid |= (i == E_AXIS) && ((res_new == 64) || (res_new == 128)); // resolutions valid for E only
+				if (res_valid)
 				{
 				{
-					uint16_t fac = (res / res_new);
-					cs.axis_steps_per_unit[axis] /= fac;
-					position[E_AXIS] /= fac;
+					
+					st_synchronize();
+					uint16_t res = tmc2130_get_res(i);
+					tmc2130_set_res(i, res_new);
+					cs.axis_ustep_resolution[i] = res_new;
+					if (res_new > res)
+					{
+						uint16_t fac = (res_new / res);
+						cs.axis_steps_per_unit[i] *= fac;
+						position[i] *= fac;
+					}
+					else
+					{
+						uint16_t fac = (res / res_new);
+						cs.axis_steps_per_unit[i] /= fac;
+						position[i] /= fac;
+					}
 				}
 				}
 			}
 			}
 		}
 		}
@@ -9503,10 +9542,9 @@ void long_pause() //long pause print
 	current_position[Y_AXIS] = Y_PAUSE_POS;
 	current_position[Y_AXIS] = Y_PAUSE_POS;
 	plan_buffer_line_curposXYZE(50, active_extruder);
 	plan_buffer_line_curposXYZE(50, active_extruder);
 
 
-	// Turn off the print fan
+	// Turn off the hotends and print fan
+    setAllTargetHotends(0);
 	fanSpeed = 0;
 	fanSpeed = 0;
-
-	st_synchronize();
 }
 }
 
 
 void serialecho_temperatures() {
 void serialecho_temperatures() {

+ 14 - 14
Firmware/cardreader.cpp

@@ -137,8 +137,8 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m
 						SERIAL_ECHOPGM("Access date: ");
 						SERIAL_ECHOPGM("Access date: ");
 						MYSERIAL.println(p.lastAccessDate);
 						MYSERIAL.println(p.lastAccessDate);
 						SERIAL_ECHOLNPGM("");*/
 						SERIAL_ECHOLNPGM("");*/
-						creationDate = p.creationDate;
-						creationTime = p.creationTime;
+						modificationDate = p.lastWriteDate;
+						modificationTime = p.lastWriteTime;
 						//writeDate = p.lastAccessDate;
 						//writeDate = p.lastAccessDate;
 						if (match != NULL) {
 						if (match != NULL) {
 							if (strcasecmp(match, filename) == 0) return;
 							if (strcasecmp(match, filename) == 0) return;
@@ -763,8 +763,8 @@ void CardReader::presort() {
 		#endif
 		#endif
 		#elif SDSORT_USES_STACK
 		#elif SDSORT_USES_STACK
 		char sortnames[fileCnt][LONG_FILENAME_LENGTH];
 		char sortnames[fileCnt][LONG_FILENAME_LENGTH];
-		uint16_t creation_time[fileCnt];
-		uint16_t creation_date[fileCnt];
+		uint16_t modification_time[fileCnt];
+		uint16_t modification_date[fileCnt];
 		#endif
 		#endif
 
 
 		// Folder sorting needs 1 bit per entry for flags.
 		// Folder sorting needs 1 bit per entry for flags.
@@ -784,8 +784,8 @@ void CardReader::presort() {
 		// retaining only two filenames at a time. This is very
 		// retaining only two filenames at a time. This is very
 		// slow but is safest and uses minimal RAM.
 		// slow but is safest and uses minimal RAM.
 		char name1[LONG_FILENAME_LENGTH + 1];
 		char name1[LONG_FILENAME_LENGTH + 1];
-		uint16_t creation_time_bckp;
-		uint16_t creation_date_bckp;
+		uint16_t modification_time_bckp;
+		uint16_t modification_date_bckp;
 
 
 		#endif
 		#endif
 		position = 0;
 		position = 0;
@@ -811,8 +811,8 @@ void CardReader::presort() {
 				#else
 				#else
 				// Copy filenames into the static array
 				// Copy filenames into the static array
 				strcpy(sortnames[i], LONGEST_FILENAME);
 				strcpy(sortnames[i], LONGEST_FILENAME);
-				creation_time[i] = creationTime;
-				creation_date[i] = creationDate;
+				modification_time[i] = modificationTime;
+				modification_date[i] = modificationDate;
 				#if SDSORT_CACHE_NAMES
 				#if SDSORT_CACHE_NAMES
 				strcpy(sortshort[i], filename);
 				strcpy(sortshort[i], filename);
 				#endif
 				#endif
@@ -837,12 +837,12 @@ void CardReader::presort() {
 			// Compare names from the array or just the two buffered names
 			// Compare names from the array or just the two buffered names
 			#if SDSORT_USES_RAM
 			#if SDSORT_USES_RAM
 			#define _SORT_CMP_NODIR() (strcasecmp(sortnames[o1], sortnames[o2]) > 0)
 			#define _SORT_CMP_NODIR() (strcasecmp(sortnames[o1], sortnames[o2]) > 0)
-			#define _SORT_CMP_TIME_NODIR() (((creation_date[o1] == creation_date[o2]) && (creation_time[o1] < creation_time[o2])) || \
-																	(creation_date[o1] < creation_date [o2]))
+			#define _SORT_CMP_TIME_NODIR() (((modification_date[o1] == modification_date[o2]) && (modification_time[o1] < modification_time[o2])) || \
+																	(modification_date[o1] < modification_date [o2]))
 			#else
 			#else
 			#define _SORT_CMP_NODIR() (strcasecmp(name1, name2) > 0) //true if lowercase(name1) > lowercase(name2)
 			#define _SORT_CMP_NODIR() (strcasecmp(name1, name2) > 0) //true if lowercase(name1) > lowercase(name2)
-			#define _SORT_CMP_TIME_NODIR() (((creation_date_bckp == creationDate) && (creation_time_bckp > creationTime)) || \
-																	(creation_date_bckp > creationDate))
+			#define _SORT_CMP_TIME_NODIR() (((modification_date_bckp == modificationDate) && (modification_time_bckp > modificationTime)) || \
+																	(modification_date_bckp > modificationDate))
 
 
 			#endif
 			#endif
 
 
@@ -893,8 +893,8 @@ void CardReader::presort() {
 					counter++;
 					counter++;
 					getfilename_simple(positions[o1]);
 					getfilename_simple(positions[o1]);
 					strcpy(name1, LONGEST_FILENAME); // save (or getfilename below will trounce it)
 					strcpy(name1, LONGEST_FILENAME); // save (or getfilename below will trounce it)
-					creation_date_bckp = creationDate;
-					creation_time_bckp = creationTime;
+					modification_date_bckp = modificationDate;
+					modification_time_bckp = modificationTime;
 					#if HAS_FOLDER_SORTING
 					#if HAS_FOLDER_SORTING
 					bool dir1 = filenameIsDir;
 					bool dir1 = filenameIsDir;
 					#endif
 					#endif

+ 3 - 3
Firmware/cardreader.h

@@ -77,7 +77,7 @@ public:
   bool cardOK ;
   bool cardOK ;
   bool paused ;
   bool paused ;
   char filename[13];
   char filename[13];
-  uint16_t creationTime, creationDate;
+  uint16_t modificationTime, modificationDate;
   uint32_t cluster, position;
   uint32_t cluster, position;
   char longFilename[LONG_FILENAME_LENGTH];
   char longFilename[LONG_FILENAME_LENGTH];
   bool filenameIsDir;
   bool filenameIsDir;
@@ -114,8 +114,8 @@ private:
     #endif
     #endif
   #elif !SDSORT_USES_STACK
   #elif !SDSORT_USES_STACK
     char sortnames[SDSORT_LIMIT][FILENAME_LENGTH];
     char sortnames[SDSORT_LIMIT][FILENAME_LENGTH];
-    uint16_t creation_time[SDSORT_LIMIT];
-    uint16_t creation_date[SDSORT_LIMIT];
+    uint16_t modification_time[SDSORT_LIMIT];
+    uint16_t modification_date[SDSORT_LIMIT];
   #endif
   #endif
 
 
   // Folder sorting uses an isDir array when caching items.
   // Folder sorting uses an isDir array when caching items.

+ 12 - 8
Firmware/mmu.cpp

@@ -1355,7 +1355,7 @@ void lcd_mmu_load_to_nozzle(uint8_t filament_nr)
         manage_response(true, true, MMU_TCODE_MOVE);
         manage_response(true, true, MMU_TCODE_MOVE);
         mmu_continue_loading(false);
         mmu_continue_loading(false);
         mmu_extruder = tmp_extruder; //filament change is finished
         mmu_extruder = tmp_extruder; //filament change is finished
-        marlin_rise_z();
+        raise_z_above(MIN_Z_FOR_LOAD, false);
         mmu_load_to_nozzle();
         mmu_load_to_nozzle();
         load_filament_final_feed();
         load_filament_final_feed();
         st_synchronize();
         st_synchronize();
@@ -1556,19 +1556,23 @@ void mmu_continue_loading(bool blocking)
             increment_load_fail();
             increment_load_fail();
             // no break
             // no break
         case Ls::Retry:
         case Ls::Retry:
-#ifdef MMU_HAS_CUTTER
-            if (1 == eeprom_read_byte((uint8_t*)EEPROM_MMU_CUTTER_ENABLED))
+            ++retry; // overflow not handled, as it is not dangerous.
+            if (retry >= max_retry)
             {
             {
-                mmu_command(MmuCmd::K0 + tmp_extruder);
-                manage_response(true, true, MMU_UNLOAD_MOVE);
-            }
+                state = Ls::Unload;
+#ifdef MMU_HAS_CUTTER
+                if (1 == eeprom_read_byte((uint8_t*)EEPROM_MMU_CUTTER_ENABLED))
+                {
+                    mmu_command(MmuCmd::K0 + tmp_extruder);
+                    manage_response(true, true, MMU_UNLOAD_MOVE);
+                }
 #endif //MMU_HAS_CUTTER
 #endif //MMU_HAS_CUTTER
+            }
             mmu_command(MmuCmd::T0 + tmp_extruder);
             mmu_command(MmuCmd::T0 + tmp_extruder);
             manage_response(true, true, MMU_TCODE_MOVE);
             manage_response(true, true, MMU_TCODE_MOVE);
             success = load_more();
             success = load_more();
             if (success) success = can_load();
             if (success) success = can_load();
-            ++retry; // overflow not handled, as it is not dangerous.
-            if (retry >= max_retry) state = Ls::Unload;
+
             break;
             break;
         case Ls::Unload:
         case Ls::Unload:
             stop_and_save_print_to_ram(0, 0);
             stop_and_save_print_to_ram(0, 0);

+ 0 - 4
Firmware/stepper.cpp

@@ -1564,10 +1564,6 @@ void st_current_init() //Initialize Digipot Motor Current
 {
 {
 #ifdef MOTOR_CURRENT_PWM_XY_PIN
 #ifdef MOTOR_CURRENT_PWM_XY_PIN
   uint8_t SilentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT);
   uint8_t SilentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT);
-  if (SilentMode == 0xff){ //set power to High Power (MK2.5) or Normal Power (MK3, unused)
-    SilentMode = SILENT_MODE_POWER;
-    eeprom_update_byte((uint8_t*)EEPROM_SILENT, SilentMode);
-  }
   SilentModeMenu = SilentMode;
   SilentModeMenu = SilentMode;
     pinMode(MOTOR_CURRENT_PWM_XY_PIN, OUTPUT);
     pinMode(MOTOR_CURRENT_PWM_XY_PIN, OUTPUT);
     pinMode(MOTOR_CURRENT_PWM_Z_PIN, OUTPUT);
     pinMode(MOTOR_CURRENT_PWM_Z_PIN, OUTPUT);

+ 4 - 1
Firmware/temperature.cpp

@@ -505,7 +505,10 @@ void checkFanSpeed()
 		// we may even send some info to the LCD from here
 		// we may even send some info to the LCD from here
 		fan_check_error = EFCE_FIXED;
 		fan_check_error = EFCE_FIXED;
 	}
 	}
-
+	if ((fan_check_error == EFCE_FIXED) && !PRINTER_ACTIVE){
+		fan_check_error = EFCE_OK; //if the issue is fixed while the printer is doing nothing, reenable processing immediately.
+		lcd_reset_alert_level(); //for another fan speed error
+	}
 	if ((fan_speed_errors[0] > max_extruder_fan_errors) && fans_check_enabled && (fan_check_error == EFCE_OK)) {
 	if ((fan_speed_errors[0] > max_extruder_fan_errors) && fans_check_enabled && (fan_check_error == EFCE_OK)) {
 		fan_speed_errors[0] = 0;
 		fan_speed_errors[0] = 0;
 		fanSpeedError(0); //extruder fan
 		fanSpeedError(0); //extruder fan

+ 2 - 2
Firmware/tmc2130.cpp

@@ -427,7 +427,7 @@ void tmc2130_check_overtemp()
 
 
 void tmc2130_setup_chopper(uint8_t axis, uint8_t mres, uint8_t current_h, uint8_t current_r)
 void tmc2130_setup_chopper(uint8_t axis, uint8_t mres, uint8_t current_h, uint8_t current_r)
 {
 {
-	uint8_t intpol = 1;
+	uint8_t intpol = (mres != 0); // intpol to 256 only if microsteps aren't 256
 	uint8_t toff = tmc2130_chopper_config[axis].toff; // toff = 3 (fchop = 27.778kHz)
 	uint8_t toff = tmc2130_chopper_config[axis].toff; // toff = 3 (fchop = 27.778kHz)
 	uint8_t hstrt = tmc2130_chopper_config[axis].hstr; //initial 4, modified to 5
 	uint8_t hstrt = tmc2130_chopper_config[axis].hstr; //initial 4, modified to 5
 	uint8_t hend = tmc2130_chopper_config[axis].hend; //original value = 1
 	uint8_t hend = tmc2130_chopper_config[axis].hend; //original value = 1
@@ -600,7 +600,7 @@ void tmc2130_wr_THIGH(uint8_t axis, uint32_t val32)
 
 
 uint8_t tmc2130_usteps2mres(uint16_t usteps)
 uint8_t tmc2130_usteps2mres(uint16_t usteps)
 {
 {
-	uint8_t mres = 8; while (mres && (usteps >>= 1)) mres--;
+	uint8_t mres = 8; while (usteps >>= 1) mres--;
 	return mres;
 	return mres;
 }
 }
 
 

+ 48 - 36
Firmware/ultralcd.cpp

@@ -310,18 +310,24 @@ bool bSettings;                                   // flag (i.e. 'fake parameter'
 const char STR_SEPARATOR[] PROGMEM = "------------";
 const char STR_SEPARATOR[] PROGMEM = "------------";
 
 
 
 
-static void lcd_implementation_drawmenu_sdfile_selected(uint8_t row, char* longFilename)
+static void lcd_implementation_drawmenu_sdfile_selected(uint8_t row, const char* filename, char* longFilename)
 {
 {
     char c;
     char c;
-    int enc_dif = lcd_encoder_diff;
+    int enc_dif = lcd_encoder_diff / ENCODER_PULSES_PER_STEP;
     uint8_t n = LCD_WIDTH - 1;
     uint8_t n = LCD_WIDTH - 1;
+
     for(uint_least8_t g = 0; g<4;g++){
     for(uint_least8_t g = 0; g<4;g++){
       lcd_set_cursor(0, g);
       lcd_set_cursor(0, g);
     lcd_print(' ');
     lcd_print(' ');
     }
     }
-
     lcd_set_cursor(0, row);
     lcd_set_cursor(0, row);
     lcd_print('>');
     lcd_print('>');
+
+    if (longFilename[0] == '\0')
+    {
+        longFilename = filename;
+    }
+
     int i = 1;
     int i = 1;
     int j = 0;
     int j = 0;
     char* longFilenameTMP = longFilename;
     char* longFilenameTMP = longFilename;
@@ -339,7 +345,7 @@ static void lcd_implementation_drawmenu_sdfile_selected(uint8_t row, char* longF
           n = LCD_WIDTH - 1;
           n = LCD_WIDTH - 1;
           for(int g = 0; g<300 ;g++){
           for(int g = 0; g<300 ;g++){
 			  manage_heater();
 			  manage_heater();
-            if(LCD_CLICKED || ( enc_dif != lcd_encoder_diff )){
+            if(LCD_CLICKED || ( enc_dif != (lcd_encoder_diff / ENCODER_PULSES_PER_STEP))){
 				longFilenameTMP = longFilename;
 				longFilenameTMP = longFilename;
 				*(longFilenameTMP + LCD_WIDTH - 2) = '\0';
 				*(longFilenameTMP + LCD_WIDTH - 2) = '\0';
 				i = 1;
 				i = 1;
@@ -537,7 +543,7 @@ static uint8_t menu_item_sdfile(const char*
 		if (lcd_draw_update)
 		if (lcd_draw_update)
 		{
 		{
 			if (lcd_encoder == menu_item)
 			if (lcd_encoder == menu_item)
-				lcd_implementation_drawmenu_sdfile_selected(menu_row, str_fnl);
+				lcd_implementation_drawmenu_sdfile_selected(menu_row, str_fn, str_fnl);
 			else
 			else
 				lcd_implementation_drawmenu_sdfile(menu_row, str_fn, str_fnl);
 				lcd_implementation_drawmenu_sdfile(menu_row, str_fn, str_fnl);
 		}
 		}
@@ -709,10 +715,10 @@ void lcdui_print_status_line(void)
 {
 {
 	if (IS_SD_PRINTING)
 	if (IS_SD_PRINTING)
 	{
 	{
-		if (strcmp(longFilenameOLD, card.longFilename) != 0)
+		if (strcmp(longFilenameOLD, (card.longFilename[0] ? card.longFilename : card.filename)) != 0)
 		{
 		{
 			memset(longFilenameOLD, '\0', strlen(longFilenameOLD));
 			memset(longFilenameOLD, '\0', strlen(longFilenameOLD));
-			sprintf_P(longFilenameOLD, PSTR("%s"), card.longFilename);
+			sprintf_P(longFilenameOLD, PSTR("%s"), (card.longFilename[0] ? card.longFilename : card.filename));
 			scrollstuff = 0;
 			scrollstuff = 0;
 		}
 		}
 	}
 	}
@@ -760,16 +766,16 @@ void lcdui_print_status_line(void)
 	}
 	}
 	else if ((IS_SD_PRINTING) && (custom_message_type == CustomMsg::Status))
 	else if ((IS_SD_PRINTING) && (custom_message_type == CustomMsg::Status))
 	{ // If printing from SD, show what we are printing
 	{ // If printing from SD, show what we are printing
-		if(strlen(card.longFilename) > LCD_WIDTH)
+		if(strlen(longFilenameOLD) > LCD_WIDTH)
 		{
 		{
 			int inters = 0;
 			int inters = 0;
 			int gh = scrollstuff;
 			int gh = scrollstuff;
 			while (((gh - scrollstuff) < LCD_WIDTH) && (inters == 0))
 			while (((gh - scrollstuff) < LCD_WIDTH) && (inters == 0))
 			{
 			{
-				if (card.longFilename[gh] == '\0')
+				if (longFilenameOLD[gh] == '\0')
 				{
 				{
 					lcd_set_cursor(gh - scrollstuff, 3);
 					lcd_set_cursor(gh - scrollstuff, 3);
-					lcd_print(card.longFilename[gh - 1]);
+					lcd_print(longFilenameOLD[gh - 1]);
 					scrollstuff = 0;
 					scrollstuff = 0;
 					gh = scrollstuff;
 					gh = scrollstuff;
 					inters = 1;
 					inters = 1;
@@ -777,7 +783,7 @@ void lcdui_print_status_line(void)
 				else
 				else
 				{
 				{
 					lcd_set_cursor(gh - scrollstuff, 3);
 					lcd_set_cursor(gh - scrollstuff, 3);
-					lcd_print(card.longFilename[gh - 1]);
+					lcd_print(longFilenameOLD[gh - 1]);
 					gh++;
 					gh++;
 				}
 				}
 			}
 			}
@@ -785,7 +791,7 @@ void lcdui_print_status_line(void)
 		}
 		}
 		else
 		else
 		{
 		{
-			lcd_print(longFilenameOLD);
+			lcd_printf_P(PSTR("%-20s"), longFilenameOLD);
 		}
 		}
 	}
 	}
 	else
 	else
@@ -1072,12 +1078,8 @@ void lcd_commands()
 		if (!blocks_queued() && !homing_flag)
 		if (!blocks_queued() && !homing_flag)
 		{
 		{
 			lcd_setstatuspgm(_i("Print paused"));////MSG_PRINT_PAUSED c=20 r=1
 			lcd_setstatuspgm(_i("Print paused"));////MSG_PRINT_PAUSED c=20 r=1
-			long_pause();
-               if (lcd_commands_type == LcdCommands::LongPause) // !!! because "lcd_commands_type" can be changed during/inside "long_pause()"
-               {
-                    lcd_commands_type = LcdCommands::Idle;
-                    lcd_commands_step = 0;
-               }
+            lcd_commands_type = LcdCommands::Idle;
+            lcd_commands_step = 0;
 		}
 		}
 	}
 	}
 
 
@@ -1636,7 +1638,7 @@ void lcd_pause_print()
 {
 {
     lcd_return_to_status();
     lcd_return_to_status();
     stop_and_save_print_to_ram(0.0,0.0);
     stop_and_save_print_to_ram(0.0,0.0);
-    setAllTargetHotends(0);
+    long_pause();
     isPrintPaused = true;
     isPrintPaused = true;
     if (LcdCommands::Idle == lcd_commands_type)
     if (LcdCommands::Idle == lcd_commands_type)
     {
     {
@@ -1843,8 +1845,8 @@ static void lcd_menu_fails_stats_total()
 //! @code{.unparsed}
 //! @code{.unparsed}
 //! |01234567890123456789|
 //! |01234567890123456789|
 //! |Last print failures |	c=20 r=1
 //! |Last print failures |	c=20 r=1
-//! | Power failures: 000|	c=14 r=1
-//! | Filam. runouts: 000|	c=14 r=1
+//! | Power failures  000|	c=14 r=1
+//! | Filam. runouts  000|	c=14 r=1
 //! | Crash   X:000 Y:000|	c=7 r=1
 //! | Crash   X:000 Y:000|	c=7 r=1
 //! ----------------------
 //! ----------------------
 //! @endcode
 //! @endcode
@@ -1890,6 +1892,7 @@ static void lcd_menu_fails_stats()
 }
 }
 
 
 #elif defined(FILAMENT_SENSOR)
 #elif defined(FILAMENT_SENSOR)
+static const char failStatsFmt[] PROGMEM = "%S\n" " %-16.16S%-3d\n" "%S\n" " %-16.16S%-3d\n";
 //! 
 //! 
 //! @brief Print last print and total filament run outs
 //! @brief Print last print and total filament run outs
 //! 
 //! 
@@ -1900,9 +1903,9 @@ static void lcd_menu_fails_stats()
 //! @code{.unparsed}
 //! @code{.unparsed}
 //! |01234567890123456789|
 //! |01234567890123456789|
 //! |Last print failures |	c=20 r=1
 //! |Last print failures |	c=20 r=1
-//! | Filam. runouts: 000|	c=14 r=1
+//! | Filam. runouts  000|	c=14 r=1
 //! |Total failures      |	c=20 r=1
 //! |Total failures      |	c=20 r=1
-//! | Filam. runouts: 000|	c=14 r=1
+//! | Filam. runouts  000|	c=14 r=1
 //! ----------------------
 //! ----------------------
 //! @endcode
 //! @endcode
 //! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
 //! @todo Positioning of the messages and values on LCD aren't fixed to their exact place. This causes issues with translations.
@@ -1912,11 +1915,13 @@ static void lcd_menu_fails_stats()
     uint8_t filamentLast = eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT);
     uint8_t filamentLast = eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT);
     uint16_t filamentTotal = eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT);
     uint16_t filamentTotal = eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT);
 	lcd_home();
 	lcd_home();
-    lcd_printf_P(PSTR("Last print failures\n"  ////c=20 r=1 
-        " Filam. runouts  %-3d\n"   ////c=14 r=1
-        "Total failures\n"  ////c=20 r=1
-        " Filam. runouts  %-3d"), filamentLast, filamentTotal);  ////c=14 r=1
-    menu_back_if_clicked();
+	lcd_printf_P(failStatsFmt, 
+        _i("Last print failures"),   ////c=20 r=1
+        _i("Filam. runouts"), filamentLast,   ////c=14 r=1
+        _i("Total failures"),  ////c=20 r=1
+        _i("Filam. runouts"), filamentTotal);   ////c=14 r=1
+
+	menu_back_if_clicked();
 }
 }
 #else
 #else
 static void lcd_menu_fails_stats()
 static void lcd_menu_fails_stats()
@@ -2371,9 +2376,11 @@ void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
             {
             {
                 lcd_commands_type = LcdCommands::Layer1Cal;
                 lcd_commands_type = LcdCommands::Layer1Cal;
             }
             }
-            else if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE))
+            else
             {
             {
-                lcd_wizard(WizState::LoadFilHot);
+                raise_z_above(MIN_Z_FOR_PREHEAT);
+                if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE))
+                    lcd_wizard(WizState::LoadFilHot);
             }
             }
             return;
             return;
         }
         }
@@ -3446,6 +3453,8 @@ void lcd_wait_for_cool_down() {
 	lcd_set_custom_characters_degree();
 	lcd_set_custom_characters_degree();
 	setAllTargetHotends(0);
 	setAllTargetHotends(0);
 	setTargetBed(0);
 	setTargetBed(0);
+	int fanSpeedBckp = fanSpeed;
+	fanSpeed = 255;
 	while ((degHotend(0)>MAX_HOTEND_TEMP_CALIBRATION) || (degBed() > MAX_BED_TEMP_CALIBRATION)) {
 	while ((degHotend(0)>MAX_HOTEND_TEMP_CALIBRATION) || (degBed() > MAX_BED_TEMP_CALIBRATION)) {
 		lcd_display_message_fullscreen_P(_i("Waiting for nozzle and bed cooling"));////MSG_WAITING_TEMP c=20 r=3
 		lcd_display_message_fullscreen_P(_i("Waiting for nozzle and bed cooling"));////MSG_WAITING_TEMP c=20 r=3
 
 
@@ -3464,6 +3473,7 @@ void lcd_wait_for_cool_down() {
 		delay_keep_alive(1000);
 		delay_keep_alive(1000);
 		serialecho_temperatures();
 		serialecho_temperatures();
 	}
 	}
+	fanSpeed = fanSpeedBckp;
 	lcd_set_custom_characters_arrows();
 	lcd_set_custom_characters_arrows();
 	lcd_update_enable(true);
 	lcd_update_enable(true);
 }
 }
@@ -4929,12 +4939,12 @@ static void lcd_wizard_load()
 {
 {
 	if (mmu_enabled)
 	if (mmu_enabled)
 	{
 	{
-		lcd_show_fullscreen_message_and_wait_P(_i("Please insert filament to the first tube of MMU, then press the knob to load it."));////c=20 r=8
+		lcd_show_fullscreen_message_and_wait_P(_i("Please insert filament into the first tube of the MMU, then press the knob to load it."));////c=20 r=8
 		tmp_extruder = 0;
 		tmp_extruder = 0;
 	} 
 	} 
 	else
 	else
 	{
 	{
-		lcd_show_fullscreen_message_and_wait_P(_i("Please insert filament to the extruder, then press knob to load it."));////MSG_WIZARD_LOAD_FILAMENT c=20 r=8
+		lcd_show_fullscreen_message_and_wait_P(_i("Please insert filament into the extruder, then press the knob to load it."));////MSG_WIZARD_LOAD_FILAMENT c=20 r=8
 	}	
 	}	
 	lcd_update_enable(false);
 	lcd_update_enable(false);
 	lcd_clear();
 	lcd_clear();
@@ -4958,7 +4968,7 @@ static void wizard_lay1cal_message(bool cold)
     if (mmu_enabled)
     if (mmu_enabled)
     {
     {
         lcd_show_fullscreen_message_and_wait_P(
         lcd_show_fullscreen_message_and_wait_P(
-                _i("First you will select filament you wish to use for calibration. Then select temperature which matches your material."));
+                _i("Choose a filament for the First Layer Calibration and select it in the on-screen menu."));
     }
     }
     else if (cold)
     else if (cold)
     {
     {
@@ -4966,7 +4976,7 @@ static void wizard_lay1cal_message(bool cold)
                 _i("Select temperature which matches your material."));
                 _i("Select temperature which matches your material."));
     }
     }
     lcd_show_fullscreen_message_and_wait_P(
     lcd_show_fullscreen_message_and_wait_P(
-            _i("I will start to print line and you will gradually lower the nozzle by rotating the knob, until you reach optimal height. Check the pictures in our handbook in chapter Calibration.")); ////MSG_WIZARD_V2_CAL_2 c=20 r=12
+            _i("The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter).")); ////MSG_WIZARD_V2_CAL_2 c=20 r=12
 }
 }
 
 
 //! @brief Printer first run wizard (Selftest and calibration)
 //! @brief Printer first run wizard (Selftest and calibration)
@@ -5094,7 +5104,7 @@ void lcd_wizard(WizState state)
 			setTargetBed(PLA_PREHEAT_HPB_TEMP);
 			setTargetBed(PLA_PREHEAT_HPB_TEMP);
 			if (mmu_enabled)
 			if (mmu_enabled)
 			{
 			{
-			    wizard_event = lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Is any filament loaded?"), true);////c=20 r=2
+			    wizard_event = lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Is filament loaded?"), true);////c=20 r=2
 			} else
 			} else
 			{
 			{
 			    wizard_event = lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Is filament loaded?"), true);////MSG_WIZARD_FILAMENT_LOADED c=20 r=2
 			    wizard_event = lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Is filament loaded?"), true);////MSG_WIZARD_FILAMENT_LOADED c=20 r=2
@@ -5139,7 +5149,7 @@ void lcd_wizard(WizState state)
 			}
 			}
 			else
 			else
 			{
 			{
-			    lcd_show_fullscreen_message_and_wait_P(_i("If you have more steel sheets you can calibrate additional presets in Settings / HW Setup / Steel sheets."));
+			    lcd_show_fullscreen_message_and_wait_P(_i("If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."));
 				state = S::Finish;
 				state = S::Finish;
 			}
 			}
 			break;
 			break;
@@ -6357,6 +6367,8 @@ void unload_filament()
 	custom_message_type = CustomMsg::FilamentLoading;
 	custom_message_type = CustomMsg::FilamentLoading;
 	lcd_setstatuspgm(_T(MSG_UNLOADING_FILAMENT));
 	lcd_setstatuspgm(_T(MSG_UNLOADING_FILAMENT));
 
 
+    raise_z_above(MIN_Z_FOR_UNLOAD);
+
 	//		extr_unload2();
 	//		extr_unload2();
 
 
 	current_position[E_AXIS] -= 45;
 	current_position[E_AXIS] -= 45;

+ 1 - 1
lang/lang-add.sh

@@ -51,7 +51,7 @@ if ! [ -e lang_add.txt ]; then
 fi
 fi
 
 
 cat lang_add.txt | sed 's/^/"/;s/$/"/' | while read new_s; do
 cat lang_add.txt | sed 's/^/"/;s/$/"/' | while read new_s; do
-	if grep "$new_s" lang_en.txt >/dev/nul; then
+	if grep "$new_s" lang_en.txt >/dev/null; then
 		echo "text already exist:"
 		echo "text already exist:"
 		echo "$new_s"
 		echo "$new_s"
 		echo
 		echo

+ 24 - 3
lang/lang_en.txt

@@ -133,6 +133,9 @@
 #MSG_CRASHDETECT_ON
 #MSG_CRASHDETECT_ON
 "Crash det.   [on]"
 "Crash det.   [on]"
 
 
+#
+"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
+
 #MSG_CRASHDETECT_NA
 #MSG_CRASHDETECT_NA
 "Crash det.  [N/A]"
 "Crash det.  [N/A]"
 
 
@@ -361,6 +364,9 @@
 #
 #
 "Last print failures"
 "Last print failures"
 
 
+#
+"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
+
 #
 #
 "Last print"
 "Last print"
 
 
@@ -613,6 +619,15 @@
 #
 #
 "Print FAN"
 "Print FAN"
 
 
+#
+"Please insert filament into the extruder, then press the knob to load it."
+
+#
+"Please insert filament into the first tube of the MMU, then press the knob to load it."
+
+#
+"Please load filament first."
+
 #MSG_PRUSA3D
 #MSG_PRUSA3D
 "prusa3d.com"
 "prusa3d.com"
 
 
@@ -688,9 +703,6 @@
 #
 #
 "Select nozzle preheat temperature which matches your material."
 "Select nozzle preheat temperature which matches your material."
 
 
-#
-"Select PLA filament:"
-
 #MSG_SET_TEMPERATURE c=19 r=1
 #MSG_SET_TEMPERATURE c=19 r=1
 "Set temperature:"
 "Set temperature:"
 
 
@@ -763,12 +775,18 @@
 #MSG_SELFTEST_SWAPPED
 #MSG_SELFTEST_SWAPPED
 "Swapped"
 "Swapped"
 
 
+#
+"Select filament:"
+
 #MSG_TEMP_CALIBRATION c=20 r=1
 #MSG_TEMP_CALIBRATION c=20 r=1
 "Temp. cal.          "
 "Temp. cal.          "
 
 
 #MSG_TEMP_CALIBRATION_ON c=20 r=1
 #MSG_TEMP_CALIBRATION_ON c=20 r=1
 "Temp. cal.   [on]"
 "Temp. cal.   [on]"
 
 
+#
+"Select temperature which matches your material."
+
 #MSG_TEMP_CALIBRATION_OFF c=20 r=1
 #MSG_TEMP_CALIBRATION_OFF c=20 r=1
 "Temp. cal.  [off]"
 "Temp. cal.  [off]"
 
 
@@ -904,6 +922,9 @@
 #
 #
 "Y distance from min"
 "Y distance from min"
 
 
+#
+"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
+
 #
 #
 "Y-correct:"
 "Y-correct:"
 
 

+ 33 - 5
lang/lang_en_cz.txt

@@ -72,7 +72,7 @@
 
 
 #MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
 #MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
 "Autoloading filament available only when filament sensor is turned on..."
 "Autoloading filament available only when filament sensor is turned on..."
-"Automaticke zavadeni filamentu je dostupne pouze pri zapnutem filament senzoru..."
+"Automaticke zavadeni filamentu je mozne pouze pri zapnutem filament senzoru..."
 
 
 #MSG_AUTOLOADING_ENABLED c=20 r=4
 #MSG_AUTOLOADING_ENABLED c=20 r=4
 "Autoloading filament is active, just press the knob and insert filament..."
 "Autoloading filament is active, just press the knob and insert filament..."
@@ -178,6 +178,10 @@
 "Crash det.   [on]"
 "Crash det.   [on]"
 "Crash det.  [zap]"
 "Crash det.  [zap]"
 
 
+#
+"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
+"Zvolte filament pro kalibraci prvni vrstvy z nasledujiciho menu"
+
 #MSG_CRASHDETECT_NA
 #MSG_CRASHDETECT_NA
 "Crash det.  [N/A]"
 "Crash det.  [N/A]"
 "\x00"
 "\x00"
@@ -482,6 +486,10 @@
 "Last print failures"
 "Last print failures"
 "Selhani posl. tisku"
 "Selhani posl. tisku"
 
 
+#
+"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
+"Mate-li vice tiskovych platu, kalibrujte je v menu Nastaveni - HW nastaveni - Tiskove platy"
+
 #
 #
 "Last print"
 "Last print"
 "Posledni tisk"
 "Posledni tisk"
@@ -818,6 +826,18 @@
 "Print FAN"
 "Print FAN"
 "Tiskovy vent."
 "Tiskovy vent."
 
 
+#
+"Please insert filament into the extruder, then press the knob to load it."
+"Prosim vlozte filament do extruderu a stisknete tlacitko k jeho zavedeni"
+
+#
+"Please insert filament into the first tube of the MMU, then press the knob to load it."
+"Prosim vlozte filament do prvni trubicky MMU a stisknete tlacitko k jeho zavedeni"
+
+#
+"Please load filament first."
+"Prosim nejdriv zavedte filament"
+
 #MSG_PRUSA3D
 #MSG_PRUSA3D
 "prusa3d.com"
 "prusa3d.com"
 "\x00"
 "\x00"
@@ -918,10 +938,6 @@
 "Select nozzle preheat temperature which matches your material."
 "Select nozzle preheat temperature which matches your material."
 "Vyberte teplotu predehrati trysky ktera odpovida vasemu materialu."
 "Vyberte teplotu predehrati trysky ktera odpovida vasemu materialu."
 
 
-#
-"Select PLA filament:"
-"Vyberte PLA filament:"
-
 #MSG_SET_TEMPERATURE c=19 r=1
 #MSG_SET_TEMPERATURE c=19 r=1
 "Set temperature:"
 "Set temperature:"
 "Nastavte teplotu:"
 "Nastavte teplotu:"
@@ -1018,6 +1034,10 @@
 "Swapped"
 "Swapped"
 "Prohozene"
 "Prohozene"
 
 
+#
+"Select filament:"
+"Zvolte filament:"
+
 #MSG_TEMP_CALIBRATION c=20 r=1
 #MSG_TEMP_CALIBRATION c=20 r=1
 "Temp. cal.          "
 "Temp. cal.          "
 "Tepl. kal. "
 "Tepl. kal. "
@@ -1026,6 +1046,10 @@
 "Temp. cal.   [on]"
 "Temp. cal.   [on]"
 "Tepl. kal.  [zap]"
 "Tepl. kal.  [zap]"
 
 
+#
+"Select temperature which matches your material."
+"Zvolte teplotu, ktera odpovida vasemu materialu."
+
 #MSG_TEMP_CALIBRATION_OFF c=20 r=1
 #MSG_TEMP_CALIBRATION_OFF c=20 r=1
 "Temp. cal.  [off]"
 "Temp. cal.  [off]"
 "Tepl. kal.  [vyp]"
 "Tepl. kal.  [vyp]"
@@ -1206,6 +1230,10 @@
 "Y distance from min"
 "Y distance from min"
 "Y vzdalenost od min"
 "Y vzdalenost od min"
 
 
+#
+"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
+"\x00"
+
 #
 #
 "Y-correct:"
 "Y-correct:"
 "Korekce Y:"
 "Korekce Y:"

+ 33 - 6
lang/lang_en_de.txt

@@ -72,7 +72,7 @@
 
 
 #MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
 #MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
 "Autoloading filament available only when filament sensor is turned on..."
 "Autoloading filament available only when filament sensor is turned on..."
-"Automatisches Laden Filament nur bei einge schaltetem Filament- sensor verfuegbar..."
+"Automatisches Laden Filament nur bei eingeschaltetem Fil. sensor verfuegbar..."
 
 
 #MSG_AUTOLOADING_ENABLED c=20 r=4
 #MSG_AUTOLOADING_ENABLED c=20 r=4
 "Autoloading filament is active, just press the knob and insert filament..."
 "Autoloading filament is active, just press the knob and insert filament..."
@@ -178,6 +178,10 @@
 "Crash det.   [on]"
 "Crash det.   [on]"
 "Crash Erk.   [an]"
 "Crash Erk.   [an]"
 
 
+#
+"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
+"Waehlen Sie ein Filament fuer Erste Schichtkalibrierung aus und waehlen Sie es im On-Screen-Menu aus."
+
 #MSG_CRASHDETECT_NA
 #MSG_CRASHDETECT_NA
 "Crash det.  [N/A]"
 "Crash det.  [N/A]"
 "Crash Erk.   [nv]"
 "Crash Erk.   [nv]"
@@ -482,6 +486,10 @@
 "Last print failures"
 "Last print failures"
 "Letzte Druckfehler"
 "Letzte Druckfehler"
 
 
+#
+"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
+"Wenn Sie zusaetzliche Stahlbleche haben, kalibrieren Sie deren Voreinstellungen unter Einstellungen - HW Setup - Stahlbleche."
+
 #
 #
 "Last print"
 "Last print"
 "Letzter Druck"
 "Letzter Druck"
@@ -818,6 +826,18 @@
 "Print FAN"
 "Print FAN"
 "Druckvent."
 "Druckvent."
 
 
+#
+"Please insert filament into the extruder, then press the knob to load it."
+"Bitte legen Sie das Filament in den Extruder ein und druecken Sie dann den Knopf, um es zu laden."
+
+#
+"Please insert filament into the first tube of the MMU, then press the knob to load it."
+"Bitte stecken Sie das Filament in den ersten Schlauch der MMU und druecken Sie dann den Knopf, um es zu laden."
+
+#
+"Please load filament first."
+"Bitte laden Sie zuerst das Filament."
+
 #MSG_PRUSA3D
 #MSG_PRUSA3D
 "prusa3d.com"
 "prusa3d.com"
 "\x00"
 "\x00"
@@ -918,10 +938,6 @@
 "Select nozzle preheat temperature which matches your material."
 "Select nozzle preheat temperature which matches your material."
 "Bitte Vorheiztemperatur auswaehlen, die Ihrem Material entspricht."
 "Bitte Vorheiztemperatur auswaehlen, die Ihrem Material entspricht."
 
 
-#
-"Select PLA filament:"
-"PLA Filament auswaehlen:"
-
 #MSG_SET_TEMPERATURE c=19 r=1
 #MSG_SET_TEMPERATURE c=19 r=1
 "Set temperature:"
 "Set temperature:"
 "Temp. einstellen:"
 "Temp. einstellen:"
@@ -1018,6 +1034,10 @@
 "Swapped"
 "Swapped"
 "Ausgetauscht"
 "Ausgetauscht"
 
 
+#
+"Select filament:"
+"Filament auswaehlen:"
+
 #MSG_TEMP_CALIBRATION c=20 r=1
 #MSG_TEMP_CALIBRATION c=20 r=1
 "Temp. cal.          "
 "Temp. cal.          "
 "Temp Kalib.         "
 "Temp Kalib.         "
@@ -1026,6 +1046,10 @@
 "Temp. cal.   [on]"
 "Temp. cal.   [on]"
 "Temp. Kal.   [an]"
 "Temp. Kal.   [an]"
 
 
+#
+"Select temperature which matches your material."
+"Waehlen Sie die Temperatur, die zu Ihrem Material passt."
+
 #MSG_TEMP_CALIBRATION_OFF c=20 r=1
 #MSG_TEMP_CALIBRATION_OFF c=20 r=1
 "Temp. cal.  [off]"
 "Temp. cal.  [off]"
 "Temp. Kal.  [aus]"
 "Temp. Kal.  [aus]"
@@ -1202,11 +1226,14 @@
 "XYZ calibration failed. Right front calibration point not reachable."
 "XYZ calibration failed. Right front calibration point not reachable."
 "XYZ-Kalibrierung fehlgeschlagen. Rechter vorderer Kalibrierpunkt ist nicht erreichbar."
 "XYZ-Kalibrierung fehlgeschlagen. Rechter vorderer Kalibrierpunkt ist nicht erreichbar."
 
 
-
 #
 #
 "Y distance from min"
 "Y distance from min"
 "Y Entfernung vom Min"
 "Y Entfernung vom Min"
 
 
+#
+"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
+"\x00"
+
 #
 #
 "Y-correct:"
 "Y-correct:"
 "Y-Korrektur:"
 "Y-Korrektur:"

+ 34 - 6
lang/lang_en_es.txt

@@ -72,11 +72,11 @@
 
 
 #MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
 #MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
 "Autoloading filament available only when filament sensor is turned on..."
 "Autoloading filament available only when filament sensor is turned on..."
-"La carga automatica de filamento solo funciona si el sensor de filamento esta activado..."
+"La carga automatica solo funciona si el sensor de filamento esta activado..."
 
 
 #MSG_AUTOLOADING_ENABLED c=20 r=4
 #MSG_AUTOLOADING_ENABLED c=20 r=4
 "Autoloading filament is active, just press the knob and insert filament..."
 "Autoloading filament is active, just press the knob and insert filament..."
-"La carga automatica de filamento esta activada, pulse el dial e inserte el filamento..."
+"La carga automatica esta activada, pulse el dial e inserte el filamento..."
 
 
 #MSG_SELFTEST_AXIS_LENGTH
 #MSG_SELFTEST_AXIS_LENGTH
 "Axis length"
 "Axis length"
@@ -178,6 +178,10 @@
 "Crash det.   [on]"
 "Crash det.   [on]"
 "Det. choque [act]"
 "Det. choque [act]"
 
 
+#
+"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
+"Escoge un filamento para la Calibracion de la Primera Capa y seleccionalo en el menu en pantalla."
+
 #MSG_CRASHDETECT_NA
 #MSG_CRASHDETECT_NA
 "Crash det.  [N/A]"
 "Crash det.  [N/A]"
 "Dec. choque [N/D]"
 "Dec. choque [N/D]"
@@ -482,6 +486,10 @@
 "Last print failures"
 "Last print failures"
 "Ultimas impresiones fallidas"
 "Ultimas impresiones fallidas"
 
 
+#
+"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
+"Si tienes planchas de acero adicionales, calibra sus ajustes en Ajustes - Ajustes HW - Planchas acero."
+
 #
 #
 "Last print"
 "Last print"
 "Ultima impresion"
 "Ultima impresion"
@@ -818,6 +826,18 @@
 "Print FAN"
 "Print FAN"
 "Vent. extr"
 "Vent. extr"
 
 
+#
+"Please insert filament into the extruder, then press the knob to load it."
+"Por favor, coloca el filamento en el extrusor, luego presiona el dial para cargarlo."
+
+#
+"Please insert filament into the first tube of the MMU, then press the knob to load it."
+"Por favor, coloca el filamento en el primer tubo de la MMU, luego pulsa el dial para cargarlo."
+
+#
+"Please load filament first."
+"Por favor, cargar primero el filamento. "
+
 #MSG_PRUSA3D
 #MSG_PRUSA3D
 "prusa3d.com"
 "prusa3d.com"
 "prusa3d.es"
 "prusa3d.es"
@@ -918,10 +938,6 @@
 "Select nozzle preheat temperature which matches your material."
 "Select nozzle preheat temperature which matches your material."
 "Selecciona la temperatura para precalentar la boquilla que se ajuste a tu material. "
 "Selecciona la temperatura para precalentar la boquilla que se ajuste a tu material. "
 
 
-#
-"Select PLA filament:"
-"Seleccionar filamento PLA:"
-
 #MSG_SET_TEMPERATURE c=19 r=1
 #MSG_SET_TEMPERATURE c=19 r=1
 "Set temperature:"
 "Set temperature:"
 "Establecer temp.:"
 "Establecer temp.:"
@@ -1018,6 +1034,10 @@
 "Swapped"
 "Swapped"
 "Intercambiado"
 "Intercambiado"
 
 
+#
+"Select filament:"
+"Selecciona filamento:"
+
 #MSG_TEMP_CALIBRATION c=20 r=1
 #MSG_TEMP_CALIBRATION c=20 r=1
 "Temp. cal.          "
 "Temp. cal.          "
 "Cal. temp. "
 "Cal. temp. "
@@ -1026,6 +1046,10 @@
 "Temp. cal.   [on]"
 "Temp. cal.   [on]"
 "Cal. temp.   [on]"
 "Cal. temp.   [on]"
 
 
+#
+"Select temperature which matches your material."
+"Selecciona la temperatura adecuada a tu material."
+
 #MSG_TEMP_CALIBRATION_OFF c=20 r=1
 #MSG_TEMP_CALIBRATION_OFF c=20 r=1
 "Temp. cal.  [off]"
 "Temp. cal.  [off]"
 "Cal. temp.  [off]"
 "Cal. temp.  [off]"
@@ -1206,6 +1230,10 @@
 "Y distance from min"
 "Y distance from min"
 "Distancia en Y desde el min"
 "Distancia en Y desde el min"
 
 
+#
+"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
+"\x00"
+
 #
 #
 "Y-correct:"
 "Y-correct:"
 "Corregir-Y:"
 "Corregir-Y:"

+ 32 - 4
lang/lang_en_fr.txt

@@ -178,6 +178,10 @@
 "Crash det.   [on]"
 "Crash det.   [on]"
 "Detect.crash [on]"
 "Detect.crash [on]"
 
 
+#
+"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
+"Choisissez un filament pour la Calibration de la Premiere Couche et selectionnez-le depuis le menu a l'ecran."
+
 #MSG_CRASHDETECT_NA
 #MSG_CRASHDETECT_NA
 "Crash det.  [N/A]"
 "Crash det.  [N/A]"
 "Detect.crash[N/A]"
 "Detect.crash[N/A]"
@@ -482,6 +486,10 @@
 "Last print failures"
 "Last print failures"
 "Echecs derniere imp."
 "Echecs derniere imp."
 
 
+#
+"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
+"Si vous avez d'autres feuilles d'acier,  calibrez leurs pre-reglages dans Reglages - Config HW - Feuilles d'acier."
+
 #
 #
 "Last print"
 "Last print"
 "Derniere impres."
 "Derniere impres."
@@ -818,6 +826,18 @@
 "Print FAN"
 "Print FAN"
 "Vent. impr"
 "Vent. impr"
 
 
+#
+"Please insert filament into the extruder, then press the knob to load it."
+"Veuillez inserer le filament dans l'extrudeur, puis appuyez sur le bouton pour le charger."
+
+#
+"Please insert filament into the first tube of the MMU, then press the knob to load it."
+"Veuillez inserer le filament dans le premier tube du MMU, puis appuyez sur le bouton pour le charger."
+
+#
+"Please load filament first."
+"Veuillez d'abord charger un filament."
+
 #MSG_PRUSA3D
 #MSG_PRUSA3D
 "prusa3d.com"
 "prusa3d.com"
 "\x00"
 "\x00"
@@ -918,10 +938,6 @@
 "Select nozzle preheat temperature which matches your material."
 "Select nozzle preheat temperature which matches your material."
 "Selectionnez la temperature de prechauffage de la buse qui correspond a votre materiau."
 "Selectionnez la temperature de prechauffage de la buse qui correspond a votre materiau."
 
 
-#
-"Select PLA filament:"
-"Selectionnez le fil. PLA:"
-
 #MSG_SET_TEMPERATURE c=19 r=1
 #MSG_SET_TEMPERATURE c=19 r=1
 "Set temperature:"
 "Set temperature:"
 "Regler temp.:"
 "Regler temp.:"
@@ -1018,6 +1034,10 @@
 "Swapped"
 "Swapped"
 "Echange"
 "Echange"
 
 
+#
+"Select filament:"
+"Selectionnez le filament:"
+
 #MSG_TEMP_CALIBRATION c=20 r=1
 #MSG_TEMP_CALIBRATION c=20 r=1
 "Temp. cal.          "
 "Temp. cal.          "
 "Calib. Temp."
 "Calib. Temp."
@@ -1026,6 +1046,10 @@
 "Temp. cal.   [on]"
 "Temp. cal.   [on]"
 "Calib. Temp. [on]"
 "Calib. Temp. [on]"
 
 
+#
+"Select temperature which matches your material."
+"Selectionnez la temperature qui correspond a votre materiau."
+
 #MSG_TEMP_CALIBRATION_OFF c=20 r=1
 #MSG_TEMP_CALIBRATION_OFF c=20 r=1
 "Temp. cal.  [off]"
 "Temp. cal.  [off]"
 "Calib. Temp.[off]"
 "Calib. Temp.[off]"
@@ -1206,6 +1230,10 @@
 "Y distance from min"
 "Y distance from min"
 "Distance Y du min"
 "Distance Y du min"
 
 
+#
+"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
+"\x00"
+
 #
 #
 "Y-correct:"
 "Y-correct:"
 "Correct-Y:"
 "Correct-Y:"

+ 32 - 4
lang/lang_en_it.txt

@@ -178,6 +178,10 @@
 "Crash det.   [on]"
 "Crash det.   [on]"
 "Rileva.crash [on]"
 "Rileva.crash [on]"
 
 
+#
+"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
+"Scegli un filamento per la calibrazione del primo strato e selezionalo nel menu sullo schermo."
+
 #MSG_CRASHDETECT_NA
 #MSG_CRASHDETECT_NA
 "Crash det.  [N/A]"
 "Crash det.  [N/A]"
 "Rileva.crash[N/A]"
 "Rileva.crash[N/A]"
@@ -482,6 +486,10 @@
 "Last print failures"
 "Last print failures"
 "Fallimenti ultima stampa"
 "Fallimenti ultima stampa"
 
 
+#
+"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
+"Se hai piastre d'acciaio aggiuntive, calibra i preset in Impostazioni - Setup HW - Piastre in Acciaio."
+
 #
 #
 "Last print"
 "Last print"
 "Ultima stampa"
 "Ultima stampa"
@@ -818,6 +826,18 @@
 "Print FAN"
 "Print FAN"
 "Ventola di stampa"
 "Ventola di stampa"
 
 
+#
+"Please insert filament into the extruder, then press the knob to load it."
+"Inserisci il filamento nell'estrusore, poi premi la manopola per caricarlo."
+
+#
+"Please insert filament into the first tube of the MMU, then press the knob to load it."
+"Per favore inserisci il filamento nel primo tubo del MMU, poi premi la manopola per caricarlo."
+
+#
+"Please load filament first."
+"Per favore prima carica il filamento."
+
 #MSG_PRUSA3D
 #MSG_PRUSA3D
 "prusa3d.com"
 "prusa3d.com"
 "\x00"
 "\x00"
@@ -918,10 +938,6 @@
 "Select nozzle preheat temperature which matches your material."
 "Select nozzle preheat temperature which matches your material."
 "Selezionate la temperatura per il preriscaldamento dell'ugello adatta al vostro materiale."
 "Selezionate la temperatura per il preriscaldamento dell'ugello adatta al vostro materiale."
 
 
-#
-"Select PLA filament:"
-"Selezionate filamento PLA:"
-
 #MSG_SET_TEMPERATURE c=19 r=1
 #MSG_SET_TEMPERATURE c=19 r=1
 "Set temperature:"
 "Set temperature:"
 "Imposta temperatura:"
 "Imposta temperatura:"
@@ -1018,6 +1034,10 @@
 "Swapped"
 "Swapped"
 "Scambiato"
 "Scambiato"
 
 
+#
+"Select filament:"
+"Seleziona il filamento:"
+
 #MSG_TEMP_CALIBRATION c=20 r=1
 #MSG_TEMP_CALIBRATION c=20 r=1
 "Temp. cal.          "
 "Temp. cal.          "
 "Calib. temp. "
 "Calib. temp. "
@@ -1026,6 +1046,10 @@
 "Temp. cal.   [on]"
 "Temp. cal.   [on]"
 "Calib. temp. [on]"
 "Calib. temp. [on]"
 
 
+#
+"Select temperature which matches your material."
+"Seleziona la temperatura appropriata per il tuo materiale."
+
 #MSG_TEMP_CALIBRATION_OFF c=20 r=1
 #MSG_TEMP_CALIBRATION_OFF c=20 r=1
 "Temp. cal.  [off]"
 "Temp. cal.  [off]"
 "Calib. temp.[off]"
 "Calib. temp.[off]"
@@ -1206,6 +1230,10 @@
 "Y distance from min"
 "Y distance from min"
 "Distanza Y dal min"
 "Distanza Y dal min"
 
 
+#
+"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
+"\x00"
+
 #
 #
 "Y-correct:"
 "Y-correct:"
 "Correzione-Y:"
 "Correzione-Y:"

+ 33 - 5
lang/lang_en_pl.txt

@@ -72,7 +72,7 @@
 
 
 #MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
 #MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
 "Autoloading filament available only when filament sensor is turned on..."
 "Autoloading filament available only when filament sensor is turned on..."
-"Autoladowanie filamentu dostepne tylko gdy czujnik filamentu jest wlaczony..."
+"Autoladowanie fil. dostepne tylko gdy czujnik filamentu jest wlaczony..."
 
 
 #MSG_AUTOLOADING_ENABLED c=20 r=4
 #MSG_AUTOLOADING_ENABLED c=20 r=4
 "Autoloading filament is active, just press the knob and insert filament..."
 "Autoloading filament is active, just press the knob and insert filament..."
@@ -178,6 +178,10 @@
 "Crash det.   [on]"
 "Crash det.   [on]"
 "Wykr.zderzen [wl]"
 "Wykr.zderzen [wl]"
 
 
+#
+"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
+"Wybierz filament do Kalibracji Pierwszej Warstwy i potwierdz w menu ekranowym."
+
 #MSG_CRASHDETECT_NA
 #MSG_CRASHDETECT_NA
 "Crash det.  [N/A]"
 "Crash det.  [N/A]"
 "Wykr.zderzen[N/D]"
 "Wykr.zderzen[N/D]"
@@ -482,6 +486,10 @@
 "Last print failures"
 "Last print failures"
 "Ostatnie bledy druku"
 "Ostatnie bledy druku"
 
 
+#
+"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
+"Jesli masz dodatkowe plyty stalowe, to skalibruj ich ustawienia w menu Ustawienia - Ustawienia HW - Plyty stalowe."
+
 #
 #
 "Last print"
 "Last print"
 "Ost. wydruk"
 "Ost. wydruk"
@@ -818,6 +826,18 @@
 "Print FAN"
 "Print FAN"
 "WentWydruk"
 "WentWydruk"
 
 
+#
+"Please insert filament into the extruder, then press the knob to load it."
+"Wsun filament do ekstrudera i nacisnij pokretlo, aby go zaladowac."
+
+#
+"Please insert filament into the first tube of the MMU, then press the knob to load it."
+"Wsun filament do pierwszego kanalu w MMU2 i nacisnij pokretlo, aby go zaladowac."
+
+#
+"Please load filament first."
+"Najpierw zaladuj filament."
+
 #MSG_PRUSA3D
 #MSG_PRUSA3D
 "prusa3d.com"
 "prusa3d.com"
 "\x00"
 "\x00"
@@ -918,10 +938,6 @@
 "Select nozzle preheat temperature which matches your material."
 "Select nozzle preheat temperature which matches your material."
 "Wybierz temperature grzania dyszy odpowiednia dla materialu."
 "Wybierz temperature grzania dyszy odpowiednia dla materialu."
 
 
-#
-"Select PLA filament:"
-"Wybierz filament PLA:"
-
 #MSG_SET_TEMPERATURE c=19 r=1
 #MSG_SET_TEMPERATURE c=19 r=1
 "Set temperature:"
 "Set temperature:"
 "Ustaw temperature:"
 "Ustaw temperature:"
@@ -1018,6 +1034,10 @@
 "Swapped"
 "Swapped"
 "Zamieniono"
 "Zamieniono"
 
 
+#
+"Select filament:"
+"Wybierz filament:"
+
 #MSG_TEMP_CALIBRATION c=20 r=1
 #MSG_TEMP_CALIBRATION c=20 r=1
 "Temp. cal.          "
 "Temp. cal.          "
 "Kalibracja temp."
 "Kalibracja temp."
@@ -1026,6 +1046,10 @@
 "Temp. cal.   [on]"
 "Temp. cal.   [on]"
 "Kalibr.temp. [wl]"
 "Kalibr.temp. [wl]"
 
 
+#
+"Select temperature which matches your material."
+"Wybierz temperature, ktora odpowiada Twojemu filamentowi."
+
 #MSG_TEMP_CALIBRATION_OFF c=20 r=1
 #MSG_TEMP_CALIBRATION_OFF c=20 r=1
 "Temp. cal.  [off]"
 "Temp. cal.  [off]"
 "Kalibr.temp.[wyl]"
 "Kalibr.temp.[wyl]"
@@ -1206,6 +1230,10 @@
 "Y distance from min"
 "Y distance from min"
 "Dystans od 0 w osi Y"
 "Dystans od 0 w osi Y"
 
 
+#
+"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
+"\x00"
+
 #
 #
 "Y-correct:"
 "Y-correct:"
 "Korekcja-Y:"
 "Korekcja-Y:"