Merge branch 'MK3' into MK3_BED_LEVELING_PWM

This commit is contained in:
Alex Voinea 2019-11-13 14:32:57 +02:00
commit e559a6b67f
19 changed files with 415 additions and 155 deletions

14
.editorconfig Normal file
View file

@ -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

View file

@ -16,8 +16,8 @@ extern uint16_t nPrinterType;
extern PGM_P sPrinterName;
// 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.
// The firmware should only be checked into github with this symbol.
#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 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
#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,
};
// 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 "thermistortables.h"

View file

@ -358,9 +358,6 @@ extern int fan_speed[2];
// Handling multiple extruders pins
extern uint8_t active_extruder;
#endif
//Long pause
extern unsigned long pause_time;
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 load_filament_final_feed();
void marlin_wait_for_click();
void marlin_rise_z(void);
void raise_z_above(float target, bool plan=true);
#endif

View file

@ -1242,8 +1242,8 @@ void setup()
// Once a firmware boots up, it forces at least a language selection, which changes
// EEPROM_LANG to number lower than 0x0ff.
// 1) Set a high power mode.
eeprom_update_byte((uint8_t*)EEPROM_SILENT, SILENT_MODE_OFF);
#ifdef TMC2130
eeprom_write_byte((uint8_t*)EEPROM_SILENT, 0);
tmc2130_mode = TMC2130_MODE_NORMAL;
#endif //TMC2130
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
bool calibrate_z_auto()
{
@ -2433,6 +2479,9 @@ void ramming() {
#ifdef TMC2130
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;
silent = eeprom_read_byte((uint8_t*)EEPROM_SILENT);
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 (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();
}
#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
if(home_z) {
#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();
#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 (!(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.
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_reset();
if (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);
#ifdef DEBUG_BUILD
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;
}
//! @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()
{
printf_P(PSTR("gcode_M701 begin\n"));
@ -3177,7 +3210,7 @@ void gcode_M701()
plan_buffer_line_curposXYZE(400 / 60, active_extruder); //fast sequence
st_synchronize();
marlin_rise_z();
raise_z_above(MIN_Z_FOR_LOAD, false);
current_position[E_AXIS] += 30;
plan_buffer_line_curposXYZE(400 / 60, active_extruder); //fast sequence
@ -7604,27 +7637,33 @@ Sigma_Exit:
case 350:
{
#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 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_new / res);
cs.axis_steps_per_unit[axis] *= fac;
position[E_AXIS] *= fac;
}
else
{
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;
plan_buffer_line_curposXYZE(50, active_extruder);
// Turn off the print fan
// Turn off the hotends and print fan
setAllTargetHotends(0);
fanSpeed = 0;
st_synchronize();
}
void serialecho_temperatures() {

View file

@ -137,8 +137,8 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m
SERIAL_ECHOPGM("Access date: ");
MYSERIAL.println(p.lastAccessDate);
SERIAL_ECHOLNPGM("");*/
creationDate = p.creationDate;
creationTime = p.creationTime;
modificationDate = p.lastWriteDate;
modificationTime = p.lastWriteTime;
//writeDate = p.lastAccessDate;
if (match != NULL) {
if (strcasecmp(match, filename) == 0) return;
@ -763,8 +763,8 @@ void CardReader::presort() {
#endif
#elif SDSORT_USES_STACK
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
// 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
// slow but is safest and uses minimal RAM.
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
position = 0;
@ -811,8 +811,8 @@ void CardReader::presort() {
#else
// Copy filenames into the static array
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
strcpy(sortshort[i], filename);
#endif
@ -837,12 +837,12 @@ void CardReader::presort() {
// Compare names from the array or just the two buffered names
#if SDSORT_USES_RAM
#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
#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
@ -893,8 +893,8 @@ void CardReader::presort() {
counter++;
getfilename_simple(positions[o1]);
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
bool dir1 = filenameIsDir;
#endif

View file

@ -77,7 +77,7 @@ public:
bool cardOK ;
bool paused ;
char filename[13];
uint16_t creationTime, creationDate;
uint16_t modificationTime, modificationDate;
uint32_t cluster, position;
char longFilename[LONG_FILENAME_LENGTH];
bool filenameIsDir;
@ -114,8 +114,8 @@ private:
#endif
#elif !SDSORT_USES_STACK
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
// Folder sorting uses an isDir array when caching items.

View file

@ -1355,7 +1355,7 @@ void lcd_mmu_load_to_nozzle(uint8_t filament_nr)
manage_response(true, true, MMU_TCODE_MOVE);
mmu_continue_loading(false);
mmu_extruder = tmp_extruder; //filament change is finished
marlin_rise_z();
raise_z_above(MIN_Z_FOR_LOAD, false);
mmu_load_to_nozzle();
load_filament_final_feed();
st_synchronize();
@ -1556,19 +1556,23 @@ void mmu_continue_loading(bool blocking)
increment_load_fail();
// no break
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
}
mmu_command(MmuCmd::T0 + tmp_extruder);
manage_response(true, true, MMU_TCODE_MOVE);
success = load_more();
if (success) success = can_load();
++retry; // overflow not handled, as it is not dangerous.
if (retry >= max_retry) state = Ls::Unload;
break;
case Ls::Unload:
stop_and_save_print_to_ram(0, 0);

View file

@ -1564,10 +1564,6 @@ void st_current_init() //Initialize Digipot Motor Current
{
#ifdef MOTOR_CURRENT_PWM_XY_PIN
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;
pinMode(MOTOR_CURRENT_PWM_XY_PIN, OUTPUT);
pinMode(MOTOR_CURRENT_PWM_Z_PIN, OUTPUT);

View file

@ -505,7 +505,10 @@ void checkFanSpeed()
// we may even send some info to the LCD from here
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)) {
fan_speed_errors[0] = 0;
fanSpeedError(0); //extruder fan

View file

@ -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)
{
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 hstrt = tmc2130_chopper_config[axis].hstr; //initial 4, modified to 5
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 mres = 8; while (mres && (usteps >>= 1)) mres--;
uint8_t mres = 8; while (usteps >>= 1) mres--;
return mres;
}

View file

@ -310,18 +310,24 @@ bool bSettings; // flag (i.e. 'fake parameter'
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;
int enc_dif = lcd_encoder_diff;
int enc_dif = lcd_encoder_diff / ENCODER_PULSES_PER_STEP;
uint8_t n = LCD_WIDTH - 1;
for(uint_least8_t g = 0; g<4;g++){
lcd_set_cursor(0, g);
lcd_print(' ');
}
lcd_set_cursor(0, row);
lcd_print('>');
if (longFilename[0] == '\0')
{
longFilename = filename;
}
int i = 1;
int j = 0;
char* longFilenameTMP = longFilename;
@ -339,7 +345,7 @@ static void lcd_implementation_drawmenu_sdfile_selected(uint8_t row, char* longF
n = LCD_WIDTH - 1;
for(int g = 0; g<300 ;g++){
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 + LCD_WIDTH - 2) = '\0';
i = 1;
@ -537,7 +543,7 @@ static uint8_t menu_item_sdfile(const char*
if (lcd_draw_update)
{
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
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 (strcmp(longFilenameOLD, card.longFilename) != 0)
if (strcmp(longFilenameOLD, (card.longFilename[0] ? card.longFilename : card.filename)) != 0)
{
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;
}
}
@ -760,16 +766,16 @@ void lcdui_print_status_line(void)
}
else if ((IS_SD_PRINTING) && (custom_message_type == CustomMsg::Status))
{ // If printing from SD, show what we are printing
if(strlen(card.longFilename) > LCD_WIDTH)
if(strlen(longFilenameOLD) > LCD_WIDTH)
{
int inters = 0;
int gh = scrollstuff;
while (((gh - scrollstuff) < LCD_WIDTH) && (inters == 0))
{
if (card.longFilename[gh] == '\0')
if (longFilenameOLD[gh] == '\0')
{
lcd_set_cursor(gh - scrollstuff, 3);
lcd_print(card.longFilename[gh - 1]);
lcd_print(longFilenameOLD[gh - 1]);
scrollstuff = 0;
gh = scrollstuff;
inters = 1;
@ -777,7 +783,7 @@ void lcdui_print_status_line(void)
else
{
lcd_set_cursor(gh - scrollstuff, 3);
lcd_print(card.longFilename[gh - 1]);
lcd_print(longFilenameOLD[gh - 1]);
gh++;
}
}
@ -785,7 +791,7 @@ void lcdui_print_status_line(void)
}
else
{
lcd_print(longFilenameOLD);
lcd_printf_P(PSTR("%-20s"), longFilenameOLD);
}
}
else
@ -1072,12 +1078,8 @@ void lcd_commands()
if (!blocks_queued() && !homing_flag)
{
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();
stop_and_save_print_to_ram(0.0,0.0);
setAllTargetHotends(0);
long_pause();
isPrintPaused = true;
if (LcdCommands::Idle == lcd_commands_type)
{
@ -1843,8 +1845,8 @@ static void lcd_menu_fails_stats_total()
//! @code{.unparsed}
//! |01234567890123456789|
//! |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
//! ----------------------
//! @endcode
@ -1890,6 +1892,7 @@ static void lcd_menu_fails_stats()
}
#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
//!
@ -1900,9 +1903,9 @@ static void lcd_menu_fails_stats()
//! @code{.unparsed}
//! |01234567890123456789|
//! |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
//! | Filam. runouts: 000| c=14 r=1
//! | Filam. runouts 000| c=14 r=1
//! ----------------------
//! @endcode
//! @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);
uint16_t filamentTotal = eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT);
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
static void lcd_menu_fails_stats()
@ -2371,9 +2376,11 @@ void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
{
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;
}
@ -3446,6 +3453,8 @@ void lcd_wait_for_cool_down() {
lcd_set_custom_characters_degree();
setAllTargetHotends(0);
setTargetBed(0);
int fanSpeedBckp = fanSpeed;
fanSpeed = 255;
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
@ -3464,6 +3473,7 @@ void lcd_wait_for_cool_down() {
delay_keep_alive(1000);
serialecho_temperatures();
}
fanSpeed = fanSpeedBckp;
lcd_set_custom_characters_arrows();
lcd_update_enable(true);
}
@ -4929,12 +4939,12 @@ static void lcd_wizard_load()
{
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;
}
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_clear();
@ -4958,7 +4968,7 @@ static void wizard_lay1cal_message(bool cold)
if (mmu_enabled)
{
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)
{
@ -4966,7 +4976,7 @@ static void wizard_lay1cal_message(bool cold)
_i("Select temperature which matches your material."));
}
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)
@ -5094,7 +5104,7 @@ void lcd_wizard(WizState state)
setTargetBed(PLA_PREHEAT_HPB_TEMP);
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
{
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
{
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;
}
break;
@ -6357,6 +6367,8 @@ void unload_filament()
custom_message_type = CustomMsg::FilamentLoading;
lcd_setstatuspgm(_T(MSG_UNLOADING_FILAMENT));
raise_z_above(MIN_Z_FOR_UNLOAD);
// extr_unload2();
current_position[E_AXIS] -= 45;

View file

@ -51,7 +51,7 @@ if ! [ -e lang_add.txt ]; then
fi
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 "$new_s"
echo

View file

@ -133,6 +133,9 @@
#MSG_CRASHDETECT_ON
"Crash det. [on]"
#
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
#MSG_CRASHDETECT_NA
"Crash det. [N/A]"
@ -361,6 +364,9 @@
#
"Last print failures"
#
"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
#
"Last print"
@ -613,6 +619,15 @@
#
"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
"prusa3d.com"
@ -688,9 +703,6 @@
#
"Select nozzle preheat temperature which matches your material."
#
"Select PLA filament:"
#MSG_SET_TEMPERATURE c=19 r=1
"Set temperature:"
@ -763,12 +775,18 @@
#MSG_SELFTEST_SWAPPED
"Swapped"
#
"Select filament:"
#MSG_TEMP_CALIBRATION c=20 r=1
"Temp. cal. "
#MSG_TEMP_CALIBRATION_ON c=20 r=1
"Temp. cal. [on]"
#
"Select temperature which matches your material."
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
"Temp. cal. [off]"
@ -904,6 +922,9 @@
#
"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:"

View file

@ -72,7 +72,7 @@
#MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
"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
"Autoloading filament is active, just press the knob and insert filament..."
@ -178,6 +178,10 @@
"Crash det. [on]"
"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
"Crash det. [N/A]"
"\x00"
@ -482,6 +486,10 @@
"Last print failures"
"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"
"Posledni tisk"
@ -818,6 +826,18 @@
"Print FAN"
"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
"prusa3d.com"
"\x00"
@ -918,10 +938,6 @@
"Select nozzle preheat temperature which matches your material."
"Vyberte teplotu predehrati trysky ktera odpovida vasemu materialu."
#
"Select PLA filament:"
"Vyberte PLA filament:"
#MSG_SET_TEMPERATURE c=19 r=1
"Set temperature:"
"Nastavte teplotu:"
@ -1018,6 +1034,10 @@
"Swapped"
"Prohozene"
#
"Select filament:"
"Zvolte filament:"
#MSG_TEMP_CALIBRATION c=20 r=1
"Temp. cal. "
"Tepl. kal. "
@ -1026,6 +1046,10 @@
"Temp. cal. [on]"
"Tepl. kal. [zap]"
#
"Select temperature which matches your material."
"Zvolte teplotu, ktera odpovida vasemu materialu."
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
"Temp. cal. [off]"
"Tepl. kal. [vyp]"
@ -1206,6 +1230,10 @@
"Y distance from 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:"
"Korekce Y:"

View file

@ -72,7 +72,7 @@
#MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
"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
"Autoloading filament is active, just press the knob and insert filament..."
@ -178,6 +178,10 @@
"Crash det. [on]"
"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
"Crash det. [N/A]"
"Crash Erk. [nv]"
@ -482,6 +486,10 @@
"Last print failures"
"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"
"Letzter Druck"
@ -818,6 +826,18 @@
"Print FAN"
"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
"prusa3d.com"
"\x00"
@ -918,10 +938,6 @@
"Select nozzle preheat temperature which matches your material."
"Bitte Vorheiztemperatur auswaehlen, die Ihrem Material entspricht."
#
"Select PLA filament:"
"PLA Filament auswaehlen:"
#MSG_SET_TEMPERATURE c=19 r=1
"Set temperature:"
"Temp. einstellen:"
@ -1018,6 +1034,10 @@
"Swapped"
"Ausgetauscht"
#
"Select filament:"
"Filament auswaehlen:"
#MSG_TEMP_CALIBRATION c=20 r=1
"Temp. cal. "
"Temp Kalib. "
@ -1026,6 +1046,10 @@
"Temp. cal. [on]"
"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
"Temp. cal. [off]"
"Temp. Kal. [aus]"
@ -1202,11 +1226,14 @@
"XYZ calibration failed. Right front calibration point not reachable."
"XYZ-Kalibrierung fehlgeschlagen. Rechter vorderer Kalibrierpunkt ist nicht erreichbar."
#
"Y distance from 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-Korrektur:"

View file

@ -72,11 +72,11 @@
#MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
"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
"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
"Axis length"
@ -178,6 +178,10 @@
"Crash det. [on]"
"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
"Crash det. [N/A]"
"Dec. choque [N/D]"
@ -482,6 +486,10 @@
"Last print failures"
"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"
"Ultima impresion"
@ -818,6 +826,18 @@
"Print FAN"
"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
"prusa3d.com"
"prusa3d.es"
@ -918,10 +938,6 @@
"Select nozzle preheat temperature which matches your 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
"Set temperature:"
"Establecer temp.:"
@ -1018,6 +1034,10 @@
"Swapped"
"Intercambiado"
#
"Select filament:"
"Selecciona filamento:"
#MSG_TEMP_CALIBRATION c=20 r=1
"Temp. cal. "
"Cal. temp. "
@ -1026,6 +1046,10 @@
"Temp. cal. [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
"Temp. cal. [off]"
"Cal. temp. [off]"
@ -1206,6 +1230,10 @@
"Y distance from 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:"
"Corregir-Y:"

View file

@ -178,6 +178,10 @@
"Crash det. [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
"Crash det. [N/A]"
"Detect.crash[N/A]"
@ -482,6 +486,10 @@
"Last print failures"
"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"
"Derniere impres."
@ -818,6 +826,18 @@
"Print FAN"
"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
"prusa3d.com"
"\x00"
@ -918,10 +938,6 @@
"Select nozzle preheat temperature which matches your material."
"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
"Set temperature:"
"Regler temp.:"
@ -1018,6 +1034,10 @@
"Swapped"
"Echange"
#
"Select filament:"
"Selectionnez le filament:"
#MSG_TEMP_CALIBRATION c=20 r=1
"Temp. cal. "
"Calib. Temp."
@ -1026,6 +1046,10 @@
"Temp. cal. [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
"Temp. cal. [off]"
"Calib. Temp.[off]"
@ -1206,6 +1230,10 @@
"Y distance from 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:"
"Correct-Y:"

View file

@ -178,6 +178,10 @@
"Crash det. [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
"Crash det. [N/A]"
"Rileva.crash[N/A]"
@ -482,6 +486,10 @@
"Last print failures"
"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"
"Ultima stampa"
@ -818,6 +826,18 @@
"Print FAN"
"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
"prusa3d.com"
"\x00"
@ -918,10 +938,6 @@
"Select nozzle preheat temperature which matches your material."
"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
"Set temperature:"
"Imposta temperatura:"
@ -1018,6 +1034,10 @@
"Swapped"
"Scambiato"
#
"Select filament:"
"Seleziona il filamento:"
#MSG_TEMP_CALIBRATION c=20 r=1
"Temp. cal. "
"Calib. temp. "
@ -1026,6 +1046,10 @@
"Temp. cal. [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
"Temp. cal. [off]"
"Calib. temp.[off]"
@ -1206,6 +1230,10 @@
"Y distance from 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:"
"Correzione-Y:"

View file

@ -72,7 +72,7 @@
#MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
"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
"Autoloading filament is active, just press the knob and insert filament..."
@ -178,6 +178,10 @@
"Crash det. [on]"
"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
"Crash det. [N/A]"
"Wykr.zderzen[N/D]"
@ -482,6 +486,10 @@
"Last print failures"
"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"
"Ost. wydruk"
@ -818,6 +826,18 @@
"Print FAN"
"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
"prusa3d.com"
"\x00"
@ -918,10 +938,6 @@
"Select nozzle preheat temperature which matches your material."
"Wybierz temperature grzania dyszy odpowiednia dla materialu."
#
"Select PLA filament:"
"Wybierz filament PLA:"
#MSG_SET_TEMPERATURE c=19 r=1
"Set temperature:"
"Ustaw temperature:"
@ -1018,6 +1034,10 @@
"Swapped"
"Zamieniono"
#
"Select filament:"
"Wybierz filament:"
#MSG_TEMP_CALIBRATION c=20 r=1
"Temp. cal. "
"Kalibracja temp."
@ -1026,6 +1046,10 @@
"Temp. cal. [on]"
"Kalibr.temp. [wl]"
#
"Select temperature which matches your material."
"Wybierz temperature, ktora odpowiada Twojemu filamentowi."
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
"Temp. cal. [off]"
"Kalibr.temp.[wyl]"
@ -1206,6 +1230,10 @@
"Y distance from min"
"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:"
"Korekcja-Y:"