From b90e21d0a1c4a2f6c15a9e1deb56b1e13924d2a2 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Tue, 17 Oct 2017 08:43:55 +0200 Subject: [PATCH 1/5] Filament runout sensor init --- Firmware/Configuration.h | 19 +++- Firmware/Marlin.h | 5 + Firmware/Marlin_main.cpp | 57 ++++++++-- Firmware/language_en.h | 7 ++ Firmware/pins.h | 14 ++- Firmware/ultralcd.cpp | 100 ++++++++++++++++-- .../variants/1_75mm_MK1-RAMBo10a-E3Dv6full.h | 5 +- .../variants/1_75mm_MK1-RAMBo13a-E3Dv6full.h | 5 +- ...5mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h | 5 +- ...5mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h | 5 +- .../variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h | 5 +- .../variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h | 5 +- 12 files changed, 202 insertions(+), 30 deletions(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 7b224861a..7ce27a0e7 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -51,6 +51,23 @@ #define EEPROM_XYZ_CAL_SKEW (EEPROM_SD_SORT - 4) #define EEPROM_WIZARD_ACTIVE (EEPROM_XYZ_CAL_SKEW - 1) +// addition for hyperfine tuning +/* +#define EEPROM_BED_CORRECTION_FRONT_LEFT (EEPROM_WIZARD_ACTIVE - 1) +#define EEPROM_BED_CORRECTION_FRONT_RIGHT (EEPROM_BED_CORRECTION_FRONT_LEFT - 1) +#define EEPROM_BED_CORRECTION_REAR_RIGHT (EEPROM_BED_CORRECTION_FRONT_RIGHT - 1) +#define EEPROM_BED_CORRECTION_REAR_LEFT (EEPROM_BED_CORRECTION_REAR_RIGHT - 1) + + +// FILAMENT_RUNOUT_SENSOR +#define EEPROM_FIL_RUNOUT_ACTIVE (EEPROM_BED_CORRECTION_REAR_LEFT - 1) //0 - filament runout sensor disabled; 1 - .. activated +*/ +#define EEPROM_FIL_RUNOUT_ACTIVE (EEPROM_WIZARD_ACTIVE - 1) //0 - filament runout sensor disabled; 1 - .. activated +// +#define EEPROM_FIL_RUNOUT_INVERTING (EEPROM_FIL_RUNOUT_ACTIVE - 1) //0 - filament runout sensor inverted; 1 - .. normal +#define EEPROM_ENDSTOPPULLUP_FIL_RUNOUT (EEPROM_FIL_RUNOUT_INVERTING - 1) //0 - filament runout sensor pullup; 0 - .. normal +// end FILAMENT_RUNOUT_SENSOR + // Currently running firmware, each digit stored as uint16_t. // The flavor differentiates a dev, alpha, beta, release candidate or a release version. #define EEPROM_FIRMWARE_VERSION_END (FW_PRUSA3D_MAGIC_LEN+8) @@ -698,7 +715,7 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of * Note may require analog pins to be defined for different motherboards **********************************************************************/ // Uncomment below to enable -//#define FILAMENT_SENSOR +#define FILAMENT_SENSOR #define FILAMENT_SENSOR_EXTRUDER_NUM 0 //The number of the extruder that has the filament sensor (0,1,2) #define MEASUREMENT_DELAY_CM 14 //measurement delay in cm. This is the distance from filament sensor to middle of barrel diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 76274b292..733784698 100644 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -294,6 +294,11 @@ extern int bowden_length[4]; extern bool is_usb_printing; extern bool homing_flag; extern bool temp_cal_active; +// FILAMENT_RUNOUT_SENSOR +extern bool fil_runout_active; +extern bool FIL_RUNOUT_INVERTING; +extern bool ENDSTOPPULLUP_FIL_RUNOUT; +// end FILAMENT_RUNOUT_SENSOR extern bool loading_flag; extern unsigned int usb_printing_counter; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index d2e098205..e58d2fba6 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -257,6 +257,13 @@ bool homing_flag = false; bool temp_cal_active = false; +// FILAMENT_RUNOUT_SENSOR +bool fil_runout_active = false; +bool FIL_RUNOUT_INVERTING = false; +bool fil_funout_inv = false; +bool ENDSTOPPULLUP_FIL_RUNOUT = false; +// end FILAMENT_RUNOUT_SENSOR + unsigned long kicktime = millis()+100000; unsigned int usb_printing_counter; @@ -1270,6 +1277,15 @@ void setup() } #endif //DEBUG_DISABLE_STARTMSGS + +// FILAMENT_RUNOUT_SENSOR +#ifdef FILAMENT_RUNOUT_SENSOR + fil_runout_active = eeprom_read_byte((uint8_t*)EEPROM_FIL_RUNOUT_ACTIVE); + FIL_RUNOUT_INVERTING = eeprom_read_byte((uint8_t*)EEPROM_FIL_RUNOUT_INVERTING); + ENDSTOPPULLUP_FIL_RUNOUT = eeprom_read_byte((uint8_t*)EEPROM_ENDSTOPPULLUP_FIL_RUNOUT); +#endif +// end FILAMENT_RUNOUT_SENSOR + lcd_update_enable(true); // Store the currently running firmware into an eeprom, @@ -2303,8 +2319,13 @@ bool gcode_M45(bool onlyZ) { void process_commands() { - #ifdef FILAMENT_RUNOUT_SUPPORT - SET_INPUT(FR_SENS); + #ifdef FILAMENT_RUNOUT_SENSOR + SET_INPUT(FIL_RUNOUT_PIN); + if (ENDSTOPPULLUP_FIL_RUNOUT) { + pinMode(FIL_RUNOUT_PIN, INPUT_PULLUP); + } else { + pinMode(FIL_RUNOUT_PIN, INPUT); + } #endif #ifdef CMDBUFFER_DEBUG @@ -2454,11 +2475,11 @@ void process_commands() case 1: // G1 if(Stopped == false) { - #ifdef FILAMENT_RUNOUT_SUPPORT - - if(READ(FR_SENS)){ - - feedmultiplyBckp=feedmultiply; + #ifdef FILAMENT_RUNOUT_SENSOR + if(((READ(FIL_RUNOUT_PIN) ^ FIL_RUNOUT_INVERTING) == 0) && fil_runout_active) { + //enqueue_and_echo_commands_P(PSTR(FILAMENT_RUNOUT_SCRIPT)); + enquecommand_front_P((PSTR(FILAMENT_RUNOUT_SCRIPT))); +/* feedmultiplyBckp=feedmultiply; float target[4]; float lastpos[4]; target[X_AXIS]=current_position[X_AXIS]; @@ -2477,6 +2498,9 @@ void process_commands() target[Z_AXIS]+= FILAMENTCHANGE_ZADD ; + if(target[Z_AXIS] < 20){ + target[Z_AXIS]+= 20 ; + } plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], 300, active_extruder); @@ -2620,7 +2644,7 @@ void process_commands() sprintf_P(cmd, PSTR("M220 S%i"), feedmultiplyBckp); enquecommand(cmd); - +*/ } @@ -4731,7 +4755,22 @@ Sigma_Exit: } SERIAL_PROTOCOLLN(""); #endif - break; +// FILAMENT_RUNOUT_SENSOR +// #if fil_runout_active && defined(FIL_RUNOUT_PIN) && FIL_RUNOUT_PIN > -1 + #if defined(FIL_RUNOUT_PIN) && FIL_RUNOUT_PIN > -1 + if (fil_runout_active == true) { + SERIAL_PROTOCOLRPGM(MSG_FIL_RUNOUT_SETTINGS); + if(READ(FIL_RUNOUT_PIN)^FIL_RUNOUT_INVERTING){ + SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_HIT); + }else{ + SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN); + } + SERIAL_PROTOCOLLN(""); + } + #endif +// end FILAMENT_RUNOUT_SENSOR + + break; //TODO: update for all axis, use for loop #ifdef BLINKM case 150: // M150 diff --git a/Firmware/language_en.h b/Firmware/language_en.h index 561567df6..40e021dc3 100644 --- a/Firmware/language_en.h +++ b/Firmware/language_en.h @@ -341,3 +341,10 @@ #define(lenght=20, lines=2) MSG_PLA_FILAMENT_LOADED "Is PLA filament loaded?" #define(lenght=20, lines=4) MSG_PLEASE_LOAD_PLA "Please load PLA filament first." #define(length=20, lines=8) MSG_FILE_CNT "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100." +#define(length=20) MSG_FIL_RUNOUT_SETTINGS "Fil.Runout S " +#define(length=20) MSG_FIL_RUNOUT_ACTIVE_ON "Fil.Runout S [ON]" +#define(length=20) MSG_FIL_RUNOUT_ACTIVE_OFF "Fil.Runout S[OFF]" +#define(length=20) MSG_ENDSTOPPULLUP_FIL_RUNOUT_ON "Fil.RSPullup [ON]" +#define(length=20) MSG_ENDSTOPPULLUP_FIL_RUNOUT_OFF "Fil.RSPullup[OFF]" +#define(length=20) MSG_FIL_RUNOUT_INVERTING_OFF "Fil.RS [S to VCC]" +#define(length=20) MSG_FIL_RUNOUT_INVERTING_ON "Fil.RS [S to GND]" diff --git a/Firmware/pins.h b/Firmware/pins.h index cfd673397..f6fd9bdb4 100644 --- a/Firmware/pins.h +++ b/Firmware/pins.h @@ -18,9 +18,11 @@ #error Oops! Make sure you have 'Arduino Mega 2560' selected from the 'Tools -> Boards' menu. #endif - - #define FR_SENS 21 - +// FILAMENT_RUNOUT_SUPPORT +#ifdef FILAMENT_RUNOUT_SUPPORT + #define FIL_RUNOUT_PIN 24 +#endif +// end FILAMENT_RUNOUT_SUPPORT #define X_STEP_PIN 37 #define X_DIR_PIN 48 @@ -223,7 +225,11 @@ #error Oops! Make sure you have 'Arduino Mega 2560' selected from the 'Tools -> Boards' menu. #endif - #define FR_SENS 21 +// FILAMENT_RUNOUT_SUPPORT +#ifdef FILAMENT_RUNOUT_SUPPORT + #define FIL_RUNOUT_PIN 24 +#endif +// end FILAMENT_RUNOUT_SUPPORT #ifdef SNMM diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 42539e665..f7d7756fb 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -96,6 +96,14 @@ int8_t SDscrool = 0; int8_t SilentModeMenu = 0; +// FILAMENT_RUNOUT_SENSOR +#ifdef FILAMENT_RUNOUT_SENSOR +static void lcd_fil_runout_settings_menu(); +static void lcd_fil_runout_active_set(); +static void lcd_fil_runout_inverting_set(); +static void lcd_endstoppullup_fil_runout_set(); +#endif +// end FILAMENT_RUNOUT_SENSOR #ifdef SNMM uint8_t snmm_extruder = 0; #endif @@ -2637,13 +2645,19 @@ void lcd_bed_calibration_show_result(BedSkewOffsetDetectionResultType result, ui static void lcd_show_end_stops() { lcd.setCursor(0, 0); - lcd_printPGM((PSTR("End stops diag"))); + lcd_printPGM((PSTR("End stops/sens diag"))); lcd.setCursor(0, 1); - lcd_printPGM(((READ(X_MIN_PIN) ^ X_MIN_ENDSTOP_INVERTING) == 1) ? (PSTR("X1")) : (PSTR("X0"))); + lcd_printPGM(((READ(X_MIN_PIN) ^ X_MIN_ENDSTOP_INVERTING) == 1) ? (PSTR("X:1")) : (PSTR("X:0"))); lcd.setCursor(0, 2); - lcd_printPGM(((READ(Y_MIN_PIN) ^ Y_MIN_ENDSTOP_INVERTING) == 1) ? (PSTR("Y1")) : (PSTR("Y0"))); + lcd_printPGM(((READ(Y_MIN_PIN) ^ Y_MIN_ENDSTOP_INVERTING) == 1) ? (PSTR("Y:1")) : (PSTR("Y:0"))); lcd.setCursor(0, 3); - lcd_printPGM(((READ(Z_MIN_PIN) ^ Z_MIN_ENDSTOP_INVERTING) == 1) ? (PSTR("Z1")) : (PSTR("Z0"))); + lcd_printPGM(((READ(Z_MIN_PIN) ^ Z_MIN_ENDSTOP_INVERTING) == 1) ? (PSTR("Z:1")) : (PSTR("Z:0"))); + // FILAMENT_RUNOUT_SENSOR + if (fil_runout_active) { + lcd.setCursor(4, 1); + lcd_printPGM(((READ(FIL_RUNOUT_PIN) ^ FIL_RUNOUT_INVERTING) == 1) ? (PSTR("FRS:1")) : (PSTR("FRS:0"))); + } + // end FILAMENT_RUNOUT_SENSOR } static void menu_show_end_stops() { @@ -3438,6 +3452,65 @@ void lcd_wizard(int state) { lcd_return_to_status(); lcd_update(2); } +// FILAMENT_RUNOUT_SENSOR +void lcd_fil_runout_settings_menu() +{ + START_MENU(); + MENU_ITEM(back, MSG_SETTINGS, lcd_settings_menu); + // debug info + //lcd.setCursor(1, 5); + //lcd_printPGM((fil_runout_active == 1) ? (PSTR("S_ON ")) : (PSTR("S_OFF"))); + //lcd.setCursor(7, 5); + //lcd_printPGM((FIL_RUNOUT_INVERTING == 0) ? (PSTR("I_ON ")) : (PSTR("I_OFF"))); + //lcd.setCursor(13, 5); + //lcd_printPGM((ENDSTOPPULLUP_FIL_RUNOUT == 0) ? (PSTR("P_ON ")) : (PSTR("P_OFF"))); + // end debug info + if (fil_runout_active == false) { + MENU_ITEM(submenu, MSG_FIL_RUNOUT_ACTIVE_OFF, lcd_fil_runout_active_set); + } else { + MENU_ITEM(submenu, MSG_FIL_RUNOUT_ACTIVE_ON, lcd_fil_runout_active_set); + if (FIL_RUNOUT_INVERTING == false) { + MENU_ITEM(function, MSG_FIL_RUNOUT_INVERTING_OFF, lcd_fil_runout_inverting_set); + } else { + MENU_ITEM(function, MSG_FIL_RUNOUT_INVERTING_ON, lcd_fil_runout_inverting_set); + } + if (ENDSTOPPULLUP_FIL_RUNOUT == false ) { + MENU_ITEM(function, MSG_ENDSTOPPULLUP_FIL_RUNOUT_OFF, lcd_endstoppullup_fil_runout_set); + } else { + MENU_ITEM(function, MSG_ENDSTOPPULLUP_FIL_RUNOUT_ON, lcd_endstoppullup_fil_runout_set); + } + } + END_MENU(); +} + +void lcd_fil_runout_active_set() { + fil_runout_active = !fil_runout_active; + eeprom_update_byte((unsigned char *)EEPROM_FIL_RUNOUT_ACTIVE, fil_runout_active); + digipot_init(); + lcd_goto_menu(lcd_fil_runout_settings_menu, 1); + } + + void lcd_fil_runout_active_tune() { + fil_runout_active = !fil_runout_active; + eeprom_update_byte((unsigned char *)EEPROM_FIL_RUNOUT_ACTIVE, fil_runout_active); + digipot_init(); + lcd_goto_menu(lcd_tune_menu, 9); + } + +void lcd_fil_runout_inverting_set() { + FIL_RUNOUT_INVERTING = !FIL_RUNOUT_INVERTING; + eeprom_update_byte((unsigned char *)EEPROM_FIL_RUNOUT_INVERTING, FIL_RUNOUT_INVERTING); + digipot_init(); + lcd_goto_menu(lcd_fil_runout_settings_menu, 2); + } + void lcd_endstoppullup_fil_runout_set() { + ENDSTOPPULLUP_FIL_RUNOUT = !ENDSTOPPULLUP_FIL_RUNOUT; + eeprom_update_byte((unsigned char *)EEPROM_ENDSTOPPULLUP_FIL_RUNOUT, ENDSTOPPULLUP_FIL_RUNOUT); + digipot_init(); + lcd_goto_menu(lcd_fil_runout_settings_menu, 3); + } + +// end FILAMENT_RUNOUT_SENSOR static void lcd_settings_menu() { @@ -3493,8 +3566,12 @@ static void lcd_settings_menu() MENU_ITEM(submenu, PSTR("Farm number"), lcd_farm_no); MENU_ITEM(function, PSTR("Disable farm mode"), lcd_disable_farm_mode); } - - END_MENU(); +// FILAMENT_RUNOUT_SENSOR +#ifdef FIL_RUNOUT_PIN + MENU_ITEM(submenu, MSG_FIL_RUNOUT_SETTINGS, lcd_fil_runout_settings_menu); +#endif +// end FILAMENT_RUNOUT_SENSOR + END_MENU(); } static void lcd_calibration_menu() @@ -4796,6 +4873,17 @@ static void lcd_tune_menu() default: MENU_ITEM(function, MSG_SILENT_MODE_OFF, lcd_silent_mode_set); break; } } + +// FILAMENT_RUNOUT_SENSOR +#ifdef FILAMENT_RUNOUT_SUPPORT //9 + if (fil_runout_active == false) { + MENU_ITEM(function, MSG_FIL_RUNOUT_ACTIVE_OFF, lcd_fil_runout_active_tune); + } else { + MENU_ITEM(function, MSG_FIL_RUNOUT_ACTIVE_ON, lcd_fil_runout_active_tune); + } +#endif +// end FILAMENT_RUNOUT_SENSOR + END_MENU(); } diff --git a/Firmware/variants/1_75mm_MK1-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK1-RAMBo10a-E3Dv6full.h index 8b18e5a77..cd3a792c4 100644 --- a/Firmware/variants/1_75mm_MK1-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK1-RAMBo10a-E3Dv6full.h @@ -173,11 +173,12 @@ ADDITIONAL FEATURES SETTINGS *------------------------------------*/ // Define Prusa filament runout sensor -//#define FILAMENT_RUNOUT_SUPPORT - +#define FILAMENT_RUNOUT_SUPPORT #ifdef FILAMENT_RUNOUT_SUPPORT #define FILAMENT_RUNOUT_SENSOR 1 +#define FILAMENT_RUNOUT_SCRIPT "M600" #endif +// end Define Prusa filament runout sensor // temperature runaway #define TEMP_RUNAWAY_BED_HYSTERESIS 5 diff --git a/Firmware/variants/1_75mm_MK1-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK1-RAMBo13a-E3Dv6full.h index 28d3a1d6c..69530997c 100644 --- a/Firmware/variants/1_75mm_MK1-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK1-RAMBo13a-E3Dv6full.h @@ -173,10 +173,13 @@ ADDITIONAL FEATURES SETTINGS *------------------------------------*/ // Define Prusa filament runout sensor -//#define FILAMENT_RUNOUT_SUPPORT +#define FILAMENT_RUNOUT_SUPPORT +// end Define Prusa filament runout sensor + #ifdef FILAMENT_RUNOUT_SUPPORT #define FILAMENT_RUNOUT_SENSOR 1 +#define FILAMENT_RUNOUT_SCRIPT "M600" #endif // temperature runaway diff --git a/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h index 6be324ae1..a597797a5 100644 --- a/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h @@ -168,10 +168,13 @@ ADDITIONAL FEATURES SETTINGS *------------------------------------*/ // Define Prusa filament runout sensor -//#define FILAMENT_RUNOUT_SUPPORT +#define FILAMENT_RUNOUT_SUPPORT +// end Define Prusa filament runout sensor + #ifdef FILAMENT_RUNOUT_SUPPORT #define FILAMENT_RUNOUT_SENSOR 1 +#define FILAMENT_RUNOUT_SCRIPT "M600" #endif // temperature runaway diff --git a/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h index 42fa832c3..50752399a 100644 --- a/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h @@ -170,11 +170,12 @@ ADDITIONAL FEATURES SETTINGS *------------------------------------*/ // Define Prusa filament runout sensor -//#define FILAMENT_RUNOUT_SUPPORT - +#define FILAMENT_RUNOUT_SUPPORT #ifdef FILAMENT_RUNOUT_SUPPORT #define FILAMENT_RUNOUT_SENSOR 1 +#define FILAMENT_RUNOUT_SCRIPT "M600" #endif +// end Define Prusa filament runout sensor // temperature runaway #define TEMP_RUNAWAY_BED_HYSTERESIS 5 diff --git a/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h index 8779b7578..c3e08674f 100644 --- a/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h @@ -168,11 +168,12 @@ ADDITIONAL FEATURES SETTINGS *------------------------------------*/ // Define Prusa filament runout sensor -//#define FILAMENT_RUNOUT_SUPPORT - +#define FILAMENT_RUNOUT_SUPPORT #ifdef FILAMENT_RUNOUT_SUPPORT #define FILAMENT_RUNOUT_SENSOR 1 +#define FILAMENT_RUNOUT_SCRIPT "M600" #endif +// end Define Prusa filament runout sensor // temperature runaway #define TEMP_RUNAWAY_BED_HYSTERESIS 5 diff --git a/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h index 39b9ceace..206645029 100644 --- a/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h @@ -170,11 +170,12 @@ ADDITIONAL FEATURES SETTINGS *------------------------------------*/ // Define Prusa filament runout sensor -//#define FILAMENT_RUNOUT_SUPPORT - +#define FILAMENT_RUNOUT_SUPPORT #ifdef FILAMENT_RUNOUT_SUPPORT #define FILAMENT_RUNOUT_SENSOR 1 +#define FILAMENT_RUNOUT_SCRIPT "M600" #endif +// end Define Prusa filament runout sensor // temperature runaway #define TEMP_RUNAWAY_BED_HYSTERESIS 5 From f87607d4777faf4cf50454c429a02528c8f129db Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Fri, 3 Nov 2017 08:08:15 +0100 Subject: [PATCH 2/5] Modified change position from... x=211,y=0 to x=0,y-2.2 to get better access during filament change --- Firmware/variants/1_75mm_MK1-RAMBo10a-E3Dv6full.h | 4 ++-- Firmware/variants/1_75mm_MK1-RAMBo13a-E3Dv6full.h | 4 ++-- .../variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h | 4 ++-- .../variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h | 4 ++-- Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Firmware/variants/1_75mm_MK1-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK1-RAMBo10a-E3Dv6full.h index f05f8ba5f..0a940e9e9 100644 --- a/Firmware/variants/1_75mm_MK1-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK1-RAMBo10a-E3Dv6full.h @@ -150,8 +150,8 @@ CHANGE FILAMENT SETTINGS // Filament change configuration #define FILAMENTCHANGEENABLE #ifdef FILAMENTCHANGEENABLE -#define FILAMENTCHANGE_XPOS 211 -#define FILAMENTCHANGE_YPOS 0 +#define FILAMENTCHANGE_XPOS 0 +#define FILAMENTCHANGE_YPOS -2.2 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENTCHANGE_FINALRETRACT -80 diff --git a/Firmware/variants/1_75mm_MK1-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK1-RAMBo13a-E3Dv6full.h index 764f1e949..ff53326d3 100644 --- a/Firmware/variants/1_75mm_MK1-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK1-RAMBo13a-E3Dv6full.h @@ -150,8 +150,8 @@ CHANGE FILAMENT SETTINGS // Filament change configuration #define FILAMENTCHANGEENABLE #ifdef FILAMENTCHANGEENABLE -#define FILAMENTCHANGE_XPOS 211 -#define FILAMENTCHANGE_YPOS 0 +#define FILAMENTCHANGE_XPOS 0 +#define FILAMENTCHANGE_YPOS -2.2 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENTCHANGE_FINALRETRACT -80 diff --git a/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h index 2f4836c49..dbf91b2a6 100644 --- a/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h @@ -145,8 +145,8 @@ CHANGE FILAMENT SETTINGS // Filament change configuration #define FILAMENTCHANGEENABLE #ifdef FILAMENTCHANGEENABLE -#define FILAMENTCHANGE_XPOS 211 -#define FILAMENTCHANGE_YPOS 0 +#define FILAMENTCHANGE_XPOS 0 +#define FILAMENTCHANGE_YPOS -2.2 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENTCHANGE_FINALRETRACT -80 diff --git a/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h index c31ad1267..24910f109 100644 --- a/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h @@ -147,8 +147,8 @@ CHANGE FILAMENT SETTINGS // Filament change configuration #define FILAMENTCHANGEENABLE #ifdef FILAMENTCHANGEENABLE -#define FILAMENTCHANGE_XPOS 211 -#define FILAMENTCHANGE_YPOS 0 +#define FILAMENTCHANGE_XPOS 0 +#define FILAMENTCHANGE_YPOS -2.2 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENTCHANGE_FINALRETRACT -80 diff --git a/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h index 043ddb81a..e1fbbb65a 100644 --- a/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h @@ -145,8 +145,8 @@ CHANGE FILAMENT SETTINGS // Filament change configuration #define FILAMENTCHANGEENABLE #ifdef FILAMENTCHANGEENABLE -#define FILAMENTCHANGE_XPOS 211 -#define FILAMENTCHANGE_YPOS 0 +#define FILAMENTCHANGE_XPOS 0 +#define FILAMENTCHANGE_YPOS -2.2 #define FILAMENTCHANGE_ZADD 2 #define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENTCHANGE_FINALRETRACT -80 From 24af82d428f6170c25e221ff35ba04f163d9b2d5 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Fri, 3 Nov 2017 08:23:04 +0100 Subject: [PATCH 3/5] PLA 1st in Preheat menu --- Firmware/ultralcd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 958cee709..7839e81cc 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -1421,8 +1421,8 @@ static void lcd_preheat_menu() MENU_ITEM(back, MSG_MAIN, lcd_main_menu); - MENU_ITEM(function, PSTR("ABS - " STRINGIFY(ABS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ABS_PREHEAT_HPB_TEMP)), lcd_preheat_abs); MENU_ITEM(function, PSTR("PLA - " STRINGIFY(PLA_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PLA_PREHEAT_HPB_TEMP)), lcd_preheat_pla); + MENU_ITEM(function, PSTR("ABS - " STRINGIFY(ABS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ABS_PREHEAT_HPB_TEMP)), lcd_preheat_abs); MENU_ITEM(function, PSTR("PET - " STRINGIFY(PET_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PET_PREHEAT_HPB_TEMP)), lcd_preheat_pet); MENU_ITEM(function, PSTR("HIPS - " STRINGIFY(HIPS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(HIPS_PREHEAT_HPB_TEMP)), lcd_preheat_hips); MENU_ITEM(function, PSTR("PP - " STRINGIFY(PP_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PP_PREHEAT_HPB_TEMP)), lcd_preheat_pp); From 0d9f95bd352dc6c80b2da020d42456d0c008a736 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Mon, 6 Nov 2017 16:23:08 +0100 Subject: [PATCH 4/5] Modified FRS menu... ... in a single line. While 'Fil.RS [S to VCC]' is chosen the invert and pullup are false While 'Fil.RS [S to GND]' is chosen the invert and pullup are ture --- Firmware/Configuration.h | 14 +- Firmware/ConfigurationStore.cpp | 11 +- Firmware/Marlin.h | 2 +- Firmware/Marlin_main.cpp | 53 +- Firmware/cardreader.cpp | 36 +- Firmware/cardreader.h | 1 - Firmware/language_all.cpp | 462 +++++++++++++++--- Firmware/language_all.h | 122 ++--- Firmware/language_cz.h | 32 +- Firmware/language_de.h | 66 ++- Firmware/language_en.h | 18 +- Firmware/language_es.h | 34 +- Firmware/language_it.h | 36 +- Firmware/language_pl.h | 38 +- Firmware/mesh_bed_calibration.cpp | 182 +++++-- Firmware/planner.cpp | 6 + Firmware/stepper.cpp | 8 +- Firmware/temperature.cpp | 25 +- Firmware/ultralcd.cpp | 205 +++++--- ...5mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h | 4 + ...5mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h | 4 + .../variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h | 4 + .../variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h | 4 + 23 files changed, 1025 insertions(+), 342 deletions(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 7ce27a0e7..617f666d4 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -5,7 +5,7 @@ #include "Configuration_prusa.h" // Firmware version -#define FW_version "3.1.0-RC1" +#define FW_version "3.1.0-RC2" #define FW_PRUSA3D_MAGIC "PRUSA3DFW" #define FW_PRUSA3D_MAGIC_LEN 10 @@ -57,17 +57,11 @@ #define EEPROM_BED_CORRECTION_FRONT_RIGHT (EEPROM_BED_CORRECTION_FRONT_LEFT - 1) #define EEPROM_BED_CORRECTION_REAR_RIGHT (EEPROM_BED_CORRECTION_FRONT_RIGHT - 1) #define EEPROM_BED_CORRECTION_REAR_LEFT (EEPROM_BED_CORRECTION_REAR_RIGHT - 1) - +*/ // FILAMENT_RUNOUT_SENSOR -#define EEPROM_FIL_RUNOUT_ACTIVE (EEPROM_BED_CORRECTION_REAR_LEFT - 1) //0 - filament runout sensor disabled; 1 - .. activated -*/ -#define EEPROM_FIL_RUNOUT_ACTIVE (EEPROM_WIZARD_ACTIVE - 1) //0 - filament runout sensor disabled; 1 - .. activated -// -#define EEPROM_FIL_RUNOUT_INVERTING (EEPROM_FIL_RUNOUT_ACTIVE - 1) //0 - filament runout sensor inverted; 1 - .. normal -#define EEPROM_ENDSTOPPULLUP_FIL_RUNOUT (EEPROM_FIL_RUNOUT_INVERTING - 1) //0 - filament runout sensor pullup; 0 - .. normal -// end FILAMENT_RUNOUT_SENSOR +#define EEPROM_FIL_RUNOUT_STATUS (EEPROM_WIZARD_ACTIVE - 1) //0 - filament runout sensor disabled; 1 - FRS type Signal to VCC; FRS type Signal to GND // Currently running firmware, each digit stored as uint16_t. // The flavor differentiates a dev, alpha, beta, release candidate or a release version. #define EEPROM_FIRMWARE_VERSION_END (FW_PRUSA3D_MAGIC_LEN+8) @@ -90,7 +84,7 @@ //#define STRING_VERSION "1.0.2" #define STRING_VERSION_CONFIG_H __DATE__ " " __TIME__ // build date and time -#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes. +#define STRING_CONFIG_H_AUTHOR "(3d-gussner,1106V1)" // Who made the changes. // SERIAL_PORT selects which serial port should be used for communication with the host. // This allows the connection of wireless adapters (for instance) to non-default port pins. diff --git a/Firmware/ConfigurationStore.cpp b/Firmware/ConfigurationStore.cpp index 0011e71df..72a90efc0 100644 --- a/Firmware/ConfigurationStore.cpp +++ b/Firmware/ConfigurationStore.cpp @@ -262,9 +262,18 @@ void Config_PrintSettings() #endif #endif } else { - SERIAL_ECHOLNPGM("Filament settings: Disabled"); + SERIAL_ECHOLNPGM("Filament volumetric settings: Disabled"); } #endif +#ifdef FIL_RUNOUT_SENSOR + if (fil_runout_status == 1) { + SERIAL_ECHOLNPGM(MSG_FIL_RUNOUT_STATUS_VCC); + } else + if (if_runout_status == 2) { + SERIAL_ECHOLNPGM(MSG_FIL_RUNOUT_STATUS_GND); + } else + SERIAL_ECHOLNPGM(MSG_FIL_RUNOUT_STATUS_OFF); +#endif } #endif diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 8d39d49ee..a1a0225a2 100644 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -295,7 +295,7 @@ extern bool is_usb_printing; extern bool homing_flag; extern bool temp_cal_active; // FILAMENT_RUNOUT_SENSOR -extern bool fil_runout_active; +extern uint8_t fil_runout_status; extern bool FIL_RUNOUT_INVERTING; extern bool ENDSTOPPULLUP_FIL_RUNOUT; // end FILAMENT_RUNOUT_SENSOR diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 6dc915b67..8637f53a7 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -258,8 +258,8 @@ bool homing_flag = false; bool temp_cal_active = false; // FILAMENT_RUNOUT_SENSOR -bool fil_runout_active = false; bool FIL_RUNOUT_INVERTING = false; +uint8_t fil_runout_status = 0; bool fil_funout_inv = false; bool ENDSTOPPULLUP_FIL_RUNOUT = false; // end FILAMENT_RUNOUT_SENSOR @@ -1280,9 +1280,7 @@ void setup() // FILAMENT_RUNOUT_SENSOR #ifdef FILAMENT_RUNOUT_SENSOR - fil_runout_active = eeprom_read_byte((uint8_t*)EEPROM_FIL_RUNOUT_ACTIVE); - FIL_RUNOUT_INVERTING = eeprom_read_byte((uint8_t*)EEPROM_FIL_RUNOUT_INVERTING); - ENDSTOPPULLUP_FIL_RUNOUT = eeprom_read_byte((uint8_t*)EEPROM_ENDSTOPPULLUP_FIL_RUNOUT); + fil_runout_status = eeprom_read_byte((uint8_t*)EEPROM_FIL_RUNOUT_STATUS); #endif // end FILAMENT_RUNOUT_SENSOR @@ -1968,7 +1966,7 @@ static float probe_pt(float x, float y, float z_before) { bool check_commands() { bool end_command_found = false; - if (buflen) + while (buflen) { if ((code_seen("M84")) || (code_seen("M 84"))) end_command_found = true; if (!cmdbuffer_front_already_processed) @@ -2454,7 +2452,7 @@ void process_commands() return; } else if (code_seen("SERIAL HIGH")) { MYSERIAL.println("SERIAL HIGH"); - MYSERIAL.begin(1152000); + MYSERIAL.begin(115200); return; } else if(code_seen("Beat")) { // Kick farm link timer @@ -2480,7 +2478,7 @@ void process_commands() if(Stopped == false) { #ifdef FILAMENT_RUNOUT_SENSOR - if(((READ(FIL_RUNOUT_PIN) ^ FIL_RUNOUT_INVERTING) == 0) && fil_runout_active) { + if(((READ(FIL_RUNOUT_PIN) ^ FIL_RUNOUT_INVERTING) == 0) && fil_runout_status) { //enqueue_and_echo_commands_P(PSTR(FILAMENT_RUNOUT_SCRIPT)); enquecommand_front_P((PSTR(FILAMENT_RUNOUT_SCRIPT))); /* feedmultiplyBckp=feedmultiply; @@ -2502,9 +2500,6 @@ void process_commands() target[Z_AXIS]+= FILAMENTCHANGE_ZADD ; - if(target[Z_AXIS] < 20){ - target[Z_AXIS]+= 20 ; - } plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], 300, active_extruder); @@ -3388,9 +3383,11 @@ void process_commands() current_position[Y_AXIS] = pgm_read_float(bed_ref_points + 1); bool clamped = world2machine_clamp(current_position[X_AXIS], current_position[Y_AXIS]); + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 1) { clamped ? SERIAL_PROTOCOLPGM("First calibration point clamped.\n") : SERIAL_PROTOCOLPGM("No clamping for first calibration point.\n"); } + #endif // SUPPORT_VERBOSITY // mbl.get_meas_xy(0, 0, current_position[X_AXIS], current_position[Y_AXIS], false); plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[X_AXIS] / 30, active_extruder); // Wait until the move is finished. @@ -3404,13 +3401,17 @@ void process_commands() int XY_AXIS_FEEDRATE = homing_feedrate[X_AXIS] / 20; int Z_LIFT_FEEDRATE = homing_feedrate[Z_AXIS] / 40; bool has_z = is_bed_z_jitter_data_valid(); //checks if we have data from Z calibration (offsets of the Z heiths of the 8 calibration points from the first point) + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 1) { has_z ? SERIAL_PROTOCOLPGM("Z jitter data from Z cal. valid.\n") : SERIAL_PROTOCOLPGM("Z jitter data from Z cal. not valid.\n"); } + #endif // SUPPORT_VERBOSITY setup_for_endstop_move(false); //save feedrate and feedmultiply, sets feedmultiply to 100 const char *kill_message = NULL; while (mesh_point != MESH_MEAS_NUM_X_POINTS * MESH_MEAS_NUM_Y_POINTS) { + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 1) SERIAL_ECHOLNPGM(""); + #endif // SUPPORT_VERBOSITY // Get coords of a measuring point. ix = mesh_point % MESH_MEAS_NUM_X_POINTS; // from 0 to MESH_NUM_X_POINTS - 1 iy = mesh_point / MESH_MEAS_NUM_X_POINTS; @@ -3419,7 +3420,7 @@ void process_commands() if (has_z && mesh_point > 0) { uint16_t z_offset_u = eeprom_read_word((uint16_t*)(EEPROM_BED_CALIBRATION_Z_JITTER + 2 * (ix + iy * 3 - 1))); z0 = mbl.z_values[0][0] + *reinterpret_cast(&z_offset_u) * 0.01; - //#if 0 + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 1) { SERIAL_ECHOPGM("Bed leveling, point: "); MYSERIAL.print(mesh_point); @@ -3427,7 +3428,7 @@ void process_commands() MYSERIAL.print(z0, 5); SERIAL_ECHOLNPGM(""); } - //#endif + #endif // SUPPORT_VERBOSITY } // Move Z up to MESH_HOME_Z_SEARCH. @@ -3442,11 +3443,13 @@ void process_commands() world2machine_clamp(current_position[X_AXIS], current_position[Y_AXIS]); + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 1) { SERIAL_PROTOCOL(mesh_point); clamped ? SERIAL_PROTOCOLPGM(": xy clamped.\n") : SERIAL_PROTOCOLPGM(": no xy clamping\n"); } + #endif // SUPPORT_VERBOSITY plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], XY_AXIS_FEEDRATE, active_extruder); @@ -3466,7 +3469,7 @@ void process_commands() kill_message = MSG_BED_LEVELING_FAILED_POINT_HIGH; break; } - + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 10) { SERIAL_ECHOPGM("X: "); MYSERIAL.print(current_position[X_AXIS], 5); @@ -3475,24 +3478,26 @@ void process_commands() MYSERIAL.print(current_position[Y_AXIS], 5); SERIAL_PROTOCOLPGM("\n"); } - if (verbosity_level >= 1) { SERIAL_ECHOPGM("mesh bed leveling: "); MYSERIAL.print(current_position[Z_AXIS], 5); SERIAL_ECHOLNPGM(""); } + #endif // SUPPORT_VERBOSITY mbl.set_z(ix, iy, current_position[Z_AXIS]); //store measured z values z_values[iy][ix] = z; custom_message_state--; mesh_point++; lcd_update(1); } - if (verbosity_level >= 20) SERIAL_ECHOLNPGM("Mesh bed leveling while loop finished."); current_position[Z_AXIS] = MESH_HOME_Z_SEARCH; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { + SERIAL_ECHOLNPGM("Mesh bed leveling while loop finished."); SERIAL_ECHOLNPGM("MESH_HOME_Z_SEARCH: "); MYSERIAL.print(current_position[Z_AXIS], 5); } + #endif // SUPPORT_VERBOSITY plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], Z_LIFT_FEEDRATE, active_extruder); st_synchronize(); if (mesh_point != MESH_MEAS_NUM_X_POINTS * MESH_MEAS_NUM_Y_POINTS) { @@ -3506,9 +3511,11 @@ void process_commands() SERIAL_ECHOLNPGM("babystep applied"); bool eeprom_bed_correction_valid = eeprom_read_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID) == 1; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 1) { eeprom_bed_correction_valid ? SERIAL_PROTOCOLPGM("Bed correction data valid\n") : SERIAL_PROTOCOLPGM("Bed correction data not valid\n"); } + #endif // SUPPORT_VERBOSITY for (uint8_t i = 0; i < 4; ++i) { unsigned char codes[4] = { 'L', 'R', 'F', 'B' }; @@ -4760,11 +4767,16 @@ Sigma_Exit: SERIAL_PROTOCOLLN(""); #endif // FILAMENT_RUNOUT_SENSOR -// #if fil_runout_active && defined(FIL_RUNOUT_PIN) && FIL_RUNOUT_PIN > -1 +// #if fil_runout_status && defined(FIL_RUNOUT_PIN) && FIL_RUNOUT_PIN > -1 #if defined(FIL_RUNOUT_PIN) && FIL_RUNOUT_PIN > -1 - if (fil_runout_active == true) { - SERIAL_PROTOCOLRPGM(MSG_FIL_RUNOUT_SETTINGS); - if(READ(FIL_RUNOUT_PIN)^FIL_RUNOUT_INVERTING){ + if (fil_runout_status == 1) { + SERIAL_PROTOCOLRPGM(MSG_FIL_RUNOUT_STATUS_VCC); + } + else if (fil_runout_status == 2) { + SERIAL_PROTOCOLRPGM(MSG_FIL_RUNOUT_STATUS_GND); + } + if (fil_runout_status > 0) { + if(READ(FIL_RUNOUT_PIN)^FIL_RUNOUT_INVERTING){ SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_HIT); }else{ SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN); @@ -5807,7 +5819,9 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp else if(code_seen('T')) { + int index; + st_synchronize(); for (index = 1; *(strchr_pointer + index) == ' ' || *(strchr_pointer + index) == '\t'; index++); if ((*(strchr_pointer + index) < '0' || *(strchr_pointer + index) > '9') && *(strchr_pointer + index) != '?') { @@ -5829,7 +5843,6 @@ case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp snmm_extruder = tmp_extruder; - st_synchronize(); delay(100); disable_e0(); diff --git a/Firmware/cardreader.cpp b/Firmware/cardreader.cpp index 7a8cc810b..edded2e02 100644 --- a/Firmware/cardreader.cpp +++ b/Firmware/cardreader.cpp @@ -58,27 +58,6 @@ char *createFilename(char *buffer,const dir_t &p) //buffer>12characters return buffer; } - -void CardReader::lsDive_pointer(const char *prepend, SdFile parent, const char * const match) { - dir_t p; - - //parent.seekSet = - // Read the next entry from a directory - //SERIAL_ECHOPGM("Cur pos before.: "); - //uint32_t pom = parent.curPosition(); - //MYSERIAL.println(pom, 10); - parent.readDir(p, longFilename); - //SERIAL_ECHOPGM("Cur pos.: "); - //pom = parent.curPosition(); - //MYSERIAL.println(pom, 10); - - filenameIsDir = DIR_IS_SUBDIR(&p); - - createFilename(filename, p); - creationDate = p.creationDate; - creationTime = p.creationTime; -} - /** * Dive into a folder and recurse depth-first to perform a pre-set operation lsAction: * LS_Count - Add +1 to nrFiles for every file within the parent @@ -267,7 +246,7 @@ void CardReader::startFileprint() { sdprinting = true; #ifdef SDCARD_SORT_ALPHA - flush_presort(); + // flush_presort(); #endif } } @@ -698,6 +677,9 @@ void CardReader::chdir(const char * relpath) workDirParents[0]=*parent; } workDir=newfile; + #ifdef SDCARD_SORT_ALPHA + presort(); + #endif } } @@ -709,6 +691,9 @@ void CardReader::updir() workDir = workDirParents[0]; for (uint8_t d = 0; d < workDirDepth; d++) workDirParents[d] = workDirParents[d+1]; + #ifdef SDCARD_SORT_ALPHA + presort(); + #endif } } @@ -849,6 +834,7 @@ void CardReader::presort() { if (fileCnt > 1) { // Init sort order. for (uint16_t i = 0; i < fileCnt; i++) { + if (!IS_SD_INSERTED) return; manage_heater(); sort_order[i] = i; @@ -924,6 +910,8 @@ void CardReader::presort() { #endif for (uint16_t i = fileCnt; --i;) { + if (!IS_SD_INSERTED) return; + bool didSwap = false; #if !SDSORT_USES_RAM //show progresss bar only if slow sorting method is used int8_t percent = (counter * 100) / total;//((counter * 100) / pow((fileCnt-1),2)); @@ -935,6 +923,7 @@ void CardReader::presort() { //MYSERIAL.println(int(i)); for (uint16_t j = 0; j < i; ++j) { + if (!IS_SD_INSERTED) return; manage_heater(); const uint16_t o1 = sort_order[j], o2 = sort_order[j + 1]; @@ -1009,6 +998,7 @@ void CardReader::presort() { lcd_implementation_clear(); lcd_update(2); #endif + lcd_update(2); KEEPALIVE_STATE(NOT_BUSY); lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; } @@ -1057,7 +1047,7 @@ void CardReader::printingHasFinished() } autotempShutdown(); #ifdef SDCARD_SORT_ALPHA - //presort(); + //if(!check_file) presort(); #endif } } diff --git a/Firmware/cardreader.h b/Firmware/cardreader.h index c0d662d2d..3ce327d62 100644 --- a/Firmware/cardreader.h +++ b/Firmware/cardreader.h @@ -148,7 +148,6 @@ private: int16_t nrFiles; //counter for the files in the current directory and recycled as position counter for getting the nrFiles'th name in the directory. char* diveDirName; void lsDive(const char *prepend, SdFile parent, const char * const match=NULL); - void lsDive_pointer(const char *prepend, SdFile parent, const char * const match = NULL); #ifdef SDCARD_SORT_ALPHA void flush_presort(); #endif diff --git a/Firmware/language_all.cpp b/Firmware/language_all.cpp index 817a04f76..47bf5ad87 100644 --- a/Firmware/language_all.cpp +++ b/Firmware/language_all.cpp @@ -64,8 +64,18 @@ const char * const MSG_AUTO_HOME_LANG_TABLE[LANG_NUM] PROGMEM = { }; const char MSG_AUTO_MODE_ON_EN[] PROGMEM = "Mode [auto power]"; -const char * const MSG_AUTO_MODE_ON_LANG_TABLE[1] PROGMEM = { - MSG_AUTO_MODE_ON_EN +const char MSG_AUTO_MODE_ON_CZ[] PROGMEM = "Mod [automaticky]"; +const char MSG_AUTO_MODE_ON_IT[] PROGMEM = "Mode [auto]"; +const char MSG_AUTO_MODE_ON_ES[] PROGMEM = "Modo [auto]"; +const char MSG_AUTO_MODE_ON_PL[] PROGMEM = "Tryb [auto]"; +const char MSG_AUTO_MODE_ON_DE[] PROGMEM = "Mode [Auto]"; +const char * const MSG_AUTO_MODE_ON_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_AUTO_MODE_ON_EN, + MSG_AUTO_MODE_ON_CZ, + MSG_AUTO_MODE_ON_IT, + MSG_AUTO_MODE_ON_ES, + MSG_AUTO_MODE_ON_PL, + MSG_AUTO_MODE_ON_DE }; const char MSG_A_RETRACT_EN[] PROGMEM = "A-retract"; @@ -118,7 +128,7 @@ const char MSG_BABYSTEP_Z_NOT_SET_CZ[] PROGMEM = "Neni zkalibrovana vzdalenost t const char MSG_BABYSTEP_Z_NOT_SET_IT[] PROGMEM = "Distanza tra la punta dell'ugello e la superficie del letto non ancora imposta. Si prega di seguire il manuale, capitolo First steps, sezione First layer calibration."; const char MSG_BABYSTEP_Z_NOT_SET_ES[] PROGMEM = "Distancia entre la punta de la boquilla y la superficie de la cama no fijada aun. Por favor siga el manual, capitulo First steps, seccion First layer calibration."; const char MSG_BABYSTEP_Z_NOT_SET_PL[] PROGMEM = "Odleglosc dyszy od podkladki nie jest skalibrowana. Postepuj zgodnie z instrukcja rozdzial Zaczynamy, podrozdzial Kalibracja pierwszej warstwy."; -const char MSG_BABYSTEP_Z_NOT_SET_DE[] PROGMEM = "Der Abstand zwischen der Spitze der Duese und der Bed ist noch nicht eingestellt. Bitte folgen Sie dem Handbuch, First steps, section First layer calibration."; +const char MSG_BABYSTEP_Z_NOT_SET_DE[] PROGMEM = "Der Abstand zwischen der Spitze der Duese und der Bett ist noch nicht eingestellt. Bitte folgen Sie dem Handbuch, First steps, section First layer calibration."; const char * const MSG_BABYSTEP_Z_NOT_SET_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_BABYSTEP_Z_NOT_SET_EN, MSG_BABYSTEP_Z_NOT_SET_CZ, @@ -132,13 +142,14 @@ const char MSG_BED_EN[] PROGMEM = "Bed"; const char MSG_BED_IT[] PROGMEM = "Letto"; const char MSG_BED_ES[] PROGMEM = "Base"; const char MSG_BED_PL[] PROGMEM = "Stolik"; +const char MSG_BED_DE[] PROGMEM = "Bett"; const char * const MSG_BED_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_BED_EN, MSG_BED_EN, MSG_BED_IT, MSG_BED_ES, MSG_BED_PL, - MSG_BED_EN + MSG_BED_DE }; const char MSG_BED_CORRECTION_FRONT_EN[] PROGMEM = "Front side[um]"; @@ -176,7 +187,7 @@ const char MSG_BED_CORRECTION_MENU_CZ[] PROGMEM = "Korekce podlozky"; const char MSG_BED_CORRECTION_MENU_IT[] PROGMEM = "Correz. liv.letto"; const char MSG_BED_CORRECTION_MENU_ES[] PROGMEM = "Corr. de la cama"; const char MSG_BED_CORRECTION_MENU_PL[] PROGMEM = "Korekta podkladki"; -const char MSG_BED_CORRECTION_MENU_DE[] PROGMEM = "Bed level Korrekt"; +const char MSG_BED_CORRECTION_MENU_DE[] PROGMEM = "Bett level Korrekt"; const char * const MSG_BED_CORRECTION_MENU_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_BED_CORRECTION_MENU_EN, MSG_BED_CORRECTION_MENU_CZ, @@ -232,7 +243,7 @@ const char MSG_BED_DONE_CZ[] PROGMEM = "Bed OK."; const char MSG_BED_DONE_IT[] PROGMEM = "Piatto fatto."; const char MSG_BED_DONE_ES[] PROGMEM = "Base preparada"; const char MSG_BED_DONE_PL[] PROGMEM = "Stolik OK."; -const char MSG_BED_DONE_DE[] PROGMEM = "Bed OK"; +const char MSG_BED_DONE_DE[] PROGMEM = "Bett OK"; const char * const MSG_BED_DONE_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_BED_DONE_EN, MSG_BED_DONE_CZ, @@ -247,7 +258,7 @@ const char MSG_BED_HEATING_CZ[] PROGMEM = "Zahrivani bed"; const char MSG_BED_HEATING_IT[] PROGMEM = "Riscald. letto"; const char MSG_BED_HEATING_ES[] PROGMEM = "Calentando Base"; const char MSG_BED_HEATING_PL[] PROGMEM = "Grzanie stolika.."; -const char MSG_BED_HEATING_DE[] PROGMEM = "Bed aufwaermen"; +const char MSG_BED_HEATING_DE[] PROGMEM = "Bett aufwaermen"; const char * const MSG_BED_HEATING_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_BED_HEATING_EN, MSG_BED_HEATING_CZ, @@ -367,7 +378,7 @@ const char MSG_BED_SKEW_OFFSET_DETECTION_PERFECT_CZ[] PROGMEM = "Kalibrace XYZ v const char MSG_BED_SKEW_OFFSET_DETECTION_PERFECT_IT[] PROGMEM = "Calibrazione XYZ OK. Gli assi X/Y sono perpendicolari. Complimenti!"; const char MSG_BED_SKEW_OFFSET_DETECTION_PERFECT_ES[] PROGMEM = "Calibracion XYZ ok. Ejes X/Y perpendiculares. Felicitaciones!"; const char MSG_BED_SKEW_OFFSET_DETECTION_PERFECT_PL[] PROGMEM = "Kalibracja XYZ ok. Osie X/Y sa prostopadle. Gratulacje!"; -const char MSG_BED_SKEW_OFFSET_DETECTION_PERFECT_DE[] PROGMEM = "XYZ-Kalibrierung ok. X/Y-Achsen sind senkrecht zueinander. Glueckwunsch!"; +const char MSG_BED_SKEW_OFFSET_DETECTION_PERFECT_DE[] PROGMEM = "XYZ-Kalibrierung OK. X/Y-Achsen sind senkrecht zueinander. Glueckwunsch!"; const char * const MSG_BED_SKEW_OFFSET_DETECTION_PERFECT_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_BED_SKEW_OFFSET_DETECTION_PERFECT_EN, MSG_BED_SKEW_OFFSET_DETECTION_PERFECT_CZ, @@ -382,7 +393,7 @@ const char MSG_BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND_CZ[] PROGMEM = "Kalibra const char MSG_BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND_IT[] PROGMEM = "Calibrazione XYZ fallita. Il punto di calibrazione sul letto non e' stato trovato."; const char MSG_BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND_ES[] PROGMEM = "Calibracion XYZ fallada. Puntos de calibracion en la cama no encontrados."; const char MSG_BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND_PL[] PROGMEM = "Kalibr. XYZ nieudana. Kalibracyjny punkt podkladki nieznaleziony."; -const char MSG_BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND_DE[] PROGMEM = "XYZ-Kalibrierung fehlgeschlagen. Bed-Kalibrierpunkt nicht gefunden."; +const char MSG_BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND_DE[] PROGMEM = "XYZ-Kalibrierung fehlgeschlagen. Bett-Kalibrierpunkt nicht gefunden."; const char * const MSG_BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND_EN, MSG_BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND_CZ, @@ -781,8 +792,18 @@ const char * const MSG_DATE_LANG_TABLE[LANG_NUM] PROGMEM = { }; const char MSG_DEFAULT_SETTINGS_LOADED_EN[] PROGMEM = "Default settings loaded"; -const char * const MSG_DEFAULT_SETTINGS_LOADED_LANG_TABLE[1] PROGMEM = { - MSG_DEFAULT_SETTINGS_LOADED_EN +const char MSG_DEFAULT_SETTINGS_LOADED_CZ[] PROGMEM = "Defaultni nastaveni nahrano"; +const char MSG_DEFAULT_SETTINGS_LOADED_IT[] PROGMEM = "Settaggi predefiniti caricati"; +const char MSG_DEFAULT_SETTINGS_LOADED_ES[] PROGMEM = "Ajustes por defecto cargados."; +const char MSG_DEFAULT_SETTINGS_LOADED_PL[] PROGMEM = "Ustawienia domy\x9Clne"; +const char MSG_DEFAULT_SETTINGS_LOADED_DE[] PROGMEM = "Standardeinstellungen wurden zuruckgesetzt"; +const char * const MSG_DEFAULT_SETTINGS_LOADED_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_DEFAULT_SETTINGS_LOADED_EN, + MSG_DEFAULT_SETTINGS_LOADED_CZ, + MSG_DEFAULT_SETTINGS_LOADED_IT, + MSG_DEFAULT_SETTINGS_LOADED_ES, + MSG_DEFAULT_SETTINGS_LOADED_PL, + MSG_DEFAULT_SETTINGS_LOADED_DE }; const char MSG_DISABLE_STEPPERS_EN[] PROGMEM = "Disable steppers"; @@ -1098,13 +1119,33 @@ const char * const MSG_FILAMENT_LOADING_T3_LANG_TABLE[LANG_NUM] PROGMEM = { }; const char MSG_FILE_CNT_EN[] PROGMEM = "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."; -const char * const MSG_FILE_CNT_LANG_TABLE[1] PROGMEM = { - MSG_FILE_CNT_EN +const char MSG_FILE_CNT_CZ[] PROGMEM = "Nektere soubory nebudou setrideny. Maximalni pocet souboru pro setrideni je 100."; +const char MSG_FILE_CNT_IT[] PROGMEM = "Alcuni dei file non potranno essere organizzati. 100 e il n. max. di file che possono essere organizzati."; +const char MSG_FILE_CNT_ES[] PROGMEM = "Algunos archivos no seran ordenados. El Max. num. de archivos para ordenar en 1 carpeta es 100."; +const char MSG_FILE_CNT_PL[] PROGMEM = "Niektore pliki nie beda sortowane. Max. ilosc plikow do sortu w 1 folderze to 100."; +const char MSG_FILE_CNT_DE[] PROGMEM = "Einige Dateien werden nicht sortiert. Max. Anzahl der Dateien in einem Ordner ist 100."; +const char * const MSG_FILE_CNT_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_FILE_CNT_EN, + MSG_FILE_CNT_CZ, + MSG_FILE_CNT_IT, + MSG_FILE_CNT_ES, + MSG_FILE_CNT_PL, + MSG_FILE_CNT_DE }; const char MSG_FILE_INCOMPLETE_EN[] PROGMEM = "File incomplete. Continue anyway?"; -const char * const MSG_FILE_INCOMPLETE_LANG_TABLE[1] PROGMEM = { - MSG_FILE_INCOMPLETE_EN +const char MSG_FILE_INCOMPLETE_CZ[] PROGMEM = "Soubor nekompletni. Pokracovat?"; +const char MSG_FILE_INCOMPLETE_IT[] PROGMEM = "File incompleto. Continuare comunque?"; +const char MSG_FILE_INCOMPLETE_ES[] PROGMEM = "Archivo imcompleto. Deseas continuar?"; +const char MSG_FILE_INCOMPLETE_PL[] PROGMEM = "Plik niekompletny. Kontynuowac?"; +const char MSG_FILE_INCOMPLETE_DE[] PROGMEM = "Datei unvollstaend. Trotzdem fortfahren?"; +const char * const MSG_FILE_INCOMPLETE_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_FILE_INCOMPLETE_EN, + MSG_FILE_INCOMPLETE_CZ, + MSG_FILE_INCOMPLETE_IT, + MSG_FILE_INCOMPLETE_ES, + MSG_FILE_INCOMPLETE_PL, + MSG_FILE_INCOMPLETE_DE }; const char MSG_FILE_PRINTED_EN[] PROGMEM = "Done printing file"; @@ -1132,6 +1173,21 @@ const char * const MSG_FIL_ADJUSTING_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_FIL_ADJUSTING_DE }; +const char MSG_FIL_RUNOUT_STATUS_GND_EN[] PROGMEM = "Fil.RS [S to GND]"; +const char * const MSG_FIL_RUNOUT_STATUS_GND_LANG_TABLE[1] PROGMEM = { + MSG_FIL_RUNOUT_STATUS_GND_EN +}; + +const char MSG_FIL_RUNOUT_STATUS_OFF_EN[] PROGMEM = "Fil.RS [OFF]"; +const char * const MSG_FIL_RUNOUT_STATUS_OFF_LANG_TABLE[1] PROGMEM = { + MSG_FIL_RUNOUT_STATUS_OFF_EN +}; + +const char MSG_FIL_RUNOUT_STATUS_VCC_EN[] PROGMEM = "Fil.RS [S to VCC]"; +const char * const MSG_FIL_RUNOUT_STATUS_VCC_LANG_TABLE[1] PROGMEM = { + MSG_FIL_RUNOUT_STATUS_VCC_EN +}; + const char MSG_FIND_BED_OFFSET_AND_SKEW_ITERATION_EN[] PROGMEM = "Iteration "; const char MSG_FIND_BED_OFFSET_AND_SKEW_ITERATION_CZ[] PROGMEM = "Iterace "; const char MSG_FIND_BED_OFFSET_AND_SKEW_ITERATION_IT[] PROGMEM = "Reiterazione "; @@ -1151,7 +1207,7 @@ const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE1_CZ[] PROGMEM = "Hledam kalibracni const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE1_IT[] PROGMEM = "Ricerca del letto punto di calibraz."; const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE1_ES[] PROGMEM = "Buscando cama punto de calibracion"; const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE1_PL[] PROGMEM = "Szukam punktu kalibracyjnego podkladki"; -const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE1_DE[] PROGMEM = "Suchen Bed Kalibrierpunkt"; +const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE1_DE[] PROGMEM = "Suchen Bett Kalibrierpunkt"; const char * const MSG_FIND_BED_OFFSET_AND_SKEW_LINE1_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_FIND_BED_OFFSET_AND_SKEW_LINE1_EN, MSG_FIND_BED_OFFSET_AND_SKEW_LINE1_CZ, @@ -1226,7 +1282,7 @@ const char MSG_FOLLOW_CALIBRATION_FLOW_CZ[] PROGMEM = "Tiskarna nebyla jeste zka const char MSG_FOLLOW_CALIBRATION_FLOW_IT[] PROGMEM = "Stampante ancora non calibrata. Si prega di seguire il manuale, capitolo PRIMI PASSI, sezione della calibrazione."; const char MSG_FOLLOW_CALIBRATION_FLOW_ES[] PROGMEM = "Impresora no esta calibrada todavia. Por favor usar el manual, el capitulo First steps, seleccion Calibration flow."; const char MSG_FOLLOW_CALIBRATION_FLOW_PL[] PROGMEM = "Drukarka nie zostala jeszcze skalibrowana. Prosze kierowac sie instrukcja, rozdzial Zaczynamy, podrozdzial Selftest."; -const char MSG_FOLLOW_CALIBRATION_FLOW_DE[] PROGMEM = "Der Drucker wurde noch nicht kalibriert. Bitte folgen Sie dem Handbuch, Kapitel First steps, Abschnitt Calibration flow."; +const char MSG_FOLLOW_CALIBRATION_FLOW_DE[] PROGMEM = "Der Drucker wurde noch nicht kalibriert. Bitte folgen Sie das Handbuch, Kapitel First steps, Abschnitt Calibration flow."; const char * const MSG_FOLLOW_CALIBRATION_FLOW_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_FOLLOW_CALIBRATION_FLOW_EN, MSG_FOLLOW_CALIBRATION_FLOW_CZ, @@ -1326,7 +1382,7 @@ const char MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE1_CZ[] PROGMEM = "Zlepsuji presno const char MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE1_IT[] PROGMEM = "Perfezion. il letto punto di calibraz."; const char MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE1_ES[] PROGMEM = "Mejorando cama punto de calibracion"; const char MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE1_PL[] PROGMEM = "Poprawiam precyzyjnosc punktu kalibracyjnego"; -const char MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE1_DE[] PROGMEM = "Verbesserung Bed Kalibrierpunkt"; +const char MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE1_DE[] PROGMEM = "Verbesserung Bett Kalibrierpunkt"; const char * const MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE1_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE1_EN, MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE1_CZ, @@ -1711,13 +1767,14 @@ const char * const MSG_MENU_CALIBRATION_LANG_TABLE[LANG_NUM] PROGMEM = { const char MSG_MESH_BED_LEVELING_EN[] PROGMEM = "Mesh Bed Leveling"; const char MSG_MESH_BED_LEVELING_IT[] PROGMEM = "Mesh livel. letto"; +const char MSG_MESH_BED_LEVELING_DE[] PROGMEM = "Mesh Bett Leveling"; const char * const MSG_MESH_BED_LEVELING_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_MESH_BED_LEVELING_EN, MSG_MESH_BED_LEVELING_EN, MSG_MESH_BED_LEVELING_IT, MSG_MESH_BED_LEVELING_EN, MSG_MESH_BED_LEVELING_EN, - MSG_MESH_BED_LEVELING_EN + MSG_MESH_BED_LEVELING_DE }; const char MSG_MIN_EN[] PROGMEM = " \002 Min"; @@ -1765,7 +1822,7 @@ const char MSG_MOVE_CARRIAGE_TO_THE_TOP_CZ[] PROGMEM = "Kalibrace XYZ. Otacenim const char MSG_MOVE_CARRIAGE_TO_THE_TOP_IT[] PROGMEM = "Calibrazione XYZ. Ruotare la manopola per alzare il carrello Z fino all'altezza massima. Click per terminare."; const char MSG_MOVE_CARRIAGE_TO_THE_TOP_ES[] PROGMEM = "Calibrando XYZ. Gira el boton para subir el carro Z hasta golpe piezas superioras. Despues haz clic."; const char MSG_MOVE_CARRIAGE_TO_THE_TOP_PL[] PROGMEM = "Kalibracja XYZ. Przekrec galke, aby przesunac os Z do gornych krancowek. Nacisnij, by potwierdzic."; -const char MSG_MOVE_CARRIAGE_TO_THE_TOP_DE[] PROGMEM = "Kalibrieren von XYZ. Drehen Sie den Knopf bis der obere Anschlag erreicht wird. Klicken wenn ganz oben."; +const char MSG_MOVE_CARRIAGE_TO_THE_TOP_DE[] PROGMEM = "Kalibrieren von XYZ. Drehen Sie den Knopf bis der obere Anschlag erreicht wird. Klicken Sie den Knopf wenn es ganz oben wird."; const char * const MSG_MOVE_CARRIAGE_TO_THE_TOP_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_MOVE_CARRIAGE_TO_THE_TOP_EN, MSG_MOVE_CARRIAGE_TO_THE_TOP_CZ, @@ -1780,7 +1837,7 @@ const char MSG_MOVE_CARRIAGE_TO_THE_TOP_Z_CZ[] PROGMEM = "Kalibrace Z. Otacenim const char MSG_MOVE_CARRIAGE_TO_THE_TOP_Z_IT[] PROGMEM = "Calibrazione Z. Ruotare la manopola per alzare il carrello Z fino all'altezza massima. Click per terminare."; const char MSG_MOVE_CARRIAGE_TO_THE_TOP_Z_ES[] PROGMEM = "Calibrando Z. Gira el boton para subir el carro Z hasta golpe piezas superioras. Despues haz clic."; const char MSG_MOVE_CARRIAGE_TO_THE_TOP_Z_PL[] PROGMEM = "Kalibracja Z. Przekrec galke, aby przesunac os Z do gornych krancowek. Nacisnij, by potwierdzic."; -const char MSG_MOVE_CARRIAGE_TO_THE_TOP_Z_DE[] PROGMEM = "Kalibrieren von Z. Drehen Sie den Knopf bis der obere Anschlag erreicht wird. Klicken wenn ganz oben."; +const char MSG_MOVE_CARRIAGE_TO_THE_TOP_Z_DE[] PROGMEM = "Kalibrieren von Z. Drehen Sie den Knopf bis der obere Anschlag erreicht wird. Klicken Sie den Knopf wenn es ganz oben wird."; const char * const MSG_MOVE_CARRIAGE_TO_THE_TOP_Z_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_MOVE_CARRIAGE_TO_THE_TOP_Z_EN, MSG_MOVE_CARRIAGE_TO_THE_TOP_Z_CZ, @@ -2113,13 +2170,33 @@ const char * const MSG_PLANNER_BUFFER_BYTES_LANG_TABLE[1] PROGMEM = { }; const char MSG_PLA_FILAMENT_LOADED_EN[] PROGMEM = "Is PLA filament loaded?"; -const char * const MSG_PLA_FILAMENT_LOADED_LANG_TABLE[1] PROGMEM = { - MSG_PLA_FILAMENT_LOADED_EN +const char MSG_PLA_FILAMENT_LOADED_CZ[] PROGMEM = "Je PLA filament zaveden?"; +const char MSG_PLA_FILAMENT_LOADED_IT[] PROGMEM = "Il PLA e stato caricato?"; +const char MSG_PLA_FILAMENT_LOADED_ES[] PROGMEM = "Esta el filamento PLA cargado?"; +const char MSG_PLA_FILAMENT_LOADED_PL[] PROGMEM = "Fialment PLA jest zaladowany?"; +const char MSG_PLA_FILAMENT_LOADED_DE[] PROGMEM = "Ist PLA Filament geladen?"; +const char * const MSG_PLA_FILAMENT_LOADED_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_PLA_FILAMENT_LOADED_EN, + MSG_PLA_FILAMENT_LOADED_CZ, + MSG_PLA_FILAMENT_LOADED_IT, + MSG_PLA_FILAMENT_LOADED_ES, + MSG_PLA_FILAMENT_LOADED_PL, + MSG_PLA_FILAMENT_LOADED_DE }; const char MSG_PLEASE_LOAD_PLA_EN[] PROGMEM = "Please load PLA filament first."; -const char * const MSG_PLEASE_LOAD_PLA_LANG_TABLE[1] PROGMEM = { - MSG_PLEASE_LOAD_PLA_EN +const char MSG_PLEASE_LOAD_PLA_CZ[] PROGMEM = "Nejdrive zavedte PLA filament prosim."; +const char MSG_PLEASE_LOAD_PLA_IT[] PROGMEM = "Per favore prima caricare filamento di PLA."; +const char MSG_PLEASE_LOAD_PLA_ES[] PROGMEM = "Carga el filamento PLA primero por favor."; +const char MSG_PLEASE_LOAD_PLA_PL[] PROGMEM = "Prosze, najpierw zaladuj filament PLA."; +const char MSG_PLEASE_LOAD_PLA_DE[] PROGMEM = "Bitte laden Sie zuerst PLA Filament."; +const char * const MSG_PLEASE_LOAD_PLA_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_PLEASE_LOAD_PLA_EN, + MSG_PLEASE_LOAD_PLA_CZ, + MSG_PLEASE_LOAD_PLA_IT, + MSG_PLEASE_LOAD_PLA_ES, + MSG_PLEASE_LOAD_PLA_PL, + MSG_PLEASE_LOAD_PLA_DE }; const char MSG_PLEASE_WAIT_EN[] PROGMEM = "Please wait"; @@ -2499,13 +2576,14 @@ const char * const MSG_SELFTEST_LANG_TABLE[LANG_NUM] PROGMEM = { const char MSG_SELFTEST_BEDHEATER_EN[] PROGMEM = "Bed / Heater"; const char MSG_SELFTEST_BEDHEATER_IT[] PROGMEM = "Letto/Riscald."; const char MSG_SELFTEST_BEDHEATER_ES[] PROGMEM = "Cama/Calentador"; +const char MSG_SELFTEST_BEDHEATER_DE[] PROGMEM = "Bett / Heater"; const char * const MSG_SELFTEST_BEDHEATER_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_SELFTEST_BEDHEATER_EN, MSG_SELFTEST_BEDHEATER_EN, MSG_SELFTEST_BEDHEATER_IT, MSG_SELFTEST_BEDHEATER_ES, MSG_SELFTEST_BEDHEATER_EN, - MSG_SELFTEST_BEDHEATER_EN + MSG_SELFTEST_BEDHEATER_DE }; const char MSG_SELFTEST_CHECK_ALLCORRECT_EN[] PROGMEM = "All correct "; @@ -2528,7 +2606,7 @@ const char MSG_SELFTEST_CHECK_BED_CZ[] PROGMEM = "Kontrola bed "; const char MSG_SELFTEST_CHECK_BED_IT[] PROGMEM = "Verifica letto"; const char MSG_SELFTEST_CHECK_BED_ES[] PROGMEM = "Control de cama"; const char MSG_SELFTEST_CHECK_BED_PL[] PROGMEM = "Kontrola bed "; -const char MSG_SELFTEST_CHECK_BED_DE[] PROGMEM = "Pr\x81""fe Bed "; +const char MSG_SELFTEST_CHECK_BED_DE[] PROGMEM = "Pruefe Bett "; const char * const MSG_SELFTEST_CHECK_BED_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_SELFTEST_CHECK_BED_EN, MSG_SELFTEST_CHECK_BED_CZ, @@ -2558,7 +2636,7 @@ const char MSG_SELFTEST_CHECK_HOTEND_CZ[] PROGMEM = "Kontrola hotend "; const char MSG_SELFTEST_CHECK_HOTEND_IT[] PROGMEM = "Verifica ugello"; const char MSG_SELFTEST_CHECK_HOTEND_ES[] PROGMEM = "Control hotend "; const char MSG_SELFTEST_CHECK_HOTEND_PL[] PROGMEM = "Kontrola hotend "; -const char MSG_SELFTEST_CHECK_HOTEND_DE[] PROGMEM = "Pruefe Hotend"; +const char MSG_SELFTEST_CHECK_HOTEND_DE[] PROGMEM = "Pruefe Duese"; const char * const MSG_SELFTEST_CHECK_HOTEND_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_SELFTEST_CHECK_HOTEND_EN, MSG_SELFTEST_CHECK_HOTEND_CZ, @@ -2927,7 +3005,7 @@ const char MSG_SILENT_MODE_OFF_EN[] PROGMEM = "Mode [high power]"; const char MSG_SILENT_MODE_OFF_CZ[] PROGMEM = "Mod [vys. vykon]"; const char MSG_SILENT_MODE_OFF_IT[] PROGMEM = "Mode [forte]"; const char MSG_SILENT_MODE_OFF_ES[] PROGMEM = "Modo [rend.pleno]"; -const char MSG_SILENT_MODE_OFF_PL[] PROGMEM = "Mod [w wydajnosc]"; +const char MSG_SILENT_MODE_OFF_PL[] PROGMEM = "Tryb[w wydajnosc]"; const char MSG_SILENT_MODE_OFF_DE[] PROGMEM = "Mode [Hohe Leist]"; const char * const MSG_SILENT_MODE_OFF_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_SILENT_MODE_OFF_EN, @@ -2942,7 +3020,7 @@ const char MSG_SILENT_MODE_ON_EN[] PROGMEM = "Mode [silent]"; const char MSG_SILENT_MODE_ON_CZ[] PROGMEM = "Mod [tichy]"; const char MSG_SILENT_MODE_ON_IT[] PROGMEM = "Modo [silenzioso]"; const char MSG_SILENT_MODE_ON_ES[] PROGMEM = "Modo [silencio]"; -const char MSG_SILENT_MODE_ON_PL[] PROGMEM = "Mod [cichy]"; +const char MSG_SILENT_MODE_ON_PL[] PROGMEM = "Tryb [cichy]"; const char MSG_SILENT_MODE_ON_DE[] PROGMEM = "Mode [leise]"; const char * const MSG_SILENT_MODE_ON_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_SILENT_MODE_ON_EN, @@ -2974,23 +3052,63 @@ const char * const MSG_SOFTWARE_RESET_LANG_TABLE[1] PROGMEM = { }; const char MSG_SORTING_EN[] PROGMEM = "Sorting files"; -const char * const MSG_SORTING_LANG_TABLE[1] PROGMEM = { - MSG_SORTING_EN +const char MSG_SORTING_CZ[] PROGMEM = "Trideni souboru"; +const char MSG_SORTING_IT[] PROGMEM = "Ordine dei file"; +const char MSG_SORTING_ES[] PROGMEM = "Ordenando archivos"; +const char MSG_SORTING_PL[] PROGMEM = "Sortowanie plikow"; +const char MSG_SORTING_DE[] PROGMEM = "Dateien sortieren"; +const char * const MSG_SORTING_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_SORTING_EN, + MSG_SORTING_CZ, + MSG_SORTING_IT, + MSG_SORTING_ES, + MSG_SORTING_PL, + MSG_SORTING_DE }; const char MSG_SORT_ALPHA_EN[] PROGMEM = "Sort: [Alphabet]"; -const char * const MSG_SORT_ALPHA_LANG_TABLE[1] PROGMEM = { - MSG_SORT_ALPHA_EN +const char MSG_SORT_ALPHA_CZ[] PROGMEM = "Trideni [Abeceda]"; +const char MSG_SORT_ALPHA_IT[] PROGMEM = "Ordine:[Alfabeto]"; +const char MSG_SORT_ALPHA_ES[] PROGMEM = "Ordenar:[Alfabet]"; +const char MSG_SORT_ALPHA_PL[] PROGMEM = "Sortuj: [Alfabet]"; +const char MSG_SORT_ALPHA_DE[] PROGMEM = "Sortieren:[Alpha]"; +const char * const MSG_SORT_ALPHA_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_SORT_ALPHA_EN, + MSG_SORT_ALPHA_CZ, + MSG_SORT_ALPHA_IT, + MSG_SORT_ALPHA_ES, + MSG_SORT_ALPHA_PL, + MSG_SORT_ALPHA_DE }; const char MSG_SORT_NONE_EN[] PROGMEM = "Sort: [None]"; -const char * const MSG_SORT_NONE_LANG_TABLE[1] PROGMEM = { - MSG_SORT_NONE_EN +const char MSG_SORT_NONE_CZ[] PROGMEM = "Trideni [Zadne]"; +const char MSG_SORT_NONE_IT[] PROGMEM = "Ordine: [Nessuno]"; +const char MSG_SORT_NONE_ES[] PROGMEM = "Ordenar:[Ninguno]"; +const char MSG_SORT_NONE_PL[] PROGMEM = "Sortuj: [Zaden]"; +const char MSG_SORT_NONE_DE[] PROGMEM = "Sortieren:[Keine]"; +const char * const MSG_SORT_NONE_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_SORT_NONE_EN, + MSG_SORT_NONE_CZ, + MSG_SORT_NONE_IT, + MSG_SORT_NONE_ES, + MSG_SORT_NONE_PL, + MSG_SORT_NONE_DE }; const char MSG_SORT_TIME_EN[] PROGMEM = "Sort: [Time]"; -const char * const MSG_SORT_TIME_LANG_TABLE[1] PROGMEM = { - MSG_SORT_TIME_EN +const char MSG_SORT_TIME_CZ[] PROGMEM = "Trideni [Cas]"; +const char MSG_SORT_TIME_IT[] PROGMEM = "Ordine: [Tempo]"; +const char MSG_SORT_TIME_ES[] PROGMEM = "Ordenar: [Tiempo]"; +const char MSG_SORT_TIME_PL[] PROGMEM = "Sortuj: [Czas]"; +const char MSG_SORT_TIME_DE[] PROGMEM = "Sortieren: [Zeit]"; +const char * const MSG_SORT_TIME_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_SORT_TIME_EN, + MSG_SORT_TIME_CZ, + MSG_SORT_TIME_IT, + MSG_SORT_TIME_ES, + MSG_SORT_TIME_PL, + MSG_SORT_TIME_DE }; const char MSG_SPEED_EN[] PROGMEM = "Speed"; @@ -3448,8 +3566,18 @@ const char * const MSG_USERWAIT_LANG_TABLE[LANG_NUM] PROGMEM = { }; const char MSG_V2_CALIBRATION_EN[] PROGMEM = "First layer cal."; -const char * const MSG_V2_CALIBRATION_LANG_TABLE[1] PROGMEM = { - MSG_V2_CALIBRATION_EN +const char MSG_V2_CALIBRATION_CZ[] PROGMEM = "Kal. prvni vrstvy"; +const char MSG_V2_CALIBRATION_IT[] PROGMEM = "Cal. primo layer."; +const char MSG_V2_CALIBRATION_ES[] PROGMEM = "Cal. primera cap."; +const char MSG_V2_CALIBRATION_PL[] PROGMEM = "Kal. 1. warstwy"; +const char MSG_V2_CALIBRATION_DE[] PROGMEM = "Erste-Schicht Kal"; +const char * const MSG_V2_CALIBRATION_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_V2_CALIBRATION_EN, + MSG_V2_CALIBRATION_CZ, + MSG_V2_CALIBRATION_IT, + MSG_V2_CALIBRATION_ES, + MSG_V2_CALIBRATION_PL, + MSG_V2_CALIBRATION_DE }; const char MSG_VMIN_EN[] PROGMEM = "Vmin"; @@ -3477,7 +3605,7 @@ const char MSG_WAITING_TEMP_CZ[] PROGMEM = "Cekani na zchladnuti trysky a podloz const char MSG_WAITING_TEMP_IT[] PROGMEM = "In attesa del raffreddamento della testina e del piatto"; const char MSG_WAITING_TEMP_ES[] PROGMEM = "Esperando enfriamiento de la cama y del extrusor."; const char MSG_WAITING_TEMP_PL[] PROGMEM = "Oczekiwanie na wychlodzenie dyszy i podkladki."; -const char MSG_WAITING_TEMP_DE[] PROGMEM = "Warten auf Abkuehlung von Heater und Bed."; +const char MSG_WAITING_TEMP_DE[] PROGMEM = "Warten auf Abkuehlung von Heater und Bett."; const char * const MSG_WAITING_TEMP_LANG_TABLE[LANG_NUM] PROGMEM = { MSG_WAITING_TEMP_EN, MSG_WAITING_TEMP_CZ, @@ -3513,93 +3641,273 @@ const char * const MSG_WIZARD_LANG_TABLE[1] PROGMEM = { }; const char MSG_WIZARD_CALIBRATION_FAILED_EN[] PROGMEM = "Please check our handbook and fix the problem. Then resume the Wizard by rebooting the printer."; -const char * const MSG_WIZARD_CALIBRATION_FAILED_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_CALIBRATION_FAILED_EN +const char MSG_WIZARD_CALIBRATION_FAILED_CZ[] PROGMEM = "Prosim nahlednete do manualu a opravte problem. Po te obnovte Wizarda rebootovanim tiskarny."; +const char MSG_WIZARD_CALIBRATION_FAILED_IT[] PROGMEM = "Per favore consulta il nostro manuale per risolvere il problema. Poi riprendi il Wizard dopo aver riavviato la stampante."; +const char MSG_WIZARD_CALIBRATION_FAILED_ES[] PROGMEM = "Lee el manual y resuelve el problema. Despues, reinicia la impresora y continua con el Wizard"; +const char MSG_WIZARD_CALIBRATION_FAILED_PL[] PROGMEM = "Prosze sprawdz nasz poradnik i napraw problem. Potem przywroc Wizard restartujac drukarke."; +const char MSG_WIZARD_CALIBRATION_FAILED_DE[] PROGMEM = "Bitte ueberpruefen Sie unser Handbuch und beheben Sie das Problem. Fahren Sie dann mit dem Assistenten fort, indem Sie den Drucker neu starten."; +const char * const MSG_WIZARD_CALIBRATION_FAILED_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_CALIBRATION_FAILED_EN, + MSG_WIZARD_CALIBRATION_FAILED_CZ, + MSG_WIZARD_CALIBRATION_FAILED_IT, + MSG_WIZARD_CALIBRATION_FAILED_ES, + MSG_WIZARD_CALIBRATION_FAILED_PL, + MSG_WIZARD_CALIBRATION_FAILED_DE }; const char MSG_WIZARD_CLEAN_HEATBED_EN[] PROGMEM = "Please clean heatbed and then press the knob."; -const char * const MSG_WIZARD_CLEAN_HEATBED_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_CLEAN_HEATBED_EN +const char MSG_WIZARD_CLEAN_HEATBED_CZ[] PROGMEM = "Prosim ocistete heatbed a stisknete tlacitko."; +const char MSG_WIZARD_CLEAN_HEATBED_IT[] PROGMEM = "Per favore pulisci il piatto, poi premi la manopola."; +const char MSG_WIZARD_CLEAN_HEATBED_ES[] PROGMEM = "Limpia la superficie de la heatbed, por favor, y presiona el mando."; +const char MSG_WIZARD_CLEAN_HEATBED_PL[] PROGMEM = "Prosze oczysc stolik i nacisnij guzik."; +const char MSG_WIZARD_CLEAN_HEATBED_DE[] PROGMEM = "Bitte reinigen Sie das Heizbett und druecken Sie dann den Knopf."; +const char * const MSG_WIZARD_CLEAN_HEATBED_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_CLEAN_HEATBED_EN, + MSG_WIZARD_CLEAN_HEATBED_CZ, + MSG_WIZARD_CLEAN_HEATBED_IT, + MSG_WIZARD_CLEAN_HEATBED_ES, + MSG_WIZARD_CLEAN_HEATBED_PL, + MSG_WIZARD_CLEAN_HEATBED_DE }; const char MSG_WIZARD_DONE_EN[] PROGMEM = "All is done. Happy printing!"; -const char * const MSG_WIZARD_DONE_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_DONE_EN +const char MSG_WIZARD_DONE_CZ[] PROGMEM = "Vse je hotovo."; +const char MSG_WIZARD_DONE_IT[] PROGMEM = "Ben fatto. Buona stampa!"; +const char MSG_WIZARD_DONE_ES[] PROGMEM = "Terminado! Feliz impresion!"; +const char MSG_WIZARD_DONE_PL[] PROGMEM = "Gotowe. Udanego druku!"; +const char MSG_WIZARD_DONE_DE[] PROGMEM = "Alles wurde getan. Viel Spass beim Drucken!"; +const char * const MSG_WIZARD_DONE_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_DONE_EN, + MSG_WIZARD_DONE_CZ, + MSG_WIZARD_DONE_IT, + MSG_WIZARD_DONE_ES, + MSG_WIZARD_DONE_PL, + MSG_WIZARD_DONE_DE }; const char MSG_WIZARD_FILAMENT_LOADED_EN[] PROGMEM = "Is filament loaded?"; -const char * const MSG_WIZARD_FILAMENT_LOADED_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_FILAMENT_LOADED_EN +const char MSG_WIZARD_FILAMENT_LOADED_CZ[] PROGMEM = "Je filament zaveden?"; +const char MSG_WIZARD_FILAMENT_LOADED_IT[] PROGMEM = "Il filamento e stato caricato?"; +const char MSG_WIZARD_FILAMENT_LOADED_ES[] PROGMEM = "Esta el filamento cargado?"; +const char MSG_WIZARD_FILAMENT_LOADED_PL[] PROGMEM = "Filament jest zaladowany?"; +const char MSG_WIZARD_FILAMENT_LOADED_DE[] PROGMEM = "Ist das Filament geladen?"; +const char * const MSG_WIZARD_FILAMENT_LOADED_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_FILAMENT_LOADED_EN, + MSG_WIZARD_FILAMENT_LOADED_CZ, + MSG_WIZARD_FILAMENT_LOADED_IT, + MSG_WIZARD_FILAMENT_LOADED_ES, + MSG_WIZARD_FILAMENT_LOADED_PL, + MSG_WIZARD_FILAMENT_LOADED_DE }; const char MSG_WIZARD_HEATING_EN[] PROGMEM = "Preheating nozzle. Please wait."; -const char * const MSG_WIZARD_HEATING_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_HEATING_EN +const char MSG_WIZARD_HEATING_CZ[] PROGMEM = "Predehrivam trysku. Prosim cekejte."; +const char MSG_WIZARD_HEATING_IT[] PROGMEM = "Sto preriscaldando l'ugello. Per favore attendi."; +const char MSG_WIZARD_HEATING_ES[] PROGMEM = "Precalentando nozzle. Espera por favor."; +const char MSG_WIZARD_HEATING_PL[] PROGMEM = "Nagrzewanie dyszy. Prosze czekac."; +const char MSG_WIZARD_HEATING_DE[] PROGMEM = "Vorheizen der Duese. Bitte warten."; +const char * const MSG_WIZARD_HEATING_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_HEATING_EN, + MSG_WIZARD_HEATING_CZ, + MSG_WIZARD_HEATING_IT, + MSG_WIZARD_HEATING_ES, + MSG_WIZARD_HEATING_PL, + MSG_WIZARD_HEATING_DE }; const char MSG_WIZARD_INSERT_CORRECT_FILAMENT_EN[] PROGMEM = "Please load PLA filament and then resume Wizard by rebooting the printer."; -const char * const MSG_WIZARD_INSERT_CORRECT_FILAMENT_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_INSERT_CORRECT_FILAMENT_EN +const char MSG_WIZARD_INSERT_CORRECT_FILAMENT_CZ[] PROGMEM = "Prosim zavedte PLA filament a po te obnovte Wizarda stisknutim reset tlacitka."; +const char MSG_WIZARD_INSERT_CORRECT_FILAMENT_IT[] PROGMEM = "Per favore carica filamento di PLA e riprendi il Wizard dopo aver riavviato la stampante."; +const char MSG_WIZARD_INSERT_CORRECT_FILAMENT_ES[] PROGMEM = "Carga filamento PLA, por favor, y reinicia la impresora para continuar con el Wizard"; +const char MSG_WIZARD_INSERT_CORRECT_FILAMENT_PL[] PROGMEM = "Prosze zaladuj filament PLA i przywroc Wizard przez restart drukarki."; +const char MSG_WIZARD_INSERT_CORRECT_FILAMENT_DE[] PROGMEM = "Bitte laden Sie PLA-Filament und fahren Sie mit dem Assistenten fort, indem Sie den Drucker neu starten."; +const char * const MSG_WIZARD_INSERT_CORRECT_FILAMENT_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_INSERT_CORRECT_FILAMENT_EN, + MSG_WIZARD_INSERT_CORRECT_FILAMENT_CZ, + MSG_WIZARD_INSERT_CORRECT_FILAMENT_IT, + MSG_WIZARD_INSERT_CORRECT_FILAMENT_ES, + MSG_WIZARD_INSERT_CORRECT_FILAMENT_PL, + MSG_WIZARD_INSERT_CORRECT_FILAMENT_DE }; const char MSG_WIZARD_LOAD_FILAMENT_EN[] PROGMEM = "Please insert PLA filament to the extruder, then press knob to load it."; -const char * const MSG_WIZARD_LOAD_FILAMENT_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_LOAD_FILAMENT_EN +const char MSG_WIZARD_LOAD_FILAMENT_CZ[] PROGMEM = "Prosim vlozte PLA filament do extruderu, po te stisknete tlacitko pro zavedeni filamentu."; +const char MSG_WIZARD_LOAD_FILAMENT_IT[] PROGMEM = "Per favore inserisci il filamento di PLA nell'estrusore, poi premi la manopola per caricare."; +const char MSG_WIZARD_LOAD_FILAMENT_ES[] PROGMEM = "Inserta, por favor, filamento PLA en el extrusor. Despues, presiona el mando para cargarlo."; +const char MSG_WIZARD_LOAD_FILAMENT_PL[] PROGMEM = "Prosze umiesc filament PLA w ekstruderze i nacisnij przycisk by zaladowac."; +const char MSG_WIZARD_LOAD_FILAMENT_DE[] PROGMEM = "Fuehren Sie bitte PLA Filament in den Extruder und bestaetigen Sie den Knopf um es zu laden."; +const char * const MSG_WIZARD_LOAD_FILAMENT_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_LOAD_FILAMENT_EN, + MSG_WIZARD_LOAD_FILAMENT_CZ, + MSG_WIZARD_LOAD_FILAMENT_IT, + MSG_WIZARD_LOAD_FILAMENT_ES, + MSG_WIZARD_LOAD_FILAMENT_PL, + MSG_WIZARD_LOAD_FILAMENT_DE }; const char MSG_WIZARD_PLA_FILAMENT_EN[] PROGMEM = "Is it PLA filament?"; -const char * const MSG_WIZARD_PLA_FILAMENT_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_PLA_FILAMENT_EN +const char MSG_WIZARD_PLA_FILAMENT_CZ[] PROGMEM = "Je to PLA filament?"; +const char MSG_WIZARD_PLA_FILAMENT_IT[] PROGMEM = "E questo un filamento di PLA?"; +const char MSG_WIZARD_PLA_FILAMENT_ES[] PROGMEM = "Es este un filamento PLA?"; +const char MSG_WIZARD_PLA_FILAMENT_PL[] PROGMEM = "Czy to filament PLA?"; +const char MSG_WIZARD_PLA_FILAMENT_DE[] PROGMEM = "Ist es wirklich PLA Filament?"; +const char * const MSG_WIZARD_PLA_FILAMENT_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_PLA_FILAMENT_EN, + MSG_WIZARD_PLA_FILAMENT_CZ, + MSG_WIZARD_PLA_FILAMENT_IT, + MSG_WIZARD_PLA_FILAMENT_ES, + MSG_WIZARD_PLA_FILAMENT_PL, + MSG_WIZARD_PLA_FILAMENT_DE }; const char MSG_WIZARD_QUIT_EN[] PROGMEM = "You can always resume the Wizard from Calibration -> Wizard."; -const char * const MSG_WIZARD_QUIT_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_QUIT_EN +const char MSG_WIZARD_QUIT_CZ[] PROGMEM = "Wizarda muzete kdykoliv znovu spustit z menu Calibration -> Wizard"; +const char MSG_WIZARD_QUIT_IT[] PROGMEM = "E possibile proseguire la guide Wizard in qualsiasi momento attraverso Calibrazione -> Wizard."; +const char MSG_WIZARD_QUIT_ES[] PROGMEM = "Siempre puedes acceder al asistente desde Calibracion -> Wizard"; +const char MSG_WIZARD_QUIT_PL[] PROGMEM = "Zawsze mozesz przywrocic Wizard przez Kalibracja -> Wizard."; +const char MSG_WIZARD_QUIT_DE[] PROGMEM = "Sie koennen immer den Asistenten im Menu neu aufrufen: Kalibrierung -> Assistant"; +const char * const MSG_WIZARD_QUIT_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_QUIT_EN, + MSG_WIZARD_QUIT_CZ, + MSG_WIZARD_QUIT_IT, + MSG_WIZARD_QUIT_ES, + MSG_WIZARD_QUIT_PL, + MSG_WIZARD_QUIT_DE }; const char MSG_WIZARD_REPEAT_V2_CAL_EN[] PROGMEM = "Do you want to repeat last step to readjust distance between nozzle and heatbed?"; -const char * const MSG_WIZARD_REPEAT_V2_CAL_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_REPEAT_V2_CAL_EN +const char MSG_WIZARD_REPEAT_V2_CAL_CZ[] PROGMEM = "Chcete opakovat posledni krok a pozmenit vzdalenost mezi tryskou a heatbed?"; +const char MSG_WIZARD_REPEAT_V2_CAL_IT[] PROGMEM = "Desideri ripetere l'ultimo passaggio per migliorare la distanza fra ugello e piatto?"; +const char MSG_WIZARD_REPEAT_V2_CAL_ES[] PROGMEM = "Quieres repetir el ultimo paso para reajustar la distancia nozzle-heatbed?"; +const char MSG_WIZARD_REPEAT_V2_CAL_PL[] PROGMEM = "Chcesz powtorzyc ostatni krok i przestawic odleglosc miedzy dysza a stolikiem?"; +const char MSG_WIZARD_REPEAT_V2_CAL_DE[] PROGMEM = "Moechten Sie den letzten Schritt wiederholen um den Abstand zwischen Duese und Druckbett neu einzustellen?"; +const char * const MSG_WIZARD_REPEAT_V2_CAL_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_REPEAT_V2_CAL_EN, + MSG_WIZARD_REPEAT_V2_CAL_CZ, + MSG_WIZARD_REPEAT_V2_CAL_IT, + MSG_WIZARD_REPEAT_V2_CAL_ES, + MSG_WIZARD_REPEAT_V2_CAL_PL, + MSG_WIZARD_REPEAT_V2_CAL_DE }; const char MSG_WIZARD_RERUN_EN[] PROGMEM = "Running Wizard will delete current calibration results and start from the beginning. Continue?"; -const char * const MSG_WIZARD_RERUN_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_RERUN_EN +const char MSG_WIZARD_RERUN_CZ[] PROGMEM = "Spusteni Wizarda vymaze ulozene vysledky vsech kalibraci a spusti kalibracni proces od zacatku. Pokracovat?"; +const char MSG_WIZARD_RERUN_IT[] PROGMEM = "Se avvi il Wizard perderai la calibrazione preesistente e dovrai ricominciare dall'inizio. Continuare?"; +const char MSG_WIZARD_RERUN_ES[] PROGMEM = "Ejecutar el Wizard borrara los valores de calibracion actuales y comenzara de nuevo. Continuar?"; +const char MSG_WIZARD_RERUN_PL[] PROGMEM = "Wlaczenie Wizard usunie obecne dane kalibracyjne i zacznie od nowa. Kontynuowac?"; +const char MSG_WIZARD_RERUN_DE[] PROGMEM = "Der laufende Assistent loescht die aktuelle Kalibrierergebnisse und wird von Anfang an beginnen. Fortsetzen?"; +const char * const MSG_WIZARD_RERUN_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_RERUN_EN, + MSG_WIZARD_RERUN_CZ, + MSG_WIZARD_RERUN_IT, + MSG_WIZARD_RERUN_ES, + MSG_WIZARD_RERUN_PL, + MSG_WIZARD_RERUN_DE }; const char MSG_WIZARD_SELFTEST_EN[] PROGMEM = "First, I will run the selftest to check most common assembly problems."; -const char * const MSG_WIZARD_SELFTEST_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_SELFTEST_EN +const char MSG_WIZARD_SELFTEST_CZ[] PROGMEM = "Nejdriv pomoci selftestu zkontoluji nejcastejsi chyby vznikajici pri sestaveni tiskarny."; +const char MSG_WIZARD_SELFTEST_IT[] PROGMEM = "Anzitutto avviero il Self Test per controllare gli errori di assemblaggio piu comuni."; +const char MSG_WIZARD_SELFTEST_ES[] PROGMEM = "Primero, hare el Selftest para comprobar los problemas de montaje mas comunes."; +const char MSG_WIZARD_SELFTEST_PL[] PROGMEM = "Najpierw wlacze autotest w celu kontrolli najczestszych problemow z montazem."; +const char MSG_WIZARD_SELFTEST_DE[] PROGMEM = "Zunaechst fuehre ich den Selbsttest durch um die haeufigsten Probleme bei der Aufbau zu ueberpruefen."; +const char * const MSG_WIZARD_SELFTEST_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_SELFTEST_EN, + MSG_WIZARD_SELFTEST_CZ, + MSG_WIZARD_SELFTEST_IT, + MSG_WIZARD_SELFTEST_ES, + MSG_WIZARD_SELFTEST_PL, + MSG_WIZARD_SELFTEST_DE }; const char MSG_WIZARD_V2_CAL_EN[] PROGMEM = "Now I will calibrate distance between tip of the nozzle and heatbed surface."; -const char * const MSG_WIZARD_V2_CAL_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_V2_CAL_EN +const char MSG_WIZARD_V2_CAL_CZ[] PROGMEM = "Nyni zkalibruji vzdalenost mezi koncem trysky a povrchem heatbedu."; +const char MSG_WIZARD_V2_CAL_IT[] PROGMEM = "Adesso tarero lo stacco fra ugello e superfice del piatto."; +const char MSG_WIZARD_V2_CAL_ES[] PROGMEM = "Voy a calibrar la distancia entre la punta del nozzle y la superficie de la heatbed."; +const char MSG_WIZARD_V2_CAL_PL[] PROGMEM = "Kalibruje odleglosc miedzy koncowka dyszy a stolikiem."; +const char MSG_WIZARD_V2_CAL_DE[] PROGMEM = "Jetzt werde ich den Abstand zwischen Duesenspitze und Druckbett kalibrieren."; +const char * const MSG_WIZARD_V2_CAL_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_V2_CAL_EN, + MSG_WIZARD_V2_CAL_CZ, + MSG_WIZARD_V2_CAL_IT, + MSG_WIZARD_V2_CAL_ES, + MSG_WIZARD_V2_CAL_PL, + MSG_WIZARD_V2_CAL_DE }; const char MSG_WIZARD_V2_CAL_2_EN[] PROGMEM = "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."; -const char * const MSG_WIZARD_V2_CAL_2_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_V2_CAL_2_EN +const char MSG_WIZARD_V2_CAL_2_CZ[] PROGMEM = "Zacnu tisknout linku a Vy budete postupne snizovat trysku otacenim tlacitka dokud nedosahnete optimalni vysky. Prohlednete si obrazky v nasi prirucce v kapitole Kalibrace"; +const char MSG_WIZARD_V2_CAL_2_IT[] PROGMEM = "Adesso iniziero a stampare una linea e tu dovrai abbassare l'ugello poco per volta ruotando la manopola sino a raggiungere una altezza ottimale. Per favore dai uno sguardo all'immagine del nostro manuale, cap.Calibrazione."; +const char MSG_WIZARD_V2_CAL_2_ES[] PROGMEM = "Voy a comenzar a imprimir la linea y tu bajaras el nozzle gradualmente al rotar el mando, hasta que llegues a la altura optima. Mira las imagenes del capitulo Calibracion en el manual."; +const char MSG_WIZARD_V2_CAL_2_PL[] PROGMEM = "Zaczne drukowac linie. Stopniowo opuszczaj dysze przekrecajac guzik, poki nie uzyskasz optymalnej wysokosci. Sprawdz obrazki w naszym poradniku w rozdz. Kalibracja"; +const char MSG_WIZARD_V2_CAL_2_DE[] PROGMEM = "Ich werde jetzt erste Linie drucken. Waehrend des Druckes koennen Sie die Duese allmaehlich senken indem Sie den Knopf drehen, bis Sie die optimale Hoehe erreichen. Ueberpruefen Sie die Bilder in unserem Handbuch im Kapitel Kalibrierung"; +const char * const MSG_WIZARD_V2_CAL_2_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_V2_CAL_2_EN, + MSG_WIZARD_V2_CAL_2_CZ, + MSG_WIZARD_V2_CAL_2_IT, + MSG_WIZARD_V2_CAL_2_ES, + MSG_WIZARD_V2_CAL_2_PL, + MSG_WIZARD_V2_CAL_2_DE }; const char MSG_WIZARD_WELCOME_EN[] PROGMEM = "Hi, I am your Original Prusa i3 printer. Would you like me to guide you through the setup process?"; -const char * const MSG_WIZARD_WELCOME_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_WELCOME_EN +const char MSG_WIZARD_WELCOME_CZ[] PROGMEM = "Dobry den, jsem vase tiskarna Original Prusa i3. Chcete abych Vas provedla kalibracnim procesem?"; +const char MSG_WIZARD_WELCOME_IT[] PROGMEM = "Ciao, sono la tua stampante Original Prusa i3. Gradiresti aiuto attraverso il processo di configurazione?"; +const char MSG_WIZARD_WELCOME_ES[] PROGMEM = "Hola, soy tu impresora Original Prusa i3. Quieres que te guie a traves de la configuracion?"; +const char MSG_WIZARD_WELCOME_PL[] PROGMEM = "Czesc, jestem Twoja Original Prusa i3. Czy mam pomoc Ci z instalacja?"; +const char MSG_WIZARD_WELCOME_DE[] PROGMEM = "Hallo, ich bin dein Original Prusa i3 Drucker. Moechten Sie meine Hilfe durch den Setup-Prozess?"; +const char * const MSG_WIZARD_WELCOME_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_WELCOME_EN, + MSG_WIZARD_WELCOME_CZ, + MSG_WIZARD_WELCOME_IT, + MSG_WIZARD_WELCOME_ES, + MSG_WIZARD_WELCOME_PL, + MSG_WIZARD_WELCOME_DE }; const char MSG_WIZARD_WILL_PREHEAT_EN[] PROGMEM = "Now I will preheat nozzle for PLA."; -const char * const MSG_WIZARD_WILL_PREHEAT_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_WILL_PREHEAT_EN +const char MSG_WIZARD_WILL_PREHEAT_CZ[] PROGMEM = "Nyni predehreji trysku pro PLA."; +const char MSG_WIZARD_WILL_PREHEAT_IT[] PROGMEM = "Adesso preriscaldero l'ugello per PLA."; +const char MSG_WIZARD_WILL_PREHEAT_ES[] PROGMEM = "Voy a precalentar el nozzle para PLA ahora."; +const char MSG_WIZARD_WILL_PREHEAT_PL[] PROGMEM = "Nagrzewam dysze dla PLA."; +const char MSG_WIZARD_WILL_PREHEAT_DE[] PROGMEM = "Jetzt werde ich die Duese fuer PLA vorheizen. "; +const char * const MSG_WIZARD_WILL_PREHEAT_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_WILL_PREHEAT_EN, + MSG_WIZARD_WILL_PREHEAT_CZ, + MSG_WIZARD_WILL_PREHEAT_IT, + MSG_WIZARD_WILL_PREHEAT_ES, + MSG_WIZARD_WILL_PREHEAT_PL, + MSG_WIZARD_WILL_PREHEAT_DE }; const char MSG_WIZARD_XYZ_CAL_EN[] PROGMEM = "I will run xyz calibration now. It will take approx. 12 mins."; -const char * const MSG_WIZARD_XYZ_CAL_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_XYZ_CAL_EN +const char MSG_WIZARD_XYZ_CAL_CZ[] PROGMEM = "Nyni provedu xyz kalibraci. Zabere to priblizne 12 min."; +const char MSG_WIZARD_XYZ_CAL_IT[] PROGMEM = "Adesso avviero una Calibrazione XYZ. Puo durare circa 12 min."; +const char MSG_WIZARD_XYZ_CAL_ES[] PROGMEM = "Hare la calibracion XYZ. Tardara 12 min. aproximadamente."; +const char MSG_WIZARD_XYZ_CAL_PL[] PROGMEM = "Wlaczam kalibracje xyz. Zajmie to ok. 12 min."; +const char MSG_WIZARD_XYZ_CAL_DE[] PROGMEM = "Ich werde jetzt die XYZ-Kalibrierung durchfuehren. Es wird ca. 12 Minuten dauern"; +const char * const MSG_WIZARD_XYZ_CAL_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_XYZ_CAL_EN, + MSG_WIZARD_XYZ_CAL_CZ, + MSG_WIZARD_XYZ_CAL_IT, + MSG_WIZARD_XYZ_CAL_ES, + MSG_WIZARD_XYZ_CAL_PL, + MSG_WIZARD_XYZ_CAL_DE }; const char MSG_WIZARD_Z_CAL_EN[] PROGMEM = "I will run z calibration now."; -const char * const MSG_WIZARD_Z_CAL_LANG_TABLE[1] PROGMEM = { - MSG_WIZARD_Z_CAL_EN +const char MSG_WIZARD_Z_CAL_CZ[] PROGMEM = "Nyni provedu z kalibraci."; +const char MSG_WIZARD_Z_CAL_IT[] PROGMEM = "Adesso avviero una Calibrazione Z."; +const char MSG_WIZARD_Z_CAL_ES[] PROGMEM = "Voy a hacer Calibracion Z ahora."; +const char MSG_WIZARD_Z_CAL_PL[] PROGMEM = "Wlaczam kalibracje z."; +const char MSG_WIZARD_Z_CAL_DE[] PROGMEM = "Ich werde jetzt die Z Kalibrierung durchfuehren."; +const char * const MSG_WIZARD_Z_CAL_LANG_TABLE[LANG_NUM] PROGMEM = { + MSG_WIZARD_Z_CAL_EN, + MSG_WIZARD_Z_CAL_CZ, + MSG_WIZARD_Z_CAL_IT, + MSG_WIZARD_Z_CAL_ES, + MSG_WIZARD_Z_CAL_PL, + MSG_WIZARD_Z_CAL_DE }; const char MSG_XYZ_DETAILS_EN[] PROGMEM = "XYZ cal. details"; diff --git a/Firmware/language_all.h b/Firmware/language_all.h index 31da60eed..49c078e56 100644 --- a/Firmware/language_all.h +++ b/Firmware/language_all.h @@ -38,8 +38,8 @@ extern const char* const MSG_AUTHOR_LANG_TABLE[1]; #define MSG_AUTHOR LANG_TABLE_SELECT_EXPLICIT(MSG_AUTHOR_LANG_TABLE, 0) extern const char* const MSG_AUTO_HOME_LANG_TABLE[LANG_NUM]; #define MSG_AUTO_HOME LANG_TABLE_SELECT(MSG_AUTO_HOME_LANG_TABLE) -extern const char* const MSG_AUTO_MODE_ON_LANG_TABLE[1]; -#define MSG_AUTO_MODE_ON LANG_TABLE_SELECT_EXPLICIT(MSG_AUTO_MODE_ON_LANG_TABLE, 0) +extern const char* const MSG_AUTO_MODE_ON_LANG_TABLE[LANG_NUM]; +#define MSG_AUTO_MODE_ON LANG_TABLE_SELECT(MSG_AUTO_MODE_ON_LANG_TABLE) extern const char* const MSG_A_RETRACT_LANG_TABLE[1]; #define MSG_A_RETRACT LANG_TABLE_SELECT_EXPLICIT(MSG_A_RETRACT_LANG_TABLE, 0) extern const char* const MSG_BABYSTEPPING_X_LANG_TABLE[1]; @@ -152,8 +152,8 @@ extern const char* const MSG_CURRENT_LANG_TABLE[LANG_NUM]; #define MSG_CURRENT LANG_TABLE_SELECT(MSG_CURRENT_LANG_TABLE) extern const char* const MSG_DATE_LANG_TABLE[LANG_NUM]; #define MSG_DATE LANG_TABLE_SELECT(MSG_DATE_LANG_TABLE) -extern const char* const MSG_DEFAULT_SETTINGS_LOADED_LANG_TABLE[1]; -#define MSG_DEFAULT_SETTINGS_LOADED LANG_TABLE_SELECT_EXPLICIT(MSG_DEFAULT_SETTINGS_LOADED_LANG_TABLE, 0) +extern const char* const MSG_DEFAULT_SETTINGS_LOADED_LANG_TABLE[LANG_NUM]; +#define MSG_DEFAULT_SETTINGS_LOADED LANG_TABLE_SELECT(MSG_DEFAULT_SETTINGS_LOADED_LANG_TABLE) extern const char* const MSG_DISABLE_STEPPERS_LANG_TABLE[LANG_NUM]; #define MSG_DISABLE_STEPPERS LANG_TABLE_SELECT(MSG_DISABLE_STEPPERS_LANG_TABLE) extern const char* const MSG_DWELL_LANG_TABLE[LANG_NUM]; @@ -220,16 +220,22 @@ extern const char* const MSG_FILAMENT_LOADING_T2_LANG_TABLE[LANG_NUM]; #define MSG_FILAMENT_LOADING_T2 LANG_TABLE_SELECT(MSG_FILAMENT_LOADING_T2_LANG_TABLE) extern const char* const MSG_FILAMENT_LOADING_T3_LANG_TABLE[LANG_NUM]; #define MSG_FILAMENT_LOADING_T3 LANG_TABLE_SELECT(MSG_FILAMENT_LOADING_T3_LANG_TABLE) -extern const char* const MSG_FILE_CNT_LANG_TABLE[1]; -#define MSG_FILE_CNT LANG_TABLE_SELECT_EXPLICIT(MSG_FILE_CNT_LANG_TABLE, 0) -extern const char* const MSG_FILE_INCOMPLETE_LANG_TABLE[1]; -#define MSG_FILE_INCOMPLETE LANG_TABLE_SELECT_EXPLICIT(MSG_FILE_INCOMPLETE_LANG_TABLE, 0) +extern const char* const MSG_FILE_CNT_LANG_TABLE[LANG_NUM]; +#define MSG_FILE_CNT LANG_TABLE_SELECT(MSG_FILE_CNT_LANG_TABLE) +extern const char* const MSG_FILE_INCOMPLETE_LANG_TABLE[LANG_NUM]; +#define MSG_FILE_INCOMPLETE LANG_TABLE_SELECT(MSG_FILE_INCOMPLETE_LANG_TABLE) extern const char* const MSG_FILE_PRINTED_LANG_TABLE[1]; #define MSG_FILE_PRINTED LANG_TABLE_SELECT_EXPLICIT(MSG_FILE_PRINTED_LANG_TABLE, 0) extern const char* const MSG_FILE_SAVED_LANG_TABLE[1]; #define MSG_FILE_SAVED LANG_TABLE_SELECT_EXPLICIT(MSG_FILE_SAVED_LANG_TABLE, 0) extern const char* const MSG_FIL_ADJUSTING_LANG_TABLE[LANG_NUM]; #define MSG_FIL_ADJUSTING LANG_TABLE_SELECT(MSG_FIL_ADJUSTING_LANG_TABLE) +extern const char* const MSG_FIL_RUNOUT_STATUS_GND_LANG_TABLE[1]; +#define MSG_FIL_RUNOUT_STATUS_GND LANG_TABLE_SELECT_EXPLICIT(MSG_FIL_RUNOUT_STATUS_GND_LANG_TABLE, 0) +extern const char* const MSG_FIL_RUNOUT_STATUS_OFF_LANG_TABLE[1]; +#define MSG_FIL_RUNOUT_STATUS_OFF LANG_TABLE_SELECT_EXPLICIT(MSG_FIL_RUNOUT_STATUS_OFF_LANG_TABLE, 0) +extern const char* const MSG_FIL_RUNOUT_STATUS_VCC_LANG_TABLE[1]; +#define MSG_FIL_RUNOUT_STATUS_VCC LANG_TABLE_SELECT_EXPLICIT(MSG_FIL_RUNOUT_STATUS_VCC_LANG_TABLE, 0) extern const char* const MSG_FIND_BED_OFFSET_AND_SKEW_ITERATION_LANG_TABLE[LANG_NUM]; #define MSG_FIND_BED_OFFSET_AND_SKEW_ITERATION LANG_TABLE_SELECT(MSG_FIND_BED_OFFSET_AND_SKEW_ITERATION_LANG_TABLE) extern const char* const MSG_FIND_BED_OFFSET_AND_SKEW_LINE1_LANG_TABLE[LANG_NUM]; @@ -402,10 +408,10 @@ extern const char* const MSG_PINDA_PREHEAT_LANG_TABLE[LANG_NUM]; #define MSG_PINDA_PREHEAT LANG_TABLE_SELECT(MSG_PINDA_PREHEAT_LANG_TABLE) extern const char* const MSG_PLANNER_BUFFER_BYTES_LANG_TABLE[1]; #define MSG_PLANNER_BUFFER_BYTES LANG_TABLE_SELECT_EXPLICIT(MSG_PLANNER_BUFFER_BYTES_LANG_TABLE, 0) -extern const char* const MSG_PLA_FILAMENT_LOADED_LANG_TABLE[1]; -#define MSG_PLA_FILAMENT_LOADED LANG_TABLE_SELECT_EXPLICIT(MSG_PLA_FILAMENT_LOADED_LANG_TABLE, 0) -extern const char* const MSG_PLEASE_LOAD_PLA_LANG_TABLE[1]; -#define MSG_PLEASE_LOAD_PLA LANG_TABLE_SELECT_EXPLICIT(MSG_PLEASE_LOAD_PLA_LANG_TABLE, 0) +extern const char* const MSG_PLA_FILAMENT_LOADED_LANG_TABLE[LANG_NUM]; +#define MSG_PLA_FILAMENT_LOADED LANG_TABLE_SELECT(MSG_PLA_FILAMENT_LOADED_LANG_TABLE) +extern const char* const MSG_PLEASE_LOAD_PLA_LANG_TABLE[LANG_NUM]; +#define MSG_PLEASE_LOAD_PLA LANG_TABLE_SELECT(MSG_PLEASE_LOAD_PLA_LANG_TABLE) extern const char* const MSG_PLEASE_WAIT_LANG_TABLE[LANG_NUM]; #define MSG_PLEASE_WAIT LANG_TABLE_SELECT(MSG_PLEASE_WAIT_LANG_TABLE) extern const char* const MSG_POSITION_UNKNOWN_LANG_TABLE[1]; @@ -560,14 +566,14 @@ extern const char* const MSG_SLIGHT_SKEW_LANG_TABLE[LANG_NUM]; #define MSG_SLIGHT_SKEW LANG_TABLE_SELECT(MSG_SLIGHT_SKEW_LANG_TABLE) extern const char* const MSG_SOFTWARE_RESET_LANG_TABLE[1]; #define MSG_SOFTWARE_RESET LANG_TABLE_SELECT_EXPLICIT(MSG_SOFTWARE_RESET_LANG_TABLE, 0) -extern const char* const MSG_SORTING_LANG_TABLE[1]; -#define MSG_SORTING LANG_TABLE_SELECT_EXPLICIT(MSG_SORTING_LANG_TABLE, 0) -extern const char* const MSG_SORT_ALPHA_LANG_TABLE[1]; -#define MSG_SORT_ALPHA LANG_TABLE_SELECT_EXPLICIT(MSG_SORT_ALPHA_LANG_TABLE, 0) -extern const char* const MSG_SORT_NONE_LANG_TABLE[1]; -#define MSG_SORT_NONE LANG_TABLE_SELECT_EXPLICIT(MSG_SORT_NONE_LANG_TABLE, 0) -extern const char* const MSG_SORT_TIME_LANG_TABLE[1]; -#define MSG_SORT_TIME LANG_TABLE_SELECT_EXPLICIT(MSG_SORT_TIME_LANG_TABLE, 0) +extern const char* const MSG_SORTING_LANG_TABLE[LANG_NUM]; +#define MSG_SORTING LANG_TABLE_SELECT(MSG_SORTING_LANG_TABLE) +extern const char* const MSG_SORT_ALPHA_LANG_TABLE[LANG_NUM]; +#define MSG_SORT_ALPHA LANG_TABLE_SELECT(MSG_SORT_ALPHA_LANG_TABLE) +extern const char* const MSG_SORT_NONE_LANG_TABLE[LANG_NUM]; +#define MSG_SORT_NONE LANG_TABLE_SELECT(MSG_SORT_NONE_LANG_TABLE) +extern const char* const MSG_SORT_TIME_LANG_TABLE[LANG_NUM]; +#define MSG_SORT_TIME LANG_TABLE_SELECT(MSG_SORT_TIME_LANG_TABLE) extern const char* const MSG_SPEED_LANG_TABLE[LANG_NUM]; #define MSG_SPEED LANG_TABLE_SELECT(MSG_SPEED_LANG_TABLE) extern const char* const MSG_STACK_ERROR_LANG_TABLE[1]; @@ -636,8 +642,8 @@ extern const char* const MSG_USED_LANG_TABLE[LANG_NUM]; #define MSG_USED LANG_TABLE_SELECT(MSG_USED_LANG_TABLE) extern const char* const MSG_USERWAIT_LANG_TABLE[LANG_NUM]; #define MSG_USERWAIT LANG_TABLE_SELECT(MSG_USERWAIT_LANG_TABLE) -extern const char* const MSG_V2_CALIBRATION_LANG_TABLE[1]; -#define MSG_V2_CALIBRATION LANG_TABLE_SELECT_EXPLICIT(MSG_V2_CALIBRATION_LANG_TABLE, 0) +extern const char* const MSG_V2_CALIBRATION_LANG_TABLE[LANG_NUM]; +#define MSG_V2_CALIBRATION LANG_TABLE_SELECT(MSG_V2_CALIBRATION_LANG_TABLE) extern const char* const MSG_VMIN_LANG_TABLE[1]; #define MSG_VMIN LANG_TABLE_SELECT_EXPLICIT(MSG_VMIN_LANG_TABLE, 0) extern const char* const MSG_VOLUMETRIC_LANG_TABLE[1]; @@ -654,42 +660,42 @@ extern const char* const MSG_WATCHDOG_RESET_LANG_TABLE[1]; #define MSG_WATCHDOG_RESET LANG_TABLE_SELECT_EXPLICIT(MSG_WATCHDOG_RESET_LANG_TABLE, 0) extern const char* const MSG_WIZARD_LANG_TABLE[1]; #define MSG_WIZARD LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_CALIBRATION_FAILED_LANG_TABLE[1]; -#define MSG_WIZARD_CALIBRATION_FAILED LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_CALIBRATION_FAILED_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_CLEAN_HEATBED_LANG_TABLE[1]; -#define MSG_WIZARD_CLEAN_HEATBED LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_CLEAN_HEATBED_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_DONE_LANG_TABLE[1]; -#define MSG_WIZARD_DONE LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_DONE_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_FILAMENT_LOADED_LANG_TABLE[1]; -#define MSG_WIZARD_FILAMENT_LOADED LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_FILAMENT_LOADED_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_HEATING_LANG_TABLE[1]; -#define MSG_WIZARD_HEATING LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_HEATING_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_INSERT_CORRECT_FILAMENT_LANG_TABLE[1]; -#define MSG_WIZARD_INSERT_CORRECT_FILAMENT LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_INSERT_CORRECT_FILAMENT_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_LOAD_FILAMENT_LANG_TABLE[1]; -#define MSG_WIZARD_LOAD_FILAMENT LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_LOAD_FILAMENT_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_PLA_FILAMENT_LANG_TABLE[1]; -#define MSG_WIZARD_PLA_FILAMENT LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_PLA_FILAMENT_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_QUIT_LANG_TABLE[1]; -#define MSG_WIZARD_QUIT LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_QUIT_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_REPEAT_V2_CAL_LANG_TABLE[1]; -#define MSG_WIZARD_REPEAT_V2_CAL LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_REPEAT_V2_CAL_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_RERUN_LANG_TABLE[1]; -#define MSG_WIZARD_RERUN LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_RERUN_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_SELFTEST_LANG_TABLE[1]; -#define MSG_WIZARD_SELFTEST LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_SELFTEST_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_V2_CAL_LANG_TABLE[1]; -#define MSG_WIZARD_V2_CAL LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_V2_CAL_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_V2_CAL_2_LANG_TABLE[1]; -#define MSG_WIZARD_V2_CAL_2 LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_V2_CAL_2_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_WELCOME_LANG_TABLE[1]; -#define MSG_WIZARD_WELCOME LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_WELCOME_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_WILL_PREHEAT_LANG_TABLE[1]; -#define MSG_WIZARD_WILL_PREHEAT LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_WILL_PREHEAT_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_XYZ_CAL_LANG_TABLE[1]; -#define MSG_WIZARD_XYZ_CAL LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_XYZ_CAL_LANG_TABLE, 0) -extern const char* const MSG_WIZARD_Z_CAL_LANG_TABLE[1]; -#define MSG_WIZARD_Z_CAL LANG_TABLE_SELECT_EXPLICIT(MSG_WIZARD_Z_CAL_LANG_TABLE, 0) +extern const char* const MSG_WIZARD_CALIBRATION_FAILED_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_CALIBRATION_FAILED LANG_TABLE_SELECT(MSG_WIZARD_CALIBRATION_FAILED_LANG_TABLE) +extern const char* const MSG_WIZARD_CLEAN_HEATBED_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_CLEAN_HEATBED LANG_TABLE_SELECT(MSG_WIZARD_CLEAN_HEATBED_LANG_TABLE) +extern const char* const MSG_WIZARD_DONE_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_DONE LANG_TABLE_SELECT(MSG_WIZARD_DONE_LANG_TABLE) +extern const char* const MSG_WIZARD_FILAMENT_LOADED_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_FILAMENT_LOADED LANG_TABLE_SELECT(MSG_WIZARD_FILAMENT_LOADED_LANG_TABLE) +extern const char* const MSG_WIZARD_HEATING_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_HEATING LANG_TABLE_SELECT(MSG_WIZARD_HEATING_LANG_TABLE) +extern const char* const MSG_WIZARD_INSERT_CORRECT_FILAMENT_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_INSERT_CORRECT_FILAMENT LANG_TABLE_SELECT(MSG_WIZARD_INSERT_CORRECT_FILAMENT_LANG_TABLE) +extern const char* const MSG_WIZARD_LOAD_FILAMENT_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_LOAD_FILAMENT LANG_TABLE_SELECT(MSG_WIZARD_LOAD_FILAMENT_LANG_TABLE) +extern const char* const MSG_WIZARD_PLA_FILAMENT_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_PLA_FILAMENT LANG_TABLE_SELECT(MSG_WIZARD_PLA_FILAMENT_LANG_TABLE) +extern const char* const MSG_WIZARD_QUIT_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_QUIT LANG_TABLE_SELECT(MSG_WIZARD_QUIT_LANG_TABLE) +extern const char* const MSG_WIZARD_REPEAT_V2_CAL_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_REPEAT_V2_CAL LANG_TABLE_SELECT(MSG_WIZARD_REPEAT_V2_CAL_LANG_TABLE) +extern const char* const MSG_WIZARD_RERUN_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_RERUN LANG_TABLE_SELECT(MSG_WIZARD_RERUN_LANG_TABLE) +extern const char* const MSG_WIZARD_SELFTEST_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_SELFTEST LANG_TABLE_SELECT(MSG_WIZARD_SELFTEST_LANG_TABLE) +extern const char* const MSG_WIZARD_V2_CAL_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_V2_CAL LANG_TABLE_SELECT(MSG_WIZARD_V2_CAL_LANG_TABLE) +extern const char* const MSG_WIZARD_V2_CAL_2_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_V2_CAL_2 LANG_TABLE_SELECT(MSG_WIZARD_V2_CAL_2_LANG_TABLE) +extern const char* const MSG_WIZARD_WELCOME_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_WELCOME LANG_TABLE_SELECT(MSG_WIZARD_WELCOME_LANG_TABLE) +extern const char* const MSG_WIZARD_WILL_PREHEAT_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_WILL_PREHEAT LANG_TABLE_SELECT(MSG_WIZARD_WILL_PREHEAT_LANG_TABLE) +extern const char* const MSG_WIZARD_XYZ_CAL_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_XYZ_CAL LANG_TABLE_SELECT(MSG_WIZARD_XYZ_CAL_LANG_TABLE) +extern const char* const MSG_WIZARD_Z_CAL_LANG_TABLE[LANG_NUM]; +#define MSG_WIZARD_Z_CAL LANG_TABLE_SELECT(MSG_WIZARD_Z_CAL_LANG_TABLE) extern const char* const MSG_XYZ_DETAILS_LANG_TABLE[LANG_NUM]; #define MSG_XYZ_DETAILS LANG_TABLE_SELECT(MSG_XYZ_DETAILS_LANG_TABLE) extern const char* const MSG_X_MAX_LANG_TABLE[1]; diff --git a/Firmware/language_cz.h b/Firmware/language_cz.h index d9f3715d9..038cdf1b7 100644 --- a/Firmware/language_cz.h +++ b/Firmware/language_cz.h @@ -104,6 +104,7 @@ #define MSG_SILENT_MODE_ON "Mod [tichy]" #define MSG_SILENT_MODE_OFF "Mod [vys. vykon]" +#define MSG_AUTO_MODE_ON "Mod [automaticky]" #define MSG_REBOOT "Restartujte tiskarnu" #define MSG_TAKE_EFFECT " pro projeveni zmen" @@ -310,4 +311,33 @@ #define MSG_RIGHT "Pravy:" #define MSG_MEASURED_SKEW "Merene zkoseni:" #define MSG_SLIGHT_SKEW "Lehke zkoseni:" -#define MSG_SEVERE_SKEW "Tezke zkoseni:" \ No newline at end of file +#define MSG_SEVERE_SKEW "Tezke zkoseni:" +#define MSG_SORT_TIME "Trideni [Cas]" +#define MSG_SORT_ALPHA "Trideni [Abeceda]" +#define MSG_SORT_NONE "Trideni [Zadne]" +#define MSG_WIZARD "Wizard" +#define MSG_DEFAULT_SETTINGS_LOADED "Defaultni nastaveni nahrano" +#define MSG_SORTING "Trideni souboru" +#define MSG_FILE_INCOMPLETE "Soubor nekompletni. Pokracovat?" +#define MSG_WIZARD_WELCOME "Dobry den, jsem vase tiskarna Original Prusa i3. Chcete abych Vas provedla kalibracnim procesem?" +#define MSG_WIZARD_QUIT "Wizarda muzete kdykoliv znovu spustit z menu Calibration -> Wizard" +#define MSG_WIZARD_SELFTEST "Nejdriv pomoci selftestu zkontoluji nejcastejsi chyby vznikajici pri sestaveni tiskarny." +#define MSG_WIZARD_CALIBRATION_FAILED "Prosim nahlednete do manualu a opravte problem. Po te obnovte Wizarda rebootovanim tiskarny." +#define MSG_WIZARD_XYZ_CAL "Nyni provedu xyz kalibraci. Zabere to priblizne 12 min." +#define MSG_WIZARD_FILAMENT_LOADED "Je filament zaveden?" +#define MSG_WIZARD_Z_CAL "Nyni provedu z kalibraci." +#define MSG_WIZARD_WILL_PREHEAT "Nyni predehreji trysku pro PLA." +#define MSG_WIZARD_V2_CAL "Nyni zkalibruji vzdalenost mezi koncem trysky a povrchem heatbedu." +#define MSG_WIZARD_V2_CAL_2 "Zacnu tisknout linku a Vy budete postupne snizovat trysku otacenim tlacitka dokud nedosahnete optimalni vysky. Prohlednete si obrazky v nasi prirucce v kapitole Kalibrace" +#define MSG_V2_CALIBRATION "Kal. prvni vrstvy" +#define MSG_WIZARD_DONE "Vse je hotovo." +#define MSG_WIZARD_LOAD_FILAMENT "Prosim vlozte PLA filament do extruderu, po te stisknete tlacitko pro zavedeni filamentu." +#define MSG_WIZARD_RERUN "Spusteni Wizarda vymaze ulozene vysledky vsech kalibraci a spusti kalibracni proces od zacatku. Pokracovat?" +#define MSG_WIZARD_REPEAT_V2_CAL "Chcete opakovat posledni krok a pozmenit vzdalenost mezi tryskou a heatbed?" +#define MSG_WIZARD_CLEAN_HEATBED "Prosim ocistete heatbed a stisknete tlacitko." +#define MSG_WIZARD_PLA_FILAMENT "Je to PLA filament?" +#define MSG_WIZARD_INSERT_CORRECT_FILAMENT "Prosim zavedte PLA filament a po te obnovte Wizarda stisknutim reset tlacitka." +#define MSG_PLA_FILAMENT_LOADED "Je PLA filament zaveden?" +#define MSG_PLEASE_LOAD_PLA "Nejdrive zavedte PLA filament prosim." +#define MSG_FILE_CNT "Nektere soubory nebudou setrideny. Maximalni pocet souboru pro setrideni je 100." +#define MSG_WIZARD_HEATING "Predehrivam trysku. Prosim cekejte." \ No newline at end of file diff --git a/Firmware/language_de.h b/Firmware/language_de.h index 4d6b860fd..30de50379 100644 --- a/Firmware/language_de.h +++ b/Firmware/language_de.h @@ -26,7 +26,7 @@ + #define MSG_NOZZLE "Duese" + #define MSG_NOZZLE1 "Duese2" + #define MSG_NOZZLE2 "Duese3" - + #define MSG_BED "Bed" + + #define MSG_BED "Bett" + #define MSG_FAN_SPEED "Luefter-Tempo" + #define MSG_FLOW "Durchfluss" + #define MSG_FLOW0 "Durchfluss 0" @@ -92,6 +92,7 @@ + +#define MSG_SILENT_MODE_ON "Mode [leise]" + #define MSG_SILENT_MODE_OFF "Mode [Hohe Leist]" + + #define MSG_AUTO_MODE_ON "Mode [Auto]" + #define(length = 20) MSG_REBOOT "Zum Uebernehmen " + #define(length = 22) MSG_TAKE_EFFECT "Drucker neu starten" + @@ -114,8 +115,8 @@ + #define MSG_M109_INVALID_EXTRUDER "M109 Falscher Extruder" + #define MSG_HEATING "Aufwaermen" + #define(length = 20) MSG_HEATING_COMPLETE "Aufwaermen OK" - + #define MSG_BED_HEATING "Bed aufwaermen" - + #define MSG_BED_DONE "Bed OK" + + #define MSG_BED_HEATING "Bett aufwaermen" + + #define MSG_BED_DONE "Bett OK" + #define MSG_M115_REPORT "FIRMWARE_NAME:Marlin V1.0.2; Sprinter/grbl mashup for gen6 FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" CUSTOM_MENDEL_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID "\n" + #define MSG_ERR_KILLED "Printer gestoppt. kill() aufgerufen!" + #define MSG_ERR_STOPPED "Drucker aufgrund von Fehlern gestoppt. Fehler beheben und mit M999 neu starten. (Temperatur wird zurueckgesetzt. Nach dem Neustart neu einstellen!)" @@ -143,7 +144,7 @@ + #define MSG_ERR_COLD_EXTRUDE_STOP "Stopp, Extruder kalt!" + #define MSG_BABYSTEPPING_X "Babystepping X" + #define MSG_BABYSTEPPING_Y "Babystepping Y" - + #define MSG_BABYSTEPPING_Z "Z wurde eingestellt" + #define MSG_BABYSTEPPING_Z "Z wurde eingestellt" + #define MSG_SERIAL_ERROR_MENU_STRUCTURE "Menuestruktur fehlerhaft" + +#define MSG_LANGUAGE_NAME "Deutsch" @@ -156,7 +157,7 @@ + #define MSG_SELFTEST_PLEASECHECK "Bitte pruefe:" + #define MSG_SELFTEST_NOTCONNECTED "Nicht angeschlossen" + #define MSG_SELFTEST_HEATERTHERMISTOR "Heater/Thermistor" - + #define MSG_SELFTEST_BEDHEATER "Bed / Heater" + + #define MSG_SELFTEST_BEDHEATER "Bett / Heater" + #define MSG_SELFTEST_WIRINGERROR "Verdrahtungfehler" + #define MSG_SELFTEST_ENDSTOPS "Endschalter" + #define MSG_SELFTEST_MOTOR "Motor" @@ -177,11 +178,11 @@ + #define(length = 20) MSG_STATS_PRINTTIME "Druckzeit: " + #define(length = 20) MSG_SELFTEST_START "Selbsttest start " + #define(length = 20) MSG_SELFTEST_CHECK_ENDSTOPS "Pruefe Endschalter " -+ #define(length = 20) MSG_SELFTEST_CHECK_HOTEND "Pruefe Hotend" ++ #define(length = 20) MSG_SELFTEST_CHECK_HOTEND "Pruefe Duese" + #define(length = 20) MSG_SELFTEST_CHECK_X "Pruefe X Achse " + #define(length = 20) MSG_SELFTEST_CHECK_Y "Pruefe Y Achse " + #define(length = 20) MSG_SELFTEST_CHECK_Z "Pruefe Z Achse " -+ #define(length = 20) MSG_SELFTEST_CHECK_BED "Pr\x81""fe Bed " ++ #define(length = 20) MSG_SELFTEST_CHECK_BED "Pruefe Bett " + #define(length = 20) MSG_SELFTEST_CHECK_ALLCORRECT "Alles richtig " + #define MSG_SELFTEST "Selbsttest " + #define(length = 20) MSG_SELFTEST_FAILED "Selbsttest misslung." @@ -196,25 +197,25 @@ + #define MSG_CALIBRATE_BED_RESET "Reset XYZ Kalibr." + -+#define(length = 20, lines = 8) MSG_MOVE_CARRIAGE_TO_THE_TOP "Kalibrieren von XYZ. Drehen Sie den Knopf bis der obere Anschlag erreicht wird. Klicken wenn ganz oben." -+ #define(length = 20, lines = 8) MSG_MOVE_CARRIAGE_TO_THE_TOP_Z "Kalibrieren von Z. Drehen Sie den Knopf bis der obere Anschlag erreicht wird. Klicken wenn ganz oben." ++#define(length = 20, lines = 8) MSG_MOVE_CARRIAGE_TO_THE_TOP "Kalibrieren von XYZ. Drehen Sie den Knopf bis der obere Anschlag erreicht wird. Klicken Sie den Knopf wenn es ganz oben wird." ++ #define(length = 20, lines = 8) MSG_MOVE_CARRIAGE_TO_THE_TOP_Z "Kalibrieren von Z. Drehen Sie den Knopf bis der obere Anschlag erreicht wird. Klicken Sie den Knopf wenn es ganz oben wird." + +#define(length = 20, lines = 8) MSG_CONFIRM_NOZZLE_CLEAN "Bitte entfernen Sie ueberstehendes Filament von der Duese. Klicken wenn sauber." + #define(length = 20, lines = 2) MSG_CONFIRM_CARRIAGE_AT_THE_TOP "Ist der Schlitten ganz oben?" + -+#define(length = 60) MSG_FIND_BED_OFFSET_AND_SKEW_LINE1 "Suchen Bed Kalibrierpunkt" ++#define(length = 60) MSG_FIND_BED_OFFSET_AND_SKEW_LINE1 "Suchen Bett Kalibrierpunkt" + #define(length = 14) MSG_FIND_BED_OFFSET_AND_SKEW_LINE2 " von 4" -+ #define(length = 60) MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE1 "Verbesserung Bed Kalibrierpunkt" ++ #define(length = 60) MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE1 "Verbesserung Bett Kalibrierpunkt" + #define(length = 14) MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2 " von 9" + #define(length = 60) MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 "Messen der Referenzhoehe des Kalibrierpunktes" + #define(length = 14) MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2 " von 9" #define MSG_FIND_BED_OFFSET_AND_SKEW_ITERATION "Iteration " + -+#define(length = 20, lines = 8) MSG_BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND "XYZ-Kalibrierung fehlgeschlagen. Bed-Kalibrierpunkt nicht gefunden." ++#define(length = 20, lines = 8) MSG_BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND "XYZ-Kalibrierung fehlgeschlagen. Bett-Kalibrierpunkt nicht gefunden." + #define(length = 20, lines = 8) MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED "XYZ-Kalibrierung fehlgeschlagen. Bitte schauen Sie in das Handbuch." -+ #define(length = 20, lines = 8) MSG_BED_SKEW_OFFSET_DETECTION_PERFECT "XYZ-Kalibrierung ok. X/Y-Achsen sind senkrecht zueinander. Glueckwunsch!" ++ #define(length = 20, lines = 8) MSG_BED_SKEW_OFFSET_DETECTION_PERFECT "XYZ-Kalibrierung OK. X/Y-Achsen sind senkrecht zueinander. Glueckwunsch!" + #define(length = 20, lines = 8) MSG_BED_SKEW_OFFSET_DETECTION_SKEW_MILD "XYZ Kalibrierung in Ordnung. X/Y Achsen sind etwas schief." + #define(length = 20, lines = 8) MSG_BED_SKEW_OFFSET_DETECTION_SKEW_EXTREME "XYZ Kalibrierung in Ordnung. Schiefheit wird automatisch korrigiert." @@ -233,8 +234,8 @@ +#define(length = 20, lines = 2) MSG_NEW_FIRMWARE_AVAILABLE "Neue Firmware Version verfuegbar:" + #define(length = 20) MSG_NEW_FIRMWARE_PLEASE_UPGRADE "Bitte aktualisieren." + -+ #define(length = 20, lines = 8) MSG_FOLLOW_CALIBRATION_FLOW "Der Drucker wurde noch nicht kalibriert. Bitte folgen Sie dem Handbuch, Kapitel First steps, Abschnitt Calibration flow." -+ #define(length = 20, lines = 12) MSG_BABYSTEP_Z_NOT_SET "Der Abstand zwischen der Spitze der Duese und der Bed ist noch nicht eingestellt. Bitte folgen Sie dem Handbuch, First steps, section First layer calibration." ++ #define(length = 20, lines = 8) MSG_FOLLOW_CALIBRATION_FLOW "Der Drucker wurde noch nicht kalibriert. Bitte folgen Sie das Handbuch, Kapitel First steps, Abschnitt Calibration flow." ++ #define(length = 20, lines = 12) MSG_BABYSTEP_Z_NOT_SET "Der Abstand zwischen der Spitze der Duese und der Bett ist noch nicht eingestellt. Bitte folgen Sie dem Handbuch, First steps, section First layer calibration." + + @@ -258,13 +259,13 @@ +#define(length = 20, lines = 8) MSG_MARK_FIL "Filament 100mm vom Extrudergehaeuse markieren. Klicken wenn Fertig." + #define(length = 20, lines = 8) MSG_CLEAN_NOZZLE_E "E-Kalibrierung beendet. Bitte reinigen Sie die Duese. Klicken wenn fertig." -+ #define(length = 20, lines = 3) MSG_WAITING_TEMP "Warten auf Abkuehlung von Heater und Bed." ++ #define(length = 20, lines = 3) MSG_WAITING_TEMP "Warten auf Abkuehlung von Heater und Bett." + #define(length = 20, lines = 2) MSG_FILAMENT_CLEAN "Ist Farbe rein?" + #define(lenght = 20, lines = 1) MSG_UNLOADING_FILAMENT "Filament auswerfen" + #define(length = 20, lines = 8) MSG_PAPER "Legen ein Blatt Papier unter die Duese waehrend der Kalibrierung der ersten 4 Punkte. Wenn die Duese das Papier einklemmt, Drucker sofort ausschalten" + -+#define MSG_BED_CORRECTION_MENU "Bed level Korrekt" ++#define MSG_BED_CORRECTION_MENU "Bett level Korrekt" + #define MSG_BED_CORRECTION_LEFT "Links [um]" + #define MSG_BED_CORRECTION_RIGHT "Rechts [um]" @@ -272,7 +273,7 @@ + #define MSG_BED_CORRECTION_REAR "Hinten [um]" + #define MSG_BED_CORRECTION_RESET "Ruecksetzen" + -+#define MSG_MESH_BED_LEVELING "Mesh Bed Leveling" ++#define MSG_MESH_BED_LEVELING "Mesh Bett Leveling" + #define MSG_MENU_CALIBRATION "Kalibrierung" + #define MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF "SD Karte [normal]" @@ -324,4 +325,33 @@ #define MSG_MEASURED_SKEW "Schraeglauf:" #define MSG_SLIGHT_SKEW "Leichter Schr.:" #define MSG_SEVERE_SKEW "Schwerer Schr.:" +#define MSG_SORT_TIME "Sortieren: [Zeit]" +#define MSG_SORT_ALPHA "Sortieren:[Alpha]" +#define MSG_SORT_NONE "Sortieren:[Keine]" +#define MSG_WIZARD "Wizard" +#define MSG_DEFAULT_SETTINGS_LOADED "Standardeinstellungen wurden zuruckgesetzt" +#define MSG_SORTING "Dateien sortieren" +#define MSG_FILE_INCOMPLETE "Datei unvollstaend. Trotzdem fortfahren?" +#define MSG_WIZARD_WELCOME "Hallo, ich bin dein Original Prusa i3 Drucker. Moechten Sie meine Hilfe durch den Setup-Prozess?" +#define MSG_WIZARD_QUIT "Sie koennen immer den Asistenten im Menu neu aufrufen: Kalibrierung -> Assistant" +#define MSG_WIZARD_SELFTEST "Zunaechst fuehre ich den Selbsttest durch um die haeufigsten Probleme bei der Aufbau zu ueberpruefen." +#define MSG_WIZARD_CALIBRATION_FAILED "Bitte ueberpruefen Sie unser Handbuch und beheben Sie das Problem. Fahren Sie dann mit dem Assistenten fort, indem Sie den Drucker neu starten." +#define MSG_WIZARD_XYZ_CAL "Ich werde jetzt die XYZ-Kalibrierung durchfuehren. Es wird ca. 12 Minuten dauern" +#define MSG_WIZARD_FILAMENT_LOADED "Ist das Filament geladen?" +#define MSG_WIZARD_Z_CAL "Ich werde jetzt die Z Kalibrierung durchfuehren." +#define MSG_WIZARD_WILL_PREHEAT "Jetzt werde ich die Duese fuer PLA vorheizen. " +#define MSG_WIZARD_V2_CAL "Jetzt werde ich den Abstand zwischen Duesenspitze und Druckbett kalibrieren." +#define MSG_WIZARD_V2_CAL_2 "Ich werde jetzt erste Linie drucken. Waehrend des Druckes koennen Sie die Duese allmaehlich senken indem Sie den Knopf drehen, bis Sie die optimale Hoehe erreichen. Ueberpruefen Sie die Bilder in unserem Handbuch im Kapitel Kalibrierung" +#define MSG_V2_CALIBRATION "Erste-Schicht Kal" +#define MSG_WIZARD_DONE "Alles wurde getan. Viel Spass beim Drucken!" +#define MSG_WIZARD_LOAD_FILAMENT "Fuehren Sie bitte PLA Filament in den Extruder und bestaetigen Sie den Knopf um es zu laden." +#define MSG_WIZARD_RERUN "Der laufende Assistent loescht die aktuelle Kalibrierergebnisse und wird von Anfang an beginnen. Fortsetzen?" +#define MSG_WIZARD_REPEAT_V2_CAL "Moechten Sie den letzten Schritt wiederholen um den Abstand zwischen Duese und Druckbett neu einzustellen?" +#define MSG_WIZARD_CLEAN_HEATBED "Bitte reinigen Sie das Heizbett und druecken Sie dann den Knopf." +#define MSG_WIZARD_PLA_FILAMENT "Ist es wirklich PLA Filament?" +#define MSG_WIZARD_INSERT_CORRECT_FILAMENT "Bitte laden Sie PLA-Filament und fahren Sie mit dem Assistenten fort, indem Sie den Drucker neu starten." +#define MSG_PLA_FILAMENT_LOADED "Ist PLA Filament geladen?" +#define MSG_PLEASE_LOAD_PLA "Bitte laden Sie zuerst PLA Filament." +#define MSG_FILE_CNT "Einige Dateien werden nicht sortiert. Max. Anzahl der Dateien in einem Ordner ist 100." +#define MSG_WIZARD_HEATING "Vorheizen der Duese. Bitte warten." diff --git a/Firmware/language_en.h b/Firmware/language_en.h index 40e021dc3..c591780ad 100644 --- a/Firmware/language_en.h +++ b/Firmware/language_en.h @@ -156,7 +156,7 @@ #define MSG_ERR_COLD_EXTRUDE_STOP " cold extrusion prevented" #define MSG_BABYSTEPPING_X "Babystepping X" #define MSG_BABYSTEPPING_Y "Babystepping Y" -#define MSG_BABYSTEPPING_Z "Adjusting Z" +#define(length=20) MSG_BABYSTEPPING_Z "Adjusting Z" #define MSG_SERIAL_ERROR_MENU_STRUCTURE "Error in menu structure" #define MSG_LANGUAGE_NAME "English" @@ -234,7 +234,7 @@ #define(length=20,lines=8) MSG_BED_SKEW_OFFSET_DETECTION_WARNING_FRONT_RIGHT_FAR "XYZ calibration compromised. Right front calibration point not reachable." #define(length=20,lines=8) MSG_BED_SKEW_OFFSET_DETECTION_WARNING_FRONT_BOTH_FAR "XYZ calibration compromised. Front calibration points not reachable." -#define(length=20,lines=4) MSG_BED_LEVELING_FAILED_POINT_LOW "Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset." +#define(length=20,lines=5) MSG_BED_LEVELING_FAILED_POINT_LOW "Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset." #define(length=20,lines=4) MSG_BED_LEVELING_FAILED_POINT_HIGH "Bed leveling failed. Sensor triggered too high. Waiting for reset." #define(length=20,lines=4) MSG_BED_LEVELING_FAILED_PROBE_DISCONNECTED "Bed leveling failed. Sensor disconnected or cable broken. Waiting for reset." @@ -263,7 +263,7 @@ #define(length=20, lines=3) MSG_WAITING_TEMP "Waiting for nozzle and bed cooling" #define(length=20, lines=2) MSG_FILAMENT_CLEAN "Is color clear?" #define(lenght=18, lines=1) MSG_UNLOADING_FILAMENT "Unloading filament" -#define(length=20, lines=8) MSG_PAPER "Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately." +#define(length=20, lines=10) MSG_PAPER "Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately." #define MSG_BED_CORRECTION_MENU "Bed level correct" #define(length=14,lines=1) MSG_BED_CORRECTION_LEFT "Left side [um]" @@ -329,7 +329,7 @@ #define(length=20, lines=4) MSG_WIZARD_WILL_PREHEAT "Now I will preheat nozzle for PLA." #define(length=20, lines=3) MSG_WIZARD_HEATING "Preheating nozzle. Please wait." #define(lenght=20, lines=8) MSG_WIZARD_V2_CAL "Now I will calibrate distance between tip of the nozzle and heatbed surface." -#define(lenght=20, lines=12) MSG_WIZARD_V2_CAL_2 "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." +#define(lenght=20, lines=13) MSG_WIZARD_V2_CAL_2 "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." #define(lenght=17, lines=1) MSG_V2_CALIBRATION "First layer cal." #define(lenght=20, lines=8) MSG_WIZARD_DONE "All is done. Happy printing!" #define(lenght=20, lines=8) MSG_WIZARD_LOAD_FILAMENT "Please insert PLA filament to the extruder, then press knob to load it." @@ -341,10 +341,6 @@ #define(lenght=20, lines=2) MSG_PLA_FILAMENT_LOADED "Is PLA filament loaded?" #define(lenght=20, lines=4) MSG_PLEASE_LOAD_PLA "Please load PLA filament first." #define(length=20, lines=8) MSG_FILE_CNT "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100." -#define(length=20) MSG_FIL_RUNOUT_SETTINGS "Fil.Runout S " -#define(length=20) MSG_FIL_RUNOUT_ACTIVE_ON "Fil.Runout S [ON]" -#define(length=20) MSG_FIL_RUNOUT_ACTIVE_OFF "Fil.Runout S[OFF]" -#define(length=20) MSG_ENDSTOPPULLUP_FIL_RUNOUT_ON "Fil.RSPullup [ON]" -#define(length=20) MSG_ENDSTOPPULLUP_FIL_RUNOUT_OFF "Fil.RSPullup[OFF]" -#define(length=20) MSG_FIL_RUNOUT_INVERTING_OFF "Fil.RS [S to VCC]" -#define(length=20) MSG_FIL_RUNOUT_INVERTING_ON "Fil.RS [S to GND]" +#define(length=20) MSG_FIL_RUNOUT_STATUS_OFF "Fil.RS [OFF]" +#define(length=20) MSG_FIL_RUNOUT_STATUS_VCC "Fil.RS [S to VCC]" +#define(length=20) MSG_FIL_RUNOUT_STATUS_GND "Fil.RS [S to GND]" diff --git a/Firmware/language_es.h b/Firmware/language_es.h index 1d56ed025..7b9d7513c 100644 --- a/Firmware/language_es.h +++ b/Firmware/language_es.h @@ -64,6 +64,7 @@ #define MSG_CHANGING_FILAMENT "Cambiando filamento" #define MSG_SILENT_MODE_ON "Modo [silencio]" #define MSG_SILENT_MODE_OFF "Modo [rend.pleno]" +#define MSG_AUTO_MODE_ON "Modo [auto]" #define MSG_REBOOT "Reiniciar impresora" #define MSG_TAKE_EFFECT " para aplicar cambios" #define MSG_HEATING "Calentando..." @@ -122,7 +123,7 @@ #define MSG_ERR_COLD_EXTRUDE_STOP " cold extrusion prevented" #define MSG_BABYSTEPPING_X "Babystepping X" #define MSG_BABYSTEPPING_Y "Babystepping Y" -#define MSG_BABYSTEPPING_Z "Adjusting Z" +#define MSG_BABYSTEPPING_Z "Ajustar Z" #define MSG_SERIAL_ERROR_MENU_STRUCTURE "Error in menu structure" #define MSG_SET_HOME_OFFSETS "Set home offsets" #define MSG_SET_ORIGIN "Set origin" @@ -304,4 +305,33 @@ #define MSG_RIGHT "Derecha:" #define MSG_MEASURED_SKEW "Inclin. medida:" #define MSG_SLIGHT_SKEW "Inclin. ligera:" -#define MSG_SEVERE_SKEW "Inclin. severa:" \ No newline at end of file +#define MSG_SEVERE_SKEW "Inclin. severa:" +#define MSG_SORT_TIME "Ordenar: [Tiempo]" +#define MSG_SORT_ALPHA "Ordenar:[Alfabet]" +#define MSG_SORT_NONE "Ordenar:[Ninguno]" +#define MSG_WIZARD "Wizard" +#define MSG_DEFAULT_SETTINGS_LOADED "Ajustes por defecto cargados." +#define MSG_SORTING "Ordenando archivos" +#define MSG_FILE_INCOMPLETE "Archivo imcompleto. Deseas continuar?" +#define MSG_WIZARD_WELCOME "Hola, soy tu impresora Original Prusa i3. Quieres que te guie a traves de la configuracion?" +#define MSG_WIZARD_QUIT "Siempre puedes acceder al asistente desde Calibracion -> Wizard" +#define MSG_WIZARD_SELFTEST "Primero, hare el Selftest para comprobar los problemas de montaje mas comunes." +#define MSG_WIZARD_CALIBRATION_FAILED "Lee el manual y resuelve el problema. Despues, reinicia la impresora y continua con el Wizard" +#define MSG_WIZARD_XYZ_CAL "Hare la calibracion XYZ. Tardara 12 min. aproximadamente." +#define MSG_WIZARD_FILAMENT_LOADED "Esta el filamento cargado?" +#define MSG_WIZARD_Z_CAL "Voy a hacer Calibracion Z ahora." +#define MSG_WIZARD_WILL_PREHEAT "Voy a precalentar el nozzle para PLA ahora." +#define MSG_WIZARD_V2_CAL "Voy a calibrar la distancia entre la punta del nozzle y la superficie de la heatbed." +#define MSG_WIZARD_V2_CAL_2 "Voy a comenzar a imprimir la linea y tu bajaras el nozzle gradualmente al rotar el mando, hasta que llegues a la altura optima. Mira las imagenes del capitulo Calibracion en el manual." +#define MSG_V2_CALIBRATION "Cal. primera cap." +#define MSG_WIZARD_DONE "Terminado! Feliz impresion!" +#define MSG_WIZARD_LOAD_FILAMENT "Inserta, por favor, filamento PLA en el extrusor. Despues, presiona el mando para cargarlo." +#define MSG_WIZARD_RERUN "Ejecutar el Wizard borrara los valores de calibracion actuales y comenzara de nuevo. Continuar?" +#define MSG_WIZARD_REPEAT_V2_CAL "Quieres repetir el ultimo paso para reajustar la distancia nozzle-heatbed?" +#define MSG_WIZARD_CLEAN_HEATBED "Limpia la superficie de la heatbed, por favor, y presiona el mando." +#define MSG_WIZARD_PLA_FILAMENT "Es este un filamento PLA?" +#define MSG_WIZARD_INSERT_CORRECT_FILAMENT "Carga filamento PLA, por favor, y reinicia la impresora para continuar con el Wizard" +#define MSG_PLA_FILAMENT_LOADED "Esta el filamento PLA cargado?" +#define MSG_PLEASE_LOAD_PLA "Carga el filamento PLA primero por favor." +#define MSG_FILE_CNT "Algunos archivos no seran ordenados. El Max. num. de archivos para ordenar en 1 carpeta es 100." +#define MSG_WIZARD_HEATING "Precalentando nozzle. Espera por favor." \ No newline at end of file diff --git a/Firmware/language_it.h b/Firmware/language_it.h index d25a17200..930046e37 100644 --- a/Firmware/language_it.h +++ b/Firmware/language_it.h @@ -84,7 +84,8 @@ #define MSG_LOAD_FILAMENT "Carica filamento" #define MSG_SILENT_MODE_ON "Modo [silenzioso]" -#define MSG_SILENT_MODE_OFF "Mode [forte]" +#define MSG_SILENT_MODE_OFF "Mode [forte]" +#define MSG_AUTO_MODE_ON "Mode [auto]" #define MSG_REBOOT "Riavvia stampante" #define MSG_TAKE_EFFECT " per attualizzare" @@ -131,7 +132,7 @@ #define MSG_ERR_COLD_EXTRUDE_STOP " cold extrusion prevented" #define MSG_BABYSTEPPING_X "Babystepping X" #define MSG_BABYSTEPPING_Y "Babystepping Y" -#define MSG_BABYSTEPPING_Z "Adjusting Z" +#define MSG_BABYSTEPPING_Z "Compensazione Z" #define MSG_SERIAL_ERROR_MENU_STRUCTURE "Error in menu structure" #define MSG_LANGUAGE_NAME "Italiano" @@ -295,4 +296,33 @@ #define MSG_RIGHT "Destra:" #define MSG_MEASURED_SKEW "Incl. misurata:" #define MSG_SLIGHT_SKEW "Incl. leggera:" -#define MSG_SEVERE_SKEW "Inc. rilevante:" \ No newline at end of file +#define MSG_SEVERE_SKEW "Inc. rilevante:" +#define MSG_SORT_TIME "Ordine: [Tempo]" +#define MSG_SORT_ALPHA "Ordine:[Alfabeto]" +#define MSG_SORT_NONE "Ordine: [Nessuno]" +#define MSG_WIZARD "Wizard" +#define MSG_DEFAULT_SETTINGS_LOADED "Settaggi predefiniti caricati" +#define MSG_SORTING "Ordine dei file" +#define MSG_FILE_INCOMPLETE "File incompleto. Continuare comunque?" +#define MSG_WIZARD_WELCOME "Ciao, sono la tua stampante Original Prusa i3. Gradiresti aiuto attraverso il processo di configurazione?" +#define MSG_WIZARD_QUIT "E possibile proseguire la guide Wizard in qualsiasi momento attraverso Calibrazione -> Wizard." +#define MSG_WIZARD_SELFTEST "Anzitutto avviero il Self Test per controllare gli errori di assemblaggio piu comuni." +#define MSG_WIZARD_CALIBRATION_FAILED "Per favore consulta il nostro manuale per risolvere il problema. Poi riprendi il Wizard dopo aver riavviato la stampante." +#define MSG_WIZARD_XYZ_CAL "Adesso avviero una Calibrazione XYZ. Puo durare circa 12 min." +#define MSG_WIZARD_FILAMENT_LOADED "Il filamento e stato caricato?" +#define MSG_WIZARD_Z_CAL "Adesso avviero una Calibrazione Z." +#define MSG_WIZARD_WILL_PREHEAT "Adesso preriscaldero l'ugello per PLA." +#define MSG_WIZARD_V2_CAL "Adesso tarero lo stacco fra ugello e superfice del piatto." +#define MSG_WIZARD_V2_CAL_2 "Adesso iniziero a stampare una linea e tu dovrai abbassare l'ugello poco per volta ruotando la manopola sino a raggiungere una altezza ottimale. Per favore dai uno sguardo all'immagine del nostro manuale, cap.Calibrazione." +#define MSG_V2_CALIBRATION "Cal. primo layer." +#define MSG_WIZARD_DONE "Ben fatto. Buona stampa!" +#define MSG_WIZARD_LOAD_FILAMENT "Per favore inserisci il filamento di PLA nell'estrusore, poi premi la manopola per caricare." +#define MSG_WIZARD_RERUN "Se avvi il Wizard perderai la calibrazione preesistente e dovrai ricominciare dall'inizio. Continuare?" +#define MSG_WIZARD_REPEAT_V2_CAL "Desideri ripetere l'ultimo passaggio per migliorare la distanza fra ugello e piatto?" +#define MSG_WIZARD_CLEAN_HEATBED "Per favore pulisci il piatto, poi premi la manopola." +#define MSG_WIZARD_PLA_FILAMENT "E questo un filamento di PLA?" +#define MSG_WIZARD_INSERT_CORRECT_FILAMENT "Per favore carica filamento di PLA e riprendi il Wizard dopo aver riavviato la stampante." +#define MSG_PLA_FILAMENT_LOADED "Il PLA e stato caricato?" +#define MSG_PLEASE_LOAD_PLA "Per favore prima caricare filamento di PLA." +#define MSG_FILE_CNT "Alcuni dei file non potranno essere organizzati. 100 e il n. max. di file che possono essere organizzati." +#define MSG_WIZARD_HEATING "Sto preriscaldando l'ugello. Per favore attendi." \ No newline at end of file diff --git a/Firmware/language_pl.h b/Firmware/language_pl.h index e953e7c9d..21c61faac 100644 --- a/Firmware/language_pl.h +++ b/Firmware/language_pl.h @@ -61,8 +61,9 @@ #define MSG_PRESS "Nacisnij przycisk" #define MSG_INSERT_FILAMENT "Wprowadz filament" #define MSG_CHANGING_FILAMENT "Wymiana filamentu" -#define MSG_SILENT_MODE_ON "Mod [cichy]" -#define MSG_SILENT_MODE_OFF "Mod [w wydajnosc]" +#define MSG_SILENT_MODE_ON "Tryb [cichy]" +#define MSG_SILENT_MODE_OFF "Tryb[w wydajnosc]" +#define MSG_AUTO_MODE_ON "Tryb [auto]" #define MSG_REBOOT "Restart drukarki" #define MSG_TAKE_EFFECT " wprow. zmian" #define MSG_HEATING "Grzanie..." @@ -121,7 +122,7 @@ #define MSG_ERR_COLD_EXTRUDE_STOP " cold extrusion prevented" #define MSG_BABYSTEPPING_X "Babystepping X" #define MSG_BABYSTEPPING_Y "Babystepping Y" -#define MSG_BABYSTEPPING_Z "Dostavovani Z" +#define MSG_BABYSTEPPING_Z "Dostrojenie Z" #define MSG_SERIAL_ERROR_MENU_STRUCTURE "Error in menu structure" #define MSG_SET_HOME_OFFSETS "Nastav pocatek home" #define MSG_SET_ORIGIN "Nastav pocatek" @@ -307,4 +308,33 @@ #define MSG_RIGHT "Prawy:" #define MSG_MEASURED_SKEW "Zmier. sciecie:" #define MSG_SLIGHT_SKEW "Lekkie sciecie:" -#define MSG_SEVERE_SKEW "Ostre sciecie:" \ No newline at end of file +#define MSG_SEVERE_SKEW "Ostre sciecie:" +#define MSG_SORT_TIME "Sortuj: [Czas]" +#define MSG_SORT_ALPHA "Sortuj: [Alfabet]" +#define MSG_SORT_NONE "Sortuj: [Zaden]" +#define MSG_WIZARD "Wizard" +#define MSG_DEFAULT_SETTINGS_LOADED "Ustawienia domyślne" +#define MSG_SORTING "Sortowanie plikow" +#define MSG_FILE_INCOMPLETE "Plik niekompletny. Kontynuowac?" +#define MSG_WIZARD_WELCOME "Czesc, jestem Twoja Original Prusa i3. Czy mam pomoc Ci z instalacja?" +#define MSG_WIZARD_QUIT "Zawsze mozesz przywrocic Wizard przez Kalibracja -> Wizard." +#define MSG_WIZARD_SELFTEST "Najpierw wlacze autotest w celu kontrolli najczestszych problemow z montazem." +#define MSG_WIZARD_CALIBRATION_FAILED "Prosze sprawdz nasz poradnik i napraw problem. Potem przywroc Wizard restartujac drukarke." +#define MSG_WIZARD_XYZ_CAL "Wlaczam kalibracje xyz. Zajmie to ok. 12 min." +#define MSG_WIZARD_FILAMENT_LOADED "Filament jest zaladowany?" +#define MSG_WIZARD_Z_CAL "Wlaczam kalibracje z." +#define MSG_WIZARD_WILL_PREHEAT "Nagrzewam dysze dla PLA." +#define MSG_WIZARD_V2_CAL "Kalibruje odleglosc miedzy koncowka dyszy a stolikiem." +#define MSG_WIZARD_V2_CAL_2 "Zaczne drukowac linie. Stopniowo opuszczaj dysze przekrecajac guzik, poki nie uzyskasz optymalnej wysokosci. Sprawdz obrazki w naszym poradniku w rozdz. Kalibracja" +#define MSG_V2_CALIBRATION "Kal. 1. warstwy" +#define MSG_WIZARD_DONE "Gotowe. Udanego druku!" +#define MSG_WIZARD_LOAD_FILAMENT "Prosze umiesc filament PLA w ekstruderze i nacisnij przycisk by zaladowac." +#define MSG_WIZARD_RERUN "Wlaczenie Wizard usunie obecne dane kalibracyjne i zacznie od nowa. Kontynuowac?" +#define MSG_WIZARD_REPEAT_V2_CAL "Chcesz powtorzyc ostatni krok i przestawic odleglosc miedzy dysza a stolikiem?" +#define MSG_WIZARD_CLEAN_HEATBED "Prosze oczysc stolik i nacisnij guzik." +#define MSG_WIZARD_PLA_FILAMENT "Czy to filament PLA?" +#define MSG_WIZARD_INSERT_CORRECT_FILAMENT "Prosze zaladuj filament PLA i przywroc Wizard przez restart drukarki." +#define MSG_PLA_FILAMENT_LOADED "Fialment PLA jest zaladowany?" +#define MSG_PLEASE_LOAD_PLA "Prosze, najpierw zaladuj filament PLA." +#define MSG_FILE_CNT "Niektore pliki nie beda sortowane. Max. ilosc plikow do sortu w 1 folderze to 100." +#define MSG_WIZARD_HEATING "Nagrzewanie dyszy. Prosze czekac." \ No newline at end of file diff --git a/Firmware/mesh_bed_calibration.cpp b/Firmware/mesh_bed_calibration.cpp index 98bf918f8..1c00651a8 100644 --- a/Firmware/mesh_bed_calibration.cpp +++ b/Firmware/mesh_bed_calibration.cpp @@ -144,6 +144,7 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( ) { float angleDiff; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 10) { SERIAL_ECHOLNPGM("calculate machine skew and offset LS"); @@ -185,6 +186,7 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( } delay_keep_alive(100); } + #endif // SUPPORT_VERBOSITY // Run some iterations of the Gauss-Newton method of non-linear least squares. // Initial set of parameters: @@ -284,7 +286,7 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( cntr[1] += h[1]; a1 += h[2]; a2 += h[3]; - + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { SERIAL_ECHOPGM("iteration: "); MYSERIAL.print(int(iter)); @@ -308,6 +310,7 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( MYSERIAL.print(180.f * a2 / M_PI, 5); SERIAL_ECHOLNPGM(""); } + #endif // SUPPORT_VERBOSITY } vec_x[0] = cos(a1) * MACHINE_AXIS_SCALE_X; @@ -328,7 +331,7 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( fabs(a2) > bed_skew_angle_extreme) result = BED_SKEW_OFFSET_DETECTION_SKEW_EXTREME; } - + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 1) { SERIAL_ECHOPGM("correction angles: "); MYSERIAL.print(180.f * a1 / M_PI, 5); @@ -360,6 +363,7 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( SERIAL_ECHOLNPGM("Error after correction: "); } + #endif // SUPPORT_VERBOSITY // Measure the error after correction. for (uint8_t i = 0; i < npts; ++i) { @@ -368,33 +372,44 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( float errX = sqr(pgm_read_float(true_pts + i * 2) - x); float errY = sqr(pgm_read_float(true_pts + i * 2 + 1) - y); float err = sqrt(errX + errY); + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 10) { SERIAL_ECHOPGM("point #"); MYSERIAL.print(int(i)); SERIAL_ECHOLNPGM(":"); } + #endif // SUPPORT_VERBOSITY if (point_on_1st_row(i, npts)) { - if(verbosity_level >= 20) SERIAL_ECHOPGM("Point on first row"); + #ifdef SUPPORT_VERBOSITY + if (verbosity_level >= 20) SERIAL_ECHOPGM("Point on first row"); + #endif // SUPPORT_VERBOSITY float w = point_weight_y(i, npts, measured_pts[2 * i + 1]); if (sqrt(errX) > BED_CALIBRATION_POINT_OFFSET_MAX_1ST_ROW_X || (w != 0.f && sqrt(errY) > BED_CALIBRATION_POINT_OFFSET_MAX_1ST_ROW_Y)) { result = BED_SKEW_OFFSET_DETECTION_FITTING_FAILED; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { SERIAL_ECHOPGM(", weigth Y: "); MYSERIAL.print(w); if (sqrt(errX) > BED_CALIBRATION_POINT_OFFSET_MAX_1ST_ROW_X) SERIAL_ECHOPGM(", error X > max. error X"); if (w != 0.f && sqrt(errY) > BED_CALIBRATION_POINT_OFFSET_MAX_1ST_ROW_Y) SERIAL_ECHOPGM(", error Y > max. error Y"); } + #endif // SUPPORT_VERBOSITY } } else { - if(verbosity_level >=20 ) SERIAL_ECHOPGM("Point not on first row"); + #ifdef SUPPORT_VERBOSITY + if (verbosity_level >=20 ) SERIAL_ECHOPGM("Point not on first row"); + #endif // SUPPORT_VERBOSITY if (err > BED_CALIBRATION_POINT_OFFSET_MAX_EUCLIDIAN) { result = BED_SKEW_OFFSET_DETECTION_FITTING_FAILED; - if(verbosity_level >= 20) SERIAL_ECHOPGM(", error > max. error euclidian"); + #ifdef SUPPORT_VERBOSITY + if (verbosity_level >= 20) SERIAL_ECHOPGM(", error > max. error euclidian"); + #endif // SUPPORT_VERBOSITY } } + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 10) { SERIAL_ECHOLNPGM(""); SERIAL_ECHOPGM("measured: ("); @@ -419,7 +434,9 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( SERIAL_ECHOLNPGM(""); SERIAL_ECHOLNPGM(""); } + #endif // SUPPORT_VERBOSITY } + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { SERIAL_ECHOLNPGM("Max. errors:"); SERIAL_ECHOPGM("Max. error X:"); @@ -430,6 +447,7 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( MYSERIAL.println(BED_CALIBRATION_POINT_OFFSET_MAX_EUCLIDIAN); SERIAL_ECHOLNPGM(""); } + #endif // SUPPORT_VERBOSITY #if 0 if (result == BED_SKEW_OFFSET_DETECTION_PERFECT && fabs(a1) < bed_skew_angle_mild && fabs(a2) < bed_skew_angle_mild) { @@ -443,9 +461,11 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( } #else if (result == BED_SKEW_OFFSET_DETECTION_PERFECT) { + #ifdef SUPPORT_VERBOSITY if (verbosity_level > 0) SERIAL_ECHOLNPGM("Very little skew detected. Orthogonalizing the axes."); - // Orthogonalize the axes. + #endif // SUPPORT_VERBOSITY + // Orthogonalize the axes. a1 = 0.5f * (a1 + a2); vec_x[0] = cos(a1) * MACHINE_AXIS_SCALE_X; vec_x[1] = sin(a1) * MACHINE_AXIS_SCALE_X; @@ -462,6 +482,7 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( float w = point_weight_x(i, npts, y); cntr[0] += w * (pgm_read_float(true_pts + i * 2) - x); wx += w; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { MYSERIAL.print(i); SERIAL_ECHOLNPGM(""); @@ -474,10 +495,12 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( SERIAL_ECHOLNPGM("wx:"); MYSERIAL.print(wx); } + #endif // SUPPORT_VERBOSITY w = point_weight_y(i, npts, y); cntr[1] += w * (pgm_read_float(true_pts + i * 2 + 1) - y); wy += w; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { SERIAL_ECHOLNPGM(""); SERIAL_ECHOLNPGM("Weight_y:"); @@ -491,9 +514,11 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( SERIAL_ECHOLNPGM(""); SERIAL_ECHOLNPGM(""); } + #endif // SUPPORT_VERBOSITY } cntr[0] /= wx; cntr[1] /= wy; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { SERIAL_ECHOLNPGM(""); SERIAL_ECHOLNPGM("Final cntr values:"); @@ -504,6 +529,7 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( MYSERIAL.print(cntr[1]); SERIAL_ECHOLNPGM(""); } + #endif // SUPPORT_VERBOSITY } #endif @@ -527,7 +553,8 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( cntr[1] = cntrInv[1]; } - if (verbosity_level >= 1) { + #ifdef SUPPORT_VERBOSITY + if (verbosity_level >= 1) { // Show the adjusted state, before the fitting. SERIAL_ECHOPGM("X vector, adjusted: "); MYSERIAL.print(vec_x[0], 5); @@ -581,6 +608,7 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS( } delay_keep_alive(100); } + #endif // SUPPORT_VERBOSITY return result; } @@ -793,8 +821,10 @@ static inline void update_current_position_z() // At the current position, find the Z stop. inline bool find_bed_induction_sensor_point_z(float minimum_z, uint8_t n_iter, int verbosity_level) { + #ifdef SUPPORT_VERBOSITY if(verbosity_level >= 10) SERIAL_ECHOLNPGM("find bed induction sensor point z"); - bool endstops_enabled = enable_endstops(true); + #endif // SUPPORT_VERBOSITY + bool endstops_enabled = enable_endstops(true); bool endstop_z_enabled = enable_z_endstop(false); float z = 0.f; endstop_z_hit_on_purpose(); @@ -848,8 +878,10 @@ error: #define FIND_BED_INDUCTION_SENSOR_POINT_Z_STEP (0.2f) inline bool find_bed_induction_sensor_point_xy(int verbosity_level) { - if(verbosity_level >= 10) MYSERIAL.println("find bed induction sensor point xy"); - float feedrate = homing_feedrate[X_AXIS] / 60.f; + #ifdef SUPPORT_VERBOSITY + if (verbosity_level >= 10) MYSERIAL.println("find bed induction sensor point xy"); + #endif // SUPPORT_VERBOSITY + float feedrate = homing_feedrate[X_AXIS] / 60.f; bool found = false; { @@ -861,19 +893,27 @@ inline bool find_bed_induction_sensor_point_xy(int verbosity_level) uint8_t i; if (x0 < X_MIN_POS) { x0 = X_MIN_POS; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) SERIAL_ECHOLNPGM("X searching radius lower than X_MIN. Clamping was done."); + #endif // SUPPORT_VERBOSITY } if (x1 > X_MAX_POS) { x1 = X_MAX_POS; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) SERIAL_ECHOLNPGM("X searching radius higher than X_MAX. Clamping was done."); + #endif // SUPPORT_VERBOSITY } if (y0 < Y_MIN_POS_FOR_BED_CALIBRATION) { y0 = Y_MIN_POS_FOR_BED_CALIBRATION; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) SERIAL_ECHOLNPGM("Y searching radius lower than Y_MIN. Clamping was done."); + #endif // SUPPORT_VERBOSITY } if (y1 > Y_MAX_POS) { y1 = Y_MAX_POS; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) SERIAL_ECHOLNPGM("Y searching radius higher than X_MAX. Clamping was done."); + #endif // SUPPORT_VERBOSITY } nsteps_y = int(ceil((y1 - y0) / FIND_BED_INDUCTION_SENSOR_POINT_XY_STEP)); @@ -1178,11 +1218,13 @@ inline bool improve_bed_induction_sensor_point2(bool lift_z_on_min_y, int8_t ver } b = current_position[X_AXIS]; if (b - a < MIN_BED_SENSOR_POINT_RESPONSE_DMR) { - if (verbosity_level >= 5) { + #ifdef SUPPORT_VERBOSITY + if (verbosity_level >= 5) { SERIAL_ECHOPGM("Point width too small: "); SERIAL_ECHO(b - a); SERIAL_ECHOLNPGM(""); } + #endif // SUPPORT_VERBOSITY // We force the calibration routine to move the Z axis slightly down to make the response more pronounced. if (b - a < 0.5f * MIN_BED_SENSOR_POINT_RESPONSE_DMR) { // Don't use the new X value. @@ -1193,10 +1235,12 @@ inline bool improve_bed_induction_sensor_point2(bool lift_z_on_min_y, int8_t ver point_small = true; } } + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 5) { debug_output_point(PSTR("left" ), a, current_position[Y_AXIS], current_position[Z_AXIS]); debug_output_point(PSTR("right"), b, current_position[Y_AXIS], current_position[Z_AXIS]); } + #endif // SUPPORT_VERBOSITY // Go to the center. enable_z_endstop(false); @@ -1249,11 +1293,13 @@ inline bool improve_bed_induction_sensor_point2(bool lift_z_on_min_y, int8_t ver b = current_position[Y_AXIS]; if (b - a < MIN_BED_SENSOR_POINT_RESPONSE_DMR) { // We force the calibration routine to move the Z axis slightly down to make the response more pronounced. - if (verbosity_level >= 5) { + #ifdef SUPPORT_VERBOSITY + if (verbosity_level >= 5) { SERIAL_ECHOPGM("Point height too small: "); SERIAL_ECHO(b - a); SERIAL_ECHOLNPGM(""); } + #endif // SUPPORT_VERBOSITY if (b - a < 0.5f * MIN_BED_SENSOR_POINT_RESPONSE_DMR) { // Don't use the new Y value. current_position[Y_AXIS] = center_old_y; @@ -1263,10 +1309,12 @@ inline bool improve_bed_induction_sensor_point2(bool lift_z_on_min_y, int8_t ver point_small = true; } } + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 5) { debug_output_point(PSTR("top" ), current_position[X_AXIS], a, current_position[Z_AXIS]); debug_output_point(PSTR("bottom"), current_position[X_AXIS], b, current_position[Z_AXIS]); } + #endif // SUPPORT_VERBOSITY // Go to the center. enable_z_endstop(false); @@ -1300,8 +1348,10 @@ inline bool improve_bed_induction_sensor_point3(int verbosity_level) float a, b; bool result = true; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) MYSERIAL.println("Improve bed induction sensor point3"); - // Was the sensor point detected too far in the minus Y axis? + #endif // SUPPORT_VERBOSITY + // Was the sensor point detected too far in the minus Y axis? // If yes, the center of the induction point cannot be reached by the machine. { float x0 = center_old_x - IMPROVE_BED_INDUCTION_SENSOR_POINT3_SEARCH_RADIUS; @@ -1319,6 +1369,7 @@ inline bool improve_bed_induction_sensor_point3(int verbosity_level) if (y1 > Y_MAX_POS) y1 = Y_MAX_POS; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { SERIAL_ECHOPGM("Initial position: "); SERIAL_ECHO(center_old_x); @@ -1326,7 +1377,7 @@ inline bool improve_bed_induction_sensor_point3(int verbosity_level) SERIAL_ECHO(center_old_y); SERIAL_ECHOLNPGM(""); } - + #endif // SUPPORT_VERBOSITY // Search in the positive Y direction, until a maximum diameter is found. // (the next diameter is smaller than the current one.) float dmax = 0.f; @@ -1357,10 +1408,12 @@ inline bool improve_bed_induction_sensor_point3(int verbosity_level) // goto canceled; } b = current_position[X_AXIS]; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 5) { debug_output_point(PSTR("left" ), a, current_position[Y_AXIS], current_position[Z_AXIS]); debug_output_point(PSTR("right"), b, current_position[Y_AXIS], current_position[Z_AXIS]); } + #endif // SUPPORT_VERBOSITY float d = b - a; if (d > dmax) { xmax1 = 0.5f * (a + b); @@ -1371,8 +1424,10 @@ inline bool improve_bed_induction_sensor_point3(int verbosity_level) } } if (dmax == 0.) { + #ifdef SUPPORT_VERBOSITY if (verbosity_level > 0) SERIAL_PROTOCOLPGM("failed - not found\n"); + #endif // SUPPORT_VERBOSITY current_position[X_AXIS] = center_old_x; current_position[Y_AXIS] = center_old_y; goto canceled; @@ -1389,9 +1444,11 @@ inline bool improve_bed_induction_sensor_point3(int verbosity_level) current_position[Y_AXIS] = center_old_y; goto canceled; } + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 5) debug_output_point(PSTR("top" ), current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS]); - y1 = current_position[Y_AXIS]; + #endif // SUPPORT_VERBOSITY + y1 = current_position[Y_AXIS]; } if (y1 <= y0) { @@ -1433,10 +1490,12 @@ inline bool improve_bed_induction_sensor_point3(int verbosity_level) */ } b = current_position[X_AXIS]; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 5) { debug_output_point(PSTR("left" ), a, current_position[Y_AXIS], current_position[Z_AXIS]); debug_output_point(PSTR("right"), b, current_position[Y_AXIS], current_position[Z_AXIS]); } + #endif // SUPPORT_VERBOSITY float d = b - a; if (d > dmax) { xmax2 = 0.5f * (a + b); @@ -1484,10 +1543,12 @@ inline bool improve_bed_induction_sensor_point3(int verbosity_level) */ } b = current_position[X_AXIS]; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 5) { debug_output_point(PSTR("left" ), a, current_position[Y_AXIS], current_position[Z_AXIS]); debug_output_point(PSTR("right"), b, current_position[Y_AXIS], current_position[Z_AXIS]); } + #endif // SUPPORT_VERBOSITY float d = b - a; if (d > dmax) { xmax = 0.5f * (a + b); @@ -1509,24 +1570,29 @@ inline bool improve_bed_induction_sensor_point3(int verbosity_level) current_position[Y_AXIS] = center_old_y; goto canceled; } + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 5) debug_output_point(PSTR("top" ), current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS]); - if (current_position[Y_AXIS] - Y_MIN_POS_FOR_BED_CALIBRATION < 0.5f * dmax) { + #endif // SUPPORT_VERBOSITY + if (current_position[Y_AXIS] - Y_MIN_POS_FOR_BED_CALIBRATION < 0.5f * dmax) { // Probably not even a half circle was detected. The induction point is likely too far in the minus Y direction. // First verify, if the measurement has been done at a sufficient height. If no, lower the Z axis a bit. if (current_position[Y_AXIS] < ymax || dmax < 0.5f * MIN_BED_SENSOR_POINT_RESPONSE_DMR) { - if (verbosity_level >= 5) { + #ifdef SUPPORT_VERBOSITY + if (verbosity_level >= 5) { SERIAL_ECHOPGM("Partial point diameter too small: "); SERIAL_ECHO(dmax); SERIAL_ECHOLNPGM(""); } + #endif // SUPPORT_VERBOSITY result = false; } else { // Estimate the circle radius from the maximum diameter and height: float h = current_position[Y_AXIS] - ymax; float r = dmax * dmax / (8.f * h) + 0.5f * h; if (r < 0.8f * MIN_BED_SENSOR_POINT_RESPONSE_DMR) { - if (verbosity_level >= 5) { + #ifdef SUPPORT_VERBOSITY + if (verbosity_level >= 5) { SERIAL_ECHOPGM("Partial point estimated radius too small: "); SERIAL_ECHO(r); SERIAL_ECHOPGM(", dmax:"); @@ -1535,6 +1601,7 @@ inline bool improve_bed_induction_sensor_point3(int verbosity_level) SERIAL_ECHO(h); SERIAL_ECHOLNPGM(""); } + #endif // SUPPORT_VERBOSITY result = false; } else { // The point may end up outside of the machine working space. @@ -1561,13 +1628,15 @@ inline bool improve_bed_induction_sensor_point3(int verbosity_level) enable_z_endstop(false); current_position[X_AXIS] = xmax; current_position[Y_AXIS] = ymax; - if (verbosity_level >= 20) { + #ifdef SUPPORT_VERBOSITY + if (verbosity_level >= 20) { SERIAL_ECHOPGM("Adjusted position: "); SERIAL_ECHO(current_position[X_AXIS]); SERIAL_ECHOPGM(", "); SERIAL_ECHO(current_position[Y_AXIS]); SERIAL_ECHOLNPGM(""); } + #endif // SUPPORT_VERBOSITY // Don't clamp current_position[Y_AXIS], because the out-of-reach Y coordinate may actually be true. // Only clamp the coordinate to go. @@ -1657,6 +1726,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level SERIAL_ECHOPGM("Iteration: "); MYSERIAL.println(int(iteration + 1)); + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { SERIAL_ECHOLNPGM("Vectors: "); @@ -1679,6 +1749,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level MYSERIAL.print(cntr[1], 5); SERIAL_ECHOLNPGM(""); } + #endif // SUPPORT_VERBOSITY #ifdef MESH_BED_CALIBRATION_SHOW_LCD uint8_t next_line; lcd_display_message_fullscreen_P(MSG_FIND_BED_OFFSET_AND_SKEW_LINE1, next_line); @@ -1704,6 +1775,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level // Go up to z_initial. go_to_current(homing_feedrate[Z_AXIS] / 60.f); + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { // Go to Y0, wait, then go to Y-4. current_position[Y_AXIS] = 0.f; @@ -1715,6 +1787,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level SERIAL_ECHOLNPGM("At Y-4"); delay_keep_alive(5000); } + #endif // SUPPORT_VERBOSITY // Go to the measurement point position. //if (iteration == 0) { current_position[X_AXIS] = pgm_read_float(bed_ref_points_4 + k * 2); @@ -1732,6 +1805,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level current_position[Y_AXIS] = Y_MIN_POS_FOR_BED_CALIBRATION; }*/ + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { SERIAL_ECHOPGM("current_position[X_AXIS]:"); MYSERIAL.print(current_position[X_AXIS], 5); @@ -1743,11 +1817,13 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level MYSERIAL.print(current_position[Z_AXIS], 5); SERIAL_ECHOLNPGM(""); } - + #endif // SUPPORT_VERBOSITY go_to_current(homing_feedrate[X_AXIS] / 60.f); + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 10) delay_keep_alive(3000); + #endif // SUPPORT_VERBOSITY if (!find_bed_induction_sensor_point_xy(verbosity_level)) return BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND; #if 1 @@ -1772,6 +1848,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level return BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND; } #endif + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 10) delay_keep_alive(3000); // Save the detected point position and then clamp the Y coordinate, which may have been estimated @@ -1781,6 +1858,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level MYSERIAL.println(current_position[X_AXIS]); MYSERIAL.println(current_position[Y_AXIS]); } + #endif // SUPPORT_VERBOSITY pt[0] = (pt[0] * iteration) / (iteration + 1); pt[0] += (current_position[X_AXIS]/(iteration + 1)); //count average pt[1] = (pt[1] * iteration) / (iteration + 1); @@ -1792,7 +1870,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level //pt[1] += current_position[Y_AXIS]; //if (iteration > 0) pt[1] = pt[1] / 2; - + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { SERIAL_ECHOLNPGM(""); SERIAL_ECHOPGM("pt[0]:"); @@ -1800,6 +1878,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level SERIAL_ECHOPGM("pt[1]:"); MYSERIAL.println(pt[1]); } + #endif // SUPPORT_VERBOSITY if (current_position[Y_AXIS] < Y_MIN_POS) current_position[Y_AXIS] = Y_MIN_POS; @@ -1807,14 +1886,16 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level current_position[Z_AXIS] += 3.f + FIND_BED_INDUCTION_SENSOR_POINT_Z_STEP * iteration * 0.3; //cntr[0] += pt[0]; //cntr[1] += pt[1]; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 10 && k == 0) { // Show the zero. Test, whether the Y motor skipped steps. current_position[Y_AXIS] = MANUAL_Y_HOME_POS; go_to_current(homing_feedrate[X_AXIS] / 60.f); delay_keep_alive(3000); } + #endif // SUPPORT_VERBOSITY } - + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { // Test the positions. Are the positions reproducible? Now the calibration is active in the planner. delay_keep_alive(3000); @@ -1829,6 +1910,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level delay_keep_alive(3000); } } + #endif // SUPPORT_VERBOSITY if (pts[1] < Y_MIN_POS_CALIBRATION_POINT_OUT_OF_REACH) { too_far_mask |= 1 << 1; //front center point is out of reach @@ -1851,6 +1933,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level eeprom_update_float((float*)(EEPROM_BED_CALIBRATION_VEC_Y + 0), vec_y[0]); eeprom_update_float((float*)(EEPROM_BED_CALIBRATION_VEC_Y + 4), vec_y[1]); #endif + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 10) { // Length of the vec_x float l = sqrt(vec_x[0] * vec_x[0] + vec_x[1] * vec_x[1]); @@ -1872,10 +1955,11 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level MYSERIAL.println(fabs(l)); SERIAL_ECHOLNPGM("Saving bed calibration vectors to EEPROM"); } + #endif // SUPPORT_VERBOSITY // Correct the current_position to match the transformed coordinate system after world2machine_rotation_and_skew and world2machine_shift were set. world2machine_update_current(); - + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { // Test the positions. Are the positions reproducible? Now the calibration is active in the planner. delay_keep_alive(3000); @@ -1890,6 +1974,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level delay_keep_alive(3000); } } + #endif // SUPPORT_VERBOSITY return result; } if (result == BED_SKEW_OFFSET_DETECTION_FITTING_FAILED && too_far_mask == 2) return result; //if fitting failed and front center point is out of reach, terminate calibration and inform user @@ -1914,9 +1999,11 @@ BedSkewOffsetDetectionResultType improve_bed_offset_and_skew(int8_t method, int8 float *cntr = vec_y + 2; memset(pts, 0, sizeof(float) * 7 * 7); + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 10) SERIAL_ECHOLNPGM("Improving bed offset and skew"); - - // Cache the current correction matrix. + #endif // SUPPORT_VERBOSITY + + // Cache the current correction matrix. world2machine_initialize(); vec_x[0] = world2machine_rotation_and_skew[0][0]; vec_x[1] = world2machine_rotation_and_skew[1][0]; @@ -1953,7 +2040,8 @@ BedSkewOffsetDetectionResultType improve_bed_offset_and_skew(int8_t method, int8 enable_endstops(false); enable_z_endstop(false); go_to_current(homing_feedrate[Z_AXIS]/60); - if (verbosity_level >= 20) { + #ifdef SUPPORT_VERBOSITY + if (verbosity_level >= 20) { // Go to Y0, wait, then go to Y-4. current_position[Y_AXIS] = 0.f; go_to_current(homing_feedrate[X_AXIS] / 60.f); @@ -1964,6 +2052,7 @@ BedSkewOffsetDetectionResultType improve_bed_offset_and_skew(int8_t method, int8 SERIAL_ECHOLNPGM("At Y_MIN_POS"); delay_keep_alive(5000); } + #endif // SUPPORT_VERBOSITY // Go to the measurement point. // Use the coorrected coordinate, which is a result of find_bed_offset_and_skew(). current_position[X_AXIS] = vec_x[0] * pgm_read_float(bed_ref_points+mesh_point*2) + vec_y[0] * pgm_read_float(bed_ref_points+mesh_point*2+1) + cntr[0]; @@ -1971,26 +2060,33 @@ BedSkewOffsetDetectionResultType improve_bed_offset_and_skew(int8_t method, int8 // The calibration points are very close to the min Y. if (current_position[Y_AXIS] < Y_MIN_POS_FOR_BED_CALIBRATION){ current_position[Y_AXIS] = Y_MIN_POS_FOR_BED_CALIBRATION; + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { SERIAL_ECHOPGM("Calibration point "); SERIAL_ECHO(mesh_point); SERIAL_ECHOPGM("lower than Ymin. Y coordinate clamping was used."); SERIAL_ECHOLNPGM(""); - } + } + #endif // SUPPORT_VERBOSITY } go_to_current(homing_feedrate[X_AXIS]/60); // Find its Z position by running the normal vertical search. - if (verbosity_level >= 10) + #ifdef SUPPORT_VERBOSITY + if (verbosity_level >= 10) delay_keep_alive(3000); - find_bed_induction_sensor_point_z(); - if (verbosity_level >= 10) + #endif // SUPPORT_VERBOSITY + find_bed_induction_sensor_point_z(); + #ifdef SUPPORT_VERBOSITY + if (verbosity_level >= 10) delay_keep_alive(3000); - // Try to move the Z axis down a bit to increase a chance of the sensor to trigger. + #endif // SUPPORT_VERBOSITY + // Try to move the Z axis down a bit to increase a chance of the sensor to trigger. current_position[Z_AXIS] -= 0.025f; // Improve the point position by searching its center in a current plane. int8_t n_errors = 3; for (int8_t iter = 0; iter < 8; ) { - if (verbosity_level > 20) { + #ifdef SUPPORT_VERBOSITY + if (verbosity_level > 20) { SERIAL_ECHOPGM("Improving bed point "); SERIAL_ECHO(mesh_point); SERIAL_ECHOPGM(", iteration "); @@ -1999,6 +2095,7 @@ BedSkewOffsetDetectionResultType improve_bed_offset_and_skew(int8_t method, int8 MYSERIAL.print(current_position[Z_AXIS], 5); SERIAL_ECHOLNPGM(""); } + #endif // SUPPORT_VERBOSITY bool found = false; if (mesh_point < 3) { // Because the sensor cannot move in front of the first row @@ -2032,7 +2129,8 @@ BedSkewOffsetDetectionResultType improve_bed_offset_and_skew(int8_t method, int8 enable_endstops(false); enable_z_endstop(false); go_to_current(homing_feedrate[Z_AXIS]); - if (verbosity_level >= 5) { + #ifdef SUPPORT_VERBOSITY + if (verbosity_level >= 5) { SERIAL_ECHOPGM("Improving bed point "); SERIAL_ECHO(mesh_point); SERIAL_ECHOPGM(", iteration "); @@ -2041,10 +2139,13 @@ BedSkewOffsetDetectionResultType improve_bed_offset_and_skew(int8_t method, int8 MYSERIAL.print(current_position[Z_AXIS], 5); SERIAL_ECHOLNPGM(""); } + #endif // SUPPORT_VERBOSITY } } + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 10) delay_keep_alive(3000); + #endif // SUPPORT_VERBOSITY } // Don't let the manage_inactivity() function remove power from the motors. refresh_cmd_timeout(); @@ -2056,6 +2157,7 @@ BedSkewOffsetDetectionResultType improve_bed_offset_and_skew(int8_t method, int8 enable_endstops(false); enable_z_endstop(false); + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 5) { // Test the positions. Are the positions reproducible? current_position[Z_AXIS] = MESH_HOME_Z_SEARCH; @@ -2079,17 +2181,19 @@ BedSkewOffsetDetectionResultType improve_bed_offset_and_skew(int8_t method, int8 SERIAL_ECHOLNPGM(""); } } + #endif // SUPPORT_VERBOSITY { // First fill in the too_far_mask from the measured points. for (uint8_t mesh_point = 0; mesh_point < 3; ++ mesh_point) if (pts[mesh_point * 2 + 1] < Y_MIN_POS_CALIBRATION_POINT_OUT_OF_REACH) too_far_mask |= 1 << mesh_point; - + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { SERIAL_ECHOPGM("Distance from min before calculate_machine skew and offset LS:"); MYSERIAL.print(int(too_far_mask)); } + #endif // SUPPORT_VERBOSITY result = calculate_machine_skew_and_offset_LS(pts, 9, bed_ref_points, vec_x, vec_y, cntr, verbosity_level); if (result < 0) { @@ -2098,11 +2202,13 @@ BedSkewOffsetDetectionResultType improve_bed_offset_and_skew(int8_t method, int8 } // In case of success, update the too_far_mask from the calculated points. too_far_mask = 0; - if(verbosity_level >= 20) SERIAL_ECHOPGM("Reseting too far mask."); - + #ifdef SUPPORT_VERBOSITY + if (verbosity_level >= 20) SERIAL_ECHOPGM("Reseting too far mask."); + #endif // SUPPORT_VERBOSITY for (uint8_t mesh_point = 0; mesh_point < 3; ++ mesh_point) { float y = vec_x[1] * pgm_read_float(bed_ref_points+mesh_point*2) + vec_y[1] * pgm_read_float(bed_ref_points+mesh_point*2+1) + cntr[1]; distance_from_min[mesh_point] = (y - Y_MIN_POS_CALIBRATION_POINT_OUT_OF_REACH); + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 20) { SERIAL_ECHOLNPGM(""); SERIAL_ECHOPGM("Distance from min:"); @@ -2112,6 +2218,7 @@ BedSkewOffsetDetectionResultType improve_bed_offset_and_skew(int8_t method, int8 MYSERIAL.print(y); SERIAL_ECHOLNPGM(""); } + #endif // SUPPORT_VERBOSITY if (y < Y_MIN_POS_CALIBRATION_POINT_OUT_OF_REACH) too_far_mask |= 1 << mesh_point; } @@ -2133,7 +2240,7 @@ BedSkewOffsetDetectionResultType improve_bed_offset_and_skew(int8_t method, int8 enable_endstops(false); enable_z_endstop(false); - + #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 5) { // Test the positions. Are the positions reproducible? Now the calibration is active in the planner. delay_keep_alive(3000); @@ -2162,6 +2269,7 @@ BedSkewOffsetDetectionResultType improve_bed_offset_and_skew(int8_t method, int8 } } } + #endif // SUPPORT_VERBOSITY // Sample Z heights for the mesh bed leveling. // In addition, store the results into an eeprom, to be used later for verification of the bed leveling process. diff --git a/Firmware/planner.cpp b/Firmware/planner.cpp index d6d70fb4c..7dd79903a 100644 --- a/Firmware/planner.cpp +++ b/Firmware/planner.cpp @@ -1288,12 +1288,18 @@ void plan_set_position(float x, float y, float z, const float &e) // Only useful in the bed leveling routine, when the mesh bed leveling is off. void plan_set_z_position(const float &z) { + #ifdef LIN_ADVANCE + position_float[Z_AXIS] = z; + #endif position[Z_AXIS] = lround(z*axis_steps_per_unit[Z_AXIS]); st_set_position(position[X_AXIS], position[Y_AXIS], position[Z_AXIS], position[E_AXIS]); } void plan_set_e_position(const float &e) { + #ifdef LIN_ADVANCE + position_float[E_AXIS] = e; + #endif position[E_AXIS] = lround(e*axis_steps_per_unit[E_AXIS]); st_set_e_position(position[E_AXIS]); } diff --git a/Firmware/stepper.cpp b/Firmware/stepper.cpp index 0f3f65aaa..0605e3abb 100644 --- a/Firmware/stepper.cpp +++ b/Firmware/stepper.cpp @@ -735,8 +735,6 @@ void isr() { void advance_isr() { - nextAdvanceISR = eISR_Rate; - if (e_steps) { bool dir = #ifdef SNMM @@ -752,7 +750,11 @@ void isr() { e_steps < 0 ? ++e_steps : --e_steps; WRITE(E0_STEP_PIN, INVERT_E_STEP_PIN); } - } + } + else{ + eISR_Rate = ADV_NEVER; + } + nextAdvanceISR = eISR_Rate; } void advance_isr_scheduler() { diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index 7c2037d03..382e71b94 100644 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -211,6 +211,9 @@ static int temp_runaway_error_counter[4]; long bias, d; float Ku, Tu; float max = 0, min = 10000; + uint8_t safety_check_cycles = 0; + const uint8_t safety_check_cycles_count = (extruder < 0) ? 45 : 10; //10 cycles / 20s delay for extruder and 45 cycles / 90s for heatbed + float temp_ambient; #if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \ (defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1) || \ @@ -347,11 +350,31 @@ static int temp_runaway_error_counter[4]; p=soft_pwm[extruder]; SERIAL_PROTOCOLPGM("ok T:"); } - SERIAL_PROTOCOL(input); SERIAL_PROTOCOLPGM(" @:"); SERIAL_PROTOCOLLN(p); + if (safety_check_cycles == 0) { //save ambient temp + temp_ambient = input; + //SERIAL_ECHOPGM("Ambient T: "); + //MYSERIAL.println(temp_ambient); + safety_check_cycles++; + } + else if (safety_check_cycles < safety_check_cycles_count) { //delay + safety_check_cycles++; + } + else if (safety_check_cycles == safety_check_cycles_count){ //check that temperature is rising + safety_check_cycles++; + //SERIAL_ECHOPGM("Time from beginning: "); + //MYSERIAL.print(safety_check_cycles_count * 2); + //SERIAL_ECHOPGM("s. Difference between current and ambient T: "); + //MYSERIAL.println(input - temp_ambient); + if (abs(input - temp_ambient) < 5.0) { + temp_runaway_stop(false, (extruder<0)); + pid_tuning_finished = true; + return; + } + } temp_millis = millis(); } if(((millis() - t1) + (millis() - t2)) > (10L*60L*1000L*2L)) { diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index f7d7756fb..ea2f81272 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -97,12 +97,9 @@ int8_t SDscrool = 0; int8_t SilentModeMenu = 0; // FILAMENT_RUNOUT_SENSOR -#ifdef FILAMENT_RUNOUT_SENSOR -static void lcd_fil_runout_settings_menu(); -static void lcd_fil_runout_active_set(); -static void lcd_fil_runout_inverting_set(); -static void lcd_endstoppullup_fil_runout_set(); -#endif +/*#ifdef FILAMENT_RUNOUT_SENSOR +static void lcd_fil_runout_status_set(); +#endif*/ // end FILAMENT_RUNOUT_SENSOR #ifdef SNMM uint8_t snmm_extruder = 0; @@ -1296,14 +1293,19 @@ void lcd_commands() pid_tuning_finished = false; custom_message_state = 0; lcd_setstatuspgm(MSG_PID_FINISHED); - strcpy(cmd1, "M301 P"); - strcat(cmd1, ftostr32(_Kp)); - strcat(cmd1, " I"); - strcat(cmd1, ftostr32(_Ki)); - strcat(cmd1, " D"); - strcat(cmd1, ftostr32(_Kd)); - enquecommand(cmd1); - enquecommand_P(PSTR("M500")); + if (_Kp != 0 || _Ki != 0 || _Kd != 0) { + strcpy(cmd1, "M301 P"); + strcat(cmd1, ftostr32(_Kp)); + strcat(cmd1, " I"); + strcat(cmd1, ftostr32(_Ki)); + strcat(cmd1, " D"); + strcat(cmd1, ftostr32(_Kd)); + enquecommand(cmd1); + enquecommand_P(PSTR("M500")); + } + else { + SERIAL_ECHOPGM("Invalid PID cal. results. Not stored to EEPROM."); + } display_time = millis(); lcd_commands_step = 1; } @@ -2512,8 +2514,11 @@ int8_t lcd_show_multiscreen_message_yes_no_and_wait_P(const char *msg, bool allo while (lcd_clicked()); delay(10); while (lcd_clicked()); - KEEPALIVE_STATE(IN_HANDLER); - if(msg_next == NULL) return yes; + if (msg_next == NULL) { + KEEPALIVE_STATE(IN_HANDLER); + lcd_set_custom_characters(); + return yes; + } else break; } } @@ -2653,7 +2658,7 @@ static void lcd_show_end_stops() { lcd.setCursor(0, 3); lcd_printPGM(((READ(Z_MIN_PIN) ^ Z_MIN_ENDSTOP_INVERTING) == 1) ? (PSTR("Z:1")) : (PSTR("Z:0"))); // FILAMENT_RUNOUT_SENSOR - if (fil_runout_active) { + if (fil_runout_status > 0) { lcd.setCursor(4, 1); lcd_printPGM(((READ(FIL_RUNOUT_PIN) ^ FIL_RUNOUT_INVERTING) == 1) ? (PSTR("FRS:1")) : (PSTR("FRS:0"))); } @@ -3068,6 +3073,19 @@ static void lcd_silent_mode_set() { digipot_init(); lcd_goto_menu(lcd_settings_menu, 7); } + +static void lcd_silent_mode_set_tune() { + switch (SilentModeMenu) { + case 0: SilentModeMenu = 1; break; + case 1: SilentModeMenu = 2; break; + case 2: SilentModeMenu = 0; break; + default: SilentModeMenu = 0; break; + } + eeprom_update_byte((unsigned char *)EEPROM_SILENT, SilentModeMenu); + digipot_init(); + lcd_goto_menu(lcd_tune_menu, 8); +} + static void lcd_set_lang(unsigned char lang) { lang_selected = lang; firstrun = 1; @@ -3285,6 +3303,7 @@ void lcd_wizard() { lcd_wizard(0); } else { + lcd_return_to_status(); lcd_update_enable(true); lcd_update(2); } @@ -3453,18 +3472,10 @@ void lcd_wizard(int state) { lcd_update(2); } // FILAMENT_RUNOUT_SENSOR -void lcd_fil_runout_settings_menu() +/*void lcd_fil_runout_settings_menu() { START_MENU(); MENU_ITEM(back, MSG_SETTINGS, lcd_settings_menu); - // debug info - //lcd.setCursor(1, 5); - //lcd_printPGM((fil_runout_active == 1) ? (PSTR("S_ON ")) : (PSTR("S_OFF"))); - //lcd.setCursor(7, 5); - //lcd_printPGM((FIL_RUNOUT_INVERTING == 0) ? (PSTR("I_ON ")) : (PSTR("I_OFF"))); - //lcd.setCursor(13, 5); - //lcd_printPGM((ENDSTOPPULLUP_FIL_RUNOUT == 0) ? (PSTR("P_ON ")) : (PSTR("P_OFF"))); - // end debug info if (fil_runout_active == false) { MENU_ITEM(submenu, MSG_FIL_RUNOUT_ACTIVE_OFF, lcd_fil_runout_active_set); } else { @@ -3481,34 +3492,90 @@ void lcd_fil_runout_settings_menu() } } END_MENU(); -} +}*/ -void lcd_fil_runout_active_set() { - fil_runout_active = !fil_runout_active; - eeprom_update_byte((unsigned char *)EEPROM_FIL_RUNOUT_ACTIVE, fil_runout_active); +static void lcd_fil_runout_status_set() { +int8_t fil_runout_status = 0; + switch (fil_runout_status) { + case 0: + fil_runout_status = 1; + FIL_RUNOUT_INVERTING = 1; + ENDSTOPPULLUP_FIL_RUNOUT = 1; + break; + case 1: + fil_runout_status = 2; + FIL_RUNOUT_INVERTING = 0; + ENDSTOPPULLUP_FIL_RUNOUT = 0; + break; + case 2: + fil_runout_status = 0; + FIL_RUNOUT_INVERTING = 1; + ENDSTOPPULLUP_FIL_RUNOUT = 1; + break; + default: fil_runout_status = 0; break; + } + eeprom_update_byte((unsigned char *)EEPROM_FIL_RUNOUT_STATUS, fil_runout_status); +/* if (fil_runout_status == 1) { + FIL_RUNOUT_INVERTING = 0; + ENDSTOPPULLUP_FIL_RUNOUT = 1; + else + FIL_RUNOUT_INVERTING = 1; + ENDSTOPPULLUP_FIL_RUNOUT = 0; + }*/ + digipot_init(); + lcd_goto_menu(lcd_settings_menu, 9); +} + /*fil_runout_active = !fil_runout_active; + eeprom_update_byte((unsigned char *)EEPROM_FIL_RUNOUT_STATUS, fil_runout_status); digipot_init(); lcd_goto_menu(lcd_fil_runout_settings_menu, 1); - } + }*/ - void lcd_fil_runout_active_tune() { - fil_runout_active = !fil_runout_active; - eeprom_update_byte((unsigned char *)EEPROM_FIL_RUNOUT_ACTIVE, fil_runout_active); - digipot_init(); - lcd_goto_menu(lcd_tune_menu, 9); +static void lcd_fil_runout_status_tune() { + switch (fil_runout_status) { + case 0: + fil_runout_status = 1; + FIL_RUNOUT_INVERTING = 1; + ENDSTOPPULLUP_FIL_RUNOUT = 1; + break; + case 1: + fil_runout_status = 2; + FIL_RUNOUT_INVERTING = 0; + ENDSTOPPULLUP_FIL_RUNOUT = 0; + break; + case 2: + fil_runout_status = 0; + FIL_RUNOUT_INVERTING = 1; + ENDSTOPPULLUP_FIL_RUNOUT = 1; + break; + default: fil_runout_status = 0; break; } + eeprom_update_byte((unsigned char *)EEPROM_FIL_RUNOUT_STATUS, fil_runout_status); + digipot_init(); + lcd_goto_menu(lcd_tune_menu, 9); +} + + + + //void lcd_fil_runout_status_tune() { + //fil_runout_status = !fil_runout_status; + //eeprom_update_byte((unsigned char *)EEPROM_FIL_RUNOUT_STATUS, fil_runout_status); + //digipot_init(); + //lcd_goto_menu(lcd_tune_menu, 9); + //} -void lcd_fil_runout_inverting_set() { - FIL_RUNOUT_INVERTING = !FIL_RUNOUT_INVERTING; - eeprom_update_byte((unsigned char *)EEPROM_FIL_RUNOUT_INVERTING, FIL_RUNOUT_INVERTING); - digipot_init(); - lcd_goto_menu(lcd_fil_runout_settings_menu, 2); - } - void lcd_endstoppullup_fil_runout_set() { - ENDSTOPPULLUP_FIL_RUNOUT = !ENDSTOPPULLUP_FIL_RUNOUT; - eeprom_update_byte((unsigned char *)EEPROM_ENDSTOPPULLUP_FIL_RUNOUT, ENDSTOPPULLUP_FIL_RUNOUT); - digipot_init(); - lcd_goto_menu(lcd_fil_runout_settings_menu, 3); - } +//void lcd_fil_runout_inverting_set() { + //FIL_RUNOUT_INVERTING = !FIL_RUNOUT_INVERTING; + //eeprom_update_byte((unsigned char *)EEPROM_FIL_RUNOUT_INVERTING, FIL_RUNOUT_INVERTING); + //digipot_init(); + //lcd_goto_menu(lcd_fil_runout_settings_menu, 2); + //} + //void lcd_endstoppullup_fil_runout_set() { + //ENDSTOPPULLUP_FIL_RUNOUT = !ENDSTOPPULLUP_FIL_RUNOUT; + //eeprom_update_byte((unsigned char *)EEPROM_ENDSTOPPULLUP_FIL_RUNOUT, ENDSTOPPULLUP_FIL_RUNOUT); + //digipot_init(); + //lcd_goto_menu(lcd_fil_runout_settings_menu, 3); + //} // end FILAMENT_RUNOUT_SENSOR @@ -3568,7 +3635,12 @@ static void lcd_settings_menu() } // FILAMENT_RUNOUT_SENSOR #ifdef FIL_RUNOUT_PIN - MENU_ITEM(submenu, MSG_FIL_RUNOUT_SETTINGS, lcd_fil_runout_settings_menu); + switch (fil_runout_status) { + case 0: MENU_ITEM(function, MSG_FIL_RUNOUT_STATUS_OFF, lcd_fil_runout_status_set); break; + case 1: MENU_ITEM(function, MSG_FIL_RUNOUT_STATUS_VCC, lcd_fil_runout_status_set); break; + case 2: MENU_ITEM(function, MSG_FIL_RUNOUT_STATUS_GND, lcd_fil_runout_status_set); break; + default: MENU_ITEM(function, MSG_FIL_RUNOUT_STATUS_OFF, lcd_fil_runout_status_set); break; + } #endif // end FILAMENT_RUNOUT_SENSOR END_MENU(); @@ -4822,17 +4894,6 @@ static void lcd_autostart_sd() } -static void lcd_silent_mode_set_tune() { - switch (SilentModeMenu) { - case 0: SilentModeMenu = 1; break; - case 1: SilentModeMenu = 2; break; - case 2: SilentModeMenu = 0; break; - default: SilentModeMenu = 0; break; - } - eeprom_update_byte((unsigned char *)EEPROM_SILENT, SilentModeMenu); - digipot_init(); - lcd_goto_menu(lcd_tune_menu, 9); -} #endif static void lcd_colorprint_change() { @@ -4864,22 +4925,25 @@ static void lcd_tune_menu() #ifdef FILAMENTCHANGEENABLE MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_colorprint_change);//7 #endif - - if (!farm_mode) { //dont show in menu if we are in farm mode + + if (!farm_mode) { //dont show in menu if we are in farm mode //8 switch (SilentModeMenu) { - case 0: MENU_ITEM(function, MSG_SILENT_MODE_OFF, lcd_silent_mode_set); break; - case 1: MENU_ITEM(function, MSG_SILENT_MODE_ON, lcd_silent_mode_set); break; - case 2: MENU_ITEM(function, MSG_AUTO_MODE_ON, lcd_silent_mode_set); break; - default: MENU_ITEM(function, MSG_SILENT_MODE_OFF, lcd_silent_mode_set); break; + case 0: MENU_ITEM(function, MSG_SILENT_MODE_OFF, lcd_silent_mode_set_tune); break; + case 1: MENU_ITEM(function, MSG_SILENT_MODE_ON, lcd_silent_mode_set_tune); break; + case 2: MENU_ITEM(function, MSG_AUTO_MODE_ON, lcd_silent_mode_set_tune); break; + default: MENU_ITEM(function, MSG_SILENT_MODE_OFF, lcd_silent_mode_set_tune); break; } } // FILAMENT_RUNOUT_SENSOR #ifdef FILAMENT_RUNOUT_SUPPORT //9 - if (fil_runout_active == false) { - MENU_ITEM(function, MSG_FIL_RUNOUT_ACTIVE_OFF, lcd_fil_runout_active_tune); - } else { - MENU_ITEM(function, MSG_FIL_RUNOUT_ACTIVE_ON, lcd_fil_runout_active_tune); + if (fil_runout_status > 0) { + switch (fil_runout_status) { + case 0: MENU_ITEM(function, MSG_FIL_RUNOUT_STATUS_OFF, lcd_fil_runout_status_tune); break; + case 1: MENU_ITEM(function, MSG_FIL_RUNOUT_STATUS_VCC, lcd_fil_runout_status_tune); break; + case 2: MENU_ITEM(function, MSG_FIL_RUNOUT_STATUS_GND, lcd_fil_runout_status_tune); break; + default: MENU_ITEM(function, MSG_FIL_RUNOUT_STATUS_OFF, lcd_fil_runout_status_tune); break; + } } #endif // end FILAMENT_RUNOUT_SENSOR @@ -5861,7 +5925,6 @@ static bool check_file(const char* filename) { get_command(); result = check_commands(); } - cmdqueue_reset(); card.printingHasFinished(); strncpy_P(lcd_status_message, WELCOME_MSG, LCD_WIDTH); return result; diff --git a/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h index a597797a5..091e27ff0 100644 --- a/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo10a-E3Dv6full.h @@ -407,4 +407,8 @@ THERMISTORS SETTINGS #define END_FILE_SECTION 10000 //number of bytes from end of file used for checking if file is complete +#ifndef SNMM +#define SUPPORT_VERBOSITY +#endif + #endif //__CONFIGURATION_PRUSA_H diff --git a/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h index 50752399a..ea062b8ea 100644 --- a/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-MultiMaterial-RAMBo13a-E3Dv6full.h @@ -407,4 +407,8 @@ THERMISTORS SETTINGS #define END_FILE_SECTION 10000 //number of bytes from end of file used for checking if file is complete +#ifndef SNMM +#define SUPPORT_VERBOSITY +#endif + #endif //__CONFIGURATION_PRUSA_H diff --git a/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h index c3e08674f..3fedf1b95 100644 --- a/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h @@ -405,4 +405,8 @@ THERMISTORS SETTINGS #define END_FILE_SECTION 10000 //number of bytes from end of file used for checking if file is complete +#ifndef SNMM +#define SUPPORT_VERBOSITY +#endif + #endif //__CONFIGURATION_PRUSA_H diff --git a/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h b/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h index 206645029..43a8d0491 100644 --- a/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h @@ -407,4 +407,8 @@ THERMISTORS SETTINGS #define END_FILE_SECTION 10000 //number of bytes from end of file used for checking if file is complete +#ifndef SNMM +#define SUPPORT_VERBOSITY +#endif + #endif //__CONFIGURATION_PRUSA_H From 2a2a3999f8968a1990b3d39f1e73846d871a9725 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Mon, 6 Nov 2017 16:46:39 +0100 Subject: [PATCH 5/5] Modified version info... to see differences to stock version. Behind the version info 3 letters can be used, i have chosen to use that to identify 3 projects: - 'H'yperfine Tuning as 1st project and 1st letter - 'F'ilament Runout Sensor as 2nd project and 2nd letter - 'M'ulti Languages as 3rd project and 3rd letter As i merge one or all projects in one version the result will be <1st project><2nd project><3rd project> Example: Having all 3 projects together the actual firmware version will be shown as 'FW - 3.1.0-RC2HFM' Also added time and author to the support view. --- Firmware/Configuration.h | 2 +- Firmware/ultralcd.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 617f666d4..33c1b2aaa 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -5,7 +5,7 @@ #include "Configuration_prusa.h" // Firmware version -#define FW_version "3.1.0-RC2" +#define FW_version "3.1.0-RC2 F " #define FW_PRUSA3D_MAGIC "PRUSA3DFW" #define FW_PRUSA3D_MAGIC_LEN 10 diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index ea2f81272..6d1706d80 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -1484,6 +1484,8 @@ static void lcd_support_menu() MENU_ITEM(back, PSTR("------------"), lcd_main_menu); MENU_ITEM(back, MSG_DATE, lcd_main_menu); MENU_ITEM(back, PSTR(__DATE__), lcd_main_menu); + MENU_ITEM(back, PSTR(__TIME__), lcd_main_menu); + MENU_ITEM(back, PSTR(STRING_CONFIG_H_AUTHOR), lcd_main_menu); // Show the FlashAir IP address, if the card is available. if (menuData.supportMenu.is_flash_air) {