diff --git a/.circleci/config.yml b/.circleci/config.yml
index 5369e2f4d5ac..d474f034ba2b 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -51,8 +51,8 @@ jobs:
export PATH=`pwd`/buildroot/bin/:${PATH}
# Generate custom version include
- generate_version ./Marlin/src/inc
- cat ./Marlin/src/inc/_Version.h
+ generate_version ./Marlin/
+ cat ./Marlin/Version.h
#
# Back up pins_RAMPS.h
#
diff --git a/.travis.yml b/.travis.yml
index 4bfadbcc6b77..b747ffe331ea 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,8 +13,6 @@ env:
- TEST_PLATFORM="DUE"
- TEST_PLATFORM="esp32"
- TEST_PLATFORM="linux_native"
- - TEST_PLATFORM="LPC1768"
- - TEST_PLATFORM="LPC1769"
- TEST_PLATFORM="megaatmega2560"
- TEST_PLATFORM="STM32F103RE"
- TEST_PLATFORM="teensy31"
@@ -27,20 +25,26 @@ env:
- TEST_PLATFORM="sanguino_atmega1284p"
- TEST_PLATFORM="sanguino_atmega644p"
+ # Broken Extended STM32 Environments
+ #- TEST_PLATFORM="ARMED"
+ #- TEST_PLATFORM="BIGTREE_BTT002"
+ #- TEST_PLATFORM="BIGTREE_SKR_PRO"
+
# Extended STM32 Environments
- - TEST_PLATFORM="ARMED"
- - TEST_PLATFORM="BIGTREE_BTT002"
- - TEST_PLATFORM="BIGTREE_SKR_PRO"
- TEST_PLATFORM="STM32F103RC_bigtree"
- TEST_PLATFORM="jgaurora_a5s_a1"
- TEST_PLATFORM="STM32F103VE_longer"
- TEST_PLATFORM="STM32F407VE_black"
+ - TEST_PLATFORM="mks_robin"
+
+ # Put lengthy tests last
+ - TEST_PLATFORM="LPC1768"
+ - TEST_PLATFORM="LPC1769"
# Non-working environment tests
#- TEST_PLATFORM="at90usb1286_cdc"
#- TEST_PLATFORM="at90usb1286_dfu"
#- TEST_PLATFORM="STM32F103CB_malyan"
- #- TEST_PLATFORM="mks_robin"
#- TEST_PLATFORM="mks_robin_lite"
#- TEST_PLATFORM="mks_robin_mini"
#- TEST_PLATFORM="mks_robin_nano"
@@ -73,8 +77,8 @@ before_script:
- cd ${TRAVIS_BUILD_DIR}
#
# Generate custom version include
- - generate_version ${TRAVIS_BUILD_DIR}/Marlin/src/inc
- - cat ${TRAVIS_BUILD_DIR}/Marlin/src/inc/_Version.h
+ - generate_version ${TRAVIS_BUILD_DIR}/Marlin/
+ - cat ${TRAVIS_BUILD_DIR}/Marlin/Version.h
#
script:
- run_tests ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index e86f47f09f6d..206b5e66f7b6 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -72,6 +72,8 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(alpine, sappireTFT35)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
+
/**
* *** VENDORS PLEASE READ ***
@@ -390,6 +392,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -407,8 +410,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
//@ need to check what thermistor it actually uses
#define TEMP_SENSOR_0 1
@@ -750,6 +751,11 @@
//@ keep speed reasonable
#define DEFAULT_MAX_FEEDRATE { 200, 200, 10, 75 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -759,6 +765,11 @@
//@ keep speed reasonable
#define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 1000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -773,36 +784,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 2000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//@ let's try
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.025 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and , if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
- #define DEFAULT_XJERK 15.0
- #define DEFAULT_YJERK 15.0
- #define DEFAULT_ZJERK 0.4
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
+ #define DEFAULT_XJERK 10.0
+ #define DEFAULT_YJERK 10.0
+ #define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 1.5 // May be used by Linear Advance @lowered to keep extruder from rattling
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1604,10 +1617,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index b1f92f0b783b..136b4b24d6cb 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -603,18 +604,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -891,6 +906,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -984,7 +1008,7 @@
#endif
// This allows hosts to request long names for files and folders with M33
- //#define LONG_FILENAME_HOST_SUPPORT
+ #define LONG_FILENAME_HOST_SUPPORT
// Enable this option to scroll long filenames in the SD card menu
//#define SCROLL_LONG_FILENAMES
@@ -1294,8 +1318,8 @@
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
//@
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 10 // Babysteps are very small. Increase for faster motion.
-
+ #define BABYSTEP_MULTIPLICATOR_Z 10 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 10
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
#define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds.
@@ -1379,7 +1403,7 @@
* probe points will follow. This prevents any change from causing
* the probe to be unable to reach any points.
*/
-#if PROBE_SELECTED && !IS_KINEMATIC && !IS_KINEMATIC
+#if PROBE_SELECTED && !IS_KINEMATIC
//#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE
//#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE
//#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE
@@ -2051,6 +2075,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2564,6 +2590,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/Marlin/Version.h b/Marlin/Version.h
new file mode 100644
index 000000000000..d18176f27f74
--- /dev/null
+++ b/Marlin/Version.h
@@ -0,0 +1,76 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+////////////////////////////
+// VENDOR VERSION EXAMPLE //
+////////////////////////////
+
+/**
+ * Marlin release version identifier
+ */
+//#define SHORT_BUILD_VERSION "bugfix-2.0.x"
+
+/**
+ * Verbose version identifier which should contain a reference to the location
+ * from where the binary was downloaded or the source code was compiled.
+ */
+//#define DETAILED_BUILD_VERSION SHORT_BUILD_VERSION " (Github)"
+
+/**
+ * The STRING_DISTRIBUTION_DATE represents when the binary file was built,
+ * here we define this default string as the date where the latest release
+ * version was tagged.
+ */
+//#define STRING_DISTRIBUTION_DATE "2019-07-10"
+
+/**
+ * Defines a generic printer name to be output to the LCD after booting Marlin.
+ */
+//#define MACHINE_NAME "3D Printer"
+
+/**
+ * The SOURCE_CODE_URL is the location where users will find the Marlin Source
+ * Code which is installed on the device. In most cases —unless the manufacturer
+ * has a distinct Github fork— the Source Code URL should just be the main
+ * Marlin repository.
+ */
+//#define SOURCE_CODE_URL "https://github.com/MarlinFirmware/Marlin"
+
+/**
+ * Default generic printer UUID.
+ */
+//#define DEFAULT_MACHINE_UUID "cede2a2f-41a2-4748-9b12-c55c62f367ff"
+
+/**
+ * The WEBSITE_URL is the location where users can get more information such as
+ * documentation about a specific Marlin release.
+ */
+//#define WEBSITE_URL "http://marlinfw.org"
+
+/**
+ * Set the vendor info the serial USB interface, if changable
+ * Currently only supported by DUE platform
+ */
+//#define USB_DEVICE_VENDOR_ID 0x0000
+//#define USB_DEVICE_PRODUCT_ID 0x0000
+//#define USB_DEVICE_MANUFACTURE_NAME WEBSITE_URL
diff --git a/Marlin/src/HAL/HAL_AVR/HAL.h b/Marlin/src/HAL/HAL_AVR/HAL.h
index 246353677fff..31d88f5ab5d1 100644
--- a/Marlin/src/HAL/HAL_AVR/HAL.h
+++ b/Marlin/src/HAL/HAL_AVR/HAL.h
@@ -38,6 +38,14 @@
#include
#include
+#ifndef pgm_read_ptr
+ // Compatibility for avr-libc 1.8.0-4.1 included with Ubuntu for
+ // Windows Subsystem for Linux on Windows 10 as of 10/18/2019
+ #define pgm_read_ptr_far(address_long) (void*)__ELPM_word((uint32_t)(address_long))
+ #define pgm_read_ptr_near(address_short) (void*)__LPM_word((uint16_t)(address_short))
+ #define pgm_read_ptr(address_short) pgm_read_ptr_near(address_short)
+#endif
+
// ------------------------
// Defines
// ------------------------
diff --git a/Marlin/src/HAL/HAL_AVR/endstop_interrupts.h b/Marlin/src/HAL/HAL_AVR/endstop_interrupts.h
index b80fee610d59..5470a7d7a68f 100644
--- a/Marlin/src/HAL/HAL_AVR/endstop_interrupts.h
+++ b/Marlin/src/HAL/HAL_AVR/endstop_interrupts.h
@@ -51,37 +51,20 @@ void endstop_ISR() { endstops.update(); }
* There are more PCI-enabled processor pins on Port J, but they are not connected to Arduino MEGA.
*/
#if defined(ARDUINO_AVR_MEGA2560) || defined(ARDUINO_AVR_MEGA)
- #undef digitalPinToPCICR
- #define digitalPinToPCICR(p) ( WITHIN(p, 10, 15) || \
- WITHIN(p, 50, 53) || \
- WITHIN(p, 62, 69) ? &PCICR : nullptr )
- #undef digitalPinToPCICRbit
- #define digitalPinToPCICRbit(p) ( WITHIN(p, 10, 13) || WITHIN(p, 50, 53) ? 0 : \
- WITHIN(p, 14, 15) ? 1 : \
- WITHIN(p, 62, 69) ? 2 : \
- 0 )
- #undef digitalPinToPCMSK
- #define digitalPinToPCMSK(p) ( WITHIN(p, 10, 13) || WITHIN(p, 50, 53) ? &PCMSK0 : \
- WITHIN(p, 14, 15) ? &PCMSK1 : \
- WITHIN(p, 62, 69) ? &PCMSK2 : \
- nullptr )
- #undef digitalPinToPCMSKbit
- #define digitalPinToPCMSKbit(p) ( WITHIN(p, 10, 13) ? ((p) - 6) : \
- (p) == 14 || (p) == 51 ? 2 : \
- (p) == 15 || (p) == 52 ? 1 : \
- (p) == 50 ? 3 : \
- (p) == 53 ? 0 : \
- WITHIN(p, 62, 69) ? ((p) - 62) : \
- 0 )
+ #define digitalPinHasPCICR(p) (WITHIN(p, 10, 15) || WITHIN(p, 50, 53) || WITHIN(p, 62, 69))
+ #define moreDigitalPinToPCICR(p) digitalPinToPCICR(WITHIN(p, 13, 14) ? 10 : p)
+ #define moreDigitalPinToPCICRbit(p) digitalPinToPCICRbit(p == 13 ? 10 : p == 14 ? 15 : p)
+ #define moreDigitalPinToPCMSK(p) digitalPinToPCMSK( p == 13 ? 10 : p == 14 ? 15 : p)
+ #define moreDigitalPinToPCMSKbit(p) digitalPinToPCMSKbit(p == 13 ? 10 : p == 14 ? 51 : p)
#endif
// Install Pin change interrupt for a pin. Can be called multiple times.
void pciSetup(const int8_t pin) {
- if (digitalPinToPCMSK(pin) != nullptr) {
- SBI(*digitalPinToPCMSK(pin), digitalPinToPCMSKbit(pin)); // enable pin
- SBI(PCIFR, digitalPinToPCICRbit(pin)); // clear any outstanding interrupt
- SBI(PCICR, digitalPinToPCICRbit(pin)); // enable interrupt for the group
+ if (moreDigitalPinToPCMSK(pin) != nullptr) {
+ SBI(*moreDigitalPinToPCMSK(pin), moreDigitalPinToPCMSKbit(pin)); // enable pin
+ SBI(PCIFR, moreDigitalPinToPCICRbit(pin)); // clear any outstanding interrupt
+ SBI(PCICR, moreDigitalPinToPCICRbit(pin)); // enable interrupt for the group
}
}
@@ -108,7 +91,7 @@ void setup_endstop_interrupts() {
#if (digitalPinToInterrupt(X_MAX_PIN) != NOT_AN_INTERRUPT)
_ATTACH(X_MAX_PIN);
#else
- static_assert(digitalPinToPCICR(X_MAX_PIN), "X_MAX_PIN is not interrupt-capable");
+ static_assert(digitalPinHasPCICR(X_MAX_PIN), "X_MAX_PIN is not interrupt-capable");
pciSetup(X_MAX_PIN);
#endif
#endif
@@ -116,7 +99,7 @@ void setup_endstop_interrupts() {
#if (digitalPinToInterrupt(X_MIN_PIN) != NOT_AN_INTERRUPT)
_ATTACH(X_MIN_PIN);
#else
- static_assert(digitalPinToPCICR(X_MIN_PIN), "X_MIN_PIN is not interrupt-capable");
+ static_assert(digitalPinHasPCICR(X_MIN_PIN), "X_MIN_PIN is not interrupt-capable");
pciSetup(X_MIN_PIN);
#endif
#endif
@@ -124,7 +107,7 @@ void setup_endstop_interrupts() {
#if (digitalPinToInterrupt(Y_MAX_PIN) != NOT_AN_INTERRUPT)
_ATTACH(Y_MAX_PIN);
#else
- static_assert(digitalPinToPCICR(Y_MAX_PIN), "Y_MAX_PIN is not interrupt-capable");
+ static_assert(digitalPinHasPCICR(Y_MAX_PIN), "Y_MAX_PIN is not interrupt-capable");
pciSetup(Y_MAX_PIN);
#endif
#endif
@@ -132,7 +115,7 @@ void setup_endstop_interrupts() {
#if (digitalPinToInterrupt(Y_MIN_PIN) != NOT_AN_INTERRUPT)
_ATTACH(Y_MIN_PIN);
#else
- static_assert(digitalPinToPCICR(Y_MIN_PIN), "Y_MIN_PIN is not interrupt-capable");
+ static_assert(digitalPinHasPCICR(Y_MIN_PIN), "Y_MIN_PIN is not interrupt-capable");
pciSetup(Y_MIN_PIN);
#endif
#endif
@@ -140,7 +123,7 @@ void setup_endstop_interrupts() {
#if (digitalPinToInterrupt(Z_MAX_PIN) != NOT_AN_INTERRUPT)
_ATTACH(Z_MAX_PIN);
#else
- static_assert(digitalPinToPCICR(Z_MAX_PIN), "Z_MAX_PIN is not interrupt-capable");
+ static_assert(digitalPinHasPCICR(Z_MAX_PIN), "Z_MAX_PIN is not interrupt-capable");
pciSetup(Z_MAX_PIN);
#endif
#endif
@@ -148,7 +131,7 @@ void setup_endstop_interrupts() {
#if (digitalPinToInterrupt(Z_MIN_PIN) != NOT_AN_INTERRUPT)
_ATTACH(Z_MIN_PIN);
#else
- static_assert(digitalPinToPCICR(Z_MIN_PIN), "Z_MIN_PIN is not interrupt-capable");
+ static_assert(digitalPinHasPCICR(Z_MIN_PIN), "Z_MIN_PIN is not interrupt-capable");
pciSetup(Z_MIN_PIN);
#endif
#endif
@@ -156,7 +139,7 @@ void setup_endstop_interrupts() {
#if (digitalPinToInterrupt(X2_MAX_PIN) != NOT_AN_INTERRUPT)
_ATTACH(X2_MAX_PIN);
#else
- static_assert(digitalPinToPCICR(X2_MAX_PIN), "X2_MAX_PIN is not interrupt-capable");
+ static_assert(digitalPinHasPCICR(X2_MAX_PIN), "X2_MAX_PIN is not interrupt-capable");
pciSetup(X2_MAX_PIN);
#endif
#endif
@@ -164,7 +147,7 @@ void setup_endstop_interrupts() {
#if (digitalPinToInterrupt(X2_MIN_PIN) != NOT_AN_INTERRUPT)
_ATTACH(X2_MIN_PIN);
#else
- static_assert(digitalPinToPCICR(X2_MIN_PIN), "X2_MIN_PIN is not interrupt-capable");
+ static_assert(digitalPinHasPCICR(X2_MIN_PIN), "X2_MIN_PIN is not interrupt-capable");
pciSetup(X2_MIN_PIN);
#endif
#endif
@@ -172,7 +155,7 @@ void setup_endstop_interrupts() {
#if (digitalPinToInterrupt(Y2_MAX_PIN) != NOT_AN_INTERRUPT)
_ATTACH(Y2_MAX_PIN);
#else
- static_assert(digitalPinToPCICR(Y2_MAX_PIN), "Y2_MAX_PIN is not interrupt-capable");
+ static_assert(digitalPinHasPCICR(Y2_MAX_PIN), "Y2_MAX_PIN is not interrupt-capable");
pciSetup(Y2_MAX_PIN);
#endif
#endif
@@ -180,7 +163,7 @@ void setup_endstop_interrupts() {
#if (digitalPinToInterrupt(Y2_MIN_PIN) != NOT_AN_INTERRUPT)
_ATTACH(Y2_MIN_PIN);
#else
- static_assert(digitalPinToPCICR(Y2_MIN_PIN), "Y2_MIN_PIN is not interrupt-capable");
+ static_assert(digitalPinHasPCICR(Y2_MIN_PIN), "Y2_MIN_PIN is not interrupt-capable");
pciSetup(Y2_MIN_PIN);
#endif
#endif
@@ -188,7 +171,7 @@ void setup_endstop_interrupts() {
#if (digitalPinToInterrupt(Z2_MAX_PIN) != NOT_AN_INTERRUPT)
_ATTACH(Z2_MAX_PIN);
#else
- static_assert(digitalPinToPCICR(Z2_MAX_PIN), "Z2_MAX_PIN is not interrupt-capable");
+ static_assert(digitalPinHasPCICR(Z2_MAX_PIN), "Z2_MAX_PIN is not interrupt-capable");
pciSetup(Z2_MAX_PIN);
#endif
#endif
@@ -196,7 +179,7 @@ void setup_endstop_interrupts() {
#if (digitalPinToInterrupt(Z2_MIN_PIN) != NOT_AN_INTERRUPT)
_ATTACH(Z2_MIN_PIN);
#else
- static_assert(digitalPinToPCICR(Z2_MIN_PIN), "Z2_MIN_PIN is not interrupt-capable");
+ static_assert(digitalPinHasPCICR(Z2_MIN_PIN), "Z2_MIN_PIN is not interrupt-capable");
pciSetup(Z2_MIN_PIN);
#endif
#endif
@@ -204,7 +187,7 @@ void setup_endstop_interrupts() {
#if (digitalPinToInterrupt(Z3_MAX_PIN) != NOT_AN_INTERRUPT)
_ATTACH(Z3_MAX_PIN);
#else
- static_assert(digitalPinToPCICR(Z3_MAX_PIN), "Z3_MAX_PIN is not interrupt-capable");
+ static_assert(digitalPinHasPCICR(Z3_MAX_PIN), "Z3_MAX_PIN is not interrupt-capable");
pciSetup(Z3_MAX_PIN);
#endif
#endif
@@ -212,7 +195,7 @@ void setup_endstop_interrupts() {
#if (digitalPinToInterrupt(Z3_MIN_PIN) != NOT_AN_INTERRUPT)
_ATTACH(Z3_MIN_PIN);
#else
- static_assert(digitalPinToPCICR(Z3_MIN_PIN), "Z3_MIN_PIN is not interrupt-capable");
+ static_assert(digitalPinHasPCICR(Z3_MIN_PIN), "Z3_MIN_PIN is not interrupt-capable");
pciSetup(Z3_MIN_PIN);
#endif
#endif
@@ -220,7 +203,7 @@ void setup_endstop_interrupts() {
#if (digitalPinToInterrupt(Z_MIN_PROBE_PIN) != NOT_AN_INTERRUPT)
_ATTACH(Z_MIN_PROBE_PIN);
#else
- static_assert(digitalPinToPCICR(Z_MIN_PROBE_PIN), "Z_MIN_PROBE_PIN is not interrupt-capable");
+ static_assert(digitalPinHasPCICR(Z_MIN_PROBE_PIN), "Z_MIN_PROBE_PIN is not interrupt-capable");
pciSetup(Z_MIN_PROBE_PIN);
#endif
#endif
diff --git a/Marlin/src/HAL/HAL_AVR/fast_pwm.cpp b/Marlin/src/HAL/HAL_AVR/fast_pwm.cpp
index 282b70de7131..4884ede63fbe 100644
--- a/Marlin/src/HAL/HAL_AVR/fast_pwm.cpp
+++ b/Marlin/src/HAL/HAL_AVR/fast_pwm.cpp
@@ -23,7 +23,7 @@
#include "../../inc/MarlinConfigPre.h"
-#if ENABLED(FAST_PWM_FAN)
+#if ENABLED(FAST_PWM_FAN) || SPINDLE_LASER_PWM
#include "HAL.h"
@@ -278,5 +278,5 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255
}
}
-#endif // FAST_PWM_FAN
+#endif // FAST_PWM_FAN || SPINDLE_LASER_PWM
#endif // __AVR__
diff --git a/Marlin/src/HAL/HAL_DUE/HAL.cpp b/Marlin/src/HAL/HAL_DUE/HAL.cpp
index 735ccc631767..130779896d3c 100644
--- a/Marlin/src/HAL/HAL_DUE/HAL.cpp
+++ b/Marlin/src/HAL/HAL_DUE/HAL.cpp
@@ -87,7 +87,7 @@ extern "C" {
// Return free memory between end of heap (or end bss) and whatever is current
int freeMemory() {
int free_memory, heap_end = (int)_sbrk(0);
- return (int)&free_memory - (heap_end ? heap_end : (int)&_ebss);
+ return (int)&free_memory - (heap_end ?: (int)&_ebss);
}
// ------------------------
diff --git a/Marlin/src/HAL/HAL_DUE/HAL.h b/Marlin/src/HAL/HAL_DUE/HAL.h
index 2be95b683ad4..8fac3fcab64f 100644
--- a/Marlin/src/HAL/HAL_DUE/HAL.h
+++ b/Marlin/src/HAL/HAL_DUE/HAL.h
@@ -38,22 +38,39 @@
#include
-// Serial ports
-#if !WITHIN(SERIAL_PORT, -1, 3)
- #error "SERIAL_PORT must be from -1 to 3"
+// Define MYSERIAL0/1 before MarlinSerial includes!
+#if SERIAL_PORT == -1
+ #define MYSERIAL0 customizedSerial1
+#elif SERIAL_PORT == 0
+ #define MYSERIAL0 Serial
+#elif SERIAL_PORT == 1
+ #define MYSERIAL0 Serial1
+#elif SERIAL_PORT == 2
+ #define MYSERIAL0 Serial2
+#elif SERIAL_PORT == 3
+ #define MYSERIAL0 Serial3
+#else
+ #error "The required SERIAL_PORT must be from -1 to 3. Please update your configuration."
#endif
-// MYSERIAL0 required before MarlinSerial includes!
-#define MYSERIAL0 customizedSerial1
-
#ifdef SERIAL_PORT_2
- #if !WITHIN(SERIAL_PORT_2, -1, 3)
- #error "SERIAL_PORT_2 must be from -1 to 3"
- #elif SERIAL_PORT_2 == SERIAL_PORT
- #error "SERIAL_PORT_2 must be different than SERIAL_PORT"
+ #if SERIAL_PORT_2 == SERIAL_PORT
+ #error "SERIAL_PORT_2 must be different from SERIAL_PORT. Please update your configuration."
+ #endif
+ #if SERIAL_PORT_2 == -1
+ #define MYSERIAL1 customizedSerial2
+ #elif SERIAL_PORT_2 == 0
+ #define MYSERIAL1 Serial
+ #elif SERIAL_PORT_2 == 1
+ #define MYSERIAL1 Serial1
+ #elif SERIAL_PORT_2 == 2
+ #define MYSERIAL1 Serial2
+ #elif SERIAL_PORT_2 == 3
+ #define MYSERIAL1 Serial3
+ #else
+ #error "SERIAL_PORT_2 must be from -1 to 3. Please update your configuration."
#endif
#define NUM_SERIAL 2
- #define MYSERIAL1 customizedSerial2
#else
#define NUM_SERIAL 1
#endif
diff --git a/Marlin/src/HAL/HAL_DUE/timers.cpp b/Marlin/src/HAL/HAL_DUE/timers.cpp
index 57dd9f924f5e..6925f93498bb 100644
--- a/Marlin/src/HAL/HAL_DUE/timers.cpp
+++ b/Marlin/src/HAL/HAL_DUE/timers.cpp
@@ -50,7 +50,7 @@ const tTimerConfig TimerConfig [NUM_HARDWARE_TIMERS] = {
{ TC0, 0, TC0_IRQn, 3}, // 0 - [servo timer5]
{ TC0, 1, TC1_IRQn, 0}, // 1
{ TC0, 2, TC2_IRQn, 2}, // 2 - stepper
- { TC1, 0, TC3_IRQn, 0}, // 3
+ { TC1, 0, TC3_IRQn, 0}, // 3 - stepper for BOARD_ARCHIM1
{ TC1, 1, TC4_IRQn, 15}, // 4 - temperature
{ TC1, 2, TC5_IRQn, 3}, // 5 - [servo timer3]
{ TC2, 0, TC6_IRQn, 14}, // 6 - tone
diff --git a/Marlin/src/HAL/HAL_DUE/timers.h b/Marlin/src/HAL/HAL_DUE/timers.h
index ba1eccb2f911..b7b2cf7341e0 100644
--- a/Marlin/src/HAL/HAL_DUE/timers.h
+++ b/Marlin/src/HAL/HAL_DUE/timers.h
@@ -39,7 +39,9 @@ typedef uint32_t hal_timer_t;
#define HAL_TIMER_RATE ((F_CPU) / 2) // frequency of timers peripherals
+#ifndef STEP_TIMER_NUM
#define STEP_TIMER_NUM 2 // index of timer to use for stepper
+#endif
#define TEMP_TIMER_NUM 4 // index of timer to use for temperature
#define PULSE_TIMER_NUM STEP_TIMER_NUM
#define TONE_TIMER_NUM 6 // index of timer to use for beeper tones
@@ -61,7 +63,9 @@ typedef uint32_t hal_timer_t;
#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM)
#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM)
-#define HAL_STEP_TIMER_ISR() void TC2_Handler()
+#ifndef HAL_STEP_TIMER_ISR
+ #define HAL_STEP_TIMER_ISR() void TC2_Handler()
+#endif
#define HAL_TEMP_TIMER_ISR() void TC4_Handler()
#define HAL_TONE_TIMER_ISR() void TC6_Handler()
diff --git a/Marlin/src/HAL/HAL_DUE/usb/conf_usb.h b/Marlin/src/HAL/HAL_DUE/usb/conf_usb.h
index 6934494e57de..8d5924d375e8 100644
--- a/Marlin/src/HAL/HAL_DUE/usb/conf_usb.h
+++ b/Marlin/src/HAL/HAL_DUE/usb/conf_usb.h
@@ -48,9 +48,7 @@
#define _CONF_USB_H_
#undef UNUSED /* To avoid a macro clash as macros.h already defines it */
-#include "../../../core/macros.h" /* For ENABLED()/DISABLED() */
-#include "../../../core/boards.h" /* For MB() */
-#include "../../../../Configuration.h" /* For CUSTOM_MACHINE_NAME definition - We just need the name, no C++ allowed! */
+#include "../../../inc/MarlinConfigPre.h"
#include "compiler.h"
/**
@@ -59,8 +57,6 @@
*/
//! Device definition (mandatory)
-#define USB_DEVICE_VENDOR_ID 0x03EB /* ATMEL VID */
-#define USB_DEVICE_PRODUCT_ID 0x2424 /* MSC / CDC */
#define USB_DEVICE_MAJOR_VERSION 1
#define USB_DEVICE_MINOR_VERSION 0
#define USB_DEVICE_POWER 100 // Consumption on Vbus line (mA)
@@ -70,15 +66,6 @@
// (USB_CONFIG_ATTR_REMOTE_WAKEUP|USB_CONFIG_ATTR_SELF_POWERED)
// (USB_CONFIG_ATTR_REMOTE_WAKEUP|USB_CONFIG_ATTR_BUS_POWERED)
-//! USB Device string definitions (Optional)
-#define USB_DEVICE_MANUFACTURE_NAME "marlinfw.org"
-#ifdef CUSTOM_MACHINE_NAME
- #define USB_DEVICE_PRODUCT_NAME CUSTOM_MACHINE_NAME
-#else
- #define USB_DEVICE_PRODUCT_NAME "3D Printer"
-#endif
-#define USB_DEVICE_SERIAL_NAME "123985739853"
-
/**
* Device speeds support
* Low speed not supported by CDC and MSC
diff --git a/Marlin/src/HAL/HAL_ESP32/HAL.cpp b/Marlin/src/HAL/HAL_ESP32/HAL.cpp
index 9bf41c2e846d..81567eeede8f 100644
--- a/Marlin/src/HAL/HAL_ESP32/HAL.cpp
+++ b/Marlin/src/HAL/HAL_ESP32/HAL.cpp
@@ -187,19 +187,21 @@ void HAL_adc_start_conversion(uint8_t adc_pin) {
const adc1_channel_t chan = get_channel(adc_pin);
uint32_t mv;
esp_adc_cal_get_voltage((adc_channel_t)chan, &characteristics[attenuations[chan]], &mv);
+ HAL_adc_result = mv * 1023.0 / 3300.0;
// Change the attenuation level based on the new reading
adc_atten_t atten;
if (mv < thresholds[ADC_ATTEN_DB_0] - 100)
- adc1_set_attenuation(chan, ADC_ATTEN_DB_0);
+ atten = ADC_ATTEN_DB_0;
else if (mv > thresholds[ADC_ATTEN_DB_0] - 50 && mv < thresholds[ADC_ATTEN_DB_2_5] - 100)
- adc1_set_attenuation(chan, ADC_ATTEN_DB_2_5);
+ atten = ADC_ATTEN_DB_2_5;
else if (mv > thresholds[ADC_ATTEN_DB_2_5] - 50 && mv < thresholds[ADC_ATTEN_DB_6] - 100)
- adc1_set_attenuation(chan, ADC_ATTEN_DB_6);
+ atten = ADC_ATTEN_DB_6;
else if (mv > thresholds[ADC_ATTEN_DB_6] - 50)
- adc1_set_attenuation(chan, ADC_ATTEN_DB_11);
+ atten = ADC_ATTEN_DB_11;
+ else return;
- HAL_adc_result = mv * 1023.0 / 3300.0;
+ adc1_set_attenuation(chan, atten);
}
void analogWrite(pin_t pin, int value) {
diff --git a/Marlin/src/HAL/HAL_LPC1768/fast_pwm.cpp b/Marlin/src/HAL/HAL_LPC1768/fast_pwm.cpp
index 7af3a07eeae0..1cc2032778d6 100644
--- a/Marlin/src/HAL/HAL_LPC1768/fast_pwm.cpp
+++ b/Marlin/src/HAL/HAL_LPC1768/fast_pwm.cpp
@@ -24,7 +24,7 @@
#include "../../inc/MarlinConfigPre.h"
-#if ENABLED(FAST_PWM_FAN)
+#if ENABLED(FAST_PWM_FAN) || SPINDLE_LASER_PWM
#include
@@ -36,5 +36,5 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255
pwm_write_ratio(pin, invert ? 1.0f - (float)v / v_size : (float)v / v_size);
}
-#endif // FAST_PWM_FAN
+#endif // FAST_PWM_FAN || SPINDLE_LASER_PWM
#endif // TARGET_LPC1768
diff --git a/Marlin/src/HAL/HAL_LPC1768/main.cpp b/Marlin/src/HAL/HAL_LPC1768/main.cpp
index ab5b184b4752..b20841bdeb9c 100644
--- a/Marlin/src/HAL/HAL_LPC1768/main.cpp
+++ b/Marlin/src/HAL/HAL_LPC1768/main.cpp
@@ -155,7 +155,7 @@ void HAL_idletask() {
// a PC via USB.
// Other HALs use IS_SD_PRINTING() and IS_SD_FILE_OPEN() to check for access but
// this will not reliably detect delete operations. To be safe we will lock
- // the disk if Marlin has it mounted. Unfortuately there is currently no way
+ // the disk if Marlin has it mounted. Unfortunately there is currently no way
// to unmount the disk from the LCD menu.
// if (IS_SD_PRINTING() || IS_SD_FILE_OPEN())
if (card.isMounted())
diff --git a/Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py b/Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py
index 44e0f09ad01a..b3ab59026eb4 100644
--- a/Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py
+++ b/Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py
@@ -31,9 +31,11 @@ def print_error(e):
#
import subprocess
# typical result (string): 'Drives: C:\ D:\ E:\ F:\ G:\ H:\ I:\ J:\ K:\ L:\ M:\ Y:\ Z:\'
- driveStr = subprocess.check_output("fsutil fsinfo drives")
+ driveStr = str(subprocess.check_output("fsutil fsinfo drives"))
# typical result (string): 'C:\ D:\ E:\ F:\ G:\ H:\ I:\ J:\ K:\ L:\ M:\ Y:\ Z:\'
- driveStr = driveStr.strip().lstrip('Drives: ')
+ # driveStr = driveStr.strip().lstrip('Drives: ') <- Doesn't work in other Languages as English. In German is "Drives:" = "Laufwerke:"
+ FirstFound = driveStr.find(':',0,-1) # Find the first ":" and
+ driveStr = driveStr[FirstFound + 1 : -1] # truncate to the rest
# typical result (array of stings): ['C:\\', 'D:\\', 'E:\\', 'F:\\',
# 'G:\\', 'H:\\', 'I:\\', 'J:\\', 'K:\\', 'L:\\', 'M:\\', 'Y:\\', 'Z:\\']
drives = driveStr.split()
@@ -44,7 +46,7 @@ def print_error(e):
for drive in drives:
final_drive_name = drive.strip().rstrip('\\') # typical result (string): 'C:'
try:
- volume_info = subprocess.check_output('cmd /C dir ' + final_drive_name, stderr=subprocess.STDOUT)
+ volume_info = str(subprocess.check_output('cmd /C dir ' + final_drive_name, stderr=subprocess.STDOUT))
except Exception as e:
continue
else:
diff --git a/Marlin/src/HAL/HAL_SAMD51/HAL.cpp b/Marlin/src/HAL/HAL_SAMD51/HAL.cpp
index d80dd17aab1c..1d7521270f67 100644
--- a/Marlin/src/HAL/HAL_SAMD51/HAL.cpp
+++ b/Marlin/src/HAL/HAL_SAMD51/HAL.cpp
@@ -414,7 +414,7 @@ extern "C" {
// Return free memory between end of heap (or end bss) and whatever is current
int freeMemory() {
int free_memory, heap_end = (int)_sbrk(0);
- return (int)&free_memory - (heap_end ? heap_end : (int)&__bss_end__);
+ return (int)&free_memory - (heap_end ?: (int)&__bss_end__);
}
// ------------------------
diff --git a/Marlin/src/HAL/HAL_STM32F1/HAL.cpp b/Marlin/src/HAL/HAL_STM32F1/HAL.cpp
index 9d24b74b11c7..e2a072deee03 100644
--- a/Marlin/src/HAL/HAL_STM32F1/HAL.cpp
+++ b/Marlin/src/HAL/HAL_STM32F1/HAL.cpp
@@ -27,8 +27,8 @@
#ifdef __STM32F1__
-#include "HAL.h"
#include "../../inc/MarlinConfig.h"
+#include "HAL.h"
#include
@@ -233,7 +233,7 @@ void HAL_idletask() {
// a PC via USB.
// Other HALs use IS_SD_PRINTING() and IS_SD_FILE_OPEN() to check for access but
// this will not reliably detect delete operations. To be safe we will lock
- // the disk if Marlin has it mounted. Unfortuately there is currently no way
+ // the disk if Marlin has it mounted. Unfortunately there is currently no way
// to unmount the disk from the LCD menu.
// if (IS_SD_PRINTING() || IS_SD_FILE_OPEN())
/* copy from lpc1768 framework, should be fixed later for process SHARED_SD_CARD*/
diff --git a/Marlin/src/HAL/HAL_STM32F1/timers.cpp b/Marlin/src/HAL/HAL_STM32F1/timers.cpp
index a21dc12c12cd..a1f5f1e45367 100644
--- a/Marlin/src/HAL/HAL_STM32F1/timers.cpp
+++ b/Marlin/src/HAL/HAL_STM32F1/timers.cpp
@@ -26,8 +26,8 @@
#ifdef __STM32F1__
+#include "../../inc/MarlinConfig.h"
#include "HAL.h"
-
#include "timers.h"
// ------------------------
diff --git a/Marlin/src/HAL/HAL_STM32F1/timers.h b/Marlin/src/HAL/HAL_STM32F1/timers.h
index 69793f430239..aba619fd10b8 100644
--- a/Marlin/src/HAL/HAL_STM32F1/timers.h
+++ b/Marlin/src/HAL/HAL_STM32F1/timers.h
@@ -27,6 +27,7 @@
#include
#include
+#include "../../core/boards.h"
// ------------------------
// Defines
@@ -54,7 +55,13 @@ typedef uint16_t hal_timer_t;
#define TEMP_TIMER_NUM 2 // index of timer to use for temperature
//#define TEMP_TIMER_NUM 4 // 2->4, Timer 2 for Stepper Current PWM
#define PULSE_TIMER_NUM STEP_TIMER_NUM
-#define SERVO0_TIMER_NUM 1 // SERVO0 or BLTOUCH
+
+#if MB(BIGTREE_SKR_MINI_E3, BIGTREE_SKR_E3_DIP, BTT_SKR_MINI_E3_V1_2, MKS_ROBIN_LITE)
+ // SKR Mini E3 boards use PA8 as FAN_PIN, so TIMER 1 is used for Fan PWM.
+ #define SERVO0_TIMER_NUM 8
+#else
+ #define SERVO0_TIMER_NUM 1 // SERVO0 or BLTOUCH
+#endif
#define STEP_TIMER_IRQ_PRIO 1
#define TEMP_TIMER_IRQ_PRIO 2
diff --git a/Marlin/src/Marlin.cpp b/Marlin/src/Marlin.cpp
index cd8ecb4325c6..ed5c4cbde44b 100644
--- a/Marlin/src/Marlin.cpp
+++ b/Marlin/src/Marlin.cpp
@@ -145,6 +145,10 @@
#include "feature/power_loss_recovery.h"
#endif
+#if ENABLED(CANCEL_OBJECTS)
+ #include "feature/cancel_object.h"
+#endif
+
#if HAS_FILAMENT_SENSOR
#include "feature/runout.h"
#endif
@@ -173,10 +177,6 @@
#include "feature/prusa_MMU2/mmu2.h"
#endif
-#if ENABLED(EXTENSIBLE_UI)
- #include "lcd/extensible_ui/ui_api.h"
-#endif
-
#if HAS_DRIVER(L6470)
#include "libs/L6470/L6470_Marlin.h"
#endif
@@ -221,9 +221,9 @@ void setup_killpin() {
void setup_powerhold() {
#if HAS_SUICIDE
- OUT_WRITE(SUICIDE_PIN, HIGH);
+ OUT_WRITE(SUICIDE_PIN, !SUICIDE_PIN_INVERTING);
#endif
- #if HAS_POWER_SWITCH
+ #if ENABLED(PSU_CONTROL)
#if ENABLED(PS_DEFAULT_OFF)
powersupply_on = true; PSU_OFF();
#else
@@ -279,6 +279,10 @@ void quickstop_stepper() {
sync_plan_position();
}
+void enable_e_steppers() {
+ enable_E0(); enable_E1(); enable_E2(); enable_E3(); enable_E4(); enable_E5();
+}
+
void enable_all_steppers() {
#if ENABLED(AUTO_POWER_CONTROL)
powerManager.power_on();
@@ -286,30 +290,11 @@ void enable_all_steppers() {
enable_X();
enable_Y();
enable_Z();
- enable_E0();
- enable_E1();
- enable_E2();
- enable_E3();
- enable_E4();
- enable_E5();
-}
-
-void enable_e_steppers() {
- enable_E0();
- enable_E1();
- enable_E2();
- enable_E3();
- enable_E4();
- enable_E5();
+ enable_e_steppers();
}
void disable_e_steppers() {
- disable_E0();
- disable_E1();
- disable_E2();
- disable_E3();
- disable_E4();
- disable_E5();
+ disable_E0(); disable_E1(); disable_E2(); disable_E3(); disable_E4(); disable_E5();
}
void disable_e_stepper(const uint8_t e) {
@@ -330,71 +315,6 @@ void disable_all_steppers() {
disable_e_steppers();
}
-#if HAS_FILAMENT_SENSOR
-
- void event_filament_runout() {
-
- #if ENABLED(ADVANCED_PAUSE_FEATURE)
- if (did_pause_print) return; // Action already in progress. Purge triggered repeated runout.
- #endif
-
- #if ENABLED(EXTENSIBLE_UI)
- ExtUI::onFilamentRunout(ExtUI::getActiveTool());
- #endif
-
- #if EITHER(HOST_PROMPT_SUPPORT, HOST_ACTION_COMMANDS)
- const char tool = '0'
- #if NUM_RUNOUT_SENSORS > 1
- + active_extruder
- #endif
- ;
- #endif
-
- //action:out_of_filament
- #if ENABLED(HOST_PROMPT_SUPPORT)
- host_prompt_reason = PROMPT_FILAMENT_RUNOUT;
- host_action_prompt_end();
- host_action_prompt_begin(PSTR("FilamentRunout T"), false);
- SERIAL_CHAR(tool);
- SERIAL_EOL();
- host_action_prompt_show();
- #endif
-
- const bool run_runout_script = !runout.host_handling;
-
- #if ENABLED(HOST_ACTION_COMMANDS)
- if (run_runout_script
- && ( strstr(FILAMENT_RUNOUT_SCRIPT, "M600")
- || strstr(FILAMENT_RUNOUT_SCRIPT, "M125")
- #if ENABLED(ADVANCED_PAUSE_FEATURE)
- || strstr(FILAMENT_RUNOUT_SCRIPT, "M25")
- #endif
- )
- ) {
- host_action_paused(false);
- }
- else {
- // Legacy Repetier command for use until newer version supports standard dialog
- // To be removed later when pause command also triggers dialog
- #ifdef ACTION_ON_FILAMENT_RUNOUT
- host_action(PSTR(ACTION_ON_FILAMENT_RUNOUT " T"), false);
- SERIAL_CHAR(tool);
- SERIAL_EOL();
- #endif
-
- host_action_pause(false);
- }
- SERIAL_ECHOPGM(" " ACTION_REASON_ON_FILAMENT_RUNOUT " ");
- SERIAL_CHAR(tool);
- SERIAL_EOL();
- #endif // HOST_ACTION_COMMANDS
-
- if (run_runout_script)
- queue.inject_P(PSTR(FILAMENT_RUNOUT_SCRIPT));
- }
-
-#endif // HAS_FILAMENT_SENSOR
-
#if ENABLED(G29_RETRY_AND_RECOVER)
void event_probe_failure() {
@@ -408,7 +328,7 @@ void disable_all_steppers() {
#ifdef ACTION_ON_CANCEL
host_action_cancel();
#endif
- kill(PSTR(MSG_ERR_PROBING_FAILED));
+ kill(GET_TEXT(MSG_LCD_PROBING_FAILED));
#endif
}
@@ -426,6 +346,64 @@ void disable_all_steppers() {
#endif
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
+ #include "feature/pause.h"
+#else
+ constexpr bool did_pause_print = false;
+#endif
+
+/**
+ * Printing is active when the print job timer is running
+ */
+bool printingIsActive() {
+ return !did_pause_print && (print_job_timer.isRunning() || IS_SD_PRINTING());
+}
+
+/**
+ * Printing is paused according to SD or host indicators
+ */
+bool printingIsPaused() {
+ return did_pause_print || print_job_timer.isPaused() || IS_SD_PAUSED();
+}
+
+void startOrResumeJob() {
+ if (!printingIsPaused()) {
+ #if ENABLED(CANCEL_OBJECTS)
+ cancelable.reset();
+ #endif
+ #if ENABLED(LCD_SHOW_E_TOTAL)
+ e_move_accumulator = 0;
+ #endif
+ }
+ print_job_timer.start();
+}
+
+#if ENABLED(SDSUPPORT)
+
+ void abortSDPrinting() {
+ card.stopSDPrint(
+ #if SD_RESORT
+ true
+ #endif
+ );
+ queue.clear();
+ quickstop_stepper();
+ print_job_timer.stop();
+ #if DISABLED(SD_ABORT_NO_COOLDOWN)
+ thermalManager.disable_all_heaters();
+ #endif
+ thermalManager.zero_fan_speeds();
+ wait_for_heatup = false;
+ #if ENABLED(POWER_LOSS_RECOVERY)
+ card.removeJobRecoveryFile();
+ #endif
+ #ifdef EVENT_GCODE_SD_STOP
+ queue.inject_P(PSTR(EVENT_GCODE_SD_STOP));
+ #endif
+ }
+
+#endif
+
/**
* Manage several activities:
* - Check for Filament Runout
@@ -756,15 +734,16 @@ void idle(
* Kill all activity and lock the machine.
* After this the machine will need to be reset.
*/
-void kill(PGM_P const lcd_msg/*=nullptr*/, const bool steppers_off/*=false*/) {
+void kill(PGM_P const lcd_error/*=nullptr*/, PGM_P const lcd_component/*=nullptr*/, const bool steppers_off/*=false*/) {
thermalManager.disable_all_heaters();
SERIAL_ERROR_MSG(MSG_ERR_KILLED);
#if HAS_DISPLAY
- ui.kill_screen(lcd_msg ? lcd_msg : PSTR(MSG_KILLED));
+ ui.kill_screen(lcd_error ?: GET_TEXT(MSG_KILLED), lcd_component);
#else
- UNUSED(lcd_msg);
+ UNUSED(lcd_error);
+ UNUSED(lcd_component);
#endif
#ifdef ACTION_ON_KILL
@@ -790,7 +769,7 @@ void minkill(const bool steppers_off/*=false*/) {
// Power off all steppers (for M112) or just the E steppers
steppers_off ? disable_all_steppers() : disable_e_steppers();
- #if HAS_POWER_SWITCH
+ #if ENABLED(PSU_CONTROL)
PSU_OFF();
#endif
@@ -970,8 +949,6 @@ void setup() {
#endif
ui.init();
- ui.reset_status();
-
#if HAS_SPI_LCD && ENABLED(SHOW_BOOTSCREEN)
ui.show_bootscreen();
#endif
@@ -1000,6 +977,8 @@ void setup() {
print_job_timer.init(); // Initial setup of print job timer
+ ui.reset_status(); // Print startup message after print statistics are loaded
+
endstops.init(); // Init endstops and pullups
stepper.init(); // Init stepper. This enables interrupts!
@@ -1171,34 +1150,12 @@ void loop() {
idle(); // Do an idle first so boot is slightly faster
#if ENABLED(SDSUPPORT)
-
card.checkautostart();
-
- if (card.flag.abort_sd_printing) {
- card.stopSDPrint(
- #if SD_RESORT
- true
- #endif
- );
- queue.clear();
- quickstop_stepper();
- print_job_timer.stop();
- #if DISABLED(SD_ABORT_NO_COOLDOWN)
- thermalManager.disable_all_heaters();
- #endif
- thermalManager.zero_fan_speeds();
- wait_for_heatup = false;
- #if ENABLED(POWER_LOSS_RECOVERY)
- card.removeJobRecoveryFile();
- #endif
- #ifdef EVENT_GCODE_SD_STOP
- queue.inject_P(PSTR(EVENT_GCODE_SD_STOP));
- #endif
- }
-
- #endif // SDSUPPORT
+ if (card.flag.abort_sd_printing) abortSDPrinting();
+ #endif
queue.advance();
+
endstops.event_handler();
}
}
diff --git a/Marlin/src/Marlin.h b/Marlin/src/Marlin.h
index 1a9acc007582..f720c870a150 100644
--- a/Marlin/src/Marlin.h
+++ b/Marlin/src/Marlin.h
@@ -322,7 +322,7 @@ void disable_e_stepper(const uint8_t e);
void disable_e_steppers();
void disable_all_steppers();
-void kill(PGM_P const lcd_msg=nullptr, const bool steppers_off=false);
+void kill(PGM_P const lcd_error=nullptr, PGM_P const lcd_component=nullptr, const bool steppers_off=false);
void minkill(const bool steppers_off=false);
void quickstop_stepper();
@@ -331,6 +331,10 @@ extern bool Running;
inline bool IsRunning() { return Running; }
inline bool IsStopped() { return !Running; }
+bool printingIsActive();
+bool printingIsPaused();
+void startOrResumeJob();
+
extern bool wait_for_heatup;
#if HAS_RESUME_CONTINUE
@@ -348,7 +352,7 @@ extern millis_t max_inactive_time, stepper_inactive_time;
extern uint8_t controllerfan_speed;
#endif
-#if HAS_POWER_SWITCH
+#if ENABLED(PSU_CONTROL)
extern bool powersupply_on;
#define PSU_PIN_ON() do{ OUT_WRITE(PS_ON_PIN, PSU_ACTIVE_HIGH); powersupply_on = true; }while(0)
#define PSU_PIN_OFF() do{ OUT_WRITE(PS_ON_PIN, !PSU_ACTIVE_HIGH); powersupply_on = false; }while(0)
@@ -365,11 +369,7 @@ bool pin_is_protected(const pin_t pin);
void protected_pin_err();
#if HAS_SUICIDE
- inline void suicide() { OUT_WRITE(SUICIDE_PIN, LOW); }
-#endif
-
-#if HAS_FILAMENT_SENSOR
- void event_filament_runout();
+ inline void suicide() { OUT_WRITE(SUICIDE_PIN, SUICIDE_PIN_INVERTING); }
#endif
#if ENABLED(G29_RETRY_AND_RECOVER)
diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h
index 4924afa44543..fb000085cc61 100644
--- a/Marlin/src/core/boards.h
+++ b/Marlin/src/core/boards.h
@@ -21,6 +21,8 @@
*/
#pragma once
+#include "macros.h"
+
#define BOARD_UNKNOWN -1
//
@@ -97,6 +99,7 @@
#define BOARD_OVERLORD 1143 // Overlord/Overlord Pro
#define BOARD_HJC2560C_REV1 1144 // ADIMLab Gantry v1
#define BOARD_HJC2560C_REV2 1145 // ADIMLab Gantry v2
+#define BOARD_TANGO 1146 // BIQU Tango V1
//
// RAMBo and derivatives
@@ -268,11 +271,12 @@
#define BOARD_BIGTREE_SKR_MINI_V1_1 4010 // BigTreeTech SKR Mini v1.1 (STM32F103RC)
#define BOARD_BIGTREE_SKR_MINI_E3 4011 // BigTreeTech SKR Mini E3 (STM32F103RC)
#define BOARD_BIGTREE_SKR_E3_DIP 4012 // BigTreeTech SKR E3 DIP V1.0 (STM32F103RC)
-#define BOARD_JGAURORA_A5S_A1 4013 // JGAurora A5S A1 (STM32F103ZET6)
-#define BOARD_FYSETC_AIO_II 4014 // FYSETC AIO_II
-#define BOARD_FYSETC_CHEETAH 4015 // FYSETC Cheetah
-#define BOARD_FYSETC_CHEETAH_V12 4016 // FYSETC Cheetah V1.2
-#define BOARD_LONGER3D_LK 4017 // Alfawise U20/U20+/U30 (Longer3D LK1/2) / STM32F103VET6
+#define BOARD_BTT_SKR_MINI_E3_V1_2 4013 // BigTreeTech SKR Mini E3 V1.2 (STM32F103RC)
+#define BOARD_JGAURORA_A5S_A1 4014 // JGAurora A5S A1 (STM32F103ZET6)
+#define BOARD_FYSETC_AIO_II 4015 // FYSETC AIO_II
+#define BOARD_FYSETC_CHEETAH 4016 // FYSETC Cheetah
+#define BOARD_FYSETC_CHEETAH_V12 4017 // FYSETC Cheetah V1.2
+#define BOARD_LONGER3D_LK 4018 // Alfawise U20/U20+/U30 (Longer3D LK1/2) / STM32F103VET6
//
// ARM Cortex-M4F
@@ -286,7 +290,7 @@
//
#define BOARD_BEAST 4200 // STM32F4xxVxT6 Libmaple-based STM32F4 controller
-#define BOARD_STM32F4 4201 // STM32 STM32GENERIC-based STM32F4 controller
+#define BOARD_GENERIC_STM32F4 4201 // STM32 STM32GENERIC-based STM32F4 controller
#define BOARD_ARMED 4202 // Arm'ed STM32F4-based controller
#define BOARD_RUMBA32 4203 // RUMBA32 STM32F4-based controller
#define BOARD_BLACK_STM32F407VE 4204 // BLACK_STM32F407VE
@@ -307,7 +311,7 @@
//
// Espressif ESP32 WiFi
//
-#define BOARD_ESP32 6000
+#define BOARD_ESPRESSIF_ESP32 6000
//
// Simulations
@@ -315,4 +319,7 @@
#define BOARD_LINUX_RAMPS 9999
-#define MB(board) (defined(BOARD_##board) && MOTHERBOARD==BOARD_##board)
+#define _MB_1(B) (defined(BOARD_##B) && MOTHERBOARD==BOARD_##B)
+#define MB(V...) DO(MB,||,V)
+
+#define IS_MELZI MB(MELZI, MELZI_CREALITY, MELZI_MAKR3D, MELZI_MALYAN, MELZI_TRONXY)
diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h
index ee4e23fa76c1..45a6b590d688 100644
--- a/Marlin/src/core/language.h
+++ b/Marlin/src/core/language.h
@@ -49,7 +49,7 @@
// da Danish
// de German
// el Greek
-// el-gr Greek (Greece)
+// el_gr Greek (Greece)
// en English
// es Spanish
// eu Basque-Euskera
@@ -58,12 +58,12 @@
// gl Galician
// hr Croatian
// it Italian
-// jp-kana Japanese
+// jp_kana Japanese
// ko_KR Korean (South Korea)
// nl Dutch
// pl Polish
// pt Portuguese
-// pt-br Portuguese (Brazilian)
+// pt_br Portuguese (Brazilian)
// ru Russian
// sk Slovak
// tr Turkish
@@ -97,7 +97,20 @@
// #define STRING_SPLASH_LINE3 WEBSITE_URL
//#endif
-#if HAS_GRAPHICAL_LCD
+#if HAS_CHARACTER_LCD
+
+ // Custom characters defined in the first 8 characters of the LCD
+ #define LCD_STR_BEDTEMP "\x00" // Print only as a char. This will have 'unexpected' results when used in a string!
+ #define LCD_STR_DEGREE "\x01"
+ #define LCD_STR_THERMOMETER "\x02" // Still used with string concatenation
+ #define LCD_STR_UPLEVEL "\x03"
+ #define LCD_STR_REFRESH "\x04"
+ #define LCD_STR_FOLDER "\x05"
+ #define LCD_STR_FEEDRATE "\x06"
+ #define LCD_STR_CLOCK "\x07"
+ #define LCD_STR_ARROW_RIGHT ">" /* from the default character set */
+
+#else
//
// Custom characters from Marlin_symbols.fon which was merged into ISO10646-0-3.bdf
// \x00 intentionally skipped to avoid problems in strings
@@ -120,19 +133,6 @@
#define LCD_STR_FILAM_DIA "\xF8"
#define LCD_STR_FILAM_MUL "\xA4"
-#elif HAS_CHARACTER_LCD
-
- // Custom characters defined in the first 8 characters of the LCD
- #define LCD_STR_BEDTEMP "\x00" // Print only as a char. This will have 'unexpected' results when used in a string!
- #define LCD_STR_DEGREE "\x01"
- #define LCD_STR_THERMOMETER "\x02" // Still used with string concatenation
- #define LCD_STR_UPLEVEL "\x03"
- #define LCD_STR_REFRESH "\x04"
- #define LCD_STR_FOLDER "\x05"
- #define LCD_STR_FEEDRATE "\x06"
- #define LCD_STR_CLOCK "\x07"
- #define LCD_STR_ARROW_RIGHT ">" /* from the default character set */
-
#endif
// Common LCD messages
@@ -168,7 +168,6 @@
#define MSG_INVALID_E_STEPPER "Invalid E stepper"
#define MSG_E_STEPPER_NOT_SPECIFIED "E stepper not specified"
#define MSG_INVALID_SOLENOID "Invalid solenoid"
-#define MSG_ERR_NO_THERMISTORS "No thermistors - no temperature"
#define MSG_M115_REPORT "FIRMWARE_NAME:Marlin " DETAILED_BUILD_VERSION " SOURCE_CODE_URL:" SOURCE_CODE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID
#define MSG_COUNT_X " Count X:"
#define MSG_COUNT_A " Count A:"
@@ -243,10 +242,9 @@
#define MSG_ERR_COLD_EXTRUDE_STOP " cold extrusion prevented"
#define MSG_ERR_LONG_EXTRUDE_STOP " too long extrusion prevented"
#define MSG_ERR_HOTEND_TOO_COLD "Hotend too cold"
+#define MSG_ERR_Z_HOMING_SER "Home XY first"
+#define MSG_ERR_EEPROM_WRITE "Error writing to EEPROM!"
-#define MSG_FILAMENT_CHANGE_HEAT "Press button (or M108) to heat nozzle"
-#define MSG_FILAMENT_CHANGE_INSERT "Insert filament and press button (or M108)"
-#define MSG_FILAMENT_CHANGE_WAIT "Press button (or M108) to resume"
#define MSG_FILAMENT_CHANGE_HEAT_LCD "Press button to heat nozzle"
#define MSG_FILAMENT_CHANGE_INSERT_LCD "Insert filament and press button"
#define MSG_FILAMENT_CHANGE_WAIT_LCD "Press button to resume"
@@ -254,17 +252,15 @@
#define MSG_FILAMENT_CHANGE_INSERT_M108 "Insert filament and send M108"
#define MSG_FILAMENT_CHANGE_WAIT_M108 "Send M108 to resume"
-#define MSG_ERR_EEPROM_WRITE "Error writing to EEPROM!"
-
#define MSG_STOP_BLTOUCH "STOP called because of BLTouch error - restart with M999"
#define MSG_STOP_UNHOMED "STOP called because of unhomed error - restart with M999"
#define MSG_KILL_INACTIVE_TIME "KILL caused by too much inactive time - current command: "
#define MSG_KILL_BUTTON "KILL caused by KILL button/pin"
// temperature.cpp strings
-#define MSG_PID_AUTOTUNE "PID Autotune"
-#define MSG_PID_AUTOTUNE_START MSG_PID_AUTOTUNE " start"
-#define MSG_PID_AUTOTUNE_FAILED MSG_PID_AUTOTUNE " failed!"
+#define MSG_PID_AUTOTUNE_PREFIX "PID Autotune"
+#define MSG_PID_AUTOTUNE_START MSG_PID_AUTOTUNE_PREFIX " start"
+#define MSG_PID_AUTOTUNE_FAILED MSG_PID_AUTOTUNE_PREFIX " failed!"
#define MSG_PID_BAD_EXTRUDER_NUM MSG_PID_AUTOTUNE_FAILED " Bad extruder number"
#define MSG_PID_TEMP_TOO_HIGH MSG_PID_AUTOTUNE_FAILED " Temperature too high"
#define MSG_PID_TIMEOUT MSG_PID_AUTOTUNE_FAILED " timeout"
@@ -279,7 +275,7 @@
#define MSG_KI " Ki: "
#define MSG_KD " Kd: "
#define MSG_AT " @:"
-#define MSG_PID_AUTOTUNE_FINISHED MSG_PID_AUTOTUNE " finished! Put the last Kp, Ki and Kd constants from below into Configuration.h"
+#define MSG_PID_AUTOTUNE_FINISHED MSG_PID_AUTOTUNE_PREFIX " finished! Put the last Kp, Ki and Kd constants from below into Configuration.h"
#define MSG_PID_DEBUG " PID_DEBUG "
#define MSG_PID_DEBUG_INPUT ": Input "
#define MSG_PID_DEBUG_OUTPUT " Output "
@@ -298,6 +294,8 @@
#define MSG_T_THERMAL_RUNAWAY "Thermal Runaway"
#define MSG_T_MAXTEMP "MAXTEMP triggered"
#define MSG_T_MINTEMP "MINTEMP triggered"
+#define MSG_ERR_PROBING_FAILED "Probing Failed"
+#define MSG_ZPROBE_OUT_SER "Z Probe Past Bed"
// Debug
#define MSG_DEBUG_PREFIX "DEBUG:"
@@ -313,11 +311,9 @@
#define LANGUAGE_DATA_INCL_(M) STRINGIFY_(fontdata/langdata_##M.h)
#define LANGUAGE_DATA_INCL(M) LANGUAGE_DATA_INCL_(M)
-#define INCLUDE_LANGUAGE_DATA LANGUAGE_DATA_INCL(LCD_LANGUAGE)
#define LANGUAGE_INCL_(M) STRINGIFY_(../lcd/language/language_##M.h)
#define LANGUAGE_INCL(M) LANGUAGE_INCL_(M)
-#define INCLUDE_LANGUAGE LANGUAGE_INCL(LCD_LANGUAGE)
// Never translate these strings
#define MSG_X "X"
@@ -337,38 +333,54 @@
#define MSG_Y2 "Y2"
#define MSG_Z2 "Z2"
#define MSG_Z3 "Z3"
-#define MSG_H1 "1"
-#define MSG_H2 "2"
-#define MSG_H3 "3"
-#define MSG_H4 "4"
-#define MSG_H5 "5"
-#define MSG_H6 "6"
-#define MSG_LCD_N0 " 1"
-#define MSG_LCD_N1 " 2"
-#define MSG_LCD_N2 " 3"
-#define MSG_LCD_N3 " 4"
-#define MSG_LCD_N4 " 5"
-#define MSG_LCD_N5 " 6"
-#define MSG_E1 "E1"
-#define MSG_E2 "E2"
-#define MSG_E3 "E3"
-#define MSG_E4 "E4"
-#define MSG_E5 "E5"
-#define MSG_E6 "E6"
-#define MSG_MOVE_E1 "1"
-#define MSG_MOVE_E2 "2"
-#define MSG_MOVE_E3 "3"
-#define MSG_MOVE_E4 "4"
-#define MSG_MOVE_E5 "5"
-#define MSG_MOVE_E6 "6"
-#define MSG_DIAM_E1 " 1"
-#define MSG_DIAM_E2 " 2"
-#define MSG_DIAM_E3 " 3"
-#define MSG_DIAM_E4 " 4"
-#define MSG_DIAM_E5 " 5"
-#define MSG_DIAM_E6 " 6"
-
-#include INCLUDE_LANGUAGE
+
+#define LCD_STR_A MSG_A
+#define LCD_STR_B MSG_B
+#define LCD_STR_C MSG_C
+#define LCD_STR_E MSG_E
+
+/**
+ * Tool indexes for LCD display only
+ *
+ * By convention the LCD shows "E1" for the first extruder.
+ * However, internal to Marlin E0/T0 is the first tool, and
+ * most board silkscreens say "E0." Zero-based labels will
+ * make these indexes consistent but this defies expectation.
+ *
+ */
+#if ENABLED(NUMBER_TOOLS_FROM_0)
+ #define LCD_FIRST_TOOL '0'
+ #define LCD_STR_N0 "0"
+ #define LCD_STR_N1 "1"
+ #define LCD_STR_N2 "2"
+ #define LCD_STR_N3 "3"
+ #define LCD_STR_N4 "4"
+ #define LCD_STR_N5 "5"
+#else
+ #define LCD_FIRST_TOOL '1'
+ #define LCD_STR_N0 "1"
+ #define LCD_STR_N1 "2"
+ #define LCD_STR_N2 "3"
+ #define LCD_STR_N3 "4"
+ #define LCD_STR_N4 "5"
+ #define LCD_STR_N5 "6"
+#endif
+
+#define LCD_STR_E0 "E" LCD_STR_N0
+#define LCD_STR_E1 "E" LCD_STR_N1
+#define LCD_STR_E2 "E" LCD_STR_N2
+#define LCD_STR_E3 "E" LCD_STR_N3
+#define LCD_STR_E4 "E" LCD_STR_N4
+#define LCD_STR_E5 "E" LCD_STR_N5
+
+#include "multi_language.h" // Allow multiple languages
+
+#include "../lcd/language/language_en.h"
+#include LANGUAGE_INCL(LCD_LANGUAGE)
+#include LANGUAGE_INCL(LCD_LANGUAGE_2)
+#include LANGUAGE_INCL(LCD_LANGUAGE_3)
+#include LANGUAGE_INCL(LCD_LANGUAGE_4)
+#include LANGUAGE_INCL(LCD_LANGUAGE_5)
#if NONE(DISPLAY_CHARSET_ISO10646_1, \
DISPLAY_CHARSET_ISO10646_5, \
@@ -381,10 +393,3 @@
DISPLAY_CHARSET_ISO10646_SK)
#define DISPLAY_CHARSET_ISO10646_1 // use the better font on full graphic displays.
#endif
-
-#include "../lcd/language/language_en.h"
-
-#ifdef CUSTOM_USER_MENU_TITLE
- #undef MSG_USER_MENU
- #define MSG_USER_MENU CUSTOM_USER_MENU_TITLE
-#endif
diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h
index c13b34260021..03deea89dc94 100644
--- a/Marlin/src/core/macros.h
+++ b/Marlin/src/core/macros.h
@@ -21,7 +21,6 @@
*/
#pragma once
-#define NUM_AXIS 4
#define ABCE 4
#define XYZE 4
#define ABC 3
@@ -227,6 +226,9 @@
#define LIST_N(N,V...) _LIST_N(N,V)
#define ARRAY_N(N,V...) { _LIST_N(N,V) }
+#define _JOIN_1(O) (O)
+#define JOIN_N(N,C,V...) (DO(JOIN,C,LIST_N(N,V)))
+
// Macros for adding
#define INC_0 1
#define INC_1 2
@@ -277,7 +279,7 @@
#define ATAN2(y, x) atan2f(y, x)
#define POW(x, y) powf(x, y)
#define SQRT(x) sqrtf(x)
-#define RSQRT(x) (1 / sqrtf(x))
+#define RSQRT(x) (1.0f / sqrtf(x))
#define CEIL(x) ceilf(x)
#define FLOOR(x) floorf(x)
#define LROUND(x) lroundf(x)
diff --git a/Marlin/src/core/multi_language.cpp b/Marlin/src/core/multi_language.cpp
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/Marlin/src/core/multi_language.h b/Marlin/src/core/multi_language.h
new file mode 100644
index 000000000000..98020b1e8d9c
--- /dev/null
+++ b/Marlin/src/core/multi_language.h
@@ -0,0 +1,79 @@
+/********************
+ * multi_language.h *
+ ********************/
+
+/****************************************************************************
+ * Written By Marcio Teixeira 2019 - Aleph Objects, Inc. *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * To view a copy of the GNU General Public License, go to the following *
+ * location: . *
+ ****************************************************************************/
+#pragma once
+
+typedef const char Language_Str[];
+
+#if defined(LCD_LANGUAGE_5)
+ #define NUM_LANGUAGES 5
+#elif defined(LCD_LANGUAGE_4)
+ #define NUM_LANGUAGES 4
+#elif defined(LCD_LANGUAGE_3)
+ #define NUM_LANGUAGES 3
+#elif defined(LCD_LANGUAGE_2)
+ #define NUM_LANGUAGES 2
+#else
+ #define NUM_LANGUAGES 1
+#endif
+
+// Setting the unused languages equal to each other allows
+// the compiler to optimize away the conditionals
+
+#ifndef LCD_LANGUAGE_2
+ #define LCD_LANGUAGE_2 LCD_LANGUAGE
+#endif
+
+#ifndef LCD_LANGUAGE_3
+ #define LCD_LANGUAGE_3 LCD_LANGUAGE_2
+#endif
+
+#ifndef LCD_LANGUAGE_4
+ #define LCD_LANGUAGE_4 LCD_LANGUAGE_3
+#endif
+
+#ifndef LCD_LANGUAGE_5
+ #define LCD_LANGUAGE_5 LCD_LANGUAGE_4
+#endif
+
+#define _GET_LANG(LANG) Language_##LANG
+#define GET_LANG(LANG) _GET_LANG(LANG)
+
+#if NUM_LANGUAGES > 1
+ extern uint8_t lang;
+ #define GET_TEXT(MSG) ( \
+ lang == 0 ? GET_LANG(LCD_LANGUAGE)::MSG : \
+ lang == 1 ? GET_LANG(LCD_LANGUAGE_2)::MSG : \
+ lang == 2 ? GET_LANG(LCD_LANGUAGE_3)::MSG : \
+ lang == 3 ? GET_LANG(LCD_LANGUAGE_4)::MSG : \
+ GET_LANG(LCD_LANGUAGE_5)::MSG \
+ )
+ #define MAX_LANG_CHARSIZE _MAX(GET_LANG(LCD_LANGUAGE)::CHARSIZE, \
+ GET_LANG(LCD_LANGUAGE_2)::CHARSIZE, \
+ GET_LANG(LCD_LANGUAGE_3)::CHARSIZE, \
+ GET_LANG(LCD_LANGUAGE_4)::CHARSIZE, \
+ GET_LANG(LCD_LANGUAGE_5)::CHARSIZE)
+#else
+ #define GET_TEXT(MSG) GET_LANG(LCD_LANGUAGE)::MSG
+ #define MAX_LANG_CHARSIZE GET_LANG(LCD_LANGUAGE)::CHARSIZE
+#endif
+#define GET_TEXT_F(MSG) (const __FlashStringHelper*)GET_TEXT(MSG)
+
+#define MSG_CONCAT(A,B) pgm_p_pair_t(GET_TEXT(A),GET_TEXT(B))
diff --git a/Marlin/src/core/utility.h b/Marlin/src/core/utility.h
index 2956f9289250..f430da50d6a0 100644
--- a/Marlin/src/core/utility.h
+++ b/Marlin/src/core/utility.h
@@ -47,9 +47,9 @@ inline void serial_delay(const millis_t ms) {
void unmark(const uint8_t x, const uint8_t y) { CBI(bits[y], x); }
void mark(const uint8_t x, const uint8_t y) { SBI(bits[y], x); }
bool marked(const uint8_t x, const uint8_t y) { return TEST(bits[y], x); }
- inline void unmark(const xy_int8_t &xy) { unmark(xy.y, xy.x); }
- inline void mark(const xy_int8_t &xy) { mark(xy.y, xy.x); }
- inline bool marked(const xy_int8_t &xy) { return marked(xy.y, xy.x); }
+ inline void unmark(const xy_int8_t &xy) { unmark(xy.x, xy.y); }
+ inline void mark(const xy_int8_t &xy) { mark(xy.x, xy.y); }
+ inline bool marked(const xy_int8_t &xy) { return marked(xy.x, xy.y); }
};
typedef FlagBits MeshFlags;
diff --git a/Marlin/src/feature/backlash.cpp b/Marlin/src/feature/backlash.cpp
index f1a14df49dcd..43e6d36becd1 100644
--- a/Marlin/src/feature/backlash.cpp
+++ b/Marlin/src/feature/backlash.cpp
@@ -123,7 +123,7 @@ void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const
}
#if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
- #if USES_Z_MIN_PROBE_ENDSTOP
+ #if HAS_CUSTOM_PROBE_PIN
#define TEST_PROBE_PIN (READ(Z_MIN_PROBE_PIN) != Z_MIN_PROBE_ENDSTOP_INVERTING)
#else
#define TEST_PROBE_PIN (READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING)
diff --git a/Marlin/src/feature/bedlevel/bedlevel.cpp b/Marlin/src/feature/bedlevel/bedlevel.cpp
index d92f903a9f86..ef8cfd345536 100644
--- a/Marlin/src/feature/bedlevel/bedlevel.cpp
+++ b/Marlin/src/feature/bedlevel/bedlevel.cpp
@@ -228,14 +228,14 @@ void reset_bed_level() {
#ifdef MANUAL_PROBE_START_Z
constexpr float startz = _MAX(0, MANUAL_PROBE_START_Z);
#if MANUAL_PROBE_HEIGHT > 0
- do_blocking_move_to(pos, MANUAL_PROBE_HEIGHT);
+ do_blocking_move_to_xy_z(pos, MANUAL_PROBE_HEIGHT);
do_blocking_move_to_z(startz);
#else
- do_blocking_move_to(pos, startz);
+ do_blocking_move_to_xy_z(pos, startz);
#endif
#elif MANUAL_PROBE_HEIGHT > 0
const float prev_z = current_position.z;
- do_blocking_move_to(pos, MANUAL_PROBE_HEIGHT);
+ do_blocking_move_to_xy_z(pos, MANUAL_PROBE_HEIGHT);
do_blocking_move_to_z(prev_z);
#else
do_blocking_move_to_xy(pos);
diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
index 6005e9881f01..57256b90712b 100644
--- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
+++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
@@ -338,7 +338,7 @@
}
z_values[cpos.x][cpos.y] = NAN;
#if ENABLED(EXTENSIBLE_UI)
- ExtUI::onMeshUpdate(closest, 0);
+ ExtUI::onMeshUpdate(cpos, 0.0f);
#endif
cnt++;
}
@@ -541,7 +541,7 @@
else {
z_values[cpos.x][cpos.y] = g29_constant;
#if ENABLED(EXTENSIBLE_UI)
- ExtUI::onMeshUpdate(closest, g29_constant);
+ ExtUI::onMeshUpdate(cpos, g29_constant);
#endif
}
}
@@ -757,7 +757,7 @@
const int point_num = (GRID_MAX_POINTS) - count + 1;
SERIAL_ECHOLNPAIR("\nProbing mesh point ", point_num, "/", int(GRID_MAX_POINTS), ".\n");
#if HAS_DISPLAY
- ui.status_printf_P(0, PSTR(MSG_PROBING_MESH " %i/%i"), point_num, int(GRID_MAX_POINTS));
+ ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_MESH), point_num, int(GRID_MAX_POINTS));
#endif
#if HAS_LCD_MENU
@@ -783,7 +783,7 @@
);
z_values[best.pos.x][best.pos.y] = measured_z;
#if ENABLED(EXTENSIBLE_UI)
- ExtUI::onMeshUpdate(best, measured_z);
+ ExtUI::onMeshUpdate(best.pos, measured_z);
#endif
}
SERIAL_FLUSH(); // Prevent host M105 buffer overrun.
@@ -892,7 +892,7 @@
ui.capture();
save_ubl_active_state_and_disable(); // No bed level correction so only raw data is obtained
- do_blocking_move_to(current_position.x, current_position.y, z_clearance);
+ do_blocking_move_to_xy_z(current_position, z_clearance);
ui.return_to_status();
@@ -921,7 +921,7 @@
if (do_ubl_mesh_map) display_map(g29_map_type); // show user where we're probing
- serialprintPGM(parser.seen('B') ? PSTR(MSG_UBL_BC_INSERT) : PSTR(MSG_UBL_BC_INSERT2));
+ serialprintPGM(parser.seen('B') ? GET_TEXT(MSG_UBL_BC_INSERT) : GET_TEXT(MSG_UBL_BC_INSERT2));
const float z_step = 0.01f; // existing behavior: 0.01mm per click, occasionally step
//const float z_step = planner.steps_to_mm[Z_AXIS]; // approx one step each click
@@ -948,7 +948,7 @@
if (do_ubl_mesh_map) display_map(g29_map_type); // show user where we're probing
restore_ubl_active_state_and_leave();
- do_blocking_move_to(pos, Z_CLEARANCE_DEPLOY_PROBE);
+ do_blocking_move_to_xy_z(pos, Z_CLEARANCE_DEPLOY_PROBE);
}
inline void set_message_with_feedback(PGM_P const msg_P) {
@@ -959,7 +959,7 @@
void abort_fine_tune() {
ui.return_to_status();
do_blocking_move_to_z(Z_CLEARANCE_BETWEEN_PROBES);
- set_message_with_feedback(PSTR(MSG_EDITING_STOPPED));
+ set_message_with_feedback(GET_TEXT(MSG_EDITING_STOPPED));
}
void unified_bed_leveling::fine_tune_mesh(const xy_pos_t &pos, const bool do_ubl_mesh_map) {
@@ -986,7 +986,7 @@
LCD_MESSAGEPGM(MSG_UBL_FINE_TUNE_MESH);
ui.capture(); // Take over control of the LCD encoder
- do_blocking_move_to(pos, Z_CLEARANCE_BETWEEN_PROBES); // Move to the given XY with probe clearance
+ do_blocking_move_to_xy_z(pos, Z_CLEARANCE_BETWEEN_PROBES); // Move to the given XY with probe clearance
#if ENABLED(UBL_MESH_EDIT_MOVES_Z)
do_blocking_move_to_z(h_offset); // Move Z to the given 'H' offset
@@ -1055,7 +1055,7 @@
if (do_ubl_mesh_map) display_map(g29_map_type);
restore_ubl_active_state_and_leave();
- do_blocking_move_to(pos, Z_CLEARANCE_BETWEEN_PROBES);
+ do_blocking_move_to_xy_z(pos, Z_CLEARANCE_BETWEEN_PROBES);
LCD_MESSAGEPGM(MSG_UBL_DONE_EDITING_MESH);
SERIAL_ECHOLNPGM("Done Editing Mesh");
@@ -1072,7 +1072,7 @@
bool err_flag = false;
#if HAS_LCD_MENU
- set_message_with_feedback(PSTR(MSG_UBL_DOING_G29));
+ set_message_with_feedback(GET_TEXT(MSG_UBL_DOING_G29));
#endif
g29_constant = 0;
@@ -1196,7 +1196,7 @@
if (ubl_state_recursion_chk != 1) {
SERIAL_ECHOLNPGM("save_ubl_active_state_and_disabled() called multiple times in a row.");
#if HAS_LCD_MENU
- set_message_with_feedback(PSTR(MSG_UBL_SAVE_ERROR));
+ set_message_with_feedback(GET_TEXT(MSG_UBL_SAVE_ERROR));
#endif
return;
}
@@ -1210,7 +1210,7 @@
if (--ubl_state_recursion_chk) {
SERIAL_ECHOLNPGM("restore_ubl_active_state_and_leave() called too many times.");
#if HAS_LCD_MENU
- set_message_with_feedback(PSTR(MSG_UBL_RESTORE_ERROR));
+ set_message_with_feedback(GET_TEXT(MSG_UBL_RESTORE_ERROR));
#endif
return;
}
@@ -1335,7 +1335,7 @@
if (!isnan(v2)) {
z_values[x][y] = v1 < v2 ? v1 : v1 + v1 - v2;
#if ENABLED(EXTENSIBLE_UI)
- ExtUI::onMeshUpdate(x, y, z_values[pos.x][pos.y]);
+ ExtUI::onMeshUpdate(x, y, z_values[x][y]);
#endif
return true;
}
@@ -1410,7 +1410,7 @@
if (do_3_pt_leveling) {
SERIAL_ECHOLNPGM("Tilting mesh (1/3)");
#if HAS_DISPLAY
- ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 1/3"));
+ ui.status_printf_P(0, PSTR(S_FMT " 1/3"), GET_TEXT(MSG_LCD_TILTING_MESH));
#endif
measured_z = probe_at_point(points[0], PROBE_PT_RAISE, g29_verbose_level);
@@ -1431,7 +1431,7 @@
if (!abort_flag) {
SERIAL_ECHOLNPGM("Tilting mesh (2/3)");
#if HAS_DISPLAY
- ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 2/3"));
+ ui.status_printf_P(0, PSTR(S_FMT " 2/3"), GET_TEXT(MSG_LCD_TILTING_MESH));
#endif
measured_z = probe_at_point(points[1], PROBE_PT_RAISE, g29_verbose_level);
@@ -1453,7 +1453,7 @@
if (!abort_flag) {
SERIAL_ECHOLNPGM("Tilting mesh (3/3)");
#if HAS_DISPLAY
- ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 3/3"));
+ ui.status_printf_P(0, PSTR(S_FMT " 3/3"), GET_TEXT(MSG_LCD_TILTING_MESH));
#endif
measured_z = probe_at_point(points[2], PROBE_PT_STOW, g29_verbose_level);
@@ -1497,7 +1497,7 @@
if (!abort_flag) {
SERIAL_ECHOLNPAIR("Tilting mesh point ", point_num, "/", total_points, "\n");
#if HAS_DISPLAY
- ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " %i/%i"), point_num, total_points);
+ ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_LCD_TILTING_MESH), point_num, total_points);
#endif
measured_z = probe_at_point(rpos, parser.seen('E') ? PROBE_PT_STOW : PROBE_PT_RAISE, g29_verbose_level); // TODO: Needs error handling
diff --git a/Marlin/src/feature/binary_protocol.h b/Marlin/src/feature/binary_protocol.h
index 58817f66bad7..c558a3eeae11 100644
--- a/Marlin/src/feature/binary_protocol.h
+++ b/Marlin/src/feature/binary_protocol.h
@@ -306,6 +306,9 @@ class BinaryStream {
PORT_REDIRECT(card.transfer_port_index);
#endif
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Warray-bounds"
+
while (PENDING(millis(), transfer_window)) {
switch (stream_state) {
/**
@@ -439,6 +442,8 @@ class BinaryStream {
break;
}
}
+
+ #pragma GCC diagnostic pop
}
void dispatch() {
diff --git a/Marlin/src/feature/cancel_object.cpp b/Marlin/src/feature/cancel_object.cpp
new file mode 100644
index 000000000000..a066815e85e0
--- /dev/null
+++ b/Marlin/src/feature/cancel_object.cpp
@@ -0,0 +1,83 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../inc/MarlinConfig.h"
+
+#if ENABLED(CANCEL_OBJECTS)
+
+#include "cancel_object.h"
+#include "../gcode/gcode.h"
+#include "../lcd/ultralcd.h"
+
+CancelObject cancelable;
+
+int8_t CancelObject::object_count, // = 0
+ CancelObject::active_object = -1;
+uint32_t CancelObject::canceled; // = 0x0000
+bool CancelObject::skipping; // = false
+
+void CancelObject::set_active_object(const int8_t obj) {
+ active_object = obj;
+ if (WITHIN(obj, 0, 31)) {
+ if (obj >= object_count) object_count = obj + 1;
+ skipping = TEST(canceled, obj);
+ }
+ else
+ skipping = false;
+
+ #if HAS_DISPLAY
+ if (active_object >= 0)
+ ui.status_printf_P(0, PSTR(S_FMT " %i"), GET_TEXT(MSG_PRINTING_OBJECT), int(active_object + 1));
+ else
+ ui.reset_status();
+ #endif
+}
+
+void CancelObject::cancel_object(const int8_t obj) {
+ if (WITHIN(obj, 0, 31)) {
+ SBI(canceled, obj);
+ if (obj == active_object) skipping = true;
+ }
+}
+
+void CancelObject::uncancel_object(const int8_t obj) {
+ if (WITHIN(obj, 0, 31)) {
+ CBI(canceled, obj);
+ if (obj == active_object) skipping = false;
+ }
+}
+
+void CancelObject::report() {
+ if (active_object >= 0) {
+ SERIAL_ECHO_START();
+ SERIAL_ECHOLNPAIR("Active Object: ", int(active_object));
+ }
+
+ if (canceled) {
+ SERIAL_ECHO_START();
+ SERIAL_ECHOPGM("Canceled:");
+ for (int i = 0; i < object_count; i++)
+ if (TEST(canceled, i)) { SERIAL_CHAR(' '); SERIAL_ECHO(i); }
+ SERIAL_EOL();
+ }
+}
+
+#endif // CANCEL_OBJECTS
diff --git a/Marlin/src/feature/cancel_object.h b/Marlin/src/feature/cancel_object.h
new file mode 100644
index 000000000000..f32283b46dd3
--- /dev/null
+++ b/Marlin/src/feature/cancel_object.h
@@ -0,0 +1,41 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#include
+
+class CancelObject {
+public:
+ static bool skipping;
+ static int8_t object_count, active_object;
+ static uint32_t canceled;
+ static void set_active_object(const int8_t obj);
+ static void cancel_object(const int8_t obj);
+ static void uncancel_object(const int8_t obj);
+ static void report();
+ static inline bool is_canceled(const int8_t obj) { return TEST(canceled, obj); }
+ static inline void clear_active_object() { set_active_object(-1); }
+ static inline void cancel_active_object() { cancel_object(active_object); }
+ static inline void reset() { canceled = 0x0000; object_count = 0; clear_active_object(); }
+};
+
+extern CancelObject cancelable;
diff --git a/Marlin/src/feature/caselight.cpp b/Marlin/src/feature/caselight.cpp
index 81eb4aaac4c7..8c58d8452abd 100644
--- a/Marlin/src/feature/caselight.cpp
+++ b/Marlin/src/feature/caselight.cpp
@@ -71,7 +71,13 @@ void update_case_light() {
#if DISABLED(CASE_LIGHT_NO_BRIGHTNESS)
if (PWM_PIN(CASE_LIGHT_PIN))
- analogWrite(pin_t(CASE_LIGHT_PIN), n10ct);
+ analogWrite(pin_t(CASE_LIGHT_PIN),
+ #if CASE_LIGHT_MAX_PWM == 255
+ n10ct
+ #else
+ map(n10ct, 0, 255, 0, CASE_LIGHT_MAX_PWM)
+ #endif
+ );
else
#endif
{
diff --git a/Marlin/src/feature/digipot/digipot_mcp4451.cpp b/Marlin/src/feature/digipot/digipot_mcp4451.cpp
index 1b9672251f22..b04406f4be7f 100644
--- a/Marlin/src/feature/digipot/digipot_mcp4451.cpp
+++ b/Marlin/src/feature/digipot/digipot_mcp4451.cpp
@@ -35,7 +35,7 @@
#if MB(5DPRINT)
#define DIGIPOT_I2C_FACTOR 117.96
#define DIGIPOT_I2C_MAX_CURRENT 1.736
-#elif MB(AZTEEG_X5_MINI) || MB(AZTEEG_X5_MINI_WIFI)
+#elif MB(AZTEEG_X5_MINI, AZTEEG_X5_MINI_WIFI)
#define DIGIPOT_I2C_FACTOR 113.5
#define DIGIPOT_I2C_MAX_CURRENT 2.0
#else
diff --git a/Marlin/src/feature/host_actions.cpp b/Marlin/src/feature/host_actions.cpp
index b39b0fbc3c2f..8c09faeaa38b 100644
--- a/Marlin/src/feature/host_actions.cpp
+++ b/Marlin/src/feature/host_actions.cpp
@@ -102,8 +102,8 @@ void host_action(const char * const pstr, const bool eol) {
void host_response_handler(const uint8_t response) {
#ifdef DEBUG_HOST_ACTIONS
- SERIAL_ECHOLNPAIR("M86 Handle Reason: ", host_prompt_reason);
- SERIAL_ECHOLNPAIR("M86 Handle Response: ", response);
+ SERIAL_ECHOLNPAIR("M876 Handle Reason: ", host_prompt_reason);
+ SERIAL_ECHOLNPAIR("M876 Handle Response: ", response);
#endif
const char *msg = PSTR("UNKNOWN STATE");
const PromptReason hpr = host_prompt_reason;
diff --git a/Marlin/src/feature/joystick.cpp b/Marlin/src/feature/joystick.cpp
index baa3142b6f4d..7ae3f1389e01 100644
--- a/Marlin/src/feature/joystick.cpp
+++ b/Marlin/src/feature/joystick.cpp
@@ -112,10 +112,10 @@ Joystick joystick;
static bool injecting_now; // = false;
if (injecting_now) return;
- static constexpr int QUEUE_DEPTH = 5; // Insert up to this many movements
- static constexpr float target_lag = 0.25f, // Aim for 1/4 second lag
- seg_time = target_lag / QUEUE_DEPTH; // 0.05 seconds, short segments inserted every 1/20th of a second
- static constexpr millis_t timer_limit_ms = millis_t(seg_time * 500); // 25 ms minimum delay between insertions
+ static constexpr int QUEUE_DEPTH = 5; // Insert up to this many movements
+ static constexpr float target_lag = 0.25f, // Aim for 1/4 second lag
+ seg_time = target_lag / QUEUE_DEPTH; // 0.05 seconds, short segments inserted every 1/20th of a second
+ static constexpr millis_t timer_limit_ms = millis_t(seg_time * 500); // 25 ms minimum delay between insertions
// The planner can merge/collapse small moves, so the movement queue is unreliable to control the lag
static millis_t next_run = 0;
diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp
index 60f82e0f0548..07f1d7d1b2d0 100644
--- a/Marlin/src/feature/pause.cpp
+++ b/Marlin/src/feature/pause.cpp
@@ -53,6 +53,7 @@
#include "../lcd/extensible_ui/ui_api.h"
#endif
+#include "../core/language.h"
#include "../lcd/ultralcd.h"
#if HAS_BUZZER
@@ -76,6 +77,12 @@ fil_change_settings_t fc_settings[EXTRUDERS];
#include "../sd/cardreader.h"
#endif
+#if ENABLED(EMERGENCY_PARSER)
+ #define _PMSG(L) L##_M108
+#else
+ #define _PMSG(L) L##_LCD
+#endif
+
#if HAS_BUZZER
static void filament_change_beep(const int8_t max_beep_count, const bool init=false) {
if (pause_mode == PAUSE_MODE_PAUSE_PRINT) return;
@@ -163,7 +170,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
#if HAS_LCD_MENU
if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_INSERT, mode);
#endif
- SERIAL_ECHO_MSG(MSG_FILAMENT_CHANGE_INSERT);
+ SERIAL_ECHO_MSG(_PMSG(MSG_FILAMENT_CHANGE_INSERT));
#if HAS_BUZZER
filament_change_beep(max_beep_count, true);
@@ -188,7 +195,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
host_action_prompt_show();
#endif
#if ENABLED(EXTENSIBLE_UI)
- ExtUI::onUserConfirmRequired(PSTR("Load Filament"));
+ ExtUI::onUserConfirmRequired_P(PSTR("Load Filament"));
#endif
while (wait_for_user) {
#if HAS_BUZZER
@@ -240,10 +247,10 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
wait_for_user = true;
#if ENABLED(HOST_PROMPT_SUPPORT)
- host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Continuous Purge Running..."), PSTR("Continue"));
+ host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Filament Purge Running..."), PSTR("Continue"));
#endif
#if ENABLED(EXTENSIBLE_UI)
- ExtUI::onUserConfirmRequired(PSTR("Continuous Purge Running..."));
+ ExtUI::onUserConfirmRequired_P(PSTR("Filament Purge Running..."));
#endif
for (float purge_count = purge_length; purge_count > 0 && wait_for_user; --purge_count)
do_pause_e_move(1, ADVANCED_PAUSE_PURGE_FEEDRATE);
@@ -381,7 +388,7 @@ bool unload_filament(const float &unload_length, const bool show_lcd/*=false*/,
* - Park the nozzle at the given position
* - Call unload_filament (if a length was specified)
*
- * Returns 'true' if pause was completed, 'false' for abort
+ * Return 'true' if pause was completed, 'false' for abort
*/
uint8_t did_pause_print = 0;
@@ -481,14 +488,6 @@ bool pause_print(const float &retract, const xyz_pos_t &park_point, const float
* Used by M125 and M600
*/
-#if (HAS_LCD_MENU || ENABLED(EXTENSIBLE_UI)) && ENABLED(EMERGENCY_PARSER)
- #define _PMSG(L) L
-#elif ENABLED(EMERGENCY_PARSER)
- #define _PMSG(L) L##_M108
-#else
- #define _PMSG(L) L##_LCD
-#endif
-
void show_continue_prompt(const bool is_reload) {
#if HAS_LCD_MENU
lcd_pause_show_message(is_reload ? PAUSE_MESSAGE_INSERT : PAUSE_MESSAGE_WAITING);
@@ -527,7 +526,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Nozzle Parked"), PSTR("Continue"));
#endif
#if ENABLED(EXTENSIBLE_UI)
- ExtUI::onUserConfirmRequired(PSTR("Nozzle Parked"));
+ ExtUI::onUserConfirmRequired_P(PSTR("Nozzle Parked"));
#endif
while (wait_for_user) {
#if HAS_BUZZER
@@ -551,7 +550,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
#endif
#if ENABLED(EXTENSIBLE_UI)
- ExtUI::onUserConfirmRequired(PSTR("HeaterTimeout"));
+ ExtUI::onUserConfirmRequired_P(PSTR("HeaterTimeout"));
#endif
// Wait for LCD click or M108
@@ -581,7 +580,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Reheat Done"), PSTR("Continue"));
#endif
#if ENABLED(EXTENSIBLE_UI)
- ExtUI::onUserConfirmRequired("Reheat finished.");
+ ExtUI::onUserConfirmRequired_P(PSTR("Reheat finished."));
#endif
wait_for_user = true;
nozzle_timed_out = false;
@@ -603,7 +602,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
/**
* Resume or Start print procedure
*
- * - Abort if not paused
+ * - If not paused, do nothing and return
* - Reset heater idle timers
* - Load filament if specified, but only if:
* - a nozzle timed out, or
diff --git a/Marlin/src/feature/pause.h b/Marlin/src/feature/pause.h
index cb6787d9134c..42f70cc60174 100644
--- a/Marlin/src/feature/pause.h
+++ b/Marlin/src/feature/pause.h
@@ -39,6 +39,7 @@ typedef struct {
enum PauseMode : char {
PAUSE_MODE_SAME,
PAUSE_MODE_PAUSE_PRINT,
+ PAUSE_MODE_CHANGE_FILAMENT,
PAUSE_MODE_LOAD_FILAMENT,
PAUSE_MODE_UNLOAD_FILAMENT
};
diff --git a/Marlin/src/feature/power_loss_recovery.cpp b/Marlin/src/feature/power_loss_recovery.cpp
index bf13bb4b1a13..c438dffa361e 100644
--- a/Marlin/src/feature/power_loss_recovery.cpp
+++ b/Marlin/src/feature/power_loss_recovery.cpp
@@ -228,7 +228,7 @@ void PrintJobRecovery::save(const bool force/*=false*/, const bool save_queue/*=
#if PIN_EXISTS(POWER_LOSS)
void PrintJobRecovery::_outage() {
save(true);
- kill(PSTR(MSG_OUTAGE_RECOVERY));
+ kill(GET_TEXT(MSG_OUTAGE_RECOVERY));
}
#endif
@@ -327,9 +327,10 @@ void PrintJobRecovery::resume() {
// Restore retract and hop state
#if ENABLED(FWRETRACT)
for (uint8_t e = 0; e < EXTRUDERS; e++) {
- if (info.retract[e] != 0.0)
+ if (info.retract[e] != 0.0) {
fwretract.current_retract[e] = info.retract[e];
fwretract.retracted[e] = true;
+ }
}
fwretract.current_hop = info.retract_hop;
#endif
diff --git a/Marlin/src/feature/prusa_MMU2/mmu2.cpp b/Marlin/src/feature/prusa_MMU2/mmu2.cpp
index dd0b2c681cef..d101cf7f9391 100644
--- a/Marlin/src/feature/prusa_MMU2/mmu2.cpp
+++ b/Marlin/src/feature/prusa_MMU2/mmu2.cpp
@@ -97,7 +97,7 @@ volatile int8_t MMU2::finda = 1;
volatile bool MMU2::finda_runout_valid;
int16_t MMU2::version = -1, MMU2::buildnr = -1;
millis_t MMU2::last_request, MMU2::next_P0_request;
-char MMU2::rx_buffer[16], MMU2::tx_buffer[16];
+char MMU2::rx_buffer[MMU_RX_SIZE], MMU2::tx_buffer[MMU_TX_SIZE];
#if HAS_LCD_MENU && ENABLED(MMU2_MENUS)
@@ -433,7 +433,7 @@ bool MMU2::rx_ok() {
void MMU2::check_version() {
if (buildnr < MMU_REQUIRED_FW_BUILDNR) {
SERIAL_ERROR_MSG("Invalid MMU2 firmware. Version >= " STRINGIFY(MMU_REQUIRED_FW_BUILDNR) " required.");
- kill(MSG_MMU2_WRONG_FIRMWARE);
+ kill(GET_TEXT(MSG_MMU2_WRONG_FIRMWARE));
}
}
@@ -449,7 +449,7 @@ void MMU2::tool_change(uint8_t index) {
if (index != extruder) {
disable_E0();
- ui.status_printf_P(0, PSTR(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
+ ui.status_printf_P(0, GET_TEXT(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
command(MMU_CMD_T0 + index);
@@ -712,7 +712,7 @@ void MMU2::filament_runout() {
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("MMU2 Eject Recover"), PSTR("Continue"));
#endif
#if ENABLED(EXTENSIBLE_UI)
- ExtUI::onUserConfirmRequired(PSTR("MMU2 Eject Recover"));
+ ExtUI::onUserConfirmRequired_P(PSTR("MMU2 Eject Recover"));
#endif
while (wait_for_user) idle();
BUZZ(200, 404);
diff --git a/Marlin/src/feature/prusa_MMU2/mmu2.h b/Marlin/src/feature/prusa_MMU2/mmu2.h
index e102481c1959..9628c4be7f5b 100644
--- a/Marlin/src/feature/prusa_MMU2/mmu2.h
+++ b/Marlin/src/feature/prusa_MMU2/mmu2.h
@@ -27,6 +27,14 @@
#include "../runout.h"
#endif
+#if SERIAL_USB
+ #define MMU_RX_SIZE 256
+ #define MMU_TX_SIZE 256
+#else
+ #define MMU_RX_SIZE 16
+ #define MMU_TX_SIZE 16
+#endif
+
struct E_Step;
class MMU2 {
@@ -79,7 +87,7 @@ class MMU2 {
static volatile bool finda_runout_valid;
static int16_t version, buildnr;
static millis_t last_request, next_P0_request;
- static char rx_buffer[16], tx_buffer[16];
+ static char rx_buffer[MMU_RX_SIZE], tx_buffer[MMU_TX_SIZE];
static inline void set_runout_valid(const bool valid) {
finda_runout_valid = valid;
diff --git a/Marlin/src/feature/runout.cpp b/Marlin/src/feature/runout.cpp
index a4172fc08600..6b8905c3b995 100644
--- a/Marlin/src/feature/runout.cpp
+++ b/Marlin/src/feature/runout.cpp
@@ -58,4 +58,79 @@ void FilamentSensorBase::filament_present(const uint8_t extruder) {
int8_t RunoutResponseDebounced::runout_count; // = 0
#endif
+//
+// Filament Runout event handler
+//
+#include "../Marlin.h"
+#include "../gcode/queue.h"
+
+#if ENABLED(HOST_ACTION_COMMANDS)
+ #include "host_actions.h"
+#endif
+
+#if ENABLED(EXTENSIBLE_UI)
+ #include "../lcd/extensible_ui/ui_api.h"
+#endif
+
+void event_filament_runout() {
+
+ #if ENABLED(ADVANCED_PAUSE_FEATURE)
+ if (did_pause_print) return; // Action already in progress. Purge triggered repeated runout.
+ #endif
+
+ #if ENABLED(EXTENSIBLE_UI)
+ ExtUI::onFilamentRunout(ExtUI::getActiveTool());
+ #endif
+
+ #if EITHER(HOST_PROMPT_SUPPORT, HOST_ACTION_COMMANDS)
+ const char tool = '0'
+ #if NUM_RUNOUT_SENSORS > 1
+ + active_extruder
+ #endif
+ ;
+ #endif
+
+ //action:out_of_filament
+ #if ENABLED(HOST_PROMPT_SUPPORT)
+ host_prompt_reason = PROMPT_FILAMENT_RUNOUT;
+ host_action_prompt_end();
+ host_action_prompt_begin(PSTR("FilamentRunout T"), false);
+ SERIAL_CHAR(tool);
+ SERIAL_EOL();
+ host_action_prompt_show();
+ #endif
+
+ const bool run_runout_script = !runout.host_handling;
+
+ #if ENABLED(HOST_ACTION_COMMANDS)
+ if (run_runout_script
+ && ( strstr(FILAMENT_RUNOUT_SCRIPT, "M600")
+ || strstr(FILAMENT_RUNOUT_SCRIPT, "M125")
+ #if ENABLED(ADVANCED_PAUSE_FEATURE)
+ || strstr(FILAMENT_RUNOUT_SCRIPT, "M25")
+ #endif
+ )
+ ) {
+ host_action_paused(false);
+ }
+ else {
+ // Legacy Repetier command for use until newer version supports standard dialog
+ // To be removed later when pause command also triggers dialog
+ #ifdef ACTION_ON_FILAMENT_RUNOUT
+ host_action(PSTR(ACTION_ON_FILAMENT_RUNOUT " T"), false);
+ SERIAL_CHAR(tool);
+ SERIAL_EOL();
+ #endif
+
+ host_action_pause(false);
+ }
+ SERIAL_ECHOPGM(" " ACTION_REASON_ON_FILAMENT_RUNOUT " ");
+ SERIAL_CHAR(tool);
+ SERIAL_EOL();
+ #endif // HOST_ACTION_COMMANDS
+
+ if (run_runout_script)
+ queue.inject_P(PSTR(FILAMENT_RUNOUT_SCRIPT));
+}
+
#endif // HAS_FILAMENT_SENSOR
diff --git a/Marlin/src/feature/runout.h b/Marlin/src/feature/runout.h
index c181c7cb434b..4fed18e359f8 100644
--- a/Marlin/src/feature/runout.h
+++ b/Marlin/src/feature/runout.h
@@ -46,6 +46,8 @@
#define FILAMENT_RUNOUT_THRESHOLD 5
#endif
+void event_filament_runout();
+
class FilamentMonitorBase {
public:
static bool enabled, filament_ran_out;
@@ -98,7 +100,7 @@ class TFilamentMonitor : public FilamentMonitorBase {
// Give the response a chance to update its counter.
static inline void run() {
- if (enabled && !filament_ran_out && (IS_SD_PRINTING() || print_job_timer.isRunning()
+ if (enabled && !filament_ran_out && (printingIsActive()
#if ENABLED(ADVANCED_PAUSE_FEATURE)
|| did_pause_print
#endif
diff --git a/Marlin/src/feature/spindle_laser.cpp b/Marlin/src/feature/spindle_laser.cpp
index 81865fddb6cd..775e7a864aef 100644
--- a/Marlin/src/feature/spindle_laser.cpp
+++ b/Marlin/src/feature/spindle_laser.cpp
@@ -34,14 +34,16 @@ SpindleLaser cutter;
cutter_power_t SpindleLaser::power; // = 0
+#define SPINDLE_LASER_PWM_OFF ((SPINDLE_LASER_PWM_INVERT) ? 255 : 0)
+
void SpindleLaser::init() {
OUT_WRITE(SPINDLE_LASER_ENA_PIN, !SPINDLE_LASER_ACTIVE_HIGH); // Init spindle to off
#if ENABLED(SPINDLE_CHANGE_DIR)
OUT_WRITE(SPINDLE_DIR_PIN, SPINDLE_INVERT_DIR ? 255 : 0); // Init rotation to clockwise (M3)
#endif
- #if ENABLED(SPINDLE_LASER_PWM) && PIN_EXISTS(SPINDLE_LASER_PWM)
+ #if ENABLED(SPINDLE_LASER_PWM)
SET_PWM(SPINDLE_LASER_PWM_PIN);
- analogWrite(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_INVERT ? 255 : 0); // set to lowest speed
+ analogWrite(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_OFF); // set to lowest speed
#endif
}
@@ -54,34 +56,34 @@ void SpindleLaser::init() {
*/
void SpindleLaser::set_ocr(const uint8_t ocr) {
WRITE(SPINDLE_LASER_ENA_PIN, SPINDLE_LASER_ACTIVE_HIGH); // turn spindle on (active low)
- #if ENABLED(SPINDLE_LASER_PWM)
- analogWrite(pin_t(SPINDLE_LASER_PWM_PIN), (SPINDLE_LASER_PWM_INVERT) ? 255 - ocr : ocr);
- #endif
+ analogWrite(pin_t(SPINDLE_LASER_PWM_PIN), ocr ^ SPINDLE_LASER_PWM_OFF);
}
#endif
-void SpindleLaser::update_output() {
- const bool ena = enabled();
+void SpindleLaser::apply_power(const cutter_power_t inpow) {
+ static cutter_power_t last_power_applied = 0;
+ if (inpow == last_power_applied) return;
+ last_power_applied = inpow;
#if ENABLED(SPINDLE_LASER_PWM)
- if (ena) {
+ if (enabled()) {
+ #define _scaled(F) ((F - (SPEED_POWER_INTERCEPT)) * inv_slope)
constexpr float inv_slope = RECIPROCAL(SPEED_POWER_SLOPE),
- min_ocr = (SPEED_POWER_MIN - (SPEED_POWER_INTERCEPT)) * inv_slope, // Minimum allowed
- max_ocr = (SPEED_POWER_MAX - (SPEED_POWER_INTERCEPT)) * inv_slope; // Maximum allowed
+ min_ocr = _scaled(SPEED_POWER_MIN),
+ max_ocr = _scaled(SPEED_POWER_MAX);
int16_t ocr_val;
- if (power <= SPEED_POWER_MIN) ocr_val = min_ocr; // Use minimum if set below
- else if (power >= SPEED_POWER_MAX) ocr_val = max_ocr; // Use maximum if set above
- else ocr_val = (power - (SPEED_POWER_INTERCEPT)) * inv_slope; // Use calculated OCR value
- set_ocr(ocr_val & 0xFF); // ...limited to Atmel PWM max
+ if (inpow <= SPEED_POWER_MIN) ocr_val = min_ocr; // Use minimum if set below
+ else if (inpow >= SPEED_POWER_MAX) ocr_val = max_ocr; // Use maximum if set above
+ else ocr_val = _scaled(inpow); // Use calculated OCR value
+ set_ocr(ocr_val & 0xFF); // ...limited to Atmel PWM max
}
- else { // Convert RPM to PWM duty cycle
- WRITE(SPINDLE_LASER_ENA_PIN, !SPINDLE_LASER_ACTIVE_HIGH); // Turn spindle off (active low)
- analogWrite(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_INVERT ? 255 : 0); // Only write low byte
+ else {
+ WRITE(SPINDLE_LASER_ENA_PIN, !SPINDLE_LASER_ACTIVE_HIGH); // Turn spindle off (active low)
+ analogWrite(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_OFF); // Only write low byte
}
#else
- WRITE(SPINDLE_LASER_ENA_PIN, ena ? SPINDLE_LASER_ACTIVE_HIGH : !SPINDLE_LASER_ACTIVE_HIGH);
+ WRITE(SPINDLE_LASER_ENA_PIN, (SPINDLE_LASER_ACTIVE_HIGH) ? enabled() : !enabled());
#endif
- power_delay(ena);
}
#if ENABLED(SPINDLE_CHANGE_DIR)
diff --git a/Marlin/src/feature/spindle_laser.h b/Marlin/src/feature/spindle_laser.h
index 133152a911c3..80b57be314b2 100644
--- a/Marlin/src/feature/spindle_laser.h
+++ b/Marlin/src/feature/spindle_laser.h
@@ -36,10 +36,10 @@
#define MSG_CUTTER(M) _MSG_CUTTER(M)
#if SPEED_POWER_MAX > 255
- #define cutter_power_t uint16_t
+ typedef uint16_t cutter_power_t;
#define CUTTER_MENU_TYPE uint16_5
#else
- #define cutter_power_t uint8_t
+ typedef uint8_t cutter_power_t;
#define CUTTER_MENU_TYPE uint8
#endif
@@ -51,9 +51,17 @@ class SpindleLaser {
static inline bool enabled() { return !!power; }
- static inline void set_power(const uint8_t pwr) { power = pwr; update_output(); }
+ static inline void set_power(const cutter_power_t pwr) { power = pwr; }
- static inline void set_enabled(const bool enable) { set_power(enable ? 255 : 0); }
+ static inline void refresh() { apply_power(power); }
+
+ static inline void set_enabled(const bool enable) {
+ const bool was = enabled();
+ set_power(enable ? 255 : 0);
+ if (was != enable) power_delay();
+ }
+
+ static void apply_power(const cutter_power_t inpow);
//static bool active() { return READ(SPINDLE_LASER_ENA_PIN) == SPINDLE_LASER_ACTIVE_HIGH; }
@@ -61,11 +69,15 @@ class SpindleLaser {
#if ENABLED(SPINDLE_LASER_PWM)
static void set_ocr(const uint8_t ocr);
- static inline void set_ocr_power(const uint8_t pwr) { power = pwr; set_ocr(pwr); }
+ static inline void set_ocr_power(const cutter_power_t pwr) { power = pwr; set_ocr(pwr); }
#endif
// Wait for spindle to spin up or spin down
- static inline void power_delay(const bool on) { safe_delay(on ? SPINDLE_LASER_POWERUP_DELAY : SPINDLE_LASER_POWERDOWN_DELAY); }
+ static inline void power_delay() {
+ #if SPINDLE_LASER_POWERUP_DELAY || SPINDLE_LASER_POWERDOWN_DELAY
+ safe_delay(enabled() ? SPINDLE_LASER_POWERUP_DELAY : SPINDLE_LASER_POWERDOWN_DELAY);
+ #endif
+ }
#if ENABLED(SPINDLE_CHANGE_DIR)
static void set_direction(const bool reverse);
diff --git a/Marlin/src/feature/tmc_util.cpp b/Marlin/src/feature/tmc_util.cpp
index 329c511ecde1..618fdd81f5e6 100644
--- a/Marlin/src/feature/tmc_util.cpp
+++ b/Marlin/src/feature/tmc_util.cpp
@@ -507,7 +507,7 @@
case TMC_GLOBAL_SCALER:
{
uint16_t value = st.GLOBAL_SCALER();
- SERIAL_PRINT(value ? value : 256, DEC);
+ SERIAL_PRINT(value ?: 256, DEC);
SERIAL_ECHOPGM("/256");
}
break;
@@ -1118,7 +1118,7 @@ void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z
#endif
}
- if (axis_connection) ui.set_status_P(PSTR(MSG_ERROR_TMC));
+ if (axis_connection) ui.set_status_P(GET_TEXT(MSG_ERROR_TMC));
}
#endif // HAS_TRINAMIC
diff --git a/Marlin/src/feature/tmc_util.h b/Marlin/src/feature/tmc_util.h
index 8d0435b4a667..e0c9170ae5bd 100644
--- a/Marlin/src/feature/tmc_util.h
+++ b/Marlin/src/feature/tmc_util.h
@@ -393,34 +393,16 @@ void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z
template
bool TMCMarlin::test_stall_status() {
- uint16_t sg_result = 0;
-
this->switchCSpin(LOW);
- if (this->TMC_SW_SPI != nullptr) {
- this->TMC_SW_SPI->transfer(TMC2130_n::DRV_STATUS_t::address);
- this->TMC_SW_SPI->transfer16(0);
- // We only care about the last 10 bits
- sg_result = this->TMC_SW_SPI->transfer(0);
- sg_result <<= 8;
- sg_result |= this->TMC_SW_SPI->transfer(0);
- }
- else {
- SPI.beginTransaction(SPISettings(16000000/8, MSBFIRST, SPI_MODE3));
- // Read DRV_STATUS
- SPI.transfer(TMC2130_n::DRV_STATUS_t::address);
- SPI.transfer16(0);
- // We only care about the last 10 bits
- sg_result = SPI.transfer(0);
- sg_result <<= 8;
- sg_result |= SPI.transfer(0);
- SPI.endTransaction();
- }
+ // read stallGuard flag from TMC library, will handle HW and SW SPI
+ TMC2130_n::DRV_STATUS_t drv_status{0};
+ drv_status.sr = this->DRV_STATUS();
+
this->switchCSpin(HIGH);
- return (sg_result & 0x3FF) == 0;
+ return drv_status.stallGuard;
}
-
#endif // SPI_ENDSTOPS
#endif // USE_SENSORLESS
diff --git a/Marlin/src/gcode/bedlevel/G26.cpp b/Marlin/src/gcode/bedlevel/G26.cpp
index 2356f0428d57..467b71059c48 100644
--- a/Marlin/src/gcode/bedlevel/G26.cpp
+++ b/Marlin/src/gcode/bedlevel/G26.cpp
@@ -168,7 +168,7 @@ int8_t g26_prime_flag;
*/
bool user_canceled() {
if (!ui.button_pressed()) return false; // Return if the button isn't pressed
- ui.set_status_P(PSTR(MSG_G26_CANCELED), 99);
+ ui.set_status_P(GET_TEXT(MSG_G26_CANCELED), 99);
#if HAS_LCD_MENU
ui.quick_feedback();
#endif
@@ -370,7 +370,7 @@ inline bool turn_on_heaters() {
if (g26_bed_temp > 25) {
#if HAS_SPI_LCD
- ui.set_status_P(PSTR(MSG_G26_HEATING_BED), 99);
+ ui.set_status_P(GET_TEXT(MSG_G26_HEATING_BED), 99);
ui.quick_feedback();
#if HAS_LCD_MENU
ui.capture();
@@ -391,7 +391,7 @@ inline bool turn_on_heaters() {
// Start heating the active nozzle
#if HAS_SPI_LCD
- ui.set_status_P(PSTR(MSG_G26_HEATING_NOZZLE), 99);
+ ui.set_status_P(GET_TEXT(MSG_G26_HEATING_NOZZLE), 99);
ui.quick_feedback();
#endif
thermalManager.setTargetHotend(g26_hotend_temp, active_extruder);
@@ -426,7 +426,7 @@ inline bool prime_nozzle() {
if (g26_prime_flag == -1) { // The user wants to control how much filament gets purged
ui.capture();
- ui.set_status_P(PSTR(MSG_G26_MANUAL_PRIME), 99);
+ ui.set_status_P(GET_TEXT(MSG_G26_MANUAL_PRIME), 99);
ui.chirp();
destination = current_position;
@@ -450,7 +450,7 @@ inline bool prime_nozzle() {
ui.wait_for_release();
- ui.set_status_P(PSTR(MSG_G26_PRIME_DONE), 99);
+ ui.set_status_P(GET_TEXT(MSG_G26_PRIME_DONE), 99);
ui.quick_feedback();
ui.release();
}
@@ -458,7 +458,7 @@ inline bool prime_nozzle() {
#endif
{
#if HAS_SPI_LCD
- ui.set_status_P(PSTR(MSG_G26_FIXED_LENGTH), 99);
+ ui.set_status_P(GET_TEXT(MSG_G26_FIXED_LENGTH), 99);
ui.quick_feedback();
#endif
destination = current_position;
@@ -800,8 +800,8 @@ void GcodeSuite::G26() {
if (user_canceled()) goto LEAVE; // Check if the user wants to stop the Mesh Validation
#endif
- xy_float_t p = { circle.x + _COS(ind ), circle.y + _SIN(ind ), g26_layer_height },
- q = { circle.x + _COS(ind + 1), circle.y + _SIN(ind + 1), g26_layer_height };
+ xyz_float_t p = { circle.x + _COS(ind ), circle.y + _SIN(ind ), g26_layer_height },
+ q = { circle.x + _COS(ind + 1), circle.y + _SIN(ind + 1), g26_layer_height };
#if IS_KINEMATIC
// Check to make sure this segment is entirely on the bed, skip if not.
@@ -827,7 +827,7 @@ void GcodeSuite::G26() {
} while (--g26_repeats && location.valid());
LEAVE:
- ui.set_status_P(PSTR(MSG_G26_LEAVING), -1);
+ ui.set_status_P(GET_TEXT(MSG_G26_LEAVING), -1);
retract_filament(destination);
destination.z = Z_CLEARANCE_BETWEEN_PROBES;
diff --git a/Marlin/src/gcode/bedlevel/M420.cpp b/Marlin/src/gcode/bedlevel/M420.cpp
index 779490840778..9e96b456e352 100644
--- a/Marlin/src/gcode/bedlevel/M420.cpp
+++ b/Marlin/src/gcode/bedlevel/M420.cpp
@@ -27,6 +27,7 @@
#include "../gcode.h"
#include "../../feature/bedlevel/bedlevel.h"
#include "../../module/planner.h"
+#include "../../module/probe.h"
#if ENABLED(EEPROM_SETTINGS)
#include "../../module/configuration_store.h"
@@ -63,9 +64,9 @@ void GcodeSuite::M420() {
#if ENABLED(MARLIN_DEV_MODE)
if (parser.intval('S') == 2) {
+ const float x_min = probe_min_x(), x_max = probe_max_x(),
+ y_min = probe_min_y(), y_max = probe_max_y();
#if ENABLED(AUTO_BED_LEVELING_BILINEAR)
- const float x_min = probe_min_x(), x_max = probe_max_x(),
- y_min = probe_min_y(), y_max = probe_max_y();
bilinear_start.set(x_min, y_min);
bilinear_grid_spacing.set((x_max - x_min) / (GRID_MAX_POINTS_X - 1),
(y_max - y_min) / (GRID_MAX_POINTS_Y - 1));
diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp
index 5f1ef2e9a3c8..a662eab07aac 100644
--- a/Marlin/src/gcode/bedlevel/abl/G29.cpp
+++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp
@@ -722,10 +722,10 @@ G29_TYPE GcodeSuite::G29() {
if (verbose_level) SERIAL_ECHOLNPAIR("Probing mesh point ", int(pt_index), "/", int(GRID_MAX_POINTS), ".");
#if HAS_DISPLAY
- ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), PSTR(MSG_PROBING_MESH), int(pt_index), int(GRID_MAX_POINTS));
+ ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_MESH), int(pt_index), int(GRID_MAX_POINTS));
#endif
- measured_z = faux ? 0.001 * random(-100, 101) : probe_at_point(probePos, raise_after, verbose_level);
+ measured_z = faux ? 0.001f * random(-100, 101) : probe_at_point(probePos, raise_after, verbose_level);
if (isnan(measured_z)) {
set_bed_leveling_enabled(abl_should_enable);
@@ -764,7 +764,7 @@ G29_TYPE GcodeSuite::G29() {
for (uint8_t i = 0; i < 3; ++i) {
if (verbose_level) SERIAL_ECHOLNPAIR("Probing point ", int(i), "/3.");
#if HAS_DISPLAY
- ui.status_printf_P(0, PSTR(MSG_PROBING_MESH " %i/3"), int(i));
+ ui.status_printf_P(0, PSTR(S_FMT" %i/3"), GET_TEXT(MSG_PROBING_MESH)), int(i);
#endif
// Retain the last probe position
diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp
index 7f1fb7705e29..63408515fb84 100644
--- a/Marlin/src/gcode/calibrate/G28.cpp
+++ b/Marlin/src/gcode/calibrate/G28.cpp
@@ -118,7 +118,7 @@
// Disallow Z homing if X or Y are unknown
if (!TEST(axis_known_position, X_AXIS) || !TEST(axis_known_position, Y_AXIS)) {
LCD_MESSAGEPGM(MSG_ERR_Z_HOMING);
- SERIAL_ECHO_MSG(MSG_ERR_Z_HOMING);
+ SERIAL_ECHO_MSG(MSG_ERR_Z_HOMING_SER);
return;
}
@@ -154,7 +154,7 @@
}
else {
LCD_MESSAGEPGM(MSG_ZPROBE_OUT);
- SERIAL_ECHO_MSG(MSG_ZPROBE_OUT);
+ SERIAL_ECHO_MSG(MSG_ZPROBE_OUT_SER);
}
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< home_z_safely");
@@ -162,6 +162,33 @@
#endif // Z_SAFE_HOMING
+#if ENABLED(IMPROVE_HOMING_RELIABILITY)
+
+ slow_homing_t begin_slow_homing() {
+ slow_homing_t slow_homing{0};
+ slow_homing.acceleration.set(planner.settings.max_acceleration_mm_per_s2[X_AXIS],
+ planner.settings.max_acceleration_mm_per_s2[Y_AXIS]);
+ planner.settings.max_acceleration_mm_per_s2[X_AXIS] = 100;
+ planner.settings.max_acceleration_mm_per_s2[Y_AXIS] = 100;
+ #if HAS_CLASSIC_JERK
+ slow_homing.jerk_xy = planner.max_jerk;
+ planner.max_jerk.set(0, 0);
+ #endif
+ planner.reset_acceleration_rates();
+ return slow_homing;
+ }
+
+ void end_slow_homing(const slow_homing_t &slow_homing) {
+ planner.settings.max_acceleration_mm_per_s2[X_AXIS] = slow_homing.acceleration.x;
+ planner.settings.max_acceleration_mm_per_s2[Y_AXIS] = slow_homing.acceleration.y;
+ #if HAS_CLASSIC_JERK
+ planner.max_jerk = slow_homing.jerk_xy;
+ #endif
+ planner.reset_acceleration_rates();
+ }
+
+#endif // IMPROVE_HOMING_RELIABILITY
+
/**
* G28: Home all axes according to settings
*
@@ -230,17 +257,7 @@ void GcodeSuite::G28(const bool always_home_all) {
#endif
#if ENABLED(IMPROVE_HOMING_RELIABILITY)
- slow_homing_t slow_homing{0};
- slow_homing.acceleration.set(planner.settings.max_acceleration_mm_per_s2[X_AXIS],
- planner.settings.max_acceleration_mm_per_s2[Y_AXIS]);
- planner.settings.max_acceleration_mm_per_s2[X_AXIS] = 100;
- planner.settings.max_acceleration_mm_per_s2[Y_AXIS] = 100;
- #if HAS_CLASSIC_JERK
- slow_homing.jerk_xy = planner.max_jerk;
- planner.max_jerk.set(0, 0);
- #endif
-
- planner.reset_acceleration_rates();
+ slow_homing_t slow_homing = begin_slow_homing();
#endif
// Always home with tool 0 active
@@ -264,6 +281,10 @@ void GcodeSuite::G28(const bool always_home_all) {
home_delta();
UNUSED(always_home_all);
+ #if ENABLED(IMPROVE_HOMING_RELIABILITY)
+ end_slow_homing(slow_homing);
+ #endif
+
#else // NOT DELTA
const bool homeX = parser.seen('X'), homeY = parser.seen('Y'), homeZ = parser.seen('Z'),
@@ -348,6 +369,10 @@ void GcodeSuite::G28(const bool always_home_all) {
if (doY) homeaxis(Y_AXIS);
#endif
+ #if ENABLED(IMPROVE_HOMING_RELIABILITY)
+ end_slow_homing(slow_homing);
+ #endif
+
// Home Z last if homing towards the bed
#if Z_HOME_DIR < 0
if (doZ) {
@@ -381,6 +406,10 @@ void GcodeSuite::G28(const bool always_home_all) {
if (dxc_is_duplicating()) {
+ #if ENABLED(IMPROVE_HOMING_RELIABILITY)
+ slow_homing = begin_slow_homing();
+ #endif
+
// Always home the 2nd (right) extruder first
active_extruder = 1;
homeaxis(X_AXIS);
@@ -401,6 +430,10 @@ void GcodeSuite::G28(const bool always_home_all) {
dual_x_carriage_mode = IDEX_saved_mode;
stepper.set_directions();
+
+ #if ENABLED(IMPROVE_HOMING_RELIABILITY)
+ end_slow_homing(slow_homing);
+ #endif
}
#endif // DUAL_X_CARRIAGE
@@ -433,15 +466,6 @@ void GcodeSuite::G28(const bool always_home_all) {
tool_change(old_tool_index, NO_FETCH);
#endif
- #if ENABLED(IMPROVE_HOMING_RELIABILITY)
- planner.settings.max_acceleration_mm_per_s2[X_AXIS] = slow_homing.acceleration.x;
- planner.settings.max_acceleration_mm_per_s2[Y_AXIS] = slow_homing.acceleration.y;
- #if HAS_CLASSIC_JERK
- planner.max_jerk = slow_homing.jerk_xy;
- #endif
- planner.reset_acceleration_rates();
- #endif
-
ui.refresh();
report_current_position();
diff --git a/Marlin/src/gcode/calibrate/G34_M422.cpp b/Marlin/src/gcode/calibrate/G34_M422.cpp
index 48ed8fe986b9..7f1d086d45ed 100644
--- a/Marlin/src/gcode/calibrate/G34_M422.cpp
+++ b/Marlin/src/gcode/calibrate/G34_M422.cpp
@@ -25,37 +25,49 @@
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
#include "../gcode.h"
-#include "../../module/delta.h"
-#include "../../module/motion.h"
+#include "../../module/planner.h"
#include "../../module/stepper.h"
-#include "../../module/endstops.h"
+#include "../../module/motion.h"
+#include "../../module/probe.h"
#if HOTENDS > 1
#include "../../module/tool_change.h"
#endif
-#if HAS_BED_PROBE
- #include "../../module/probe.h"
-#endif
-
#if HAS_LEVELING
#include "../../feature/bedlevel/bedlevel.h"
#endif
+#if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ #include "../../libs/least_squares_fit.h"
+#endif
+
#define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE)
#include "../../core/debug_out.h"
-// Sanity-check
+// Sanity-check the count of Z_STEPPER_ALIGN_XY points
constexpr xy_pos_t sanity_arr_z_align[] = Z_STEPPER_ALIGN_XY;
-static_assert(COUNT(sanity_arr_z_align) == Z_STEPPER_COUNT,
- #if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
- "Z_STEPPER_ALIGN_XY requires three {X,Y} entries (Z, Z2, and Z3)."
- #else
- "Z_STEPPER_ALIGN_XY requires two {X,Y} entries (Z and Z2)."
- #endif
-);
+#if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ static_assert(COUNT(sanity_arr_z_align) >= Z_STEPPER_COUNT,
+ "Z_STEPPER_ALIGN_XY requires at least three {X,Y} entries (Z, Z2, Z3, ...)."
+ );
+#else
+ static_assert(COUNT(sanity_arr_z_align) == Z_STEPPER_COUNT,
+ #if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
+ "Z_STEPPER_ALIGN_XY requires three {X,Y} entries (Z, Z2, and Z3)."
+ #else
+ "Z_STEPPER_ALIGN_XY requires two {X,Y} entries (Z and Z2)."
+ #endif
+ );
+#endif
-xy_pos_t z_auto_align_pos[Z_STEPPER_COUNT] = Z_STEPPER_ALIGN_XY;
+static xy_pos_t z_auto_align_pos[Z_STEPPER_COUNT] = Z_STEPPER_ALIGN_XY;
+
+#if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ static xy_pos_t z_stepper_pos[] = Z_STEPPER_ALIGN_STEPPER_XY;
+#endif
+
+#define G34_PROBE_COUNT COUNT(z_auto_align_pos)
inline void set_all_z_lock(const bool lock) {
stepper.set_z_lock(lock);
@@ -68,7 +80,9 @@ inline void set_all_z_lock(const bool lock) {
/**
* G34: Z-Stepper automatic alignment
*
- * Parameters: I T A
+ * I
+ * T
+ * A
*/
void GcodeSuite::G34() {
if (DEBUGGING(LEVELING)) {
@@ -90,11 +104,18 @@ void GcodeSuite::G34() {
break;
}
- const float z_auto_align_amplification = parser.floatval('A', Z_STEPPER_ALIGN_AMP);
- if (!WITHIN(ABS(z_auto_align_amplification), 0.5f, 2.0f)) {
- SERIAL_ECHOLNPGM("?(A)mplification out of bounds (0.5-2.0).");
- break;
- }
+ const float z_auto_align_amplification =
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ Z_STEPPER_ALIGN_AMP;
+ #else
+ parser.floatval('A', Z_STEPPER_ALIGN_AMP);
+ if (!WITHIN(ABS(z_auto_align_amplification), 0.5f, 2.0f)) {
+ SERIAL_ECHOLNPGM("?(A)mplification out of bounds (0.5-2.0).");
+ break;
+ }
+ #endif
+
+ const ProbePtRaise raise_after = parser.boolval('E') ? PROBE_PT_STOW : PROBE_PT_RAISE;
// Wait for planner moves to finish!
planner.synchronize();
@@ -130,11 +151,13 @@ void GcodeSuite::G34() {
#define Z_BASIC_CLEARANCE Z_CLEARANCE_BETWEEN_PROBES
#endif
+ // Compute a worst-case clearance height to probe from. After the first
+ // iteration this will be re-calculated based on the actual bed position
float z_probe = Z_BASIC_CLEARANCE + (G34_MAX_GRADE) * 0.01f * (
#if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
SQRT(_MAX(HYPOT2(z_auto_align_pos[0].x - z_auto_align_pos[0].y, z_auto_align_pos[1].x - z_auto_align_pos[1].y),
- HYPOT2(z_auto_align_pos[1].x - z_auto_align_pos[1].y, z_auto_align_pos[2].x - z_auto_align_pos[2].y),
- HYPOT2(z_auto_align_pos[2].x - z_auto_align_pos[2].y, z_auto_align_pos[0].x - z_auto_align_pos[0].y)))
+ HYPOT2(z_auto_align_pos[1].x - z_auto_align_pos[1].y, z_auto_align_pos[2].x - z_auto_align_pos[2].y),
+ HYPOT2(z_auto_align_pos[2].x - z_auto_align_pos[2].y, z_auto_align_pos[0].x - z_auto_align_pos[0].y)))
#else
HYPOT(z_auto_align_pos[0].x - z_auto_align_pos[0].y, z_auto_align_pos[1].x - z_auto_align_pos[1].y)
#endif
@@ -147,12 +170,10 @@ void GcodeSuite::G34() {
current_position.z -= z_probe * 0.5f;
float last_z_align_move[Z_STEPPER_COUNT] = ARRAY_N(Z_STEPPER_COUNT, 10000.0f, 10000.0f, 10000.0f),
- z_measured[Z_STEPPER_COUNT] = { 0 },
+ z_measured[G34_PROBE_COUNT] = { 0 },
z_maxdiff = 0.0f,
amplification = z_auto_align_amplification;
- const ProbePtRaise raise_after = parser.boolval('E') ? PROBE_PT_STOW : PROBE_PT_RAISE;
-
uint8_t iteration;
bool err_break = false;
for (iteration = 0; iteration < z_auto_align_iterations; ++iteration) {
@@ -161,17 +182,19 @@ void GcodeSuite::G34() {
SERIAL_ECHOLNPAIR("\nITERATION: ", int(iteration + 1));
// Initialize minimum value
- float z_measured_min = 100000.0f;
+ float z_measured_min = 100000.0f,
+ z_measured_max = -100000.0f;
+
// Probe all positions (one per Z-Stepper)
- for (uint8_t izstepper = 0; izstepper < Z_STEPPER_COUNT; ++izstepper) {
+ for (uint8_t i = 0; i < G34_PROBE_COUNT; ++i) {
// iteration odd/even --> downward / upward stepper sequence
- const uint8_t zstepper = (iteration & 1) ? Z_STEPPER_COUNT - 1 - izstepper : izstepper;
+ const uint8_t iprobe = (iteration & 1) ? G34_PROBE_COUNT - 1 - i : i;
// Safe clearance even on an incline
- if (iteration == 0 || izstepper > 0) do_blocking_move_to_z(z_probe);
+ if (iteration == 0 || i > 0) do_blocking_move_to_z(z_probe);
// Probe a Z height for each stepper.
- const float z_probed_height = probe_at_point(z_auto_align_pos[zstepper], raise_after, 0, true);
+ const float z_probed_height = probe_at_point(z_auto_align_pos[i], raise_after, 0, true);
if (isnan(z_probed_height)) {
SERIAL_ECHOLNPGM("Probing failed.");
err_break = true;
@@ -180,35 +203,58 @@ void GcodeSuite::G34() {
// Add height to each value, to provide a more useful target height for
// the next iteration of probing. This allows adjustments to be made away from the bed.
- z_measured[zstepper] = z_probed_height + Z_CLEARANCE_BETWEEN_PROBES;
+ z_measured[iprobe] = z_probed_height + Z_CLEARANCE_BETWEEN_PROBES;
- if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("> Z", int(zstepper + 1), " measured position is ", z_measured[zstepper]);
+ if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("> Z", int(iprobe + 1), " measured position is ", z_measured[iprobe]);
// Remember the minimum measurement to calculate the correction later on
- z_measured_min = _MIN(z_measured_min, z_measured[zstepper]);
- } // for (zstepper)
+ z_measured_min = _MIN(z_measured_min, z_measured[iprobe]);
+ z_measured_max = _MAX(z_measured_max, z_measured[iprobe]);
+ } // for (i)
if (err_break) break;
// Adapt the next probe clearance height based on the new measurements.
// Safe_height = lowest distance to bed (= highest measurement) plus highest measured misalignment.
- #if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
- z_maxdiff = _MAX(ABS(z_measured[0] - z_measured[1]), ABS(z_measured[1] - z_measured[2]), ABS(z_measured[2] - z_measured[0]));
- z_probe = Z_BASIC_CLEARANCE + _MAX(z_measured[0], z_measured[1], z_measured[2]) + z_maxdiff;
- #else
- z_maxdiff = ABS(z_measured[0] - z_measured[1]);
- z_probe = Z_BASIC_CLEARANCE + _MAX(z_measured[0], z_measured[1]) + z_maxdiff;
+ z_maxdiff = z_measured_max - z_measured_min;
+ z_probe = Z_BASIC_CLEARANCE + z_measured_max + z_maxdiff;
+
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Replace the initial values in z_measured with calculated heights at
+ // each stepper position. This allows the adjustment algorithm to be
+ // shared between both possible probing mechanisms.
+
+ // This must be done after the next z_probe height is calculated, so that
+ // the height is calculated from actual print area positions, and not
+ // extrapolated motor movements.
+
+ // Compute the least-squares fit for all probed points.
+ // Calculate the Z position of each stepper and store it in z_measured.
+ // This allows the actual adjustment logic to be shared by both algorithms.
+ linear_fit_data lfd;
+ incremental_LSF_reset(&lfd);
+ for (uint8_t i = 0; i < G34_PROBE_COUNT; ++i) {
+ SERIAL_ECHOLNPAIR("PROBEPT_", int(i + 1), ": ", z_measured[i]);
+ incremental_LSF(&lfd, z_auto_align_pos[i], z_measured[i]);
+ }
+ finish_incremental_LSF(&lfd);
+
+ z_measured_min = 100000.0f;
+ for (uint8_t i = 0; i < Z_STEPPER_COUNT; ++i) {
+ z_measured[i] = -(lfd.A * z_stepper_pos[i].x + lfd.B * z_stepper_pos[i].y);
+ z_measured_min = _MIN(z_measured_min, z_measured[i]);
+ }
+
+ SERIAL_ECHOLNPAIR("CALCULATED STEPPER POSITIONS: Z1=", z_measured[0], " Z2=", z_measured[1], " Z3=", z_measured[2]);
#endif
- SERIAL_ECHOPAIR("\n"
+ SERIAL_ECHOLNPAIR("\n"
"DIFFERENCE Z1-Z2=", ABS(z_measured[0] - z_measured[1])
#if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
, " Z2-Z3=", ABS(z_measured[1] - z_measured[2])
, " Z3-Z1=", ABS(z_measured[2] - z_measured[0])
#endif
);
- SERIAL_EOL();
- SERIAL_EOL();
// The following correction actions are to be enabled for select Z-steppers only
stepper.set_separate_multi_axis(true);
@@ -220,8 +266,10 @@ void GcodeSuite::G34() {
const float z_align_move = z_measured[zstepper] - z_measured_min,
z_align_abs = ABS(z_align_move);
- // Optimize one iterations correction based on the first measurements
- if (z_align_abs > 0.0f) amplification = iteration == 1 ? _MIN(last_z_align_move[zstepper] / z_align_abs, 2.0f) : z_auto_align_amplification;
+ #if DISABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Optimize one iteration's correction based on the first measurements
+ if (z_align_abs > 0.0f) amplification = iteration == 1 ? _MIN(last_z_align_move[zstepper] / z_align_abs, 2.0f) : z_auto_align_amplification;
+ #endif
// Check for less accuracy compared to last move
if (last_z_align_move[zstepper] < z_align_abs - 1.0) {
@@ -266,7 +314,6 @@ void GcodeSuite::G34() {
SERIAL_ECHOLNPAIR("Did ", int(iteration + (iteration != z_auto_align_iterations)), " iterations of ", int(z_auto_align_iterations));
SERIAL_ECHOLNPAIR_F("Accuracy: ", z_maxdiff);
- SERIAL_EOL();
// Restore the active tool after homing
#if HOTENDS > 1
@@ -299,31 +346,97 @@ void GcodeSuite::G34() {
}
/**
- * M422: Z-Stepper automatic alignment parameter selection
+ * M422: Set a Z-Stepper automatic alignment XY point.
+ * Use repeatedly to set multiple points.
+ *
+ * S : Index of the probe point to set
+ *
+ * With Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS:
+ * W : Index of the Z stepper position to set
+ * The W and S parameters may not be combined.
+ *
+ * S and W require an X and/or Y parameter
+ * X : X position to set (Unchanged if omitted)
+ * Y : Y position to set (Unchanged if omitted)
*/
void GcodeSuite::M422() {
- const int8_t zstepper = parser.intval('S') - 1;
- if (!WITHIN(zstepper, 0, Z_STEPPER_COUNT - 1)) {
- SERIAL_ECHOLNPGM("?(S) Z-Stepper index invalid.");
+ if (!parser.seen_any()) {
+ for (uint8_t i = 0; i < G34_PROBE_COUNT; ++i)
+ SERIAL_ECHOLNPAIR("M422 S", i + 1, " X", z_auto_align_pos[i].x, " Y", z_auto_align_pos[i].y);
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ for (uint8_t i = 0; i < Z_STEPPER_COUNT; ++i)
+ SERIAL_ECHOLNPAIR("M422 W", i + 1, " X", z_stepper_pos[i].x, " Y", z_stepper_pos[i].y);
+ #endif
return;
}
- const xy_pos_t pos = {
- parser.floatval('X', z_auto_align_pos[zstepper].x),
- parser.floatval('Y', z_auto_align_pos[zstepper].y)
- };
+ const bool is_probe_point = parser.seen('S');
+
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ if (is_probe_point && parser.seen('W')) {
+ SERIAL_ECHOLNPGM("?(S) and (W) may not be combined.");
+ return;
+ }
+ #endif
- if (!WITHIN(pos.x, X_MIN_POS, X_MAX_POS)) {
- SERIAL_ECHOLNPGM("?(X) out of bounds.");
+ xy_pos_t *pos_dest = (
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ !is_probe_point ? z_stepper_pos :
+ #endif
+ z_auto_align_pos
+ );
+
+ if (!is_probe_point
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ && !parser.seen('W')
+ #endif
+ ) {
+ SERIAL_ECHOLNPGM(
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ "?(S) or (W) is required."
+ #else
+ "?(S) is required."
+ #endif
+ );
return;
}
- if (!WITHIN(pos.y, Y_MIN_POS, Y_MAX_POS)) {
- SERIAL_ECHOLNPGM("?(Y) out of bounds.");
- return;
+ // Get the Probe Position Index or Z Stepper Index
+ int8_t position_index;
+ if (is_probe_point) {
+ position_index = parser.intval('S') - 1;
+ if (!WITHIN(position_index, 0, int8_t(G34_PROBE_COUNT) - 1)) {
+ SERIAL_ECHOLNPGM("?(S) Z-ProbePosition index invalid.");
+ return;
+ }
+ }
+ else {
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ position_index = parser.intval('W') - 1;
+ if (!WITHIN(position_index, 0, Z_STEPPER_COUNT - 1)) {
+ SERIAL_ECHOLNPGM("?(W) Z-Stepper index invalid.");
+ return;
+ }
+ #endif
+ }
+
+ const xy_pos_t pos = {
+ parser.floatval('X', pos_dest[position_index].x),
+ parser.floatval('Y', pos_dest[position_index].y)
+ };
+
+ if (is_probe_point) {
+ if (!position_is_reachable_by_probe(pos.x, Y_CENTER)) {
+ SERIAL_ECHOLNPGM("?(X) out of bounds.");
+ return;
+ }
+ if (!position_is_reachable_by_probe(pos)) {
+ SERIAL_ECHOLNPGM("?(Y) out of bounds.");
+ return;
+ }
}
- z_auto_align_pos[zstepper] = pos;
+ pos_dest[position_index] = pos;
}
#endif // Z_STEPPER_AUTO_ALIGN
diff --git a/Marlin/src/gcode/calibrate/M48.cpp b/Marlin/src/gcode/calibrate/M48.cpp
index 8a127672241a..ca30110670fe 100644
--- a/Marlin/src/gcode/calibrate/M48.cpp
+++ b/Marlin/src/gcode/calibrate/M48.cpp
@@ -126,7 +126,7 @@ void GcodeSuite::M48() {
for (uint8_t n = 0; n < n_samples; n++) {
#if HAS_SPI_LCD
// Display M48 progress in the status bar
- ui.status_printf_P(0, PSTR(MSG_M48_POINT ": %d/%d"), int(n + 1), int(n_samples));
+ ui.status_printf_P(0, PSTR(S_FMT ": %d/%d"), GET_TEXT(MSG_M48_POINT), int(n + 1), int(n_samples));
#endif
if (n_legs) {
const int dir = (random(0, 10) > 5.0) ? -1 : 1; // clockwise or counter clockwise
@@ -252,7 +252,7 @@ void GcodeSuite::M48() {
#if HAS_SPI_LCD
// Display M48 results in the status bar
char sigma_str[8];
- ui.status_printf_P(0, PSTR(MSG_M48_DEVIATION ": %s"), dtostrf(sigma, 2, 6, sigma_str));
+ ui.status_printf_P(0, PSTR(S_FMT ": %s"), GET_TEXT(MSG_M48_DEVIATION), dtostrf(sigma, 2, 6, sigma_str));
#endif
}
diff --git a/Marlin/src/gcode/calibrate/M852.cpp b/Marlin/src/gcode/calibrate/M852.cpp
index 156d1f5bf63e..4bb068e5b272 100644
--- a/Marlin/src/gcode/calibrate/M852.cpp
+++ b/Marlin/src/gcode/calibrate/M852.cpp
@@ -93,13 +93,13 @@ void GcodeSuite::M852() {
if (!ijk) {
SERIAL_ECHO_START();
- SERIAL_ECHOLNPAIR_F(MSG_SKEW_FACTOR " XY: ", planner.skew_factor.xy, 6);
+ serialprintPGM(GET_TEXT(MSG_SKEW_FACTOR));
+ SERIAL_ECHOPAIR_F(" XY: ", planner.skew_factor.xy, 6);
#if ENABLED(SKEW_CORRECTION_FOR_Z)
- SERIAL_ECHOPAIR(" XZ: ", planner.skew_factor.xz);
- SERIAL_ECHOLNPAIR(" YZ: ", planner.skew_factor.yz);
- #else
- SERIAL_EOL();
+ SERIAL_ECHOPAIR_F(" XZ: ", planner.skew_factor.xz, 6);
+ SERIAL_ECHOPAIR_F(" YZ: ", planner.skew_factor.yz, 6);
#endif
+ SERIAL_EOL();
}
}
diff --git a/Marlin/src/gcode/config/M200-M205.cpp b/Marlin/src/gcode/config/M200-M205.cpp
index 0edffe5b49af..aeeb38c91313 100644
--- a/Marlin/src/gcode/config/M200-M205.cpp
+++ b/Marlin/src/gcode/config/M200-M205.cpp
@@ -62,11 +62,9 @@ void GcodeSuite::M201() {
LOOP_XYZE(i) {
if (parser.seen(axis_codes[i])) {
const uint8_t a = (i == E_AXIS ? uint8_t(E_AXIS_N(target_extruder)) : i);
- planner.settings.max_acceleration_mm_per_s2[a] = parser.value_axis_units((AxisEnum)a);
+ planner.set_max_acceleration(a, parser.value_axis_units((AxisEnum)a));
}
}
-
- planner.reset_acceleration_rates();
}
/**
@@ -82,7 +80,7 @@ void GcodeSuite::M203() {
LOOP_XYZE(i)
if (parser.seen(axis_codes[i])) {
const uint8_t a = (i == E_AXIS ? uint8_t(E_AXIS_N(target_extruder)) : i);
- planner.settings.max_feedrate_mm_s[a] = parser.value_axis_units((AxisEnum)a);
+ planner.set_max_feedrate(a, parser.value_axis_units((AxisEnum)a));
}
}
@@ -119,10 +117,10 @@ void GcodeSuite::M204() {
* Y = Max Y Jerk (units/sec^2)
* Z = Max Z Jerk (units/sec^2)
* E = Max E Jerk (units/sec^2)
- * J = Junction Deviation (mm) (Requires JUNCTION_DEVIATION)
+ * J = Junction Deviation (mm) (If not using CLASSIC_JERK)
*/
void GcodeSuite::M205() {
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
#define J_PARAM "J"
#else
#define J_PARAM
@@ -138,7 +136,7 @@ void GcodeSuite::M205() {
if (parser.seen('B')) planner.settings.min_segment_time_us = parser.value_ulong();
if (parser.seen('S')) planner.settings.min_feedrate_mm_s = parser.value_linear_units();
if (parser.seen('T')) planner.settings.min_travel_feedrate_mm_s = parser.value_linear_units();
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
if (parser.seen('J')) {
const float junc_dev = parser.value_linear_units();
if (WITHIN(junc_dev, 0.01f, 0.3f)) {
@@ -152,17 +150,17 @@ void GcodeSuite::M205() {
}
#endif
#if HAS_CLASSIC_JERK
- if (parser.seen('X')) planner.max_jerk.x = parser.value_linear_units();
- if (parser.seen('Y')) planner.max_jerk.y = parser.value_linear_units();
+ if (parser.seen('X')) planner.set_max_jerk(X_AXIS, parser.value_linear_units());
+ if (parser.seen('Y')) planner.set_max_jerk(Y_AXIS, parser.value_linear_units());
if (parser.seen('Z')) {
- planner.max_jerk.z = parser.value_linear_units();
- #if HAS_MESH
+ planner.set_max_jerk(Z_AXIS, parser.value_linear_units());
+ #if HAS_MESH && DISABLED(LIMITED_JERK_EDITING)
if (planner.max_jerk.z <= 0.1f)
SERIAL_ECHOLNPGM("WARNING! Low Z Jerk may lead to unwanted pauses.");
#endif
}
- #if !BOTH(JUNCTION_DEVIATION, LIN_ADVANCE)
- if (parser.seen('E')) planner.max_jerk.e = parser.value_linear_units();
+ #if HAS_CLASSIC_E_JERK
+ if (parser.seen('E')) planner.set_max_jerk(E_AXIS, parser.value_linear_units());
#endif
#endif
}
diff --git a/Marlin/src/gcode/config/M43.cpp b/Marlin/src/gcode/config/M43.cpp
index 34d42ed49932..0fd213886d10 100644
--- a/Marlin/src/gcode/config/M43.cpp
+++ b/Marlin/src/gcode/config/M43.cpp
@@ -334,7 +334,7 @@ void GcodeSuite::M43() {
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("M43 Wait Called"), PSTR("Continue"));
#endif
#if ENABLED(EXTENSIBLE_UI)
- ExtUI::onUserConfirmRequired(PSTR("M43 Wait Called"));
+ ExtUI::onUserConfirmRequired_P(PSTR("M43 Wait Called"));
#endif
#endif
diff --git a/Marlin/src/gcode/config/M92.cpp b/Marlin/src/gcode/config/M92.cpp
index 0fd8dbea166f..622eb83b771d 100644
--- a/Marlin/src/gcode/config/M92.cpp
+++ b/Marlin/src/gcode/config/M92.cpp
@@ -76,7 +76,7 @@ void GcodeSuite::M92() {
const float value = parser.value_per_axis_units((AxisEnum)(E_AXIS_N(target_extruder)));
if (value < 20) {
float factor = planner.settings.axis_steps_per_mm[E_AXIS_N(target_extruder)] / value; // increase e constants if M92 E14 is given for netfab.
- #if HAS_CLASSIC_JERK && !BOTH(JUNCTION_DEVIATION, LIN_ADVANCE)
+ #if HAS_CLASSIC_E_JERK
planner.max_jerk.e *= factor;
#endif
planner.settings.max_feedrate_mm_s[E_AXIS_N(target_extruder)] *= factor;
@@ -98,7 +98,7 @@ void GcodeSuite::M92() {
const float wanted = parser.floatval('L');
if (parser.seen('H') || wanted) {
const uint16_t argH = parser.ushortval('H'),
- micro_steps = argH ? argH : Z_MICROSTEPS;
+ micro_steps = argH ?: Z_MICROSTEPS;
const float z_full_step_mm = micro_steps * planner.steps_to_mm[Z_AXIS];
SERIAL_ECHO_START();
SERIAL_ECHOPAIR("{ micro_steps:", micro_steps, ", z_full_step_mm:", z_full_step_mm);
diff --git a/Marlin/src/gcode/control/M108_M112_M410.cpp b/Marlin/src/gcode/control/M108_M112_M410.cpp
index 9b6193bd9309..50feb8276f51 100644
--- a/Marlin/src/gcode/control/M108_M112_M410.cpp
+++ b/Marlin/src/gcode/control/M108_M112_M410.cpp
@@ -41,7 +41,7 @@ void GcodeSuite::M108() {
* M112: Full Shutdown
*/
void GcodeSuite::M112() {
- kill(PSTR("M112 Shutdown"), true);
+ kill(PSTR("M112 Shutdown"), nullptr, true);
}
/**
diff --git a/Marlin/src/gcode/control/M3-M5.cpp b/Marlin/src/gcode/control/M3-M5.cpp
index b5e789a92f26..81e164519325 100644
--- a/Marlin/src/gcode/control/M3-M5.cpp
+++ b/Marlin/src/gcode/control/M3-M5.cpp
@@ -29,10 +29,20 @@
#include "../../module/stepper.h"
/**
- * M3 - Cutter ON (Clockwise)
- * M4 - Cutter ON (Counter-clockwise)
+ * Laser:
*
- * S - Set power. S0 turns it off.
+ * M3 - Laser ON/Power (Ramped power)
+ * M4 - Laser ON/Power (Continuous power)
+ *
+ * S - Set power. S0 will turn the laser off.
+ * O - Set power and OCR
+ *
+ * Spindle:
+ *
+ * M3 - Spindle ON (Clockwise)
+ * M4 - Spindle ON (Counter-clockwise)
+ *
+ * S - Set power. S0 will turn the spindle off.
* O - Set power and OCR
*
* If no PWM pin is defined then M3/M4 just turns it on.
@@ -61,12 +71,14 @@
*/
void GcodeSuite::M3_M4(const bool is_M4) {
- planner.synchronize(); // Wait for previous movement commands (G0/G0/G2/G3) to complete before changing power
+ #if ENABLED(SPINDLE_FEATURE)
+ planner.synchronize(); // Wait for movement to complete before changing power
+ #endif
cutter.set_direction(is_M4);
#if ENABLED(SPINDLE_LASER_PWM)
- if (parser.seen('O'))
+ if (parser.seenval('O'))
cutter.set_ocr_power(parser.value_byte()); // The OCR is a value from 0 to 255 (uint8_t)
else
cutter.set_power(parser.intval('S', 255));
@@ -79,7 +91,9 @@ void GcodeSuite::M3_M4(const bool is_M4) {
* M5 - Cutter OFF
*/
void GcodeSuite::M5() {
- planner.synchronize();
+ #if ENABLED(SPINDLE_FEATURE)
+ planner.synchronize();
+ #endif
cutter.set_enabled(false);
}
diff --git a/Marlin/src/gcode/control/M80_M81.cpp b/Marlin/src/gcode/control/M80_M81.cpp
index 03f73fe87787..28d335e8160c 100644
--- a/Marlin/src/gcode/control/M80_M81.cpp
+++ b/Marlin/src/gcode/control/M80_M81.cpp
@@ -35,7 +35,7 @@
#include "../../Marlin.h"
#endif
-#if HAS_POWER_SWITCH
+#if ENABLED(PSU_CONTROL)
#if ENABLED(AUTO_POWER_CONTROL)
#include "../../feature/power.h"
@@ -68,7 +68,7 @@
* a print without suicide...
*/
#if HAS_SUICIDE
- OUT_WRITE(SUICIDE_PIN, HIGH);
+ OUT_WRITE(SUICIDE_PIN, !SUICIDE_PIN_INVERTING);
#endif
#if DISABLED(AUTO_POWER_CONTROL)
@@ -81,7 +81,7 @@
#endif
}
-#endif // HAS_POWER_SWITCH
+#endif // ENABLED(PSU_CONTROL)
/**
* M81: Turn off Power, including Power Supply, if there is one.
@@ -105,11 +105,11 @@ void GcodeSuite::M81() {
#if HAS_SUICIDE
suicide();
- #elif HAS_POWER_SWITCH
+ #elif ENABLED(PSU_CONTROL)
PSU_OFF();
#endif
#if HAS_LCD_MENU
- LCD_MESSAGEPGM(MACHINE_NAME " " MSG_OFF ".");
+ LCD_MESSAGEPGM_P(PSTR(MACHINE_NAME " " MSG_OFF "."));
#endif
}
diff --git a/Marlin/src/gcode/feature/cancel/M486.cpp b/Marlin/src/gcode/feature/cancel/M486.cpp
new file mode 100644
index 000000000000..2fcb4840f6e7
--- /dev/null
+++ b/Marlin/src/gcode/feature/cancel/M486.cpp
@@ -0,0 +1,57 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+#include "../../../inc/MarlinConfig.h"
+
+#if ENABLED(CANCEL_OBJECTS)
+
+#include "../../gcode.h"
+#include "../../../feature/cancel_object.h"
+
+/**
+ * M486: A simple interface to cancel objects
+ *
+ * T[count] : Reset objects and/or set the count
+ * S : Start an object with the given index
+ * P : Cancel the object with the given index
+ * U : Un-cancel object with the given index
+ * C : Cancel the current object (the last index given by S)
+ * S-1 : Start a non-object like a brim or purge tower that should always print
+ */
+void GcodeSuite::M486() {
+
+ if (parser.seen('T')) {
+ cancelable.reset();
+ cancelable.object_count = parser.intval('T', 1);
+ }
+
+ if (parser.seen('S'))
+ cancelable.set_active_object(parser.value_int());
+
+ if (parser.seen('C')) cancelable.cancel_active_object();
+
+ if (parser.seen('P')) cancelable.cancel_object(parser.value_int());
+
+ if (parser.seen('U')) cancelable.uncancel_object(parser.value_int());
+}
+
+#endif // CANCEL_OBJECTS
diff --git a/Marlin/src/gcode/feature/digipot/M907-M910.cpp b/Marlin/src/gcode/feature/digipot/M907-M910.cpp
index 4f48bb77ed44..a7546b28339b 100644
--- a/Marlin/src/gcode/feature/digipot/M907-M910.cpp
+++ b/Marlin/src/gcode/feature/digipot/M907-M910.cpp
@@ -65,8 +65,10 @@ void GcodeSuite::M907() {
#if ENABLED(DIGIPOT_I2C)
// this one uses actual amps in floating point
LOOP_XYZE(i) if (parser.seenval(axis_codes[i])) digipot_i2c_set_current(i, parser.value_float());
- // for each additional extruder (named B,C,D,E..., channels 4,5,6,7...)
- for (uint8_t i = NUM_AXIS; i < DIGIPOT_I2C_NUM_CHANNELS; i++) if (parser.seenval('B' + i - (NUM_AXIS))) digipot_i2c_set_current(i, parser.value_float());
+ // Additional extruders use B,C,D for channels 4,5,6.
+ // TODO: Change these parameters because 'E' is used. B?
+ for (uint8_t i = E_AXIS + 1; i < DIGIPOT_I2C_NUM_CHANNELS; i++)
+ if (parser.seenval('B' + i - (E_AXIS + 1))) digipot_i2c_set_current(i, parser.value_float());
#endif
#if ENABLED(DAC_STEPPER_CURRENT)
diff --git a/Marlin/src/gcode/feature/leds/M7219.cpp b/Marlin/src/gcode/feature/leds/M7219.cpp
index c8257f65815a..c3d264353511 100644
--- a/Marlin/src/gcode/feature/leds/M7219.cpp
+++ b/Marlin/src/gcode/feature/leds/M7219.cpp
@@ -71,7 +71,7 @@ void GcodeSuite::M7219() {
}
else if (parser.seen('D')) {
const uint8_t uline = parser.value_byte() & 0x7,
- line = uline + parser.byteval('U') << 3;
+ line = uline + (parser.byteval('U') << 3);
if (line < MAX7219_LINES) {
max7219.led_line[line] = v;
return max7219.refresh_line(line);
diff --git a/Marlin/src/gcode/feature/pause/M701_M702.cpp b/Marlin/src/gcode/feature/pause/M701_M702.cpp
index 80a7f76d934b..b4bab7e86a26 100644
--- a/Marlin/src/gcode/feature/pause/M701_M702.cpp
+++ b/Marlin/src/gcode/feature/pause/M701_M702.cpp
@@ -102,15 +102,20 @@ void GcodeSuite::M701() {
#if ENABLED(PRUSA_MMU2)
mmu2.load_filament_to_nozzle(target_extruder);
#else
- constexpr float slow_load_length = FILAMENT_CHANGE_SLOW_LOAD_LENGTH;
- const float fast_load_length = ABS(parser.seen('L') ? parser.value_axis_units(E_AXIS)
- : fc_settings[active_extruder].load_length);
- load_filament(slow_load_length, fast_load_length, ADVANCED_PAUSE_PURGE_LENGTH, FILAMENT_CHANGE_ALERT_BEEPS,
- true, thermalManager.still_heating(target_extruder), PAUSE_MODE_LOAD_FILAMENT
- #if ENABLED(DUAL_X_CARRIAGE)
- , target_extruder
- #endif
- );
+ constexpr float purge_length = ADVANCED_PAUSE_PURGE_LENGTH,
+ slow_load_length = FILAMENT_CHANGE_SLOW_LOAD_LENGTH;
+ const float fast_load_length = ABS(parser.seen('L') ? parser.value_axis_units(E_AXIS)
+ : fc_settings[active_extruder].load_length);
+ load_filament(
+ slow_load_length, fast_load_length, purge_length,
+ FILAMENT_CHANGE_ALERT_BEEPS,
+ true, // show_lcd
+ thermalManager.still_heating(target_extruder), // pause_for_user
+ PAUSE_MODE_LOAD_FILAMENT // pause_mode
+ #if ENABLED(DUAL_X_CARRIAGE)
+ , target_extruder // Dual X target
+ #endif
+ );
#endif
// Restore Z axis
diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp
index c7c1ac28dfa5..b2477851f727 100644
--- a/Marlin/src/gcode/gcode.cpp
+++ b/Marlin/src/gcode/gcode.cpp
@@ -45,6 +45,10 @@ GcodeSuite gcode;
#include "../feature/power_loss_recovery.h"
#endif
+#if ENABLED(CANCEL_OBJECTS)
+ #include "../feature/cancel_object.h"
+#endif
+
#include "../Marlin.h" // for idle() and suspend_auto_report
millis_t GcodeSuite::previous_move_ms;
@@ -114,15 +118,34 @@ int8_t GcodeSuite::get_target_e_stepper_from_command() {
*/
void GcodeSuite::get_destination_from_command() {
xyze_bool_t seen = { false, false, false, false };
- LOOP_XYZE(i) {
+
+ #if ENABLED(CANCEL_OBJECTS)
+ const bool &skip_move = cancelable.skipping;
+ #else
+ constexpr bool skip_move = false;
+ #endif
+
+ // Get new XYZ position, whether absolute or relative
+ LOOP_XYZ(i) {
if ( (seen[i] = parser.seenval(axis_codes[i])) ) {
const float v = parser.value_axis_units((AxisEnum)i);
- destination[i] = axis_is_relative(AxisEnum(i)) ? current_position[i] + v : (i == E_AXIS) ? v : LOGICAL_TO_NATIVE(v, i);
+ if (skip_move)
+ destination[i] = current_position[i];
+ else
+ destination[i] = axis_is_relative(AxisEnum(i)) ? current_position[i] + v : LOGICAL_TO_NATIVE(v, i);
}
else
destination[i] = current_position[i];
}
+ // Get new E position, whether absolute or relative
+ if ( (seen.e = parser.seenval('E')) ) {
+ const float v = parser.value_axis_units(E_AXIS);
+ destination.e = axis_is_relative(E_AXIS) ? current_position.e + v : v;
+ }
+ else
+ destination.e = current_position.e;
+
#if ENABLED(POWER_LOSS_RECOVERY) && !PIN_EXISTS(POWER_LOSS)
// Only update power loss recovery on moves with E
if (recovery.enabled && IS_SD_PRINTING() && seen.e && (seen.x || seen.y))
@@ -133,7 +156,7 @@ void GcodeSuite::get_destination_from_command() {
feedrate_mm_s = parser.value_feedrate();
#if ENABLED(PRINTCOUNTER)
- if (!DEBUGGING(DRYRUN))
+ if (!DEBUGGING(DRYRUN) && !skip_move)
print_job_timer.incFilamentUsed(destination.e - current_position.e);
#endif
@@ -322,6 +345,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
break;
case 'M': switch (parser.codenum) {
+
#if HAS_RESUME_CONTINUE
case 0: // M0: Unconditional stop - Wait for user button press on LCD
case 1: M0_M1(); break; // M1: Conditional stop - Wait for user button press on LCD
@@ -446,7 +470,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
#if HAS_HEATED_CHAMBER
case 141: M141(); break; // M141: Set chamber temperature
- //case 191: M191(); break; // M191: Wait for chamber temperature to reach target
+ case 191: M191(); break; // M191: Wait for chamber temperature to reach target
#endif
#if ENABLED(AUTO_REPORT_TEMPERATURES) && HAS_TEMP_SENSOR
@@ -471,7 +495,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
#endif
#endif // BARICUDA
- #if HAS_POWER_SWITCH
+ #if ENABLED(PSU_CONTROL)
case 80: M80(); break; // M80: Turn on Power Supply
#endif
case 81: M81(); break; // M81: Turn off Power, including Power Supply, if possible
@@ -667,6 +691,10 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
case 428: M428(); break; // M428: Apply current_position to home_offset
#endif
+ #if ENABLED(CANCEL_OBJECTS)
+ case 486: M486(); break; // M486: Identify and cancel objects
+ #endif
+
case 500: M500(); break; // M500: Store settings in EEPROM
case 501: M501(); break; // M501: Read settings from EEPROM
case 502: M502(); break; // M502: Revert to default settings
diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h
index e47496a007ee..9532d5b58a45 100644
--- a/Marlin/src/gcode/gcode.h
+++ b/Marlin/src/gcode/gcode.h
@@ -213,6 +213,7 @@
* M422 - Set Z Stepper automatic alignment position using probe. X Y A (Requires Z_STEPPER_AUTO_ALIGN)
* M425 - Enable/Disable and tune backlash correction. (Requires BACKLASH_COMPENSATION and BACKLASH_GCODE)
* M428 - Set the home_offset based on the current_position. Nearest edge applies. (Disabled by NO_WORKSPACE_OFFSETS or DELTA)
+ * M486 - Identify and cancel objects. (Requires CANCEL_OBJECTS)
* M500 - Store parameters in EEPROM. (Requires EEPROM_SETTINGS)
* M501 - Restore parameters from EEPROM. (Requires EEPROM_SETTINGS)
* M502 - Revert to the default "factory settings". ** Does not write them to EEPROM! **
@@ -548,7 +549,7 @@ class GcodeSuite {
static void M78();
#endif
- #if HAS_POWER_SWITCH
+ #if ENABLED(PSU_CONTROL)
static void M80();
#endif
@@ -620,7 +621,7 @@ class GcodeSuite {
#if HAS_HEATED_CHAMBER
static void M141();
- //static void M191();
+ static void M191();
#endif
#if HOTENDS && HAS_LCD_MENU
@@ -796,6 +797,10 @@ class GcodeSuite {
static void M428();
#endif
+ #if ENABLED(CANCEL_OBJECTS)
+ static void M486();
+ #endif
+
static void M500();
static void M501();
static void M502();
diff --git a/Marlin/src/gcode/geometry/G92.cpp b/Marlin/src/gcode/geometry/G92.cpp
index 65ad06fe2c5b..2f69654b0e5c 100644
--- a/Marlin/src/gcode/geometry/G92.cpp
+++ b/Marlin/src/gcode/geometry/G92.cpp
@@ -33,12 +33,7 @@
*/
void GcodeSuite::G92() {
- bool didE = false;
- #if IS_SCARA || !HAS_POSITION_SHIFT
- bool didXYZ = false;
- #else
- constexpr bool didXYZ = false;
- #endif
+ bool sync_E = false, sync_XYZ = false;
#if USE_GCODE_SUBCODES
const uint8_t subcode_G92 = parser.subcode;
@@ -64,11 +59,7 @@ void GcodeSuite::G92() {
LOOP_XYZE(i) {
if (parser.seenval(axis_codes[i])) {
current_position[i] = parser.value_axis_units((AxisEnum)i);
- #if IS_SCARA || !HAS_POSITION_SHIFT
- if (i == E_AXIS) didE = true; else didXYZ = true;
- #elif HAS_POSITION_SHIFT
- if (i == E_AXIS) didE = true;
- #endif
+ if (i == E_AXIS) sync_E = true; else sync_XYZ = true;
}
}
} break;
@@ -81,12 +72,12 @@ void GcodeSuite::G92() {
d = v - current_position[i];
if (!NEAR_ZERO(d)) {
#if IS_SCARA || !HAS_POSITION_SHIFT
- if (i == E_AXIS) didE = true; else didXYZ = true;
+ if (i == E_AXIS) sync_E = true; else sync_XYZ = true;
current_position[i] = v; // Without workspaces revert to Marlin 1.0 behavior
#elif HAS_POSITION_SHIFT
if (i == E_AXIS) {
- didE = true;
- current_position.e = v; // When using coordinate spaces, only E is set directly
+ sync_E = true;
+ current_position.e = v; // When using coordinate spaces, only E is set directly
}
else {
position_shift[i] += d; // Other axes simply offset the coordinate space
@@ -105,8 +96,8 @@ void GcodeSuite::G92() {
coordinate_system[active_coordinate_system] = position_shift;
#endif
- if (didXYZ) sync_plan_position();
- else if (didE) sync_plan_position_e();
+ if (sync_XYZ) sync_plan_position();
+ else if (sync_E) sync_plan_position_e();
report_current_position();
}
diff --git a/Marlin/src/gcode/geometry/M206_M428.cpp b/Marlin/src/gcode/geometry/M206_M428.cpp
index e17f41f83540..6e2b46081c34 100644
--- a/Marlin/src/gcode/geometry/M206_M428.cpp
+++ b/Marlin/src/gcode/geometry/M206_M428.cpp
@@ -70,7 +70,7 @@ void GcodeSuite::M428() {
diff[i] = -current_position[i];
if (!WITHIN(diff[i], -20, 20)) {
SERIAL_ERROR_MSG(MSG_ERR_M428_TOO_FAR);
- LCD_ALERTMESSAGEPGM("Err: Too far!");
+ LCD_ALERTMESSAGEPGM_P(PSTR("Err: Too far!"));
BUZZ(200, 40);
return;
}
diff --git a/Marlin/src/gcode/host/M115.cpp b/Marlin/src/gcode/host/M115.cpp
index eb32119ef9cc..8871644ff132 100644
--- a/Marlin/src/gcode/host/M115.cpp
+++ b/Marlin/src/gcode/host/M115.cpp
@@ -112,7 +112,7 @@ void GcodeSuite::M115() {
// SOFTWARE_POWER (M80, M81)
cap_line(PSTR("SOFTWARE_POWER")
- #if HAS_POWER_SWITCH
+ #if ENABLED(PSU_CONTROL)
, true
#endif
);
diff --git a/Marlin/src/gcode/host/M119.cpp b/Marlin/src/gcode/host/M119.cpp
index ec7dde7fcca8..a13fa67b7946 100644
--- a/Marlin/src/gcode/host/M119.cpp
+++ b/Marlin/src/gcode/host/M119.cpp
@@ -28,6 +28,6 @@
*/
void GcodeSuite::M119() {
- endstops.M119();
+ endstops.report_states();
}
diff --git a/Marlin/src/gcode/host/M16.cpp b/Marlin/src/gcode/host/M16.cpp
index 94ae79b263bf..921915501165 100644
--- a/Marlin/src/gcode/host/M16.cpp
+++ b/Marlin/src/gcode/host/M16.cpp
@@ -33,7 +33,7 @@
void GcodeSuite::M16() {
if (strcmp_P(parser.string_arg, PSTR(MACHINE_NAME)))
- kill(PSTR(MSG_EXPECTED_PRINTER));
+ kill(GET_TEXT(MSG_EXPECTED_PRINTER));
}
diff --git a/Marlin/src/gcode/lcd/M0_M1.cpp b/Marlin/src/gcode/lcd/M0_M1.cpp
index 05fb7576fb9a..aca149abdc7b 100644
--- a/Marlin/src/gcode/lcd/M0_M1.cpp
+++ b/Marlin/src/gcode/lcd/M0_M1.cpp
@@ -80,7 +80,10 @@ void GcodeSuite::M0_M1() {
#elif ENABLED(EXTENSIBLE_UI)
- ExtUI::onUserConfirmRequired(has_message ? args : MSG_USERWAIT); // SRAM string
+ if (has_message)
+ ExtUI::onUserConfirmRequired(args); // Can this take an SRAM string??
+ else
+ ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_USERWAIT));
#else
@@ -98,7 +101,7 @@ void GcodeSuite::M0_M1() {
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("M0/1 Break Called"), PSTR("Continue"));
#endif
#if ENABLED(EXTENSIBLE_UI)
- ExtUI::onUserConfirmRequired(PSTR("M0/1 Break Called"));
+ ExtUI::onUserConfirmRequired_P(PSTR("M0/1 Break Called"));
#endif
if (ms > 0) {
diff --git a/Marlin/src/gcode/lcd/M73.cpp b/Marlin/src/gcode/lcd/M73.cpp
index 85fb7831ead2..1699c6a86035 100644
--- a/Marlin/src/gcode/lcd/M73.cpp
+++ b/Marlin/src/gcode/lcd/M73.cpp
@@ -38,8 +38,11 @@
* This has no effect during an SD print job
*/
void GcodeSuite::M73() {
- if (parser.seen('P') && !IS_SD_PRINTING())
- ui.set_progress(parser.value_byte());
+ if (parser.seen('P'))
+ ui.set_progress((PROGRESS_SCALE) > 1
+ ? parser.value_float() * (PROGRESS_SCALE)
+ : parser.value_byte()
+ );
}
#endif // LCD_SET_PROGRESS_MANUALLY
diff --git a/Marlin/src/gcode/motion/G2_G3.cpp b/Marlin/src/gcode/motion/G2_G3.cpp
index e856afff11ee..6fecbdc0cced 100644
--- a/Marlin/src/gcode/motion/G2_G3.cpp
+++ b/Marlin/src/gcode/motion/G2_G3.cpp
@@ -59,8 +59,8 @@ void plan_arc(
switch (gcode.workspace_plane) {
default:
case GcodeSuite::PLANE_XY: p_axis = X_AXIS; q_axis = Y_AXIS; l_axis = Z_AXIS; break;
- case GcodeSuite::PLANE_ZX: p_axis = Z_AXIS; q_axis = X_AXIS; l_axis = Y_AXIS; break;
case GcodeSuite::PLANE_YZ: p_axis = Y_AXIS; q_axis = Z_AXIS; l_axis = X_AXIS; break;
+ case GcodeSuite::PLANE_ZX: p_axis = Z_AXIS; q_axis = X_AXIS; l_axis = Y_AXIS; break;
}
#else
constexpr AxisEnum p_axis = X_AXIS, q_axis = Y_AXIS, l_axis = Z_AXIS;
@@ -242,19 +242,20 @@ void plan_arc(
* G2: Clockwise Arc
* G3: Counterclockwise Arc
*
- * This command has two forms: IJ-form and R-form.
+ * This command has two forms: IJ-form (JK, KI) and R-form.
*
- * - I specifies an X offset. J specifies a Y offset.
- * At least one of the IJ parameters is required.
- * X and Y can be omitted to do a complete circle.
- * The given XY is not error-checked. The arc ends
- * based on the angle of the destination.
- * Mixing I or J with R will throw an error.
+ * - Depending on the current Workspace Plane orientation,
+ * use parameters IJ/JK/KI to specify the XY/YZ/ZX offsets.
+ * At least one of the IJ/JK/KI parameters is required.
+ * XY/YZ/ZX can be omitted to do a complete circle.
+ * The given XY/YZ/ZX is not error-checked. The arc ends
+ * based on the angle of the destination.
+ * Mixing IJ/JK/KI with R will throw an error.
*
- * - R specifies the radius. X or Y is required.
- * Omitting both X and Y will throw an error.
- * X or Y must differ from the current XY.
- * Mixing R with I or J will throw an error.
+ * - R specifies the radius. X or Y (Y or Z / Z or X) is required.
+ * Omitting both XY/YZ/ZX will throw an error.
+ * XY/YZ/ZX must differ from the current XY/YZ/ZX.
+ * Mixing R with IJ/JK/KI will throw an error.
*
* - P specifies the number of full circles to do
* before the specified arc move.
@@ -284,18 +285,30 @@ void GcodeSuite::G2_G3(const bool clockwise) {
if (r) {
const xy_pos_t p1 = current_position, p2 = destination;
if (p1 != p2) {
- const xy_pos_t d = p2 - p1, m = (p1 + p2) * 0.5f; // XY distance and midpoint
- const float e = clockwise ^ (r < 0) ? -1 : 1, // clockwise -1/1, counterclockwise 1/-1
- len = d.magnitude(), // Total move length
- h = SQRT(sq(r) - sq(len * 0.5f)); // Distance to the arc pivot-point
- const xy_pos_t s = { d.x, -d.y }; // Inverse Slope of the perpendicular bisector
- arc_offset = m + s * RECIPROCAL(len) * e * h - p1; // The calculated offset
+ const xy_pos_t d2 = (p2 - p1) * 0.5f; // XY vector to midpoint of move from current
+ const float e = clockwise ^ (r < 0) ? -1 : 1, // clockwise -1/1, counterclockwise 1/-1
+ len = d2.magnitude(), // Distance to mid-point of move from current
+ h2 = (r - len) * (r + len), // factored to reduce rounding error
+ h = (h2 >= 0) ? SQRT(h2) : 0.0f; // Distance to the arc pivot-point from midpoint
+ const xy_pos_t s = { -d2.y, d2.x }; // Perpendicular bisector. (Divide by len for unit vector.)
+ arc_offset = d2 + s / len * e * h; // The calculated offset (mid-point if |r| <= len)
}
}
}
else {
- if (parser.seenval('I')) arc_offset.a = parser.value_linear_units();
- if (parser.seenval('J')) arc_offset.b = parser.value_linear_units();
+ #if ENABLED(CNC_WORKSPACE_PLANES)
+ char achar, bchar;
+ switch (gcode.workspace_plane) {
+ default:
+ case GcodeSuite::PLANE_XY: achar = 'I'; bchar = 'J'; break;
+ case GcodeSuite::PLANE_YZ: achar = 'J'; bchar = 'K'; break;
+ case GcodeSuite::PLANE_ZX: achar = 'K'; bchar = 'I'; break;
+ }
+ #else
+ constexpr char achar = 'I', bchar = 'J';
+ #endif
+ if (parser.seenval(achar)) arc_offset.a = parser.value_linear_units();
+ if (parser.seenval(bchar)) arc_offset.b = parser.value_linear_units();
}
if (arc_offset) {
diff --git a/Marlin/src/gcode/motion/M290.cpp b/Marlin/src/gcode/motion/M290.cpp
index 7bf274a18d54..895060fcf14b 100644
--- a/Marlin/src/gcode/motion/M290.cpp
+++ b/Marlin/src/gcode/motion/M290.cpp
@@ -124,7 +124,7 @@ void GcodeSuite::M290() {
" X", babystep.axis_total[X_AXIS],
" Y", babystep.axis_total[Y_AXIS],
#endif
- " Z", babystep.axis_total[Z_AXIS]
+ " Z", babystep.axis_total[BS_TODO_AXIS(Z_AXIS)]
);
}
#endif
diff --git a/Marlin/src/gcode/parser.cpp b/Marlin/src/gcode/parser.cpp
index 0840043e5dde..bcb3e69e3d7d 100644
--- a/Marlin/src/gcode/parser.cpp
+++ b/Marlin/src/gcode/parser.cpp
@@ -138,7 +138,9 @@ void GCodeParser::parse(char *p) {
switch (letter) {
case 'G': case 'M': case 'T':
-
+ #if ENABLED(CANCEL_OBJECTS)
+ case 'O':
+ #endif
// Skip spaces to get the numeric part
while (*p == ' ') p++;
@@ -222,8 +224,7 @@ void GCodeParser::parse(char *p) {
// Only use string_arg for these M codes
if (letter == 'M') switch (codenum) {
#if ENABLED(GCODE_MACROS)
- case 810: case 811: case 812: case 813: case 814:
- case 815: case 816: case 817: case 818: case 819:
+ case 810 ... 819:
#endif
#if ENABLED(EXPECTED_PRINTER_CHECK)
case 16:
@@ -231,7 +232,14 @@ void GCodeParser::parse(char *p) {
case 23: case 28: case 30: case 117: case 118: case 928: string_arg = p; return;
default: break;
}
-
+/*
+ #if ENABLED(CANCEL_OBJECTS)
+ if (letter == 'O') switch (codenum) {
+ case 1: string_arg = p; return;
+ default: break;
+ }
+ #endif
+*/
#if ENABLED(DEBUG_GCODE_PARSER)
const bool debug = codenum == 800;
#endif
diff --git a/Marlin/src/gcode/sdcard/M24_M25.cpp b/Marlin/src/gcode/sdcard/M24_M25.cpp
index 154a4f7c557a..d1a9c2f23f29 100644
--- a/Marlin/src/gcode/sdcard/M24_M25.cpp
+++ b/Marlin/src/gcode/sdcard/M24_M25.cpp
@@ -42,6 +42,8 @@
#include "../../feature/power_loss_recovery.h"
#endif
+#include "../../Marlin.h" // for startOrResumeJob
+
/**
* M24: Start or Resume SD Print
*/
@@ -54,14 +56,14 @@ void GcodeSuite::M24() {
#if ENABLED(PARK_HEAD_ON_PAUSE)
if (did_pause_print) {
- resume_print();
+ resume_print(); // will call print_job_timer.start()
return;
}
#endif
if (card.isFileOpen()) {
- card.startFileprint();
- print_job_timer.start();
+ card.startFileprint(); // SD card will now be read for commands
+ startOrResumeJob(); // Start (or resume) the print job timer
#if ENABLED(POWER_LOSS_RECOVERY)
recovery.prepare();
#endif
diff --git a/Marlin/src/gcode/sdcard/M32.cpp b/Marlin/src/gcode/sdcard/M32.cpp
index 7e838fe2f59b..7b180f441599 100644
--- a/Marlin/src/gcode/sdcard/M32.cpp
+++ b/Marlin/src/gcode/sdcard/M32.cpp
@@ -29,6 +29,8 @@
#include "../../module/printcounter.h"
#include "../../module/planner.h"
+#include "../../Marlin.h" // for startOrResumeJob
+
/**
* M32: Select file and start SD Print
*
@@ -52,7 +54,7 @@ void GcodeSuite::M32() {
card.startFileprint();
// Procedure calls count as normal print time.
- if (!call_procedure) print_job_timer.start();
+ if (!call_procedure) startOrResumeJob();
}
}
diff --git a/Marlin/src/gcode/stats/M75-M78.cpp b/Marlin/src/gcode/stats/M75-M78.cpp
index 85d36daa9b85..8fcc44028503 100644
--- a/Marlin/src/gcode/stats/M75-M78.cpp
+++ b/Marlin/src/gcode/stats/M75-M78.cpp
@@ -24,11 +24,13 @@
#include "../../module/printcounter.h"
#include "../../lcd/ultralcd.h"
+#include "../../Marlin.h" // for startOrResumeJob
+
/**
* M75: Start print timer
*/
void GcodeSuite::M75() {
- print_job_timer.start();
+ startOrResumeJob();
}
/**
@@ -42,7 +44,7 @@ void GcodeSuite::M76() {
* M77: Stop print timer
*/
void GcodeSuite::M77() {
- print_job_timer.stop();
+ print_job_timer.stop();
}
#if ENABLED(PRINTCOUNTER)
diff --git a/Marlin/src/gcode/temperature/M104_M109.cpp b/Marlin/src/gcode/temperature/M104_M109.cpp
index 86da46a89e34..59394dabfa84 100644
--- a/Marlin/src/gcode/temperature/M104_M109.cpp
+++ b/Marlin/src/gcode/temperature/M104_M109.cpp
@@ -29,10 +29,14 @@
#include "../../module/motion.h"
#include "../../module/planner.h"
#include "../../lcd/ultralcd.h"
-#include "../../Marlin.h"
+
+#include "../../Marlin.h" // for startOrResumeJob, etc.
#if ENABLED(PRINTJOB_TIMER_AUTOSTART)
#include "../../module/printcounter.h"
+ #if ENABLED(CANCEL_OBJECTS)
+ #include "../../feature/cancel_object.h"
+ #endif
#endif
#if ENABLED(SINGLENOZZLE)
@@ -126,7 +130,7 @@ void GcodeSuite::M109() {
ui.reset_status();
}
else
- print_job_timer.start();
+ startOrResumeJob();
#endif
#if HAS_DISPLAY
diff --git a/Marlin/src/gcode/temperature/M105.cpp b/Marlin/src/gcode/temperature/M105.cpp
index bf11017a5728..3dbbb5eb7b4e 100644
--- a/Marlin/src/gcode/temperature/M105.cpp
+++ b/Marlin/src/gcode/temperature/M105.cpp
@@ -31,16 +31,21 @@ void GcodeSuite::M105() {
const int8_t target_extruder = get_target_extruder_from_command();
if (target_extruder < 0) return;
+ SERIAL_ECHOPGM(MSG_OK);
+
#if HAS_TEMP_SENSOR
- SERIAL_ECHOPGM(MSG_OK);
+
thermalManager.print_heater_states(target_extruder
#if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
, parser.boolval('R')
#endif
);
- #else // !HAS_TEMP_SENSOR
- SERIAL_ERROR_MSG(MSG_ERR_NO_THERMISTORS);
- #endif
- SERIAL_EOL();
+ SERIAL_EOL();
+
+ #else
+
+ SERIAL_ECHOLNPGM(" T:0"); // Some hosts send M105 to test the serial connection
+
+ #endif
}
diff --git a/Marlin/src/gcode/temperature/M140_M190.cpp b/Marlin/src/gcode/temperature/M140_M190.cpp
index a0d132f6b7b2..67a423a2de68 100644
--- a/Marlin/src/gcode/temperature/M140_M190.cpp
+++ b/Marlin/src/gcode/temperature/M140_M190.cpp
@@ -37,7 +37,7 @@
#include "../../feature/leds/leds.h"
#endif
-#include "../../Marlin.h" // for wait_for_heatup and idle()
+#include "../../Marlin.h" // for wait_for_heatup, idle, startOrResumeJob
/**
* M140: Set bed temperature
@@ -59,12 +59,12 @@ void GcodeSuite::M190() {
thermalManager.setTargetBed(parser.value_celsius());
#if ENABLED(PRINTJOB_TIMER_AUTOSTART)
if (parser.value_celsius() > BED_MINTEMP)
- print_job_timer.start();
+ startOrResumeJob();
#endif
}
else return;
- ui.set_status_P(thermalManager.isHeatingBed() ? PSTR(MSG_BED_HEATING) : PSTR(MSG_BED_COOLING));
+ ui.set_status_P(thermalManager.isHeatingBed() ? GET_TEXT(MSG_BED_HEATING) : GET_TEXT(MSG_BED_COOLING));
thermalManager.wait_for_bed(no_wait_for_cooling);
}
diff --git a/Marlin/src/gcode/temperature/M141_M191.cpp b/Marlin/src/gcode/temperature/M141_M191.cpp
index 53deb25d2f6b..279038e03da9 100644
--- a/Marlin/src/gcode/temperature/M141_M191.cpp
+++ b/Marlin/src/gcode/temperature/M141_M191.cpp
@@ -27,7 +27,6 @@
#include "../gcode.h"
#include "../../module/temperature.h"
-/*
#include "../../module/motion.h"
#include "../../lcd/ultralcd.h"
@@ -39,8 +38,7 @@
#include "../../feature/leds/leds.h"
#endif
-#include "../../Marlin.h" // for wait_for_heatup and idle()
-*/
+#include "../../Marlin.h" // for wait_for_heatup, idle, startOrResumeJob
/**
* M141: Set chamber temperature
@@ -54,7 +52,6 @@ void GcodeSuite::M141() {
* M191: Sxxx Wait for chamber current temp to reach target temp. Waits only when heating
* Rxxx Wait for chamber current temp to reach target temp. Waits when heating and cooling
*/
-/*
void GcodeSuite::M191() {
if (DEBUGGING(DRYRUN)) return;
@@ -63,15 +60,16 @@ void GcodeSuite::M191() {
thermalManager.setTargetChamber(parser.value_celsius());
#if ENABLED(PRINTJOB_TIMER_AUTOSTART)
if (parser.value_celsius() > BED_MINTEMP)
- print_job_timer.start();
+ startOrResumeJob();
#endif
}
else return;
- lcd_setstatusPGM(thermalManager.isHeatingChamber() ? PSTR(MSG_CHAMBER_HEATING) : PSTR(MSG_CHAMBER_COOLING));
-
- thermalManager.wait_for_chamber(no_wait_for_cooling);
+ const bool is_heating = thermalManager.isHeatingChamber();
+ if (is_heating || !no_wait_for_cooling) {
+ lcd_setstatusPGM(is_heating ? GET_TEXT(MSG_CHAMBER_HEATING) : GET_TEXT(MSG_CHAMBER_COOLING));
+ thermalManager.wait_for_chamber(false);
+ }
}
-*/
#endif // HAS_HEATED_CHAMBER
diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h
index eb87495a1053..221fff4d9f31 100644
--- a/Marlin/src/inc/Conditionals_LCD.h
+++ b/Marlin/src/inc/Conditionals_LCD.h
@@ -120,7 +120,7 @@
#define DOGLCD
#define IS_ULTIPANEL
#define LED_COLORS_REDUCE_GREEN
- #if HAS_POWER_SWITCH && EITHER(FYSETC_MINI_12864_2_0, FYSETC_MINI_12864_2_1)
+ #if ENABLED(PSU_CONTROL) && EITHER(FYSETC_MINI_12864_2_0, FYSETC_MINI_12864_2_1)
#define LED_BACKLIGHT_TIMEOUT 10000
#endif
@@ -420,7 +420,6 @@
#if EITHER(SINGLENOZZLE, MIXING_EXTRUDER) // One hotend, one thermistor, no XY offset
#undef HOTENDS
#define HOTENDS 1
- #undef TEMP_SENSOR_1_AS_REDUNDANT
#undef HOTEND_OFFSET_X
#undef HOTEND_OFFSET_Y
#endif
@@ -505,8 +504,8 @@
#define PROBE_SELECTED (HAS_BED_PROBE || EITHER(PROBE_MANUALLY, MESH_BED_LEVELING))
#if HAS_BED_PROBE
- #define USES_Z_MIN_PROBE_ENDSTOP DISABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
- #define HOMING_Z_WITH_PROBE (Z_HOME_DIR < 0 && !USES_Z_MIN_PROBE_ENDSTOP)
+ #define HAS_CUSTOM_PROBE_PIN DISABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
+ #define HOMING_Z_WITH_PROBE (Z_HOME_DIR < 0 && !HAS_CUSTOM_PROBE_PIN)
#ifndef Z_PROBE_LOW_POINT
#define Z_PROBE_LOW_POINT -5
#endif
@@ -529,13 +528,14 @@
#define GRID_MAX_POINTS ((GRID_MAX_POINTS_X) * (GRID_MAX_POINTS_Y))
#endif
-#define HAS_SOFTWARE_ENDSTOPS EITHER(MIN_SOFTWARE_ENDSTOPS, MAX_SOFTWARE_ENDSTOPS)
-#define HAS_RESUME_CONTINUE ANY(EXTENSIBLE_UI, NEWPANEL, EMERGENCY_PARSER)
-#define HAS_COLOR_LEDS ANY(BLINKM, RGB_LED, RGBW_LED, PCA9632, PCA9533, NEOPIXEL_LED)
-#define HAS_LEDS_OFF_FLAG (BOTH(PRINTER_EVENT_LEDS, SDSUPPORT) && HAS_RESUME_CONTINUE)
-#define HAS_PRINT_PROGRESS EITHER(SDSUPPORT, LCD_SET_PROGRESS_MANUALLY)
-#define HAS_SERVICE_INTERVALS (ENABLED(PRINTCOUNTER) && (SERVICE_INTERVAL_1 > 0 || SERVICE_INTERVAL_2 > 0 || SERVICE_INTERVAL_3 > 0))
-#define HAS_FILAMENT_SENSOR ENABLED(FILAMENT_RUNOUT_SENSOR)
+#define HAS_SOFTWARE_ENDSTOPS EITHER(MIN_SOFTWARE_ENDSTOPS, MAX_SOFTWARE_ENDSTOPS)
+#define HAS_RESUME_CONTINUE ANY(EXTENSIBLE_UI, NEWPANEL, EMERGENCY_PARSER)
+#define HAS_COLOR_LEDS ANY(BLINKM, RGB_LED, RGBW_LED, PCA9632, PCA9533, NEOPIXEL_LED)
+#define HAS_LEDS_OFF_FLAG (BOTH(PRINTER_EVENT_LEDS, SDSUPPORT) && HAS_RESUME_CONTINUE)
+#define HAS_PRINT_PROGRESS EITHER(SDSUPPORT, LCD_SET_PROGRESS_MANUALLY)
+#define HAS_PRINT_PROGRESS_PERMYRIAD (HAS_PRINT_PROGRESS && EITHER(PRINT_PROGRESS_SHOW_DECIMALS, SHOW_REMAINING_TIME))
+#define HAS_SERVICE_INTERVALS (ENABLED(PRINTCOUNTER) && (SERVICE_INTERVAL_1 > 0 || SERVICE_INTERVAL_2 > 0 || SERVICE_INTERVAL_3 > 0))
+#define HAS_FILAMENT_SENSOR ENABLED(FILAMENT_RUNOUT_SENSOR)
#define Z_MULTI_STEPPER_DRIVERS EITHER(Z_DUAL_STEPPER_DRIVERS, Z_TRIPLE_STEPPER_DRIVERS)
#define Z_MULTI_ENDSTOPS EITHER(Z_DUAL_ENDSTOPS, Z_TRIPLE_ENDSTOPS)
@@ -565,6 +565,12 @@
#define BOOT_MARLIN_LOGO_SMALL
#endif
-#define IS_RE_ARM_BOARD (MB(RAMPS_14_RE_ARM_EFB) || MB(RAMPS_14_RE_ARM_EEB) || MB(RAMPS_14_RE_ARM_EFF) || MB(RAMPS_14_RE_ARM_EEF) || MB(RAMPS_14_RE_ARM_SF))
+#define IS_RE_ARM_BOARD MB(RAMPS_14_RE_ARM_EFB, RAMPS_14_RE_ARM_EEB, RAMPS_14_RE_ARM_EFF, RAMPS_14_RE_ARM_EEF, RAMPS_14_RE_ARM_SF)
#define HAS_SDCARD_CONNECTION EITHER(TARGET_LPC1768, ADAFRUIT_GRAND_CENTRAL_M4)
+
+#define HAS_LINEAR_E_JERK (DISABLED(CLASSIC_JERK) && ENABLED(LIN_ADVANCE))
+
+#ifndef SPI_SPEED
+ #define SPI_SPEED SPI_FULL_SPEED
+#endif
diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h
index b05614a2c91e..df13f55fc52c 100644
--- a/Marlin/src/inc/Conditionals_post.h
+++ b/Marlin/src/inc/Conditionals_post.h
@@ -43,7 +43,8 @@
#define NOT_A_PIN 0 // For PINS_DEBUGGING
#endif
-#define HAS_CLASSIC_JERK (IS_KINEMATIC || DISABLED(JUNCTION_DEVIATION))
+#define HAS_CLASSIC_JERK (ENABLED(CLASSIC_JERK) || IS_KINEMATIC)
+#define HAS_CLASSIC_E_JERK (HAS_CLASSIC_JERK && DISABLED(LIN_ADVANCE))
/**
* Axis lengths and center
@@ -220,11 +221,6 @@
#ifndef Z_SAFE_HOMING_Y_POINT
#define Z_SAFE_HOMING_Y_POINT _SAFE_POINT(Y)
#endif
- #define X_TILT_FULCRUM Z_SAFE_HOMING_X_POINT
- #define Y_TILT_FULCRUM Z_SAFE_HOMING_Y_POINT
-#else
- #define X_TILT_FULCRUM X_HOME_POS
- #define Y_TILT_FULCRUM Y_HOME_POS
#endif
/**
@@ -337,8 +333,6 @@
#endif
#endif
-#define HAS_POWER_SWITCH (ENABLED(PSU_CONTROL) && PIN_EXISTS(PS_ON))
-
/**
* Temp Sensor defines
*/
@@ -829,12 +823,12 @@
// Is an endstop plug used for the Z2 endstop or the bed probe?
#define IS_Z2_OR_PROBE(A,M) ( \
(Z_MULTI_ENDSTOPS && Z2_USE_ENDSTOP == _##A##M##_) \
- || (USES_Z_MIN_PROBE_ENDSTOP && Z_MIN_PROBE_PIN == A##_##M##_PIN ) )
+ || (HAS_CUSTOM_PROBE_PIN && Z_MIN_PROBE_PIN == A##_##M##_PIN ) )
// Is an endstop plug used for the Z3 endstop or the bed probe?
#define IS_Z3_OR_PROBE(A,M) ( \
(ENABLED(Z_TRIPLE_ENDSTOPS) && Z3_USE_ENDSTOP == _##A##M##_) \
- || (USES_Z_MIN_PROBE_ENDSTOP && Z_MIN_PROBE_PIN == A##_##M##_PIN ) )
+ || (HAS_CUSTOM_PROBE_PIN && Z_MIN_PROBE_PIN == A##_##M##_PIN ) )
/**
* Set ENDSTOPPULLUPS for active endstop switches
@@ -1009,7 +1003,7 @@
#define HAS_Z2_MAX (PIN_EXISTS(Z2_MAX))
#define HAS_Z3_MIN (PIN_EXISTS(Z3_MIN))
#define HAS_Z3_MAX (PIN_EXISTS(Z3_MAX))
-#define HAS_Z_MIN_PROBE_PIN (USES_Z_MIN_PROBE_ENDSTOP && PIN_EXISTS(Z_MIN_PROBE))
+#define HAS_Z_MIN_PROBE_PIN (HAS_CUSTOM_PROBE_PIN && PIN_EXISTS(Z_MIN_PROBE))
#define HAS_CALIBRATION_PIN (PIN_EXISTS(CALIBRATION))
// ADC Temp Sensors (Thermistor or Thermocouple with amplifier ADC interface)
@@ -1067,7 +1061,7 @@
#define WATCH_CHAMBER (HAS_HEATED_CHAMBER && ENABLED(THERMAL_PROTECTION_CHAMBER) && WATCH_CHAMBER_TEMP_PERIOD > 0)
// Auto fans
-#define HAS_AUTO_FAN_0 (PIN_EXISTS(E0_AUTO_FAN))
+#define HAS_AUTO_FAN_0 (HOTENDS > 0 && PIN_EXISTS(E0_AUTO_FAN))
#define HAS_AUTO_FAN_1 (HOTENDS > 1 && PIN_EXISTS(E1_AUTO_FAN))
#define HAS_AUTO_FAN_2 (HOTENDS > 2 && PIN_EXISTS(E2_AUTO_FAN))
#define HAS_AUTO_FAN_3 (HOTENDS > 3 && PIN_EXISTS(E3_AUTO_FAN))
@@ -1076,14 +1070,9 @@
#define HAS_AUTO_CHAMBER_FAN (HAS_TEMP_CHAMBER && PIN_EXISTS(CHAMBER_AUTO_FAN))
#define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3 || HAS_AUTO_FAN_4 || HAS_AUTO_FAN_5 || HAS_AUTO_CHAMBER_FAN)
+#define _FANOVERLAP(A,B) (A##_AUTO_FAN_PIN == E##B##_AUTO_FAN_PIN)
#if HAS_AUTO_FAN
- #define AUTO_CHAMBER_IS_0 (CHAMBER_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
- #define AUTO_CHAMBER_IS_1 (CHAMBER_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
- #define AUTO_CHAMBER_IS_2 (CHAMBER_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
- #define AUTO_CHAMBER_IS_3 (CHAMBER_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
- #define AUTO_CHAMBER_IS_4 (CHAMBER_AUTO_FAN_PIN == E4_AUTO_FAN_PIN)
- #define AUTO_CHAMBER_IS_5 (CHAMBER_AUTO_FAN_PIN == E5_AUTO_FAN_PIN)
- #define AUTO_CHAMBER_IS_E (AUTO_CHAMBER_IS_0 || AUTO_CHAMBER_IS_1 || AUTO_CHAMBER_IS_2 || AUTO_CHAMBER_IS_3 || AUTO_CHAMBER_IS_4 || AUTO_CHAMBER_IS_5)
+ #define AUTO_CHAMBER_IS_E (_FANOVERLAP(CHAMBER,0) || _FANOVERLAP(CHAMBER,1) || _FANOVERLAP(CHAMBER,2) || _FANOVERLAP(CHAMBER,3) || _FANOVERLAP(CHAMBER,4) || _FANOVERLAP(CHAMBER,5))
#endif
#if !HAS_AUTO_CHAMBER_FAN || AUTO_CHAMBER_IS_E
@@ -1334,6 +1323,17 @@
#define FAST_PWM_FAN_FREQUENCY ((F_CPU) / (2 * 255 * 1)) // Fan frequency default
#endif
+/**
+ * MIN/MAX case light PWM scaling
+ */
+#if HAS_CASE_LIGHT
+ #ifndef CASE_LIGHT_MAX_PWM
+ #define CASE_LIGHT_MAX_PWM 255
+ #elif !WITHIN(CASE_LIGHT_MAX_PWM, 1, 255)
+ #error "CASE_LIGHT_MAX_PWM must be a value from 1 to 255."
+ #endif
+#endif
+
/**
* Bed Probe dependencies
*/
@@ -1559,8 +1559,8 @@
#endif // MESH_BED_LEVELING || AUTO_BED_LEVELING_UBL
-#if ALL(PROBE_PT_1_X, PROBE_PT_2_X, PROBE_PT_3_X, PROBE_PT_1_Y, PROBE_PT_2_Y, PROBE_PT_3_Y)
- #define HAS_FIXED_3POINT;
+#if (defined(PROBE_PT_1_X) && defined(PROBE_PT_2_X) && defined(PROBE_PT_3_X) && defined(PROBE_PT_1_Y) && defined(PROBE_PT_2_Y) && defined(PROBE_PT_3_Y))
+ #define HAS_FIXED_3POINT
#endif
#if EITHER(AUTO_BED_LEVELING_UBL, AUTO_BED_LEVELING_3POINT) && IS_KINEMATIC
@@ -1766,23 +1766,25 @@
#define Z_STEPPER_COUNT 1
#endif
-// Get LCD character width/height, which may be overridden by pins, configs, etc.
-#ifndef LCD_WIDTH
- #if HAS_GRAPHICAL_LCD
- #define LCD_WIDTH 21
- #elif ENABLED(ULTIPANEL)
- #define LCD_WIDTH 20
- #elif HAS_SPI_LCD
- #define LCD_WIDTH 16
+#if HAS_SPI_LCD
+ // Get LCD character width/height, which may be overridden by pins, configs, etc.
+ #ifndef LCD_WIDTH
+ #if HAS_GRAPHICAL_LCD
+ #define LCD_WIDTH 21
+ #elif ENABLED(ULTIPANEL)
+ #define LCD_WIDTH 20
+ #else
+ #define LCD_WIDTH 16
+ #endif
#endif
-#endif
-#ifndef LCD_HEIGHT
- #if HAS_GRAPHICAL_LCD
- #define LCD_HEIGHT 5
- #elif ENABLED(ULTIPANEL)
- #define LCD_HEIGHT 4
- #elif HAS_SPI_LCD
- #define LCD_HEIGHT 2
+ #ifndef LCD_HEIGHT
+ #if HAS_GRAPHICAL_LCD
+ #define LCD_HEIGHT 5
+ #elif ENABLED(ULTIPANEL)
+ #define LCD_HEIGHT 4
+ #else
+ #define LCD_HEIGHT 2
+ #endif
#endif
#endif
@@ -1804,3 +1806,10 @@
#if !NUM_SERIAL
#undef BAUD_RATE_GCODE
#endif
+
+#if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ #undef Z_STEPPER_ALIGN_AMP
+#endif
+#ifndef Z_STEPPER_ALIGN_AMP
+ #define Z_STEPPER_ALIGN_AMP 1.0
+#endif
diff --git a/Marlin/src/inc/MarlinConfigPre.h b/Marlin/src/inc/MarlinConfigPre.h
index e34b70376e1f..19427c4c1b4d 100644
--- a/Marlin/src/inc/MarlinConfigPre.h
+++ b/Marlin/src/inc/MarlinConfigPre.h
@@ -34,9 +34,21 @@
#include "../core/boards.h"
#include "../core/macros.h"
-#include "Version.h"
#include "../../Configuration.h"
+
+#ifdef CUSTOM_VERSION_FILE
+ #if defined(__has_include)
+ #if __has_include(XSTR(../../CUSTOM_VERSION_FILE))
+ #include XSTR(../../CUSTOM_VERSION_FILE)
+ #endif
+ #else
+ #include XSTR(../../CUSTOM_VERSION_FILE)
+ #endif
+#endif
+
+#include "Version.h"
+
#include "Conditionals_LCD.h"
#include HAL_PATH(../HAL, inc/Conditionals_LCD.h)
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index f4c3b2d12476..3794f98b0d67 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -74,7 +74,9 @@
#elif defined(CUSTOM_MENDEL_NAME)
#error "CUSTOM_MENDEL_NAME is now CUSTOM_MACHINE_NAME. Please update your configuration."
#elif defined(HAS_AUTOMATIC_VERSIONING)
- #error "HAS_AUTOMATIC_VERSIONING is now USE_AUTOMATIC_VERSIONING. Please update your configuration."
+ #error "HAS_AUTOMATIC_VERSIONING is now CUSTOM_VERSION_FILE. Please update your configuration."
+#elif defined(USE_AUTOMATIC_VERSIONING)
+ #error "USE_AUTOMATIC_VERSIONING is now CUSTOM_VERSION_FILE. Please update your configuration."
#elif defined(SDSLOW)
#error "SDSLOW deprecated. Set SPI_SPEED to SPI_HALF_SPEED instead."
#elif defined(SDEXTRASLOW)
@@ -310,7 +312,7 @@
#error "LEVEL_BED_CORNERS requires a LEVEL_CORNERS_INSET value. Please update your Configuration.h."
#elif defined(BEZIER_JERK_CONTROL)
#error "BEZIER_JERK_CONTROL is now S_CURVE_ACCELERATION. Please update your configuration."
-#elif defined(JUNCTION_DEVIATION_FACTOR)
+#elif DISABLED(CLASSIC_JERK) && defined(JUNCTION_DEVIATION_FACTOR)
#error "JUNCTION_DEVIATION_FACTOR is now JUNCTION_DEVIATION_MM. Please update your configuration."
#elif defined(JUNCTION_ACCELERATION_FACTOR)
#error "JUNCTION_ACCELERATION_FACTOR is obsolete. Delete it from Configuration_adv.h."
@@ -404,6 +406,10 @@
#error "(MIN|MAX)_PROBE_[XY] are now calculated at runtime. Please remove them from Configuration.h."
#elif defined(Z_STEPPER_ALIGN_X) || defined(Z_STEPPER_ALIGN_X)
#error "Z_STEPPER_ALIGN_X and Z_STEPPER_ALIGN_Y are now combined as Z_STEPPER_ALIGN_XY. Please update your Configuration_adv.h."
+#elif defined(JUNCTION_DEVIATION)
+ #error "JUNCTION_DEVIATION is no longer required. (See CLASSIC_JERK). Please remove it from Configuration.h."
+#elif defined(BABYSTEP_MULTIPLICATOR)
+ #error "BABYSTEP_MULTIPLICATOR is now BABYSTEP_MULTIPLICATOR_[XY|Z]. Please update Configuration_adv.h."
#endif
#define BOARD_MKS_13 -1000
@@ -413,6 +419,7 @@
#define BOARD_BIQU_SKR_V1_1 -1004
#define BOARD_STM32F1R -1005
#define BOARD_STM32F103R -1006
+#define BOARD_ESP32 -1007
#if MB(MKS_13)
#error "BOARD_MKS_13 has been renamed BOARD_MKS_GEN_13. Please update your configuration."
#elif MB(TRIGORILLA)
@@ -427,6 +434,8 @@
#error "BOARD_STM32F1R has been renamed BOARD_STM32F103RE. Please update your configuration."
#elif MB(STM32F103R)
#error "BOARD_STM32F103R has been renamed BOARD_STM32F103RE. Please update your configuration."
+#elif MOTHERBOARD == BOARD_ESP32
+ #error "BOARD_ESP32 has been renamed BOARD_ESPRESSIF_ESP32. Please update your configuration."
#endif
#undef BOARD_MKS_13
#undef BOARD_TRIGORILLA
@@ -435,6 +444,7 @@
#undef BOARD_BIQU_SKR_V1_1
#undef BOARD_STM32F1R
#undef BOARD_STM32F103R
+#undef BOARD_ESP32
/**
* Marlin release, version and default string
@@ -735,10 +745,6 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
#error "Marlin supports a maximum of 6 EXTRUDERS."
#endif
- #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
- #error "EXTRUDERS must be 1 with TEMP_SENSOR_1_AS_REDUNDANT."
- #endif
-
#if ENABLED(HEATERS_PARALLEL)
#error "EXTRUDERS must be 1 with HEATERS_PARALLEL."
#endif
@@ -1040,10 +1046,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
#endif
/**
- * Junction deviation is not compatible with kinematic systems.
+ * Junction deviation is incompatible with kinematic systems.
*/
-#if ENABLED(JUNCTION_DEVIATION) && IS_KINEMATIC
- #error "Junction deviation is only compatible with Cartesians."
+#if DISABLED(CLASSIC_JERK) && IS_KINEMATIC
+ #error "CLASSIC_JERK is required for DELTA and SCARA."
#endif
/**
@@ -1270,7 +1276,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
#endif
#if HAS_MESH
- #if DISABLED(JUNCTION_DEVIATION)
+ #if HAS_CLASSIC_JERK
static_assert(DEFAULT_ZJERK > 0.1, "Low DEFAULT_ZJERK values are incompatible with mesh-based leveling.");
#endif
#elif ENABLED(G26_MESH_VALIDATION)
@@ -1493,6 +1499,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
#error "TEMP_SENSOR_1 is required with 2 or more HOTENDS."
#elif !ANY_PIN(TEMP_1, MAX6675_SS2)
#error "TEMP_1_PIN not defined for this board."
+ #elif ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
+ #error "HOTENDS must be 1 with TEMP_SENSOR_1_AS_REDUNDANT."
#endif
#if HOTENDS > 2
#if TEMP_SENSOR_2 == 0
@@ -1583,7 +1591,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
/**
* LED Backlight Timeout
*/
-#if defined(LED_BACKLIGHT_TIMEOUT) && !(EITHER(FYSETC_MINI_12864_2_0, FYSETC_MINI_12864_2_1) && HAS_POWER_SWITCH)
+#if defined(LED_BACKLIGHT_TIMEOUT) && !(EITHER(FYSETC_MINI_12864_2_0, FYSETC_MINI_12864_2_1) && ENABLED(PSU_CONTROL))
#error "LED_BACKLIGHT_TIMEOUT requires a FYSETC Mini Panel and a Power Switch."
#endif
@@ -2233,27 +2241,63 @@ constexpr float sanity_arr_1[] = DEFAULT_AXIS_STEPS_PER_UNIT,
#define _ARR_TEST(N,I) (sanity_arr_##N[_MIN(I,int(COUNT(sanity_arr_##N))-1)] > 0)
-static_assert(COUNT(sanity_arr_1) >= XYZE, "DEFAULT_AXIS_STEPS_PER_UNIT requires X, Y, Z and E elements.");
+static_assert(COUNT(sanity_arr_1) >= XYZE, "DEFAULT_AXIS_STEPS_PER_UNIT requires X, Y, Z and E elements.");
static_assert(COUNT(sanity_arr_1) <= XYZE_N, "DEFAULT_AXIS_STEPS_PER_UNIT has too many elements. (Did you forget to enable DISTINCT_E_FACTORS?)");
static_assert( _ARR_TEST(1,0) && _ARR_TEST(1,1) && _ARR_TEST(1,2)
&& _ARR_TEST(1,3) && _ARR_TEST(1,4) && _ARR_TEST(1,5)
&& _ARR_TEST(1,6) && _ARR_TEST(1,7) && _ARR_TEST(1,8),
"DEFAULT_AXIS_STEPS_PER_UNIT values must be positive.");
-static_assert(COUNT(sanity_arr_2) >= XYZE, "DEFAULT_MAX_FEEDRATE requires X, Y, Z and E elements.");
+static_assert(COUNT(sanity_arr_2) >= XYZE, "DEFAULT_MAX_FEEDRATE requires X, Y, Z and E elements.");
static_assert(COUNT(sanity_arr_2) <= XYZE_N, "DEFAULT_MAX_FEEDRATE has too many elements. (Did you forget to enable DISTINCT_E_FACTORS?)");
static_assert( _ARR_TEST(2,0) && _ARR_TEST(2,1) && _ARR_TEST(2,2)
&& _ARR_TEST(2,3) && _ARR_TEST(2,4) && _ARR_TEST(2,5)
&& _ARR_TEST(2,6) && _ARR_TEST(2,7) && _ARR_TEST(2,8),
"DEFAULT_MAX_FEEDRATE values must be positive.");
-static_assert(COUNT(sanity_arr_3) >= XYZE, "DEFAULT_MAX_ACCELERATION requires X, Y, Z and E elements.");
+static_assert(COUNT(sanity_arr_3) >= XYZE, "DEFAULT_MAX_ACCELERATION requires X, Y, Z and E elements.");
static_assert(COUNT(sanity_arr_3) <= XYZE_N, "DEFAULT_MAX_ACCELERATION has too many elements. (Did you forget to enable DISTINCT_E_FACTORS?)");
static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
&& _ARR_TEST(3,3) && _ARR_TEST(3,4) && _ARR_TEST(3,5)
&& _ARR_TEST(3,6) && _ARR_TEST(3,7) && _ARR_TEST(3,8),
"DEFAULT_MAX_ACCELERATION values must be positive.");
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #ifdef MAX_ACCEL_EDIT_VALUES
+ constexpr float sanity_arr_4[] = MAX_ACCEL_EDIT_VALUES;
+ static_assert(COUNT(sanity_arr_4) >= XYZE, "MAX_ACCEL_EDIT_VALUES requires X, Y, Z and E elements.");
+ static_assert(COUNT(sanity_arr_4) <= XYZE, "MAX_ACCEL_EDIT_VALUES has too many elements. X, Y, Z and E elements only.");
+ static_assert( _ARR_TEST(4,0) && _ARR_TEST(4,1) && _ARR_TEST(4,2)
+ && _ARR_TEST(4,3) && _ARR_TEST(4,4) && _ARR_TEST(4,5)
+ && _ARR_TEST(4,6) && _ARR_TEST(4,7) && _ARR_TEST(4,8),
+ "MAX_ACCEL_EDIT_VALUES values must be positive.");
+ #endif
+#endif
+
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #ifdef MAX_FEEDRATE_EDIT_VALUES
+ constexpr float sanity_arr_5[] = MAX_FEEDRATE_EDIT_VALUES;
+ static_assert(COUNT(sanity_arr_5) >= XYZE, "MAX_FEEDRATE_EDIT_VALUES requires X, Y, Z and E elements.");
+ static_assert(COUNT(sanity_arr_5) <= XYZE, "MAX_FEEDRATE_EDIT_VALUES has too many elements. X, Y, Z and E elements only.");
+ static_assert( _ARR_TEST(5,0) && _ARR_TEST(5,1) && _ARR_TEST(5,2)
+ && _ARR_TEST(5,3) && _ARR_TEST(5,4) && _ARR_TEST(5,5)
+ && _ARR_TEST(5,6) && _ARR_TEST(5,7) && _ARR_TEST(5,8),
+ "MAX_FEEDRATE_EDIT_VALUES values must be positive.");
+ #endif
+#endif
+
+#if ENABLED(LIMITED_JERK_EDITING)
+ #ifdef MAX_JERK_EDIT_VALUES
+ constexpr float sanity_arr_6[] = MAX_JERK_EDIT_VALUES;
+ static_assert(COUNT(sanity_arr_6) >= XYZE, "MAX_JERK_EDIT_VALUES requires X, Y, Z and E elements.");
+ static_assert(COUNT(sanity_arr_6) <= XYZE, "MAX_JERK_EDIT_VALUES has too many elements. X, Y, Z and E elements only.");
+ static_assert( _ARR_TEST(6,0) && _ARR_TEST(6,1) && _ARR_TEST(6,2)
+ && _ARR_TEST(6,3) && _ARR_TEST(6,4) && _ARR_TEST(6,5)
+ && _ARR_TEST(6,6) && _ARR_TEST(6,7) && _ARR_TEST(6,8),
+ "MAX_JERK_EDIT_VALUES values must be positive.");
+ #endif
+#endif
+
#undef _ARR_TEST
#if BOTH(CNC_COORDINATE_SYSTEMS, NO_WORKSPACE_OFFSETS)
@@ -2291,11 +2335,24 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
#endif
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
+
#if !Z_MULTI_STEPPER_DRIVERS
#error "Z_STEPPER_AUTO_ALIGN requires Z_DUAL_STEPPER_DRIVERS or Z_TRIPLE_STEPPER_DRIVERS."
#elif !HAS_BED_PROBE
#error "Z_STEPPER_AUTO_ALIGN requires a Z-bed probe."
#endif
+
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ #if DISABLED(Z_TRIPLE_STEPPER_DRIVERS)
+ #error "Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS requires Z_TRIPLE_STEPPER_DRIVERS."
+ #endif
+ constexpr float sanity_arr_screw_xy[][2] = Z_STEPPER_ALIGN_STEPPER_XY;
+ static_assert(
+ COUNT(sanity_arr_screw_xy) == Z_STEPPER_COUNT,
+ "Z_STEPPER_ALIGN_STEPPER_XY requires three {X,Y} entries (one per Z stepper)."
+ );
+ #endif
+
#endif
#if ENABLED(PRINTCOUNTER) && DISABLED(EEPROM_SETTINGS)
@@ -2410,8 +2467,14 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
/**
* Ensure this option is set intentionally
*/
-#if ENABLED(PSU_CONTROL) && !defined(PSU_ACTIVE_HIGH)
- #error "PSU_CONTROL requires PSU_ACTIVE_HIGH to be defined as 'true' or 'false'."
+#if ENABLED(PSU_CONTROL)
+ #ifndef PSU_ACTIVE_HIGH
+ #error "PSU_CONTROL requires PSU_ACTIVE_HIGH to be defined as 'true' or 'false'."
+ #elif !PIN_EXISTS(PS_ON)
+ #error "PSU_CONTROL requires PS_ON_PIN."
+ #endif
+#elif ENABLED(AUTO_POWER_CONTROL)
+ #error "AUTO_POWER_CONTROL requires PSU_CONTROL."
#endif
#if HAS_CUTTER
@@ -2473,3 +2536,11 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
#endif
#undef _PIN_CONFLICT
#endif
+
+#if !HAS_GRAPHICAL_LCD
+ #if ENABLED(PRINT_PROGRESS_SHOW_DECIMALS)
+ #error "PRINT_PROGRESS_SHOW_DECIMALS currently requires a Graphical LCD."
+ #elif ENABLED(SHOW_REMAINING_TIME)
+ #error "SHOW_REMAINING_TIME currently requires a Graphical LCD."
+ #endif
+#endif
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 0c9b11b9b9f3..9cc5f2ab62a1 100644
--- a/Marlin/src/inc/Version.h
+++ b/Marlin/src/inc/Version.h
@@ -21,77 +21,102 @@
*/
#pragma once
-#include "../core/macros.h" // for ENABLED
-
/**
- * This file is the standard Marlin version identifier file.
- * Use -DUSE_AUTOMATIC_VERSIONING=1 and a custom _Version.h
- * to override these values.
+ * Release version. Leave the Marlin version or apply a custom scheme.
*/
-
-#if ENABLED(USE_AUTOMATIC_VERSIONING)
-
- #include "_Version.h"
-
-#else
-
- /**
- * Marlin release version identifier
- */
+#ifndef SHORT_BUILD_VERSION
#define SHORT_BUILD_VERSION "bugfix-2.0.x"
+#endif
- /**
- * Verbose version identifier which should contain a reference to the location
- * from where the binary was downloaded or the source code was compiled.
- */
- #define DETAILED_BUILD_VERSION SHORT_BUILD_VERSION " (Github)"
+/**
+ * Verbose version identifier containing a unique identifier, such as the
+ * vendor name, download location, GitHub account, etc.
+ */
+#ifndef DETAILED_BUILD_VERSION
+ #define DETAILED_BUILD_VERSION SHORT_BUILD_VERSION " (GitHub)"
+#endif
- /**
- * The STRING_DISTRIBUTION_DATE represents when the binary file was built,
- * here we define this default string as the date where the latest release
- * version was tagged.
- */
- #define STRING_DISTRIBUTION_DATE "2019-10-01"
+/**
+ * The STRING_DISTRIBUTION_DATE represents when the binary file was built,
+ * here we define this default string as the date where the latest release
+ * version was tagged.
+ */
+#ifndef STRING_DISTRIBUTION_DATE
+ #define STRING_DISTRIBUTION_DATE "2019-10-29"
+#endif
- /**
- * Required minimum Configuration.h and Configuration_adv.h file versions.
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option on
- * the configuration files.
- */
- #define REQUIRED_CONFIGURATION_H_VERSION 020000
- #define REQUIRED_CONFIGURATION_ADV_H_VERSION 020000
+/**
+ * Minimum Configuration.h and Configuration_adv.h file versions.
+ * Set based on the release version number. Used to catch an attempt to use
+ * older configurations. Override these if using a custom versioning scheme
+ * to alert users to major changes.
+ */
- /**
- * The protocol for communication to the host. Protocol indicates communication
- * standards such as the use of ASCII, "echo:" and "error:" line prefixes, etc.
- * (Other behaviors are given by the firmware version and capabilities report.)
- */
+#define MARLIN_HEX_VERSION 020000
+#ifndef REQUIRED_CONFIGURATION_H_VERSION
+ #define REQUIRED_CONFIGURATION_H_VERSION MARLIN_HEX_VERSION
+#endif
+#ifndef REQUIRED_CONFIGURATION_ADV_H_VERSION
+ #define REQUIRED_CONFIGURATION_ADV_H_VERSION MARLIN_HEX_VERSION
+#endif
+
+/**
+ * The protocol for communication to the host. Protocol indicates communication
+ * standards such as the use of ASCII, "echo:" and "error:" line prefixes, etc.
+ * (Other behaviors are given by the firmware version and capabilities report.)
+ */
+#ifndef PROTOCOL_VERSION
#define PROTOCOL_VERSION "1.0"
+#endif
- /**
- * Defines a generic printer name to be output to the LCD after booting Marlin.
- */
+/**
+ * Define a generic printer name to be output to the LCD after booting Marlin.
+ */
+#ifndef MACHINE_NAME
#define MACHINE_NAME "3D Printer"
+#endif
- /**
- * The SOURCE_CODE_URL is the location where users will find the Marlin Source
- * Code which is installed on the device. In most cases —unless the manufacturer
- * has a distinct Github fork— the Source Code URL should just be the main
- * Marlin repository.
- */
+/**
+ * Website where users can find Marlin source code for the binary installed on the
+ * device. Override this if you provide public source code download. (GPLv3 requires
+ * providing the source code to your customers.)
+ */
+#ifndef SOURCE_CODE_URL
#define SOURCE_CODE_URL "https://github.com/MarlinFirmware/Marlin"
+#endif
- /**
- * Default generic printer UUID.
- */
+/**
+ * Default generic printer UUID.
+ */
+#ifndef DEFAULT_MACHINE_UUID
#define DEFAULT_MACHINE_UUID "cede2a2f-41a2-4748-9b12-c55c62f367ff"
+#endif
/**
* The WEBSITE_URL is the location where users can get more information such as
* documentation about a specific Marlin release. Displayed in the Info Menu.
*/
+#ifndef WEBSITE_URL
#define WEBSITE_URL "http://marlinfw.org"
+#endif
-#endif // USE_AUTOMATIC_VERSIONING
+/**
+ * Set the vendor info the serial USB interface, if changable
+ * Currently only supported by DUE platform
+ */
+#ifndef USB_DEVICE_VENDOR_ID
+ #define USB_DEVICE_VENDOR_ID 0x03EB /* ATMEL VID */
+#endif
+#ifndef USB_DEVICE_PRODUCT_ID
+ #define USB_DEVICE_PRODUCT_ID 0x2424 /* MSC / CDC */
+#endif
+//! USB Device string definitions (Optional)
+#ifndef USB_DEVICE_MANUFACTURE_NAME
+ #define USB_DEVICE_MANUFACTURE_NAME WEBSITE_URL
+#endif
+#ifdef CUSTOM_MACHINE_NAME
+ #define USB_DEVICE_PRODUCT_NAME CUSTOM_MACHINE_NAME
+#else
+ #define USB_DEVICE_PRODUCT_NAME MACHINE_NAME
+#endif
+#define USB_DEVICE_SERIAL_NAME "123985739853"
diff --git a/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp b/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp
index 819a5c5bc670..92ef0c83cd4b 100644
--- a/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp
+++ b/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp
@@ -484,9 +484,9 @@ void MarlinUI::draw_kill_screen() {
lcd_put_u8str(0, 0, status_message);
lcd_uint_t y = 2;
#if LCD_HEIGHT >= 4
- lcd_put_u8str_P(0, y++, PSTR(MSG_HALTED));
+ lcd_put_u8str_P(0, y++, GET_TEXT(MSG_HALTED));
#endif
- lcd_put_u8str_P(0, y, PSTR(MSG_PLEASE_RESET));
+ lcd_put_u8str_P(0, y, GET_TEXT(MSG_PLEASE_RESET));
}
//
@@ -566,7 +566,7 @@ FORCE_INLINE void _draw_bed_status(const bool blink) {
#if HAS_PRINT_PROGRESS
FORCE_INLINE void _draw_print_progress() {
- const uint8_t progress = ui.get_progress();
+ const uint8_t progress = ui.get_progress_percent();
lcd_put_u8str_P(PSTR(
#if ENABLED(SDSUPPORT)
"SD"
@@ -613,7 +613,7 @@ void MarlinUI::draw_status_message(const bool blink) {
// Draw the progress bar if the message has shown long enough
// or if there is no message set.
if (ELAPSED(millis(), progress_bar_ms + PROGRESS_BAR_MSG_TIME) || !has_status()) {
- const uint8_t progress = get_progress();
+ const uint8_t progress = get_progress_percent();
if (progress > 2) return draw_progress_bar(progress);
}
@@ -815,14 +815,28 @@ void MarlinUI::draw_status_screen() {
sprintf_P(mixer_messages, PSTR("%s %d;%d%% "), mix_label, int(mixer.mix[0]), int(mixer.mix[1]));
lcd_put_u8str(mixer_messages);
- #else
+ #else // !DUAL_MIXING_EXTRUDER
- xy_pos_t lpos = current_position; toLogical(lpos);
- _draw_axis_value(X_AXIS, ftostr4sign(lpos.x), blink);
- lcd_put_wchar(' ');
- _draw_axis_value(Y_AXIS, ftostr4sign(lpos.y), blink);
+ if (true
+ #if ENABLED(LCD_SHOW_E_TOTAL)
+ && !printingIsActive()
+ #endif
+ ) {
+ xy_pos_t lpos = current_position; toLogical(lpos);
+ _draw_axis_value(X_AXIS, ftostr4sign(lpos.x), blink);
+ lcd_put_wchar(' ');
+ _draw_axis_value(Y_AXIS, ftostr4sign(lpos.y), blink);
+ }
+ else {
+ #if ENABLED(LCD_SHOW_E_TOTAL)
+ char tmp[20];
+ const uint8_t escale = e_move_accumulator >= 100000.0f ? 10 : 1; // After 100m switch to cm
+ sprintf_P(tmp, PSTR("E %ld%cm "), uint32_t(_MAX(e_move_accumulator, 0.0f)) / escale, escale == 10 ? 'c' : 'm'); // 1234567mm
+ lcd_put_u8str(tmp);
+ #endif
+ }
- #endif
+ #endif // !DUAL_MIXING_EXTRUDER
#endif // HOTENDS <= 2 && (HOTENDS <= 1 || !HAS_HEATED_BED)
@@ -861,7 +875,7 @@ void MarlinUI::draw_status_screen() {
uint16_t per;
#if HAS_FAN0
if (true
- #if EXTRUDERS
+ #if EXTRUDERS && ENABLED(ADAPTIVE_FAN_SLOWING)
&& (blink || thermalManager.fan_speed_scaler[0] < 128)
#endif
) {
@@ -977,7 +991,7 @@ void MarlinUI::draw_status_screen() {
#endif // ADVANCED_PAUSE_FEATURE
- void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const uint8_t style/*=SS_CENTER*/, const char * const valstr/*=nullptr*/) {
+ void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const uint8_t style/*=SS_DEFAULT*/, const char * const valstr/*=nullptr*/) {
int8_t n = LCD_WIDTH;
lcd_moveto(0, row);
if ((style & SS_CENTER) && !valstr) {
diff --git a/Marlin/src/lcd/dogm/dogm_Statusscreen.h b/Marlin/src/lcd/dogm/dogm_Statusscreen.h
index a09e77880986..d0de7da976e2 100644
--- a/Marlin/src/lcd/dogm/dogm_Statusscreen.h
+++ b/Marlin/src/lcd/dogm/dogm_Statusscreen.h
@@ -1232,7 +1232,7 @@
#define _HEATERS_WIDTH (HOTENDS * (STATUS_HEATERS_XSPACE)) // as many hotends as possible
#elif STATUS_HEATERS_WIDTH
#define _HEATERS_WIDTH STATUS_HEATERS_WIDTH
- #else
+ #elif HOTENDS
#error "Status screen heaters region was not specified."
#endif
#if STATUS_LOGO_WIDTH > (LCD_PIXEL_WIDTH - (_EXTRA_WIDTH + _HEATERS_WIDTH))
diff --git a/Marlin/src/lcd/dogm/fontdata/langdata_el-gr.h b/Marlin/src/lcd/dogm/fontdata/langdata_el_gr.h
similarity index 100%
rename from Marlin/src/lcd/dogm/fontdata/langdata_el-gr.h
rename to Marlin/src/lcd/dogm/fontdata/langdata_el_gr.h
diff --git a/Marlin/src/lcd/dogm/fontdata/langdata_jp-kana.h b/Marlin/src/lcd/dogm/fontdata/langdata_jp-kana.h
deleted file mode 100644
index e2ff9129b456..000000000000
--- a/Marlin/src/lcd/dogm/fontdata/langdata_jp-kana.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/**
- * Generated automatically by buildroot/share/fonts/uxggenpages.sh
- * Contents will be REPLACED by future processing!
- * Use genallfont.sh to generate font data for updated languages.
- */
-#include
-
-const u8g_fntpgm_uint8_t fontpage_97_161_164[61] U8G_FONT_SECTION("fontpage_97_161_164") = {
- 0x00,0x06,0x0c,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa1,0xa4,0x00,0x06,0x00,0x00,
- 0x00,0x04,0x04,0x04,0x06,0x00,0x00,0xf0,0x10,0x60,0x40,0x05,0x06,0x06,0x06,0x00,
- 0x00,0xf8,0x08,0x28,0x30,0x20,0x40,0x03,0x04,0x04,0x06,0x01,0x00,0x20,0x40,0xc0,
- 0x40,0x04,0x06,0x06,0x06,0x00,0x00,0x10,0x20,0x60,0xa0,0x20,0x20};
-const u8g_fntpgm_uint8_t fontpage_97_166_166[29] U8G_FONT_SECTION("fontpage_97_166_166") = {
- 0x00,0x06,0x0c,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa6,0xa6,0x00,0x06,0x00,0x00,
- 0x00,0x05,0x06,0x06,0x06,0x00,0x00,0x20,0xf8,0x88,0x08,0x10,0x20};
-const u8g_fntpgm_uint8_t fontpage_97_168_168[28] U8G_FONT_SECTION("fontpage_97_168_168") = {
- 0x00,0x06,0x0c,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa8,0xa8,0x00,0x05,0x00,0x00,
- 0x00,0x05,0x05,0x05,0x06,0x00,0x00,0xf8,0x20,0x20,0x20,0xf8};
-const u8g_fntpgm_uint8_t fontpage_97_170_181[167] U8G_FONT_SECTION("fontpage_97_170_181") = {
- 0x00,0x06,0x0c,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xaa,0xb5,0x00,0x08,0x00,0x00,
- 0x00,0x05,0x06,0x06,0x06,0x00,0x00,0x10,0xf8,0x30,0x50,0x90,0x10,0x05,0x06,0x06,
- 0x06,0x00,0x00,0x40,0xf8,0x48,0x48,0x48,0x90,0x05,0x08,0x08,0x06,0x00,0x00,0x28,
- 0x00,0x40,0xf8,0x48,0x48,0x48,0x90,0x05,0x06,0x06,0x06,0x00,0x00,0x20,0xf8,0x20,
- 0xf8,0x20,0x20,0x05,0x08,0x08,0x06,0x00,0x00,0x28,0x00,0x20,0xf8,0x20,0xf8,0x20,
- 0x20,0x04,0x05,0x05,0x06,0x00,0x00,0x70,0x90,0x10,0x20,0xc0,0x05,0x07,0x07,0x06,
- 0x00,0x00,0x28,0x00,0x70,0x90,0x10,0x20,0xc0,0x05,0x06,0x06,0x06,0x00,0x00,0x40,
- 0x78,0x90,0x10,0x10,0x20,0x05,0x08,0x08,0x06,0x00,0x00,0x28,0x00,0x40,0x78,0x90,
- 0x10,0x10,0x20,0x05,0x05,0x05,0x06,0x00,0x00,0xf8,0x08,0x08,0x08,0xf8,0x05,0x07,
- 0x07,0x06,0x00,0x00,0x28,0x00,0xf8,0x08,0x08,0x08,0xf8,0x05,0x06,0x06,0x06,0x00,
- 0x00,0x50,0xf8,0x50,0x10,0x20,0x40};
-const u8g_fntpgm_uint8_t fontpage_97_183_187[77] U8G_FONT_SECTION("fontpage_97_183_187") = {
- 0x00,0x06,0x0c,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xb7,0xbb,0x00,0x07,0x00,0x00,
- 0x00,0x05,0x05,0x05,0x06,0x00,0x00,0xc0,0x08,0xc8,0x10,0xe0,0x05,0x07,0x07,0x06,
- 0x00,0x00,0x28,0x00,0xc0,0x08,0xc8,0x10,0xe0,0x05,0x05,0x05,0x06,0x00,0x00,0xf8,
- 0x10,0x20,0x50,0x88,0x05,0x07,0x07,0x06,0x00,0x00,0x28,0x00,0xf8,0x10,0x20,0x50,
- 0x88,0x05,0x06,0x06,0x06,0x00,0x00,0x40,0xf8,0x48,0x50,0x40,0x38};
-const u8g_fntpgm_uint8_t fontpage_97_189_193[77] U8G_FONT_SECTION("fontpage_97_189_193") = {
- 0x00,0x06,0x0c,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xbd,0xc1,0x00,0x07,0x00,0x00,
- 0x00,0x05,0x05,0x05,0x06,0x00,0x00,0x88,0x88,0x48,0x10,0x60,0x05,0x07,0x07,0x06,
- 0x00,0x00,0x28,0x00,0x88,0x88,0x48,0x10,0x60,0x05,0x05,0x05,0x06,0x00,0x00,0x78,
- 0x48,0xa8,0x10,0x60,0x05,0x07,0x07,0x06,0x00,0x00,0x28,0x00,0x78,0x48,0xa8,0x10,
- 0x60,0x05,0x06,0x06,0x06,0x00,0x00,0x10,0xe0,0x20,0xf8,0x20,0x40};
-const u8g_fntpgm_uint8_t fontpage_97_195_196[38] U8G_FONT_SECTION("fontpage_97_195_196") = {
- 0x00,0x06,0x0c,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc3,0xc4,0x00,0x05,0x00,0x00,
- 0x00,0x05,0x04,0x04,0x06,0x00,0x00,0xa8,0xa8,0x08,0x30,0x05,0x05,0x05,0x06,0x00,
- 0x00,0xa8,0xa8,0x08,0x10,0x20};
-const u8g_fntpgm_uint8_t fontpage_97_198_211[190] U8G_FONT_SECTION("fontpage_97_198_211") = {
- 0x00,0x06,0x0c,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc6,0xd3,0x00,0x08,0x00,0x00,
- 0x00,0x05,0x06,0x06,0x06,0x00,0x00,0x70,0x00,0xf8,0x20,0x20,0x40,0x05,0x08,0x08,
- 0x06,0x00,0x00,0x28,0x00,0x70,0x00,0xf8,0x20,0x20,0x40,0x03,0x06,0x06,0x06,0x01,
- 0x00,0x80,0x80,0xc0,0xa0,0x80,0x80,0x04,0x08,0x08,0x06,0x01,0x00,0x50,0x00,0x80,
- 0x80,0xc0,0xa0,0x80,0x80,0x05,0x06,0x06,0x06,0x00,0x00,0x20,0xf8,0x20,0x20,0x40,
- 0x80,0x05,0x05,0x05,0x06,0x00,0x00,0x70,0x00,0x00,0x00,0xf8,0x05,0x05,0x05,0x06,
- 0x00,0x00,0xf8,0x08,0x50,0x20,0xd0,0x05,0x06,0x06,0x06,0x00,0x00,0x20,0xf8,0x10,
- 0x20,0x70,0xa8,0x03,0x06,0x06,0x06,0x01,0x00,0x20,0x20,0x20,0x20,0x40,0x80,0x05,
- 0x05,0x05,0x06,0x00,0x00,0x10,0x88,0x88,0x88,0x88,0x05,0x07,0x07,0x06,0x00,0x00,
- 0x28,0x00,0x10,0x88,0x88,0x88,0x88,0x05,0x08,0x08,0x06,0x00,0x00,0x18,0x18,0x00,
- 0x10,0x88,0x88,0x88,0x88,0x05,0x06,0x06,0x06,0x00,0x00,0x80,0x80,0xf8,0x80,0x80,
- 0x78,0x05,0x07,0x07,0x06,0x00,0x00,0x28,0x80,0x80,0xf8,0x80,0x80,0x78};
-const u8g_fntpgm_uint8_t fontpage_97_213_217[77] U8G_FONT_SECTION("fontpage_97_213_217") = {
- 0x00,0x06,0x0c,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd5,0xd9,0x00,0x08,0x00,0x00,
- 0x00,0x05,0x05,0x05,0x06,0x00,0x00,0xf8,0x08,0x08,0x10,0x60,0x05,0x07,0x07,0x06,
- 0x00,0x00,0x28,0x00,0xf8,0x08,0x08,0x10,0x60,0x05,0x08,0x08,0x06,0x00,0x00,0x18,
- 0x18,0x00,0xf8,0x08,0x08,0x10,0x60,0x05,0x04,0x04,0x06,0x00,0x01,0x40,0xa0,0x10,
- 0x08,0x05,0x06,0x06,0x06,0x00,0x01,0x28,0x00,0x40,0xa0,0x10,0x08};
-const u8g_fntpgm_uint8_t fontpage_97_219_220[43] U8G_FONT_SECTION("fontpage_97_219_220") = {
- 0x00,0x06,0x0c,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xdb,0xdc,0x00,0x08,0x00,0x00,
- 0x00,0x05,0x06,0x06,0x06,0x00,0x00,0x20,0xf8,0x20,0xa8,0xa8,0x20,0x05,0x08,0x08,
- 0x06,0x00,0x00,0x28,0x00,0x20,0xf8,0x20,0xa8,0xa8,0x20};
-const u8g_fntpgm_uint8_t fontpage_97_222_223[39] U8G_FONT_SECTION("fontpage_97_222_223") = {
- 0x00,0x06,0x0c,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xde,0xdf,0x00,0x05,0x00,0x00,
- 0x00,0x05,0x05,0x05,0x06,0x00,0x00,0xf8,0x08,0x50,0x20,0x10,0x04,0x05,0x05,0x06,
- 0x01,0x00,0xe0,0x00,0xe0,0x00,0xf0};
-const u8g_fntpgm_uint8_t fontpage_97_225_226[39] U8G_FONT_SECTION("fontpage_97_225_226") = {
- 0x00,0x06,0x0c,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe1,0xe2,0x00,0x05,0x00,0x00,
- 0x00,0x05,0x05,0x05,0x06,0x00,0x00,0x08,0x28,0x10,0x28,0xc0,0x05,0x05,0x05,0x06,
- 0x00,0x00,0xf8,0x40,0xf8,0x40,0x38};
-const u8g_fntpgm_uint8_t fontpage_97_228_229[39] U8G_FONT_SECTION("fontpage_97_228_229") = {
- 0x00,0x06,0x0c,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe4,0xe5,0x00,0x06,0x00,0x00,
- 0x00,0x05,0x06,0x06,0x06,0x00,0x00,0x40,0xf8,0x48,0x50,0x40,0x40,0x04,0x04,0x04,
- 0x06,0x00,0x00,0x60,0x20,0x20,0xf0};
-const u8g_fntpgm_uint8_t fontpage_97_231_237[96] U8G_FONT_SECTION("fontpage_97_231_237") = {
- 0x00,0x06,0x0c,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe7,0xed,0x00,0x06,0x00,0x00,
- 0x00,0x04,0x05,0x05,0x06,0x00,0x00,0xf0,0x10,0xf0,0x10,0xf0,0x05,0x05,0x05,0x06,
- 0x00,0x00,0xf8,0x08,0xf8,0x08,0xf8,0x05,0x06,0x06,0x06,0x00,0x00,0x70,0x00,0xf8,
- 0x08,0x10,0x20,0x04,0x06,0x06,0x06,0x00,0x00,0x90,0x90,0x90,0x90,0x10,0x20,0x05,
- 0x05,0x05,0x06,0x00,0x00,0x20,0xa0,0xa8,0xa8,0xb0,0x04,0x05,0x05,0x06,0x00,0x00,
- 0x80,0x80,0x90,0xa0,0xc0,0x05,0x05,0x05,0x06,0x00,0x00,0xf8,0x88,0x88,0x88,0xf8
- };
-const u8g_fntpgm_uint8_t fontpage_97_242_243[39] U8G_FONT_SECTION("fontpage_97_242_243") = {
- 0x00,0x06,0x0c,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf2,0xf3,0x00,0x05,0x00,0x00,
- 0x00,0x05,0x05,0x05,0x06,0x00,0x00,0xf8,0x08,0xf8,0x08,0x30,0x05,0x05,0x05,0x06,
- 0x00,0x00,0xc0,0x08,0x08,0x10,0xe0};
-const u8g_fntpgm_uint8_t fontpage_97_252_252[24] U8G_FONT_SECTION("fontpage_97_252_252") = {
- 0x00,0x06,0x0c,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xfc,0xfc,0x00,0x03,0x00,0x00,
- 0x00,0x05,0x01,0x01,0x06,0x00,0x02,0xf8};
-
-#define FONTDATA_ITEM(page, begin, end, data) { page, begin, end, COUNT(data), data }
-static const uxg_fontinfo_t g_fontinfo[] PROGMEM = {
- FONTDATA_ITEM(97, 161, 164, fontpage_97_161_164), // 'ァ' -- 'イ'
- FONTDATA_ITEM(97, 166, 166, fontpage_97_166_166), // 'ウ' -- 'ウ'
- FONTDATA_ITEM(97, 168, 168, fontpage_97_168_168), // 'エ' -- 'エ'
- FONTDATA_ITEM(97, 170, 181, fontpage_97_170_181), // 'オ' -- 'サ'
- FONTDATA_ITEM(97, 183, 187, fontpage_97_183_187), // 'シ' -- 'セ'
- FONTDATA_ITEM(97, 189, 193, fontpage_97_189_193), // 'ソ' -- 'チ'
- FONTDATA_ITEM(97, 195, 196, fontpage_97_195_196), // 'ッ' -- 'ツ'
- FONTDATA_ITEM(97, 198, 211, fontpage_97_198_211), // 'テ' -- 'ビ'
- FONTDATA_ITEM(97, 213, 217, fontpage_97_213_217), // 'フ' -- 'ベ'
- FONTDATA_ITEM(97, 219, 220, fontpage_97_219_220), // 'ホ' -- 'ボ'
- FONTDATA_ITEM(97, 222, 223, fontpage_97_222_223), // 'マ' -- 'ミ'
- FONTDATA_ITEM(97, 225, 226, fontpage_97_225_226), // 'メ' -- 'モ'
- FONTDATA_ITEM(97, 228, 229, fontpage_97_228_229), // 'ヤ' -- 'ュ'
- FONTDATA_ITEM(97, 231, 237, fontpage_97_231_237), // 'ョ' -- 'ロ'
- FONTDATA_ITEM(97, 242, 243, fontpage_97_242_243), // 'ヲ' -- 'ン'
- FONTDATA_ITEM(97, 252, 252, fontpage_97_252_252), // 'ー' -- 'ー'
-};
diff --git a/Marlin/src/lcd/dogm/fontdata/langdata_jp_kana.h b/Marlin/src/lcd/dogm/fontdata/langdata_jp_kana.h
new file mode 100644
index 000000000000..97d82c0293dc
--- /dev/null
+++ b/Marlin/src/lcd/dogm/fontdata/langdata_jp_kana.h
@@ -0,0 +1,111 @@
+/**
+ * Generated automatically by buildroot/share/fonts/uxggenpages.sh
+ * Contents will be REPLACED by future processing!
+ * Use genallfont.sh to generate font data for updated languages.
+ */
+#include
+
+const u8g_fntpgm_uint8_t fontpage_97_161_164[65] U8G_FONT_SECTION("fontpage_97_161_164") = {
+ 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa1,0xa4,0x00,0x07,0x00,0x00,
+ 0x00,0x04,0x05,0x05,0x06,0x00,0x00,0xf0,0x10,0x60,0x40,0x80,0x05,0x07,0x07,0x06,
+ 0x00,0x00,0xf8,0x08,0x28,0x30,0x20,0x20,0x40,0x04,0x05,0x05,0x06,0x00,0x00,0x10,
+ 0x20,0x60,0xa0,0x20,0x05,0x07,0x07,0x06,0x00,0x00,0x08,0x10,0x20,0x60,0xa0,0x20,
+ 0x20};
+const u8g_fntpgm_uint8_t fontpage_97_166_166[30] U8G_FONT_SECTION("fontpage_97_166_166") = {
+ 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa6,0xa6,0x00,0x07,0x00,0x00,
+ 0x00,0x05,0x07,0x07,0x06,0x00,0x00,0x20,0xf8,0x88,0x88,0x08,0x10,0x60};
+const u8g_fntpgm_uint8_t fontpage_97_168_168[29] U8G_FONT_SECTION("fontpage_97_168_168") = {
+ 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa8,0xa8,0x00,0x06,0x00,0x00,
+ 0x00,0x05,0x06,0x06,0x06,0x00,0x00,0xf8,0x20,0x20,0x20,0x20,0xf8};
+const u8g_fntpgm_uint8_t fontpage_97_170_187[268] U8G_FONT_SECTION("fontpage_97_170_187") = {
+ 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xaa,0xbb,0x00,0x0d,0x00,0x00,
+ 0x00,0x05,0x07,0x07,0x06,0x00,0x00,0x10,0xf8,0x10,0x30,0x50,0x90,0x10,0x05,0x07,
+ 0x07,0x06,0x00,0x00,0x40,0xf8,0x48,0x48,0x48,0x48,0x98,0x05,0x09,0x09,0x06,0x00,
+ 0x00,0x28,0x08,0x40,0xf8,0x48,0x48,0x48,0x48,0x98,0x05,0x07,0x07,0x06,0x00,0x00,
+ 0x20,0xf8,0x20,0x20,0xf8,0x10,0x10,0x05,0x09,0x09,0x06,0x00,0x00,0x28,0x08,0x20,
+ 0xf8,0x20,0x20,0xf8,0x10,0x10,0x05,0x07,0x07,0x06,0x00,0x00,0x40,0x78,0x48,0x88,
+ 0x08,0x10,0x60,0x05,0x09,0x09,0x06,0x00,0x00,0x28,0x08,0x40,0x78,0x48,0x88,0x08,
+ 0x10,0x60,0x05,0x07,0x07,0x06,0x00,0x00,0x80,0xf8,0x90,0x90,0x10,0x10,0x20,0x05,
+ 0x09,0x09,0x06,0x00,0x00,0x28,0x28,0x80,0xf8,0x90,0x90,0x10,0x10,0x20,0x05,0x06,
+ 0x06,0x06,0x00,0x00,0xf8,0x08,0x08,0x08,0x08,0xf8,0x05,0x09,0x09,0x06,0x00,0x00,
+ 0x28,0x28,0x00,0xf8,0x08,0x08,0x08,0x08,0xf8,0x05,0x07,0x07,0x06,0x00,0x00,0x50,
+ 0xf8,0x50,0x50,0x50,0x10,0x20,0x05,0x09,0x09,0x06,0x00,0x00,0x28,0x08,0x50,0xf8,
+ 0x50,0x50,0x50,0x10,0x20,0x05,0x06,0x06,0x06,0x00,0x00,0xc0,0x08,0xc8,0x08,0x10,
+ 0xe0,0x07,0x0d,0x0d,0x06,0x00,0x00,0x02,0x00,0x00,0x00,0x28,0x28,0x00,0xc0,0x08,
+ 0xc8,0x08,0x10,0xe0,0x05,0x06,0x06,0x06,0x00,0x00,0x70,0x10,0x10,0x20,0x50,0x88,
+ 0x05,0x09,0x09,0x06,0x00,0x00,0x28,0x28,0x00,0x70,0x10,0x10,0x20,0x50,0x88,0x05,
+ 0x07,0x07,0x06,0x00,0x00,0x40,0x40,0xf8,0x48,0x50,0x40,0x38};
+const u8g_fntpgm_uint8_t fontpage_97_189_193[85] U8G_FONT_SECTION("fontpage_97_189_193") = {
+ 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xbd,0xc1,0x00,0x09,0x00,0x00,
+ 0x00,0x05,0x06,0x06,0x06,0x00,0x00,0x88,0x48,0x48,0x10,0x10,0x20,0x05,0x09,0x09,
+ 0x06,0x00,0x00,0x28,0x28,0x00,0x88,0x48,0x48,0x10,0x10,0x20,0x05,0x07,0x07,0x06,
+ 0x00,0x00,0x40,0x78,0x48,0xa8,0x18,0x10,0x60,0x05,0x09,0x09,0x06,0x00,0x00,0x28,
+ 0x08,0x40,0x78,0x48,0xa8,0x18,0x10,0x60,0x05,0x07,0x07,0x06,0x00,0x00,0x10,0x60,
+ 0x20,0xf8,0x20,0x20,0x40};
+const u8g_fntpgm_uint8_t fontpage_97_195_211[241] U8G_FONT_SECTION("fontpage_97_195_211") = {
+ 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc3,0xd3,0x00,0x09,0x00,0x00,
+ 0x00,0x05,0x04,0x04,0x06,0x00,0x00,0xa8,0xa8,0x08,0x30,0x05,0x06,0x06,0x06,0x00,
+ 0x00,0xa8,0xa8,0xa8,0x08,0x10,0x60,0x05,0x09,0x09,0x06,0x00,0x00,0x28,0x28,0x00,
+ 0xa8,0xa8,0xa8,0x08,0x10,0x60,0x05,0x07,0x07,0x06,0x00,0x00,0x70,0x00,0xf8,0x20,
+ 0x20,0x20,0x40,0x05,0x09,0x09,0x06,0x00,0x00,0x28,0x08,0x70,0x00,0xf8,0x20,0x20,
+ 0x20,0x40,0x04,0x07,0x07,0x06,0x01,0x00,0x80,0x80,0xc0,0xa0,0x90,0x80,0x80,0x04,
+ 0x09,0x09,0x06,0x01,0x00,0x50,0x10,0x80,0x80,0xc0,0xa0,0x90,0x80,0x80,0x05,0x07,
+ 0x07,0x06,0x00,0x00,0x20,0x20,0xf8,0x20,0x20,0x40,0x80,0x05,0x06,0x06,0x06,0x00,
+ 0x00,0x70,0x00,0x00,0x00,0x00,0xf8,0x05,0x06,0x06,0x06,0x00,0x00,0x78,0x08,0x28,
+ 0x10,0x28,0xc0,0x05,0x07,0x07,0x06,0x00,0x00,0x20,0x70,0x10,0x20,0x70,0xa8,0x20,
+ 0x03,0x06,0x06,0x06,0x01,0x00,0x20,0x20,0x20,0x40,0x40,0x80,0x05,0x06,0x06,0x06,
+ 0x00,0x00,0x10,0x50,0x50,0x48,0x88,0x88,0x05,0x09,0x09,0x06,0x00,0x00,0x28,0x28,
+ 0x00,0x10,0x50,0x50,0x48,0x88,0x88,0x05,0x09,0x09,0x06,0x00,0x00,0x18,0x18,0x00,
+ 0x10,0x50,0x50,0x48,0x88,0x88,0x04,0x06,0x06,0x06,0x00,0x00,0x80,0x90,0xe0,0x80,
+ 0x80,0x70,0x05,0x09,0x09,0x06,0x00,0x00,0x28,0x28,0x00,0x80,0x90,0xe0,0x80,0x80,
+ 0x70};
+const u8g_fntpgm_uint8_t fontpage_97_213_217[84] U8G_FONT_SECTION("fontpage_97_213_217") = {
+ 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd5,0xd9,0x00,0x09,0x00,0x00,
+ 0x00,0x05,0x06,0x06,0x06,0x00,0x00,0xf8,0x08,0x08,0x08,0x10,0x60,0x05,0x09,0x09,
+ 0x06,0x00,0x00,0x28,0x28,0x00,0xf8,0x08,0x08,0x08,0x10,0x60,0x05,0x09,0x09,0x06,
+ 0x00,0x00,0x18,0x18,0x00,0xf8,0x08,0x08,0x08,0x10,0x60,0x05,0x05,0x05,0x06,0x00,
+ 0x01,0x60,0xa0,0x10,0x10,0x08,0x05,0x08,0x08,0x06,0x00,0x01,0x28,0x28,0x00,0x60,
+ 0xa0,0x10,0x10,0x08};
+const u8g_fntpgm_uint8_t fontpage_97_219_220[45] U8G_FONT_SECTION("fontpage_97_219_220") = {
+ 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xdb,0xdc,0x00,0x09,0x00,0x00,
+ 0x00,0x05,0x07,0x07,0x06,0x00,0x00,0x20,0xf8,0x20,0xa8,0xa8,0xa8,0x20,0x05,0x09,
+ 0x09,0x06,0x00,0x00,0x28,0x08,0x20,0xf8,0x20,0xa8,0xa8,0xa8,0x20};
+const u8g_fntpgm_uint8_t fontpage_97_222_223[41] U8G_FONT_SECTION("fontpage_97_222_223") = {
+ 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xde,0xdf,0x00,0x06,0x00,0x00,
+ 0x00,0x05,0x06,0x06,0x06,0x00,0x00,0xf8,0x08,0x08,0x50,0x20,0x10,0x04,0x06,0x06,
+ 0x06,0x01,0x00,0xe0,0x00,0xe0,0x00,0xc0,0x30};
+const u8g_fntpgm_uint8_t fontpage_97_225_237[174] U8G_FONT_SECTION("fontpage_97_225_237") = {
+ 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe1,0xed,0x00,0x07,0x00,0x00,
+ 0x00,0x05,0x06,0x06,0x06,0x00,0x00,0x08,0x48,0x30,0x10,0x28,0xc0,0x05,0x06,0x06,
+ 0x06,0x00,0x00,0xf0,0x40,0xf8,0x40,0x40,0x38,0x05,0x05,0x05,0x06,0x00,0x00,0x40,
+ 0xf8,0x48,0x50,0x40,0x05,0x07,0x07,0x06,0x00,0x00,0x40,0x40,0xf8,0x48,0x50,0x40,
+ 0x40,0x04,0x05,0x05,0x06,0x00,0x00,0x60,0x20,0x20,0x20,0xf0,0x05,0x06,0x06,0x06,
+ 0x00,0x00,0x70,0x10,0x10,0x10,0x10,0xf8,0x04,0x05,0x05,0x06,0x00,0x00,0xf0,0x10,
+ 0xf0,0x10,0xf0,0x05,0x06,0x06,0x06,0x00,0x00,0xf8,0x08,0xf8,0x08,0x08,0xf8,0x05,
+ 0x07,0x07,0x06,0x00,0x00,0x70,0x00,0xf8,0x08,0x08,0x10,0x60,0x04,0x07,0x07,0x06,
+ 0x00,0x00,0x10,0x90,0x90,0x90,0x90,0x10,0x60,0x05,0x07,0x07,0x06,0x00,0x00,0x20,
+ 0x20,0xa0,0xa0,0xa8,0xa8,0xb0,0x05,0x06,0x06,0x06,0x00,0x00,0x80,0x80,0x80,0x88,
+ 0xb0,0xc0,0x05,0x06,0x06,0x06,0x00,0x00,0xf8,0x88,0x88,0x88,0x88,0xf8};
+const u8g_fntpgm_uint8_t fontpage_97_242_243[41] U8G_FONT_SECTION("fontpage_97_242_243") = {
+ 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf2,0xf3,0x00,0x06,0x00,0x00,
+ 0x00,0x05,0x06,0x06,0x06,0x00,0x00,0xf8,0x08,0xf8,0x08,0x10,0x60,0x05,0x06,0x06,
+ 0x06,0x00,0x00,0xc0,0x08,0x08,0x08,0x10,0xe0};
+const u8g_fntpgm_uint8_t fontpage_97_252_252[25] U8G_FONT_SECTION("fontpage_97_252_252") = {
+ 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xfc,0xfc,0x00,0x05,0x00,0x00,
+ 0x00,0x05,0x02,0x02,0x06,0x00,0x03,0x80,0x78};
+
+#define FONTDATA_ITEM(page, begin, end, data) { page, begin, end, COUNT(data), data }
+static const uxg_fontinfo_t g_fontinfo[] PROGMEM = {
+ FONTDATA_ITEM(97, 161, 164, fontpage_97_161_164), // 'ァ' -- 'イ'
+ FONTDATA_ITEM(97, 166, 166, fontpage_97_166_166), // 'ウ' -- 'ウ'
+ FONTDATA_ITEM(97, 168, 168, fontpage_97_168_168), // 'エ' -- 'エ'
+ FONTDATA_ITEM(97, 170, 187, fontpage_97_170_187), // 'オ' -- 'セ'
+ FONTDATA_ITEM(97, 189, 193, fontpage_97_189_193), // 'ソ' -- 'チ'
+ FONTDATA_ITEM(97, 195, 211, fontpage_97_195_211), // 'ッ' -- 'ビ'
+ FONTDATA_ITEM(97, 213, 217, fontpage_97_213_217), // 'フ' -- 'ベ'
+ FONTDATA_ITEM(97, 219, 220, fontpage_97_219_220), // 'ホ' -- 'ボ'
+ FONTDATA_ITEM(97, 222, 223, fontpage_97_222_223), // 'マ' -- 'ミ'
+ FONTDATA_ITEM(97, 225, 237, fontpage_97_225_237), // 'メ' -- 'ロ'
+ FONTDATA_ITEM(97, 242, 243, fontpage_97_242_243), // 'ヲ' -- 'ン'
+ FONTDATA_ITEM(97, 252, 252, fontpage_97_252_252), // 'ー' -- 'ー'
+};
diff --git a/Marlin/src/lcd/dogm/fontdata/langdata_pt-br.h b/Marlin/src/lcd/dogm/fontdata/langdata_pt_br.h
similarity index 100%
rename from Marlin/src/lcd/dogm/fontdata/langdata_pt-br.h
rename to Marlin/src/lcd/dogm/fontdata/langdata_pt_br.h
diff --git a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
index 34d01400868a..0d4ff7f47169 100644
--- a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
+++ b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
@@ -99,6 +99,9 @@
#define STATUS_HEATERS_BOT (STATUS_HEATERS_Y + STATUS_HEATERS_HEIGHT - 1)
+#define PROGRESS_BAR_X 54
+#define PROGRESS_BAR_WIDTH (LCD_PIXEL_WIDTH - PROGRESS_BAR_X)
+
#if ENABLED(MARLIN_DEV_MODE)
#define SHOW_ON_STATE READ(X_MIN_PIN)
#else
@@ -257,7 +260,7 @@ FORCE_INLINE void _draw_heater_status(const heater_ind_t heater, const bool blin
FORCE_INLINE void _draw_chamber_status(const bool blink) {
#if ENABLED(MARLIN_DEV_MODE)
- const float temp = 10 + (millis() >> 8) % CHAMBER_MAXTEMP,
+ const float temp = 10 + (millis() >> 8) % CHAMBER_MAXTEMP,
target = CHAMBER_MAXTEMP;
#else
const float temp = thermalManager.degChamber();
@@ -295,8 +298,14 @@ FORCE_INLINE void _draw_heater_status(const heater_ind_t heater, const bool blin
// Homed and known, display constantly.
//
FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const bool blink) {
- const uint8_t offs = (XYZ_SPACING) * axis;
- lcd_put_wchar(X_LABEL_POS + offs, XYZ_BASELINE, 'X' + axis);
+ const AxisEnum a = (
+ #if ENABLED(LCD_SHOW_E_TOTAL)
+ axis == E_AXIS ? X_AXIS :
+ #endif
+ axis
+ );
+ const uint8_t offs = (XYZ_SPACING) * a;
+ lcd_put_wchar(X_LABEL_POS + offs, XYZ_BASELINE, axis_codes[axis]);
lcd_moveto(X_VALUE_POS + offs, XYZ_BASELINE);
if (blink)
lcd_put_u8str(value);
@@ -325,11 +334,45 @@ void MarlinUI::draw_status_screen() {
if (first_page) count_renders++;
#endif
- static char xstring[5], ystring[5], zstring[8];
+ static char xstring[5
+ #if ENABLED(LCD_SHOW_E_TOTAL)
+ + 7
+ #endif
+ ], ystring[5], zstring[8];
#if ENABLED(FILAMENT_LCD_DISPLAY)
static char wstring[5], mstring[4];
#endif
+ #if HAS_PRINT_PROGRESS
+ #if DISABLED(DOGM_SD_PERCENT)
+ #define _SD_INFO_X(len) (PROGRESS_BAR_X + (PROGRESS_BAR_WIDTH) / 2 - (len) * (MENU_FONT_WIDTH) / 2)
+ #else
+ #define _SD_INFO_X(len) (LCD_PIXEL_WIDTH - (len) * (MENU_FONT_WIDTH))
+ #endif
+
+ #if ENABLED(DOGM_SD_PERCENT)
+ static char progress_string[5];
+ #endif
+ static uint8_t lastElapsed = 0, lastProgress = 0;
+ static u8g_uint_t elapsed_x_pos = 0, progress_bar_solid_width = 0;
+ static char elapsed_string[16];
+ #if ENABLED(SHOW_REMAINING_TIME)
+ static u8g_uint_t estimation_x_pos = 0;
+ static char estimation_string[10];
+ #if BOTH(DOGM_SD_PERCENT, ROTATE_PROGRESS_DISPLAY)
+ static u8g_uint_t progress_x_pos = 0;
+ static uint8_t progress_state = 0;
+ static bool prev_blink = 0;
+ #endif
+ #endif
+ #endif
+
+ const bool showxy = (true
+ #if ENABLED(LCD_SHOW_E_TOTAL)
+ && !printingIsActive()
+ #endif
+ );
+
// At the first page, generate new display values
if (first_page) {
#if ANIM_HBC
@@ -346,13 +389,86 @@ void MarlinUI::draw_status_screen() {
heat_bits = new_bits;
#endif
const xyz_pos_t lpos = current_position.asLogical();
- strcpy(xstring, ftostr4sign(lpos.x));
+ if (showxy)
+ strcpy(xstring, ftostr4sign(lpos.x));
+ else {
+ #if ENABLED(LCD_SHOW_E_TOTAL)
+ const uint8_t escale = e_move_accumulator >= 100000.0f ? 10 : 1; // After 100m switch to cm
+ sprintf_P(xstring, PSTR("%ld%cm"), uint32_t(_MAX(e_move_accumulator, 0.0f)) / escale, escale == 10 ? 'c' : 'm'); // 1234567mm
+ #endif
+ }
strcpy(ystring, ftostr4sign(lpos.y));
strcpy(zstring, ftostr52sp( lpos.z));
#if ENABLED(FILAMENT_LCD_DISPLAY)
strcpy(wstring, ftostr12ns(filwidth.measured_mm));
strcpy(mstring, i16tostr3(planner.volumetric_percent(parser.volumetric_enabled)));
#endif
+
+ // Progress / elapsed / estimation updates and string formatting to avoid float math on each LCD draw
+ #if HAS_PRINT_PROGRESS
+ const progress_t progress =
+ #if HAS_PRINT_PROGRESS_PERMYRIAD
+ get_progress_permyriad()
+ #else
+ get_progress_percent()
+ #endif
+ ;
+ duration_t elapsed = print_job_timer.duration();
+ const uint8_t p = progress & 0xFF, ev = elapsed.value & 0xFF;
+ if (p != lastProgress) {
+ lastProgress = p;
+
+ progress_bar_solid_width = u8g_uint_t((PROGRESS_BAR_WIDTH - 2) * progress / (PROGRESS_SCALE) * 0.01f);
+
+ #if ENABLED(DOGM_SD_PERCENT)
+ if (progress == 0) {
+ progress_string[0] = '\0';
+ #if ENABLED(SHOW_REMAINING_TIME)
+ estimation_string[0] = '\0';
+ estimation_x_pos = _SD_INFO_X(0);
+ #endif
+ }
+ else {
+ strcpy(progress_string, (
+ #if ENABLED(PRINT_PROGRESS_SHOW_DECIMALS)
+ permyriadtostr4(progress)
+ #else
+ ui8tostr3(progress / (PROGRESS_SCALE))
+ #endif
+ ));
+ }
+ #if BOTH(SHOW_REMAINING_TIME, ROTATE_PROGRESS_DISPLAY) // Tri-state progress display mode
+ progress_x_pos = _SD_INFO_X(strlen(progress_string));
+ #endif
+ #endif
+ }
+
+ if (ev != lastElapsed) {
+ lastElapsed = ev;
+ const bool has_days = (elapsed.value >= 60*60*24L);
+ const uint8_t len = elapsed.toDigital(elapsed_string, has_days);
+ elapsed_x_pos = _SD_INFO_X(len);
+
+ #if ENABLED(SHOW_REMAINING_TIME)
+ if (!(ev & 0x3)) {
+ duration_t estimation = elapsed.value * (100 * (PROGRESS_SCALE) - progress) / progress;
+ if (estimation.value == 0) {
+ estimation_string[0] = '\0';
+ estimation_x_pos = _SD_INFO_X(0);
+ }
+ else {
+ const bool has_days = (estimation.value >= 60*60*24L);
+ const uint8_t len = estimation.toDigital(estimation_string, has_days);
+ #if BOTH(DOGM_SD_PERCENT, ROTATE_PROGRESS_DISPLAY)
+ estimation_x_pos = _SD_INFO_X(len);
+ #else
+ estimation_x_pos = _SD_INFO_X(len + 1);
+ #endif
+ }
+ }
+ #endif
+ }
+ #endif
}
const bool blink = get_blink();
@@ -485,55 +601,68 @@ void MarlinUI::draw_status_screen() {
//
// Progress bar frame
//
- #define PROGRESS_BAR_X 54
- #define PROGRESS_BAR_WIDTH (LCD_PIXEL_WIDTH - PROGRESS_BAR_X)
if (PAGE_CONTAINS(49, 52))
u8g.drawFrame(PROGRESS_BAR_X, 49, PROGRESS_BAR_WIDTH, 4);
- const uint8_t progress = get_progress();
+ //
+ // Progress bar solid part
+ //
- if (progress > 1) {
+ if (PAGE_CONTAINS(50, 51)) // 50-51 (or just 50)
+ u8g.drawBox(PROGRESS_BAR_X + 1, 50, progress_bar_solid_width, 2);
- //
- // Progress bar solid part
- //
+ if (PAGE_CONTAINS(EXTRAS_BASELINE - INFO_FONT_ASCENT, EXTRAS_BASELINE - 1)) {
- if (PAGE_CONTAINS(50, 51)) // 50-51 (or just 50)
- u8g.drawBox(
- PROGRESS_BAR_X + 1, 50,
- (uint16_t)((PROGRESS_BAR_WIDTH - 2) * progress * 0.01), 2
- );
+ #if ALL(DOGM_SD_PERCENT, SHOW_REMAINING_TIME, ROTATE_PROGRESS_DISPLAY)
- //
- // SD Percent Complete
- //
+ if (prev_blink != blink) {
+ prev_blink = blink;
+ if (++progress_state >= 3) progress_state = 0;
+ }
- #if ENABLED(DOGM_SD_PERCENT)
- if (PAGE_CONTAINS(41, 48)) {
- // Percent complete
- lcd_put_u8str(55, 48, ui8tostr3(progress));
- lcd_put_wchar('%');
+ if (progress_state == 0) {
+ if (progress_string[0]) {
+ lcd_put_u8str(progress_x_pos, EXTRAS_BASELINE, progress_string);
+ lcd_put_wchar('%');
+ }
+ }
+ else if (progress_state == 2 && estimation_string[0]) {
+ lcd_put_u8str(PROGRESS_BAR_X, EXTRAS_BASELINE, "R:");
+ lcd_put_u8str(estimation_x_pos, EXTRAS_BASELINE, estimation_string);
+ }
+ else if (elapsed_string[0]) {
+ lcd_put_u8str(PROGRESS_BAR_X, EXTRAS_BASELINE, "E:");
+ lcd_put_u8str(elapsed_x_pos, EXTRAS_BASELINE, elapsed_string);
}
- #endif
- }
- //
- // Elapsed Time
- //
+ #else // !DOGM_SD_PERCENT || !SHOW_REMAINING_TIME || !ROTATE_PROGRESS_DISPLAY
- #if DISABLED(DOGM_SD_PERCENT)
- #define SD_DURATION_X (PROGRESS_BAR_X + (PROGRESS_BAR_WIDTH / 2) - len * (MENU_FONT_WIDTH / 2))
- #else
- #define SD_DURATION_X (LCD_PIXEL_WIDTH - len * MENU_FONT_WIDTH)
- #endif
+ //
+ // SD Percent Complete
+ //
- if (PAGE_CONTAINS(EXTRAS_BASELINE - INFO_FONT_ASCENT, EXTRAS_BASELINE - 1)) {
- char buffer[13];
- duration_t elapsed = print_job_timer.duration();
- bool has_days = (elapsed.value >= 60*60*24L);
- uint8_t len = elapsed.toDigital(buffer, has_days);
- lcd_put_u8str(SD_DURATION_X, EXTRAS_BASELINE, buffer);
+ #if ENABLED(DOGM_SD_PERCENT)
+ if (progress_string[0]) {
+ lcd_put_u8str(55, 48, progress_string); // Percent complete
+ lcd_put_wchar('%');
+ }
+ #endif
+
+ //
+ // Elapsed Time
+ //
+
+ #if ENABLED(SHOW_REMAINING_TIME)
+ if (blink && estimation_string[0]) {
+ lcd_put_wchar(estimation_x_pos, EXTRAS_BASELINE, 'R');
+ lcd_put_u8str(estimation_string);
+ }
+ else
+ #endif
+ lcd_put_u8str(elapsed_x_pos, EXTRAS_BASELINE, elapsed_string);
+
+ #endif // !DOGM_SD_PERCENT || !SHOW_REMAINING_TIME || !ROTATE_PROGRESS_DISPLAY
}
#endif // HAS_PRINT_PROGRESS
@@ -586,8 +715,14 @@ void MarlinUI::draw_status_screen() {
#else
- _draw_axis_value(X_AXIS, xstring, blink);
- _draw_axis_value(Y_AXIS, ystring, blink);
+ if (showxy) {
+ _draw_axis_value(X_AXIS, xstring, blink);
+ _draw_axis_value(Y_AXIS, ystring, blink);
+ }
+ else {
+ _draw_axis_value(E_AXIS, xstring, true);
+ lcd_put_u8str_P(PSTR(" "));
+ }
#endif
diff --git a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp
index 5e73ba8bf332..439078b51e48 100644
--- a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp
+++ b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp
@@ -59,6 +59,10 @@
#include "../../sd/cardreader.h"
#endif
+#if ENABLED(LCD_SHOW_E_TOTAL)
+ #include "../../Marlin.h" // for printingIsActive
+#endif
+
#define TEXT_MODE_LCD_WIDTH 16
#define BUFFER_WIDTH 256
@@ -660,7 +664,7 @@ void ST7920_Lite_Status_Screen::draw_status_message() {
#endif
}
-void ST7920_Lite_Status_Screen::draw_position(const xyz_pos_t &pos, const bool position_known) {
+void ST7920_Lite_Status_Screen::draw_position(const xyze_pos_t &pos, const bool position_known) {
char str[7];
set_ddram_address(DDRAM_LINE_4);
begin_data();
@@ -668,11 +672,25 @@ void ST7920_Lite_Status_Screen::draw_position(const xyz_pos_t &pos, const bool p
// If position is unknown, flash the labels.
const unsigned char alt_label = position_known ? 0 : (ui.get_blink() ? ' ' : 0);
- write_byte(alt_label ? alt_label : 'X');
- write_str(dtostrf(pos.x, -4, 0, str), 4);
+ if (true
+ #if ENABLED(LCD_SHOW_E_TOTAL)
+ && !printingIsActive()
+ #endif
+ ) {
+ write_byte(alt_label ? alt_label : 'X');
+ write_str(dtostrf(pos.x, -4, 0, str), 4);
- write_byte(alt_label ? alt_label : 'Y');
- write_str(dtostrf(pos.y, -4, 0, str), 4);
+ write_byte(alt_label ? alt_label : 'Y');
+ write_str(dtostrf(pos.y, -4, 0, str), 4);
+ }
+ else {
+ #if ENABLED(LCD_SHOW_E_TOTAL)
+ char tmp[15];
+ const uint8_t escale = e_move_accumulator >= 100000.0f ? 10 : 1; // After 100m switch to cm
+ sprintf_P(tmp, PSTR("E%-7ld%cm "), uint32_t(_MAX(e_move_accumulator, 0.0f)) / escale, escale == 10 ? 'c' : 'm'); // 1234567mm
+ write_str(tmp);
+ #endif
+ }
write_byte(alt_label ? alt_label : 'Z');
write_str(dtostrf(pos.z, -5, 1, str), 5);
@@ -850,7 +868,7 @@ void ST7920_Lite_Status_Screen::update_progress(const bool forceUpdate) {
// when an update is actually necessary.
static uint8_t last_progress = 0;
- const uint8_t progress = ui.get_progress();
+ const uint8_t progress = ui.get_progress_percent();
if (forceUpdate || last_progress != progress) {
last_progress = progress;
draw_progress_bar(progress);
diff --git a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.h b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.h
index 754c9933e7ce..bc18c43f107f 100644
--- a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.h
+++ b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.h
@@ -87,7 +87,7 @@ class ST7920_Lite_Status_Screen {
static void draw_print_time(const duration_t &elapsed);
static void draw_feedrate_percentage(const uint16_t percentage);
static void draw_status_message();
- static void draw_position(const xyz_pos_t &pos, bool position_known = true);
+ static void draw_position(const xyze_pos_t &pos, bool position_known = true);
static bool indicators_changed();
static bool position_changed();
diff --git a/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp b/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp
index 7f9376fbc1db..fa94338292e7 100644
--- a/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp
+++ b/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp
@@ -300,8 +300,8 @@ void MarlinUI::draw_kill_screen() {
do {
set_font(FONT_MENU);
lcd_put_u8str(0, h4 * 1, status_message);
- lcd_put_u8str_P(0, h4 * 2, PSTR(MSG_HALTED));
- lcd_put_u8str_P(0, h4 * 3, PSTR(MSG_PLEASE_RESET));
+ lcd_put_u8str_P(0, h4 * 2, GET_TEXT(MSG_HALTED));
+ lcd_put_u8str_P(0, h4 * 3, GET_TEXT(MSG_PLEASE_RESET));
} while (u8g.nextPage());
}
@@ -363,9 +363,9 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
}
// Draw a static line of text in the same idiom as a menu item
- void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const uint8_t style/*=SS_CENTER*/, const char * const valstr/*=nullptr*/) {
+ void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const uint8_t style/*=SS_DEFAULT*/, const char * const valstr/*=nullptr*/) {
- if (mark_as_selected(row, (style & SS_INVERT))) {
+ if (mark_as_selected(row, style & SS_INVERT)) {
u8g_uint_t n = LCD_PIXEL_WIDTH; // pixel width of string allowed
@@ -578,20 +578,20 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
#if EITHER(BABYSTEP_ZPROBE_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
const unsigned char cw_bmp[] PROGMEM = {
- B00000001,B11111100,B00000000,
- B00000111,B11111111,B00000000,
- B00001111,B00000111,B10000000,
- B00001110,B00000001,B11000000,
- B00000000,B00000001,B11000000,
+ B00000000,B11111110,B00000000,
+ B00000011,B11111111,B10000000,
+ B00000111,B11000111,B11000000,
+ B00000111,B00000001,B11100000,
B00000000,B00000000,B11100000,
- B00001000,B00000000,B11100000,
- B00011100,B00000000,B11100000,
- B00111110,B00000000,B11100000,
- B01111111,B00000000,B11100000,
- B00011100,B00000000,B11100000,
+ B00000000,B00000000,B11110000,
+ B00000000,B00000000,B01110000,
+ B00000100,B00000000,B01110000,
+ B00001110,B00000000,B01110000,
+ B00011111,B00000000,B01110000,
+ B00111111,B10000000,B11110000,
B00001110,B00000000,B11100000,
- B00001110,B00000001,B11000000,
- B00000111,B10000011,B11000000,
+ B00001111,B00000001,B11100000,
+ B00000111,B11000111,B11000000,
B00000011,B11111111,B10000000,
B00000000,B11111110,B00000000
};
@@ -599,20 +599,20 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
const unsigned char ccw_bmp[] PROGMEM = {
B00000000,B11111110,B00000000,
B00000011,B11111111,B10000000,
- B00000111,B10000011,B11000000,
- B00001110,B00000001,B11000000,
+ B00000111,B11000111,B11000000,
+ B00001111,B00000001,B11100000,
B00001110,B00000000,B11100000,
- B00011100,B00000000,B11100000,
- B01111111,B00000000,B11100000,
- B00111110,B00000000,B11100000,
- B00011100,B00000000,B11100000,
- B00001000,B00000000,B11100000,
+ B00111111,B10000000,B11110000,
+ B00011111,B00000000,B01110000,
+ B00001110,B00000000,B01110000,
+ B00000100,B00000000,B01110000,
+ B00000000,B00000000,B01110000,
+ B00000000,B00000000,B11110000,
B00000000,B00000000,B11100000,
- B00000000,B00000001,B11000000,
- B00001110,B00000001,B11000000,
- B00001111,B00000111,B10000000,
- B00000111,B11111111,B00000000,
- B00000001,B11111100,B00000000
+ B00000111,B00000001,B11100000,
+ B00000111,B11000111,B11000000,
+ B00000011,B11111111,B10000000,
+ B00000000,B11111110,B00000000
};
const unsigned char up_arrow_bmp[] PROGMEM = {
diff --git a/Marlin/src/lcd/dogm/ultralcd_DOGM.h b/Marlin/src/lcd/dogm/ultralcd_DOGM.h
index 87569127360a..36c7247e168a 100644
--- a/Marlin/src/lcd/dogm/ultralcd_DOGM.h
+++ b/Marlin/src/lcd/dogm/ultralcd_DOGM.h
@@ -82,7 +82,7 @@
// MaKrPanel, Mini Viki, Viki 2.0, AZSMZ 12864 ST7565 controller
- #define SMART_RAMPS (MB(RAMPS_SMART_EFB) || MB(RAMPS_SMART_EEB) || MB(RAMPS_SMART_EFF) || MB(RAMPS_SMART_EEF) || MB(RAMPS_SMART_SF))
+ #define SMART_RAMPS MB(RAMPS_SMART_EFB, RAMPS_SMART_EEB, RAMPS_SMART_EFF, RAMPS_SMART_EEF, RAMPS_SMART_SF)
#define U8G_CLASS U8GLIB_64128N_2X_HAL // 4 stripes (HW-SPI)
#if SMART_RAMPS || DOGLCD_SCK != SCK_PIN || DOGLCD_MOSI != MOSI_PIN
#define FORCE_SOFT_SPI // SW-SPI
diff --git a/Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.h b/Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.h
index 960375ae43ff..858cbe88240e 100644
--- a/Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.h
+++ b/Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.h
@@ -49,11 +49,11 @@
#define CPU_ST7920_DELAY_1 DELAY_NS(0)
#define CPU_ST7920_DELAY_2 DELAY_NS(0)
#define CPU_ST7920_DELAY_3 DELAY_NS(50)
-#elif MB(3DRAG) || MB(K8200) || MB(K8400) || MB(SILVER_GATE)
+#elif MB(3DRAG, K8200, K8400, SILVER_GATE)
#define CPU_ST7920_DELAY_1 DELAY_NS(0)
#define CPU_ST7920_DELAY_2 DELAY_NS(188)
#define CPU_ST7920_DELAY_3 DELAY_NS(0)
-#elif MB(MINIRAMBO) || MB(EINSY_RAMBO) || MB(EINSY_RETRO)
+#elif MB(MINIRAMBO, EINSY_RAMBO, EINSY_RETRO)
#define CPU_ST7920_DELAY_1 DELAY_NS(0)
#define CPU_ST7920_DELAY_2 DELAY_NS(250)
#define CPU_ST7920_DELAY_3 DELAY_NS(0)
diff --git a/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplay.cpp b/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplay.cpp
index 1fb3783b2d2f..c6692941252c 100644
--- a/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplay.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplay.cpp
@@ -289,11 +289,11 @@ void DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM(DGUS_VP_Variable
// Don't let the user in the dark why there is no reaction.
if (!ExtUI::isMediaInserted()) {
- setstatusmessagePGM(PSTR(MSG_NO_MEDIA));
+ setstatusmessagePGM(GET_TEXT(MSG_NO_MEDIA));
return;
}
if (card.flag.abort_sd_printing) {
- setstatusmessagePGM(PSTR(MSG_MEDIA_ABORTING));
+ setstatusmessagePGM(GET_TEXT(MSG_MEDIA_ABORTING));
return;
}
}
@@ -472,13 +472,13 @@ void DGUSScreenVariableHandler::HandleTemperatureChanged(DGUS_VP_Variable &var,
switch (var.VP) {
default: return;
#if HOTENDS >= 1
- case VP_T_E1_Set:
+ case VP_T_E0_Set:
thermalManager.setTargetHotend(newvalue, 0);
acceptedvalue = thermalManager.temp_hotend[0].target;
break;
#endif
#if HOTENDS >= 2
- case VP_T_E2_Set:
+ case VP_T_E1_Set:
thermalManager.setTargetHotend(newvalue, 1);
acceptedvalue = thermalManager.temp_hotend[1].target;
break;
@@ -503,10 +503,10 @@ void DGUSScreenVariableHandler::HandleFlowRateChanged(DGUS_VP_Variable &var, voi
switch (var.VP) {
default: return;
#if (HOTENDS >= 1)
- case VP_Flowrate_E1: target_extruder = 0; break;
+ case VP_Flowrate_E0: target_extruder = 0; break;
#endif
#if (HOTENDS >= 2)
- case VP_Flowrate_E2: target_extruder = 1; break;
+ case VP_Flowrate_E1: target_extruder = 1; break;
#endif
}
@@ -526,11 +526,11 @@ void DGUSScreenVariableHandler::HandleManualExtrude(DGUS_VP_Variable &var, void
ExtUI::extruder_t target_extruder;
switch (var.VP) {
- #if HOTENDS >=1
- case VP_MOVE_E1: target_extruder = ExtUI::extruder_t::E0; break;
+ #if HOTENDS >= 1
+ case VP_MOVE_E0: target_extruder = ExtUI::extruder_t::E0; break;
#endif
- #if HOTENDS >=2
- case VP_MOVE_E2: target_extruder = ExtUI::extruder_t::E1; break
+ #if HOTENDS >= 2
+ case VP_MOVE_E1: target_extruder = ExtUI::extruder_t::E1; break
#endif
default: return;
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.cpp b/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.cpp
index bc1296f2f57b..de15d545977f 100644
--- a/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.cpp
@@ -46,10 +46,10 @@ const uint16_t VPList_Main[] PROGMEM = {
const uint16_t VPList_Temp[] PROGMEM = {
#if HOTENDS >= 1
- VP_T_E1_Is, VP_T_E1_Set,
+ VP_T_E0_Is, VP_T_E0_Set,
#endif
#if HOTENDS >= 2
- VP_T_E2_I, VP_T_E2_S,
+ VP_T_E1_I, VP_T_E1_S,
#endif
#if HAS_HEATED_BED
VP_T_Bed_Is, VP_T_Bed_Set,
@@ -60,10 +60,10 @@ const uint16_t VPList_Temp[] PROGMEM = {
const uint16_t VPList_Status[] PROGMEM = {
/* VP_M117, for completeness, but it cannot be auto-uploaded */
#if HOTENDS >= 1
- VP_T_E1_Is, VP_T_E1_Set,
+ VP_T_E0_Is, VP_T_E0_Set,
#endif
#if HOTENDS >= 2
- VP_T_E2_I, VP_T_E2_S,
+ VP_T_E1_I, VP_T_E1_S,
#endif
#if HAS_HEATED_BED
VP_T_Bed_Is, VP_T_Bed_Set,
@@ -81,10 +81,10 @@ const uint16_t VPList_Status[] PROGMEM = {
const uint16_t VPList_Status2[] PROGMEM = {
/* VP_M117, for completeness, but it cannot be auto-uploaded */
#if HOTENDS >= 1
- VP_Flowrate_E1,
+ VP_Flowrate_E0,
#endif
#if HOTENDS >= 2
- VP_Flowrate_E2,
+ VP_Flowrate_E1,
#endif
VP_PrintProgress_Percentage,
VP_PrintTime,
@@ -107,7 +107,7 @@ const uint16_t VPList_FanAndFeedrate[] PROGMEM = {
};
const uint16_t VPList_SD_FlowRates[] PROGMEM = {
- VP_Flowrate_E1, VP_Flowrate_E2,
+ VP_Flowrate_E0, VP_Flowrate_E1,
0x0000
};
@@ -166,17 +166,17 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = {
// Temperature Data
#if HOTENDS >= 1
- VPHELPER(VP_T_E1_Is, &thermalManager.temp_hotend[0].celsius, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<0>),
- VPHELPER(VP_T_E1_Set, &thermalManager.temp_hotend[0].target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
- VPHELPER(VP_Flowrate_E1, nullptr, DGUSScreenVariableHandler::HandleFlowRateChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
+ VPHELPER(VP_T_E0_Is, &thermalManager.temp_hotend[0].celsius, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<0>),
+ VPHELPER(VP_T_E0_Set, &thermalManager.temp_hotend[0].target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
+ VPHELPER(VP_Flowrate_E0, nullptr, DGUSScreenVariableHandler::HandleFlowRateChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
VPHELPER(VP_EPos, &destination.e, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>),
- VPHELPER(VP_MOVE_E1, nullptr, &DGUSScreenVariableHandler::HandleManualExtrude, nullptr),
+ VPHELPER(VP_MOVE_E0, nullptr, &DGUSScreenVariableHandler::HandleManualExtrude, nullptr),
#endif
#if HOTENDS >= 2
- VPHELPER(VP_T_E2_I, &thermalManager.temp_hotend[1].celsius, nullptr, DGUSLCD_SendFloatAsLongValueToDisplay<0>),
- VPHELPER(VP_T_E2_S, &thermalManager.temp_hotend[1].target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
- VPHELPER(VP_Flowrate_E2, nullptr, DGUSScreenVariableHandler::HandleFlowRateChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
- VPHELPER(VP_MOVE_E2, nullptr, &DGUSScreenVariableHandler::HandleManualExtrude, nullptr),
+ VPHELPER(VP_T_E1_I, &thermalManager.temp_hotend[1].celsius, nullptr, DGUSLCD_SendFloatAsLongValueToDisplay<0>),
+ VPHELPER(VP_T_E1_S, &thermalManager.temp_hotend[1].target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
+ VPHELPER(VP_Flowrate_E1, nullptr, DGUSScreenVariableHandler::HandleFlowRateChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
+ VPHELPER(VP_MOVE_E1, nullptr, &DGUSScreenVariableHandler::HandleManualExtrude, nullptr),
#endif
#if HOTENDS >= 3
#error More than 2 Hotends currently not implemented on the Display UI design.
@@ -200,7 +200,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = {
VPHELPER(VP_ZPos, ¤t_position.z, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>),
// Print Progress.
- VPHELPER(VP_PrintProgress_Percentage, &ui.progress_bar_percent, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay ),
+ VPHELPER(VP_PrintProgress_Percentage, &ui.progress_override, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay ),
// Print Time
VPHELPER_STR(VP_PrintTime, nullptr, VP_PrintTime_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintTimeToDisplay ),
diff --git a/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.h b/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.h
index f54a2938ec7c..f90cfa948b60 100644
--- a/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.h
+++ b/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.h
@@ -109,12 +109,12 @@ constexpr uint16_t VP_SD_AbortPrintConfirmed = 0x2028; // Abort print confirmati
constexpr uint16_t VP_MOVE_X = 0x2100;
constexpr uint16_t VP_MOVE_Y = 0x2102;
constexpr uint16_t VP_MOVE_Z = 0x2104;
-constexpr uint16_t VP_MOVE_E1 = 0x2110;
-constexpr uint16_t VP_MOVE_E2 = 0x2112;
-//constexpr uint16_t VP_MOVE_E3 = 0x2114;
-//constexpr uint16_t VP_MOVE_E4 = 0x2116;
-//constexpr uint16_t VP_MOVE_E5 = 0x2118;
-//constexpr uint16_t VP_MOVE_E6 = 0x211A;
+constexpr uint16_t VP_MOVE_E0 = 0x2110;
+constexpr uint16_t VP_MOVE_E1 = 0x2112;
+//constexpr uint16_t VP_MOVE_E2 = 0x2114;
+//constexpr uint16_t VP_MOVE_E3 = 0x2116;
+//constexpr uint16_t VP_MOVE_E4 = 0x2118;
+//constexpr uint16_t VP_MOVE_E5 = 0x211A;
constexpr uint16_t VP_HOME_ALL = 0x2120;
// Firmware version on the boot screen.
@@ -126,34 +126,34 @@ constexpr uint16_t VP_M117 = 0x3020;
constexpr uint8_t VP_M117_LEN = 0x20;
// Temperatures.
-constexpr uint16_t VP_T_E1_Is = 0x3060; // 4 Byte Integer
-constexpr uint16_t VP_T_E1_Set = 0x3062; // 2 Byte Integer
-constexpr uint16_t VP_T_E2_Is = 0x3064; // 4 Byte Integer
+constexpr uint16_t VP_T_E0_Is = 0x3060; // 4 Byte Integer
+constexpr uint16_t VP_T_E0_Set = 0x3062; // 2 Byte Integer
+constexpr uint16_t VP_T_E1_Is = 0x3064; // 4 Byte Integer
// reserved to support up to 6 Extruders:
-//constexpr uint16_t VP_T_E2_Set = 0x3066; // 2 Byte Integer
-//constexpr uint16_t VP_T_E3_Is = 0x3068; // 4 Byte Integer
-//constexpr uint16_t VP_T_E3_Set = 0x306A; // 2 Byte Integer
-//constexpr uint16_t VP_T_E4_Is = 0x306C; // 4 Byte Integer
-//constexpr uint16_t VP_T_E4_Set = 0x306E; // 2 Byte Integer
-//constexpr uint16_t VP_T_E5_Is = 0x3070; // 4 Byte Integer
-//constexpr uint16_t VP_T_E5_Set = 0x3072; // 2 Byte Integer
-//constexpr uint16_t VP_T_E5_Is = 0x3074; // 4 Byte Integer
-//constexpr uint16_t VP_T_E5_Set = 0x3076; // 2 Byte Integer
-//constexpr uint16_t VP_T_E6_Is = 0x3078; // 4 Byte Integer
-//constexpr uint16_t VP_T_E6_Set = 0x307A; // 2 Byte Integer
+//constexpr uint16_t VP_T_E1_Set = 0x3066; // 2 Byte Integer
+//constexpr uint16_t VP_T_E2_Is = 0x3068; // 4 Byte Integer
+//constexpr uint16_t VP_T_E2_Set = 0x306A; // 2 Byte Integer
+//constexpr uint16_t VP_T_E3_Is = 0x306C; // 4 Byte Integer
+//constexpr uint16_t VP_T_E3_Set = 0x306E; // 2 Byte Integer
+//constexpr uint16_t VP_T_E4_Is = 0x3070; // 4 Byte Integer
+//constexpr uint16_t VP_T_E4_Set = 0x3072; // 2 Byte Integer
+//constexpr uint16_t VP_T_E4_Is = 0x3074; // 4 Byte Integer
+//constexpr uint16_t VP_T_E4_Set = 0x3076; // 2 Byte Integer
+//constexpr uint16_t VP_T_E5_Is = 0x3078; // 4 Byte Integer
+//constexpr uint16_t VP_T_E5_Set = 0x307A; // 2 Byte Integer
constexpr uint16_t VP_T_Bed_Is = 0x3080; // 4 Byte Integer
constexpr uint16_t VP_T_Bed_Set = 0x3082; // 2 Byte Integer
-constexpr uint16_t VP_Flowrate_E1 = 0x3090; // 2 Byte Integer
-constexpr uint16_t VP_Flowrate_E2 = 0x3092; // 2 Byte Integer
+constexpr uint16_t VP_Flowrate_E0 = 0x3090; // 2 Byte Integer
+constexpr uint16_t VP_Flowrate_E1 = 0x3092; // 2 Byte Integer
// reserved for up to 6 Extruders:
-//constexpr uint16_t VP_Flowrate_E3 = 0x3094;
-//constexpr uint16_t VP_Flowrate_E4 = 0x3096;
-//constexpr uint16_t VP_Flowrate_E5 = 0x3098;
-//constexpr uint16_t VP_Flowrate_E6 = 0x309A;
+//constexpr uint16_t VP_Flowrate_E2 = 0x3094;
+//constexpr uint16_t VP_Flowrate_E3 = 0x3096;
+//constexpr uint16_t VP_Flowrate_E4 = 0x3098;
+//constexpr uint16_t VP_Flowrate_E5 = 0x309A;
constexpr uint16_t VP_Fan_Percentage = 0x3100; // 2 Byte Integer (0..100)
constexpr uint16_t VP_Feedrate_Percentage = 0x3102; // 2 Byte Integer (0..100)
@@ -182,9 +182,9 @@ constexpr uint16_t VP_SD_FileName4 = 0x3280;
// located at 0x5000 and up
// Not used yet!
// This can be used e.g to make controls / data display invisible
-constexpr uint16_t SP_T_E1_Is = 0x5000;
-constexpr uint16_t SP_T_E1_Set = 0x5010;
-constexpr uint16_t SP_T_E2_Is = 0x5020;
+constexpr uint16_t SP_T_E0_Is = 0x5000;
+constexpr uint16_t SP_T_E0_Set = 0x5010;
+constexpr uint16_t SP_T_E1_Is = 0x5020;
constexpr uint16_t SP_T_Bed_Is = 0x5030;
constexpr uint16_t SP_T_Bed_Set = 0x5040;
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/compat.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/compat.h
index 7e051be75a83..90fd615a5d73 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/compat.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/compat.h
@@ -38,11 +38,6 @@
// __MARLIN_FIRMWARE__ exists when compiled within Marlin.
#include "pin_mappings.h"
#else
- // Messages that are declared in Marlin
- #define WELCOME_MSG "Printer Ready"
- #define MSG_MEDIA_INSERTED "Media Inserted"
- #define MSG_MEDIA_REMOVED "Media Removed"
-
namespace UI {
static inline uint32_t safe_millis() {return millis();};
static inline void yield() {};
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/command_processor.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/command_processor.h
index a770ebbd2446..a6c1f5c918b4 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/command_processor.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/command_processor.h
@@ -310,7 +310,9 @@ class CommandProcessor : public CLCD::CommandFifo {
int8_t apply_fit_text(int16_t w, int16_t h, T text) {
using namespace FTDI;
int8_t font = _font;
- const bool is_utf8 = has_utf8_chars(text);
+ #ifdef TOUCH_UI_USE_UTF8
+ const bool is_utf8 = has_utf8_chars(text);
+ #endif
for (;font >= 26;) {
int16_t width, height;
#ifdef TOUCH_UI_USE_UTF8
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/dl_cache.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/dl_cache.cpp
index bf8ca61f3aa9..5e7377e1a077 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/dl_cache.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/dl_cache.cpp
@@ -115,12 +115,12 @@ bool DLCache::store(uint32_t num_bytes /* = 0*/) {
// If we are allocating new space...
dl_addr = CLCD::mem_read_32(DL_FREE_ADDR);
free_space = MAP::RAM_G_SIZE - dl_addr;
- dl_alloc = num_bytes ? num_bytes : new_dl_size;
+ dl_alloc = num_bytes ?: new_dl_size;
dl_size = new_dl_size;
} else {
// Otherwise, we can only store as much space
// as was previously allocated.
- free_space = num_bytes ? num_bytes : dl_size;
+ free_space = num_bytes ?: dl_size;
dl_alloc = 0;
dl_size = new_dl_size;
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/rgb_t.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/rgb_t.h
index 07ee957f487c..e31c69e60503 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/rgb_t.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/rgb_t.h
@@ -21,6 +21,46 @@
#pragma once
+/**
+ * Implementation of hsl_to_rgb as constexpr functions based on:
+ *
+ * https://www.rapidtables.com/convert/color/hsl-to-rgb.html
+ */
+
+constexpr float _hsl_fmod(float x, float y) {
+ return x - int(x/y)*y;
+}
+
+constexpr float _hsl_c(int, float S, float L) {
+ return (1.0f - fabs(2*L-1.0f)) * S;
+}
+
+constexpr float _hsl_x(int H, float S, float L) {
+ return _hsl_c(H,S,L) * (1.0f - fabs(_hsl_fmod(float(H)/60, 2) - 1));
+}
+
+constexpr float _hsl_m(int H, float S, float L) {
+ return L - _hsl_c(H,S,L)/2;
+}
+
+constexpr float _hsl_rgb(int H, float S, float L, float r, float g, float b) {
+ return ((uint32_t((r + _hsl_m(H,S,L))*255+0.5) << 16) |
+ (uint32_t((g + _hsl_m(H,S,L))*255+0.5) << 8) |
+ (uint32_t((b + _hsl_m(H,S,L))*255+0.5) << 0));
+}
+
+constexpr uint32_t hsl_to_rgb(int H, float S, float L) {
+ return (H < 60) ? _hsl_rgb(H,S,L,_hsl_c(H,S,L), _hsl_x(H,S,L), 0) :
+ (H < 120) ? _hsl_rgb(H,S,L,_hsl_x(H,S,L), _hsl_c(H,S,L), 0) :
+ (H < 180) ? _hsl_rgb(H,S,L, 0, _hsl_c(H,S,L), _hsl_x(H,S,L)) :
+ (H < 240) ? _hsl_rgb(H,S,L, 0, _hsl_x(H,S,L), _hsl_c(H,S,L)) :
+ (H < 300) ? _hsl_rgb(H,S,L,_hsl_x(H,S,L), 0, _hsl_c(H,S,L)) :
+ _hsl_rgb(H,S,L,_hsl_c(H,S,L), 0, _hsl_x(H,S,L));
+}
+
+/**
+ * Structure for RGB colors
+ */
struct rgb_t {
union {
struct {
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.h
index a8a700864b1c..fb66e6d77e9f 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.h
@@ -20,70 +20,6 @@
****************************************************************************/
#pragma once
-typedef const char Language_Str[];
-
-// Count how many languages are defined.
-
-#if defined(LCD_LANGUAGE_5)
- #define NUM_LANGUAGES 5
-#elif defined(LCD_LANGUAGE_4)
- #define NUM_LANGUAGES 4
-#elif defined(LCD_LANGUAGE_3)
- #define NUM_LANGUAGES 3
-#elif defined(LCD_LANGUAGE_2)
- #define NUM_LANGUAGES 2
-#else
- #define NUM_LANGUAGES 1
-#endif
-
-// Set undefined languages equal to the last and
-// let the compiler optimize out the duplicates
-
-#ifndef LCD_LANGUAGE_1
- #define LCD_LANGUAGE_1 LCD_LANGUAGE
-#endif
-
-#ifndef LCD_LANGUAGE_2
- #define LCD_LANGUAGE_2 LCD_LANGUAGE_1
-#endif
-
-#ifndef LCD_LANGUAGE_3
- #define LCD_LANGUAGE_3 LCD_LANGUAGE_2
-#endif
-
-#ifndef LCD_LANGUAGE_4
- #define LCD_LANGUAGE_4 LCD_LANGUAGE_3
-#endif
-
-#ifndef LCD_LANGUAGE_5
- #define LCD_LANGUAGE_5 LCD_LANGUAGE_4
-#endif
-
-// Indirection required to paste together the namespace name
-
-#define _GET_LANG(LANG) Language_##LANG
-#define GET_LANG(LANG) _GET_LANG(LANG)
-
-#if NUM_LANGUAGES > 1
- extern uint8_t lang;
- // The compiler does a good job of "flattening" out this
- // if statement when there are fewer than five languages.
- #define GET_TEXT(MSG) ( \
- lang == 0 ? GET_LANG(LCD_LANGUAGE_1)::MSG : \
- lang == 1 ? GET_LANG(LCD_LANGUAGE_2)::MSG : \
- lang == 2 ? GET_LANG(LCD_LANGUAGE_3)::MSG : \
- lang == 3 ? GET_LANG(LCD_LANGUAGE_4)::MSG : \
- GET_LANG(LCD_LANGUAGE_5)::MSG \
- )
-#else
- #define GET_TEXT(MSG) GET_LANG(LCD_LANGUAGE_1)::MSG
-#endif
-#define GET_TEXTF(MSG) reinterpret_cast(GET_TEXT(MSG))
-
-#define GET_LANGUAGE_NAME(N) GET_LANG(LCD_LANGUAGE_##N)::LANGUAGE
-
-// All the language tables go here
-
#include "language_en.h"
#include "language_de.h"
#include "language_fr.h"
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_de.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_de.h
index 3c26bfb3d8f6..f00c50591e9b 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_de.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_de.h
@@ -24,8 +24,6 @@
namespace Language_de {
using namespace Language_en; // Inherit undefined strings from English
- PROGMEM Language_Str LANGUAGE = u8"Deutsche";
-
PROGMEM Language_Str YES = u8"JA";
PROGMEM Language_Str NO = u8"NEIN";
PROGMEM Language_Str BACK = u8"Zurück";
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h
index d9bd63eb358f..1485b0838ea6 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h
@@ -24,8 +24,6 @@
#include "language.h"
namespace Language_en {
- PROGMEM Language_Str LANGUAGE = u8"English";
-
PROGMEM Language_Str YES = u8"Yes";
PROGMEM Language_Str NO = u8"No";
PROGMEM Language_Str BACK = u8"Back";
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h
index a9ad20d320e5..64582219ced6 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h
@@ -24,8 +24,6 @@
namespace Language_fr {
using namespace Language_en; // Inherit undefined strings from English
- PROGMEM Language_Str LANGUAGE = u8"Français";
-
PROGMEM Language_Str YES = u8"oui";
PROGMEM Language_Str NO = u8"non";
PROGMEM Language_Str BACK = u8"Retour";
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/marlin_events.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/marlin_events.cpp
index 4318ae0a04e3..e61033ee3a81 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/marlin_events.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/marlin_events.cpp
@@ -38,19 +38,21 @@ namespace ExtUI {
EventLoop::loop();
}
- void onPrinterKilled(PGM_P lcd_msg) {
- KillScreen::show(progmem_str(lcd_msg));
+ void onPrinterKilled(PGM_P const error, PGM_P const component) {
+ char str[strlen_P(error) + strlen_P(component) + 3];
+ sprintf_P(str, PSTR(S_FMT ": " S_FMT), error, component);
+ KillScreen::show(str);
}
void onMediaInserted() {
if (AT_SCREEN(StatusScreen))
- StatusScreen::setStatusMessage(F(MSG_MEDIA_INSERTED));
+ StatusScreen::setStatusMessage(GET_TEXT_F(MSG_MEDIA_INSERTED));
sound.play(media_inserted, PLAY_ASYNCHRONOUS);
}
void onMediaRemoved() {
if (AT_SCREEN(StatusScreen))
- StatusScreen::setStatusMessage(F(MSG_MEDIA_REMOVED));
+ StatusScreen::setStatusMessage(GET_TEXT_F(MSG_MEDIA_REMOVED));
sound.play(media_removed, PLAY_ASYNCHRONOUS);
if (AT_SCREEN(FilesScreen)) {
GOTO_SCREEN(StatusScreen)
@@ -123,6 +125,11 @@ namespace ExtUI {
else
ConfirmUserRequestAlertBox::hide();
}
+
+ #if HAS_LEVELING && HAS_MESH
+ void onMeshUpdate(const uint8_t, const uint8_t, const float) {
+ }
+ #endif
}
#endif // LULZBOT_TOUCH_UI
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/about_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/about_screen.cpp
index b062446cab87..612f91446482 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/about_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/about_screen.cpp
@@ -49,7 +49,7 @@ void AboutScreen::onRedraw(draw_mode_t) {
#ifdef LULZBOT_LCD_MACHINE_NAME
LULZBOT_LCD_MACHINE_NAME
#else
- GET_TEXTF(COLOR_TOUCH_PANEL)
+ GET_TEXT_F(COLOR_TOUCH_PANEL)
#endif
), OPT_CENTER, font_xlarge);
@@ -68,14 +68,14 @@ void AboutScreen::onRedraw(draw_mode_t) {
#ifdef LULZBOT_LCD_TOOLHEAD_NAME
about_str
#else
- GET_TEXTF(ABOUT_ALEPH_OBJECTS)
+ GET_TEXT_F(ABOUT_ALEPH_OBJECTS)
#endif
, OPT_CENTER, font_medium);
cmd.tag(0);
draw_text_box(cmd, BTN_POS(1,6), BTN_SIZE(4,2), progmem_str(getFirmwareName_str()), OPT_CENTER, font_medium);
- cmd.font(font_medium).colors(action_btn).tag(1).button(BTN_POS(2,8), BTN_SIZE(2,1), GET_TEXTF(OKAY));
+ cmd.font(font_medium).colors(action_btn).tag(1).button(BTN_POS(2,8), BTN_SIZE(2,1), GET_TEXT_F(OKAY));
}
bool AboutScreen::onTouchEnd(uint8_t tag) {
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/advanced_settings_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/advanced_settings_menu.cpp
index f4aad3b5933e..7168b803c557 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/advanced_settings_menu.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/advanced_settings_menu.cpp
@@ -49,52 +49,52 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) {
#else
.enabled(0)
#endif
- .tag(2) .button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXTF(ZPROBE_ZOFFSET))
+ .tag(2) .button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXT_F(ZPROBE_ZOFFSET))
.enabled(1)
- .tag(3) .button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXTF(STEPS_PER_MM))
+ .tag(3) .button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXT_F(STEPS_PER_MM))
#if HAS_TRINAMIC
.enabled(1)
#else
.enabled(0)
#endif
- .tag(13).button( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXTF(MOTOR_CURRENT))
+ .tag(13).button( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXT_F(MOTOR_CURRENT))
#if HAS_TRINAMIC
.enabled(1)
#else
.enabled(0)
#endif
- .tag(14).button( BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXTF(HOME_SENSE))
+ .tag(14).button( BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXT_F(HOME_SENSE))
#if HOTENDS > 1
.enabled(1)
#else
.enabled(0)
#endif
- .tag(4) .button( BTN_POS(1,2), BTN_SIZE(1,1), GET_TEXTF(TOOL_OFFSETS))
+ .tag(4) .button( BTN_POS(1,2), BTN_SIZE(1,1), GET_TEXT_F(TOOL_OFFSETS))
#if EITHER(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR)
.enabled(1)
#else
.enabled(0)
#endif
- .tag(11).button( BTN_POS(1,3), BTN_SIZE(1,1), GET_TEXTF(FILAMENT))
- .tag(12).button( BTN_POS(1,6), BTN_SIZE(1,1), GET_TEXTF(ENDSTOPS))
- .tag(15).button( BTN_POS(2,6), BTN_SIZE(1,1), GET_TEXTF(DISPLAY_MENU))
- .tag(9) .button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(INTERFACE_SETTINGS))
- .tag(10).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXTF(RESTORE_DEFAULTS))
- .tag(5) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXTF(VELOCITY))
- .tag(6) .button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXTF(ACCELERATION))
- #if ENABLED(JUNCTION_DEVIATION)
- .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JUNC_DEVIATION))
+ .tag(11).button( BTN_POS(1,3), BTN_SIZE(1,1), GET_TEXT_F(FILAMENT))
+ .tag(12).button( BTN_POS(1,6), BTN_SIZE(1,1), GET_TEXT_F(ENDSTOPS))
+ .tag(15).button( BTN_POS(2,6), BTN_SIZE(1,1), GET_TEXT_F(DISPLAY_MENU))
+ .tag(9) .button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXT_F(INTERFACE_SETTINGS))
+ .tag(10).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(RESTORE_DEFAULTS))
+ .tag(5) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXT_F(VELOCITY))
+ .tag(6) .button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXT_F(ACCELERATION))
+ #if DISABLED(CLASSIC_JERK)
+ .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXT_F(JUNC_DEVIATION))
#else
- .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JERK))
+ .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXT_F(JERK))
#endif
#if ENABLED(BACKLASH_GCODE)
.enabled(1)
#else
.enabled(0)
#endif
- .tag(8).button( BTN_POS(2,5), BTN_SIZE(1,1), GET_TEXTF(BACKLASH))
+ .tag(8).button( BTN_POS(2,5), BTN_SIZE(1,1), GET_TEXT_F(BACKLASH))
.colors(action_btn)
- .tag(1) .button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXTF(BACK));
+ .tag(1) .button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXT_F(BACK));
#undef GRID_COLS
#undef GRID_ROWS
#else
@@ -105,47 +105,47 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) {
#else
.enabled(0)
#endif
- .tag(2) .button( BTN_POS(1,1), BTN_SIZE(1,2), GET_TEXTF(ZPROBE_ZOFFSET))
+ .tag(2) .button( BTN_POS(1,1), BTN_SIZE(1,2), GET_TEXT_F(ZPROBE_ZOFFSET))
.enabled(1)
- .tag(3) .button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXTF(STEPS_PER_MM))
+ .tag(3) .button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXT_F(STEPS_PER_MM))
#if HAS_TRINAMIC
.enabled(1)
#else
.enabled(0)
#endif
- .tag(13).button( BTN_POS(3,1), BTN_SIZE(1,1), GET_TEXTF(MOTOR_CURRENT))
+ .tag(13).button( BTN_POS(3,1), BTN_SIZE(1,1), GET_TEXT_F(MOTOR_CURRENT))
#if HAS_TRINAMIC
.enabled(1)
#else
.enabled(0)
#endif
- .tag(14).button( BTN_POS(3,2), BTN_SIZE(1,1), GET_TEXTF(HOME_SENSE))
+ .tag(14).button( BTN_POS(3,2), BTN_SIZE(1,1), GET_TEXT_F(HOME_SENSE))
#if ENABLED(BACKLASH_GCODE)
.enabled(1)
#else
.enabled(0)
#endif
- .tag(8).button( BTN_POS(3,3), BTN_SIZE(1,1), GET_TEXTF(BACKLASH))
+ .tag(8).button( BTN_POS(3,3), BTN_SIZE(1,1), GET_TEXT_F(BACKLASH))
#if HOTENDS > 1
.enabled(1)
#else
.enabled(0)
#endif
- .tag(4) .button( BTN_POS(1,3), BTN_SIZE(1,1), GET_TEXTF(TOOL_OFFSETS))
- .tag(12).button( BTN_POS(3,4), BTN_SIZE(1,1), GET_TEXTF(ENDSTOPS))
- .tag(5) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXTF(VELOCITY))
- .tag(6) .button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXTF(ACCELERATION))
- #if ENABLED(JUNCTION_DEVIATION)
- .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JUNC_DEVIATION))
+ .tag(4) .button( BTN_POS(1,3), BTN_SIZE(1,1), GET_TEXT_F(TOOL_OFFSETS))
+ .tag(12).button( BTN_POS(3,4), BTN_SIZE(1,1), GET_TEXT_F(ENDSTOPS))
+ .tag(5) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXT_F(VELOCITY))
+ .tag(6) .button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXT_F(ACCELERATION))
+ #if DISABLED(CLASSIC_JERK)
+ .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXT_F(JUNC_DEVIATION))
#else
- .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JERK))
+ .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXT_F(JERK))
#endif
- .tag(11).button( BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXTF(FILAMENT))
- .tag(15).button( BTN_POS(3,5), BTN_SIZE(1,1), GET_TEXTF(DISPLAY_MENU))
- .tag(9) .button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(INTERFACE_SETTINGS))
- .tag(10).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(RESTORE_DEFAULTS))
+ .tag(11).button( BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXT_F(FILAMENT))
+ .tag(15).button( BTN_POS(3,5), BTN_SIZE(1,1), GET_TEXT_F(DISPLAY_MENU))
+ .tag(9) .button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXT_F(INTERFACE_SETTINGS))
+ .tag(10).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXT_F(RESTORE_DEFAULTS))
.colors(action_btn)
- .tag(1) .button( BTN_POS(3,6), BTN_SIZE(1,1), GET_TEXTF(BACK));
+ .tag(1) .button( BTN_POS(3,6), BTN_SIZE(1,1), GET_TEXT_F(BACK));
#endif
}
}
@@ -163,7 +163,7 @@ bool AdvancedSettingsMenu::onTouchEnd(uint8_t tag) {
case 5: GOTO_SCREEN(MaxVelocityScreen); break;
case 6: GOTO_SCREEN(DefaultAccelerationScreen); break;
case 7:
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
GOTO_SCREEN(JunctionDeviationScreen);
#else
GOTO_SCREEN(JerkScreen);
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/backlash_compensation_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/backlash_compensation_screen.cpp
index 925a0f2f5a2a..111eb19d9fa9 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/backlash_compensation_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/backlash_compensation_screen.cpp
@@ -32,17 +32,17 @@ using namespace Theme;
void BacklashCompensationScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
- w.precision(2).units( GET_TEXTF(UNITS_MM));
- w.heading( GET_TEXTF(BACKLASH));
- w.color(x_axis).adjuster(2, GET_TEXTF(AXIS_X), getAxisBacklash_mm(X));
- w.color(y_axis).adjuster(4, GET_TEXTF(AXIS_Y), getAxisBacklash_mm(Y));
- w.color(z_axis).adjuster(6, GET_TEXTF(AXIS_Z), getAxisBacklash_mm(Z));
+ w.precision(2).units( GET_TEXT_F(UNITS_MM));
+ w.heading( GET_TEXT_F(BACKLASH));
+ w.color(x_axis).adjuster(2, GET_TEXT_F(AXIS_X), getAxisBacklash_mm(X));
+ w.color(y_axis).adjuster(4, GET_TEXT_F(AXIS_Y), getAxisBacklash_mm(Y));
+ w.color(z_axis).adjuster(6, GET_TEXT_F(AXIS_Z), getAxisBacklash_mm(Z));
#if ENABLED(CALIBRATION_GCODE)
- w.button(12, GET_TEXTF(MEASURE_AUTOMATICALLY));
+ w.button(12, GET_TEXT_F(MEASURE_AUTOMATICALLY));
#endif
- w.color(other).adjuster(8, GET_TEXTF(SMOOTHING), getBacklashSmoothing_mm());
- w.precision(0).units(GET_TEXTF(UNITS_PERCENT))
- .adjuster(10, GET_TEXTF(CORRECTION), getBacklashCorrection_percent());
+ w.color(other).adjuster(8, GET_TEXT_F(SMOOTHING), getBacklashSmoothing_mm());
+ w.precision(0).units(GET_TEXT_F(UNITS_PERCENT))
+ .adjuster(10, GET_TEXT_F(CORRECTION), getBacklashCorrection_percent());
w.precision(2).increments();
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp
index 1d4449097c1e..c8c500669bc5 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp
@@ -47,7 +47,8 @@ BaseNumericAdjustmentScreen::widgets_t::widgets_t(draw_mode_t what) : _what(what
cmd.cmd(CLEAR_COLOR_RGB(bg_color))
.cmd(CLEAR(true,true,true))
.colors(normal_btn)
- .cmd(COLOR_RGB(bg_text_enabled));
+ .cmd(COLOR_RGB(bg_text_enabled))
+ .tag(0);
}
cmd.font(font_medium);
@@ -57,7 +58,7 @@ BaseNumericAdjustmentScreen::widgets_t::widgets_t(draw_mode_t what) : _what(what
#else
BTN_POS(15,7), BTN_SIZE(4,1),
#endif
- GET_TEXTF(BACK), true, true
+ GET_TEXT_F(BACK), true, true
);
_line = 1;
@@ -126,6 +127,7 @@ void BaseNumericAdjustmentScreen::widgets_t::heading(progmem_str label) {
CommandProcessor cmd;
_button_style(cmd, TEXT_LABEL);
cmd.font(font_medium)
+ .tag(0)
.text(
#ifdef TOUCH_UI_PORTRAIT
BTN_POS(1, _line), BTN_SIZE(12,1),
@@ -188,13 +190,14 @@ void BaseNumericAdjustmentScreen::widgets_t::increments() {
cmd.font(LAYOUT_FONT);
if (_what & BACKGROUND) {
- cmd.text(
+ _button_style(cmd, TEXT_LABEL);
+ cmd.tag(0).text(
#ifdef TOUCH_UI_PORTRAIT
BTN_POS(1, _line), BTN_SIZE(4,1),
#else
BTN_POS(15, 1), BTN_SIZE(4,1),
#endif
- GET_TEXTF(INCREMENT)
+ GET_TEXT_F(INCREMENT)
);
}
@@ -325,7 +328,7 @@ void BaseNumericAdjustmentScreen::widgets_t::toggle(uint8_t tag, progmem_str lab
#else
BTN_POS(10,_line), BTN_SIZE(4,1),
#endif
- GET_TEXTF(NO), GET_TEXTF(YES), value
+ GET_TEXT_F(NO), GET_TEXT_F(YES), value
);
}
@@ -338,14 +341,14 @@ void BaseNumericAdjustmentScreen::widgets_t::home_buttons(uint8_t tag) {
if (_what & BACKGROUND) {
_button_style(cmd, TEXT_LABEL);
cmd.font(font_small)
- .text(BTN_POS(1, _line), BTN_SIZE(4,1), GET_TEXTF(HOME));
+ .text(BTN_POS(1, _line), BTN_SIZE(4,1), GET_TEXT_F(HOME));
}
cmd.font(LAYOUT_FONT);
- _button(cmd, tag+0, BTN_POS(5,_line), BTN_SIZE(2,1), GET_TEXTF(AXIS_X));
- _button(cmd, tag+1, BTN_POS(7,_line), BTN_SIZE(2,1), GET_TEXTF(AXIS_Y));
- _button(cmd, tag+2, BTN_POS(9,_line), BTN_SIZE(2,1), GET_TEXTF(AXIS_Z));
- _button(cmd, tag+3, BTN_POS(11,_line), BTN_SIZE(3,1), GET_TEXTF(AXIS_ALL));
+ _button(cmd, tag+0, BTN_POS(5,_line), BTN_SIZE(2,1), GET_TEXT_F(AXIS_X));
+ _button(cmd, tag+1, BTN_POS(7,_line), BTN_SIZE(2,1), GET_TEXT_F(AXIS_Y));
+ _button(cmd, tag+2, BTN_POS(9,_line), BTN_SIZE(2,1), GET_TEXT_F(AXIS_Z));
+ _button(cmd, tag+3, BTN_POS(11,_line), BTN_SIZE(3,1), GET_TEXT_F(AXIS_ALL));
_line++;
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_advanced_settings.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_advanced_settings.cpp
index 1355010c0b52..86382b674e7f 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_advanced_settings.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_advanced_settings.cpp
@@ -43,52 +43,52 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) {
#define GRID_ROWS 9
#define GRID_COLS 2
- .tag(2) .button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXTF(DISPLAY_MENU))
+ .tag(2) .button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXT_F(DISPLAY_MENU))
#if HAS_TRINAMIC
.enabled(1)
#else
.enabled(0)
#endif
- .tag(3) .button( BTN_POS(1,2), BTN_SIZE(1,1), GET_TEXTF(MOTOR_CURRENT))
+ .tag(3) .button( BTN_POS(1,2), BTN_SIZE(1,1), GET_TEXT_F(MOTOR_CURRENT))
#if HAS_TRINAMIC
.enabled(1)
#else
.enabled(0)
#endif
- .tag(4) .button( BTN_POS(1,3), BTN_SIZE(1,1), GET_TEXTF(HOME_SENSE))
- .tag(5) .button( BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXTF(ENDSTOPS))
+ .tag(4) .button( BTN_POS(1,3), BTN_SIZE(1,1), GET_TEXT_F(HOME_SENSE))
+ .tag(5) .button( BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXT_F(ENDSTOPS))
#if HOTENDS > 1
.enabled(1)
#else
.enabled(0)
#endif
- .tag(6) .button( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXTF(TOOL_OFFSETS))
+ .tag(6) .button( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXT_F(TOOL_OFFSETS))
- .tag(7) .button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXTF(STEPS_PER_MM))
- .tag(8) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXTF(VELOCITY))
- .tag(9) .button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXTF(ACCELERATION))
- #if ENABLED(JUNCTION_DEVIATION)
- .tag(10) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JUNC_DEVIATION))
+ .tag(7) .button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXT_F(STEPS_PER_MM))
+ .tag(8) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXT_F(VELOCITY))
+ .tag(9) .button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXT_F(ACCELERATION))
+ #if DISABLED(CLASSIC_JERK)
+ .tag(10) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXT_F(JUNC_DEVIATION))
#else
- .tag(10) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JERK))
+ .tag(10) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXT_F(JERK))
#endif
#if ENABLED(BACKLASH_GCODE)
.enabled(1)
#else
.enabled(0)
#endif
- .tag(11) .button( BTN_POS(2,5), BTN_SIZE(1,1), GET_TEXTF(BACKLASH))
+ .tag(11) .button( BTN_POS(2,5), BTN_SIZE(1,1), GET_TEXT_F(BACKLASH))
#if ENABLED(LIN_ADVANCE)
.enabled(1)
#else
.enabled(0)
#endif
- .tag(12) .button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(LINEAR_ADVANCE))
- .tag(13) .button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(INTERFACE_SETTINGS))
- .tag(14) .button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXTF(RESTORE_DEFAULTS))
+ .tag(12) .button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXT_F(LINEAR_ADVANCE))
+ .tag(13) .button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXT_F(INTERFACE_SETTINGS))
+ .tag(14) .button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(RESTORE_DEFAULTS))
.colors(action_btn)
- .tag(1). button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXTF(BACK));
+ .tag(1). button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXT_F(BACK));
#undef GRID_COLS
#undef GRID_ROWS
}
@@ -113,7 +113,7 @@ bool AdvancedSettingsMenu::onTouchEnd(uint8_t tag) {
case 8: GOTO_SCREEN(MaxVelocityScreen); break;
case 9: GOTO_SCREEN(DefaultAccelerationScreen); break;
case 10:
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
GOTO_SCREEN(JunctionDeviationScreen);
#else
GOTO_SCREEN(JerkScreen);
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_e.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_e.cpp
index ab4e9e5780c4..fb36e977c488 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_e.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_e.cpp
@@ -29,7 +29,7 @@
using namespace FTDI;
void BioConfirmHomeE::onRedraw(draw_mode_t) {
- drawMessage(GET_TEXTF(HOME_E_WARNING));
+ drawMessage(GET_TEXT_F(HOME_E_WARNING));
drawYesNoButtons(1);
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_xyz.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_xyz.cpp
index e1fa9793c006..43ed1f4baaac 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_xyz.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_xyz.cpp
@@ -29,7 +29,7 @@
using namespace FTDI;
void BioConfirmHomeXYZ::onRedraw(draw_mode_t) {
- drawMessage(GET_TEXTF(HOME_XYZ_WARNING));
+ drawMessage(GET_TEXT_F(HOME_XYZ_WARNING));
drawYesNoButtons(1);
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp
index 3a2c654ccd22..448cc2920754 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp
@@ -36,25 +36,26 @@ void MainMenu::onRedraw(draw_mode_t what) {
if (what & BACKGROUND) {
CommandProcessor cmd;
cmd.cmd(CLEAR_COLOR_RGB(Theme::bg_color))
- .cmd(CLEAR(true,true,true));
+ .cmd(CLEAR(true,true,true))
+ .tag(0);
}
if (what & FOREGROUND) {
CommandProcessor cmd;
cmd.cmd(COLOR_RGB(bg_text_enabled))
- .font(font_large).text( BTN_POS(1,1), BTN_SIZE(2,1), GET_TEXTF(MAIN_MENU))
+ .font(font_large).text( BTN_POS(1,1), BTN_SIZE(2,1), GET_TEXT_F(MAIN_MENU))
.colors(normal_btn)
.font(font_medium)
- .tag(2).button( BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(MOVE_TO_HOME))
- .tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(RAISE_PLUNGER))
- .tag(4).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(RELEASE_XY_AXIS))
- .tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(AUTOLEVEL_X_AXIS))
- .tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(BED_TEMPERATURE))
- .tag(7).button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(INTERFACE_SETTINGS))
- .tag(8).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXTF(ADVANCED_SETTINGS))
- .tag(9).button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXTF(ABOUT_PRINTER))
+ .tag(2).button( BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXT_F(MOVE_TO_HOME))
+ .tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXT_F(RAISE_PLUNGER))
+ .tag(4).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXT_F(RELEASE_XY_AXIS))
+ .tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXT_F(AUTOLEVEL_X_AXIS))
+ .tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXT_F(BED_TEMPERATURE))
+ .tag(7).button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXT_F(INTERFACE_SETTINGS))
+ .tag(8).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(ADVANCED_SETTINGS))
+ .tag(9).button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXT_F(ABOUT_PRINTER))
.colors(action_btn)
- .tag(1).button( BTN_POS(1,10), BTN_SIZE(2,1), GET_TEXTF(BACK));
+ .tag(1).button( BTN_POS(1,10), BTN_SIZE(2,1), GET_TEXT_F(BACK));
}
#undef GRID_COLS
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_printing_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_printing_dialog_box.cpp
index bcf9fb855016..04d52498af5b 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_printing_dialog_box.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_printing_dialog_box.cpp
@@ -38,7 +38,8 @@ using namespace Theme;
void BioPrintingDialogBox::draw_status_message(draw_mode_t what, const char* message) {
if (what & BACKGROUND) {
CommandProcessor cmd;
- cmd.cmd(COLOR_RGB(bg_text_enabled));
+ cmd.cmd(COLOR_RGB(bg_text_enabled))
+ .tag(0);
draw_text_box(cmd, BTN_POS(1,2), BTN_SIZE(2,2), message, OPT_CENTER, font_large);
}
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp
index 6c8fb384b7c3..cd709a2dc6c9 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp
@@ -29,8 +29,6 @@
#include "../ftdi_eve_lib/extras/poly_ui.h"
#include "bio_printer_ui.h"
-#define E_TRAVEL_LIMIT 60
-
#define GRID_COLS 2
#define GRID_ROWS 9
@@ -94,11 +92,13 @@ void StatusScreen::draw_temperature(draw_mode_t what) {
cmd.font(font_xlarge)
.cmd(COLOR_RGB(bg_text_enabled));
- if (!isHeaterIdle(BED) && getTargetTemp_celsius(BED) > 0) {
+ if (!isHeaterIdle(BED) && getTargetTemp_celsius(BED) > 0)
format_temp(bed_str, getTargetTemp_celsius(BED));
- ui.bounds(POLY(target_temp), x, y, h, v);
- cmd.text(x, y, h, v, bed_str);
- }
+ else
+ strcpy_P(bed_str, PSTR(MSG_BED));
+
+ ui.bounds(POLY(target_temp), x, y, h, v);
+ cmd.text(x, y, h, v, bed_str);
format_temp(bed_str, getActualTemp_celsius(BED));
ui.bounds(POLY(actual_temp), x, y, h, v);
@@ -108,7 +108,11 @@ void StatusScreen::draw_temperature(draw_mode_t what) {
void StatusScreen::draw_syringe(draw_mode_t what) {
int16_t x, y, h, v;
- const float fill_level = 1.0 - min(1.0, max(0.0, getAxisPosition_mm(E0) / E_TRAVEL_LIMIT));
+ #ifdef LULZBOT_E_TRAVEL_LIMIT
+ const float fill_level = 1.0 - min(1.0, max(0.0, getAxisPosition_mm(E0) / LULZBOT_E_TRAVEL_LIMIT));
+ #else
+ const float fill_level = 0.75;
+ #endif
const bool e_homed = isAxisPositionKnown(E0);
CommandProcessor cmd;
@@ -179,13 +183,13 @@ void StatusScreen::draw_fine_motion(draw_mode_t what) {
ui.bounds(POLY(fine_label), x, y, h, v);
cmd.cmd(COLOR_RGB(bg_text_enabled))
- .text(x, y, h, v, GET_TEXTF(FINE_MOTION));
+ .text(x, y, h, v, GET_TEXT_F(FINE_MOTION));
}
if (what & FOREGROUND) {
ui.bounds(POLY(fine_toggle), x, y, h, v);
cmd.colors(ui_toggle)
- .toggle2(x, y, h, v, GET_TEXTF(NO), GET_TEXTF(YES), fine_motion);
+ .toggle2(x, y, h, v, GET_TEXT_F(NO), GET_TEXT_F(YES), fine_motion);
}
}
@@ -218,11 +222,11 @@ void StatusScreen::draw_buttons(draw_mode_t) {
.colors(has_media ? action_btn : normal_btn)
.tag(9).button(BTN_POS(1,9), BTN_SIZE(1,1),
isPrintingFromMedia() ?
- GET_TEXTF(PRINTING) :
- GET_TEXTF(MEDIA)
+ GET_TEXT_F(PRINTING) :
+ GET_TEXT_F(MEDIA)
);
- cmd.colors(!has_media ? action_btn : normal_btn).tag(10).button(BTN_POS(2,9), BTN_SIZE(1,1), GET_TEXTF(MENU));
+ cmd.colors(!has_media ? action_btn : normal_btn).tag(10).button(BTN_POS(2,9), BTN_SIZE(1,1), GET_TEXT_F(MENU));
}
void StatusScreen::loadBitmaps() {
@@ -239,8 +243,9 @@ void StatusScreen::loadBitmaps() {
void StatusScreen::onRedraw(draw_mode_t what) {
if (what & BACKGROUND) {
CommandProcessor cmd;
- cmd.cmd(CLEAR_COLOR_RGB(bg_color));
- cmd.cmd(CLEAR(true,true,true));
+ cmd.cmd(CLEAR_COLOR_RGB(bg_color))
+ .cmd(CLEAR(true,true,true))
+ .tag(0);
}
draw_syringe(what);
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp
index 04c50597f36c..4fa88253c806 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp
@@ -31,34 +31,35 @@ using namespace Theme;
using namespace ExtUI;
void TuneMenu::onRedraw(draw_mode_t what) {
+ #define GRID_ROWS 8
+ #define GRID_COLS 2
+
if (what & BACKGROUND) {
CommandProcessor cmd;
cmd.cmd(CLEAR_COLOR_RGB(bg_color))
.cmd(CLEAR(true,true,true))
- .font(font_medium);
+ .cmd(COLOR_RGB(bg_text_enabled))
+ .tag(0)
+ .font(font_large)
+ .text( BTN_POS(1,1), BTN_SIZE(2,1), GET_TEXT_F(PRINT_MENU));
}
- #define GRID_ROWS 8
- #define GRID_COLS 2
-
if (what & FOREGROUND) {
CommandProcessor cmd;
- cmd.cmd(COLOR_RGB(bg_text_enabled))
- .font(font_large).text ( BTN_POS(1,1), BTN_SIZE(2,1), GET_TEXTF(PRINT_MENU))
- .colors(normal_btn)
+ cmd.colors(normal_btn)
.font(font_medium)
- .enabled( isPrinting()).tag(2).button( BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(PRINT_SPEED))
- .tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(BED_TEMPERATURE))
+ .enabled( isPrinting()).tag(2).button( BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXT_F(PRINT_SPEED))
+ .tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXT_F(BED_TEMPERATURE))
#if ENABLED(BABYSTEPPING)
.enabled(true)
#else
.enabled(false)
#endif
- .tag(4).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(NUDGE_NOZZLE))
- .enabled(!isPrinting()).tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(MOVE_TO_HOME))
- .enabled(!isPrinting()).tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(RAISE_PLUNGER))
- .enabled(!isPrinting()).tag(7).button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(RELEASE_XY_AXIS))
- .colors(action_btn) .tag(1).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXTF(BACK));
+ .tag(4).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXT_F(NUDGE_NOZZLE))
+ .enabled(!isPrinting()).tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXT_F(MOVE_TO_HOME))
+ .enabled(!isPrinting()).tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXT_F(RAISE_PLUNGER))
+ .enabled(!isPrinting()).tag(7).button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXT_F(RELEASE_XY_AXIS))
+ .colors(action_btn) .tag(1).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(BACK));
}
#undef GRID_COLS
#undef GRID_ROWS
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/boot_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/boot_screen.cpp
index 32c43d654aef..47a71f836de5 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/boot_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/boot_screen.cpp
@@ -36,6 +36,7 @@
#endif
using namespace FTDI;
+using namespace Theme;
void BootScreen::onRedraw(draw_mode_t) {
CommandProcessor cmd;
@@ -64,7 +65,7 @@ void BootScreen::onIdle() {
} else {
if (!UIFlashStorage::is_valid()) {
StatusScreen::loadBitmaps();
- SpinnerDialogBox::show(GET_TEXTF(PLEASE_WAIT));
+ SpinnerDialogBox::show(GET_TEXT_F(PLEASE_WAIT));
UIFlashStorage::format_flash();
SpinnerDialogBox::hide();
}
@@ -84,10 +85,10 @@ void BootScreen::onIdle() {
PUSH_SCREEN(StatusScreen);
PUSH_SCREEN(BioConfirmHomeE);
#elif NUM_LANGUAGES > 1
- StatusScreen::setStatusMessage(F(WELCOME_MSG));
+ StatusScreen::setStatusMessage(GET_TEXT_F(WELCOME_MSG));
GOTO_SCREEN(LanguageMenu);
#else
- StatusScreen::setStatusMessage(F(WELCOME_MSG));
+ StatusScreen::setStatusMessage(GET_TEXT_F(WELCOME_MSG));
GOTO_SCREEN(StatusScreen);
#endif
}
@@ -96,16 +97,16 @@ void BootScreen::onIdle() {
void BootScreen::showSplashScreen() {
CommandProcessor cmd;
cmd.cmd(CMD_DLSTART);
- cmd.cmd(CLEAR_COLOR_RGB(0xDEEA5C));
+ cmd.cmd(CLEAR_COLOR_RGB(logo_bg));
cmd.cmd(CLEAR(true,true,true));
#define POLY(A) PolyUI::poly_reader_t(A, sizeof(A)/sizeof(A[0]))
PolyUI ui(cmd);
- cmd.cmd(COLOR_RGB(0xC1D82F));
+ cmd.cmd(COLOR_RGB(logo_fg));
ui.fill(POLY(logo_green));
- cmd.cmd(COLOR_RGB(0x000000));
+ cmd.cmd(COLOR_RGB(logo_stroke));
ui.fill(POLY(logo_black));
ui.fill(POLY(logo_type));
ui.fill(POLY(logo_mark));
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/change_filament_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/change_filament_screen.cpp
index 9692572942e9..c08be39fff74 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/change_filament_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/change_filament_screen.cpp
@@ -114,14 +114,14 @@ void ChangeFilamentScreen::onRedraw(draw_mode_t what) {
#else
.font(font_medium)
#endif
- .text(BTN_POS(1,1), BTN_SIZE(2,1), GET_TEXTF(EXTRUDER_SELECTION))
+ .text(BTN_POS(1,1), BTN_SIZE(2,1), GET_TEXT_F(EXTRUDER_SELECTION))
#ifdef TOUCH_UI_PORTRAIT
.text(BTN_POS(1,7), BTN_SIZE(1,1), F(""))
#else
- .text(BTN_POS(3,1), BTN_SIZE(2,1), GET_TEXTF(CURRENT_TEMPERATURE))
+ .text(BTN_POS(3,1), BTN_SIZE(2,1), GET_TEXT_F(CURRENT_TEMPERATURE))
.font(font_small)
#endif
- .text(BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(REMOVAL_TEMPERATURE));
+ .text(BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXT_F(REMOVAL_TEMPERATURE));
drawTempGradient(BTN_POS(1,4), BTN_SIZE(1,3));
}
@@ -154,12 +154,12 @@ void ChangeFilamentScreen::onRedraw(draw_mode_t what) {
const bool t_ok = getActualTemp_celsius(e) > getSoftenTemp() - 10;
if (screen_data.ChangeFilamentScreen.t_tag && !t_ok) {
- cmd.text(BTN_POS(1,6), BTN_SIZE(1,1), GET_TEXTF(HEATING));
+ cmd.text(BTN_POS(1,6), BTN_SIZE(1,1), GET_TEXT_F(HEATING));
} else if (getActualTemp_celsius(e) > 100) {
cmd.cmd(COLOR_RGB(0xFF0000))
- .text(BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXTF(CAUTION))
+ .text(BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXT_F(CAUTION))
.colors(normal_btn)
- .text(BTN_POS(1,6), BTN_SIZE(1,1), GET_TEXTF(HOT));
+ .text(BTN_POS(1,6), BTN_SIZE(1,1), GET_TEXT_F(HOT));
}
#define TOG_STYLE(A) colors(A ? action_btn : normal_btn)
@@ -221,23 +221,23 @@ void ChangeFilamentScreen::onRedraw(draw_mode_t what) {
.cmd(COLOR_RGB(t_ok ? bg_text_enabled : bg_text_disabled))
#ifdef TOUCH_UI_PORTRAIT
.font(font_large)
- .tag(0) .text (BTN_POS(1,8), BTN_SIZE(1,1), GET_TEXTF(UNLOAD_FILAMENT))
- .text (BTN_POS(2,8), BTN_SIZE(1,1), GET_TEXTF(LOAD_FILAMENT))
- .tag(5) .enabled(t_ok).button (BTN_POS(1,9), BTN_SIZE(1,1), GET_TEXTF(MOMENTARY))
- .tag(6) .enabled(t_ok).button (BTN_POS(2,9), BTN_SIZE(1,1), GET_TEXTF(MOMENTARY))
- .tag(7).TOG_STYLE(tog7).enabled(t_ok).button (BTN_POS(1,10), BTN_SIZE(1,1), GET_TEXTF(CONTINUOUS))
- .tag(8).TOG_STYLE(tog8).enabled(t_ok).button (BTN_POS(2,10), BTN_SIZE(1,1), GET_TEXTF(CONTINUOUS))
- .tag(1).colors(action_btn) .button (BTN_POS(1,11), BTN_SIZE(2,1), GET_TEXTF(BACK));
+ .tag(0) .text (BTN_POS(1,8), BTN_SIZE(1,1), GET_TEXT_F(UNLOAD_FILAMENT))
+ .text (BTN_POS(2,8), BTN_SIZE(1,1), GET_TEXT_F(LOAD_FILAMENT))
+ .tag(5) .enabled(t_ok).button (BTN_POS(1,9), BTN_SIZE(1,1), GET_TEXT_F(MOMENTARY))
+ .tag(6) .enabled(t_ok).button (BTN_POS(2,9), BTN_SIZE(1,1), GET_TEXT_F(MOMENTARY))
+ .tag(7).TOG_STYLE(tog7).enabled(t_ok).button (BTN_POS(1,10), BTN_SIZE(1,1), GET_TEXT_F(CONTINUOUS))
+ .tag(8).TOG_STYLE(tog8).enabled(t_ok).button (BTN_POS(2,10), BTN_SIZE(1,1), GET_TEXT_F(CONTINUOUS))
+ .tag(1).colors(action_btn) .button (BTN_POS(1,11), BTN_SIZE(2,1), GET_TEXT_F(BACK));
#else
.font(font_small)
- .tag(0) .text (BTN_POS(3,3), BTN_SIZE(1,1), GET_TEXTF(UNLOAD_FILAMENT))
- .text (BTN_POS(4,3), BTN_SIZE(1,1), GET_TEXTF(LOAD_FILAMENT))
- .tag(5) .enabled(t_ok).button (BTN_POS(3,4), BTN_SIZE(1,1), GET_TEXTF(MOMENTARY))
- .tag(6) .enabled(t_ok).button (BTN_POS(4,4), BTN_SIZE(1,1), GET_TEXTF(MOMENTARY))
- .tag(7).TOG_STYLE(tog7).enabled(t_ok).button (BTN_POS(3,5), BTN_SIZE(1,1), GET_TEXTF(CONTINUOUS))
- .tag(8).TOG_STYLE(tog8).enabled(t_ok).button (BTN_POS(4,5), BTN_SIZE(1,1), GET_TEXTF(CONTINUOUS))
+ .tag(0) .text (BTN_POS(3,3), BTN_SIZE(1,1), GET_TEXT_F(UNLOAD_FILAMENT))
+ .text (BTN_POS(4,3), BTN_SIZE(1,1), GET_TEXT_F(LOAD_FILAMENT))
+ .tag(5) .enabled(t_ok).button (BTN_POS(3,4), BTN_SIZE(1,1), GET_TEXT_F(MOMENTARY))
+ .tag(6) .enabled(t_ok).button (BTN_POS(4,4), BTN_SIZE(1,1), GET_TEXT_F(MOMENTARY))
+ .tag(7).TOG_STYLE(tog7).enabled(t_ok).button (BTN_POS(3,5), BTN_SIZE(1,1), GET_TEXT_F(CONTINUOUS))
+ .tag(8).TOG_STYLE(tog8).enabled(t_ok).button (BTN_POS(4,5), BTN_SIZE(1,1), GET_TEXT_F(CONTINUOUS))
.font(font_medium)
- .tag(1).colors(action_btn) .button (BTN_POS(3,6), BTN_SIZE(2,1), GET_TEXTF(BACK));
+ .tag(1).colors(action_btn) .button (BTN_POS(3,6), BTN_SIZE(2,1), GET_TEXT_F(BACK));
#endif
}
#undef GRID_COLS
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_abort_print_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_abort_print_dialog_box.cpp
index 32dba3df0f3c..61eae8767785 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_abort_print_dialog_box.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_abort_print_dialog_box.cpp
@@ -29,7 +29,7 @@
using namespace ExtUI;
void ConfirmAbortPrintDialogBox::onRedraw(draw_mode_t) {
- drawMessage(GET_TEXTF(ABORT_WARNING));
+ drawMessage(GET_TEXT_F(ABORT_WARNING));
drawYesNoButtons();
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_auto_calibration_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_auto_calibration_dialog_box.cpp
index 161828595f8a..5ca63a5d076a 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_auto_calibration_dialog_box.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_auto_calibration_dialog_box.cpp
@@ -30,7 +30,7 @@ using namespace ExtUI;
using namespace Theme;
void ConfirmAutoCalibrationDialogBox::onRedraw(draw_mode_t) {
- drawMessage(GET_TEXTF(CALIBRATION_WARNING));
+ drawMessage(GET_TEXT_F(CALIBRATION_WARNING));
drawYesNoButtons();
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_erase_flash_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_erase_flash_dialog_box.cpp
index 610d97b1188c..f7000f1b4f84 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_erase_flash_dialog_box.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_erase_flash_dialog_box.cpp
@@ -31,17 +31,17 @@
using namespace FTDI;
void ConfirmEraseFlashDialogBox::onRedraw(draw_mode_t) {
- drawMessage(GET_TEXTF(ERASE_FLASH_WARNING));
+ drawMessage(GET_TEXT_F(ERASE_FLASH_WARNING));
drawYesNoButtons();
}
bool ConfirmEraseFlashDialogBox::onTouchEnd(uint8_t tag) {
switch (tag) {
case 1:
- SpinnerDialogBox::show(GET_TEXTF(ERASING));
+ SpinnerDialogBox::show(GET_TEXT_F(ERASING));
UIFlashStorage::format_flash();
SpinnerDialogBox::hide();
- AlertDialogBox::show(GET_TEXTF(ERASED));
+ AlertDialogBox::show(GET_TEXT_F(ERASED));
// Remove ConfirmEraseFlashDialogBox from the stack
// so the alert box doesn't return to me.
current_screen.forget();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_start_print_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_start_print_dialog_box.cpp
index 653d988b0cc5..952b029308b8 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_start_print_dialog_box.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_start_print_dialog_box.cpp
@@ -48,7 +48,7 @@ bool ConfirmStartPrintDialogBox::onTouchEnd(uint8_t tag) {
switch (tag) {
case 1:
printFile(getShortFilename());
- StatusScreen::setStatusMessage(GET_TEXTF(PRINT_STARTING));
+ StatusScreen::setStatusMessage(GET_TEXT_F(PRINT_STARTING));
GOTO_SCREEN(StatusScreen);
return true;
case 2: GOTO_PREVIOUS(); return true;
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/default_acceleration_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/default_acceleration_screen.cpp
index fdfacd58cebd..544bf1527e29 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/default_acceleration_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/default_acceleration_screen.cpp
@@ -33,14 +33,14 @@ using namespace Theme;
void DefaultAccelerationScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
w.precision(0);
- w.units(GET_TEXTF(UNITS_MM_S2));
- w.heading( GET_TEXTF(ACCELERATION));
+ w.units(GET_TEXT_F(UNITS_MM_S2));
+ w.heading( GET_TEXT_F(ACCELERATION));
w.color(other);
- w.adjuster( 2, GET_TEXTF(ACCEL_PRINTING), getPrintingAcceleration_mm_s2() );
- w.adjuster( 4, GET_TEXTF(ACCEL_TRAVEL), getTravelAcceleration_mm_s2() );
- w.adjuster( 6, GET_TEXTF(ACCEL_RETRACT), getRetractAcceleration_mm_s2() );
+ w.adjuster( 2, GET_TEXT_F(ACCEL_PRINTING), getPrintingAcceleration_mm_s2() );
+ w.adjuster( 4, GET_TEXT_F(ACCEL_TRAVEL), getTravelAcceleration_mm_s2() );
+ w.adjuster( 6, GET_TEXT_F(ACCEL_RETRACT), getRetractAcceleration_mm_s2() );
w.increments();
- w.button( 8, GET_TEXTF(SET_MAXIMUM));
+ w.button( 8, GET_TEXT_F(SET_MAXIMUM));
}
bool DefaultAccelerationScreen::onTouchHeld(uint8_t tag) {
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/dialog_box_base_class.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/dialog_box_base_class.cpp
index 7d2d2e51ea07..f31ad5c88153 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/dialog_box_base_class.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/dialog_box_base_class.cpp
@@ -50,14 +50,14 @@ template void DialogBoxBaseClass::drawMessage(progmem_str, int16_t font);
void DialogBoxBaseClass::drawYesNoButtons(uint8_t default_btn) {
CommandProcessor cmd;
cmd.font(font_medium)
- .colors(default_btn == 1 ? action_btn : normal_btn).tag(1).button( BTN_POS(1,8), BTN_SIZE(1,1), GET_TEXTF(YES))
- .colors(default_btn == 2 ? action_btn : normal_btn).tag(2).button( BTN_POS(2,8), BTN_SIZE(1,1), GET_TEXTF(NO));
+ .colors(default_btn == 1 ? action_btn : normal_btn).tag(1).button( BTN_POS(1,8), BTN_SIZE(1,1), GET_TEXT_F(YES))
+ .colors(default_btn == 2 ? action_btn : normal_btn).tag(2).button( BTN_POS(2,8), BTN_SIZE(1,1), GET_TEXT_F(NO));
}
void DialogBoxBaseClass::drawOkayButton() {
CommandProcessor cmd;
cmd.font(font_medium)
- .tag(1).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXTF(OKAY));
+ .tag(1).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(OKAY));
}
void DialogBoxBaseClass::drawButton(const progmem_str label) {
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/display_tuning_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/display_tuning_screen.cpp
index eedc3d22c8db..4d33dce648f0 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/display_tuning_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/display_tuning_screen.cpp
@@ -33,13 +33,13 @@ void DisplayTuningScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
w.precision(0, BaseNumericAdjustmentScreen::DEFAULT_LOWEST);
w.units(F(""));
- w.heading(GET_TEXTF(DISPLAY_MENU));
+ w.heading(GET_TEXT_F(DISPLAY_MENU));
w.color(other);
- w.adjuster( 2, GET_TEXTF(H_OFFSET), CLCD::mem_read_16(CLCD::REG::HOFFSET) );
- w.adjuster( 4, GET_TEXTF(V_OFFSET), CLCD::mem_read_16(CLCD::REG::VOFFSET) );
+ w.adjuster( 2, GET_TEXT_F(H_OFFSET), CLCD::mem_read_16(CLCD::REG::HOFFSET) );
+ w.adjuster( 4, GET_TEXT_F(V_OFFSET), CLCD::mem_read_16(CLCD::REG::VOFFSET) );
w.increments();
- w.heading( GET_TEXTF(TOUCH_SCREEN));
- w.button(6, GET_TEXTF(CALIBRATE));
+ w.heading( GET_TEXT_F(TOUCH_SCREEN));
+ w.button(6, GET_TEXT_F(CALIBRATE));
}
bool DisplayTuningScreen::onTouchHeld(uint8_t tag) {
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/endstop_state_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/endstop_state_screen.cpp
index ce5cd0b4d56e..05dccf96f3e8 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/endstop_state_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/endstop_state_screen.cpp
@@ -32,10 +32,12 @@ using namespace ExtUI;
void EndstopStatesScreen::onEntry() {
BaseScreen::onEntry();
+ enable_emi_pins(true);
}
void EndstopStatesScreen::onExit() {
BaseScreen::onExit();
+ enable_emi_pins(false);
}
void EndstopStatesScreen::onRedraw(draw_mode_t) {
@@ -57,52 +59,52 @@ void EndstopStatesScreen::onRedraw(draw_mode_t) {
#else
cmd.font(font_medium)
#endif
- .text(BTN_POS(1,1), BTN_SIZE(6,1), GET_TEXTF(ENDSTOPS))
+ .text(BTN_POS(1,1), BTN_SIZE(6,1), GET_TEXT_F(ENDSTOPS))
.font(font_tiny);
#if PIN_EXISTS(X_MAX)
- PIN_ENABLED (GET_TEXTF(X_MAX), X_MAX,X_MAX_ENDSTOP_INVERTING,1,2)
+ PIN_ENABLED (GET_TEXT_F(X_MAX), X_MAX,X_MAX_ENDSTOP_INVERTING,1,2)
#else
- PIN_DISABLED(GET_TEXTF(X_MAX),X_MAX,X_MAX_ENDSTOP_INVERTING,1,2)
+ PIN_DISABLED(GET_TEXT_F(X_MAX),X_MAX,X_MAX_ENDSTOP_INVERTING,1,2)
#endif
#if PIN_EXISTS(Y_MAX)
- PIN_ENABLED (GET_TEXTF(Y_MAX),Y_MAX,Y_MAX_ENDSTOP_INVERTING,3,2)
+ PIN_ENABLED (GET_TEXT_F(Y_MAX),Y_MAX,Y_MAX_ENDSTOP_INVERTING,3,2)
#else
- PIN_DISABLED(GET_TEXTF(Y_MAX),Y_MAX,Y_MAX_ENDSTOP_INVERTING,3,2)
+ PIN_DISABLED(GET_TEXT_F(Y_MAX),Y_MAX,Y_MAX_ENDSTOP_INVERTING,3,2)
#endif
#if PIN_EXISTS(Z_MAX)
- PIN_ENABLED (GET_TEXTF(Z_MAX),Z_MAX,Z_MAX_ENDSTOP_INVERTING,5,2)
+ PIN_ENABLED (GET_TEXT_F(Z_MAX),Z_MAX,Z_MAX_ENDSTOP_INVERTING,5,2)
#else
- PIN_DISABLED(GET_TEXTF(Z_MAX),Z_MAX,Z_MAX_ENDSTOP_INVERTING,5,2)
+ PIN_DISABLED(GET_TEXT_F(Z_MAX),Z_MAX,Z_MAX_ENDSTOP_INVERTING,5,2)
#endif
#if PIN_EXISTS(X_MIN)
- PIN_ENABLED (GET_TEXTF(X_MIN),X_MIN,X_MIN_ENDSTOP_INVERTING,1,3)
+ PIN_ENABLED (GET_TEXT_F(X_MIN),X_MIN,X_MIN_ENDSTOP_INVERTING,1,3)
#else
- PIN_DISABLED(GET_TEXTF(X_MIN),X_MIN,X_MIN_ENDSTOP_INVERTING,1,3)
+ PIN_DISABLED(GET_TEXT_F(X_MIN),X_MIN,X_MIN_ENDSTOP_INVERTING,1,3)
#endif
#if PIN_EXISTS(Y_MIN)
- PIN_ENABLED (GET_TEXTF(Y_MIN),Y_MIN,Y_MIN_ENDSTOP_INVERTING,3,3)
+ PIN_ENABLED (GET_TEXT_F(Y_MIN),Y_MIN,Y_MIN_ENDSTOP_INVERTING,3,3)
#else
- PIN_DISABLED(GET_TEXTF(Y_MIN),Y_MIN,Y_MIN_ENDSTOP_INVERTING,3,3)
+ PIN_DISABLED(GET_TEXT_F(Y_MIN),Y_MIN,Y_MIN_ENDSTOP_INVERTING,3,3)
#endif
#if PIN_EXISTS(Z_MIN)
- PIN_ENABLED (GET_TEXTF(Z_MIN),Z_MIN,Z_MIN_ENDSTOP_INVERTING,5,3)
+ PIN_ENABLED (GET_TEXT_F(Z_MIN),Z_MIN,Z_MIN_ENDSTOP_INVERTING,5,3)
#else
- PIN_DISABLED(GET_TEXTF(Z_MIN),Z_MIN,Z_MIN_ENDSTOP_INVERTING,5,3)
+ PIN_DISABLED(GET_TEXT_F(Z_MIN),Z_MIN,Z_MIN_ENDSTOP_INVERTING,5,3)
#endif
#if ENABLED(FILAMENT_RUNOUT_SENSOR) && PIN_EXISTS(FIL_RUNOUT)
- PIN_ENABLED (GET_TEXTF(RUNOUT_1),FIL_RUNOUT, FIL_RUNOUT_INVERTING,1,4)
+ PIN_ENABLED (GET_TEXT_F(RUNOUT_1),FIL_RUNOUT, FIL_RUNOUT_INVERTING,1,4)
#else
- PIN_DISABLED(GET_TEXTF(RUNOUT_1),FIL_RUNOUT, FIL_RUNOUT_INVERTING,1,4)
+ PIN_DISABLED(GET_TEXT_F(RUNOUT_1),FIL_RUNOUT, FIL_RUNOUT_INVERTING,1,4)
#endif
#if ENABLED(FILAMENT_RUNOUT_SENSOR) && PIN_EXISTS(FIL_RUNOUT2)
- PIN_ENABLED (GET_TEXTF(RUNOUT_2),FIL_RUNOUT2,FIL_RUNOUT_INVERTING,3,4)
+ PIN_ENABLED (GET_TEXT_F(RUNOUT_2),FIL_RUNOUT2,FIL_RUNOUT_INVERTING,3,4)
#else
- PIN_DISABLED(GET_TEXTF(RUNOUT_2),FIL_RUNOUT2,FIL_RUNOUT_INVERTING,3,4)
+ PIN_DISABLED(GET_TEXT_F(RUNOUT_2),FIL_RUNOUT2,FIL_RUNOUT_INVERTING,3,4)
#endif
#if PIN_EXISTS(Z_MIN_PROBE)
- PIN_ENABLED (GET_TEXTF(Z_PROBE),Z_MIN_PROBE,Z_MIN_PROBE_ENDSTOP_INVERTING,5,4)
+ PIN_ENABLED (GET_TEXT_F(Z_PROBE),Z_MIN_PROBE,Z_MIN_PROBE_ENDSTOP_INVERTING,5,4)
#else
- PIN_DISABLED(GET_TEXTF(Z_PROBE),Z_MIN_PROBE,Z_MIN_PROBE_ENDSTOP_INVERTING,5,4)
+ PIN_DISABLED(GET_TEXT_F(Z_PROBE),Z_MIN_PROBE,Z_MIN_PROBE_ENDSTOP_INVERTING,5,4)
#endif
#if HAS_SOFTWARE_ENDSTOPS
@@ -110,16 +112,16 @@ void EndstopStatesScreen::onRedraw(draw_mode_t) {
#define EDGE_R 30
cmd.cmd(COLOR_RGB(bg_text_enabled))
.font(font_small)
- .text (BTN_POS(1,5), BTN_SIZE(3,1), GET_TEXTF(SOFT_ENDSTOPS), OPT_RIGHTX | OPT_CENTERY)
+ .text (BTN_POS(1,5), BTN_SIZE(3,1), GET_TEXT_F(SOFT_ENDSTOPS), OPT_RIGHTX | OPT_CENTERY)
.colors(ui_toggle)
- .tag(2).toggle2(BTN_POS(4,5), BTN_SIZE(3,1), GET_TEXTF(NO), GET_TEXTF(YES), getSoftEndstopState());
+ .tag(2).toggle2(BTN_POS(4,5), BTN_SIZE(3,1), GET_TEXT_F(NO), GET_TEXT_F(YES), getSoftEndstopState());
#undef EDGE_R
#define EDGE_R 0
#endif
cmd.font(font_medium)
.colors(action_btn)
- .tag(1).button( BTN_POS(1,7), BTN_SIZE(6,1), GET_TEXTF(BACK));
+ .tag(1).button( BTN_POS(1,7), BTN_SIZE(6,1), GET_TEXT_F(BACK));
#undef GRID_COLS
#undef GRID_ROWS
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/feedrate_percent_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/feedrate_percent_screen.cpp
index c42296f79cf6..6ad7ef88aac9 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/feedrate_percent_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/feedrate_percent_screen.cpp
@@ -31,10 +31,10 @@ using namespace ExtUI;
void FeedratePercentScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
- w.precision(0).units(GET_TEXTF(UNITS_PERCENT));
+ w.precision(0).units(GET_TEXT_F(UNITS_PERCENT));
- w.heading(GET_TEXTF(PRINT_SPEED));
- w.adjuster(4, GET_TEXTF(SPEED), getFeedrate_percent());
+ w.heading(GET_TEXT_F(PRINT_SPEED));
+ w.adjuster(4, GET_TEXT_F(SPEED), getFeedrate_percent());
w.increments();
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/filament_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/filament_menu.cpp
index a0213d5edc66..a7fe2bff5530 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/filament_menu.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/filament_menu.cpp
@@ -34,52 +34,53 @@ void FilamentMenu::onRedraw(draw_mode_t what) {
if (what & BACKGROUND) {
CommandProcessor cmd;
cmd.cmd(CLEAR_COLOR_RGB(Theme::bg_color))
- .cmd(CLEAR(true,true,true));
+ .cmd(CLEAR(true,true,true))
+ .tag(0);
}
if (what & FOREGROUND) {
CommandProcessor cmd;
- cmd.font(font_large)
+ cmd.font(font_large)
#ifdef TOUCH_UI_PORTRAIT
#define GRID_ROWS 9
#define GRID_COLS 2
- .text ( BTN_POS(1,1), BTN_SIZE(2,1), GET_TEXTF(FILAMENT))
+ .text ( BTN_POS(1,1), BTN_SIZE(2,1), GET_TEXT_F(FILAMENT))
.font(font_medium).colors(normal_btn)
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
.enabled(1)
#else
.enabled(0)
#endif
- .tag(2).button( BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(RUNOUT_SENSOR))
+ .tag(2).button( BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXT_F(RUNOUT_SENSOR))
#if ENABLED(LIN_ADVANCE)
.enabled(1)
#else
.enabled(0)
#endif
- .tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(LINEAR_ADVANCE))
+ .tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXT_F(LINEAR_ADVANCE))
.colors(action_btn)
- .tag(1) .button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXTF(BACK));
+ .tag(1) .button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXT_F(BACK));
#undef GRID_COLS
#undef GRID_ROWS
#else
#define GRID_ROWS 6
#define GRID_COLS 3
- .text ( BTN_POS(1,1), BTN_SIZE(3,1), GET_TEXTF(FILAMENT))
+ .text ( BTN_POS(1,1), BTN_SIZE(3,1), GET_TEXT_F(FILAMENT))
.font(font_medium).colors(normal_btn)
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
.enabled(1)
#else
.enabled(0)
#endif
- .tag(2).button( BTN_POS(1,2), BTN_SIZE(3,1), GET_TEXTF(RUNOUT_SENSOR))
+ .tag(2).button( BTN_POS(1,2), BTN_SIZE(3,1), GET_TEXT_F(RUNOUT_SENSOR))
#if ENABLED(LIN_ADVANCE)
.enabled(1)
#else
.enabled(0)
#endif
- .tag(3).button( BTN_POS(1,3), BTN_SIZE(3,1), GET_TEXTF(LINEAR_ADVANCE))
+ .tag(3).button( BTN_POS(1,3), BTN_SIZE(3,1), GET_TEXT_F(LINEAR_ADVANCE))
.colors(action_btn)
- .tag(1) .button( BTN_POS(1,6), BTN_SIZE(3,1), GET_TEXTF(BACK));
+ .tag(1) .button( BTN_POS(1,6), BTN_SIZE(3,1), GET_TEXT_F(BACK));
#endif
}
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/filament_runout_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/filament_runout_screen.cpp
index 12bf61d68bb4..fe67a7cdbad7 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/filament_runout_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/filament_runout_screen.cpp
@@ -32,15 +32,15 @@ using namespace Theme;
void FilamentRunoutScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
- w.heading( GET_TEXTF(FILAMENT));
- w.toggle( 2, GET_TEXTF(RUNOUT_SENSOR), getFilamentRunoutEnabled());
+ w.heading( GET_TEXT_F(FILAMENT));
+ w.toggle( 2, GET_TEXT_F(RUNOUT_SENSOR), getFilamentRunoutEnabled());
#ifdef FILAMENT_RUNOUT_DISTANCE_MM
- w.heading(GET_TEXTF(DETECTION_THRESHOLD));
- w.units(GET_TEXTF(UNITS_MM));
+ w.heading(GET_TEXT_F(DETECTION_THRESHOLD));
+ w.units(GET_TEXT_F(UNITS_MM));
w.precision(0);
w.color(e_axis);
- w.adjuster( 10, GET_TEXTF(DISTANCE), getFilamentRunoutDistance_mm(), getFilamentRunoutEnabled());
+ w.adjuster( 10, GET_TEXT_F(DISTANCE), getFilamentRunoutDistance_mm(), getFilamentRunoutEnabled());
w.increments();
#endif
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/files_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/files_screen.cpp
index db2067cbe778..d0bb97ad6246 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/files_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/files_screen.cpp
@@ -167,13 +167,13 @@ void FilesScreen::drawFooter() {
cmd.colors(normal_btn)
.font(font_medium)
.colors(has_selection ? normal_btn : action_btn)
- .tag(back_tag).button( BTN_POS(4,y), BTN_SIZE(3,h), GET_TEXTF(BACK))
+ .tag(back_tag).button( BTN_POS(4,y), BTN_SIZE(3,h), GET_TEXT_F(BACK))
.enabled(has_selection)
.colors(has_selection ? action_btn : normal_btn);
if (screen_data.FilesScreen.flags.is_dir) {
- cmd.tag(244).button( BTN_POS(1, y), BTN_SIZE(3,h), GET_TEXTF(OPEN_DIR));
+ cmd.tag(244).button( BTN_POS(1, y), BTN_SIZE(3,h), GET_TEXT_F(OPEN_DIR));
} else {
- cmd.tag(243).button( BTN_POS(1, y), BTN_SIZE(3,h), GET_TEXTF(PRINT_FILE));
+ cmd.tag(243).button( BTN_POS(1, y), BTN_SIZE(3,h), GET_TEXT_F(PRINT_FILE));
}
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/interface_settings_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/interface_settings_screen.cpp
index e1b27c79ae00..16c355d45744 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/interface_settings_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/interface_settings_screen.cpp
@@ -69,15 +69,15 @@ void InterfaceSettingsScreen::onRedraw(draw_mode_t what) {
.cmd(COLOR_RGB(bg_text_enabled))
.tag(0)
.font(font_medium)
- .text(BTN_POS(1,1), BTN_SIZE(4,1), GET_TEXTF(INTERFACE_SETTINGS))
+ .text(BTN_POS(1,1), BTN_SIZE(4,1), GET_TEXT_F(INTERFACE_SETTINGS))
#undef EDGE_R
#define EDGE_R 30
.font(font_small)
.tag(0)
- .text(BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(LCD_BRIGHTNESS), OPT_RIGHTX | OPT_CENTERY)
- .text(BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(SOUND_VOLUME), OPT_RIGHTX | OPT_CENTERY)
- .text(BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(SCREEN_LOCK), OPT_RIGHTX | OPT_CENTERY);
- cmd.text(BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(BOOT_SCREEN), OPT_RIGHTX | OPT_CENTERY);
+ .text(BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXT_F(LCD_BRIGHTNESS), OPT_RIGHTX | OPT_CENTERY)
+ .text(BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXT_F(SOUND_VOLUME), OPT_RIGHTX | OPT_CENTERY)
+ .text(BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXT_F(SCREEN_LOCK), OPT_RIGHTX | OPT_CENTERY);
+ cmd.text(BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXT_F(BOOT_SCREEN), OPT_RIGHTX | OPT_CENTERY);
#undef EDGE_R
}
@@ -94,19 +94,19 @@ void InterfaceSettingsScreen::onRedraw(draw_mode_t what) {
.tag(2).slider(BTN_POS(3,2), BTN_SIZE(2,1), screen_data.InterfaceSettingsScreen.brightness, 128)
.tag(3).slider(BTN_POS(3,3), BTN_SIZE(2,1), screen_data.InterfaceSettingsScreen.volume, 0xFF)
.colors(ui_toggle)
- .tag(4).toggle2(BTN_POS(3,4), BTN_SIZE(w,1), GET_TEXTF(NO), GET_TEXTF(YES), LockScreen::is_enabled())
- .tag(5).toggle2(BTN_POS(3,5), BTN_SIZE(w,1), GET_TEXTF(NO), GET_TEXTF(YES), UIData::animations_enabled())
+ .tag(4).toggle2(BTN_POS(3,4), BTN_SIZE(w,1), GET_TEXT_F(NO), GET_TEXT_F(YES), LockScreen::is_enabled())
+ .tag(5).toggle2(BTN_POS(3,5), BTN_SIZE(w,1), GET_TEXT_F(NO), GET_TEXT_F(YES), UIData::animations_enabled())
#undef EDGE_R
#define EDGE_R 0
#ifdef TOUCH_UI_PORTRAIT
.colors(normal_btn)
- .tag(6).button (BTN_POS(1,6), BTN_SIZE(4,1), GET_TEXTF(INTERFACE_SOUNDS))
+ .tag(6).button (BTN_POS(1,6), BTN_SIZE(4,1), GET_TEXT_F(INTERFACE_SOUNDS))
.colors(action_btn)
- .tag(1).button (BTN_POS(1,7), BTN_SIZE(4,1), GET_TEXTF(BACK));
+ .tag(1).button (BTN_POS(1,7), BTN_SIZE(4,1), GET_TEXT_F(BACK));
#else
- .tag(6).button (BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(INTERFACE_SOUNDS))
+ .tag(6).button (BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXT_F(INTERFACE_SOUNDS))
.colors(action_btn)
- .tag(1).button (BTN_POS(3,6), BTN_SIZE(2,1), GET_TEXTF(BACK));
+ .tag(1).button (BTN_POS(3,6), BTN_SIZE(2,1), GET_TEXT_F(BACK));
#endif
}
}
@@ -263,9 +263,9 @@ void InterfaceSettingsScreen::loadSettings(const char *buff) {
success = persistentStore.write_data(0, data, LULZBOT_EEPROM_BACKUP_SIZE) == PERSISTENT_STORE_SUCCESS;
if (success)
- StatusScreen::setStatusMessage(GET_TEXTF(EEPROM_RESTORED));
+ StatusScreen::setStatusMessage(GET_TEXT_F(EEPROM_RESTORED));
else
- StatusScreen::setStatusMessage(GET_TEXTF(EEPROM_RESET));
+ StatusScreen::setStatusMessage(GET_TEXT_F(EEPROM_RESET));
return success;
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/interface_sounds_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/interface_sounds_screen.cpp
index a116ae29fe5a..819a4519a86b 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/interface_sounds_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/interface_sounds_screen.cpp
@@ -71,15 +71,15 @@ void InterfaceSoundsScreen::onRedraw(draw_mode_t what) {
#define GRID_ROWS 9
.font(font_medium)
- .text(BTN_POS(1,1), BTN_SIZE(4,1), GET_TEXTF(INTERFACE_SOUNDS))
+ .text(BTN_POS(1,1), BTN_SIZE(4,1), GET_TEXT_F(INTERFACE_SOUNDS))
#undef EDGE_R
#define EDGE_R 30
.font(font_small)
- .tag(0).text (BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(SOUND_VOLUME), OPT_RIGHTX | OPT_CENTERY)
- .text (BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(CLICK_SOUNDS), OPT_RIGHTX | OPT_CENTERY)
- .text (BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(PRINT_STARTING), OPT_RIGHTX | OPT_CENTERY)
- .text (BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(PRINT_FINISHED), OPT_RIGHTX | OPT_CENTERY)
- .text (BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(PRINT_ERROR), OPT_RIGHTX | OPT_CENTERY);
+ .tag(0).text (BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXT_F(SOUND_VOLUME), OPT_RIGHTX | OPT_CENTERY)
+ .text (BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXT_F(CLICK_SOUNDS), OPT_RIGHTX | OPT_CENTERY)
+ .text (BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXT_F(PRINT_STARTING), OPT_RIGHTX | OPT_CENTERY)
+ .text (BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXT_F(PRINT_FINISHED), OPT_RIGHTX | OPT_CENTERY)
+ .text (BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXT_F(PRINT_ERROR), OPT_RIGHTX | OPT_CENTERY);
#undef EDGE_R
}
@@ -95,7 +95,7 @@ void InterfaceSoundsScreen::onRedraw(draw_mode_t what) {
#define EDGE_R 30
.tag(2).slider (BTN_POS(3,2), BTN_SIZE(2,1), screen_data.InterfaceSettingsScreen.volume, 0xFF)
.colors(ui_toggle)
- .tag(3).toggle2 (BTN_POS(3,3), BTN_SIZE(w,1), GET_TEXTF(NO), GET_TEXTF(YES), UIData::touch_sounds_enabled())
+ .tag(3).toggle2 (BTN_POS(3,3), BTN_SIZE(w,1), GET_TEXT_F(NO), GET_TEXT_F(YES), UIData::touch_sounds_enabled())
#undef EDGE_R
.colors(normal_btn)
#define EDGE_R 0
@@ -103,7 +103,7 @@ void InterfaceSoundsScreen::onRedraw(draw_mode_t what) {
.tag(5).button (BTN_POS(3,6), BTN_SIZE(2,1), getSoundSelection(PRINTING_FINISHED))
.tag(6).button (BTN_POS(3,7), BTN_SIZE(2,1), getSoundSelection(PRINTING_FAILED))
.colors(action_btn)
- .tag(1).button (BTN_POS(1,9), BTN_SIZE(4,1), GET_TEXTF(BACK));
+ .tag(1).button (BTN_POS(1,9), BTN_SIZE(4,1), GET_TEXT_F(BACK));
}
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/jerk_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/jerk_screen.cpp
index 705331475726..22f5ddbf913f 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/jerk_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/jerk_screen.cpp
@@ -22,7 +22,7 @@
#include "../config.h"
-#if ENABLED(LULZBOT_TOUCH_UI) && DISABLED(JUNCTION_DEVIATION)
+#if BOTH(LULZBOT_TOUCH_UI, CLASSIC_JERK)
#include "screens.h"
@@ -34,12 +34,12 @@ void JerkScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
w.precision(1);
- w.units(GET_TEXTF(UNITS_MM_S));
- w.heading(GET_TEXTF(JERK));
- w.color(x_axis) .adjuster( 2, GET_TEXTF(AXIS_X), getAxisMaxJerk_mm_s(X) );
- w.color(y_axis) .adjuster( 4, GET_TEXTF(AXIS_Y), getAxisMaxJerk_mm_s(Y) );
- w.color(z_axis) .adjuster( 6, GET_TEXTF(AXIS_Z), getAxisMaxJerk_mm_s(Z) );
- w.color(e_axis) .adjuster( 8, GET_TEXTF(AXIS_E), getAxisMaxJerk_mm_s(E0) );
+ w.units(GET_TEXT_F(UNITS_MM_S));
+ w.heading(GET_TEXT_F(JERK));
+ w.color(x_axis) .adjuster( 2, GET_TEXT_F(AXIS_X), getAxisMaxJerk_mm_s(X) );
+ w.color(y_axis) .adjuster( 4, GET_TEXT_F(AXIS_Y), getAxisMaxJerk_mm_s(Y) );
+ w.color(z_axis) .adjuster( 6, GET_TEXT_F(AXIS_Z), getAxisMaxJerk_mm_s(Z) );
+ w.color(e_axis) .adjuster( 8, GET_TEXT_F(AXIS_E), getAxisMaxJerk_mm_s(E0) );
w.increments();
}
@@ -62,4 +62,4 @@ bool JerkScreen::onTouchHeld(uint8_t tag) {
return true;
}
-#endif // LULZBOT_TOUCH_UI
+#endif // LULZBOT_TOUCH_UI && CLASSIC_JERK
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/junction_deviation_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/junction_deviation_screen.cpp
index 56a3b13365c5..617cdd251091 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/junction_deviation_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/junction_deviation_screen.cpp
@@ -22,7 +22,7 @@
#include "../config.h"
-#if BOTH(LULZBOT_TOUCH_UI, JUNCTION_DEVIATION)
+#if ENABLED(LULZBOT_TOUCH_UI) && DISABLED(CLASSIC_JERK)
#include "screens.h"
@@ -33,9 +33,9 @@ using namespace Theme;
void JunctionDeviationScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
w.precision(2);
- w.units(GET_TEXTF(UNITS_MM));
- w.heading(GET_TEXTF(JUNC_DEVIATION));
- w.color(other) .adjuster( 2, PSTR(""), getJunctionDeviation_mm() );
+ w.units(GET_TEXT_F(UNITS_MM));
+ w.heading(GET_TEXT_F(JUNC_DEVIATION));
+ w.color(other) .adjuster( 2, F(""), getJunctionDeviation_mm() );
w.increments();
}
@@ -51,4 +51,4 @@ bool JunctionDeviationScreen::onTouchHeld(uint8_t tag) {
return true;
}
-#endif // LULZBOT_TOUCH_UI
+#endif // LULZBOT_TOUCH_UI && !CLASSIC_JERK
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/kill_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/kill_screen.cpp
index 7fa85067344b..853491032ec8 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/kill_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/kill_screen.cpp
@@ -32,7 +32,7 @@ using namespace FTDI;
// loop. So we only have a show() method rather than onRedraw(). The KillScreen
// should not be used as a model for other UI screens as it is an exception.
-void KillScreen::show(progmem_str message) {
+void KillScreen::show(const char *message) {
CommandProcessor cmd;
cmd.cmd(CMD_DLSTART)
@@ -46,8 +46,8 @@ void KillScreen::show(progmem_str message) {
cmd.font(Theme::font_large)
.cmd(COLOR_RGB(Theme::bg_text_enabled))
.text(BTN_POS(1,2), BTN_SIZE(4,1), message)
- .text(BTN_POS(1,3), BTN_SIZE(4,1), GET_TEXTF(PRINTER_HALTED))
- .text(BTN_POS(1,6), BTN_SIZE(4,1), GET_TEXTF(PLEASE_RESET));
+ .text(BTN_POS(1,3), BTN_SIZE(4,1), GET_TEXT_F(PRINTER_HALTED))
+ .text(BTN_POS(1,6), BTN_SIZE(4,1), GET_TEXT_F(PLEASE_RESET));
#undef GRID_COLS
#undef GRID_ROWS
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/linear_advance_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/linear_advance_screen.cpp
index 2c08fb24c82a..f24ff9fc6757 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/linear_advance_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/linear_advance_screen.cpp
@@ -33,16 +33,16 @@ using namespace Theme;
void LinearAdvanceScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
w.precision(2, DEFAULT_LOWEST).color(e_axis);
- w.heading( GET_TEXTF(LINEAR_ADVANCE));
+ w.heading( GET_TEXT_F(LINEAR_ADVANCE));
#if EXTRUDERS == 1
- w.adjuster( 2, GET_TEXTF(LINEAR_ADVANCE_K), getLinearAdvance_mm_mm_s(E0) );
+ w.adjuster( 2, GET_TEXT_F(LINEAR_ADVANCE_K), getLinearAdvance_mm_mm_s(E0) );
#else
- w.adjuster( 2, GET_TEXTF(LINEAR_ADVANCE_K1), getLinearAdvance_mm_mm_s(E0) );
- w.adjuster( 4, GET_TEXTF(LINEAR_ADVANCE_K2), getLinearAdvance_mm_mm_s(E1) );
+ w.adjuster( 2, GET_TEXT_F(LINEAR_ADVANCE_K1), getLinearAdvance_mm_mm_s(E0) );
+ w.adjuster( 4, GET_TEXT_F(LINEAR_ADVANCE_K2), getLinearAdvance_mm_mm_s(E1) );
#if EXTRUDERS > 2
- w.adjuster( 6, GET_TEXTF(LINEAR_ADVANCE_K3), getLinearAdvance_mm_mm_s(E2) );
+ w.adjuster( 6, GET_TEXT_F(LINEAR_ADVANCE_K3), getLinearAdvance_mm_mm_s(E2) );
#if EXTRUDERS > 3
- w.adjuster( 8, GET_TEXTF(LINEAR_ADVANCE_K4), getLinearAdvance_mm_mm_s(E3) );
+ w.adjuster( 8, GET_TEXT_F(LINEAR_ADVANCE_K4), getLinearAdvance_mm_mm_s(E3) );
#endif
#endif
#endif
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/lock_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/lock_screen.cpp
index ae683ced54fc..13b42b8cee59 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/lock_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/lock_screen.cpp
@@ -45,6 +45,7 @@ void LockScreen::onRedraw(draw_mode_t what) {
if (what & BACKGROUND) {
cmd.cmd(CLEAR_COLOR_RGB(bg_color))
.cmd(CLEAR(true,true,true))
+ .cmd(COLOR_RGB(bg_text_enabled))
.tag(0);
}
@@ -65,16 +66,16 @@ void LockScreen::onRedraw(draw_mode_t what) {
progmem_str message;
switch (message_style()) {
case 'w':
- message = GET_TEXTF(PASSCODE_REJECTED);
+ message = GET_TEXT_F(PASSCODE_REJECTED);
break;
case 'g':
- message = GET_TEXTF(PASSCODE_ACCEPTED);
+ message = GET_TEXT_F(PASSCODE_ACCEPTED);
break;
default:
if (passcode == 0) {
- message = GET_TEXTF(PASSCODE_SELECT);
+ message = GET_TEXT_F(PASSCODE_SELECT);
} else {
- message = GET_TEXTF(PASSCODE_REQUEST);
+ message = GET_TEXT_F(PASSCODE_REQUEST);
}
}
message_style() = '\0'; // Terminate the string.
@@ -88,29 +89,28 @@ void LockScreen::onRedraw(draw_mode_t what) {
const uint8_t pressed = EventLoop::get_pressed_tag();
cmd.font(font_large)
- .cmd(COLOR_RGB(bg_text_enabled))
- #ifdef TOUCH_UI_PORTRAIT
+ #ifdef TOUCH_UI_PORTRAIT
.text(BTN_POS(1,2), BTN_SIZE(1,1), message)
.font(font_xlarge)
.text(BTN_POS(1,4), BTN_SIZE(1,1), screen_data.LockScreen.passcode)
- #else
+ #else
.text(BTN_POS(1,1), BTN_SIZE(1,1), message)
.font(font_xlarge)
.text(BTN_POS(1,2), BTN_SIZE(1,1), screen_data.LockScreen.passcode)
- #endif
+ #endif
.font(font_large)
.colors(normal_btn)
- #ifdef TOUCH_UI_PASSCODE
+ #ifdef TOUCH_UI_PASSCODE
.keys(BTN_POS(1,l+1), BTN_SIZE(1,1), F("123"), pressed)
.keys(BTN_POS(1,l+2), BTN_SIZE(1,1), F("456"), pressed)
.keys(BTN_POS(1,l+3), BTN_SIZE(1,1), F("789"), pressed)
.keys(BTN_POS(1,l+4), BTN_SIZE(1,1), F("0.<"), pressed);
- #else
+ #else
.keys(BTN_POS(1,l+1), BTN_SIZE(1,1), F("1234567890"), pressed)
.keys(BTN_POS(1,l+2), BTN_SIZE(1,1), F("qwertyuiop"), pressed)
.keys(BTN_POS(1,l+3), BTN_SIZE(1,1), F("asdfghjkl "), pressed)
.keys(BTN_POS(1,l+4), BTN_SIZE(1,1), F("zxcvbnm!?<"), pressed);
- #endif
+ #endif
#undef MARGIN_T
#undef MARGIN_B
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/main_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/main_menu.cpp
index ae6dd58c241a..23c4415c817a 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/main_menu.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/main_menu.cpp
@@ -43,53 +43,53 @@ void MainMenu::onRedraw(draw_mode_t what) {
#ifdef TOUCH_UI_PORTRAIT
#define GRID_ROWS 8
#define GRID_COLS 2
- .tag(2).button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXTF(AUTO_HOME))
+ .tag(2).button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXT_F(AUTO_HOME))
#ifdef NOZZLE_CLEAN_FEATURE
.enabled(1)
#else
.enabled(0)
#endif
- .tag(3).button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXTF(CLEAN_NOZZLE))
- .tag(4).button( BTN_POS(1,2), BTN_SIZE(1,1), GET_TEXTF(MOVE_AXIS))
- .tag(5).button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXTF(MOTORS_OFF))
- .tag(6).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(TEMPERATURE))
- .tag(7).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(CHANGE_FILAMENT))
- .tag(8).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(ADVANCED_SETTINGS))
+ .tag(3).button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXT_F(CLEAN_NOZZLE))
+ .tag(4).button( BTN_POS(1,2), BTN_SIZE(1,1), GET_TEXT_F(MOVE_AXIS))
+ .tag(5).button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXT_F(MOTORS_OFF))
+ .tag(6).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXT_F(TEMPERATURE))
+ .tag(7).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXT_F(CHANGE_FILAMENT))
+ .tag(8).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXT_F(ADVANCED_SETTINGS))
#ifdef PRINTCOUNTER
.enabled(1)
#else
.enabled(0)
#endif
- .tag(9).button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(PRINTER_STATISTICS))
- .tag(10).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(ABOUT_PRINTER))
+ .tag(9).button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXT_F(PRINTER_STATISTICS))
+ .tag(10).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXT_F(ABOUT_PRINTER))
.colors(action_btn)
- .tag(1).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXTF(BACK));
+ .tag(1).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(BACK));
#undef GRID_COLS
#undef GRID_ROWS
#else
#define GRID_ROWS 5
#define GRID_COLS 2
- .tag(2).button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXTF(AUTO_HOME))
+ .tag(2).button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXT_F(AUTO_HOME))
#if ENABLED(NOZZLE_CLEAN_FEATURE)
.enabled(1)
#else
.enabled(0)
#endif
- .tag(3).button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXTF(CLEAN_NOZZLE))
- .tag(4).button( BTN_POS(1,2), BTN_SIZE(1,1), GET_TEXTF(MOVE_AXIS))
- .tag(5).button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXTF(MOTORS_OFF))
- .tag(6).button( BTN_POS(1,3), BTN_SIZE(1,1), GET_TEXTF(TEMPERATURE))
- .tag(7).button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXTF(CHANGE_FILAMENT))
- .tag(8).button( BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXTF(ADVANCED_SETTINGS))
+ .tag(3).button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXT_F(CLEAN_NOZZLE))
+ .tag(4).button( BTN_POS(1,2), BTN_SIZE(1,1), GET_TEXT_F(MOVE_AXIS))
+ .tag(5).button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXT_F(MOTORS_OFF))
+ .tag(6).button( BTN_POS(1,3), BTN_SIZE(1,1), GET_TEXT_F(TEMPERATURE))
+ .tag(7).button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXT_F(CHANGE_FILAMENT))
+ .tag(8).button( BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXT_F(ADVANCED_SETTINGS))
#ifdef PRINTCOUNTER
.enabled(1)
#else
.enabled(0)
#endif
- .tag(9).button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(PRINTER_STATISTICS))
- .tag(10).button( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXTF(ABOUT_PRINTER))
+ .tag(9).button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXT_F(PRINTER_STATISTICS))
+ .tag(10).button( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXT_F(ABOUT_PRINTER))
.colors(action_btn)
- .tag(1).button( BTN_POS(2,5), BTN_SIZE(1,1), GET_TEXTF(BACK));
+ .tag(1).button( BTN_POS(2,5), BTN_SIZE(1,1), GET_TEXT_F(BACK));
#undef GRID_COLS
#undef GRID_ROWS
#endif
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/max_acceleration_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/max_acceleration_screen.cpp
index 80e7f59cde70..2a4569244d5d 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/max_acceleration_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/max_acceleration_screen.cpp
@@ -33,21 +33,21 @@ using namespace Theme;
void MaxAccelerationScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
w.precision(0);
- w.units(GET_TEXTF(UNITS_MM_S2));
- w.heading(GET_TEXTF(ACCELERATION));
- w.color(x_axis) .adjuster( 2, GET_TEXTF(AMAX_X), getAxisMaxAcceleration_mm_s2(X) );
- w.color(y_axis) .adjuster( 4, GET_TEXTF(AMAX_Y), getAxisMaxAcceleration_mm_s2(Y) );
- w.color(z_axis) .adjuster( 6, GET_TEXTF(AMAX_Z), getAxisMaxAcceleration_mm_s2(Z) );
+ w.units(GET_TEXT_F(UNITS_MM_S2));
+ w.heading(GET_TEXT_F(ACCELERATION));
+ w.color(x_axis) .adjuster( 2, GET_TEXT_F(AMAX_X), getAxisMaxAcceleration_mm_s2(X) );
+ w.color(y_axis) .adjuster( 4, GET_TEXT_F(AMAX_Y), getAxisMaxAcceleration_mm_s2(Y) );
+ w.color(z_axis) .adjuster( 6, GET_TEXT_F(AMAX_Z), getAxisMaxAcceleration_mm_s2(Z) );
#if EXTRUDERS == 1 || DISABLED(DISTINCT_E_FACTORS)
- w.color(e_axis).adjuster( 8, GET_TEXTF(AMAX_E1), getAxisMaxAcceleration_mm_s2(E0) );
+ w.color(e_axis).adjuster( 8, GET_TEXT_F(AMAX_E0), getAxisMaxAcceleration_mm_s2(E0) );
#elif EXTRUDERS > 1
- w.color(e_axis).adjuster( 8, GET_TEXTF(AMAX_E1), getAxisMaxAcceleration_mm_s2(E0) );
- w.color(e_axis).adjuster(10, GET_TEXTF(AMAX_E2), getAxisMaxAcceleration_mm_s2(E1) );
+ w.color(e_axis).adjuster( 8, GET_TEXT_F(AMAX_E0), getAxisMaxAcceleration_mm_s2(E0) );
+ w.color(e_axis).adjuster(10, GET_TEXT_F(AMAX_E1), getAxisMaxAcceleration_mm_s2(E1) );
#if EXTRUDERS > 2
- w.color(e_axis).adjuster(12, GET_TEXTF(AMAX_E3), getAxisMaxAcceleration_mm_s2(E2) );
+ w.color(e_axis).adjuster(12, GET_TEXT_F(AMAX_E2), getAxisMaxAcceleration_mm_s2(E2) );
#endif
#if EXTRUDERS > 3
- w.color(e_axis).adjuster(14, GET_TEXTF(AMAX_E4), getAxisMaxAcceleration_mm_s2(E3) );
+ w.color(e_axis).adjuster(14, GET_TEXT_F(AMAX_E3), getAxisMaxAcceleration_mm_s2(E3) );
#endif
#endif
w.increments();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/max_velocity_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/max_velocity_screen.cpp
index 719e5a308e28..8e5861ae0de4 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/max_velocity_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/max_velocity_screen.cpp
@@ -34,21 +34,21 @@ void MaxVelocityScreen::onRedraw(draw_mode_t what) {
using namespace ExtUI;
widgets_t w(what);
w.precision(0);
- w.units(GET_TEXTF(UNITS_MM_S));
- w.heading( GET_TEXTF(VELOCITY));
- w.color(x_axis) .adjuster( 2, GET_TEXTF(VMAX_X), getAxisMaxFeedrate_mm_s(X) );
- w.color(y_axis) .adjuster( 4, GET_TEXTF(VMAX_Y), getAxisMaxFeedrate_mm_s(Y) );
- w.color(z_axis) .adjuster( 6, GET_TEXTF(VMAX_Z), getAxisMaxFeedrate_mm_s(Z) );
+ w.units(GET_TEXT_F(UNITS_MM_S));
+ w.heading( GET_TEXT_F(VELOCITY));
+ w.color(x_axis) .adjuster( 2, GET_TEXT_F(VMAX_X), getAxisMaxFeedrate_mm_s(X) );
+ w.color(y_axis) .adjuster( 4, GET_TEXT_F(VMAX_Y), getAxisMaxFeedrate_mm_s(Y) );
+ w.color(z_axis) .adjuster( 6, GET_TEXT_F(VMAX_Z), getAxisMaxFeedrate_mm_s(Z) );
#if EXTRUDERS == 1 || DISABLED(DISTINCT_E_FACTORS)
- w.color(e_axis) .adjuster( 8, GET_TEXTF(VMAX_E1), getAxisMaxFeedrate_mm_s(E0) );
+ w.color(e_axis) .adjuster( 8, GET_TEXT_F(VMAX_E1), getAxisMaxFeedrate_mm_s(E0) );
#elif EXTRUDERS > 1
- w.color(e_axis) .adjuster( 8, GET_TEXTF(VMAX_E1), getAxisMaxFeedrate_mm_s(E0) );
- w.color(e_axis) .adjuster( 10, GET_TEXTF(VMAX_E2), getAxisMaxFeedrate_mm_s(E1) );
+ w.color(e_axis) .adjuster( 8, GET_TEXT_F(VMAX_E1), getAxisMaxFeedrate_mm_s(E0) );
+ w.color(e_axis) .adjuster( 10, GET_TEXT_F(VMAX_E2), getAxisMaxFeedrate_mm_s(E1) );
#if EXTRUDERS > 2
- w.color(e_axis).adjuster( 12, GET_TEXTF(VMAX_E3), getAxisMaxFeedrate_mm_s(E2) );
+ w.color(e_axis).adjuster( 12, GET_TEXT_F(VMAX_E3), getAxisMaxFeedrate_mm_s(E2) );
#endif
#if EXTRUDERS > 3
- w.color(e_axis).adjuster( 14, GET_TEXTF(VMAX_E4), getAxisMaxFeedrate_mm_s(E3) );
+ w.color(e_axis).adjuster( 14, GET_TEXT_F(VMAX_E4), getAxisMaxFeedrate_mm_s(E3) );
#endif
#endif
w.increments();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp
index 6206043230ee..5bc6f31df71e 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp
@@ -45,24 +45,24 @@ void MoveAxisScreen::onEntry() {
void MoveAxisScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
w.precision(1);
- w.units(GET_TEXTF(UNITS_MM));
- w.heading( GET_TEXTF(MOVE_AXIS));
+ w.units(GET_TEXT_F(UNITS_MM));
+ w.heading( GET_TEXT_F(MOVE_AXIS));
w.home_buttons(20);
- w.color(Theme::x_axis).adjuster( 2, GET_TEXTF(AXIS_X), getAxisPosition_mm(X), canMove(X));
- w.color(Theme::y_axis).adjuster( 4, GET_TEXTF(AXIS_Y), getAxisPosition_mm(Y), canMove(Y));
- w.color(Theme::z_axis).adjuster( 6, GET_TEXTF(AXIS_Z), getAxisPosition_mm(Z), canMove(Z));
+ w.color(Theme::x_axis).adjuster( 2, GET_TEXT_F(AXIS_X), getAxisPosition_mm(X), canMove(X));
+ w.color(Theme::y_axis).adjuster( 4, GET_TEXT_F(AXIS_Y), getAxisPosition_mm(Y), canMove(Y));
+ w.color(Theme::z_axis).adjuster( 6, GET_TEXT_F(AXIS_Z), getAxisPosition_mm(Z), canMove(Z));
w.color(Theme::e_axis);
#if EXTRUDERS == 1
- w.adjuster( 8, GET_TEXTF(AXIS_E), screen_data.MoveAxisScreen.e_rel[0], canMove(E0));
+ w.adjuster( 8, GET_TEXT_F(AXIS_E), screen_data.MoveAxisScreen.e_rel[0], canMove(E0));
#elif EXTRUDERS > 1
- w.adjuster( 8, GET_TEXTF(AXIS_E1), screen_data.MoveAxisScreen.e_rel[0], canMove(E0));
- w.adjuster( 10, GET_TEXTF(AXIS_E2), screen_data.MoveAxisScreen.e_rel[1], canMove(E1));
+ w.adjuster( 8, GET_TEXT_F(AXIS_E1), screen_data.MoveAxisScreen.e_rel[0], canMove(E0));
+ w.adjuster( 10, GET_TEXT_F(AXIS_E2), screen_data.MoveAxisScreen.e_rel[1], canMove(E1));
#if EXTRUDERS > 2
- w.adjuster( 12, GET_TEXTF(AXIS_E3), screen_data.MoveAxisScreen.e_rel[2], canMove(E2));
+ w.adjuster( 12, GET_TEXT_F(AXIS_E3), screen_data.MoveAxisScreen.e_rel[2], canMove(E2));
#endif
#if EXTRUDERS > 3
- w.adjuster( 14, GET_TEXTF(AXIS_E4), screen_data.MoveAxisScreen.e_rel[3], canMove(E3));
+ w.adjuster( 14, GET_TEXT_F(AXIS_E4), screen_data.MoveAxisScreen.e_rel[3], canMove(E3));
#endif
#endif
w.increments();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nozzle_offsets_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nozzle_offsets_screen.cpp
index e8835ba85820..eb29588b2373 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nozzle_offsets_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nozzle_offsets_screen.cpp
@@ -39,14 +39,14 @@ void NozzleOffsetScreen::onEntry() {
void NozzleOffsetScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
- w.precision(2).units(GET_TEXTF(UNITS_MM));
+ w.precision(2).units(GET_TEXT_F(UNITS_MM));
- w.heading( GET_TEXTF(TOOL_OFFSETS));
- w.color(Theme::x_axis).adjuster(2, GET_TEXTF(AXIS_X), ExtUI::getNozzleOffset_mm(X, E1));
- w.color(Theme::y_axis).adjuster(4, GET_TEXTF(AXIS_Y), ExtUI::getNozzleOffset_mm(Y, E1));
- w.color(Theme::z_axis).adjuster(6, GET_TEXTF(AXIS_Z), ExtUI::getNozzleOffset_mm(Z, E1));
+ w.heading( GET_TEXT_F(TOOL_OFFSETS));
+ w.color(Theme::x_axis).adjuster(2, GET_TEXT_F(AXIS_X), ExtUI::getNozzleOffset_mm(X, E1));
+ w.color(Theme::y_axis).adjuster(4, GET_TEXT_F(AXIS_Y), ExtUI::getNozzleOffset_mm(Y, E1));
+ w.color(Theme::z_axis).adjuster(6, GET_TEXT_F(AXIS_Z), ExtUI::getNozzleOffset_mm(Z, E1));
#if ENABLED(CALIBRATION_GCODE)
- w.button(8, GET_TEXTF(MEASURE_AUTOMATICALLY), !isPrinting());
+ w.button(8, GET_TEXT_F(MEASURE_AUTOMATICALLY), !isPrinting());
#endif
w.increments();
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nudge_nozzle_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nudge_nozzle_screen.cpp
index 069fea34316d..e86e66b9c219 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nudge_nozzle_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nudge_nozzle_screen.cpp
@@ -43,21 +43,21 @@ void NudgeNozzleScreen::onEntry() {
void NudgeNozzleScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
- w.precision(2, BaseNumericAdjustmentScreen::DEFAULT_MIDRANGE).units(GET_TEXTF(UNITS_MM));
+ w.precision(2, BaseNumericAdjustmentScreen::DEFAULT_MIDRANGE).units(GET_TEXT_F(UNITS_MM));
- w.heading( GET_TEXTF(NUDGE_NOZZLE));
+ w.heading( GET_TEXT_F(NUDGE_NOZZLE));
#if ENABLED(BABYSTEP_XY)
- w.color(x_axis).adjuster(2, GET_TEXTF(AXIS_X), screen_data.NudgeNozzleScreen.rel.x / getAxisSteps_per_mm(X));
- w.color(y_axis).adjuster(4, GET_TEXTF(AXIS_Y), screen_data.NudgeNozzleScreen.rel.y / getAxisSteps_per_mm(Y));
+ w.color(x_axis).adjuster(2, GET_TEXT_F(AXIS_X), screen_data.NudgeNozzleScreen.rel.x / getAxisSteps_per_mm(X));
+ w.color(y_axis).adjuster(4, GET_TEXT_F(AXIS_Y), screen_data.NudgeNozzleScreen.rel.y / getAxisSteps_per_mm(Y));
#endif
- w.color(z_axis).adjuster(6, GET_TEXTF(AXIS_Z), screen_data.NudgeNozzleScreen.rel.z / getAxisSteps_per_mm(Z));
+ w.color(z_axis).adjuster(6, GET_TEXT_F(AXIS_Z), screen_data.NudgeNozzleScreen.rel.z / getAxisSteps_per_mm(Z));
w.increments();
#if EXTRUDERS > 1
- w.toggle (8, GET_TEXTF(ADJUST_BOTH_NOZZLES), screen_data.NudgeNozzleScreen.link_nozzles);
+ w.toggle (8, GET_TEXT_F(ADJUST_BOTH_NOZZLES), screen_data.NudgeNozzleScreen.link_nozzles);
#endif
#if EXTRUDERS > 1 || HAS_BED_PROBE
- w.toggle (9, GET_TEXTF(SHOW_OFFSETS), screen_data.NudgeNozzleScreen.show_offsets);
+ w.toggle (9, GET_TEXT_F(SHOW_OFFSETS), screen_data.NudgeNozzleScreen.show_offsets);
if (screen_data.NudgeNozzleScreen.show_offsets) {
char str[19];
@@ -69,12 +69,12 @@ void NudgeNozzleScreen::onRedraw(draw_mode_t what) {
dtostrf(getZOffset_mm(), 4, 2, str);
strcat(str, " ");
strcat_P(str, GET_TEXT(UNITS_MM));
- w.text_field (0, GET_TEXTF(ZPROBE_ZOFFSET), str);
+ w.text_field (0, GET_TEXT_F(ZPROBE_ZOFFSET), str);
#endif
#if EXTRUDERS > 1
format_position(str, getNozzleOffset_mm(X, E1), getNozzleOffset_mm(Y, E1), getNozzleOffset_mm(Z, E1));
- w.text_field (0, GET_TEXTF(TOOL_OFFSETS), str);
+ w.text_field (0, GET_TEXT_F(TOOL_OFFSETS), str);
#endif
}
#endif
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/restore_failsafe_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/restore_failsafe_dialog_box.cpp
index 717fea9cac2d..4c91e628f729 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/restore_failsafe_dialog_box.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/restore_failsafe_dialog_box.cpp
@@ -29,7 +29,7 @@
using namespace ExtUI;
void RestoreFailsafeDialogBox::onRedraw(draw_mode_t) {
- drawMessage(GET_TEXTF(EEPROM_RESET_WARNING));
+ drawMessage(GET_TEXT_F(EEPROM_RESET_WARNING));
drawYesNoButtons();
}
@@ -37,7 +37,7 @@ bool RestoreFailsafeDialogBox::onTouchEnd(uint8_t tag) {
switch (tag) {
case 1:
ExtUI::injectCommands_P(PSTR("M502"));
- AlertDialogBox::show(GET_TEXTF(EEPROM_RESET));
+ AlertDialogBox::show(GET_TEXT_F(EEPROM_RESET));
// Remove RestoreFailsafeDialogBox from the stack
// so the alert box doesn't return to it.
current_screen.forget();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/save_settings_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/save_settings_dialog_box.cpp
index b29c171cf75d..e2c8a81e3016 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/save_settings_dialog_box.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/save_settings_dialog_box.cpp
@@ -31,7 +31,7 @@ using namespace ExtUI;
bool SaveSettingsDialogBox::needs_save = false;
void SaveSettingsDialogBox::onRedraw(draw_mode_t) {
- drawMessage(GET_TEXTF(EEPROM_SAVE_PROMPT));
+ drawMessage(GET_TEXT_F(EEPROM_SAVE_PROMPT));
drawYesNoButtons();
}
@@ -40,7 +40,7 @@ bool SaveSettingsDialogBox::onTouchEnd(uint8_t tag) {
switch (tag) {
case 1:
injectCommands_P(PSTR("M500"));
- AlertDialogBox::show(GET_TEXTF(EEPROM_SAVED));
+ AlertDialogBox::show(GET_TEXT_F(EEPROM_SAVED));
// Remove SaveSettingsDialogBox from the stack
// so the alert box doesn't return to me.
current_screen.forget();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.cpp
index 338ec71827f3..42eb8317c992 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.cpp
@@ -75,7 +75,7 @@ SCREEN_TABLE {
DECL_SCREEN(MaxVelocityScreen),
DECL_SCREEN(MaxAccelerationScreen),
DECL_SCREEN(DefaultAccelerationScreen),
-#if ENABLED(JUNCTION_DEVIATION)
+#if DISABLED(CLASSIC_JERK)
DECL_SCREEN(JunctionDeviationScreen),
#else
DECL_SCREEN(JerkScreen),
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h
index 20bb5eb76ed0..a781564644b3 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h
@@ -55,7 +55,7 @@ enum {
MAX_VELOCITY_SCREEN_CACHE,
MAX_ACCELERATION_SCREEN_CACHE,
DEFAULT_ACCELERATION_SCREEN_CACHE,
-#if ENABLED(JUNCTION_DEVIATION)
+#if DISABLED(CLASSIC_JERK)
JUNC_DEV_SCREEN_CACHE,
#else
JERK_SCREEN_CACHE,
@@ -135,7 +135,7 @@ class KillScreen {
// The KillScreen is behaves differently than the
// others, so we do not bother extending UIScreen.
public:
- static void show(progmem_str msg);
+ static void show(const char*);
};
class DialogBoxBaseClass : public BaseScreen {
@@ -503,7 +503,7 @@ class DefaultAccelerationScreen : public BaseNumericAdjustmentScreen, public Cac
static bool onTouchHeld(uint8_t tag);
};
-#if ENABLED(JUNCTION_DEVIATION)
+#if DISABLED(CLASSIC_JERK)
class JunctionDeviationScreen : public BaseNumericAdjustmentScreen, public CachedScreen {
public:
static void onRedraw(draw_mode_t);
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/spinner_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/spinner_dialog_box.cpp
index 985a217e789e..fbc51c1c40b7 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/spinner_dialog_box.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/spinner_dialog_box.cpp
@@ -46,7 +46,7 @@ void SpinnerDialogBox::hide() {
}
void SpinnerDialogBox::enqueueAndWait_P(const progmem_str commands) {
- enqueueAndWait_P(GET_TEXTF(PLEASE_WAIT), commands);
+ enqueueAndWait_P(GET_TEXT_F(PLEASE_WAIT), commands);
}
void SpinnerDialogBox::enqueueAndWait_P(const progmem_str message, const progmem_str commands) {
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/statistics_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/statistics_screen.cpp
index e468159d2cb6..82a2c9d4465e 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/statistics_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/statistics_screen.cpp
@@ -44,14 +44,14 @@ void StatisticsScreen::onRedraw(draw_mode_t what) {
.tag(0)
.font(Theme::font_medium)
- .text(BTN_POS(1,1), BTN_SIZE(4,1), GET_TEXTF(PRINTER_STATISTICS))
+ .text(BTN_POS(1,1), BTN_SIZE(4,1), GET_TEXT_F(PRINTER_STATISTICS))
.font(Theme::font_small)
.tag(0)
- .text(BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(INFO_PRINT_COUNT), OPT_RIGHTX | OPT_CENTERY)
- .text(BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(INFO_COMPLETED_PRINTS), OPT_RIGHTX | OPT_CENTERY)
- .text(BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(INFO_PRINT_TIME), OPT_RIGHTX | OPT_CENTERY)
- .text(BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(INFO_PRINT_LONGEST), OPT_RIGHTX | OPT_CENTERY)
- .text(BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(INFO_PRINT_FILAMENT), OPT_RIGHTX | OPT_CENTERY);
+ .text(BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXT_F(INFO_PRINT_COUNT), OPT_RIGHTX | OPT_CENTERY)
+ .text(BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXT_F(INFO_COMPLETED_PRINTS), OPT_RIGHTX | OPT_CENTERY)
+ .text(BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXT_F(INFO_PRINT_TIME), OPT_RIGHTX | OPT_CENTERY)
+ .text(BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXT_F(INFO_PRINT_LONGEST), OPT_RIGHTX | OPT_CENTERY)
+ .text(BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXT_F(INFO_PRINT_FILAMENT), OPT_RIGHTX | OPT_CENTERY);
// Don't chain the following, it causes strange issues with evaluation ordering!
cmd.text(BTN_POS(3,2), BTN_SIZE(2,1), getTotalPrints_str(buffer));
cmd.text(BTN_POS(3,3), BTN_SIZE(2,1), getFinishedPrints_str(buffer));
@@ -63,7 +63,7 @@ void StatisticsScreen::onRedraw(draw_mode_t what) {
if (what & FOREGROUND) {
cmd.font(Theme::font_medium)
.colors(action_btn)
- .tag(1).button(BTN_POS(1,7), BTN_SIZE(4,1), GET_TEXTF(BACK));
+ .tag(1).button(BTN_POS(1,7), BTN_SIZE(4,1), GET_TEXT_F(BACK));
}
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/status_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/status_screen.cpp
index 81fc86d5a488..d1717656023e 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/status_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/status_screen.cpp
@@ -53,9 +53,9 @@ void StatusScreen::draw_axis_position(draw_mode_t what) {
.button( BTN_POS(1,7), BTN_SIZE(2,1), F(""), OPT_FLAT)
.font(Theme::font_small)
- .text ( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXTF(AXIS_X))
- .text ( BTN_POS(1,6), BTN_SIZE(1,1), GET_TEXTF(AXIS_Y))
- .text ( BTN_POS(1,7), BTN_SIZE(1,1), GET_TEXTF(AXIS_Z))
+ .text ( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXT_F(AXIS_X))
+ .text ( BTN_POS(1,6), BTN_SIZE(1,1), GET_TEXT_F(AXIS_Y))
+ .text ( BTN_POS(1,7), BTN_SIZE(1,1), GET_TEXT_F(AXIS_Z))
.font(Theme::font_medium)
.fgcolor(Theme::x_axis) .button( BTN_POS(2,5), BTN_SIZE(2,1), F(""), OPT_FLAT)
@@ -69,9 +69,9 @@ void StatusScreen::draw_axis_position(draw_mode_t what) {
.button( BTN_POS(3,5), BTN_SIZE(1,2), F(""), OPT_FLAT)
.font(Theme::font_small)
- .text ( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXTF(AXIS_X))
- .text ( BTN_POS(2,5), BTN_SIZE(1,1), GET_TEXTF(AXIS_Y))
- .text ( BTN_POS(3,5), BTN_SIZE(1,1), GET_TEXTF(AXIS_Z))
+ .text ( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXT_F(AXIS_X))
+ .text ( BTN_POS(2,5), BTN_SIZE(1,1), GET_TEXT_F(AXIS_Y))
+ .text ( BTN_POS(3,5), BTN_SIZE(1,1), GET_TEXT_F(AXIS_Z))
.font(Theme::font_medium)
.fgcolor(Theme::x_axis) .button( BTN_POS(1,6), BTN_SIZE(1,1), F(""), OPT_FLAT)
@@ -279,12 +279,12 @@ void StatusScreen::draw_interaction_buttons(draw_mode_t what) {
#else
BTN_POS(1,7), BTN_SIZE(2,2),
#endif
- isPrintingFromMedia() ? GET_TEXTF(PRINTING) : GET_TEXTF(MEDIA)
+ isPrintingFromMedia() ? GET_TEXT_F(PRINTING) : GET_TEXT_F(MEDIA)
).colors(!has_media ? action_btn : normal_btn)
#ifdef TOUCH_UI_PORTRAIT
- .tag(4).button( BTN_POS(3,8), BTN_SIZE(2,1), GET_TEXTF(MENU));
+ .tag(4).button( BTN_POS(3,8), BTN_SIZE(2,1), GET_TEXT_F(MENU));
#else
- .tag(4).button( BTN_POS(3,7), BTN_SIZE(2,2), GET_TEXTF(MENU));
+ .tag(4).button( BTN_POS(3,7), BTN_SIZE(2,2), GET_TEXT_F(MENU));
#endif
}
#undef GRID_COLS
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_bump_sensitivity_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_bump_sensitivity_screen.cpp
index b767e58e8834..7b88df778f32 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_bump_sensitivity_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_bump_sensitivity_screen.cpp
@@ -33,22 +33,22 @@ using namespace Theme;
void StepperBumpSensitivityScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
w.precision(0, BaseNumericAdjustmentScreen::DEFAULT_LOWEST);
- w.heading( GET_TEXTF(HOME_SENSE));
- w.color(x_axis) .adjuster( 2, GET_TEXTF(AXIS_X), getTMCBumpSensitivity(X),
+ w.heading( GET_TEXT_F(HOME_SENSE));
+ w.color(x_axis) .adjuster( 2, GET_TEXT_F(AXIS_X), getTMCBumpSensitivity(X),
#if X_SENSORLESS
true
#else
false
#endif
);
- w.color(y_axis) .adjuster( 4, GET_TEXTF(AXIS_Y), getTMCBumpSensitivity(Y),
+ w.color(y_axis) .adjuster( 4, GET_TEXT_F(AXIS_Y), getTMCBumpSensitivity(Y),
#if Y_SENSORLESS
true
#else
false
#endif
);
- w.color(z_axis) .adjuster( 6, GET_TEXTF(AXIS_Z), getTMCBumpSensitivity(Z),
+ w.color(z_axis) .adjuster( 6, GET_TEXT_F(AXIS_Z), getTMCBumpSensitivity(Z),
#if Z_SENSORLESS
true
#else
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_current_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_current_screen.cpp
index 48d542bb5927..ff61f57372bf 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_current_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_current_screen.cpp
@@ -33,21 +33,21 @@ using namespace Theme;
void StepperCurrentScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
w.precision(0);
- w.units(GET_TEXTF(UNITS_MILLIAMP));
- w.heading( GET_TEXTF(MOTOR_CURRENT));
- w.color(x_axis) .adjuster( 2, GET_TEXTF(AXIS_X), getAxisCurrent_mA(X) );
- w.color(y_axis) .adjuster( 4, GET_TEXTF(AXIS_Y), getAxisCurrent_mA(Y) );
- w.color(z_axis) .adjuster( 6, GET_TEXTF(AXIS_Z), getAxisCurrent_mA(Z) );
+ w.units(GET_TEXT_F(UNITS_MILLIAMP));
+ w.heading( GET_TEXT_F(MOTOR_CURRENT));
+ w.color(x_axis) .adjuster( 2, GET_TEXT_F(AXIS_X), getAxisCurrent_mA(X) );
+ w.color(y_axis) .adjuster( 4, GET_TEXT_F(AXIS_Y), getAxisCurrent_mA(Y) );
+ w.color(z_axis) .adjuster( 6, GET_TEXT_F(AXIS_Z), getAxisCurrent_mA(Z) );
#if EXTRUDERS == 1
- w.color(e_axis).adjuster( 8, GET_TEXTF(AXIS_E), getAxisCurrent_mA(E0) );
+ w.color(e_axis).adjuster( 8, GET_TEXT_F(AXIS_E), getAxisCurrent_mA(E0) );
#elif EXTRUDERS > 1
- w.color(e_axis).adjuster( 8, GET_TEXTF(AXIS_E1), getAxisCurrent_mA(E0) );
- w.color(e_axis).adjuster(10, GET_TEXTF(AXIS_E2), getAxisCurrent_mA(E1) );
+ w.color(e_axis).adjuster( 8, GET_TEXT_F(AXIS_E1), getAxisCurrent_mA(E0) );
+ w.color(e_axis).adjuster(10, GET_TEXT_F(AXIS_E2), getAxisCurrent_mA(E1) );
#if EXTRUDERS > 2
- w.color(e_axis).adjuster(12, GET_TEXTF(AXIS_E3), getAxisCurrent_mA(E2) );
+ w.color(e_axis).adjuster(12, GET_TEXT_F(AXIS_E3), getAxisCurrent_mA(E2) );
#endif
#if EXTRUDERS > 3
- w.color(e_axis).adjuster(14, GET_TEXTF(AXIS_E4), getAxisCurrent_mA(E3) );
+ w.color(e_axis).adjuster(14, GET_TEXT_F(AXIS_E4), getAxisCurrent_mA(E3) );
#endif
#endif
w.increments();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/steps_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/steps_screen.cpp
index 3f69e25559d2..a265070ff8e8 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/steps_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/steps_screen.cpp
@@ -33,21 +33,21 @@ using namespace Theme;
void StepsScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
w.precision(0);
- w.units(GET_TEXTF(UNITS_STEP_MM));
- w.heading( GET_TEXTF(STEPS_PER_MM));
- w.color(x_axis) .adjuster( 2, GET_TEXTF(AXIS_X), getAxisSteps_per_mm(X) );
- w.color(y_axis) .adjuster( 4, GET_TEXTF(AXIS_Y), getAxisSteps_per_mm(Y) );
- w.color(z_axis) .adjuster( 6, GET_TEXTF(AXIS_Z), getAxisSteps_per_mm(Z) );
+ w.units(GET_TEXT_F(UNITS_STEP_MM));
+ w.heading( GET_TEXT_F(STEPS_PER_MM));
+ w.color(x_axis) .adjuster( 2, GET_TEXT_F(AXIS_X), getAxisSteps_per_mm(X) );
+ w.color(y_axis) .adjuster( 4, GET_TEXT_F(AXIS_Y), getAxisSteps_per_mm(Y) );
+ w.color(z_axis) .adjuster( 6, GET_TEXT_F(AXIS_Z), getAxisSteps_per_mm(Z) );
#if EXTRUDERS == 1 || DISABLED(DISTINCT_E_FACTORS)
- w.color(e_axis) .adjuster( 8, GET_TEXTF(AXIS_E), getAxisSteps_per_mm(E0) );
+ w.color(e_axis) .adjuster( 8, GET_TEXT_F(AXIS_E), getAxisSteps_per_mm(E0) );
#elif EXTRUDERS > 1
- w.color(e_axis) .adjuster( 8, GET_TEXTF(AXIS_E1), getAxisSteps_per_mm(E0) );
- w.color(e_axis) .adjuster(10, GET_TEXTF(AXIS_E2), getAxisSteps_per_mm(E1) );
+ w.color(e_axis) .adjuster( 8, GET_TEXT_F(AXIS_E1), getAxisSteps_per_mm(E0) );
+ w.color(e_axis) .adjuster(10, GET_TEXT_F(AXIS_E2), getAxisSteps_per_mm(E1) );
#if EXTRUDERS > 2
- w.color(e_axis) .adjuster(12, GET_TEXTF(AXIS_E3), getAxisSteps_per_mm(E2) );
+ w.color(e_axis) .adjuster(12, GET_TEXT_F(AXIS_E3), getAxisSteps_per_mm(E2) );
#endif
#if EXTRUDERS > 3
- w.color(e_axis) .adjuster(14, GET_TEXTF(AXIS_E4), getAxisSteps_per_mm(E3) );
+ w.color(e_axis) .adjuster(14, GET_TEXT_F(AXIS_E4), getAxisSteps_per_mm(E3) );
#endif
#endif
w.increments();
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/temperature_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/temperature_screen.cpp
index aeaecb4096c9..5796b6585b41 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/temperature_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/temperature_screen.cpp
@@ -32,29 +32,29 @@ using namespace ExtUI;
void TemperatureScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
- w.precision(0).color(temp).units(GET_TEXTF(UNITS_C));
- w.heading(GET_TEXTF(TEMPERATURE));
- w.button(30, GET_TEXTF(COOLDOWN));
+ w.precision(0).color(temp).units(GET_TEXT_F(UNITS_C));
+ w.heading(GET_TEXT_F(TEMPERATURE));
+ w.button(30, GET_TEXT_F(COOLDOWN));
#ifndef LULZBOT_DISABLE_TOOLHEAD_HEATER
#if HOTENDS == 1
- w.adjuster( 2, GET_TEXTF(HOTEND), getTargetTemp_celsius(E0));
+ w.adjuster( 2, GET_TEXT_F(HOTEND), getTargetTemp_celsius(E0));
#else
- w.adjuster( 2, GET_TEXTF(HOTEND1), getTargetTemp_celsius(E0));
- w.adjuster( 4, GET_TEXTF(HOTEND2), getTargetTemp_celsius(E1));
+ w.adjuster( 2, GET_TEXT_F(HOTEND1), getTargetTemp_celsius(E0));
+ w.adjuster( 4, GET_TEXT_F(HOTEND2), getTargetTemp_celsius(E1));
#if HOTENDS > 2
- w.adjuster( 6, GET_TEXTF(HOTEND3), getTargetTemp_celsius(E2));
+ w.adjuster( 6, GET_TEXT_F(HOTEND3), getTargetTemp_celsius(E2));
#endif
#if HOTENDS > 3
- w.adjuster( 8, GET_TEXTF(HOTEND4), getTargetTemp_celsius(E3));
+ w.adjuster( 8, GET_TEXT_F(HOTEND4), getTargetTemp_celsius(E3));
#endif
#endif
#endif
#if HAS_HEATED_BED
- w.adjuster( 20, GET_TEXTF(BED), getTargetTemp_celsius(BED));
+ w.adjuster( 20, GET_TEXT_F(BED), getTargetTemp_celsius(BED));
#endif
#if FAN_COUNT > 0
- w.color(fan_speed).units(GET_TEXTF(UNITS_PERCENT));
- w.adjuster( 10, GET_TEXTF(FAN_SPEED), getTargetFan_percent(FAN0));
+ w.color(fan_speed).units(GET_TEXT_F(UNITS_PERCENT));
+ w.adjuster( 10, GET_TEXT_F(FAN_SPEED), getTargetFan_percent(FAN0));
#endif
w.increments();
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/touch_calibration_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/touch_calibration_screen.cpp
index 0779bb6fb2c6..d4e64667b66c 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/touch_calibration_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/touch_calibration_screen.cpp
@@ -45,7 +45,7 @@ void TouchCalibrationScreen::onEntry() {
.cmd(CLEAR_COLOR_RGB(bg_color))
.cmd(CLEAR(true,true,true))
.cmd(COLOR_RGB(bg_text_enabled));
- draw_text_box(cmd, BTN_POS(1,1), BTN_SIZE(4,16), GET_TEXTF(TOUCH_CALIBRATION_START), OPT_CENTER, font_large);
+ draw_text_box(cmd, BTN_POS(1,1), BTN_SIZE(4,16), GET_TEXT_F(TOUCH_CALIBRATION_START), OPT_CENTER, font_large);
cmd.cmd(DL::DL_DISPLAY)
.cmd(CMD_SWAP)
.execute();
@@ -76,7 +76,7 @@ void TouchCalibrationScreen::onRedraw(draw_mode_t) {
.cmd(CLEAR(true,true,true))
.cmd(COLOR_RGB(bg_text_enabled));
- draw_text_box(cmd, BTN_POS(1,1), BTN_SIZE(4,16), GET_TEXTF(TOUCH_CALIBRATION_PROMPT), OPT_CENTER, font_large);
+ draw_text_box(cmd, BTN_POS(1,1), BTN_SIZE(4,16), GET_TEXT_F(TOUCH_CALIBRATION_PROMPT), OPT_CENTER, font_large);
cmd.cmd(CMD_CALIBRATE);
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/tune_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/tune_menu.cpp
index 416a0146fef7..6cb8a27ba05d 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/tune_menu.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/tune_menu.cpp
@@ -33,8 +33,7 @@ void TuneMenu::onRedraw(draw_mode_t what) {
if (what & BACKGROUND) {
CommandProcessor cmd;
cmd.cmd(CLEAR_COLOR_RGB(bg_color))
- .cmd(CLEAR(true,true,true))
- .font(font_medium);
+ .cmd(CLEAR(true,true,true));
}
#ifdef TOUCH_UI_PORTRAIT
@@ -52,79 +51,79 @@ void TuneMenu::onRedraw(draw_mode_t what) {
cmd.colors(normal_btn)
.font(font_medium)
#ifdef TOUCH_UI_PORTRAIT
- .tag(2).enabled(1) .button( BTN_POS(1,1), BTN_SIZE(2,1), GET_TEXTF(TEMPERATURE))
- .tag(3).enabled(!isPrinting()).button( BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(CHANGE_FILAMENT))
+ .tag(2).enabled(1) .button( BTN_POS(1,1), BTN_SIZE(2,1), GET_TEXT_F(TEMPERATURE))
+ .tag(3).enabled(!isPrinting()).button( BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXT_F(CHANGE_FILAMENT))
#if EITHER(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR)
.enabled(1)
#else
.enabled(0)
#endif
- .tag(9).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(FILAMENT))
+ .tag(9).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXT_F(FILAMENT))
#if ENABLED(BABYSTEPPING)
- .tag(4).enabled(1) .button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(NUDGE_NOZZLE))
+ .tag(4).enabled(1) .button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXT_F(NUDGE_NOZZLE))
#else
#if HAS_BED_PROBE
.enabled(1)
#else
.enabled(0)
#endif
- .tag(4) .button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(ZPROBE_ZOFFSET))
+ .tag(4) .button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXT_F(ZPROBE_ZOFFSET))
#endif
- .tag(5).enabled(1) .button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(PRINT_SPEED))
+ .tag(5).enabled(1) .button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXT_F(PRINT_SPEED))
.tag(isPrintingFromMediaPaused() ? 7 : 6)
#if ENABLED(SDSUPPORT)
.enabled(isPrintingFromMedia())
#else
.enabled(0)
#endif
- .button( BTN_POS(1,6), BTN_SIZE(2,1), isPrintingFromMediaPaused() ? GET_TEXTF(RESUME_PRINT) : GET_TEXTF(PAUSE_PRINT))
+ .button( BTN_POS(1,6), BTN_SIZE(2,1), isPrintingFromMediaPaused() ? GET_TEXT_F(RESUME_PRINT) : GET_TEXT_F(PAUSE_PRINT))
#if ENABLED(SDSUPPORT)
.enabled(isPrintingFromMedia())
#else
.enabled(0)
#endif
- .tag(8) .button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(STOP_PRINT))
+ .tag(8) .button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXT_F(STOP_PRINT))
.tag(1).colors(action_btn)
- .button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXTF(BACK));
+ .button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(BACK));
#else // TOUCH_UI_PORTRAIT
- .tag(2).enabled(1) .button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXTF(TEMPERATURE))
- .tag(3).enabled(!isPrinting()).button( BTN_POS(1,2), BTN_SIZE(1,1), GET_TEXTF(CHANGE_FILAMENT))
+ .tag(2).enabled(1) .button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXT_F(TEMPERATURE))
+ .tag(3).enabled(!isPrinting()).button( BTN_POS(1,2), BTN_SIZE(1,1), GET_TEXT_F(CHANGE_FILAMENT))
#if ENABLED(BABYSTEPPING)
.enabled(1)
#else
.enabled(0)
#endif
#if ENABLED(BABYSTEPPING)
- .tag(4) .button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXTF(NUDGE_NOZZLE))
+ .tag(4) .button( BTN_POS(2,1), BTN_SIZE(1,1), GET_TEXT_F(NUDGE_NOZZLE))
#else
#if HAS_BED_PROBE
.enabled(1)
#else
.enabled(0)
#endif
- .tag(4) .button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(ZPROBE_ZOFFSET))
+ .tag(4) .button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXT_F(ZPROBE_ZOFFSET))
#endif
- .tag(5).enabled(1) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXTF(PRINT_SPEED))
+ .tag(5).enabled(1) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXT_F(PRINT_SPEED))
.tag(isPrintingFromMediaPaused() ? 7 : 6)
#if ENABLED(SDSUPPORT)
.enabled(isPrintingFromMedia())
#else
.enabled(0)
#endif
- .button( BTN_POS(1,3), BTN_SIZE(1,1), isPrintingFromMediaPaused() ? GET_TEXTF(RESUME_PRINT) : GET_TEXTF(PAUSE_PRINT))
+ .button( BTN_POS(1,3), BTN_SIZE(1,1), isPrintingFromMediaPaused() ? GET_TEXT_F(RESUME_PRINT) : GET_TEXT_F(PAUSE_PRINT))
#if ENABLED(SDSUPPORT)
.enabled(isPrintingFromMedia())
#else
.enabled(0)
#endif
- .tag(8). button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXTF(STOP_PRINT))
+ .tag(8). button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXT_F(STOP_PRINT))
#if ENABLED(LIN_ADVANCE) || ENABLED(FILAMENT_RUNOUT_SENSOR)
.enabled(1)
#else
.enabled(0)
#endif
- .tag(9).button( BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXTF(FILAMENT))
- .tag(1).colors(action_btn) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(BACK));
+ .tag(9).button( BTN_POS(1,4), BTN_SIZE(1,1), GET_TEXT_F(FILAMENT))
+ .tag(1).colors(action_btn) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXT_F(BACK));
#endif
}
#undef GRID_COLS
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/z_offset_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/z_offset_screen.cpp
index 32a54c09bf1f..acdee1a656d1 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/z_offset_screen.cpp
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/z_offset_screen.cpp
@@ -32,10 +32,10 @@ using namespace Theme;
void ZOffsetScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
- w.precision(2, BaseNumericAdjustmentScreen::DEFAULT_MIDRANGE).units(GET_TEXTF(UNITS_MM));
+ w.precision(2, BaseNumericAdjustmentScreen::DEFAULT_MIDRANGE).units(GET_TEXT_F(UNITS_MM));
- w.heading( GET_TEXTF(ZPROBE_ZOFFSET));
- w.color(z_axis).adjuster(4, GET_TEXTF(ZPROBE_ZOFFSET), getZOffset_mm());
+ w.heading( GET_TEXT_F(ZPROBE_ZOFFSET));
+ w.color(z_axis).adjuster(4, GET_TEXT_F(ZPROBE_ZOFFSET), getZOffset_mm());
w.increments();
}
diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/theme/colors.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/theme/colors.h
index 1dae8de4b2da..055719d99b76 100644
--- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/theme/colors.h
+++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/theme/colors.h
@@ -23,25 +23,52 @@
#pragma once
namespace Theme {
+ #ifdef LULZBOT_USE_BIOPRINTER_UI
+ // The Lulzbot Bio uses the color PANTONE 2175C on the case silkscreen.
+ // This translates to HSL(208°, 100%, 39%) as an accent color on the GUI.
- #define COLOR_CORRECTION(rgb) ( \
- (uint32_t((((rgb) & 0xFF0000) >> 16) * 1.00) << 16) | \
- (uint32_t((((rgb) & 0x00FF00) >> 8) * 1.00) << 8) | \
- (uint32_t((((rgb) & 0x0000FF) >> 0) * .75) << 0))
+ constexpr int accent_hue = 208;
+ constexpr float accent_sat = 0.5;
- #define COLOR_BLEND(a,b,f) COLOR_CORRECTION( \
- (uint32_t((((a) & 0xFF0000) >> 16) * f + (((b) & 0xFF0000) >> 16) * (1-f)) << 16) | \
- (uint32_t((((a) & 0x00FF00) >> 8) * f + (((b) & 0x00FF00) >> 8) * (1-f)) << 8) | \
- (uint32_t((((a) & 0x0000FF) >> 0) * f + (((b) & 0x0000FF) >> 0) * (1-f)) << 0))
+ constexpr uint32_t logo_bg = 0xffffff;
+ constexpr uint32_t logo_fg = 0xffffff;
+ constexpr uint32_t logo_stroke = hsl_to_rgb(accent_hue, 1.0, 0.39);
+ #else
+ // The Lulzbot logo uses the color PANTONE 382c.
+ // This translates to HSL(68°, 68%, 52%) as an accent color on the GUI.
+
+ constexpr int accent_hue = 68;
+ constexpr float accent_sat = 0.68;
+
+ constexpr uint32_t logo_bg = hsl_to_rgb(accent_hue, 0.77, 0.64);
+ constexpr uint32_t logo_fg = hsl_to_rgb(accent_hue, 0.68, 0.52); // Lulzbot Green
+ constexpr uint32_t logo_stroke = 0x000000;
+ #endif
+
+ // Shades of accent color
- constexpr uint32_t lulzbot_bg = 0xDEEA5C;
- constexpr uint32_t lulzbot_fg = 0xC1D82F;
+ constexpr uint32_t accent_color_1 = hsl_to_rgb(accent_hue, accent_sat, 0.26); // Darkest
+ constexpr uint32_t accent_color_2 = hsl_to_rgb(accent_hue, accent_sat, 0.39);
+ constexpr uint32_t accent_color_3 = hsl_to_rgb(accent_hue, accent_sat, 0.52);
+ constexpr uint32_t accent_color_4 = hsl_to_rgb(accent_hue, accent_sat, 0.65);
+ constexpr uint32_t accent_color_5 = hsl_to_rgb(accent_hue, accent_sat, 0.78);
+ constexpr uint32_t accent_color_6 = hsl_to_rgb(accent_hue, accent_sat, 0.91); // Lightest
- constexpr uint32_t lulzbot_green = COLOR_BLEND(0xC1DB2F,0x788814,0.33);
+ // Shades of gray
+
+ constexpr float gray_sat = 0.14;
+
+ constexpr uint32_t gray_color_1 = hsl_to_rgb(accent_hue, gray_sat, 0.26); // Darkest
+ constexpr uint32_t gray_color_2 = hsl_to_rgb(accent_hue, gray_sat, 0.39);
+ constexpr uint32_t gray_color_3 = hsl_to_rgb(accent_hue, gray_sat, 0.52);
+ constexpr uint32_t gray_color_4 = hsl_to_rgb(accent_hue, gray_sat, 0.65);
+ constexpr uint32_t gray_color_5 = hsl_to_rgb(accent_hue, gray_sat, 0.78);
+ constexpr uint32_t gray_color_6 = hsl_to_rgb(accent_hue, gray_sat, 0.91); // Lightest
#ifndef LULZBOT_USE_BIOPRINTER_UI
- constexpr uint32_t theme_darkest = COLOR_CORRECTION(0x444444);
- constexpr uint32_t theme_dark = COLOR_CORRECTION(0x777777);
+ // Lulzbot TAZ Pro
+ constexpr uint32_t theme_darkest = gray_color_1;
+ constexpr uint32_t theme_dark = gray_color_2;
constexpr uint32_t bg_color = theme_darkest;
constexpr uint32_t bg_text_disabled = theme_dark;
@@ -49,64 +76,59 @@ namespace Theme {
constexpr uint32_t bg_normal = theme_darkest;
constexpr uint32_t fg_normal = theme_dark;
- constexpr uint32_t fg_action = lulzbot_green;
- constexpr uint32_t fg_disabled = bg_color;
+ constexpr uint32_t fg_action = accent_color_2;
+ constexpr uint32_t fg_disabled = theme_darkest;
#else
- constexpr uint32_t theme_darkest = 0x545923;
- constexpr uint32_t theme_dark = lulzbot_bg;
+ // Lulzbot Bio
+ constexpr uint32_t theme_darkest = accent_color_1;
+ constexpr uint32_t theme_dark = accent_color_4;
constexpr uint32_t bg_color = 0xFFFFFF;
- constexpr uint32_t bg_text_disabled = 0x333333;
- constexpr uint32_t bg_text_enabled = theme_darkest;
- constexpr uint32_t bg_normal = theme_dark;
-
- constexpr uint32_t fg_normal = theme_darkest;
- constexpr uint32_t fg_action = theme_dark;
- constexpr uint32_t fg_disabled = 0xEFEFEF;
-
- constexpr uint32_t shadow_rgb = 0xE0E0E0;
- constexpr uint32_t fill_rgb = lulzbot_fg;
- constexpr uint32_t stroke_rgb = theme_darkest;
- constexpr uint32_t syringe_rgb = 0xF1F6C0;
+ constexpr uint32_t bg_text_disabled = gray_color_1;
+ constexpr uint32_t bg_text_enabled = accent_color_1;
+ constexpr uint32_t bg_normal = accent_color_4;
+
+ constexpr uint32_t fg_normal = accent_color_1;
+ constexpr uint32_t fg_action = accent_color_4;
+ constexpr uint32_t fg_disabled = gray_color_6;
+
+ constexpr uint32_t shadow_rgb = gray_color_6;
+ constexpr uint32_t stroke_rgb = accent_color_1;
+ constexpr uint32_t fill_rgb = accent_color_3;
+ constexpr uint32_t syringe_rgb = accent_color_5;
#endif
- constexpr uint32_t x_axis = COLOR_CORRECTION(0xFF0000);
- constexpr uint32_t y_axis = COLOR_CORRECTION(0x00BB00);
- constexpr uint32_t z_axis = COLOR_CORRECTION(0x0000FF);
- #ifndef LULZBOT_USE_BIOPRINTER_UI
- constexpr uint32_t e_axis = COLOR_CORRECTION(0x777777);
- constexpr uint32_t feedrate = COLOR_CORRECTION(0x777777);
- constexpr uint32_t other = COLOR_CORRECTION(0x777777);
- #else
- constexpr uint32_t e_axis = 0x000000;
- constexpr uint32_t feedrate = 0x000000;
- constexpr uint32_t other = 0x000000;
- #endif
+ constexpr uint32_t x_axis = 0xFF0000;
+ constexpr uint32_t y_axis = 0x00BB00;
+ constexpr uint32_t z_axis = 0x0000BF;
+ constexpr uint32_t e_axis = gray_color_2;
+ constexpr uint32_t feedrate = gray_color_2;
+ constexpr uint32_t other = gray_color_2;
// Status screen
- constexpr uint32_t progress = theme_dark;
- constexpr uint32_t status_msg = theme_dark;
- constexpr uint32_t fan_speed = COLOR_CORRECTION(0x3771CB);
- constexpr uint32_t temp = COLOR_CORRECTION(0x892ca0);
- constexpr uint32_t axis_label = theme_dark;
+ constexpr uint32_t progress = gray_color_2;
+ constexpr uint32_t status_msg = gray_color_2;
+ constexpr uint32_t fan_speed = 0x377198;
+ constexpr uint32_t temp = 0x892c78;
+ constexpr uint32_t axis_label = gray_color_2;
- constexpr uint32_t disabled_icon = 0x101010;
+ constexpr uint32_t disabled_icon = gray_color_1;
// Calibration Registers Screen
- constexpr uint32_t transformA = 0x3010D0;
- constexpr uint32_t transformB = 0x4010D0;
- constexpr uint32_t transformC = 0x5010D0;
- constexpr uint32_t transformD = 0x6010D0;
- constexpr uint32_t transformE = 0x7010D0;
- constexpr uint32_t transformF = 0x8010D0;
- constexpr uint32_t transformVal = 0x104010;
-
- constexpr btn_colors disabled_btn = {.bg = bg_color, .grad = fg_disabled, .fg = fg_disabled, .rgb = fg_disabled };
- constexpr btn_colors normal_btn = {.bg = fg_action, .grad = 0xFFFFFF, .fg = fg_normal, .rgb = 0xFFFFFF };
- constexpr btn_colors action_btn = {.bg = bg_color, .grad = 0xFFFFFF, .fg = fg_action, .rgb = 0xFFFFFF };
- constexpr btn_colors red_btn = {.bg = 0xFF5555, .grad = 0xFFFFFF, .fg = 0xFF0000, .rgb = 0xFFFFFF };
- constexpr btn_colors ui_slider = {.bg = theme_darkest, .grad = 0xFFFFFF, .fg = theme_dark, .rgb = lulzbot_green };
- constexpr btn_colors ui_toggle = {.bg = theme_darkest, .grad = 0xFFFFFF, .fg = theme_dark, .rgb = 0xFFFFFF };
+ constexpr uint32_t transformA = 0x3010D0;
+ constexpr uint32_t transformB = 0x4010D0;
+ constexpr uint32_t transformC = 0x5010D0;
+ constexpr uint32_t transformD = 0x6010D0;
+ constexpr uint32_t transformE = 0x7010D0;
+ constexpr uint32_t transformF = 0x8010D0;
+ constexpr uint32_t transformVal = 0x104010;
+
+ constexpr btn_colors disabled_btn = {.bg = bg_color, .grad = fg_disabled, .fg = fg_disabled, .rgb = fg_disabled };
+ constexpr btn_colors normal_btn = {.bg = fg_action, .grad = 0xFFFFFF, .fg = fg_normal, .rgb = 0xFFFFFF };
+ constexpr btn_colors action_btn = {.bg = bg_color, .grad = 0xFFFFFF, .fg = fg_action, .rgb = 0xFFFFFF };
+ constexpr btn_colors red_btn = {.bg = 0xFF5555, .grad = 0xFFFFFF, .fg = 0xFF0000, .rgb = 0xFFFFFF };
+ constexpr btn_colors ui_slider = {.bg = theme_darkest, .grad = 0xFFFFFF, .fg = theme_dark, .rgb = accent_color_3 };
+ constexpr btn_colors ui_toggle = {.bg = theme_darkest, .grad = 0xFFFFFF, .fg = theme_dark, .rgb = 0xFFFFFF };
// Temperature color scale
diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp
index 1c6c1e0618d9..83190438fd3a 100644
--- a/Marlin/src/lcd/extensible_ui/ui_api.cpp
+++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp
@@ -577,12 +577,11 @@ namespace ExtUI {
}
void setAxisMaxFeedrate_mm_s(const feedRate_t value, const axis_t axis) {
- planner.settings.max_feedrate_mm_s[axis] = value;
+ planner.set_max_feedrate(axis, value);
}
void setAxisMaxFeedrate_mm_s(const feedRate_t value, const extruder_t extruder) {
- UNUSED_E(extruder);
- planner.settings.max_feedrate_mm_s[E_AXIS_N(axis - E0)] = value;
+ planner.set_max_feedrate(E_AXIS_N(extruder - E0), value);
}
float getAxisMaxAcceleration_mm_s2(const axis_t axis) {
@@ -595,12 +594,11 @@ namespace ExtUI {
}
void setAxisMaxAcceleration_mm_s2(const float value, const axis_t axis) {
- planner.settings.max_acceleration_mm_per_s2[axis] = value;
+ planner.set_max_acceleration(axis, value);
}
void setAxisMaxAcceleration_mm_s2(const float value, const extruder_t extruder) {
- UNUSED_E(extruder);
- planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(extruder - E0)] = value;
+ planner.set_max_acceleration(E_AXIS_N(extruder - E0), value);
}
#if HAS_FILAMENT_SENSOR
@@ -624,7 +622,7 @@ namespace ExtUI {
}
#endif
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
float getJunctionDeviation_mm() {
return planner.junction_deviation_mm;
@@ -648,11 +646,11 @@ namespace ExtUI {
}
void setAxisMaxJerk_mm_s(const float value, const axis_t axis) {
- planner.max_jerk[axis] = value;
+ planner.set_max_jerk((AxisEnum)axis, value);
}
void setAxisMaxJerk_mm_s(const float value, const extruder_t) {
- planner.max_jerk.e = value;
+ planner.set_max_jerk(E_AXIS, value);
}
#endif
@@ -798,7 +796,7 @@ namespace ExtUI {
#endif
uint8_t getProgress_percent() {
- return ui.get_progress();
+ return ui.get_progress_percent();
}
uint32_t getProgress_seconds_elapsed() {
@@ -821,9 +819,6 @@ namespace ExtUI {
#endif
}
}
- void onMeshUpdate(const uint8_t xpos, const uint8_t ypos, const float zval) {
- UNUSED(xpos); UNUSED(ypos); UNUSED(zval);
- }
#endif
#endif
@@ -944,6 +939,12 @@ namespace ExtUI {
ui.abort_print();
}
+ void onUserConfirmRequired_P(PGM_P const pstr) {
+ char msg[strlen_P(pstr) + 1];
+ strcpy_P(msg, pstr);
+ onUserConfirmRequired(msg);
+ }
+
FileList::FileList() { refresh(); }
void FileList::refresh() { num_files = 0xFFFF; }
@@ -1041,11 +1042,11 @@ void MarlinUI::update() {
ExtUI::onIdle();
}
-void MarlinUI::kill_screen(PGM_P const msg) {
+void MarlinUI::kill_screen(PGM_P const error, PGM_P const component) {
using namespace ExtUI;
if (!flags.printer_killed) {
flags.printer_killed = true;
- onPrinterKilled(msg);
+ onPrinterKilled(error, component);
}
}
diff --git a/Marlin/src/lcd/extensible_ui/ui_api.h b/Marlin/src/lcd/extensible_ui/ui_api.h
index 1ae2ebd4c113..d9291839497f 100644
--- a/Marlin/src/lcd/extensible_ui/ui_api.h
+++ b/Marlin/src/lcd/extensible_ui/ui_api.h
@@ -138,7 +138,7 @@ namespace ExtUI {
float getMeshPoint(const xy_uint8_t &pos);
void setMeshPoint(const xy_uint8_t &pos, const float zval);
void onMeshUpdate(const uint8_t xpos, const uint8_t ypos, const float zval);
- inline void onMeshUpdate(const xy_uint8_t &pos, const float zval) { setMeshPoint(pos, zval); }
+ inline void onMeshUpdate(const xy_uint8_t &pos, const float zval) { onMeshUpdate(pos.x, pos.y, zval); }
#endif
#endif
@@ -179,7 +179,7 @@ namespace ExtUI {
void setLinearAdvance_mm_mm_s(const float, const extruder_t);
#endif
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
float getJunctionDeviation_mm();
void setJunctionDeviation_mm(const float);
#else
@@ -293,12 +293,13 @@ namespace ExtUI {
void onMediaError();
void onMediaRemoved();
void onPlayTone(const uint16_t frequency, const uint16_t duration);
- void onPrinterKilled(PGM_P const msg);
+ void onPrinterKilled(PGM_P const error, PGM_P const component);
void onPrintTimerStarted();
void onPrintTimerPaused();
void onPrintTimerStopped();
void onFilamentRunout(const extruder_t extruder);
void onUserConfirmRequired(const char * const msg);
+ void onUserConfirmRequired_P(PGM_P const pstr);
void onStatusChanged(const char * const msg);
void onFactoryReset();
void onStoreSettings(char *);
diff --git a/Marlin/src/lcd/extui_dgus_lcd.cpp b/Marlin/src/lcd/extui_dgus_lcd.cpp
index 484a333095bf..e57355bcd0e9 100644
--- a/Marlin/src/lcd/extui_dgus_lcd.cpp
+++ b/Marlin/src/lcd/extui_dgus_lcd.cpp
@@ -43,8 +43,8 @@ namespace ExtUI {
void onIdle() { ScreenHandler.loop(); }
- void onPrinterKilled(const char* msg) {
- ScreenHandler.sendinfoscreen(PSTR(MSG_HALTED), msg, PSTR(""), PSTR(MSG_PLEASE_RESET), true, true, true, true);
+ void onPrinterKilled(PGM_P error, PGM_P component) {
+ ScreenHandler.sendinfoscreen(GET_TEXT(MSG_HALTED), error, PSTR(""), GET_TEXT(MSG_PLEASE_RESET), true, true, true, true);
ScreenHandler.GotoScreen(DGUSLCD_SCREEN_KILL);
while (!ScreenHandler.loop()); // Wait while anything is left to be sent
}
@@ -59,7 +59,7 @@ namespace ExtUI {
void onPrintTimerStopped() {}
void onFilamentRunout(const extruder_t extruder) {}
- void onUserConfirmRequired(const char *msg) {
+ void onUserConfirmRequired(const char * const msg) {
if (msg) {
ScreenHandler.sendinfoscreen(PSTR("Please confirm."), nullptr, msg, nullptr, true, true, false, true);
ScreenHandler.SetupConfirmAction(ExtUI::setUserConfirmed);
diff --git a/Marlin/src/lcd/extui_example.cpp b/Marlin/src/lcd/extui_example.cpp
index 4fec2745a9cf..9bdc0ddfe95e 100644
--- a/Marlin/src/lcd/extui_example.cpp
+++ b/Marlin/src/lcd/extui_example.cpp
@@ -46,7 +46,7 @@ namespace ExtUI {
*/
}
void onIdle() {}
- void onPrinterKilled(PGM_P const msg) {}
+ void onPrinterKilled(PGM_P const error, PGM_P const component) {}
void onMediaInserted() {};
void onMediaError() {};
void onMediaRemoved() {};
@@ -88,6 +88,10 @@ namespace ExtUI {
// This is called after the entire EEPROM has been read,
// whether successful or not.
}
+
+ void onMeshUpdate(const uint8_t xpos, const uint8_t ypos, const float zval) {
+ // This is called when any mesh points are updated
+ }
}
#endif // EXTUI_EXAMPLE && EXTENSIBLE_UI
diff --git a/Marlin/src/lcd/extui_malyan_lcd.cpp b/Marlin/src/lcd/extui_malyan_lcd.cpp
index 8be34a3ccaa1..0376ee8333a5 100644
--- a/Marlin/src/lcd/extui_malyan_lcd.cpp
+++ b/Marlin/src/lcd/extui_malyan_lcd.cpp
@@ -50,6 +50,7 @@
#include "extensible_ui/ui_api.h"
#include "ultralcd.h"
+#include "../sd/cardreader.h"
#include "../module/temperature.h"
#include "../module/stepper.h"
#include "../module/motion.h"
@@ -57,13 +58,6 @@
#include "../module/printcounter.h"
#include "../gcode/queue.h"
-#if ENABLED(SDSUPPORT)
- #include "../sd/cardreader.h"
- #include "../sd/SdFatConfig.h"
-#else
- #define LONG_FILENAME_LENGTH 0
-#endif
-
#define DEBUG_OUT ENABLED(DEBUG_MALYAN_LCD)
#include "../core/debug_out.h"
@@ -117,17 +111,27 @@ void write_to_lcd(const char * const message) {
* the command portion begins after the :
*/
void process_lcd_c_command(const char* command) {
+ const int target_val = command[1] ? atoi(command + 1) : -1;
+ if (target_val < 0) {
+ DEBUG_ECHOLNPAIR("UNKNOWN C COMMAND ", command);
+ return;
+ }
switch (command[0]) {
case 'C': // Cope with both V1 early rev and later LCDs.
case 'S':
- feedrate_percentage = atoi(command + 1) * 10;
+ feedrate_percentage = target_val * 10;
LIMIT(feedrate_percentage, 10, 999);
break;
- case 'T': ExtUI::setTargetTemp_celsius(atoi(command + 1), ExtUI::extruder_t::E0); break;
+ case 'T':
+ // Sometimes the LCD will send commands to turn off both extruder and bed, though
+ // this should not happen since the printing screen is up. Better safe than sorry.
+ if (!print_job_timer.isRunning() || target_val > 0)
+ ExtUI::setTargetTemp_celsius(target_val, ExtUI::extruder_t::E0);
+ break;
#if HAS_HEATED_BED
- case 'P': ExtUI::setTargetTemp_celsius(atoi(command + 1), ExtUI::heater_t::BED); break;
+ case 'P': ExtUI::setTargetTemp_celsius(target_val, ExtUI::heater_t::BED); break;
#endif
default: DEBUG_ECHOLNPAIR("UNKNOWN C COMMAND ", command);
@@ -143,6 +147,7 @@ void process_lcd_c_command(const char* command) {
*/
void process_lcd_eb_command(const char* command) {
char elapsed_buffer[10];
+ static uint8_t iteration = 0;
duration_t elapsed;
switch (command[0]) {
case '0': {
@@ -150,6 +155,13 @@ void process_lcd_eb_command(const char* command) {
sprintf_P(elapsed_buffer, PSTR("%02u%02u%02u"), uint16_t(elapsed.hour()), uint16_t(elapsed.minute()) % 60, uint16_t(elapsed.second()) % 60);
char message_buffer[MAX_CURLY_COMMAND];
+ uint8_t done_pct = print_job_timer.isRunning() ? (iteration * 10) : 100;
+ iteration = (iteration + 1) % 10; // Provide progress animation
+ #if ENABLED(SDSUPPORT)
+ if (ExtUI::isPrintingFromMedia() || ExtUI::isPrintingFromMediaPaused())
+ done_pct = card.percentDone();
+ #endif
+
sprintf_P(message_buffer,
PSTR("{T0:%03i/%03i}{T1:000/000}{TP:%03i/%03i}{TQ:%03i}{TT:%s}"),
int(thermalManager.degHotend(0)), thermalManager.degTargetHotend(0),
@@ -159,7 +171,7 @@ void process_lcd_eb_command(const char* command) {
0, 0,
#endif
#if ENABLED(SDSUPPORT)
- card.percentDone(),
+ done_pct,
#else
0,
#endif
@@ -186,7 +198,7 @@ void process_lcd_j_command(const char* command) {
auto move_axis = [command](const auto axis) {
const float dist = atof(command + 1) / 10.0;
ExtUI::setAxisPosition_mm(ExtUI::getAxisPosition_mm(axis) + dist, axis);
- }
+ };
switch (command[0]) {
case 'E': break;
@@ -330,7 +342,6 @@ void process_lcd_s_command(const char* command) {
void process_lcd_command(const char* command) {
const char *current = command;
- current++; // skip the leading {. The trailing one is already gone.
byte command_code = *current++;
if (*current == ':') {
@@ -350,6 +361,31 @@ void process_lcd_command(const char* command) {
DEBUG_ECHOLNPAIR("UNKNOWN COMMAND FORMAT ", command);
}
+// Parse LCD commands mixed with G-Code
+void parse_lcd_byte(byte b) {
+ static bool parsing_lcd_cmd = false;
+ static char inbound_buffer[MAX_CURLY_COMMAND];
+
+ if (!parsing_lcd_cmd) {
+ if (b == '{' || b == '\n' || b == '\r') { // A line-ending or opening brace
+ parsing_lcd_cmd = b == '{'; // Brace opens an LCD command
+ if (inbound_count) { // Looks like a G-code is in the buffer
+ inbound_buffer[inbound_count] = '\0'; // Reset before processing
+ inbound_count = 0;
+ queue.enqueue_one_now(inbound_buffer); // Handle the G-code command
+ }
+ }
+ }
+ else if (b == '}') { // Closing brace on an LCD command
+ parsing_lcd_cmd = false; // Unflag and...
+ inbound_buffer[inbound_count] = '\0'; // reset before processing
+ inbound_count = 0;
+ process_lcd_command(inbound_buffer); // Handle the LCD command
+ }
+ else if (inbound_count < MAX_CURLY_COMMAND - 2)
+ inbound_buffer[inbound_count++] = b; // Buffer only if space remains
+}
+
/**
* UC means connected.
* UD means disconnected
@@ -360,8 +396,8 @@ void update_usb_status(const bool forceUpdate) {
// This is mildly different than stock, which
// appears to use the usb discovery status.
// This is more logical.
- if (last_usb_connected_status != Serial || forceUpdate) {
- last_usb_connected_status = Serial;
+ if (last_usb_connected_status != SerialUSB || forceUpdate) {
+ last_usb_connected_status = SerialUSB;
write_to_lcd_P(last_usb_connected_status ? PSTR("{R:UC}\r\n") : PSTR("{R:UD}\r\n"));
}
}
@@ -391,24 +427,14 @@ namespace ExtUI {
/**
* - from printer on startup:
* {SYS:STARTED}{VER:29}{SYS:STARTED}{R:UD}
- * The optimize attribute fixes a register Compile
- * error for amtel.
*/
- static char inbound_buffer[MAX_CURLY_COMMAND];
// First report USB status.
update_usb_status(false);
// now drain commands...
while (LCD_SERIAL.available()) {
- const byte b = (byte)LCD_SERIAL.read() & 0x7F;
- inbound_buffer[inbound_count++] = b;
- if (b == '}' || inbound_count == sizeof(inbound_buffer) - 1) {
- inbound_buffer[inbound_count - 1] = '\0';
- process_lcd_command(inbound_buffer);
- inbound_count = 0;
- inbound_buffer[0] = 0;
- }
+ parse_lcd_byte((byte)LCD_SERIAL.read() & 0x7F);
}
#if ENABLED(SDSUPPORT)
@@ -432,28 +458,31 @@ namespace ExtUI {
}
// {E:} is for error states.
- void onPrinterKilled(PGM_P msg) {
+ void onPrinterKilled(PGM_P error, PGM_P component) {
write_to_lcd_P(PSTR("{E:"));
- write_to_lcd_P(msg);
+ write_to_lcd_P(error);
+ write_to_lcd_P(PSTR(" "));
+ write_to_lcd_P(component);
write_to_lcd_P("}");
}
+ void onPrintTimerStarted() { write_to_lcd_P(PSTR("{SYS:BUILD}")); }
+ void onPrintTimerPaused() {}
+ void onPrintTimerStopped() { write_to_lcd_P(PSTR("{TQ:100}")); }
+
// Not needed for Malyan LCD
- void onStatusChanged(const char * const msg) { UNUSED(msg); }
+ void onStatusChanged(const char * const) {}
void onMediaInserted() {};
void onMediaError() {};
void onMediaRemoved() {};
- void onPlayTone(const uint16_t frequency, const uint16_t duration) { UNUSED(frequency); UNUSED(duration); }
- void onPrintTimerStarted() {}
- void onPrintTimerPaused() {}
- void onPrintTimerStopped() {}
+ void onPlayTone(const uint16_t, const uint16_t) {}
void onFilamentRunout(const extruder_t extruder) {}
- void onUserConfirmRequired(const char * const msg) { UNUSED(msg); }
+ void onUserConfirmRequired(const char * const) {}
void onFactoryReset() {}
- void onStoreSettings(char *buff) { UNUSED(buff); }
- void onLoadSettings(const char *buff) { UNUSED(buff); }
- void onConfigurationStoreWritten(bool success) { UNUSED(success); }
- void onConfigurationStoreRead(bool success) { UNUSED(success); }
+ void onStoreSettings(char*) {}
+ void onLoadSettings(const char*) {}
+ void onConfigurationStoreWritten(bool) {}
+ void onConfigurationStoreRead(bool) {}
}
#endif // MALYAN_LCD
diff --git a/Marlin/src/lcd/language/language_an.h b/Marlin/src/lcd/language/language_an.h
index f3c4372ba70b..45d19e85c1cc 100644
--- a/Marlin/src/lcd/language/language_an.h
+++ b/Marlin/src/lcd/language/language_an.h
@@ -32,225 +32,263 @@
#define DISPLAY_CHARSET_ISO10646_1
#define NOT_EXTENDED_ISO10646_1_5X7
-#define WELCOME_MSG MACHINE_NAME _UxGT(" parada.")
-#define MSG_MEDIA_INSERTED _UxGT("Tarcheta mesa")
-#define MSG_MEDIA_REMOVED _UxGT("Tarcheta sacada")
-#define MSG_LCD_ENDSTOPS _UxGT("Endstops") // Max length 8 characters
-#define MSG_MAIN _UxGT("Menu prencipal")
-#define MSG_AUTOSTART _UxGT("Inicio automatico")
-#define MSG_DISABLE_STEPPERS _UxGT("Amortar motors")
-#define MSG_AUTO_HOME _UxGT("Levar a l'orichen")
-#define MSG_AUTO_HOME_X _UxGT("Orichen X")
-#define MSG_AUTO_HOME_Y _UxGT("Orichen Y")
-#define MSG_AUTO_HOME_Z _UxGT("Orichen Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Orichen XYZ")
-#define MSG_LEVEL_BED_WAITING _UxGT("Encetar (pretar)")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Vinient punto")
-#define MSG_LEVEL_BED_DONE _UxGT("Nivelacion feita!")
-#define MSG_SET_HOME_OFFSETS _UxGT("Achustar desfases")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Desfase aplicau")
-#define MSG_SET_ORIGIN _UxGT("Establir orichen")
-#define MSG_PREHEAT_1 _UxGT("Precalentar " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" Tot")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" Base")
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" Conf")
-#define MSG_PREHEAT_2 _UxGT("Precalentar " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" Tot")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" Base")
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" Conf")
-#define MSG_COOLDOWN _UxGT("Enfriar")
-#define MSG_SWITCH_PS_ON _UxGT("Enchegar Fuent")
-#define MSG_SWITCH_PS_OFF _UxGT("Amortar Fuent")
-#define MSG_EXTRUDE _UxGT("Extruir")
-#define MSG_RETRACT _UxGT("Retraer")
-#define MSG_MOVE_AXIS _UxGT("Mover Eixes")
-#define MSG_BED_LEVELING _UxGT("Nivelar base")
-#define MSG_LEVEL_BED _UxGT("Nivelar base")
-#define MSG_MOVE_X _UxGT("Mover X")
-#define MSG_MOVE_Y _UxGT("Mover Y")
-#define MSG_MOVE_Z _UxGT("Mover Z")
-#define MSG_MOVE_E _UxGT("Extrusor")
-#define MSG_MOVE_Z_DIST _UxGT("Mover %smm")
-#define MSG_MOVE_01MM _UxGT("Mover 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Mover 1mm")
-#define MSG_MOVE_10MM _UxGT("Mover 10mm")
-#define MSG_SPEED _UxGT("Velocidat")
-#define MSG_BED_Z _UxGT("Base Z")
-#define MSG_NOZZLE _UxGT("Boquilla")
-#define MSG_BED _UxGT("Base")
-#define MSG_FAN_SPEED _UxGT("Ixoriador")
-#define MSG_FLOW _UxGT("Fluxo")
-#define MSG_CONTROL _UxGT("Control")
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP _UxGT("Temperatura Auto.")
-#define MSG_LCD_ON _UxGT("On")
-#define MSG_LCD_OFF _UxGT("Off")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Trigar")
-#define MSG_ACC _UxGT("Aceleracion")
-#define MSG_JERK _UxGT("Jerk")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va-jerk")
- #define MSG_VB_JERK _UxGT("Vb-jerk")
- #define MSG_VC_JERK _UxGT("Vc-jerk")
-#else
- #define MSG_VA_JERK _UxGT("Vx-jerk")
- #define MSG_VB_JERK _UxGT("Vy-jerk")
- #define MSG_VC_JERK _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK _UxGT("Ve-jerk")
-#define MSG_VMAX _UxGT("Vmax")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("Vel. viache min")
-#define MSG_ACCELERATION MSG_ACC
-#define MSG_AMAX _UxGT("Acel. max")
-#define MSG_A_RETRACT _UxGT("Acel. retrac.")
-#define MSG_A_TRAVEL _UxGT("Acel. Viaje")
-#define MSG_STEPS_PER_MM _UxGT("Trangos/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("A trangos/mm")
- #define MSG_BSTEPS _UxGT("B trangos/mm")
- #define MSG_CSTEPS _UxGT("C trangos/mm")
-#else
- #define MSG_ASTEPS _UxGT("X trangos/mm")
- #define MSG_BSTEPS _UxGT("Y trangos/mm")
- #define MSG_CSTEPS _UxGT("Z trangos/mm")
-#endif
-#define MSG_ESTEPS _UxGT("E trangos/mm")
-#define MSG_E1STEPS _UxGT("E1 trangos/mm")
-#define MSG_E2STEPS _UxGT("E2 trangos/mm")
-#define MSG_E3STEPS _UxGT("E3 trangos/mm")
-#define MSG_E4STEPS _UxGT("E4 trangos/mm")
-#define MSG_E5STEPS _UxGT("E5 trangos/mm")
-#define MSG_E6STEPS _UxGT("E6 trangos/mm")
-#define MSG_TEMPERATURE _UxGT("Temperatura")
-#define MSG_MOTION _UxGT("Movimiento")
-#define MSG_FILAMENT _UxGT("Filamento")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E in mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Fil. Dia.")
-#define MSG_CONTRAST _UxGT("Contraste")
-#define MSG_STORE_EEPROM _UxGT("Alzar memoria")
-#define MSG_LOAD_EEPROM _UxGT("Cargar memoria")
-#define MSG_RESTORE_FAILSAFE _UxGT("Restaurar memoria")
-#define MSG_REFRESH _UxGT("Tornar a cargar")
-#define MSG_WATCH _UxGT("Informacion")
-#define MSG_PREPARE _UxGT("Preparar")
-#define MSG_TUNE _UxGT("Achustar")
-#define MSG_PAUSE_PRINT _UxGT("Pausar impresion")
-#define MSG_RESUME_PRINT _UxGT("Contin. impresion")
-#define MSG_STOP_PRINT _UxGT("Detener Impresion")
-#define MSG_MEDIA_MENU _UxGT("Menu de SD")
-#define MSG_NO_MEDIA _UxGT("No i hai tarcheta")
-#define MSG_DWELL _UxGT("Reposo...")
-#define MSG_USERWAIT _UxGT("Aguardand ordines")
-#define MSG_PRINT_ABORTED _UxGT("Impres. cancelada")
-#define MSG_NO_MOVE _UxGT("Sin movimiento")
-#define MSG_KILLED _UxGT("Aturada d'emerch.")
-#define MSG_STOPPED _UxGT("Aturada.")
-#define MSG_CONTROL_RETRACT _UxGT("Retraer mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Swap Retraer mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Retraer F")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Devantar mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("DesRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Swap DesRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("DesRet F")
-#define MSG_AUTORETRACT _UxGT("Retraccion auto.")
-#define MSG_FILAMENTCHANGE _UxGT("Cambear filamento")
-#define MSG_INIT_MEDIA _UxGT("Encetan. tarcheta")
-#define MSG_CHANGE_MEDIA _UxGT("Cambiar tarcheta")
-#define MSG_ZPROBE_OUT _UxGT("Sonda Z fuera")
-#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Auto-Test")
-#define MSG_BLTOUCH_RESET _UxGT("Reset BLTouch")
-#define MSG_HOME_FIRST _UxGT("Home %s%s%s first")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Desfase Z")
-#define MSG_BABYSTEP_X _UxGT("Micropaso X")
-#define MSG_BABYSTEP_Y _UxGT("Micropaso Y")
-#define MSG_BABYSTEP_Z _UxGT("Micropaso Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Cancelado - Endstop")
-#define MSG_HEATING_FAILED_LCD _UxGT("Error: en calentar")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Error: temperatura")
-#define MSG_THERMAL_RUNAWAY _UxGT("Error de temperatura")
-#define MSG_ERR_MAXTEMP _UxGT("Error: Temp Maxima")
-#define MSG_ERR_MINTEMP _UxGT("Error: Temp Menima")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Error: Temp Max base")
-#define MSG_ERR_MINTEMP_BED _UxGT("Error: Temp Min base")
-#define MSG_ERR_Z_HOMING _UxGT("Home XY first")
-#define MSG_HALTED _UxGT("IMPRESORA ATURADA")
-#define MSG_PLEASE_RESET _UxGT("Per favor reinic.")
-#define MSG_SHORT_DAY _UxGT("d")
-#define MSG_SHORT_HOUR _UxGT("h")
-#define MSG_SHORT_MINUTE _UxGT("m")
-#define MSG_HEATING _UxGT("Calentando...")
-#define MSG_BED_HEATING _UxGT("Calentando base...")
-#define MSG_DELTA_CALIBRATE _UxGT("Calibracion Delta")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Calibrar X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Calibrar Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Calibrar Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Calibrar Centro")
+namespace Language_an {
+ using namespace Language_en; // Inherit undefined strings from English
-#define MSG_INFO_MENU _UxGT("Inf. Impresora")
-#define MSG_INFO_PRINTER_MENU _UxGT("Inf. Impresora")
-#define MSG_INFO_STATS_MENU _UxGT("Estadisticas Imp.")
-#define MSG_INFO_BOARD_MENU _UxGT("Inf. Controlador")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Termistors")
-#define MSG_INFO_EXTRUDERS _UxGT("Extrusors")
-#define MSG_INFO_BAUDRATE _UxGT("Baudios")
-#define MSG_INFO_PROTOCOL _UxGT("Protocolo")
-#define MSG_CASE_LIGHT _UxGT("Luz")
+ constexpr uint8_t CHARSIZE = 1;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Aragonese");
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Conteo de impresion")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Completadas")
- #define MSG_INFO_PRINT_TIME _UxGT("Tiempo total d'imp.")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Impresion mas larga")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Total d'extrusion")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Impresions")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Completadas")
- #define MSG_INFO_PRINT_TIME _UxGT("Total")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Mas larga")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Extrusion")
-#endif
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" parada.");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Tarcheta mesa");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Tarcheta sacada");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Menu prencipal");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Inicio automatico");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Amortar motors");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Levar a l'orichen");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Orichen X");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Orichen Y");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Orichen Z");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Orichen XYZ");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Encetar (pretar)");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Vinient punto");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Nivelacion feita!");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Achustar desfases");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Desfase aplicau");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Establir orichen");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Precalentar ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Tot");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Base");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Conf");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Precalentar ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Precal. ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Precal. ") PREHEAT_2_LABEL _UxGT(" Boquilla");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Precal. ") PREHEAT_2_LABEL _UxGT(" Boquilla ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Precal. ") PREHEAT_2_LABEL _UxGT(" Boquilla ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Precal. ") PREHEAT_2_LABEL _UxGT(" Boquilla ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Precal. ") PREHEAT_2_LABEL _UxGT(" Boquilla ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Precal. ") PREHEAT_2_LABEL _UxGT(" Boquilla ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Precal. ") PREHEAT_2_LABEL _UxGT(" Boquilla ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Tot");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Base");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Conf");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Enfriar");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Enchegar Fuent");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Amortar Fuent");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extruir");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Retraer");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Mover Eixes");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Nivelar base");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Nivelar base");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Mover X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Mover Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Mover Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extrusor");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Extrusor ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Extrusor ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Extrusor ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Extrusor ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Extrusor ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Extrusor ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Mover %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mover 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mover 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Velocidat");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Base Z");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Boquilla");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Boquilla ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Boquilla ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Boquilla ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Boquilla ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Boquilla ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Boquilla ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Base");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Ixoriador");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Ixoriador 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Ixoriador 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Ixoriador 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Fluxo");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Fluxo ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Fluxo ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Fluxo ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Fluxo ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Fluxo ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Fluxo ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Control");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Temperatura Auto.");
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Trigar");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Trigar ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Trigar ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Trigar ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Trigar ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Trigar ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Trigar ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Aceleracion");
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vel. viache min");
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Accel");
+ PROGMEM Language_Str MSG_AMAX_A = _UxGT("Acel. max") LCD_STR_A;
+ PROGMEM Language_Str MSG_AMAX_B = _UxGT("Acel. max") LCD_STR_B;
+ PROGMEM Language_Str MSG_AMAX_C = _UxGT("Acel. max") LCD_STR_C;
+ PROGMEM Language_Str MSG_AMAX_E = _UxGT("Acel. max") LCD_STR_E;
+ PROGMEM Language_Str MSG_AMAX_E0 = _UxGT("Acel. max ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AMAX_E1 = _UxGT("Acel. max ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AMAX_E2 = _UxGT("Acel. max ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AMAX_E3 = _UxGT("Acel. max ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AMAX_E4 = _UxGT("Acel. max ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AMAX_E5 = _UxGT("Acel. max ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Acel. retrac.");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Acel. Viaje");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Trangos/mm");
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" trangos/mm");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" trangos/mm");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" trangos/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("E trangos/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT(" trangos/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT(" trangos/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT(" trangos/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT(" trangos/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT(" trangos/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT(" trangos/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Movimiento");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filamento");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm3");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Fil. Dia. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Fil. Dia. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Fil. Dia. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Fil. Dia. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Fil. Dia. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Fil. Dia. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contraste");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Alzar memoria");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Cargar memoria");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Restaurar memoria");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Tornar a cargar");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Informacion");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Preparar");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Achustar");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausar impresion");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Contin. impresion");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Detener Impresion");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Menu de SD");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("No i hai tarcheta");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Reposo...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Aguardand ordines");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Impres. cancelada");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Sin movimiento");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("Aturada d'emerch.");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("Aturada.");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retraer mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Retraer mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retraer F");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Devantar mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("DesRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Swap DesRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("DesRet F");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Retraccion auto.");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Cambear filamento");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Cambear filamento ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Cambear filamento ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Cambear filamento ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Cambear filamento ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Cambear filamento ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Cambear filamento ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Encetan. tarcheta");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Cambiar tarcheta");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z fuera");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reset BLTouch");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Desfase Z");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Micropaso X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Micropaso Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Micropaso Z");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Cancelado - Endstop");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Error: en calentar");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Error: temperatura");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("Error de temperatura");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Error: Temp Max");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Error: Temp Min");
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Home XY first");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("IMPRESORA ATURADA");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Per favor reinic.");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d");
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h");
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m");
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Calentando...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Calentando base...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibracion Delta");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
-#define MSG_INFO_MIN_TEMP _UxGT("Temperatura menima")
-#define MSG_INFO_MAX_TEMP _UxGT("Temperatura maxima")
-#define MSG_INFO_PSU _UxGT("Fuente de aliment")
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Inf. Impresora");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Inf. Impresora");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Estadisticas Imp.");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Inf. Controlador");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistors");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrusors");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baudios");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocolo");
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Luz");
-#define MSG_DRIVE_STRENGTH _UxGT("Fuerza d'o driver")
-#define MSG_DAC_PERCENT _UxGT("Driver %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("Escri. DAC EEPROM")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Resumir imp.")
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Conteo de impresion");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tiempo total d'imp.");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Impresion mas larga");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total d'extrusion");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Impresions");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Mas larga");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extrusion");
+ #endif
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-// ...or up to 2 lines on a 3-line display
-//
-#define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Aguardand iniciar")
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Temperatura menima");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Temperatura maxima");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Fuente de aliment");
-#define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Meta o filamento")
-#define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("y prete lo boton")
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Fuerza d'o driver");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Escri. DAC EEPROM");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Resumir imp.");
-#if LCD_HEIGHT >= 4
- // Up to 3 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("d'o filamento")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("cambear")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("pa continar...")
-#else // LCD_HEIGHT < 4
- // Up to 2 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("d'o fil. cambear")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Meta o filamento")
-#endif // LCD_HEIGHT < 4
+ //
+ // Filament Change screens show up to 3 lines on a 4-line display
+ // ...or up to 2 lines on a 3-line display
+ //
-#define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Aguardando a")
-#define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("expulsar filament")
-#define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Aguardando a")
-#define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("cargar filamento")
-#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Aguardando impre.")
-#define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("pa continar")
+ #if LCD_HEIGHT >= 4
+ // Up to 3 lines allowed
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Aguardand iniciar", "d'o filamento", "cambear"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Meta o filamento", "y prete lo boton", "pa continar..."));
+ #else // LCD_HEIGHT < 4
+ // Up to 2 lines allowed
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Aguardand iniciar", "d'o fil. cambear"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_2_LINE("Meta o filamento", "y prete lo boton"));
+ #endif // LCD_HEIGHT < 4
+
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Aguardando a", "expulsar filament"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Aguardando a", "cargar filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Aguardando impre.", "pa continar"));
+}
diff --git a/Marlin/src/lcd/language/language_bg.h b/Marlin/src/lcd/language/language_bg.h
index 3e95058ba94c..7d1bc7475191 100644
--- a/Marlin/src/lcd/language/language_bg.h
+++ b/Marlin/src/lcd/language/language_bg.h
@@ -28,120 +28,178 @@
* See also http://marlinfw.org/docs/development/lcd_language.html
*
*/
+
#define DISPLAY_CHARSET_ISO10646_5
-#define CHARSIZE 2
-#define WELCOME_MSG MACHINE_NAME _UxGT(" Готов.")
-#define MSG_MEDIA_INSERTED _UxGT("Картата е поставена")
-#define MSG_MEDIA_REMOVED _UxGT("Картата е извадена")
-#define MSG_MAIN _UxGT("Меню")
-#define MSG_AUTOSTART _UxGT("Автостарт")
-#define MSG_DISABLE_STEPPERS _UxGT("Изкл. двигатели")
-#define MSG_AUTO_HOME _UxGT("Паркиране")
-#define MSG_SET_HOME_OFFSETS _UxGT("Задай Начало")
-#define MSG_SET_ORIGIN _UxGT("Изходна точка")
-#define MSG_PREHEAT_1 _UxGT("Подгряване " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N _UxGT("Подгряване " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_ALL _UxGT("Подгр. " PREHEAT_1_LABEL " Всички")
-#define MSG_PREHEAT_1_BEDONLY _UxGT("Подгр. " PREHEAT_1_LABEL " Легло")
-#define MSG_PREHEAT_1_SETTINGS _UxGT("Настройки " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_2 _UxGT("Подгряване " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N _UxGT("Подгряване " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_ALL _UxGT("Подгр. " PREHEAT_2_LABEL " Всички")
-#define MSG_PREHEAT_2_BEDONLY _UxGT("Подгр. " PREHEAT_2_LABEL " Легло")
-#define MSG_PREHEAT_2_SETTINGS _UxGT("Настройки " PREHEAT_2_LABEL)
-#define MSG_COOLDOWN _UxGT("Охлаждане")
-#define MSG_SWITCH_PS_ON _UxGT("Вкл. захранване")
-#define MSG_SWITCH_PS_OFF _UxGT("Изкл. захранване")
-#define MSG_EXTRUDE _UxGT("Екструзия")
-#define MSG_RETRACT _UxGT("Откат")
-#define MSG_MOVE_AXIS _UxGT("Движение по ос")
-#define MSG_BED_LEVELING _UxGT("Нивелиране")
-#define MSG_LEVEL_BED _UxGT("Нивелиране")
-#define MSG_MOVE_X _UxGT("Движение по X")
-#define MSG_MOVE_Y _UxGT("Движение по Y")
-#define MSG_MOVE_Z _UxGT("Движение по Z")
-#define MSG_MOVE_E _UxGT("Екструдер")
-#define MSG_MOVE_Z_DIST _UxGT("Премести с %smm")
-#define MSG_MOVE_01MM _UxGT("Премести с 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Премести с 1mm")
-#define MSG_MOVE_10MM _UxGT("Премести с 10mm")
-#define MSG_SPEED _UxGT("Скорост")
-#define MSG_BED_Z _UxGT("Bed Z")
-#define MSG_NOZZLE LCD_STR_THERMOMETER _UxGT(" Дюза")
-#define MSG_BED LCD_STR_THERMOMETER _UxGT(" Легло")
-#define MSG_FAN_SPEED _UxGT("Вентилатор")
-#define MSG_FLOW _UxGT("Поток")
-#define MSG_CONTROL _UxGT("Управление")
-#define MSG_MIN LCD_STR_THERMOMETER _UxGT(" Минимум")
-#define MSG_MAX LCD_STR_THERMOMETER _UxGT(" Максимум")
-#define MSG_FACTOR LCD_STR_THERMOMETER _UxGT(" Фактор")
-#define MSG_AUTOTEMP _UxGT("Авто-темп.")
-#define MSG_LCD_ON _UxGT("Вкл.")
-#define MSG_LCD_OFF _UxGT("Изкл.")
-#define MSG_A_RETRACT _UxGT("A-откат")
-#define MSG_A_TRAVEL _UxGT("A-travel")
-#define MSG_STEPS_PER_MM _UxGT("Стъпки/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("Aстъпки/mm")
- #define MSG_BSTEPS _UxGT("Bстъпки/mm")
- #define MSG_CSTEPS _UxGT("Cстъпки/mm")
-#else
- #define MSG_ASTEPS _UxGT("Xстъпки/mm")
- #define MSG_BSTEPS _UxGT("Yстъпки/mm")
- #define MSG_CSTEPS _UxGT("Zстъпки/mm")
-#endif
-#define MSG_ESTEPS _UxGT("E стъпки/mm")
-#define MSG_E1STEPS _UxGT("E1 стъпки/mm")
-#define MSG_E2STEPS _UxGT("E2 стъпки/mm")
-#define MSG_E3STEPS _UxGT("E3 стъпки/mm")
-#define MSG_E4STEPS _UxGT("E4 стъпки/mm")
-#define MSG_E5STEPS _UxGT("E5 стъпки/mm")
-#define MSG_E6STEPS _UxGT("E6 стъпки/mm")
-#define MSG_TEMPERATURE _UxGT("Температура")
-#define MSG_MOTION _UxGT("Движение")
-#define MSG_FILAMENT _UxGT("Нишка")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E in mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Диам. нишка")
-#define MSG_CONTRAST _UxGT("LCD контраст")
-#define MSG_STORE_EEPROM _UxGT("Запази в EPROM")
-#define MSG_LOAD_EEPROM _UxGT("Зареди от EPROM")
-#define MSG_RESTORE_FAILSAFE _UxGT("Фабрични настройки")
-#define MSG_REFRESH LCD_STR_REFRESH _UxGT("Обнови")
-#define MSG_WATCH _UxGT("Преглед")
-#define MSG_PREPARE _UxGT("Действия")
-#define MSG_TUNE _UxGT("Настройка")
-#define MSG_PAUSE_PRINT _UxGT("Пауза")
-#define MSG_RESUME_PRINT _UxGT("Възобнови печата")
-#define MSG_STOP_PRINT _UxGT("Спри печата")
-#define MSG_MEDIA_MENU _UxGT("Меню карта")
-#define MSG_NO_MEDIA _UxGT("Няма карта")
-#define MSG_DWELL _UxGT("Почивка...")
-#define MSG_USERWAIT _UxGT("Изчакване")
-#define MSG_PRINT_ABORTED _UxGT("Печатът е прекъснат")
-#define MSG_NO_MOVE _UxGT("Няма движение")
-#define MSG_KILLED _UxGT("УБИТО.")
-#define MSG_STOPPED _UxGT("СПРЯНО.")
-#define MSG_CONTROL_RETRACT _UxGT("Откат mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Смяна Откат mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Откат V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Скок mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("Възврат mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Смяна Възврат mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("Възврат V")
-#define MSG_AUTORETRACT _UxGT("Автоoткат")
-#define MSG_FILAMENTCHANGE _UxGT("Смяна нишка")
-#define MSG_INIT_MEDIA _UxGT("Иниц. SD-Карта")
-#define MSG_CHANGE_MEDIA _UxGT("Смяна SD-Карта")
-#define MSG_ZPROBE_OUT _UxGT("Z-сондата е извадена")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Z Отстояние")
-#define MSG_BABYSTEP_X _UxGT("Министъпка X")
-#define MSG_BABYSTEP_Y _UxGT("Министъпка Y")
-#define MSG_BABYSTEP_Z _UxGT("Министъпка Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Стоп Кр.Изключватели")
-#define MSG_DELTA_CALIBRATE _UxGT("Делта Калибровка")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Калибровка X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Калибровка Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Калибровка Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Калибровка Център")
-#define MSG_EXPECTED_PRINTER _UxGT("Неправилен принтер")
+namespace Language_bg {
+ using namespace Language_en; // Inherit undefined strings from English
+
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Bulgarian");
+
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" Готов.");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Картата е поставена");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Картата е извадена");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Меню");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Автостарт");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Изкл. двигатели");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Паркиране");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Задай Начало");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Изходна точка");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Подгряване ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Подгряване ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Подгряване ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Подгряване ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Подгряване ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Подгряване ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Подгряване ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Подгр. ") PREHEAT_1_LABEL _UxGT(" Всички");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Подгр. ") PREHEAT_1_LABEL _UxGT(" Легло");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Настройки ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Подгряване ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Подгряване ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Подгряване ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Подгряване ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Подгряване ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Подгряване ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Подгряване ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Подгряване ") PREHEAT_2_LABEL _UxGT(" Дюза");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Подгряване ") PREHEAT_2_LABEL _UxGT(" Дюза ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Подгряване ") PREHEAT_2_LABEL _UxGT(" Дюза ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Подгряване ") PREHEAT_2_LABEL _UxGT(" Дюза ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Подгряване ") PREHEAT_2_LABEL _UxGT(" Дюза ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Подгряване ") PREHEAT_2_LABEL _UxGT(" Дюза ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Подгряване ") PREHEAT_2_LABEL _UxGT(" Дюза ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Подгр. ") PREHEAT_2_LABEL _UxGT(" Всички");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Подгр. ") PREHEAT_2_LABEL _UxGT(" Легло");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Настройки ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Охлаждане");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Вкл. захранване");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Изкл. захранване");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Екструзия");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Откат");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Движение по ос");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Нивелиране");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Нивелиране");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Движение по X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Движение по Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Движение по Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Екструдер");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Екструдер ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Екструдер ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Екструдер ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Екструдер ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Екструдер ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Екструдер ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Премести с %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Премести с 0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Премести с 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Премести с 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Скорост");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
+ PROGMEM Language_Str MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" Дюза");
+ PROGMEM Language_Str MSG_NOZZLE_0 = " " LCD_STR_THERMOMETER _UxGT(" Дюза ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = " " LCD_STR_THERMOMETER _UxGT(" Дюза ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = " " LCD_STR_THERMOMETER _UxGT(" Дюза ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = " " LCD_STR_THERMOMETER _UxGT(" Дюза ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = " " LCD_STR_THERMOMETER _UxGT(" Дюза ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = " " LCD_STR_THERMOMETER _UxGT(" Дюза ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" Легло");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Вентилатор");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Вентилатор 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Вентилатор 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Вентилатор 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Поток");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Поток ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Поток ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Поток ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Поток ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Поток ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Поток ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Управление");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Минимум");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Максимум");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Фактор");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Авто-темп.");
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("Вкл.");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Изкл.");
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-откат");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-travel");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Стъпки/mm");
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT("стъпки/mm");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT("стъпки/mm");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT("стъпки/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("E стъпки/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT(" стъпки/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT(" стъпки/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT(" стъпки/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT(" стъпки/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT(" стъпки/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT(" стъпки/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Температура");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Движение");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Нишка");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm3");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Диам. нишка");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Диам. нишка ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Диам. нишка ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Диам. нишка ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Диам. нишка ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Диам. нишка ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Диам. нишка ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD контраст");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Запази в EPROM");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Зареди от EPROM");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Фабрични настройки");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Обнови");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Преглед");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Действия");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Настройка");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Пауза");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Възобнови печата");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Спри печата");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Меню карта");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Няма карта");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Почивка...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Изчакване");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Печатът е прекъснат");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Няма движение");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("УБИТО.");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("СПРЯНО.");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Откат mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Смяна Откат mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Откат V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Скок mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Възврат mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Смяна Възврат mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Възврат V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Автоoткат");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Смяна нишка");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Смяна нишка ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Смяна нишка ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Смяна нишка ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Смяна нишка ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Смяна нишка ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Смяна нишка ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Иниц. SD-Карта");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Смяна SD-Карта");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z-сондата е извадена");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Z Отстояние");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Министъпка X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Министъпка Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Министъпка Z");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Стоп Кр.Изключватели");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Делта Калибровка");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Калибровка X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Калибровка Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Калибровка Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Калибровка Център");
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Неправилен принтер");
+}
diff --git a/Marlin/src/lcd/language/language_ca.h b/Marlin/src/lcd/language/language_ca.h
index cf7278851e99..21d5329db3cb 100644
--- a/Marlin/src/lcd/language/language_ca.h
+++ b/Marlin/src/lcd/language/language_ca.h
@@ -28,236 +28,263 @@
* See also http://marlinfw.org/docs/development/lcd_language.html
*
*/
+namespace Language_ca {
+ using namespace Language_en; // Inherit undefined strings from English
-#define CHARSIZE 2
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Catalan");
-#define WELCOME_MSG MACHINE_NAME _UxGT(" preparada.")
-#define MSG_MEDIA_INSERTED _UxGT("Targeta detectada.")
-#define MSG_MEDIA_REMOVED _UxGT("Targeta extreta.")
-#define MSG_LCD_ENDSTOPS _UxGT("Endstops")
-#define MSG_MAIN _UxGT("Menú principal")
-#define MSG_AUTOSTART _UxGT("Inici automatic")
-#define MSG_DISABLE_STEPPERS _UxGT("Desactiva motors")
-#define MSG_DEBUG_MENU _UxGT("Menu de depuracio")
-#define MSG_PROGRESS_BAR_TEST _UxGT("Test barra progres")
-#define MSG_AUTO_HOME _UxGT("Ves a l'origen")
-#define MSG_AUTO_HOME_X _UxGT("X a origen")
-#define MSG_AUTO_HOME_Y _UxGT("Y a origen")
-#define MSG_AUTO_HOME_Z _UxGT("Z a origen")
-#define MSG_LEVEL_BED_HOMING _UxGT("Origen XYZ")
-#define MSG_LEVEL_BED_WAITING _UxGT("Premeu per iniciar")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Següent punt")
-#define MSG_LEVEL_BED_DONE _UxGT("Anivellament fet!")
-#define MSG_SET_HOME_OFFSETS _UxGT("Ajusta decalatge")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Decalatge aplicat")
-#define MSG_SET_ORIGIN _UxGT("Estableix origen")
-#define MSG_PREHEAT_1 _UxGT("Preescalfa " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" Tot")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" Llit")
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" Conf.")
-#define MSG_PREHEAT_2 _UxGT("Preescalfa " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" Tot")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" Llit")
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" Conf.")
-#define MSG_COOLDOWN _UxGT("Refreda")
-#define MSG_SWITCH_PS_ON _UxGT("Switch power on")
-#define MSG_SWITCH_PS_OFF _UxGT("Switch power off")
-#define MSG_EXTRUDE _UxGT("Extrudeix")
-#define MSG_RETRACT _UxGT("Retreu")
-#define MSG_MOVE_AXIS _UxGT("Mou eixos")
-#define MSG_BED_LEVELING _UxGT("Anivella llit")
-#define MSG_LEVEL_BED _UxGT("Anivella llit")
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" preparada.");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Targeta detectada.");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Targeta extreta.");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Menú principal");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Inici automatic");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Desactiva motors");
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu de depuracio");
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test barra progres");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Ves a l'origen");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("X a origen");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Y a origen");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Z a origen");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Origen XYZ");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Premeu per iniciar");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Següent punt");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Anivellament fet!");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Ajusta decalatge");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Decalatge aplicat");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Estableix origen");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Preescalfa ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Preescalfa ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Preescalfa ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Preescalfa ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Preescalfa ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Preescalfa ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Preescalfa ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Tot");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Llit");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Conf.");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Preescalfa ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Preescalfa ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Preescalfa ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Preescalfa ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Preescalfa ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Preescalfa ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Preescalfa ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" Tot");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" Llit");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" Conf.");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Refreda");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Switch power on");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Switch power off");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrudeix");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Retreu");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Mou eixos");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Anivella llit");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Anivella llit");
-#define MSG_MOVING _UxGT("Movent..")
-#define MSG_FREE_XY _UxGT("XY lliures")
-#define MSG_MOVE_X _UxGT("Mou X")
-#define MSG_MOVE_Y _UxGT("Mou Y")
-#define MSG_MOVE_Z _UxGT("Mou Z")
-#define MSG_MOVE_E _UxGT("Extrusor")
-#define MSG_MOVE_Z_DIST _UxGT("Mou %smm")
-#define MSG_MOVE_01MM _UxGT("Mou 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Mou 1mm")
-#define MSG_MOVE_10MM _UxGT("Mou 10mm")
-#define MSG_SPEED _UxGT("Velocitat")
-#define MSG_BED_Z _UxGT("Llit Z")
-#define MSG_NOZZLE _UxGT("Nozzle")
-#define MSG_BED _UxGT("Llit")
-#define MSG_FAN_SPEED _UxGT("Vel. Ventilador")
-#define MSG_FLOW _UxGT("Flux")
-#define MSG_CONTROL _UxGT("Control")
-#define MSG_MIN LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP _UxGT("Autotemp")
-#define MSG_LCD_ON _UxGT("On")
-#define MSG_LCD_OFF _UxGT("Off")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Select")
-#define MSG_ACC _UxGT("Accel")
-#define MSG_JERK _UxGT("Jerk")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va-jerk")
- #define MSG_VB_JERK _UxGT("Vb-jerk")
- #define MSG_VC_JERK _UxGT("Vc-jerk")
-#else
- #define MSG_VA_JERK _UxGT("Vx-jerk")
- #define MSG_VB_JERK _UxGT("Vy-jerk")
- #define MSG_VC_JERK _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK _UxGT("Ve-jerk")
-#define MSG_VMAX _UxGT("Vmax ")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("VViatge min")
-#define MSG_AMAX _UxGT("Accel. max ")
-#define MSG_A_RETRACT _UxGT("Accel. retracc")
-#define MSG_A_TRAVEL _UxGT("Accel. Viatge")
-#define MSG_STEPS_PER_MM _UxGT("Passos/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("Apassos/mm")
- #define MSG_BSTEPS _UxGT("Bpassos/mm")
- #define MSG_CSTEPS _UxGT("Cpassos/mm")
-#else
- #define MSG_ASTEPS _UxGT("Xpassos/mm")
- #define MSG_BSTEPS _UxGT("Ypassos/mm")
- #define MSG_CSTEPS _UxGT("Zpassos/mm")
-#endif
-#define MSG_ESTEPS _UxGT("Epassos/mm")
-#define MSG_E1STEPS _UxGT("E1passos/mm")
-#define MSG_E2STEPS _UxGT("E2passos/mm")
-#define MSG_E3STEPS _UxGT("E3passos/mm")
-#define MSG_E4STEPS _UxGT("E4passos/mm")
-#define MSG_E5STEPS _UxGT("E5passos/mm")
-#define MSG_E6STEPS _UxGT("E6passos/mm")
-#define MSG_TEMPERATURE _UxGT("Temperatura")
-#define MSG_MOTION _UxGT("Moviment")
-#define MSG_FILAMENT _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E en mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Diam. Fil.")
-#define MSG_CONTRAST _UxGT("Contrast de LCD")
-#define MSG_STORE_EEPROM _UxGT("Desa memoria")
-#define MSG_LOAD_EEPROM _UxGT("Carrega memoria")
-#define MSG_RESTORE_FAILSAFE _UxGT("Restaura valors")
-#define MSG_REFRESH _UxGT("Actualitza")
-#define MSG_WATCH _UxGT("Pantalla Info.")
-#define MSG_PREPARE _UxGT("Prepara")
-#define MSG_TUNE _UxGT("Ajusta")
-#define MSG_PAUSE_PRINT _UxGT("Pausa impressio")
-#define MSG_RESUME_PRINT _UxGT("Repren impressio")
-#define MSG_STOP_PRINT _UxGT("Atura impressio.")
-#define MSG_MEDIA_MENU _UxGT("Imprimeix de SD")
-#define MSG_NO_MEDIA _UxGT("No hi ha targeta")
-#define MSG_DWELL _UxGT("En repos...")
-#define MSG_USERWAIT _UxGT("Esperant usuari..")
-#define MSG_PRINT_ABORTED _UxGT("Imp. cancelada")
-#define MSG_NO_MOVE _UxGT("Sense moviment.")
-#define MSG_KILLED _UxGT("MATAT.")
-#define MSG_STOPPED _UxGT("ATURADA.")
-#define MSG_CONTROL_RETRACT _UxGT("Retreu mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Swap Retreure mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Retreu V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Aixeca mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("DesRet +mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Swap DesRet +mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("DesRet V")
-#define MSG_AUTORETRACT _UxGT("Auto retraccio")
-#define MSG_FILAMENTCHANGE _UxGT("Canvia filament")
-#define MSG_INIT_MEDIA _UxGT("Inicialitza SD")
-#define MSG_CHANGE_MEDIA _UxGT("Canvia SD")
-#define MSG_ZPROBE_OUT _UxGT("Sonda Z fora")
-#define MSG_BLTOUCH_RESET _UxGT("Reinicia BLTouch")
-#define MSG_HOME_FIRST _UxGT("Home %s%s%s primer")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Decalatge Z")
-#define MSG_BABYSTEP_X _UxGT("Micropas X")
-#define MSG_BABYSTEP_Y _UxGT("Micropas Y")
-#define MSG_BABYSTEP_Z _UxGT("Micropas Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Cancel. Endstop")
-#define MSG_HEATING_FAILED_LCD _UxGT("Error al escalfar")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Err: TEMP REDUNDANT")
-#define MSG_THERMAL_RUNAWAY _UxGT("THERMAL RUNAWAY")
-#define MSG_ERR_MAXTEMP _UxGT("Err: TEMP MAXIMA")
-#define MSG_ERR_MINTEMP _UxGT("Err: TEMP MINIMA")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Err: TEMPMAX LLIT")
-#define MSG_ERR_MINTEMP_BED _UxGT("Err: TEMPMIN LLIT")
-#define MSG_ERR_Z_HOMING _UxGT("Home XY primer")
-#define MSG_HALTED _UxGT("IMPRESSORA PARADA")
-#define MSG_PLEASE_RESET _UxGT("Reinicieu")
-#define MSG_SHORT_DAY _UxGT("d") // One character only
-#define MSG_SHORT_HOUR _UxGT("h") // One character only
-#define MSG_SHORT_MINUTE _UxGT("m") // One character only
-#define MSG_HEATING _UxGT("Escalfant...")
-#define MSG_BED_HEATING _UxGT("Escalfant llit...")
-#define MSG_DELTA_CALIBRATE _UxGT("Calibratge Delta")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Calibra X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Calibra Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Calibra Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Calibra el centre")
+ PROGMEM Language_Str MSG_MOVING = _UxGT("Movent..");
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("XY lliures");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Mou X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Mou Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Mou Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extrusor");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Extrusor ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Extrusor ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Extrusor ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Extrusor ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Extrusor ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Extrusor ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Mou %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mou 0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mou 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mou 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Velocitat");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Llit Z");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozzle");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Nozzle ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Nozzle ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Nozzle ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Nozzle ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Nozzle ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Nozzle ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Llit");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vel. Ventilador");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Vel. Ventilador 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Vel. Ventilador 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Vel. Ventilador 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Flux");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Flux ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Flux ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Flux ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Flux ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Flux ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Flux ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VViatge min");
+ PROGMEM Language_Str MSG_AMAX_A = _UxGT("Accel. max ") LCD_STR_A;
+ PROGMEM Language_Str MSG_AMAX_B = _UxGT("Accel. max ") LCD_STR_B;
+ PROGMEM Language_Str MSG_AMAX_C = _UxGT("Accel. max ") LCD_STR_C;
+ PROGMEM Language_Str MSG_AMAX_E = _UxGT("Accel. max ") LCD_STR_E;
+ PROGMEM Language_Str MSG_AMAX_E0 = _UxGT("Accel. max ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AMAX_E1 = _UxGT("Accel. max ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AMAX_E2 = _UxGT("Accel. max ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AMAX_E3 = _UxGT("Accel. max ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AMAX_E4 = _UxGT("Accel. max ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AMAX_E5 = _UxGT("Accel. max ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Accel. retracc");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Accel. Viatge");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Passos/mm");
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT("passos/mm");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT("passos/mm");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT("passos/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("Epassos/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT("passos/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT("passos/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT("passos/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT("passos/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT("passos/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT("passos/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Moviment");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm3");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Diam. Fil.");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Diam. Fil. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Diam. Fil. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Diam. Fil. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Diam. Fil. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Diam. Fil. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Diam. Fil. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contrast de LCD");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Desa memoria");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Carrega memoria");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Restaura valors");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Actualitza");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Pantalla Info.");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Prepara");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Ajusta");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausa impressio");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Repren impressio");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Atura impressio.");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Imprimeix de SD");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("No hi ha targeta");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("En repos...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Esperant usuari..");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Imp. cancelada");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Sense moviment.");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("MATAT.");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("ATURADA.");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retreu mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Retreure mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retreu V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Aixeca mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("DesRet +mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Swap DesRet +mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("DesRet V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto retraccio");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Canvia filament");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Canvia filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Canvia filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Canvia filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Canvia filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Canvia filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Canvia filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Inicialitza SD");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Canvia SD");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z fora");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reinicia BLTouch");
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Home %s%s%s primer");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Decalatge Z");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Micropas X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Micropas Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Micropas Z");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Cancel. Endstop");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Error al escalfar");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: TEMP REDUNDANT");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("THERMAL RUNAWAY");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err: TEMP MAXIMA");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err: TEMP MINIMA");
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Home XY primer");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("IMPRESSORA PARADA");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Reinicieu");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Escalfant...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Escalfant llit...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibratge Delta");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibra X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibra Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibra Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibra el centre");
-#define MSG_INFO_MENU _UxGT("Quant a la impr.")
-#define MSG_INFO_PRINTER_MENU _UxGT("Info Impressora")
-#define MSG_INFO_STATS_MENU _UxGT("Estadistiques")
-#define MSG_INFO_BOARD_MENU _UxGT("Info placa")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Termistors")
-#define MSG_INFO_EXTRUDERS _UxGT("Extrusors")
-#define MSG_INFO_BAUDRATE _UxGT("Baud")
-#define MSG_INFO_PROTOCOL _UxGT("Protocol")
-#define MSG_CASE_LIGHT _UxGT("Llum")
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Quant a la impr.");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Info Impressora");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Estadistiques");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Info placa");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistors");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrusors");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baud");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocol");
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Llum");
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Total impressions")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Acabades")
- #define MSG_INFO_PRINT_TIME _UxGT("Temps imprimint")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Treball mes llarg")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Total extrudit")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Impressions")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Acabades")
- #define MSG_INFO_PRINT_TIME _UxGT("Total")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Mes llarg")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Extrudit")
-#endif
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Total impressions");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Acabades");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Temps imprimint");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Treball mes llarg");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total extrudit");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Impressions");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Acabades");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Mes llarg");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extrudit");
+ #endif
-#define MSG_INFO_MIN_TEMP _UxGT("Temp. mínima")
-#define MSG_INFO_MAX_TEMP _UxGT("Temp. màxima")
-#define MSG_INFO_PSU _UxGT("Font alimentacio")
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Temp. mínima");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Temp. màxima");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Font alimentacio");
-#define MSG_DRIVE_STRENGTH _UxGT("Força motor")
-#define MSG_DAC_PERCENT _UxGT("Driver %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Repren impressió")
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Força motor");
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("Driver %");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Write");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Repren impressió");
-#define MSG_EXPECTED_PRINTER _UxGT("Impressora incorrecta")
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Impressora incorrecta");
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-// ...or up to 2 lines on a 3-line display
-//
-#if LCD_HEIGHT >= 4
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Esperant per")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("iniciar el canvi")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("de filament")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Esperant per")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("treure filament")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Poseu filament")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("i premeu el boto")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("per continuar...")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Premeu boto per")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("escalfar nozzle.")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Escalfant nozzle")
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Espereu...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Esperant carrega")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("de filament")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Esperant per")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("reprendre")
-#else // LCD_HEIGHT < 4
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Espereu...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Expulsant...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insereix i prem")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Escalfant...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Carregant...")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Reprenent...")
-#endif // LCD_HEIGHT < 4
+ //
+ // Filament Change screens show up to 3 lines on a 4-line display
+ // ...or up to 2 lines on a 3-line display
+ //
+ #if LCD_HEIGHT >= 4
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Esperant per", "iniciar el canvi", "de filament"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Esperant per", "treure filament"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Poseu filament", "i premeu el boto", "per continuar..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Premeu boto per", "escalfar nozzle."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Escalfant nozzle", "Espereu..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Esperant carrega", "de filament"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Esperant per", "reprendre"));
+ #else // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Espereu..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Expulsant..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insereix i prem"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Escalfant..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Carregant..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Reprenent..."));
+ #endif // LCD_HEIGHT < 4
+}
diff --git a/Marlin/src/lcd/language/language_cz.h b/Marlin/src/lcd/language/language_cz.h
index 92a9e0ca8391..ebb8186e7686 100644
--- a/Marlin/src/lcd/language/language_cz.h
+++ b/Marlin/src/lcd/language/language_cz.h
@@ -35,521 +35,578 @@
*/
#define DISPLAY_CHARSET_ISO10646_CZ
-#define THIS_LANGUAGES_SPECIAL_SYMBOLS _UxGT("áÁčČďĎéÉěĚíÍňŇóÓřŘšŠťŤúÚůŮýÝžŽ³")
-#define CHARSIZE 2
-#define WELCOME_MSG MACHINE_NAME _UxGT(" připraven.")
-#define MSG_YES _UxGT("ANO")
-#define MSG_NO _UxGT("NE")
-#define MSG_BACK _UxGT("Zpět")
-#define MSG_MEDIA_INSERTED _UxGT("Karta vložena")
-#define MSG_MEDIA_REMOVED _UxGT("Karta vyjmuta")
-#define MSG_LCD_ENDSTOPS _UxGT("Endstopy") // max 8 znaku
-#define MSG_LCD_SOFT_ENDSTOPS _UxGT("Soft Endstopy")
-#define MSG_MAIN _UxGT("Hlavní nabídka")
-#define MSG_ADVANCED_SETTINGS _UxGT("Další nastavení")
-#define MSG_CONFIGURATION _UxGT("Konfigurace")
-#define MSG_AUTOSTART _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS _UxGT("Uvolnit motory")
-#define MSG_DEBUG_MENU _UxGT("Nabídka ladění")
-#if LCD_WIDTH >= 20
- #define MSG_PROGRESS_BAR_TEST _UxGT("Test ukaz. průběhu")
-#else
- #define MSG_PROGRESS_BAR_TEST _UxGT("Test uk. průběhu")
-#endif
-#define MSG_AUTO_HOME _UxGT("Domovská pozice")
-#define MSG_AUTO_HOME_X _UxGT("Domů osa X")
-#define MSG_AUTO_HOME_Y _UxGT("Domů osa Y")
-#define MSG_AUTO_HOME_Z _UxGT("Domů osa Z")
-#define MSG_AUTO_Z_ALIGN _UxGT("Auto srovnání Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Měření podložky")
-#define MSG_LEVEL_BED_WAITING _UxGT("Kliknutím spusťte")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Další bod")
-#define MSG_LEVEL_BED_DONE _UxGT("Měření hotovo!")
-#define MSG_Z_FADE_HEIGHT _UxGT("Výška srovnávání")
-#define MSG_SET_HOME_OFFSETS _UxGT("Nastavit ofsety")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Ofsety nastaveny")
-#define MSG_SET_ORIGIN _UxGT("Nastavit počátek")
-#define MSG_PREHEAT_1 _UxGT("Zahřát " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" vše")
-#define MSG_PREHEAT_1_END MSG_PREHEAT_1 _UxGT(" hotend")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" podlož")
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" nast")
-#define MSG_PREHEAT_2 _UxGT("Zahřát " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" vše")
-#define MSG_PREHEAT_2_END MSG_PREHEAT_2 _UxGT(" hotend")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" podlož")
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" nast")
-#define MSG_PREHEAT_CUSTOM _UxGT("Zahřát vlastní")
-#define MSG_COOLDOWN _UxGT("Zchladit")
-#define MSG_LASER_MENU _UxGT("Ovládání laseru")
-#define MSG_LASER_OFF _UxGT("Vypnout laser")
-#define MSG_LASER_ON _UxGT("Zapnout laser")
-#define MSG_LASER_POWER _UxGT("Výkon laseru")
-#define MSG_SPINDLE_REVERSE _UxGT("Vřeteno opačně")
-#define MSG_SWITCH_PS_ON _UxGT("Zapnout napájení")
-#define MSG_SWITCH_PS_OFF _UxGT("Vypnout napájení")
-#define MSG_EXTRUDE _UxGT("Vytlačit (extr.)")
-#define MSG_RETRACT _UxGT("Zatlačit (retr.)")
-#define MSG_MOVE_AXIS _UxGT("Posunout osy")
-#define MSG_BED_LEVELING _UxGT("Vyrovnat podložku")
-#define MSG_LEVEL_BED _UxGT("Vyrovnat podložku")
-#define MSG_LEVEL_CORNERS _UxGT("Vyrovnat rohy")
-#define MSG_NEXT_CORNER _UxGT("Další roh")
-#define MSG_EDIT_MESH _UxGT("Upravit síť bodů")
-#define MSG_EDITING_STOPPED _UxGT("Konec úprav sítě")
-#define MSG_MESH_X _UxGT("Index X")
-#define MSG_MESH_Y _UxGT("Index Y")
-#define MSG_MESH_EDIT_Z _UxGT("Hodnota Z")
+namespace Language_cz {
+ using namespace Language_en; // Inherit undefined strings from English
-#define MSG_USER_MENU _UxGT("Vlastní příkazy")
-#define MSG_IDEX_MENU _UxGT("Režim IDEX")
-#define MSG_OFFSETS_MENU _UxGT("Ofsety nástrojů")
-#define MSG_IDEX_MODE_AUTOPARK _UxGT("Auto-Park")
-#define MSG_IDEX_MODE_DUPLICATE _UxGT("Duplikace")
-#define MSG_IDEX_MODE_MIRRORED_COPY _UxGT("Zrcadlení")
-#define MSG_IDEX_MODE_FULL_CTRL _UxGT("Plná kontrola")
-#define MSG_X_OFFSET _UxGT("2. tryska X")
-#define MSG_Y_OFFSET _UxGT("2. tryska Y")
-#define MSG_Z_OFFSET _UxGT("2. tryska Z")
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Czech");
-#define MSG_UBL_DOING_G29 _UxGT("Provádím G29")
-#define MSG_UBL_TOOLS _UxGT("UBL nástroje")
-#define MSG_UBL_LEVEL_BED _UxGT("Unified Bed Leveling")
-#define MSG_UBL_MANUAL_MESH _UxGT("Manuální síť bodů")
-#define MSG_UBL_BC_INSERT _UxGT("Vložte kartu, změřte")
-#define MSG_UBL_BC_INSERT2 _UxGT("Změřte")
-#define MSG_UBL_BC_REMOVE _UxGT("Odstraňte a změřte")
-#define MSG_UBL_MOVING_TO_NEXT _UxGT("Přesun na další")
-#define MSG_UBL_ACTIVATE_MESH _UxGT("Aktivovat UBL")
-#define MSG_UBL_DEACTIVATE_MESH _UxGT("Deaktivovat UBL")
-#define MSG_UBL_SET_TEMP_BED _UxGT("Teplota podložky")
-#define MSG_UBL_BED_TEMP_CUSTOM MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND _UxGT("Teplota hotendu")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT _UxGT("Úprava sítě bodů")
-#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("Upravit vlastní síť")
-#define MSG_UBL_FINE_TUNE_MESH _UxGT("Doladit síť bodů")
-#define MSG_UBL_DONE_EDITING_MESH _UxGT("Konec úprav sítě")
-#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("Vlastní síť")
-#define MSG_UBL_BUILD_MESH_MENU _UxGT("Vytvořit síť")
-#define MSG_UBL_BUILD_MESH_M1 _UxGT("Síť bodů " PREHEAT_1_LABEL)
-#define MSG_UBL_BUILD_MESH_M2 _UxGT("Síť bodů " PREHEAT_2_LABEL)
-#define MSG_UBL_BUILD_COLD_MESH _UxGT("Studená síť bodů")
-#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("Upravit výšku sítě")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("Výška")
-#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Zkontrolovat síť")
-#define MSG_UBL_VALIDATE_MESH_M1 _UxGT("Kontrola sítě " PREHEAT_1_LABEL)
-#define MSG_UBL_VALIDATE_MESH_M2 _UxGT("Kontrola sítě " PREHEAT_2_LABEL)
-#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Kontrola vlast. sítě")
-#define MSG_UBL_CONTINUE_MESH _UxGT("Pokračovat v síťi")
-#define MSG_UBL_MESH_LEVELING _UxGT("Síťové rovnání")
-#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("3-bodové rovnání")
-#define MSG_UBL_GRID_MESH_LEVELING _UxGT("Mřížkové rovnání")
-#define MSG_UBL_MESH_LEVEL _UxGT("Srovnat podložku")
-#define MSG_UBL_SIDE_POINTS _UxGT("Postranní body")
-#define MSG_UBL_MAP_TYPE _UxGT("Typ sítě bodu")
-#define MSG_UBL_OUTPUT_MAP _UxGT("Exportovat síť")
-#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("Exportovat do PC")
-#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("Exportovat do CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("Záloha do PC")
-#define MSG_UBL_INFO_UBL _UxGT("Info o UBL do PC")
-#define MSG_UBL_FILLIN_AMOUNT _UxGT("Hustota mřížky")
-#define MSG_UBL_MANUAL_FILLIN _UxGT("Ruční hustota")
-#define MSG_UBL_SMART_FILLIN _UxGT("Chytrá hustota")
-#define MSG_UBL_FILLIN_MESH _UxGT("Zaplnit mřížku")
-#define MSG_UBL_INVALIDATE_ALL _UxGT("Zrušit všechno")
-#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("Zrušit poslední")
-#define MSG_UBL_FINE_TUNE_ALL _UxGT("Upravit všechny")
-#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("Upravit poslední")
-#define MSG_UBL_STORAGE_MESH_MENU _UxGT("Uložiště sítí")
-#define MSG_UBL_STORAGE_SLOT _UxGT("Paměťový slot")
-#define MSG_UBL_LOAD_MESH _UxGT("Načíst síť bodů")
-#define MSG_UBL_SAVE_MESH _UxGT("Uložit síť bodů")
-#define MSG_MESH_LOADED _UxGT("Síť %i načtena")
-#define MSG_MESH_SAVED _UxGT("Síť %i uložena")
-#define MSG_UBL_NO_STORAGE _UxGT("Nedostatek místa")
-#define MSG_UBL_SAVE_ERROR _UxGT("Ch.: Uložit UBL")
-#define MSG_UBL_RESTORE_ERROR _UxGT("Ch.: Obnovit UBL")
-#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Konec Z-Offsetu")
-#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("UBL Postupně")
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" připraven.");
+ PROGMEM Language_Str MSG_YES = _UxGT("ANO");
+ PROGMEM Language_Str MSG_NO = _UxGT("NE");
+ PROGMEM Language_Str MSG_BACK = _UxGT("Zpět");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Karta vložena");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Karta vyjmuta");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstopy"); // max 8 znaku
+ PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstopy");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Hlavní nabídka");
+ PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Další nastavení");
+ PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfigurace");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autostart");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Uvolnit motory");
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Nabídka ladění");
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test ukaz. průběhu");
+ #else
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test uk. průběhu");
+ #endif
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Domovská pozice");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Domů osa X");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Domů osa Y");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Domů osa Z");
+ PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto srovnání Z");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Měření podložky");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Kliknutím spusťte");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Další bod");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Měření hotovo!");
+ PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Výška srovnávání");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Nastavit ofsety");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Ofsety nastaveny");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Nastavit počátek");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Zahřát ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Zahřát ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Zahřát ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Zahřát ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Zahřát ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Zahřát ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Zahřát ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" vše");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" podlož");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" nast");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Zahřát ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Zahřát ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Zahřát ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Zahřát ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Zahřát ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Zahřát ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Zahřát ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" end");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" vše");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" podlož");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Zahřát ") PREHEAT_2_LABEL _UxGT(" nast");
+ PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Zahřát vlastní");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Zchladit");
+ PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Ovládání laseru");
+ PROGMEM Language_Str MSG_LASER_OFF = _UxGT("Vypnout laser");
+ PROGMEM Language_Str MSG_LASER_ON = _UxGT("Zapnout laser");
+ PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Výkon laseru");
+ PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Vřeteno opačně");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Zapnout napájení");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Vypnout napájení");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Vytlačit (extr.)");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Zatlačit (retr.)");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Posunout osy");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Vyrovnat podložku");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Vyrovnat podložku");
+ PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Vyrovnat rohy");
+ PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Další roh");
+ PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Upravit síť bodů");
+ PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Konec úprav sítě");
+ PROGMEM Language_Str MSG_MESH_X = _UxGT("Index X");
+ PROGMEM Language_Str MSG_MESH_Y = _UxGT("Index Y");
+ PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Hodnota Z");
-#define MSG_LED_CONTROL _UxGT("Nastavení LED")
-#define MSG_LEDS _UxGT("Světla")
-#define MSG_LED_PRESETS _UxGT("Světla Předvolby")
-#define MSG_SET_LEDS_RED _UxGT("Červená")
-#define MSG_SET_LEDS_ORANGE _UxGT("Oranžová")
-#define MSG_SET_LEDS_YELLOW _UxGT("Žlutá")
-#define MSG_SET_LEDS_GREEN _UxGT("Zelená")
-#define MSG_SET_LEDS_BLUE _UxGT("Modrá")
-#define MSG_SET_LEDS_INDIGO _UxGT("Indigo")
-#define MSG_SET_LEDS_VIOLET _UxGT("Fialová")
-#define MSG_SET_LEDS_WHITE _UxGT("Bílá")
-#define MSG_SET_LEDS_DEFAULT _UxGT("Výchozí")
-#define MSG_CUSTOM_LEDS _UxGT("Vlastní světla")
-#define MSG_INTENSITY_R _UxGT("Červená intenzita")
-#define MSG_INTENSITY_G _UxGT("Zelená intezita")
-#define MSG_INTENSITY_B _UxGT("Modrá intenzita")
-#define MSG_INTENSITY_W _UxGT("Bílá intenzita")
-#define MSG_LED_BRIGHTNESS _UxGT("Jas")
+ PROGMEM Language_Str MSG_USER_MENU = _UxGT("Vlastní příkazy");
+ PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Režim IDEX");
+ PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Ofsety nástrojů");
+ PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
+ PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplikace");
+ PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Zrcadlení");
+ PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Plná kontrola");
+ PROGMEM Language_Str MSG_X_OFFSET = _UxGT("2. tryska X");
+ PROGMEM Language_Str MSG_Y_OFFSET = _UxGT("2. tryska Y");
+ PROGMEM Language_Str MSG_Z_OFFSET = _UxGT("2. tryska Z");
-#define MSG_MOVING _UxGT("Posouvání...")
-#define MSG_FREE_XY _UxGT("Uvolnit XY")
-#define MSG_MOVE_X _UxGT("Posunout X")
-#define MSG_MOVE_Y _UxGT("Posunout Y")
-#define MSG_MOVE_Z _UxGT("Posunout Z")
-#define MSG_MOVE_E _UxGT("Extrudér")
-#define MSG_HOTEND_TOO_COLD _UxGT("Hotend je studený")
-#define MSG_MOVE_Z_DIST _UxGT("Posunout o %smm")
-#define MSG_MOVE_01MM _UxGT("Posunout o 0,1mm")
-#define MSG_MOVE_1MM _UxGT("Posunout o 1mm")
-#define MSG_MOVE_10MM _UxGT("Posunout o 10mm")
-#define MSG_SPEED _UxGT("Rychlost")
-#define MSG_BED_Z _UxGT("Výška podl.")
-#define MSG_NOZZLE _UxGT("Tryska")
-#define MSG_BED _UxGT("Podložka")
-#define MSG_CHAMBER _UxGT("Komora")
-#define MSG_FAN_SPEED _UxGT("Rychlost vent.")
-#define MSG_EXTRA_FAN_SPEED _UxGT("Rychlost ex. vent.")
-#define MSG_FLOW _UxGT("Průtok")
-#define MSG_CONTROL _UxGT("Ovládaní")
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fakt")
-#define MSG_AUTOTEMP _UxGT("Autoteplota")
-#define MSG_LCD_ON _UxGT("Zap")
-#define MSG_LCD_OFF _UxGT("Vyp")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Vybrat")
-#define MSG_ACC _UxGT("Zrychl")
-#define MSG_JERK _UxGT("Jerk")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va-jerk")
- #define MSG_VB_JERK _UxGT("Vb-jerk")
- #define MSG_VC_JERK _UxGT("Vc-jerk")
-#else
- #define MSG_VA_JERK _UxGT("Vx-jerk")
- #define MSG_VB_JERK _UxGT("Vy-jerk")
- #define MSG_VC_JERK _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK _UxGT("Ve-jerk")
-#define MSG_JUNCTION_DEVIATION _UxGT("Odchylka spoje")
-#define MSG_VELOCITY _UxGT("Rychlost")
-#define MSG_VMAX _UxGT("Vmax ")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("VTrav min")
-#define MSG_ACCELERATION _UxGT("Akcelerace")
-#define MSG_AMAX _UxGT("Amax ")
-#define MSG_A_RETRACT _UxGT("A-retrakt")
-#define MSG_A_TRAVEL _UxGT("A-přejezd")
-#define MSG_STEPS_PER_MM _UxGT("Kroků/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("Akroků/mm")
- #define MSG_BSTEPS _UxGT("Bkroků/mm")
- #define MSG_CSTEPS _UxGT("Ckroků/mm")
-#else
- #define MSG_ASTEPS _UxGT("Xkroků/mm")
- #define MSG_BSTEPS _UxGT("Ykroků/mm")
- #define MSG_CSTEPS _UxGT("Zkroků/mm")
-#endif
-#define MSG_ESTEPS _UxGT("Ekroků/mm")
-#define MSG_E1STEPS _UxGT("E1kroků/mm")
-#define MSG_E2STEPS _UxGT("E2kroků/mm")
-#define MSG_E3STEPS _UxGT("E3kroků/mm")
-#define MSG_E4STEPS _UxGT("E4kroků/mm")
-#define MSG_E5STEPS _UxGT("E5kroků/mm")
-#define MSG_E6STEPS _UxGT("E6kroků/mm")
-#define MSG_TEMPERATURE _UxGT("Teplota")
-#define MSG_MOTION _UxGT("Pohyb")
-#define MSG_FILAMENT _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E na mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Fil. Prum.")
-#define MSG_FILAMENT_UNLOAD _UxGT("Vysunout mm")
-#define MSG_FILAMENT_LOAD _UxGT("Zavést mm")
-#define MSG_ADVANCE_K _UxGT("K pro posun")
-#define MSG_CONTRAST _UxGT("Kontrast LCD")
-#define MSG_STORE_EEPROM _UxGT("Uložit nastavení")
-#define MSG_LOAD_EEPROM _UxGT("Načíst nastavení")
-#define MSG_RESTORE_FAILSAFE _UxGT("Obnovit výchozí")
-#define MSG_INIT_EEPROM _UxGT("Inic. EEPROM")
-#define MSG_MEDIA_UPDATE _UxGT("Aktualizace z SD")
-#define MSG_RESET_PRINTER _UxGT("Reset tiskárny")
-#define MSG_REFRESH _UxGT("Obnovit")
-#define MSG_WATCH _UxGT("Info obrazovka")
-#define MSG_PREPARE _UxGT("Připrava tisku")
-#define MSG_TUNE _UxGT("Doladění tisku")
-#define MSG_START_PRINT _UxGT("Spustit tisk")
-#define MSG_BUTTON_PRINT _UxGT("Tisk")
-#define MSG_BUTTON_CANCEL _UxGT("Zrušit")
-#define MSG_PAUSE_PRINT _UxGT("Pozastavit tisk")
-#define MSG_RESUME_PRINT _UxGT("Obnovit tisk")
-#define MSG_STOP_PRINT _UxGT("Zastavit tisk")
-#define MSG_OUTAGE_RECOVERY _UxGT("Obnova výpadku")
-#define MSG_MEDIA_MENU _UxGT("Tisknout z SD")
-#define MSG_NO_MEDIA _UxGT("Žádná SD karta")
-#define MSG_DWELL _UxGT("Uspáno...")
-#define MSG_USERWAIT _UxGT("Čekání na uživ...")
-#define MSG_PRINT_PAUSED _UxGT("Tisk pozastaven")
-#define MSG_PRINTING _UxGT("Tisknu...")
-#define MSG_PRINT_ABORTED _UxGT("Tisk zrušen")
-#define MSG_NO_MOVE _UxGT("Žádný pohyb.")
-#define MSG_KILLED _UxGT("PŘERUSENO. ")
-#define MSG_STOPPED _UxGT("ZASTAVENO. ")
-#define MSG_CONTROL_RETRACT _UxGT("Retrakt mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Výměna Re.mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Retraktovat V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Zvednuti Z mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("S UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("S UnRet V")
-#define MSG_AUTORETRACT _UxGT("AutoRetr.")
-#define MSG_FILAMENT_SWAP_LENGTH _UxGT("Délka retrakce")
-#define MSG_TOOL_CHANGE _UxGT("Výměna nástroje")
-#define MSG_TOOL_CHANGE_ZLIFT _UxGT("Zdvih Z")
-#define MSG_SINGLENOZZLE_PRIME_SPD _UxGT("Rychlost primár.")
-#define MSG_SINGLENOZZLE_RETRACT_SPD _UxGT("Rychlost retrak.")
-#define MSG_NOZZLE_STANDBY _UxGT("Tryska standby")
-#define MSG_FILAMENTCHANGE _UxGT("Vyměnit filament")
-#define MSG_FILAMENTLOAD _UxGT("Zavést filament")
-#define MSG_FILAMENTUNLOAD _UxGT("Vysunout filament")
-#define MSG_FILAMENTUNLOAD_ALL _UxGT("Vysunout vše")
+ PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Provádím G29");
+ PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL nástroje");
+ PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
+ PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Manuální síť bodů");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Vložte kartu, změřte");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Změřte");
+ PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Odstraňte a změřte");
+ PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Přesun na další");
+ PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Aktivovat UBL");
+ PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Deaktivovat UBL");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Teplota podložky");
+ PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Teplota podložky");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Teplota hotendu");
+ PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Teplota hotendu");
+ PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Úprava sítě bodů");
+ PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Upravit vlastní síť");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Doladit síť bodů");
+ PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Konec úprav sítě");
+ PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Vlastní síť");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Vytvořit síť");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = _UxGT("Síť bodů ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("Síť bodů ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Studená síť bodů");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Upravit výšku sítě");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Výška");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Zkontrolovat síť");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("Kontrola sítě ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Kontrola sítě ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Kontrola vlast. sítě");
+ PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Pokračovat v síťi");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Síťové rovnání");
+ PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-bodové rovnání");
+ PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Mřížkové rovnání");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Srovnat podložku");
+ PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Postranní body");
+ PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Typ sítě bodu");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Exportovat síť");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Exportovat do PC");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Exportovat do CSV");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Záloha do PC");
+ PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Info o UBL do PC");
+ PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Hustota mřížky");
+ PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Ruční hustota");
+ PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Chytrá hustota");
+ PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Zaplnit mřížku");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Zrušit všechno");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Zrušit poslední");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Upravit všechny");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Upravit poslední");
+ PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Uložiště sítí");
+ PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Paměťový slot");
+ PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Načíst síť bodů");
+ PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Uložit síť bodů");
+ PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("M117 Síť %i načtena");
+ PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("M117 Síť %i uložena");
+ PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Nedostatek místa");
+ PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Ch.: Uložit UBL");
+ PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Ch.: Obnovit UBL");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Konec Z-Offsetu");
+ PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Postupně");
+ PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Studená síť bodů");
+ PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2. Chytrá hustota");
+ PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Zkontrolovat síť");
+ PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Upravit všechny");
+ PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Zkontrolovat síť");
+ PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Upravit všechny");
+ PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7. Uložit síť bodů");
-#define MSG_INIT_MEDIA _UxGT("Načíst SD kartu")
-#define MSG_CHANGE_MEDIA _UxGT("Vyměnit SD kartu")
-#define MSG_ZPROBE_OUT _UxGT("Sonda Z mimo podl")
-#define MSG_SKEW_FACTOR _UxGT("Faktor zkosení")
-#define MSG_BLTOUCH _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch self-test")
-#define MSG_BLTOUCH_RESET _UxGT("BLTouch reset")
-#define MSG_BLTOUCH_DEPLOY _UxGT("BLTouch vysunout")
-#define MSG_BLTOUCH_SW_MODE _UxGT("SW výsun BLTouch")
-#define MSG_BLTOUCH_5V_MODE _UxGT("BLTouch 5V režim")
-#define MSG_BLTOUCH_OD_MODE _UxGT("BLTouch OD režim")
-#define MSG_BLTOUCH_STOW _UxGT("BLTouch zasunout")
-#define MSG_MANUAL_DEPLOY _UxGT("Vysunout Z-sondu")
-#define MSG_MANUAL_STOW _UxGT("Zasunout Z-sondu")
-#define MSG_HOME_FIRST _UxGT("Domů %s%s%s první")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Z ofset")
-#define MSG_BABYSTEP_X _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
-#define MSG_BABYSTEP_TOTAL _UxGT("Celkem")
-#define MSG_ENDSTOP_ABORT _UxGT("Endstop abort")
-#define MSG_HEATING_FAILED_LCD _UxGT("Chyba zahřívání")
-#define MSG_HEATING_FAILED_LCD_BED _UxGT("Chyba zahř.podl.")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("REDUND. TEPLOTA")
-#define MSG_THERMAL_RUNAWAY _UxGT("TEPLOTNÍ ÚNIK")
-#define MSG_THERMAL_RUNAWAY_BED _UxGT("TEPL. ÚNIK PODL.")
-#define MSG_ERR_MAXTEMP _UxGT("VYSOKÁ TEPLOTA")
-#define MSG_ERR_MINTEMP _UxGT("NÍZKA TEPLOTA")
-#define MSG_ERR_MAXTEMP_BED _UxGT("VYS. TEPL. PODL.")
-#define MSG_ERR_MINTEMP_BED _UxGT("NÍZ. TEPL. PODL.")
-#define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Err: MAXTEMP KOMORA")
-#define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err: MINTEMP KOMORA")
-#define MSG_ERR_Z_HOMING _UxGT("Domů XY první")
-#define MSG_HALTED _UxGT("TISK. ZASTAVENA")
-#define MSG_PLEASE_RESET _UxGT("Proveďte reset")
-#define MSG_SHORT_DAY _UxGT("d")
-#define MSG_SHORT_HOUR _UxGT("h")
-#define MSG_SHORT_MINUTE _UxGT("m")
-#define MSG_HEATING _UxGT("Zahřívání...")
-#define MSG_COOLING _UxGT("Chlazení...")
-#if LCD_WIDTH >= 20
- #define MSG_BED_HEATING _UxGT("Zahřívání podložky")
-#else
- #define MSG_BED_HEATING _UxGT("Zahřívání podl.")
-#endif
-#if LCD_WIDTH >= 20
- #define MSG_BED_COOLING _UxGT("Chlazení podložky")
-#else
- #define MSG_BED_COOLING _UxGT("Chlazení podl.")
-#endif
-#define MSG_DELTA_CALIBRATE _UxGT("Delta Kalibrace")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Kalibrovat X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Kalibrovat Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Kalibrovat Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Kalibrovat Střed")
-#define MSG_DELTA_SETTINGS _UxGT("Delta nastavení")
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Autokalibrace")
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Nast.výšku delty")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE _UxGT("Nast. Z-ofset")
-#define MSG_DELTA_DIAG_ROD _UxGT("Diag rameno")
-#define MSG_DELTA_HEIGHT _UxGT("Výška")
-#define MSG_DELTA_RADIUS _UxGT("Poloměr")
-#define MSG_INFO_MENU _UxGT("O tiskárně")
-#define MSG_INFO_PRINTER_MENU _UxGT("Info o tiskárně")
-#define MSG_3POINT_LEVELING _UxGT("3-bodové rovnání")
-#define MSG_LINEAR_LEVELING _UxGT("Lineárni rovnání")
-#define MSG_BILINEAR_LEVELING _UxGT("Bilineární rovnání")
-#define MSG_UBL_LEVELING _UxGT("Unified Bed Leveling")
-#define MSG_MESH_LEVELING _UxGT("Mřížkové rovnání")
-#define MSG_INFO_STATS_MENU _UxGT("Statistika")
-#define MSG_INFO_BOARD_MENU _UxGT("Info o desce")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Termistory")
-#define MSG_INFO_EXTRUDERS _UxGT("Extrudéry")
-#define MSG_INFO_BAUDRATE _UxGT("Rychlost")
-#define MSG_INFO_PROTOCOL _UxGT("Protokol")
-#define MSG_CASE_LIGHT _UxGT("Osvětlení")
-#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Jas světla")
+ PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Nastavení LED");
+ PROGMEM Language_Str MSG_LEDS = _UxGT("Světla");
+ PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Světla Předvolby");
+ PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Červená");
+ PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Oranžová");
+ PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Žlutá");
+ PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Zelená");
+ PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Modrá");
+ PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
+ PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Fialová");
+ PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Bílá");
+ PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Výchozí");
+ PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Vlastní světla");
+ PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Červená intenzita");
+ PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Zelená intezita");
+ PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Modrá intenzita");
+ PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Bílá intenzita");
+ PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Jas");
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Počet tisků")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Dokončeno")
- #define MSG_INFO_PRINT_TIME _UxGT("Celkový čas")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Nejdelší tisk")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Celkem vytlačeno")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Tisky")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Hotovo")
- #define MSG_INFO_PRINT_TIME _UxGT("Čas")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Nejdelší")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Vytlačeno")
-#endif
+ PROGMEM Language_Str MSG_MOVING = _UxGT("Posouvání...");
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("Uvolnit XY");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Posunout X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Posunout Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Posunout Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extrudér");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Extrudér ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Extrudér ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Extrudér ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Extrudér ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Extrudér ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Extrudér ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Hotend je studený");
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Posunout o %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Posunout o 0,1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Posunout o 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Posunout o 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Rychlost");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Výška podl.");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Tryska");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Tryska ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Tryska ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Tryska ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Tryska ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Tryska ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Tryska ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Podložka");
+ PROGMEM Language_Str MSG_CHAMBER = _UxGT("Komora");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Rychlost vent.");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Rychlost vent. 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Rychlost vent. 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Rychlost vent. 3");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Rychlost ex. vent.");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1 = _UxGT("Rychlost ex. vent. 1");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2 = _UxGT("Rychlost ex. vent. 2");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3 = _UxGT("Rychlost ex. vent. 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Průtok");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Průtok ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Průtok ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Průtok ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Průtok ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Průtok ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Průtok ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Ovládaní");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fakt");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Autoteplota");
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("Zap");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Vyp");
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Vybrat");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Vybrat ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Vybrat ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Vybrat ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Vybrat ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Vybrat ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Vybrat ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Zrychl");
+ PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Odchylka spoje");
+ PROGMEM Language_Str MSG_VELOCITY = _UxGT("Rychlost");
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Akcelerace");
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-retrakt");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-přejezd");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Kroků/mm");
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT("kroků/mm");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT("kroků/mm");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT("kroků/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("Ekroků/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT("kroků/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT("kroků/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT("kroků/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT("kroků/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT("kroků/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT("kroků/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Teplota");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Pohyb");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E na mm3");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Fil. Prum.");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Fil. Prum. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Fil. Prum. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Fil. Prum. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Fil. Prum. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Fil. Prum. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Fil. Prum. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Vysunout mm");
+ PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Zavést mm");
+ PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("K pro posun");
+ PROGMEM Language_Str MSG_ADVANCE_K_E0 = _UxGT("K pro posun ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_ADVANCE_K_E1 = _UxGT("K pro posun ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_ADVANCE_K_E2 = _UxGT("K pro posun ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_ADVANCE_K_E3 = _UxGT("K pro posun ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_ADVANCE_K_E4 = _UxGT("K pro posun ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_ADVANCE_K_E5 = _UxGT("K pro posun ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("Kontrast LCD");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Uložit nastavení");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Načíst nastavení");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Obnovit výchozí");
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Inic. EEPROM");
+ PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Aktualizace z SD");
+ PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Reset tiskárny");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Obnovit");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Info obrazovka");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Připrava tisku");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Doladění tisku");
+ PROGMEM Language_Str MSG_START_PRINT = _UxGT("Spustit tisk");
+ PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Tisk");
+ PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Zrušit");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pozastavit tisk");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Obnovit tisk");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Zastavit tisk");
+ PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Obnova výpadku");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Tisknout z SD");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Žádná SD karta");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Uspáno...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Čekání na uživ...");
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Tisk pozastaven");
+ PROGMEM Language_Str MSG_PRINTING = _UxGT("Tisknu...");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Tisk zrušen");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Žádný pohyb.");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("PŘERUSENO. ");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("ZASTAVENO. ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retrakt mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Výměna Re.mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retraktovat V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Zvednuti Z mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("UnRet V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("AutoRetr.");
+ PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Délka retrakce");
+ PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Výměna nástroje");
+ PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Zdvih Z");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD = _UxGT("Rychlost primár.");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD = _UxGT("Rychlost retrak.");
+ PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Tryska standby");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Vyměnit filament");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Vyměnit filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Vyměnit filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Vyměnit filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Vyměnit filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Vyměnit filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Vyměnit filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Zavést filament");
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E0 = _UxGT("Zavést filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E1 = _UxGT("Zavést filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E2 = _UxGT("Zavést filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E3 = _UxGT("Zavést filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E4 = _UxGT("Zavést filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E5 = _UxGT("Zavést filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0 = _UxGT("Vysunout filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1 = _UxGT("Vysunout filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2 = _UxGT("Vysunout filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3 = _UxGT("Vysunout filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4 = _UxGT("Vysunout filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5 = _UxGT("Vysunout filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Vysunout vše");
-#define MSG_INFO_MIN_TEMP _UxGT("Teplota min")
-#define MSG_INFO_MAX_TEMP _UxGT("Teplota max")
-#define MSG_INFO_PSU _UxGT("Nap. zdroj")
-#define MSG_DRIVE_STRENGTH _UxGT("Buzení motorů")
-#define MSG_DAC_PERCENT _UxGT("Motor %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("Uložit do EEPROM")
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("TISK POZASTAVEN")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("ZAVEDENÍ FILAMENTU")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("VYSUNUTÍ FILAMENTU")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("MOŽNOSTI OBNOVENÍ:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Vytlačit víc")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Obnovit tisk")
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Tryska: ")
-#define MSG_RUNOUT_SENSOR _UxGT("Senzor filamentu")
-#define MSG_ERR_HOMING_FAILED _UxGT("Parkování selhalo")
-#define MSG_ERR_PROBING_FAILED _UxGT("Kalibrace selhala")
-#define MSG_M600_TOO_COLD _UxGT("M600: Moc studený")
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Načíst SD kartu");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Vyměnit SD kartu");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z mimo podl");
+ PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Faktor zkosení");
+ PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch self-test");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("BLTouch reset");
+ PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("BLTouch vysunout");
+ PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("SW výsun BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("BLTouch 5V režim");
+ PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("BLTouch OD režim");
+ PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("BLTouch zasunout");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Vysunout Z-sondu");
+ PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Zasunout Z-sondu");
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Domů %s%s%s první");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Z ofset");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
+ PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Celkem");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Endstop abort");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Chyba zahřívání");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED = _UxGT("Chyba zahř.podl.");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("REDUND. TEPLOTA");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("TEPLOTNÍ ÚNIK");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("TEPL. ÚNIK PODL.");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("VYSOKÁ TEPLOTA");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("NÍZKA TEPLOTA");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("VYS. TEPL. PODL.");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("NÍZ. TEPL. PODL.");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER = _UxGT("Err: MAXTEMP KOMORA");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER = _UxGT("Err: MINTEMP KOMORA");
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Domů XY první");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("TISK. ZASTAVENA");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Proveďte reset");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d");
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h");
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m");
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Zahřívání...");
+ PROGMEM Language_Str MSG_COOLING = _UxGT("Chlazení...");
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Zahřívání podložky");
+ #else
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Zahřívání podl.");
+ #endif
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Chlazení podložky");
+ #else
+ PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Chlazení podl.");
+ #endif
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrace");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibrovat X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibrovat Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibrovat Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibrovat Střed");
+ PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Delta nastavení");
+ PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Autokalibrace");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Nast.výšku delty");
+ PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Nast. Z-ofset");
+ PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Diag rameno");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Výška");
+ PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Poloměr");
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("O tiskárně");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Info o tiskárně");
+ PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-bodové rovnání");
+ PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Lineárni rovnání");
+ PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Bilineární rovnání");
+ PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
+ PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Mřížkové rovnání");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Statistika");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Info o desce");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistory");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrudéry");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Rychlost");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokol");
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Osvětlení");
+ PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jas světla");
-#define MSG_MMU2_FILAMENT_CHANGE_HEADER _UxGT("VÝMĚNA FILAMENTU")
-#define MSG_MMU2_CHOOSE_FILAMENT_HEADER _UxGT("VYBERTE FILAMENT")
-#define MSG_MMU2_MENU _UxGT("MMU")
-#define MSG_MMU2_WRONG_FIRMWARE _UxGT("Aktual. MMU firmware!")
-#define MSG_MMU2_NOT_RESPONDING _UxGT("MMU potř. pozornost.")
-#define MSG_MMU2_RESUME _UxGT("Obnovit tisk")
-#define MSG_MMU2_RESUMING _UxGT("Obnovování...")
-#define MSG_MMU2_LOAD_FILAMENT _UxGT("Zavést filament")
-#define MSG_MMU2_LOAD_ALL _UxGT("Zavést všechny")
-#define MSG_MMU2_LOAD_TO_NOZZLE _UxGT("Zavést do trysky")
-#define MSG_MMU2_EJECT_FILAMENT _UxGT("Vysunout filament")
-#define MSG_MMU2_EJECT_FILAMENT0 _UxGT("Vysun. filament 1")
-#define MSG_MMU2_EJECT_FILAMENT1 _UxGT("Vysun. filament 2")
-#define MSG_MMU2_EJECT_FILAMENT2 _UxGT("Vysun. filament 3")
-#define MSG_MMU2_EJECT_FILAMENT3 _UxGT("Vysun. filament 4")
-#define MSG_MMU2_EJECT_FILAMENT4 _UxGT("Vysun. filament 5")
-#define MSG_MMU2_UNLOAD_FILAMENT _UxGT("Vytáhnout filament")
-#define MSG_MMU2_LOADING_FILAMENT _UxGT("Zavádění fil. %i...")
-#define MSG_MMU2_EJECTING_FILAMENT _UxGT("Vytahování fil. ...")
-#define MSG_MMU2_UNLOADING_FILAMENT _UxGT("Vysouvání fil....")
-#define MSG_MMU2_ALL _UxGT("Všechny")
-#define MSG_MMU2_FILAMENT0 _UxGT("Filament 1")
-#define MSG_MMU2_FILAMENT1 _UxGT("Filament 2")
-#define MSG_MMU2_FILAMENT2 _UxGT("Filament 3")
-#define MSG_MMU2_FILAMENT3 _UxGT("Filament 4")
-#define MSG_MMU2_FILAMENT4 _UxGT("Filament 5")
-#define MSG_MMU2_RESET _UxGT("Resetovat MMU")
-#define MSG_MMU2_RESETTING _UxGT("Resetování MMU...")
-#define MSG_MMU2_EJECT_RECOVER _UxGT("Vytáhněte, klikněte")
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Počet tisků");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Dokončeno");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Celkový čas");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Nejdelší tisk");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Celkem vytlačeno");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Tisky");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Hotovo");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Čas");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Nejdelší");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Vytlačeno");
+ #endif
-#define MSG_MIX _UxGT("Mix")
-#define MSG_MIX_COMPONENT _UxGT("Komponenta")
-#define MSG_MIXER _UxGT("Mixér")
-#define MSG_GRADIENT _UxGT("Přechod")
-#define MSG_FULL_GRADIENT _UxGT("Celý přechod")
-#define MSG_TOGGLE_MIX _UxGT("Přepnout mix")
-#define MSG_CYCLE_MIX _UxGT("Střídat mix")
-#define MSG_GRADIENT_MIX _UxGT("Přechod mix")
-#define MSG_REVERSE_GRADIENT _UxGT("Opačný přechod")
-#if LCD_WIDTH >= 20
- #define MSG_ACTIVE_VTOOL _UxGT("Aktivní V-nástroj")
- #define MSG_START_VTOOL _UxGT("Spustit V-nástroj")
- #define MSG_END_VTOOL _UxGT("Ukončit V-nástroj")
- #define MSG_GRADIENT_ALIAS _UxGT("Alias V-nástroje")
- #define MSG_RESET_VTOOLS _UxGT("Resetovat V-nástroj")
- #define MSG_COMMIT_VTOOL _UxGT("Uložit V-nástroj mix")
- #define MSG_VTOOLS_RESET _UxGT("V-nástroj resetovat")
-#else
- #define MSG_ACTIVE_VTOOL _UxGT("Aktivní V-nástr.")
- #define MSG_START_VTOOL _UxGT("Spustit V-nástr.")
- #define MSG_END_VTOOL _UxGT("Ukončit V-nástr.")
- #define MSG_GRADIENT_ALIAS _UxGT("Alias V-nástr.")
- #define MSG_RESET_VTOOLS _UxGT("Reset. V-nástr.")
- #define MSG_COMMIT_VTOOL _UxGT("Uložit V-nás. mix")
- #define MSG_VTOOLS_RESET _UxGT("V-nástr. reset.")
-#endif
-#define MSG_START_Z _UxGT("Počáteční Z")
-#define MSG_END_Z _UxGT(" Koncové Z")
-#define MSG_BRICKOUT _UxGT("Brickout")
-#define MSG_INVADERS _UxGT("Invaders")
-#define MSG_SNAKE _UxGT("Sn4k3")
-#define MSG_MAZE _UxGT("Bludiště")
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Teplota min");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Teplota max");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Nap. zdroj");
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Buzení motorů");
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("Motor %");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Uložit do EEPROM");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("VÝMĚNA FILAMENTU");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("TISK POZASTAVEN");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ZAVEDENÍ FILAMENTU");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("VYSUNUTÍ FILAMENTU");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("MOŽNOSTI OBNOVENÍ:");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Vytlačit víc");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Obnovit tisk");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Tryska: ");
+ PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Senzor filamentu");
+ PROGMEM Language_Str MSG_LCD_HOMING_FAILED = _UxGT("Parkování selhalo");
+ PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Kalibrace selhala");
+ PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: Moc studený");
-#define MSG_EXPECTED_PRINTER _UxGT("Nesprávná tiskárna")
+ PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("VYBERTE FILAMENT");
+ PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
+ PROGMEM Language_Str MSG_MMU2_WRONG_FIRMWARE = _UxGT("Aktual. MMU firmware!");
+ PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU potř. pozornost.");
+ PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Obnovit tisk");
+ PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Obnovování...");
+ PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Zavést filament");
+ PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Zavést všechny");
+ PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Zavést do trysky");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Vysunout filament");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT0 = _UxGT("Vysun. filament 1");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT1 = _UxGT("Vysun. filament 2");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT2 = _UxGT("Vysun. filament 3");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT3 = _UxGT("Vysun. filament 4");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT4 = _UxGT("Vysun. filament 5");
+ PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Vytáhnout filament");
+ PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Zavádění fil. %i...");
+ PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Vytahování fil. ...");
+ PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Vysouvání fil....");
+ PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Všechny");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT0 = _UxGT("Filament 1");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT1 = _UxGT("Filament 2");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT2 = _UxGT("Filament 3");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT3 = _UxGT("Filament 4");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT4 = _UxGT("Filament 5");
+ PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Resetovat MMU");
+ PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Resetování MMU...");
+ PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Vytáhněte, klikněte");
-#if LCD_HEIGHT >= 4
- // Up to 3 lines allowed
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Stikněte tlačítko")
- #define MSG_ADVANCED_PAUSE_WAITING_2 _UxGT("pro obnovení tisku")
- #define MSG_PAUSE_PRINT_INIT_1 _UxGT("Parkování...")
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Čekejte prosím")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("na zahájení")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("výměny filamentu")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Vložte filament")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("a stiskněte")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("tlačítko...")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Klikněte pro")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("nahřátí trysky")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Čekejte prosím")
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("na nahřátí tr.")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Čekejte prosím")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("na vysunuti")
- #define MSG_FILAMENT_CHANGE_UNLOAD_3 _UxGT("filamentu")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Čekejte prosím")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("na zavedení")
- #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("filamentu")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Vyčkejte na")
- #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("vytlačení")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Klikněte pro")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_2 _UxGT("ukončení")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_3 _UxGT("vytlačování")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Čekejte prosím")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("na pokračování")
- #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("tisku")
-#else // LCD_HEIGHT < 4
- // Up to 2 lines allowed
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Stikněte tlač.")
- #define MSG_ADVANCED_PAUSE_WAITING_2 _UxGT("pro obnovení")
- #define MSG_PAUSE_PRINT_INIT_1 _UxGT("Parkování...")
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Čekejte...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Vložte, klikněte")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Klikněte pro")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("nahřátí")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Nahřívání...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Vysouvání...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Zavádění...")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Vytlačování...")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Klikněte pro")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_2 _UxGT("ukončení")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Pokračování...")
-#endif // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_MIX = _UxGT("Mix");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_1 = _UxGT("Komponenta 1");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_2 = _UxGT("Komponenta 2");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_3 = _UxGT("Komponenta 3");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_4 = _UxGT("Komponenta 4");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_5 = _UxGT("Komponenta 5");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_6 = _UxGT("Komponenta 6");
+ PROGMEM Language_Str MSG_MIXER = _UxGT("Mixér");
+ PROGMEM Language_Str MSG_GRADIENT = _UxGT("Přechod");
+ PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Celý přechod");
+ PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Přepnout mix");
+ PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Střídat mix");
+ PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Přechod mix");
+ PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Opačný přechod");
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Aktivní V-nástroj");
+ PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Spustit V-nástroj");
+ PROGMEM Language_Str MSG_END_VTOOL = _UxGT("Ukončit V-nástroj");
+ PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias V-nástroje");
+ PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Resetovat V-nástroj");
+ PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Uložit V-nástroj mix");
+ PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-nástroj resetovat");
+ #else
+ PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Aktivní V-nástr.");
+ PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Spustit V-nástr.");
+ PROGMEM Language_Str MSG_END_VTOOL = _UxGT("Ukončit V-nástr.");
+ PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias V-nástr.");
+ PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Reset. V-nástr.");
+ PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Uložit V-nás. mix");
+ PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-nástr. reset.");
+ #endif
+ PROGMEM Language_Str MSG_START_Z = _UxGT("Počáteční Z:");
+ PROGMEM Language_Str MSG_END_Z = _UxGT(" Koncové Z:");
+ PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
+ PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
+ PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
+ PROGMEM Language_Str MSG_MAZE = _UxGT("Bludiště");
-#define MSG_TMC_DRIVERS _UxGT("TMC budiče")
-#define MSG_TMC_CURRENT _UxGT("Proud budičů")
-#define MSG_TMC_HYBRID_THRS _UxGT("Hybridní práh")
-#define MSG_TMC_HOMING_THRS _UxGT("Domů bez senzorů")
-#define MSG_TMC_STEPPING_MODE _UxGT("Režim kroků")
-#define MSG_TMC_STEALTH_ENABLED _UxGT("StealthChop povolen")
-#define MSG_SERVICE_RESET _UxGT("Reset")
-#define MSG_SERVICE_IN _UxGT(" za:")
-#define MSG_BACKLASH _UxGT("Vůle")
-#define MSG_BACKLASH_CORRECTION _UxGT("Korekce")
-#define MSG_BACKLASH_SMOOTHING _UxGT("Vyhlazení")
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Nesprávná tiskárna");
+
+ #if LCD_HEIGHT >= 4
+ // Up to 3 lines allowed
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Stikněte tlačítko", "pro obnovení tisku"));
+ PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Parkování..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Čekejte prosím", "na zahájení", "výměny filamentu"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Vložte filament", "a stiskněte", "tlačítko..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Klikněte pro", "nahřátí trysky"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Čekejte prosím", "na nahřátí tr."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Čekejte prosím", "na vysunuti", "filamentu"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Čekejte prosím", "na zavedení", "filamentu"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Vyčkejte na", "vytlačení"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Klikněte pro", "ukončení", "vytlačování"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Čekejte prosím", "na pokračování", "tisku"));
+ #else // LCD_HEIGHT < 4
+ // Up to 2 lines allowed
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Stikněte tlač.", "pro obnovení"));
+ PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Parkování..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Čekejte..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Vložte, klikněte"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Klikněte pro", "nahřátí"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Nahřívání..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Vysouvání..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Zavádění..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Vytlačování..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Klikněte pro", "ukončení"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Pokračování..."));
+ #endif // LCD_HEIGHT < 4
+
+ PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("TMC budiče");
+ PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Proud budičů");
+ PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Hybridní práh");
+ PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Domů bez senzorů");
+ PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Režim kroků");
+ PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop povolen");
+ PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Reset");
+ PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" za:");
+ PROGMEM Language_Str MSG_BACKLASH = _UxGT("Vůle");
+ PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
+ PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
+ PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
+ PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Korekce");
+ PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Vyhlazení");
+}
diff --git a/Marlin/src/lcd/language/language_da.h b/Marlin/src/lcd/language/language_da.h
index 6a8d48175d80..98b47d75117a 100644
--- a/Marlin/src/lcd/language/language_da.h
+++ b/Marlin/src/lcd/language/language_da.h
@@ -30,223 +30,212 @@
*/
#define DISPLAY_CHARSET_ISO10646_1
-#define CHARSIZE 2
-#define WELCOME_MSG MACHINE_NAME _UxGT(" er klar")
-#define MSG_MEDIA_INSERTED _UxGT("Kort isat")
-#define MSG_MEDIA_REMOVED _UxGT("Kort fjernet")
-#define MSG_LCD_ENDSTOPS _UxGT("Endstops") // Max length 8 characters
-#define MSG_MAIN _UxGT("Menu")
-#define MSG_AUTOSTART _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS _UxGT("Slå alle steppere fra")
-#define MSG_AUTO_HOME _UxGT("Auto Home") // G28
-#define MSG_AUTO_HOME_X _UxGT("Home X")
-#define MSG_AUTO_HOME_Y _UxGT("Home Y")
-#define MSG_AUTO_HOME_Z _UxGT("Home Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Homing XYZ")
-#define MSG_LEVEL_BED_WAITING _UxGT("Klik når du er klar")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Næste punkt")
-#define MSG_LEVEL_BED_DONE _UxGT("Bed level er færdig!")
-#define MSG_SET_HOME_OFFSETS _UxGT("Sæt forsk. af home")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Forsk. er nu aktiv")
-#define MSG_SET_ORIGIN _UxGT("Sæt origin")
-#define MSG_PREHEAT_1 _UxGT("Forvarm " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N _UxGT("Forvarm " PREHEAT_1_LABEL " ")
-#define MSG_PREHEAT_1_ALL _UxGT("Forvarm " PREHEAT_1_LABEL " Alle")
-#define MSG_PREHEAT_1_BEDONLY _UxGT("Forvarm " PREHEAT_1_LABEL " Bed")
-#define MSG_PREHEAT_1_SETTINGS _UxGT("Forvarm " PREHEAT_1_LABEL " conf")
-#define MSG_PREHEAT_2 _UxGT("Forvarm " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N _UxGT("Forvarm " PREHEAT_2_LABEL " ")
-#define MSG_PREHEAT_2_ALL _UxGT("Forvarm " PREHEAT_2_LABEL " Alle")
-#define MSG_PREHEAT_2_BEDONLY _UxGT("Forvarm " PREHEAT_2_LABEL " Bed")
-#define MSG_PREHEAT_2_SETTINGS _UxGT("Forvarm " PREHEAT_2_LABEL " conf")
-#define MSG_COOLDOWN _UxGT("Afkøl")
-#define MSG_SWITCH_PS_ON _UxGT("Slå strøm til")
-#define MSG_SWITCH_PS_OFF _UxGT("Slå strøm fra")
-#define MSG_EXTRUDE _UxGT("Extruder")
-#define MSG_RETRACT _UxGT("Retract")
-#define MSG_MOVE_AXIS _UxGT("Flyt akser")
-#define MSG_BED_LEVELING _UxGT("Juster bed")
-#define MSG_LEVEL_BED _UxGT("Juster bed")
-#define MSG_MOVE_X _UxGT("Flyt X")
-#define MSG_MOVE_Y _UxGT("Flyt Y")
-#define MSG_MOVE_Z _UxGT("Flyt Z")
-#define MSG_MOVE_E _UxGT("Extruder")
-#define MSG_MOVE_Z_DIST _UxGT("Flyt %smm")
-#define MSG_MOVE_01MM _UxGT("Flyt 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Flyt 1mm")
-#define MSG_MOVE_10MM _UxGT("Flyt 10mm")
-#define MSG_SPEED _UxGT("Hastighed")
-#define MSG_BED_Z _UxGT("Plade Z")
-#define MSG_NOZZLE _UxGT("Dyse")
+namespace Language_da {
+ using namespace Language_en; // Inherit undefined strings from English
-#define MSG_BED _UxGT("Plade")
-#define MSG_FAN_SPEED _UxGT("Blæser hastighed")
-#define MSG_FLOW _UxGT("Flow")
-#define MSG_CONTROL _UxGT("Kontrol")
-#define MSG_MIN _UxGT(" \002 Min")
-#define MSG_MAX _UxGT(" \002 Max")
-#define MSG_FACTOR _UxGT(" \002 Fact")
-#define MSG_AUTOTEMP _UxGT("Autotemp")
-#define MSG_LCD_ON _UxGT("Til")
-#define MSG_LCD_OFF _UxGT("Fra")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Vælg")
-#define MSG_ACC _UxGT("Accel")
-#define MSG_JERK _UxGT("Jerk")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va-jerk")
- #define MSG_VB_JERK _UxGT("Vb-jerk")
- #define MSG_VC_JERK _UxGT("Vc-jerk")
-#else
- #define MSG_VA_JERK _UxGT("Vx-jerk")
- #define MSG_VB_JERK _UxGT("Vy-jerk")
- #define MSG_VC_JERK _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK _UxGT("Ve-jerk")
-#define MSG_VMAX _UxGT("Vmax ")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("VTrav min")
-#define MSG_AMAX _UxGT("Amax ")
-#define MSG_A_RETRACT _UxGT("A-retract")
-#define MSG_A_TRAVEL _UxGT("A-rejse")
-#define MSG_STEPS_PER_MM _UxGT("Steps/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("Asteps/mm")
- #define MSG_BSTEPS _UxGT("Bsteps/mm")
- #define MSG_CSTEPS _UxGT("Csteps/mm")
-#else
- #define MSG_ASTEPS _UxGT("Xsteps/mm")
- #define MSG_BSTEPS _UxGT("Ysteps/mm")
- #define MSG_CSTEPS _UxGT("Zsteps/mm")
-#endif
-#define MSG_ESTEPS _UxGT("Esteps/mm")
-#define MSG_E1STEPS _UxGT("E1steps/mm")
-#define MSG_E2STEPS _UxGT("E2steps/mm")
-#define MSG_E3STEPS _UxGT("E3steps/mm")
-#define MSG_E4STEPS _UxGT("E4steps/mm")
-#define MSG_E5STEPS _UxGT("E5steps/mm")
-#define MSG_E6STEPS _UxGT("E6steps/mm")
-#define MSG_TEMPERATURE _UxGT("Temperatur")
-#define MSG_MOTION _UxGT("Bevægelse")
-#define MSG_FILAMENT _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E i mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Fil. Dia.")
-#define MSG_CONTRAST _UxGT("LCD kontrast")
-#define MSG_STORE_EEPROM _UxGT("Gem i EEPROM")
-#define MSG_LOAD_EEPROM _UxGT("Hent fra EEPROM")
-#define MSG_RESTORE_FAILSAFE _UxGT("Gendan failsafe")
-#define MSG_REFRESH _UxGT("Genopfrisk")
-#define MSG_WATCH _UxGT("Info skærm")
-#define MSG_PREPARE _UxGT("Forbered")
-#define MSG_TUNE _UxGT("Tune")
-#define MSG_PAUSE_PRINT _UxGT("Pause printet")
-#define MSG_RESUME_PRINT _UxGT("Forsæt printet")
-#define MSG_STOP_PRINT _UxGT("Stop printet")
-#define MSG_MEDIA_MENU _UxGT("Print fra SD")
-#define MSG_NO_MEDIA _UxGT("Intet SD kort")
-#define MSG_DWELL _UxGT("Dvale...")
-#define MSG_USERWAIT _UxGT("Venter på bruger...")
-#define MSG_PRINT_ABORTED _UxGT("Print annulleret")
-#define MSG_NO_MOVE _UxGT("Ingen bevægelse.")
-#define MSG_KILLED _UxGT("DRÆBT. ")
-#define MSG_STOPPED _UxGT("STOPPET. ")
-#define MSG_CONTROL_RETRACT _UxGT("Tilbagetræk mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Skift Re.mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Tilbagetræk V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Hop mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Skift UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet V")
-#define MSG_AUTORETRACT _UxGT("AutoRetr.")
-#define MSG_FILAMENTCHANGE _UxGT("Skift filament")
-#define MSG_INIT_MEDIA _UxGT("Init. SD card")
-#define MSG_CHANGE_MEDIA _UxGT("Skift SD kort")
-#define MSG_ZPROBE_OUT _UxGT("Probe udenfor plade")
-#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Selv-Test")
-#define MSG_BLTOUCH_RESET _UxGT("Reset BLTouch")
-#define MSG_HOME_FIRST _UxGT("Home %s%s%s først")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Z Offset")
-#define MSG_BABYSTEP_X _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Endstop abort")
-#define MSG_HEATING_FAILED_LCD _UxGT("Opvarmning fejlet")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Fejl: reserve temp")
-#define MSG_THERMAL_RUNAWAY _UxGT("Temp løber løbsk")
-#define MSG_ERR_MAXTEMP _UxGT("Fejl: Maks temp")
-#define MSG_ERR_MINTEMP _UxGT("Fejl: Min temp")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Fejl: Maks Plade temp")
-#define MSG_ERR_MINTEMP_BED _UxGT("Fejl: Min Plade temp")
-#define MSG_ERR_Z_HOMING _UxGT("Home XY først")
-#define MSG_HALTED _UxGT("PRINTER STOPPET")
-#define MSG_PLEASE_RESET _UxGT("Reset Venligst")
-#define MSG_SHORT_DAY _UxGT("d") // Kun et bogstav
-#define MSG_SHORT_HOUR _UxGT("h") // Kun et bogstav
-#define MSG_SHORT_MINUTE _UxGT("m") // Kun et bogstav
-#define MSG_HEATING _UxGT("Opvarmer...")
-#define MSG_BED_HEATING _UxGT("Opvarmer plade...")
-#define MSG_DELTA_CALIBRATE _UxGT("Delta Kalibrering")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Kalibrer X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Kalibrer Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Kalibrer Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Kalibrerings Center")
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Danish");
-#define MSG_INFO_MENU _UxGT("Om Printer")
-#define MSG_INFO_PRINTER_MENU _UxGT("Printer Info")
-#define MSG_INFO_STATS_MENU _UxGT("Printer Stats")
-#define MSG_INFO_BOARD_MENU _UxGT("Kort Info")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Thermistors")
-#define MSG_INFO_EXTRUDERS _UxGT("Extruders")
-#define MSG_INFO_BAUDRATE _UxGT("Baud")
-#define MSG_INFO_PROTOCOL _UxGT("Protocol")
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" er klar");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Kort isat");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Kort fjernet");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Menu");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Slå alle steppere fra");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Auto Home"); // G28
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Klik når du er klar");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Næste punkt");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Bed level er færdig!");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Sæt forsk. af home");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Forsk. er nu aktiv");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Sæt origin");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Forvarm ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Forvarm ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Forvarm ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Forvarm ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Forvarm ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Forvarm ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Forvarm ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end")
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" Alle");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" Bed");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" conf");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Forvarm ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Forvarm ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Forvarm ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Forvarm ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Forvarm ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Forvarm ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Forvarm ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" end")
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" end ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" Alle");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" Bed");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Forvarm ") PREHEAT_2_LABEL _UxGT(" conf");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Afkøl");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Slå strøm til");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Slå strøm fra");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extruder");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Flyt akser");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Juster bed");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Juster bed");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Flyt X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Flyt Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Flyt Z");
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Flyt %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Flyt 0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Flyt 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Flyt 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Hastighed");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Plade Z");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Dyse");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Dyse ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Dyse ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Dyse ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Dyse ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Dyse ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Dyse ") LCD_STR_N5;
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Ant. Prints")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Færdige")
- #define MSG_INFO_PRINT_TIME _UxGT("Total print tid")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Længste print")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Total Extruderet")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Prints")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Færdige")
- #define MSG_INFO_PRINT_TIME _UxGT("Total")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Længste")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Extruderet")
-#endif
+ PROGMEM Language_Str MSG_BED = _UxGT("Plade");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Blæser hastighed");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Blæser hastighed 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Blæser hastighed 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Blæser hastighed 3");
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Kontrol");
+ PROGMEM Language_Str MSG_MIN = _UxGT(" \002 Min");
+ PROGMEM Language_Str MSG_MAX = _UxGT(" \002 Max");
+ PROGMEM Language_Str MSG_FACTOR = _UxGT(" \002 Fact");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Autotemp");
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("Til");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Fra");
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Vælg");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Vælg ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Vælg ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Vælg ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Vælg ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Vælg ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Vælg ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-retract");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-rejse");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatur");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Bevægelse");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E i mm3");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Fil. Dia. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Fil. Dia. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Fil. Dia. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Fil. Dia. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Fil. Dia. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Fil. Dia. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD kontrast");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Gem i EEPROM");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Hent fra EEPROM");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Gendan failsafe");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Genopfrisk");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Info skærm");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Forbered");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pause printet");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Forsæt printet");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Stop printet");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Print fra SD");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Intet SD kort");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Dvale...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Venter på bruger...");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Print annulleret");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Ingen bevægelse.");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("DRÆBT. ");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("STOPPET. ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Tilbagetræk mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Skift Re.mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Tilbagetræk V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Skift UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("UnRet V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("AutoRetr.");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Skift filament");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Skift filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Skift filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Skift filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Skift filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Skift filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Skift filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Skift SD kort");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Probe udenfor plade");
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Selv-Test");
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Home %s%s%s først");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Opvarmning fejlet");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Fejl: reserve temp");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("Temp løber løbsk");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Fejl: Maks temp");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Fejl: Min temp");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("Fejl: Maks Plade temp");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Fejl: Min Plade temp");
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Home XY først");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("PRINTER STOPPET");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Reset Venligst");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // Kun et bogstav
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // Kun et bogstav
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // Kun et bogstav
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Opvarmer...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Opvarmer plade...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrering");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibrer X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibrer Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibrer Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibrerings Center");
-#define MSG_INFO_MIN_TEMP _UxGT("Min Temp")
-#define MSG_INFO_MAX_TEMP _UxGT("Max Temp")
-#define MSG_INFO_PSU _UxGT("Strømfors.")
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Om Printer");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Kort Info");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistors");
-#define MSG_DRIVE_STRENGTH _UxGT("Driv Styrke")
-#define MSG_DAC_PERCENT _UxGT("Driv %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Skriv")
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Ant. Prints");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Færdige");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total print tid");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Længste print");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total Extruderet");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Prints");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Færdige");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Længste");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extruderet");
+ #endif
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Forsæt print")
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Strømfors.");
-#define MSG_EXPECTED_PRINTER _UxGT("Forkert printer")
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Driv Styrke");
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("Driv %");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Skriv");
-#if LCD_HEIGHT >= 4
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Vent på start")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("af filament")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("skift")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Vent på")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("filament udskyd.")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Indsæt filament")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("og tryk på knap")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("for at fortsætte...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Vent på")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("filament indtag")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Vent på at print")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("fortsætter")
-#else // LCD_HEIGHT < 4
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Vent venligst...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Udskyder...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Indsæt og klik")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Indtager...")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Fortsætter...")
-#endif // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Forsæt print");
+
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Forkert printer");
+
+ #if LCD_HEIGHT >= 4
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Vent på start", "af filament", "skift"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Vent på", "filament udskyd."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Indsæt filament", "og tryk på knap", "for at fortsætte..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Vent på", "filament indtag"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Vent på at print", "fortsætter"));
+ #else // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Vent venligst..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Udskyder..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Indsæt og klik"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Indtager..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Fortsætter..."));
+ #endif // LCD_HEIGHT < 4
+}
diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h
index 3c505b60ebe9..9fa894bb96e3 100644
--- a/Marlin/src/lcd/language/language_de.h
+++ b/Marlin/src/lcd/language/language_de.h
@@ -29,545 +29,652 @@
*
*/
-#define CHARSIZE 2
+namespace Language_de {
+ using namespace Language_en; // Inherit undefined strings from English
-#define THIS_LANGUAGES_SPECIAL_SYMBOLS _UxGT("ÄäÖöÜüß²³")
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Deutsche");
-#define WELCOME_MSG MACHINE_NAME _UxGT(" bereit")
-#define MSG_YES _UxGT("JA")
-#define MSG_NO _UxGT("NEIN")
-#define MSG_BACK _UxGT("Zurück")
-#define MSG_MEDIA_ABORTING _UxGT("Abbruch...")
-#define MSG_MEDIA_INSERTED _UxGT("Medium erkannt")
-#define MSG_MEDIA_REMOVED _UxGT("Medium entfernt")
-#define MSG_MEDIA_RELEASED _UxGT("Medium freigegeben")
-#define MSG_MEDIA_WAITING _UxGT("Warten auf Medium")
-#define MSG_MEDIA_READ_ERROR _UxGT("Medium Lesefehler")
-#define MSG_MEDIA_USB_REMOVED _UxGT("USB Gerät entfernt")
-#define MSG_MEDIA_USB_FAILED _UxGT("USB Start fehlge.")
-#define MSG_LCD_ENDSTOPS _UxGT("Endstopp") // Max length 8 characters
-#define MSG_LCD_SOFT_ENDSTOPS _UxGT("Software-Endstopp")
-#define MSG_MAIN _UxGT("Hauptmenü")
-#define MSG_ADVANCED_SETTINGS _UxGT("Erw. Einstellungen")
-#define MSG_CONFIGURATION _UxGT("Konfiguration")
-#define MSG_AUTOSTART _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS _UxGT("Motoren deaktivieren") // M84 :: Max length 19 characters
-#define MSG_DEBUG_MENU _UxGT("Debug-Menü")
-#define MSG_PROGRESS_BAR_TEST _UxGT("Statusbalken-Test")
-#define MSG_AUTO_HOME _UxGT("Home XYZ") // G28
-#define MSG_AUTO_HOME_X _UxGT("Home X")
-#define MSG_AUTO_HOME_Y _UxGT("Home Y")
-#define MSG_AUTO_HOME_Z _UxGT("Home Z")
-#define MSG_AUTO_Z_ALIGN _UxGT("Z-Achsen ausgleichen")
-#define MSG_LEVEL_BED_HOMING _UxGT("Home XYZ")
-#define MSG_LEVEL_BED_WAITING _UxGT("Klick zum Starten")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Nächste Koordinate")
-#define MSG_LEVEL_BED_DONE _UxGT("Nivellieren fertig!")
-#define MSG_Z_FADE_HEIGHT _UxGT("Ausblendhöhe")
-#define MSG_SET_HOME_OFFSETS _UxGT("Setze Homeversatz")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Homeversatz aktiv")
-#define MSG_SET_ORIGIN _UxGT("Setze Nullpunkte") //"G92 X0 Y0 Z0" commented out in ultralcd.cpp
-#define MSG_PREHEAT_1 _UxGT(PREHEAT_1_LABEL " Vorwärmen")
-#define MSG_PREHEAT_1_N _UxGT(PREHEAT_1_LABEL " Vorwärmen ")
-#define MSG_PREHEAT_1_ALL _UxGT(PREHEAT_1_LABEL " Alles Vorwärmen")
-#define MSG_PREHEAT_1_END _UxGT(PREHEAT_1_LABEL " Extr. Vorwärmen")
-#define MSG_PREHEAT_1_BEDONLY _UxGT(PREHEAT_1_LABEL " Bett Vorwärmen")
-#define MSG_PREHEAT_1_SETTINGS _UxGT(PREHEAT_1_LABEL " Einstellungen")
-#define MSG_PREHEAT_2 _UxGT(PREHEAT_2_LABEL " Vorwärmen")
-#define MSG_PREHEAT_2_N _UxGT(PREHEAT_2_LABEL " Vorwärmen ")
-#define MSG_PREHEAT_2_ALL _UxGT(PREHEAT_2_LABEL " Alles Vorwärmen")
-#define MSG_PREHEAT_2_END _UxGT(PREHEAT_2_LABEL " Extr. Vorwärmen")
-#define MSG_PREHEAT_2_BEDONLY _UxGT(PREHEAT_2_LABEL " Bett Vorwärmen")
-#define MSG_PREHEAT_2_SETTINGS _UxGT(PREHEAT_2_LABEL " Einstellungen")
-#define MSG_PREHEAT_CUSTOM _UxGT("benutzerdef. Heizen")
-#define MSG_COOLDOWN _UxGT("Abkühlen")
-#define MSG_LASER_MENU _UxGT("Laser")
-#define MSG_LASER_OFF _UxGT("Laser aus")
-#define MSG_LASER_ON _UxGT("Laser an")
-#define MSG_LASER_POWER _UxGT("Laserleistung")
-#define MSG_SPINDLE_MENU _UxGT("Spindel-Steuerung")
-#define MSG_SPINDLE_OFF _UxGT("Spindel aus")
-#define MSG_SPINDLE_ON _UxGT("Spindel an")
-#define MSG_SPINDLE_POWER _UxGT("Spindelleistung")
-#define MSG_SPINDLE_REVERSE _UxGT("Spindelrichtung")
-#define MSG_SWITCH_PS_ON _UxGT("Netzteil ein")
-#define MSG_SWITCH_PS_OFF _UxGT("Netzteil aus")
-#define MSG_EXTRUDE _UxGT("Extrudieren")
-#define MSG_RETRACT _UxGT("Einzug")
-#define MSG_MOVE_AXIS _UxGT("Achsen bewegen")
-#define MSG_BED_LEVELING _UxGT("Bett-Nivellierung")
-#define MSG_LEVEL_BED _UxGT("Bett nivellieren")
-#define MSG_LEVEL_CORNERS _UxGT("Ecken nivellieren")
-#define MSG_NEXT_CORNER _UxGT("Nächste Ecke")
-#define MSG_MESH_EDITOR _UxGT("Netz Editor")
-#define MSG_EDIT_MESH _UxGT("Netz bearbeiten")
-#define MSG_EDITING_STOPPED _UxGT("Netzbearb. angeh.")
-#define MSG_PROBING_MESH _UxGT("Messpunkt")
-#define MSG_MESH_X _UxGT("Index X")
-#define MSG_MESH_Y _UxGT("Index Y")
-#define MSG_MESH_EDIT_Z _UxGT("Z-Wert")
-#define MSG_USER_MENU _UxGT("Benutzer-Menü")
-#define MSG_LCD_TILTING_MESH _UxGT("Berührungspunkt")
-#define MSG_M48_TEST _UxGT("M48 Sondentest")
-#define MSG_M48_POINT _UxGT("M48 Punkt")
-#define MSG_M48_DEVIATION _UxGT("Abweichung")
-#define MSG_IDEX_MENU _UxGT("IDEX-Modus")
-#define MSG_OFFSETS_MENU _UxGT("Werkzeugversätze")
-#define MSG_IDEX_MODE_AUTOPARK _UxGT("Autom. parken")
-#define MSG_IDEX_MODE_DUPLICATE _UxGT("Duplizieren")
-#define MSG_IDEX_MODE_MIRRORED_COPY _UxGT("Spiegelkopie")
-#define MSG_IDEX_MODE_FULL_CTRL _UxGT("vollstä. Kontrolle")
-#define MSG_X_OFFSET _UxGT("2. Düse X")
-#define MSG_Y_OFFSET _UxGT("2. Düse Y")
-#define MSG_Z_OFFSET _UxGT("2. Düse Z")
-#define MSG_UBL_DOING_G29 _UxGT("G29 ausführen")
-#define MSG_UBL_TOOLS _UxGT("UBL-Werkzeuge")
-#define MSG_UBL_LEVEL_BED _UxGT("Unified Bed Leveling")
-#define MSG_UBL_MANUAL_MESH _UxGT("Netz manuell erst.")
-#define MSG_UBL_BC_INSERT _UxGT("Unterlegen & messen")
-#define MSG_UBL_BC_INSERT2 _UxGT("Messen")
-#define MSG_UBL_BC_REMOVE _UxGT("Entfernen & messen")
-#define MSG_UBL_MOVING_TO_NEXT _UxGT("Nächster Punkt...")
-#define MSG_UBL_ACTIVATE_MESH _UxGT("UBL aktivieren")
-#define MSG_UBL_DEACTIVATE_MESH _UxGT("UBL deaktivieren")
-#define MSG_UBL_SET_TEMP_BED _UxGT("Betttemperatur")
-#define MSG_UBL_BED_TEMP_CUSTOM MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND _UxGT("Hotend-Temp.")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT _UxGT("Netz bearbeiten")
-#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("Eigenes Netz bearb.")
-#define MSG_UBL_FINE_TUNE_MESH _UxGT("Feineinstellung...")
-#define MSG_UBL_DONE_EDITING_MESH _UxGT("Bearbeitung beendet")
-#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("Eigenes Netz erst.")
-#define MSG_UBL_BUILD_MESH_MENU _UxGT("Netz erstellen")
-#define MSG_UBL_BUILD_MESH_M1 _UxGT(PREHEAT_1_LABEL " Netz erstellen")
-#define MSG_UBL_BUILD_MESH_M2 _UxGT(PREHEAT_2_LABEL " Netz erstellen")
-#define MSG_UBL_BUILD_COLD_MESH _UxGT("Netz erstellen kalt")
-#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("Netzhöhe einst.")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("Höhe")
-#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Netz validieren")
-#define MSG_UBL_VALIDATE_MESH_M1 _UxGT(PREHEAT_1_LABEL " Netz validieren")
-#define MSG_UBL_VALIDATE_MESH_M2 _UxGT(PREHEAT_2_LABEL " Netz validieren")
-#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Eig. Netz validieren")
-#define MSG_G26_HEATING_NOZZLE _UxGT("G26 Heating Nozzle")
-#define MSG_G26_HEATING_BED _UxGT("G26 heizt Bett")
-#define MSG_G26_FIXED_LENGTH _UxGT("Feste Länge Prime")
-#define MSG_G26_PRIME_DONE _UxGT("Priming fertig")
-#define MSG_G26_CANCELED _UxGT("G26 abgebrochen")
-#define MSG_G26_LEAVING _UxGT("G26 verlassen")
-#define MSG_UBL_CONTINUE_MESH _UxGT("Netzerst. forts.")
-#define MSG_UBL_MESH_LEVELING _UxGT("Netz-Nivellierung")
-#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("3-Punkt-Nivell.")
-#define MSG_UBL_GRID_MESH_LEVELING _UxGT("Gitternetz-Nivell.")
-#define MSG_UBL_MESH_LEVEL _UxGT("Netz nivellieren")
-#define MSG_UBL_SIDE_POINTS _UxGT("Eckpunkte")
-#define MSG_UBL_MAP_TYPE _UxGT("Kartentyp")
-#define MSG_UBL_OUTPUT_MAP _UxGT("Karte ausgeben")
-#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("Ausgabe für Host")
-#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("Ausgabe für CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("Externe Sicherung")
-#define MSG_UBL_INFO_UBL _UxGT("UBL-Info ausgeben")
-#define MSG_UBL_FILLIN_AMOUNT _UxGT("Menge an Füllung")
-#define MSG_UBL_MANUAL_FILLIN _UxGT("Manuelles Füllen")
-#define MSG_UBL_SMART_FILLIN _UxGT("Cleveres Füllen")
-#define MSG_UBL_FILLIN_MESH _UxGT("Netz Füllen")
-#define MSG_UBL_INVALIDATE_ALL _UxGT("Alles annullieren")
-#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("Nächstlieg. ann.")
-#define MSG_UBL_FINE_TUNE_ALL _UxGT("Feineinst. Alles")
-#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("Feineinst. Nächstl.")
-#define MSG_UBL_STORAGE_MESH_MENU _UxGT("Netz-Speicherplatz")
-#define MSG_UBL_STORAGE_SLOT _UxGT("Speicherort")
-#define MSG_UBL_LOAD_MESH _UxGT("Bettnetz laden")
-#define MSG_UBL_SAVE_MESH _UxGT("Bettnetz speichern")
-#define MSG_MESH_LOADED _UxGT("Netz %i geladen")
-#define MSG_MESH_SAVED _UxGT("Netz %i gespeichert")
-#define MSG_UBL_NO_STORAGE _UxGT("Kein Speicher")
-#define MSG_UBL_SAVE_ERROR _UxGT("Err:UBL speichern")
-#define MSG_UBL_RESTORE_ERROR _UxGT("Err:UBL wiederherst.")
-#define MSG_UBL_Z_OFFSET _UxGT("Z-Versatz: ")
-#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Z-Versatz angehalten")
-#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("Schrittweises UBL")
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" bereit");
-#define MSG_LED_CONTROL _UxGT("Licht-Steuerung")
-#define MSG_LEDS _UxGT("Licht")
-#define MSG_LED_PRESETS _UxGT("Licht-Einstellung")
-#define MSG_SET_LEDS_RED _UxGT("Rot")
-#define MSG_SET_LEDS_ORANGE _UxGT("Orange")
-#define MSG_SET_LEDS_YELLOW _UxGT("Gelb")
-#define MSG_SET_LEDS_GREEN _UxGT("Grün")
-#define MSG_SET_LEDS_BLUE _UxGT("Blau")
-#define MSG_SET_LEDS_INDIGO _UxGT("Indigo")
-#define MSG_SET_LEDS_VIOLET _UxGT("Violett")
-#define MSG_SET_LEDS_WHITE _UxGT("Weiß")
-#define MSG_SET_LEDS_DEFAULT _UxGT("Standard")
-#define MSG_CUSTOM_LEDS _UxGT("Benutzerdefiniert")
-#define MSG_INTENSITY_R _UxGT("Intensität Rot")
-#define MSG_INTENSITY_G _UxGT("Intensität Grün")
-#define MSG_INTENSITY_B _UxGT("Intensität Blau")
-#define MSG_INTENSITY_W _UxGT("Intensität Weiß")
-#define MSG_LED_BRIGHTNESS _UxGT("Helligkeit")
+ PROGMEM Language_Str MSG_YES = _UxGT("JA");
+ PROGMEM Language_Str MSG_NO = _UxGT("NEIN");
+ PROGMEM Language_Str MSG_BACK = _UxGT("Zurück");
+ PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Abbruch...");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Medium erkannt");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Medium entfernt");
+ PROGMEM Language_Str MSG_MEDIA_RELEASED = _UxGT("Medium freigegeben");
+ PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Warten auf Medium");
+ PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Medium Lesefehler");
+ PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB Gerät entfernt");
+ PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("USB Start fehlge.");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstopp"); // Max length 8 characters
+ PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Software-Endstopp");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Hauptmenü");
+ PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Erw. Einstellungen");
+ PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfiguration");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autostart");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Motoren deaktivieren"); // M84 :: Max length 19 characters
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Debug-Menü");
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Statusbalken-Test");
+ PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Z-Achsen ausgleichen");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Klick zum Starten");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Nächste Koordinate");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Nivellieren fertig!");
+ PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Ausblendhöhe");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Setze Homeversatz");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Homeversatz aktiv");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Setze Nullpunkte"); //"G92 X0 Y0 Z0" commented out in ultralcd.cpp
+ PROGMEM Language_Str MSG_PREHEAT_1 = PREHEAT_1_LABEL _UxGT(" Vorwärmen");
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = PREHEAT_1_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = PREHEAT_1_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = PREHEAT_1_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = PREHEAT_1_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = PREHEAT_1_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = PREHEAT_1_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärmen");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = PREHEAT_1_LABEL _UxGT(" Alles Vorwärmen");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = PREHEAT_1_LABEL _UxGT(" Bett Vorwärmen");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = PREHEAT_1_LABEL _UxGT(" Einstellungen");
+ PROGMEM Language_Str MSG_PREHEAT_2 = PREHEAT_2_LABEL _UxGT(" Vorwärmen");
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = PREHEAT_2_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = PREHEAT_2_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = PREHEAT_2_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = PREHEAT_2_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = PREHEAT_2_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = PREHEAT_2_LABEL _UxGT(" Vorwärmen") " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = PREHEAT_2_LABEL _UxGT(" Extr. Vorwärmen");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = PREHEAT_2_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = PREHEAT_2_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = PREHEAT_2_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = PREHEAT_2_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = PREHEAT_2_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = PREHEAT_2_LABEL _UxGT(" Extr. Vorwärm. ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = PREHEAT_2_LABEL _UxGT(" Alles Vorwärmen");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = PREHEAT_2_LABEL _UxGT(" Bett Vorwärmen");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = PREHEAT_2_LABEL _UxGT(" Einstellungen");
+ PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("benutzerdef. Heizen");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Abkühlen");
+ PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Laser");
+ PROGMEM Language_Str MSG_LASER_OFF = _UxGT("Laser aus");
+ PROGMEM Language_Str MSG_LASER_ON = _UxGT("Laser an");
+ PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Laserleistung");
+ PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Spindel-Steuerung");
+ PROGMEM Language_Str MSG_SPINDLE_OFF = _UxGT("Spindel aus");
+ PROGMEM Language_Str MSG_SPINDLE_ON = _UxGT("Spindel an");
+ PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Spindelleistung");
+ PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Spindelrichtung");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Netzteil ein");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Netzteil aus");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrudieren");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Einzug");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Achsen bewegen");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Bett-Nivellierung");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Bett nivellieren");
+ PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Ecken nivellieren");
+ PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Nächste Ecke");
+ PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Netz Editor");
+ PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Netz bearbeiten");
+ PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Netzbearb. angeh.");
+ PROGMEM Language_Str MSG_PROBING_MESH = _UxGT("Messpunkt");
+ PROGMEM Language_Str MSG_MESH_X = _UxGT("Index X");
+ PROGMEM Language_Str MSG_MESH_Y = _UxGT("Index Y");
+ PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Z-Wert");
+ PROGMEM Language_Str MSG_USER_MENU = _UxGT("Benutzer-Menü");
+ PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Berührungspunkt");
+ PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Sondentest");
+ PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Punkt");
+ PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Abweichung");
+ PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("IDEX-Modus");
+ PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Werkzeugversätze");
+ PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Autom. parken");
+ PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplizieren");
+ PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Spiegelkopie");
+ PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("vollstä. Kontrolle");
+ PROGMEM Language_Str MSG_X_OFFSET = _UxGT("2. Düse X");
+ PROGMEM Language_Str MSG_Y_OFFSET = _UxGT("2. Düse Y");
+ PROGMEM Language_Str MSG_Z_OFFSET = _UxGT("2. Düse Z");
+ PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("G29 ausführen");
+ PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL-Werkzeuge");
+ PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
+ PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Netz manuell erst.");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Unterlegen & messen");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Messen");
+ PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Entfernen & messen");
+ PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Nächster Punkt...");
+ PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("UBL aktivieren");
+ PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("UBL deaktivieren");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Betttemperatur");
+ PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Betttemperatur");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Hotend-Temp.");
+ PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend-Temp.");
+ PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Netz bearbeiten");
+ PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Eigenes Netz bearb.");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Feineinstellung...");
+ PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Bearbeitung beendet");
+ PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Eigenes Netz erst.");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Netz erstellen");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = PREHEAT_1_LABEL _UxGT(" Netz erstellen");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = PREHEAT_2_LABEL _UxGT(" Netz erstellen");
+ PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Netz erstellen kalt");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Netzhöhe einst.");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Höhe");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Netz validieren");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = PREHEAT_1_LABEL _UxGT(" Netz validieren");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = PREHEAT_2_LABEL _UxGT(" Netz validieren");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Eig. Netz validieren");
+ PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Heating Nozzle");
+ PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 heizt Bett");
+ PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Feste Länge Prime");
+ PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Priming fertig");
+ PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 abgebrochen");
+ PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("G26 verlassen");
+ PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Netzerst. forts.");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Netz-Nivellierung");
+ PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Punkt-Nivell.");
+ PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Gitternetz-Nivell.");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Netz nivellieren");
+ PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Eckpunkte");
+ PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Kartentyp");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Karte ausgeben");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Ausgabe für Host");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Ausgabe für CSV");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Externe Sicherung");
+ PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("UBL-Info ausgeben");
+ PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Menge an Füllung");
+ PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Manuelles Füllen");
+ PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Cleveres Füllen");
+ PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Netz Füllen");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Alles annullieren");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Nächstlieg. ann.");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Feineinst. Alles");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Feineinst. Nächstl.");
+ PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Netz-Speicherplatz");
+ PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Speicherort");
+ PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Bettnetz laden");
+ PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Bettnetz speichern");
+ PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("M117 Netz %i geladen");
+ PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("M117 Netz %i gespeichert");
+ PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Kein Speicher");
+ PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Err:UBL speichern");
+ PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Err:UBL wiederherst.");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z-Versatz: ");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Versatz angehalten");
+ PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Schrittweises UBL");
+ PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Netz erstellen kalt");
+ PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Cleveres Füllen");
+ PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Netz validieren");
+ PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Feineinst. Alles");
+ PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Netz validieren");
+ PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Feineinst. Alles");
+ PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Bettnetz speichern");
-#define MSG_MOVING _UxGT("In Bewegung...")
-#define MSG_FREE_XY _UxGT("Abstand XY")
-#define MSG_MOVE_X _UxGT("Bewege X")
-#define MSG_MOVE_Y _UxGT("Bewege Y")
-#define MSG_MOVE_Z _UxGT("Bewege Z")
-#define MSG_MOVE_E _UxGT("Bewege Extruder")
-#define MSG_HOTEND_TOO_COLD _UxGT("Hotend zu kalt")
-#define MSG_MOVE_Z_DIST _UxGT(" %s mm")
-#define MSG_MOVE_01MM _UxGT(" 0,1 mm")
-#define MSG_MOVE_1MM _UxGT(" 1,0 mm")
-#define MSG_MOVE_10MM _UxGT("10,0 mm")
-#define MSG_SPEED _UxGT("Geschw.")
-#define MSG_BED_Z _UxGT("Bett Z")
-#define MSG_NOZZLE _UxGT("Düse")
-#define MSG_BED _UxGT("Bett")
-#define MSG_CHAMBER _UxGT("Gehäuse")
-#define MSG_FAN_SPEED _UxGT("Lüfter")
-#define MSG_EXTRA_FAN_SPEED _UxGT("Geschw. Extralüfter")
-#define MSG_FLOW _UxGT("Flussrate")
-#define MSG_CONTROL _UxGT("Einstellungen")
-#define MSG_MIN LCD_STR_THERMOMETER _UxGT(" min")
-#define MSG_MAX LCD_STR_THERMOMETER _UxGT(" max")
-#define MSG_FACTOR LCD_STR_THERMOMETER _UxGT(" Faktor")
-#define MSG_AUTOTEMP _UxGT("Auto Temperatur")
-#define MSG_LCD_ON _UxGT("an")
-#define MSG_LCD_OFF _UxGT("aus")
-#define MSG_PID_P _UxGT("PID P")
-#define MSG_PID_I _UxGT("PID I")
-#define MSG_PID_D _UxGT("PID D")
-#define MSG_PID_C _UxGT("PID C")
-#define MSG_SELECT _UxGT("Auswählen")
-#define MSG_ACC _UxGT("Beschleunigung")
-#define MSG_JERK _UxGT("Jerk")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("V A Jerk")
- #define MSG_VB_JERK _UxGT("V B Jerk")
- #define MSG_VC_JERK _UxGT("V C Jerk")
-#else
- #define MSG_VA_JERK _UxGT("V X Jerk")
- #define MSG_VB_JERK _UxGT("V Y Jerk")
- #define MSG_VC_JERK _UxGT("V Z Jerk")
-#endif
-#define MSG_VE_JERK _UxGT("V E Jerk")
-#define MSG_JUNCTION_DEVIATION _UxGT("Junction Dev")
-#define MSG_VELOCITY _UxGT("Geschwindigkeit")
-#define MSG_VMAX _UxGT("V max ") // space intentional
-#define MSG_VMIN _UxGT("V min ")
-#define MSG_VTRAV_MIN _UxGT("V min Leerfahrt")
-#define MSG_ACCELERATION _UxGT("Beschleunigung")
-#define MSG_AMAX _UxGT("A max ") // space intentional
-#define MSG_A_RETRACT _UxGT("A Einzug")
-#define MSG_A_TRAVEL _UxGT("A Leerfahrt")
-#define MSG_STEPS_PER_MM _UxGT("Steps/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("A Steps/mm")
- #define MSG_BSTEPS _UxGT("B Steps/mm")
- #define MSG_CSTEPS _UxGT("C Steps/mm")
-#else
- #define MSG_ASTEPS _UxGT("X Steps/mm")
- #define MSG_BSTEPS _UxGT("Y Steps/mm")
- #define MSG_CSTEPS _UxGT("Z Steps/mm")
-#endif
-#define MSG_ESTEPS _UxGT("E Steps/mm")
-#define MSG_E1STEPS _UxGT("E1 Steps/mm")
-#define MSG_E2STEPS _UxGT("E2 Steps/mm")
-#define MSG_E3STEPS _UxGT("E3 Steps/mm")
-#define MSG_E4STEPS _UxGT("E4 Steps/mm")
-#define MSG_E5STEPS _UxGT("E5 Steps/mm")
-#define MSG_E6STEPS _UxGT("E6 Steps/mm")
-#define MSG_TEMPERATURE _UxGT("Temperatur")
-#define MSG_MOTION _UxGT("Bewegung")
-#define MSG_FILAMENT _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E in mm³")
-#define MSG_FILAMENT_DIAM _UxGT("Filamentdurchmesser")
-#define MSG_FILAMENT_UNLOAD _UxGT("Entladen mm")
-#define MSG_FILAMENT_LOAD _UxGT("Laden mm")
-#define MSG_ADVANCE_K _UxGT("Vorschubfaktor")
-#define MSG_CONTRAST _UxGT("LCD-Kontrast")
-#define MSG_STORE_EEPROM _UxGT("Konfig. speichern")
-#define MSG_LOAD_EEPROM _UxGT("Konfig. laden")
-#define MSG_RESTORE_FAILSAFE _UxGT("Standardwerte laden")
-#define MSG_INIT_EEPROM _UxGT("Werkseinstellungen")
-#define MSG_MEDIA_UPDATE _UxGT("FW Update vom Medium")
-#define MSG_RESET_PRINTER _UxGT("Drucker neustarten")
-#define MSG_REFRESH _UxGT("Aktualisieren")
-#define MSG_WATCH _UxGT("Info")
-#define MSG_PREPARE _UxGT("Vorbereitung")
-#define MSG_TUNE _UxGT("Justierung")
-#define MSG_START_PRINT _UxGT("Starte Druck")
-#define MSG_BUTTON_NEXT _UxGT("Weiter")
-#define MSG_BUTTON_INIT _UxGT("Bestätigen")
-#define MSG_BUTTON_STOP _UxGT("Stop")
-#define MSG_BUTTON_PRINT _UxGT("Drucken")
-#define MSG_BUTTON_RESET _UxGT("Reseten")
-#define MSG_BUTTON_CANCEL _UxGT("Abbrechen")
-#define MSG_BUTTON_DONE _UxGT("Fertig")
-#define MSG_PAUSE_PRINT _UxGT("SD-Druck pausieren")
-#define MSG_RESUME_PRINT _UxGT("SD-Druck fortsetzen")
-#define MSG_STOP_PRINT _UxGT("SD-Druck abbrechen")
-#define MSG_OUTAGE_RECOVERY _UxGT("Wiederh. n. Stroma.")
-#define MSG_MEDIA_MENU _UxGT("Druck vom Medium")
-#define MSG_NO_MEDIA _UxGT("Kein Medium")
-#define MSG_DWELL _UxGT("Warten...")
-#define MSG_USERWAIT _UxGT("Klick zum Fortsetzen")
-#define MSG_PRINT_PAUSED _UxGT("Druck pausiert...")
-#define MSG_PRINTING _UxGT("Druckt...")
-#define MSG_PRINT_ABORTED _UxGT("Druck abgebrochen")
-#define MSG_NO_MOVE _UxGT("Motoren angeschaltet")
-#define MSG_KILLED _UxGT("ABGEBROCHEN")
-#define MSG_STOPPED _UxGT("ANGEHALTEN")
-#define MSG_CONTROL_RETRACT _UxGT("Einzug mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Wechs. Einzug mm")
-#define MSG_CONTROL_RETRACTF _UxGT("V Einzug")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Z-Sprung mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Wechs. UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("S UnRet V")
-#define MSG_AUTORETRACT _UxGT("Autom. Einzug")
-#define MSG_FILAMENT_SWAP_LENGTH _UxGT("Einzugslänge")
-#define MSG_FILAMENT_PURGE_LENGTH _UxGT("Entladelänge")
-#define MSG_TOOL_CHANGE _UxGT("Werkzeugwechsel")
-#define MSG_TOOL_CHANGE_ZLIFT _UxGT("Z anheben")
-#define MSG_SINGLENOZZLE_PRIME_SPD _UxGT("Prime-Geschwin.")
-#define MSG_SINGLENOZZLE_RETRACT_SPD _UxGT("Einzug-Geschwin.")
-#define MSG_NOZZLE_STANDBY _UxGT("Düsen-Standby")
-#define MSG_FILAMENTCHANGE _UxGT("Filament wechseln")
-#define MSG_FILAMENTLOAD _UxGT("Filament laden")
-#define MSG_FILAMENTUNLOAD _UxGT("Filament entladen")
-#define MSG_FILAMENTUNLOAD_ALL _UxGT("Alles entladen")
-#define MSG_INIT_MEDIA _UxGT("Medium initial.") // Manually initialize the SD-card via user interface
-#define MSG_CHANGE_MEDIA _UxGT("Medium getauscht") // SD-card changed by user. For machines with no autocarddetect. Both send "M21"
-#define MSG_RELEASE_MEDIA _UxGT("Medium freigeben") // if Marlin gets confused - M22
-#define MSG_ZPROBE_OUT _UxGT("Z-Sonde außerhalb")
-#define MSG_SKEW_FACTOR _UxGT("Korrekturfaktor")
-#define MSG_BLTOUCH _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Selbsttest")
-#define MSG_BLTOUCH_RESET _UxGT("BLTouch zurücks.")
-#define MSG_BLTOUCH_DEPLOY _UxGT("BLTouch ausfahren")
-#define MSG_BLTOUCH_SW_MODE _UxGT("BLTouch SW-Modus")
-#define MSG_BLTOUCH_5V_MODE _UxGT("BLTouch 5V-Modus")
-#define MSG_BLTOUCH_OD_MODE _UxGT("BLTouch OD-Modus")
-#define MSG_BLTOUCH_MODE_STORE _UxGT("BLTouch Mode Store")
-#define MSG_BLTOUCH_MODE_STORE_5V _UxGT("BLTouch auf 5V")
-#define MSG_BLTOUCH_MODE_STORE_OD _UxGT("BLTouch auf OD")
-#define MSG_BLTOUCH_STOW _UxGT("BLTouch einfahren")
-#define MSG_BLTOUCH_MODE_ECHO _UxGT("BLTouch Modus: ")
-#define MSG_BLTOUCH_MODE_CHANGE _UxGT("ACHTUNG: Falsche Einstellung - kann zu Beschädigung führen! Fortfahren?")
-#define MSG_TOUCHMI_PROBE _UxGT("TouchMI")
-#define MSG_TOUCHMI_INIT _UxGT("TouchMI initial.")
-#define MSG_TOUCHMI_ZTEST _UxGT("Test Z-Versatz")
-#define MSG_TOUCHMI_SAVE _UxGT("Speichern")
-#define MSG_MANUAL_DEPLOY_TOUCHMI _UxGT("TouchMI ausfahren")
-#define MSG_MANUAL_DEPLOY _UxGT("Z-Sonde ausfahren")
-#define MSG_MANUAL_STOW _UxGT("Z-Sonde einfahren")
-#define MSG_HOME_FIRST _UxGT("Vorher %s%s%s homen")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Sondenversatz Z")
-#define MSG_BABYSTEP_X _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
-#define MSG_BABYSTEP_TOTAL _UxGT("Total")
-#define MSG_ENDSTOP_ABORT _UxGT("Abbr. mit Endstopp")
-#define MSG_HEATING_FAILED_LCD _UxGT("HEIZEN ERFOLGLOS")
-#define MSG_HEATING_FAILED_LCD_BED _UxGT("Bett heizen fehlge.")
-#define MSG_HEATING_FAILED_LCD_CHAMBER _UxGT("Geh. heizen fehlge.")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("REDUND. TEMP-ABWEI.")
-#define MSG_THERMAL_RUNAWAY LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT")
-#define MSG_THERMAL_RUNAWAY_BED _UxGT("BETT") MSG_THERMAL_RUNAWAY
-#define MSG_THERMAL_RUNAWAY_CHAMBER _UxGT("GEH.") MSG_THERMAL_RUNAWAY
-#define MSG_ERR_MAXTEMP LCD_STR_THERMOMETER _UxGT(" ÜBERSCHRITTEN")
-#define MSG_ERR_MINTEMP LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN")
-#define MSG_ERR_MAXTEMP_BED _UxGT("BETT ") LCD_STR_THERMOMETER _UxGT(" ÜBERSCHRITTEN")
-#define MSG_ERR_MINTEMP_BED _UxGT("BETT ") LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN")
-#define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Err:Gehäuse max Temp")
-#define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err:Gehäuse min Temp")
-#define MSG_ERR_Z_HOMING _UxGT("Vorher XY homen")
-#define MSG_HALTED _UxGT("DRUCKER GESTOPPT")
-#define MSG_PLEASE_RESET _UxGT("Bitte neustarten")
-#define MSG_SHORT_DAY _UxGT("t") // One character only
-#define MSG_SHORT_HOUR _UxGT("h") // One character only
-#define MSG_SHORT_MINUTE _UxGT("m") // One character only
-#define MSG_HEATING _UxGT("heizt...")
-#define MSG_COOLING _UxGT("kühlt...")
-#define MSG_BED_HEATING _UxGT("Bett heizt...")
-#define MSG_BED_COOLING _UxGT("Bett kühlt...")
-#define MSG_CHAMBER_HEATING _UxGT("Gehäuse heizt...")
-#define MSG_CHAMBER_COOLING _UxGT("Gehäuse kühlt...")
-#define MSG_DELTA_CALIBRATE _UxGT("Delta kalibrieren")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Kalibriere X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Kalibriere Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Kalibriere Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Kalibriere Mitte")
-#define MSG_DELTA_SETTINGS _UxGT("Delta Einst. anzeig.")
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Autom. Kalibrierung")
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Delta Höhe setzen")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE _UxGT("Sondenversatz Z")
-#define MSG_DELTA_DIAG_ROD _UxGT("Diag Rod")
-#define MSG_DELTA_HEIGHT _UxGT("Höhe")
-#define MSG_DELTA_RADIUS _UxGT("Radius")
-#define MSG_INFO_MENU _UxGT("Über den Drucker")
-#define MSG_INFO_PRINTER_MENU _UxGT("Drucker-Info")
-#define MSG_3POINT_LEVELING _UxGT("3-Punkt-Nivellierung")
-#define MSG_LINEAR_LEVELING _UxGT("Lineare Nivellierung")
-#define MSG_BILINEAR_LEVELING _UxGT("Bilineare Nivell.")
-#define MSG_UBL_LEVELING _UxGT("Unified Bed Leveling")
-#define MSG_MESH_LEVELING _UxGT("Netz-Nivellierung")
-#define MSG_INFO_STATS_MENU _UxGT("Drucker-Statistik")
-#define MSG_INFO_BOARD_MENU _UxGT("Board-Info")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Thermistoren")
-#define MSG_INFO_EXTRUDERS _UxGT("Extruder")
-#define MSG_INFO_BAUDRATE _UxGT("Baudrate")
-#define MSG_INFO_PROTOCOL _UxGT("Protokoll")
-#define MSG_CASE_LIGHT _UxGT("Beleuchtung")
-#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Helligkeit")
+ PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Licht-Steuerung");
+ PROGMEM Language_Str MSG_LEDS = _UxGT("Licht");
+ PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Licht-Einstellung");
+ PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Rot");
+ PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Orange");
+ PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Gelb");
+ PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Grün");
+ PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Blau");
+ PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
+ PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Violett");
+ PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Weiß");
+ PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Standard");
+ PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Benutzerdefiniert");
+ PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Intensität Rot");
+ PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Intensität Grün");
+ PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Intensität Blau");
+ PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Intensität Weiß");
+ PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Helligkeit");
-#define MSG_EXPECTED_PRINTER _UxGT("Falscher Drucker")
+ PROGMEM Language_Str MSG_MOVING = _UxGT("In Bewegung...");
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("Abstand XY");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Bewege X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Bewege Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Bewege Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Bewege Extruder");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Bewege Extruder ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Bewege Extruder ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Bewege Extruder ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Bewege Extruder ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Bewege Extruder ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Bewege Extruder ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Hotend zu kalt");
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT(" %s mm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT(" 0,1 mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT(" 1,0 mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("10,0 mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Geschw.");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Bett Z");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Düse");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Düse ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Düse ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Düse ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Düse ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Düse ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Düse ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Bett");
+ PROGMEM Language_Str MSG_CHAMBER = _UxGT("Gehäuse");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Lüfter");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Lüfter 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Lüfter 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Lüfter 3");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Geschw. Extralüfter");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1 = _UxGT("Geschw. Extralüfter 1");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2 = _UxGT("Geschw. Extralüfter 2");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3 = _UxGT("Geschw. Extralüfter 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Flussrate");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Flussrate ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Flussrate ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Flussrate ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Flussrate ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Flussrate ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Flussrate ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Einstellungen");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" max");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Faktor");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Auto Temperatur");
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("an");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("aus");
+ PROGMEM Language_Str MSG_PID_P = _UxGT("PID P");
+ PROGMEM Language_Str MSG_PID_P_E0 = _UxGT("PID P ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_P_E1 = _UxGT("PID P ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_P_E2 = _UxGT("PID P ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_P_E3 = _UxGT("PID P ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_P_E4 = _UxGT("PID P ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_P_E5 = _UxGT("PID P ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_I = _UxGT("PID I");
+ PROGMEM Language_Str MSG_PID_I_E0 = _UxGT("PID I ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_I_E1 = _UxGT("PID I ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_I_E2 = _UxGT("PID I ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_I_E3 = _UxGT("PID I ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_I_E4 = _UxGT("PID I ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_I_E5 = _UxGT("PID I ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_D = _UxGT("PID D");
+ PROGMEM Language_Str MSG_PID_D_E0 = _UxGT("PID D ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_D_E1 = _UxGT("PID D ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_D_E2 = _UxGT("PID D ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_D_E3 = _UxGT("PID D ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_D_E4 = _UxGT("PID D ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_D_E5 = _UxGT("PID D ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_C = _UxGT("PID C");
+ PROGMEM Language_Str MSG_PID_C_E0 = _UxGT("PID C ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_C_E1 = _UxGT("PID C ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_C_E2 = _UxGT("PID C ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_C_E3 = _UxGT("PID C ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_C_E4 = _UxGT("PID C ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_C_E5 = _UxGT("PID C ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Auswählen");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Auswählen ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Auswählen ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Auswählen ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Auswählen ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Auswählen ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Auswählen ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Beschleunigung");
+ PROGMEM Language_Str MSG_JERK = _UxGT("Jerk");
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("V ") LCD_STR_A _UxGT(" Jerk");
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("V ") LCD_STR_B _UxGT(" Jerk");
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("V ") LCD_STR_C _UxGT(" Jerk");
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("V E Jerk");
+ PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
+ PROGMEM Language_Str MSG_VELOCITY = _UxGT("Geschwindigkeit");
+ PROGMEM Language_Str MSG_VMAX_A = _UxGT("V max ") LCD_STR_A;
+ PROGMEM Language_Str MSG_VMAX_B = _UxGT("V max ") LCD_STR_B;
+ PROGMEM Language_Str MSG_VMAX_C = _UxGT("V max ") LCD_STR_C;
+ PROGMEM Language_Str MSG_VMAX_E = _UxGT("V max ") LCD_STR_E;
+ PROGMEM Language_Str MSG_VMAX_E0 = _UxGT("V max ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_VMAX_E1 = _UxGT("V max ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_VMAX_E2 = _UxGT("V max ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_VMAX_E3 = _UxGT("V max ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_VMAX_E4 = _UxGT("V max ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_VMAX_E5 = _UxGT("V max ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_VMIN = _UxGT("V min ");
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("V min Leerfahrt");
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Beschleunigung");
+ PROGMEM Language_Str MSG_AMAX = _UxGT("A max "); // space intentional
+ PROGMEM Language_Str MSG_AMAX_A = _UxGT("A max ") LCD_STR_A;
+ PROGMEM Language_Str MSG_AMAX_B = _UxGT("A max ") LCD_STR_B;
+ PROGMEM Language_Str MSG_AMAX_C = _UxGT("A max ") LCD_STR_C;
+ PROGMEM Language_Str MSG_AMAX_E = _UxGT("A max ") LCD_STR_E;
+ PROGMEM Language_Str MSG_AMAX_E0 = _UxGT("A max ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AMAX_E1 = _UxGT("A max ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AMAX_E2 = _UxGT("A max ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AMAX_E3 = _UxGT("A max ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AMAX_E4 = _UxGT("A max ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AMAX_E5 = _UxGT("A max ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A Einzug");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A Leerfahrt");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Steps/mm");
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" Steps/mm");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" Steps/mm");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" Steps/mm");
+ PROGMEM Language_Str MSG_E_STEPS = LCD_STR_E _UxGT(" Steps/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT(" Steps/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT(" Steps/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT(" Steps/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT(" Steps/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT(" Steps/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT(" Steps/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatur");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Bewegung");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm³");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Filamentdurchmesser");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Filamentdurchmesser ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Filamentdurchmesser ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Filamentdurchmesser ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Filamentdurchmesser ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Filamentdurchmesser ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Filamentdurchmesser ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Entladen mm");
+ PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Laden mm");
+ PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Vorschubfaktor");
+ PROGMEM Language_Str MSG_ADVANCE_E0 = _UxGT("Vorschubfaktor ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_ADVANCE_E1 = _UxGT("Vorschubfaktor ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_ADVANCE_E2 = _UxGT("Vorschubfaktor ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_ADVANCE_E3 = _UxGT("Vorschubfaktor ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_ADVANCE_E4 = _UxGT("Vorschubfaktor ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_ADVANCE_E5 = _UxGT("Vorschubfaktor ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD-Kontrast");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Konfig. speichern");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Konfig. laden");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Standardwerte laden");
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Werkseinstellungen");
+ PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("FW Update vom Medium");
+ PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Drucker neustarten");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Aktualisieren");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Info");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Vorbereitung");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Justierung");
+ PROGMEM Language_Str MSG_START_PRINT = _UxGT("Starte Druck");
+ PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Weiter");
+ PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Bestätigen");
+ PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Stop");
+ PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Drucken");
+ PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Reseten");
+ PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Abbrechen");
+ PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Fertig");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("SD-Druck pausieren");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("SD-Druck fortsetzen");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("SD-Druck abbrechen");
+ PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Wiederh. n. Stroma.");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Druck vom Medium");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Kein Medium");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Warten...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Klick zum Fortsetzen");
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Druck pausiert...");
+ PROGMEM Language_Str MSG_PRINTING = _UxGT("Druckt...");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Druck abgebrochen");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Motoren angeschaltet");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("ABGEBROCHEN");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("ANGEHALTEN");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Einzug mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Wechs. Einzug mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("V Einzug");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Z-Sprung mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Wechs. UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("UnRet V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Autom. Einzug");
+ PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Einzugslänge");
+ PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Entladelänge");
+ PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Werkzeugwechsel");
+ PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z anheben");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD = _UxGT("Prime-Geschwin.");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD = _UxGT("Einzug-Geschwin.");
+ PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Düsen-Standby");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Filament wechseln");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Filament wechseln ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Filament wechseln ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Filament wechseln ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Filament wechseln ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Filament wechseln ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Filament wechseln ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Filament laden");
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E0 = _UxGT("Filament laden ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E1 = _UxGT("Filament laden ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E2 = _UxGT("Filament laden ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E3 = _UxGT("Filament laden ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E4 = _UxGT("Filament laden ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E5 = _UxGT("Filament laden ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0 = _UxGT("Filament entladen ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1 = _UxGT("Filament entladen ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2 = _UxGT("Filament entladen ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3 = _UxGT("Filament entladen ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4 = _UxGT("Filament entladen ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5 = _UxGT("Filament entladen ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Alles entladen");
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Medium initial."); // Manually initialize the SD-card via user interface
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Medium getauscht"); // SD-card changed by user. For machines with no autocarddetect. Both send "M21"
+ PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Medium freigeben"); // if Marlin gets confused - M22
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z-Sonde außerhalb");
+ PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Korrekturfaktor");
+ PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Selbsttest");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("BLTouch zurücks.");
+ PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("BLTouch ausfahren");
+ PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("BLTouch SW-Modus");
+ PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("BLTouch 5V-Modus");
+ PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("BLTouch OD-Modus");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("BLTouch Mode Store");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("BLTouch auf 5V");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("BLTouch auf OD");
+ PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("BLTouch einfahren");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("BLTouch Modus: ");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("ACHTUNG: Falsche Einstellung - kann zu Beschädigung führen! Fortfahren?");
+ PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("TouchMI initial.");
+ PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Test Z-Versatz");
+ PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Speichern");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("TouchMI ausfahren");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Z-Sonde ausfahren");
+ PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Z-Sonde einfahren");
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Vorher %s%s%s homen");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Sondenversatz Z");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
+ PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Total");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Abbr. mit Endstopp");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("HEIZEN ERFOLGLOS");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED = _UxGT("Bett heizen fehlge.");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_CHAMBER = _UxGT("Geh. heizen fehlge.");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("REDUND. TEMP-ABWEI.");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("BETT") " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("GEH.") " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = " " LCD_STR_THERMOMETER _UxGT(" ÜBERSCHRITTEN");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = " " LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("BETT ") LCD_STR_THERMOMETER _UxGT(" ÜBERSCHRITTEN");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("BETT ") LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER = _UxGT("Err:Gehäuse max Temp");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER = _UxGT("Err:Gehäuse min Temp");
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Vorher XY homen");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("DRUCKER GESTOPPT");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Bitte neustarten");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("t"); // One character only
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
+ PROGMEM Language_Str MSG_HEATING = _UxGT("heizt...");
+ PROGMEM Language_Str MSG_COOLING = _UxGT("kühlt...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Bett heizt...");
+ PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Bett kühlt...");
+ PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Gehäuse heizt...");
+ PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Gehäuse kühlt...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta kalibrieren");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibriere X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibriere Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibriere Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibriere Mitte");
+ PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Delta Einst. anzeig.");
+ PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Autom. Kalibrierung");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Delta Höhe setzen");
+ PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Sondenversatz Z");
+ PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Diag Rod");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Höhe");
+ PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Radius");
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Über den Drucker");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Drucker-Info");
+ PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-Punkt-Nivellierung");
+ PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Lineare Nivellierung");
+ PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Bilineare Nivell.");
+ PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
+ PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Netz-Nivellierung");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Drucker-Statistik");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Board-Info");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistoren");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extruder");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baudrate");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokoll");
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Beleuchtung");
+ PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Helligkeit");
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Gesamte Drucke")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Komplette Drucke")
- #define MSG_INFO_PRINT_TIME _UxGT("Gesamte Druckzeit")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Längste Druckzeit")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Gesamt Extrudiert")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Drucke")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Komplette")
- #define MSG_INFO_PRINT_TIME _UxGT("Gesamte")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Längste")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Extrud.")
-#endif
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Falscher Drucker");
-#define MSG_INFO_MIN_TEMP _UxGT("Min Temp")
-#define MSG_INFO_MAX_TEMP _UxGT("Max Temp")
-#define MSG_INFO_PSU _UxGT("Netzteil")
-#define MSG_DRIVE_STRENGTH _UxGT("Motorleistung")
-#define MSG_DAC_PERCENT _UxGT("Treiber %")
-#define MSG_ERROR_TMC _UxGT("TMC Verbindungsfehler")
-#define MSG_DAC_EEPROM_WRITE _UxGT("Werte speichern")
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("DRUCK PAUSIERT")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("FILAMENT LADEN")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("FILAMENT ENTLADEN")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("FORTS. OPTIONEN:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Mehr entladen")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Druck weiter")
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Düse: ")
-#define MSG_RUNOUT_SENSOR _UxGT("Runout-Sensor")
-#define MSG_RUNOUT_DISTANCE_MM _UxGT("Runout-Weg mm")
-#define MSG_ERR_HOMING_FAILED _UxGT("Homing gescheitert")
-#define MSG_ERR_PROBING_FAILED _UxGT("Probing gescheitert")
-#define MSG_M600_TOO_COLD _UxGT("M600: zu kalt")
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Gesamte Drucke");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Komplette Drucke");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Gesamte Druckzeit");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Längste Druckzeit");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Gesamt Extrudiert");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Drucke");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Komplette");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Gesamte");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Längste");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extrud.");
+ #endif
-#define MSG_MMU2_FILAMENT_CHANGE_HEADER _UxGT("FILAMENT WECHSEL")
-#define MSG_MMU2_CHOOSE_FILAMENT_HEADER _UxGT("FILAMENT WÄHLEN")
-#define MSG_MMU2_MENU _UxGT("MMU")
-#define MSG_MMU2_WRONG_FIRMWARE _UxGT("Update MMU Firmware!")
-#define MSG_MMU2_NOT_RESPONDING _UxGT("MMU handeln erfor.")
-#define MSG_MMU2_RESUME _UxGT("Druck fortsetzen")
-#define MSG_MMU2_RESUMING _UxGT("Fortfahren...")
-#define MSG_MMU2_LOAD_FILAMENT MSG_FILAMENTLOAD
-#define MSG_MMU2_LOAD_ALL _UxGT("Lade alle")
-#define MSG_MMU2_LOAD_TO_NOZZLE _UxGT("Düse laden")
-#define MSG_MMU2_EJECT_FILAMENT _UxGT("Filament auswerfen")
-#define MSG_MMU2_EJECT_FILAMENT0 _UxGT("Filament 1 auswerfen")
-#define MSG_MMU2_EJECT_FILAMENT1 _UxGT("Filament 2 auswerfen")
-#define MSG_MMU2_EJECT_FILAMENT2 _UxGT("Filament 3 auswerfen")
-#define MSG_MMU2_EJECT_FILAMENT3 _UxGT("Filament 4 auswerfen")
-#define MSG_MMU2_EJECT_FILAMENT4 _UxGT("Filament 5 auswerfen")
-#define MSG_MMU2_UNLOAD_FILAMENT MSG_FILAMENTUNLOAD
-#define MSG_MMU2_LOADING_FILAMENT _UxGT("Lade Fila. %i...")
-#define MSG_MMU2_EJECTING_FILAMENT _UxGT("Fila. auswerfen...")
-#define MSG_MMU2_UNLOADING_FILAMENT _UxGT("Fila. entladen...")
-#define MSG_MMU2_ALL _UxGT("Alle")
-#define MSG_MMU2_FILAMENT0 _UxGT("Filament 1")
-#define MSG_MMU2_FILAMENT1 _UxGT("Filament 2")
-#define MSG_MMU2_FILAMENT2 _UxGT("Filament 3")
-#define MSG_MMU2_FILAMENT3 _UxGT("Filament 4")
-#define MSG_MMU2_FILAMENT4 _UxGT("Filament 5")
-#define MSG_MMU2_RESET _UxGT("setze MMU zurück")
-#define MSG_MMU2_RESETTING _UxGT("MMU zurücksetzen...")
-#define MSG_MMU2_EJECT_RECOVER _UxGT("Entfernen, klicken")
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Netzteil");
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Motorleistung");
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("Treiber %");
+ PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("TMC Verbindungsfehler");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Werte speichern");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("FILAMENT WECHSEL");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("DRUCK PAUSIERT");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("FILAMENT LADEN");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("FILAMENT ENTLADEN");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("FORTS. OPTIONEN:");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Mehr entladen");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Druck weiter");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Düse: ");
+ PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Runout-Sensor");
+ PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Runout-Weg mm");
+ PROGMEM Language_Str MSG_LCD_HOMING_FAILED = _UxGT("Homing gescheitert");
+ PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Probing gescheitert");
+ PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: zu kalt");
-#define MSG_MIX _UxGT("Mix")
-#define MSG_MIX_COMPONENT _UxGT("Komponente")
-#define MSG_MIXER _UxGT("Mixer")
-#define MSG_GRADIENT _UxGT("Gradient") // equal Farbverlauf
-#define MSG_FULL_GRADIENT _UxGT("Volle Gradient")
-#define MSG_TOGGLE_MIX _UxGT("Mix umschalten")
-#define MSG_CYCLE_MIX _UxGT("Zyklus Mix")
-#define MSG_GRADIENT_MIX _UxGT("Gradient Mix")
-#define MSG_REVERSE_GRADIENT _UxGT("Umgekehrte Gradient")
-#define MSG_ACTIVE_VTOOL _UxGT("Aktives V-Tool")
-#define MSG_START_VTOOL _UxGT("V-Tool Start")
-#define MSG_END_VTOOL _UxGT("V-Tool Ende")
-#define MSG_GRADIENT_ALIAS _UxGT("V-Tool Alias")
-#define MSG_RESET_VTOOLS _UxGT("V-Tools Reseten")
-#define MSG_COMMIT_VTOOL _UxGT("V-Tool Mix sichern")
-#define MSG_VTOOLS_RESET _UxGT("V-Tools ist resetet")
-#define MSG_START_Z _UxGT("Z Start")
-#define MSG_END_Z _UxGT("Z Ende")
-#define MSG_GAMES _UxGT("Spiele")
-#define MSG_BRICKOUT _UxGT("Brickout")
-#define MSG_INVADERS _UxGT("Invaders")
-#define MSG_SNAKE _UxGT("Sn4k3")
-#define MSG_MAZE _UxGT("Maze")
+ PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("FILAMENT WÄHLEN");
+ PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
+ PROGMEM Language_Str MSG_MMU2_WRONG_FIRMWARE = _UxGT("Update MMU Firmware!");
+ PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU handeln erfor.");
+ PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Druck fortsetzen");
+ PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Fortfahren...");
+ PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Filament laden");
+ PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Lade alle");
+ PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Düse laden");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Filament auswerfen");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT0 = _UxGT("Filament 1 auswerfen");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT1 = _UxGT("Filament 2 auswerfen");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT2 = _UxGT("Filament 3 auswerfen");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT3 = _UxGT("Filament 4 auswerfen");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT4 = _UxGT("Filament 5 auswerfen");
+ PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Filament entladen ");
+ PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Lade Fila. %i...");
+ PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Fila. auswerfen...");
+ PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Fila. entladen...");
+ PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Alle");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT0 = _UxGT("Filament 1");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT1 = _UxGT("Filament 2");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT2 = _UxGT("Filament 3");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT3 = _UxGT("Filament 4");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT4 = _UxGT("Filament 5");
+ PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("setze MMU zurück");
+ PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("MMU zurücksetzen...");
+ PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Entfernen, klicken");
-//
-// Die Filament-Change-Bildschirme können bis zu 3 Zeilen auf einem 4-Zeilen-Display anzeigen
-// ...oder 2 Zeilen auf einem 3-Zeilen-Display.
-#if LCD_HEIGHT >= 4
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Knopf drücken um")
- #define MSG_ADVANCED_PAUSE_WAITING_2 _UxGT("Druck fortzusetzen")
- #define MSG_PAUSE_PRINT_INIT_1 _UxGT("Druck ist")
- #define MSG_PAUSE_PRINT_INIT_2 _UxGT("pausiert...")
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Warte auf den")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("Start des")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("Filamentwechsels...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Filament einlegen")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("und Knopf drücken")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("um fortzusetzen")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Knopf drücken um")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("Düse aufzuheizen")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Düse heizt auf")
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("bitte warten...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Warte auf")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("Herausnahme")
- #define MSG_FILAMENT_CHANGE_UNLOAD_3 _UxGT("des Filaments...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Warte auf")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("Laden des")
- #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("Filaments...")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Warte auf")
- #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("Entladen des")
- #define MSG_FILAMENT_CHANGE_PURGE_3 _UxGT("Filaments...")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Klicke um")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_2 _UxGT("die Fila-Entladung")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_3 _UxGT("zu beenden")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Warte auf")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("Fortsetzen des")
- #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("Drucks...")
-#else // LCD_HEIGHT < 4
- #define MSG_ADVANCED_PAUSE_WAITING_1 MSG_USERWAIT
- #define MSG_PAUSE_PRINT_INIT_1 _UxGT("Pausiert...")
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Bitte warten...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Laden und Klick")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Klick zum Heizen")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Heizen...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Entladen...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Laden...")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Entladen...")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Klick zum beenden")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_2 _UxGT("der Fila-Entladung")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Fortsetzen...")
-#endif // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_MIX = _UxGT("Mix");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_1 = _UxGT("Komponente 1");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_2 = _UxGT("Komponente 2");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_3 = _UxGT("Komponente 3");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_4 = _UxGT("Komponente 4");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_5 = _UxGT("Komponente 5");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_6 = _UxGT("Komponente 6");
+ PROGMEM Language_Str MSG_MIXER = _UxGT("Mixer");
+ PROGMEM Language_Str MSG_GRADIENT = _UxGT("Gradient"); // equal Farbverlauf
+ PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Volle Gradient");
+ PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Mix umschalten");
+ PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Zyklus Mix");
+ PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
+ PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Umgekehrte Gradient");
+ PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Aktives V-Tool");
+ PROGMEM Language_Str MSG_START_VTOOL = _UxGT("V-Tool Start");
+ PROGMEM Language_Str MSG_END_VTOOL = _UxGT("V-Tool Ende");
+ PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("V-Tool Alias");
+ PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("V-Tools Reseten");
+ PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("V-Tool Mix sichern");
+ PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-Tools ist resetet");
+ PROGMEM Language_Str MSG_START_Z = _UxGT("Z Start:");
+ PROGMEM Language_Str MSG_END_Z = _UxGT("Z Ende:");
+ PROGMEM Language_Str MSG_GAMES = _UxGT("Spiele");
+ PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
+ PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
+ PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
+ PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
-#define MSG_TMC_DRIVERS _UxGT("TMC Treiber") // Max length 18 characters
-#define MSG_TMC_CURRENT _UxGT("Treiber Strom")
-#define MSG_TMC_HYBRID_THRS _UxGT("Hybrid threshold")
-#define MSG_TMC_HOMING_THRS _UxGT("Sensorloses Homing")
-#define MSG_TMC_STEPPING_MODE _UxGT("Schrittmodus")
-#define MSG_TMC_STEALTH_ENABLED _UxGT("StealthChop einsch.")
-#define MSG_SERVICE_RESET _UxGT("Reset")
-#define MSG_SERVICE_IN _UxGT(" im:")
-#define MSG_BACKLASH _UxGT("Spiel")
-#define MSG_BACKLASH_CORRECTION _UxGT("Korrektur")
-#define MSG_BACKLASH_SMOOTHING _UxGT("Glätten")
+ //
+ // Die Filament-Change-Bildschirme können bis zu 3 Zeilen auf einem 4-Zeilen-Display anzeigen
+ // ...oder 2 Zeilen auf einem 3-Zeilen-Display.
+ #if LCD_HEIGHT >= 4
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Knopf drücken um", "Druck fortzusetzen"));
+ PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_2_LINE("Druck ist", "pausiert..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Warte auf den", "Start des", "Filamentwechsels..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Filament einlegen", "und Knopf drücken", "um fortzusetzen"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Knopf drücken um", "Düse aufzuheizen"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Düse heizt auf", "bitte warten..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Warte auf", "Herausnahme", "des Filaments..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Warte auf", "Laden des", "Filaments..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Warte auf", "Entladen des", "Filaments..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Klicke um", "die Fila-Entladung", "zu beenden"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Warte auf", "Fortsetzen des", "Drucks..."));
+ #else // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Klick zum Fortsetzen"));
+ PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Pausiert..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Bitte warten..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Laden und Klick"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Klick zum Heizen"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Heizen..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Entladen..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Laden..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Entladen..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Klick zum beenden", "der Fila-Entladung"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Fortsetzen..."));
+ #endif // LCD_HEIGHT < 4
+
+ PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("TMC Treiber"); // Max length 18 characters
+ PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Treiber Strom");
+ PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Hybrid threshold");
+ PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Sensorloses Homing");
+ PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Schrittmodus");
+ PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop einsch.");
+ PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Reset");
+ PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" im:");
+ PROGMEM Language_Str MSG_BACKLASH = _UxGT("Spiel");
+ PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
+ PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
+ PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
+ PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Korrektur");
+ PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Glätten");
+}
diff --git a/Marlin/src/lcd/language/language_el-gr.h b/Marlin/src/lcd/language/language_el-gr.h
deleted file mode 100644
index 5f7a1d2d36bc..000000000000
--- a/Marlin/src/lcd/language/language_el-gr.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-#pragma once
-
-/**
- * Greek (Greece)
- *
- * LCD Menu Messages
- * See also http://marlinfw.org/docs/development/lcd_language.html
- *
- */
-
-#define DISPLAY_CHARSET_ISO10646_GREEK
-#define CHARSIZE 2
-
-#define WELCOME_MSG MACHINE_NAME _UxGT(" έτοιμο.")
-#define MSG_MEDIA_INSERTED _UxGT("Εισαγωγή κάρτας")
-#define MSG_MEDIA_REMOVED _UxGT("Αφαίρεση κάρτας")
-#define MSG_LCD_ENDSTOPS _UxGT("Endstops") // Max length 8 characters
-#define MSG_MAIN _UxGT("Βασική Οθόνη")
-#define MSG_AUTOSTART _UxGT("Αυτόματη εκκίνηση")
-#define MSG_DISABLE_STEPPERS _UxGT("Απενεργοποίηση βηματιστή")
-#define MSG_AUTO_HOME _UxGT("Αυτομ. επαναφορά στο αρχικό σημείο")
-#define MSG_AUTO_HOME_X _UxGT("Αρχικό σημείο X")
-#define MSG_AUTO_HOME_Y _UxGT("Αρχικό σημείο Y")
-#define MSG_AUTO_HOME_Z _UxGT("Αρχικό σημείο Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Επαναφορά στο αρχικό σημείο ΧΥΖ")
-#define MSG_LEVEL_BED_WAITING _UxGT("Κάντε κλικ για να ξεκινήσετε")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Επόμενο σημείο")
-#define MSG_LEVEL_BED_DONE _UxGT("Ολοκλήρωση επιπεδοποίησης!")
-#define MSG_SET_HOME_OFFSETS _UxGT("Ορισμός βασικών μετατοπίσεων")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Εφαρμόστηκαν οι μετατοπίσεις")
-#define MSG_SET_ORIGIN _UxGT("Ορισμός προέλευσης")
-#define MSG_PREHEAT_1 _UxGT("Προθέρμανση " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" όλα")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" κλίνη")
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" επιβεβαίωση")
-#define MSG_PREHEAT_2 _UxGT("Προθέρμανση " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" όλα")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" Bed")
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" επιβεβαίωση")
-#define MSG_COOLDOWN _UxGT("Μειωση θερμοκρασιας")
-#define MSG_SWITCH_PS_ON _UxGT("Ενεργοποίηση")
-#define MSG_SWITCH_PS_OFF _UxGT("Απενεργοποίηση")
-#define MSG_EXTRUDE _UxGT("Εξώθηση")
-#define MSG_RETRACT _UxGT("Ανάσυρση")
-#define MSG_MOVE_AXIS _UxGT("Μετακίνηση άξονα")
-#define MSG_BED_LEVELING _UxGT("Επιπεδοποίηση κλίνης")
-#define MSG_LEVEL_BED _UxGT("Επιπεδοποίηση κλίνης")
-#define MSG_MOVE_X _UxGT("Μετακίνηση X")
-#define MSG_MOVE_Y _UxGT("Μετακίνηση Y")
-#define MSG_MOVE_Z _UxGT("Μετακίνηση Z")
-#define MSG_MOVE_E _UxGT("Εξωθητήρας")
-#define MSG_MOVE_Z_DIST _UxGT("Μετακίνηση %s μμ")
-#define MSG_MOVE_01MM _UxGT("Μετακίνηση 0,1 μμ")
-#define MSG_MOVE_1MM _UxGT("Μετακίνηση 1 μμ")
-#define MSG_MOVE_10MM _UxGT("Μετακίνηση 10 μμ")
-#define MSG_SPEED _UxGT("Ταχύτητα")
-#define MSG_BED_Z _UxGT("Κλίνη Z")
-#define MSG_NOZZLE _UxGT("Ακροφύσιο")
-#define MSG_BED _UxGT("Κλίνη")
-#define MSG_FAN_SPEED _UxGT("Ταχύτητα ανεμιστήρα")
-#define MSG_FLOW _UxGT("Ροή")
-#define MSG_CONTROL _UxGT("Έλεγχος")
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP _UxGT("Αυτομ. ρύθμιση θερμοκρασίας")
-#define MSG_LCD_ON _UxGT("Ενεργοποιημένο")
-#define MSG_LCD_OFF _UxGT("Απενεργοποιημένο")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_ACC _UxGT("Επιτάχυνση")
-#define MSG_JERK _UxGT("Vαντίδραση")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Vαντίδραση A")
- #define MSG_VB_JERK _UxGT("Vαντίδραση B")
- #define MSG_VC_JERK _UxGT("Vαντίδραση C")
-#else
- #define MSG_VA_JERK _UxGT("Vαντίδραση X")
- #define MSG_VB_JERK _UxGT("Vαντίδραση Y")
- #define MSG_VC_JERK _UxGT("Vαντίδραση Z")
-#endif
-#define MSG_VE_JERK _UxGT("Vαντίδραση E")
-#define MSG_VMAX _UxGT("Vμεγ ")
-#define MSG_VMIN _UxGT("Vελαχ")
-#define MSG_VTRAV_MIN _UxGT("Vελάχ. μετατόπιση")
-#define MSG_ACCELERATION MSG_ACC
-#define MSG_AMAX _UxGT("Aμεγ ")
-#define MSG_A_RETRACT _UxGT("Α-ανάσυρση")
-#define MSG_A_TRAVEL _UxGT("Α-μετατόπιση")
-#define MSG_STEPS_PER_MM _UxGT("Bήματα ανά μμ")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("Bήματα A ανά μμ")
- #define MSG_BSTEPS _UxGT("Bήματα B ανά μμ")
- #define MSG_CSTEPS _UxGT("Bήματα C ανά μμ")
-#else
- #define MSG_ASTEPS _UxGT("Bήματα X ανά μμ")
- #define MSG_BSTEPS _UxGT("Bήματα Y ανά μμ")
- #define MSG_CSTEPS _UxGT("Bήματα Z ανά μμ")
-#endif
-#define MSG_ESTEPS _UxGT("Bήματα Ε ανά μμ")
-#define MSG_E1STEPS _UxGT("Bήματα Ε1 ανά μμ")
-#define MSG_E2STEPS _UxGT("Bήματα Ε2 ανά μμ")
-#define MSG_E3STEPS _UxGT("Bήματα Ε3 ανά μμ")
-#define MSG_E4STEPS _UxGT("Bήματα Ε4 ανά μμ")
-#define MSG_E5STEPS _UxGT("Bήματα Ε5 ανά μμ")
-#define MSG_TEMPERATURE _UxGT("Θερμοκρασία")
-#define MSG_MOTION _UxGT("Κίνηση")
-#define MSG_FILAMENT _UxGT("Νήμα")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("Ε σε μμ3")
-#define MSG_FILAMENT_DIAM _UxGT("Διάμετρος νήματος")
-#define MSG_CONTRAST _UxGT("Κοντράστ LCD")
-#define MSG_STORE_EEPROM _UxGT("Αποθήκευση")
-#define MSG_LOAD_EEPROM _UxGT("Φόρτωση")
-#define MSG_RESTORE_FAILSAFE _UxGT("Επαναφορά ασφαλούς αντιγράφου")
-#define MSG_REFRESH _UxGT("Ανανέωση")
-#define MSG_WATCH _UxGT("Οθόνη πληροφόρησης")
-#define MSG_PREPARE _UxGT("Προετοιμασία")
-#define MSG_TUNE _UxGT("Συντονισμός")
-#define MSG_PAUSE_PRINT _UxGT("Παύση εκτύπωσης")
-#define MSG_RESUME_PRINT _UxGT("Συνέχιση εκτύπωσης")
-#define MSG_STOP_PRINT _UxGT("Διακοπή εκτύπωσης")
-#define MSG_MEDIA_MENU _UxGT("Εκτύπωση από SD")
-#define MSG_NO_MEDIA _UxGT("Δεν βρέθηκε SD")
-#define MSG_DWELL _UxGT("Αναστολή λειτουργίας…")
-#define MSG_USERWAIT _UxGT("Αναμονή για χρήστη…")
-#define MSG_PRINT_ABORTED _UxGT("Διακόπτεται η εκτύπωση")
-#define MSG_NO_MOVE _UxGT("Καμία κίνηση.")
-#define MSG_KILLED _UxGT("ΤΕΡΜΑΤΙΣΜΟΣ. ")
-#define MSG_STOPPED _UxGT("ΔΙΑΚΟΠΗ. ")
-#define MSG_CONTROL_RETRACT _UxGT("Ανάσυρση μμ")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Εναλλαγή ανάσυρσης μμ")
-#define MSG_CONTROL_RETRACTF _UxGT("Ανάσυρση V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Μεταπήδηση μμ")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("S UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet V")
-#define MSG_AUTORETRACT _UxGT("Αυτόματη ανάσυρση")
-#define MSG_FILAMENTCHANGE _UxGT("Αλλαγή νήματος")
-#define MSG_INIT_MEDIA _UxGT("Προετοιμασία κάρτας SD")
-#define MSG_CHANGE_MEDIA _UxGT("Αλλαγή κάρτας SD")
-#define MSG_ZPROBE_OUT _UxGT("Διερεύνηση Z εκτός κλίνης")
-#define MSG_YX_UNHOMED _UxGT("Επαναφορά Χ/Υ πριν από Ζ")
-#define MSG_XYZ_UNHOMED _UxGT("Επαναφορά ΧΥΖ πρώτα")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Μετατόπιση Ζ")
-#define MSG_BABYSTEP_X _UxGT("Μικρό βήμα Χ")
-#define MSG_BABYSTEP_Y _UxGT("Μικρό βήμα Υ")
-#define MSG_BABYSTEP_Z _UxGT("Μικρό βήμα Ζ")
-#define MSG_ENDSTOP_ABORT _UxGT("Ματαίωση endstop ")
-#define MSG_HEATING_FAILED_LCD _UxGT("Ανεπιτυχής θέρμανση")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Λάθος: ΠΛΕΟΝΑΖΟΥΣΑ ΘΕΡΜΟΤΗΤΑ")
-#define MSG_THERMAL_RUNAWAY _UxGT("ΔΙΑΦΥΓΗ ΘΕΡΜΟΤΗΤΑΣ")
-#define MSG_ERR_MAXTEMP _UxGT("Λάθος: ΜΕΓΙΣΤΗ ΘΕΡΜΟΤΗΤΑ")
-#define MSG_ERR_MINTEMP _UxGT("Λάθος: ΕΛΑΧΙΣΤΗ ΘΕΡΜΟΤΗΤΑ")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Λάθος: ΜΕΓΙΣΤΗ ΘΕΡΜΟΤΗΤΑ ΚΛΙΝΗΣ")
-#define MSG_ERR_MINTEMP_BED _UxGT("Λάθος: ΕΛΑΧΙΣΤΗ ΘΕΡΜΟΤΗΤΑ ΚΛΙΝΗΣ")
-#define MSG_HEATING _UxGT("Θερμαίνεται…")
-#define MSG_BED_HEATING _UxGT("Θέρμανση κλίνης…")
-#define MSG_DELTA_CALIBRATE _UxGT("Βαθμονόμηση Delta")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Βαθμονόμηση X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Βαθμονόμηση Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Βαθμονόμηση Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Βαθμονόμηση κέντρου")
-
-#define MSG_EXPECTED_PRINTER _UxGT("Εσφαλμένος εκτυπωτής")
diff --git a/Marlin/src/lcd/language/language_el.h b/Marlin/src/lcd/language/language_el.h
index 37eb4fbe7478..a74c8da12f08 100644
--- a/Marlin/src/lcd/language/language_el.h
+++ b/Marlin/src/lcd/language/language_el.h
@@ -30,161 +30,225 @@
*/
#define DISPLAY_CHARSET_ISO10646_GREEK
-#define CHARSIZE 2
-#define WELCOME_MSG MACHINE_NAME _UxGT(" έτοιμο.")
-#define MSG_MEDIA_INSERTED _UxGT("Εισαγωγή κάρτας")
-#define MSG_MEDIA_REMOVED _UxGT("Αφαίρεση κάρτας")
-#define MSG_LCD_ENDSTOPS _UxGT("Endstops") // Max length 8 characters
-#define MSG_MAIN _UxGT("Βασική Οθόνη")
-#define MSG_AUTOSTART _UxGT("Αυτόματη εκκίνηση")
-#define MSG_DISABLE_STEPPERS _UxGT("Απενεργοποίηση Μοτέρ")
-#define MSG_AUTO_HOME _UxGT("Αυτομ. επαναφορά στο αρχικό σημείο") //SHORTEN
-#define MSG_AUTO_HOME_X _UxGT("Αρχικό σημείο X")
-#define MSG_AUTO_HOME_Y _UxGT("Αρχικό σημείο Y")
-#define MSG_AUTO_HOME_Z _UxGT("Αρχικό σημείο Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Επαναφορά Επ. Εκτύπωσης") //SHORTEN
-#define MSG_LEVEL_BED_WAITING _UxGT("Επιπεδοποίηση επ. Εκτύπωσης περιμενει") //SHORTEN
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Επόμενο σημείο")
-#define MSG_LEVEL_BED_DONE _UxGT("Ολοκλήρωση επιπεδοποίησης!") //SHORTEN
-#define MSG_SET_HOME_OFFSETS _UxGT("Ορισμός βασικών μετατοπίσεων") //SHORTEN
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Εφαρμόστηκαν οι μετατοπίσεις") //SHORTEN
-#define MSG_SET_ORIGIN _UxGT("Ορισμός προέλευσης")
-#define MSG_PREHEAT_1 _UxGT("Προθέρμανση " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" όλα")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" bed") //SHORTEN
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" επιβεβαίωση") //SHORTEN
-#define MSG_PREHEAT_2 _UxGT("Προθέρμανση " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" όλα")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" bed") //SHORTEN
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" επιβεβαίωση") //SHORTEN
-#define MSG_COOLDOWN _UxGT("Μειωση θερμοκρασιας")
-#define MSG_SWITCH_PS_ON _UxGT("Ενεργοποίηση")
-#define MSG_SWITCH_PS_OFF _UxGT("Απενεργοποίηση")
-#define MSG_EXTRUDE _UxGT("Εξώθηση")
-#define MSG_RETRACT _UxGT("Ανάσυρση")
-#define MSG_MOVE_AXIS _UxGT("Μετακίνηση άξονα")
-#define MSG_BED_LEVELING _UxGT("Επιπεδοποίηση Επ. Εκτύπωσης") //SHORTEN
-#define MSG_LEVEL_BED _UxGT("Επιπεδοποίηση Επ. Εκτύπωσης") //SHORTEN
-#define MSG_MOVE_X _UxGT("Μετακίνηση X")
-#define MSG_MOVE_Y _UxGT("Μετακίνηση Y")
-#define MSG_MOVE_Z _UxGT("Μετακίνηση Z")
-#define MSG_MOVE_E _UxGT("Εξωθητήρας")
-#define MSG_MOVE_Z_DIST _UxGT("Μετακίνηση %s μμ")
-#define MSG_MOVE_01MM _UxGT("Μετακίνηση 0,1 μμ")
-#define MSG_MOVE_1MM _UxGT("Μετακίνηση 1 μμ")
-#define MSG_MOVE_10MM _UxGT("Μετακίνηση 10 μμ")
-#define MSG_SPEED _UxGT("Ταχύτητα")
-#define MSG_BED_Z _UxGT("Επ. Εκτύπωσης Z")
-#define MSG_NOZZLE _UxGT("Ακροφύσιο")
-#define MSG_BED _UxGT("Κλίνη")
-#define MSG_FAN_SPEED _UxGT("Ταχύτητα ανεμιστήρα")
-#define MSG_FLOW _UxGT("Ροή")
-#define MSG_CONTROL _UxGT("Έλεγχος")
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP _UxGT("Αυτομ ρύθμιση θερ/σίας") //SHORTEN
-#define MSG_LCD_ON _UxGT("Ενεργοποιημένο")
-#define MSG_LCD_OFF _UxGT("Απενεργοποιημένο")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_ACC _UxGT("Επιτάχυνση")
-#define MSG_JERK _UxGT("Jerk")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Vαντίδραση A")
- #define MSG_VB_JERK _UxGT("Vαντίδραση B")
- #define MSG_VC_JERK _UxGT("Vαντίδραση C")
-#else
- #define MSG_VA_JERK _UxGT("Vαντίδραση X")
- #define MSG_VB_JERK _UxGT("Vαντίδραση Y")
- #define MSG_VC_JERK _UxGT("Vαντίδραση Z")
-#endif
-#define MSG_VE_JERK _UxGT("Vαντίδραση E")
-#define MSG_VMAX _UxGT("V Μέγιστο")
-#define MSG_VMIN _UxGT("V Ελάχιστο")
-#define MSG_VTRAV_MIN _UxGT("Vελάχ. μετατόπιση")
-#define MSG_ACCELERATION MSG_ACC
-#define MSG_AMAX _UxGT("Aμεγ ")
-#define MSG_A_RETRACT _UxGT("Α-ανάσυρση")
-#define MSG_A_TRAVEL _UxGT("Α-μετατόπιση")
-#define MSG_STEPS_PER_MM _UxGT("Bήματα ανά μμ")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("Bήματα A ανά μμ")
- #define MSG_BSTEPS _UxGT("Bήματα B ανά μμ")
- #define MSG_CSTEPS _UxGT("Bήματα C ανά μμ")
-#else
- #define MSG_ASTEPS _UxGT("Bήματα X ανά μμ")
- #define MSG_BSTEPS _UxGT("Bήματα Y ανά μμ")
- #define MSG_CSTEPS _UxGT("Bήματα Z ανά μμ")
-#endif
-#define MSG_ESTEPS _UxGT("Bήματα Ε ανά μμ")
-#define MSG_E1STEPS _UxGT("Bήματα Ε1 ανά μμ")
-#define MSG_E2STEPS _UxGT("Bήματα Ε2 ανά μμ")
-#define MSG_E3STEPS _UxGT("Bήματα Ε3 ανά μμ")
-#define MSG_E4STEPS _UxGT("Bήματα Ε4 ανά μμ")
-#define MSG_E5STEPS _UxGT("Bήματα Ε5 ανά μμ")
-#define MSG_TEMPERATURE _UxGT("Θερμοκρασία")
-#define MSG_MOTION _UxGT("Κίνηση")
-#define MSG_FILAMENT _UxGT("Νήμα")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("Ε σε μμ3")
-#define MSG_FILAMENT_DIAM _UxGT("Διάμετρος νήματος")
-#define MSG_CONTRAST _UxGT("Κοντράστ LCD")
-#define MSG_STORE_EEPROM _UxGT("Αποθήκευση")
-#define MSG_LOAD_EEPROM _UxGT("Φόρτωση")
-#define MSG_RESTORE_FAILSAFE _UxGT("Επαναφορά ασφαλούς αντιγράφου") //SHORTEN
-#define MSG_REFRESH _UxGT("Ανανέωση")
-#define MSG_WATCH _UxGT("Οθόνη πληροφόρησης")
-#define MSG_PREPARE _UxGT("Προετοιμασία")
-#define MSG_TUNE _UxGT("Συντονισμός")
-#define MSG_PAUSE_PRINT _UxGT("Παύση εκτύπωσης")
-#define MSG_RESUME_PRINT _UxGT("Συνέχιση εκτύπωσης")
-#define MSG_STOP_PRINT _UxGT("Διακοπή εκτύπωσης")
-#define MSG_MEDIA_MENU _UxGT("Εκτύπωση από SD")
-#define MSG_NO_MEDIA _UxGT("Δεν βρέθηκε SD")
-#define MSG_DWELL _UxGT("Αναστολή λειτουργίας")
-#define MSG_USERWAIT _UxGT("Αναμονή για χρήστη")
-#define MSG_PRINT_ABORTED _UxGT("Διακόπτεται η εκτύπωση") //SHORTEN
-#define MSG_NO_MOVE _UxGT("Καμία κίνηση.")
-#define MSG_KILLED _UxGT("ΤΕΡΜΑΤΙΣΜΟΣ. ")
-#define MSG_STOPPED _UxGT("ΔΙΑΚΟΠΗ. ")
-#define MSG_CONTROL_RETRACT _UxGT("Ανάσυρση μμ")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Εναλλαγή ανάσυρσης μμ") //SHORTEN
-#define MSG_CONTROL_RETRACTF _UxGT("Ανάσυρση V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Μεταπήδηση μμ")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("S UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet V")
-#define MSG_AUTORETRACT _UxGT("Αυτόματη ανάσυρση")
-#define MSG_FILAMENTCHANGE _UxGT("Αλλαγή νήματος")
-#define MSG_INIT_MEDIA _UxGT("Προετοιμασία κάρτας SD") //SHORTEN
-#define MSG_CHANGE_MEDIA _UxGT("Αλλαγή κάρτας SD")
-#define MSG_ZPROBE_OUT _UxGT("Διερεύνηση Z εκτός Επ.Εκτύπωσης") //SHORTEN
-#define MSG_YX_UNHOMED _UxGT("Επαναφορά Χ/Υ πριν από Ζ") //SHORTEN
-#define MSG_XYZ_UNHOMED _UxGT("Επαναφορά ΧΥΖ πρώτα")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Μετατόπιση Ζ")
-#define MSG_BABYSTEP_X _UxGT("Μικρό βήμα Χ")
-#define MSG_BABYSTEP_Y _UxGT("Μικρό βήμα Υ")
-#define MSG_BABYSTEP_Z _UxGT("Μικρό βήμα Ζ")
-#define MSG_ENDSTOP_ABORT _UxGT("Ακύρωση endstop ")
-#define MSG_HEATING_FAILED_LCD _UxGT("Ανεπιτυχής θέρμανση")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("ΠΛΕΟΝΑΖΟΥΣΑ ΘΕΡΜΟΤΗΤΑ")
-#define MSG_THERMAL_RUNAWAY _UxGT("ΔΙΑΦΥΓΗ ΘΕΡΜΟΚΡΑΣΙΑΣ")
-#define MSG_ERR_MAXTEMP _UxGT("ΠΕΡΙΤΗ ΘΕΡΜΟΚΡΑΣΙΑ")
-#define MSG_ERR_MINTEMP _UxGT("ΜΗ ΕΠΑΡΚΗΣ ΘΕΡΜΟΚΡΑΣΙΑΣ") //SHORTEN
-#define MSG_ERR_MAXTEMP_BED _UxGT("ΜΕΓΙΣΤΗ ΘΕΡΜΟΚΡΑΣΙΑΣ ΕΠ. ΕΚΤΥΠΩΣΗΣ") //SHORTEN
-#define MSG_ERR_MINTEMP_BED _UxGT("ΕΛΑΧΙΣΤΗ ΘΕΡΜΟΚΡΑΣΙΑΣ ΕΠ. ΕΚΤΥΠΩΣΗΣ") //SHORTEN
-#define MSG_HALTED _UxGT("H εκτύπωση διακόπηκε")
-#define MSG_HEATING _UxGT("Θερμαίνεται…")
-#define MSG_BED_HEATING _UxGT("Θέρμανση ΕΠ. Εκτύπωσης") //SHORTEN
-#define MSG_DELTA_CALIBRATE _UxGT("Βαθμονόμηση Delta")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Βαθμονόμηση X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Βαθμονόμηση Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Βαθμονόμηση Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Βαθμονόμηση κέντρου")
+namespace Language_el {
+ using namespace Language_en; // Inherit undefined strings from English
-#define MSG_EXPECTED_PRINTER _UxGT("Εσφαλμένος εκτυπωτής")
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Greek");
+
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" έτοιμο.");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Εισαγωγή κάρτας");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Αφαίρεση κάρτας");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Βασική Οθόνη");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Αυτόματη εκκίνηση");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Απενεργοποίηση Μοτέρ");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Αυτομ. επαναφορά στο αρχικό σημείο"); //SHORTEN
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Αρχικό σημείο X");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Αρχικό σημείο Y");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Αρχικό σημείο Z");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Επαναφορά Επ. Εκτύπωσης"); //SHORTEN
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Επιπεδοποίηση επ. Εκτύπωσης περιμενει"); //SHORTEN
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Επόμενο σημείο");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Ολοκλήρωση επιπεδοποίησης!"); //SHORTEN
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Ορισμός βασικών μετατοπίσεων"); //SHORTEN
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Εφαρμόστηκαν οι μετατοπίσεις"); //SHORTEN
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Ορισμός προέλευσης");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" όλα");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" bed"); //SHORTEN
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" επιβεβαίωση"); //SHORTEN
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" όλα");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" bed"); //SHORTEN
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" επιβεβαίωση"); //SHORTEN
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Μειωση θερμοκρασιας");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Ενεργοποίηση");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Απενεργοποίηση");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Εξώθηση");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Ανάσυρση");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Μετακίνηση άξονα");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Επιπεδοποίηση Επ. Εκτύπωσης"); //SHORTEN
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Επιπεδοποίηση Επ. Εκτύπωσης"); //SHORTEN
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Μετακίνηση X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Μετακίνηση Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Μετακίνηση Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Εξωθητήρας");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Εξωθητήρας ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Εξωθητήρας ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Εξωθητήρας ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Εξωθητήρας ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Εξωθητήρας ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Εξωθητήρας ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Μετακίνηση %s μμ");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Μετακίνηση 0,1 μμ");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Μετακίνηση 1 μμ");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Μετακίνηση 10 μμ");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Ταχύτητα");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Επ. Εκτύπωσης Z");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Ακροφύσιο");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Ακροφύσιο ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Ακροφύσιο ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Ακροφύσιο ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Ακροφύσιο ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Ακροφύσιο ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Ακροφύσιο ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Κλίνη");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Ταχύτητα ανεμιστήρα");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Ταχύτητα ανεμιστήρα 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Ταχύτητα ανεμιστήρα 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Ταχύτητα ανεμιστήρα 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Ροή");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Ροή ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Ροή ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Ροή ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Ροή ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Ροή ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Ροή ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Έλεγχος");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Αυτομ ρύθμιση θερ/σίας"); //SHORTEN
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("Ενεργοποιημένο");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Απενεργοποιημένο");
+ PROGMEM Language_Str MSG_ACC = _UxGT("Επιτάχυνση");
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("Vαντίδραση ") LCD_STR_A;
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("Vαντίδραση ") LCD_STR_B;
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("Vαντίδραση ") LCD_STR_C;
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("Vαντίδραση E");
+ PROGMEM Language_Str MSG_VMAX_A = _UxGT("V Μέγιστο") LCD_STR_A;
+ PROGMEM Language_Str MSG_VMAX_B = _UxGT("V Μέγιστο") LCD_STR_B;
+ PROGMEM Language_Str MSG_VMAX_C = _UxGT("V Μέγιστο") LCD_STR_C;
+ PROGMEM Language_Str MSG_VMAX_E = _UxGT("V Μέγιστο") LCD_STR_E;
+ PROGMEM Language_Str MSG_VMAX_E0 = _UxGT("V Μέγιστο ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_VMAX_E1 = _UxGT("V Μέγιστο ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_VMAX_E2 = _UxGT("V Μέγιστο ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_VMAX_E3 = _UxGT("V Μέγιστο ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_VMAX_E4 = _UxGT("V Μέγιστο ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_VMAX_E5 = _UxGT("V Μέγιστο ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_VMIN = _UxGT("V Ελάχιστο");
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vελάχ. μετατόπιση");
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Accel");
+ PROGMEM Language_Str MSG_AMAX_A = _UxGT("Aμεγ ") LCD_STR_A;
+ PROGMEM Language_Str MSG_AMAX_B = _UxGT("Aμεγ ") LCD_STR_B;
+ PROGMEM Language_Str MSG_AMAX_C = _UxGT("Aμεγ ") LCD_STR_C;
+ PROGMEM Language_Str MSG_AMAX_E = _UxGT("Aμεγ ") LCD_STR_E;
+ PROGMEM Language_Str MSG_AMAX_E0 = _UxGT("Aμεγ ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AMAX_E1 = _UxGT("Aμεγ ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AMAX_E2 = _UxGT("Aμεγ ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AMAX_E3 = _UxGT("Aμεγ ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AMAX_E4 = _UxGT("Aμεγ ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AMAX_E5 = _UxGT("Aμεγ ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Α-ανάσυρση");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Α-μετατόπιση");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Bήματα ανά μμ");
+ PROGMEM Language_Str MSG_A_STEPS = _UxGT("Bήματα ") LCD_STR_A _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_B_STEPS = _UxGT("Bήματα ") LCD_STR_B _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_C_STEPS = _UxGT("Bήματα ") LCD_STR_C _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("Bήματα Ε ανά μμ");
+ PROGMEM Language_Str MSG_E0_STEPS = _UxGT("Bήματα ") LCD_STR_E0 _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_E1_STEPS = _UxGT("Bήματα ") LCD_STR_E1 _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_E2_STEPS = _UxGT("Bήματα ") LCD_STR_E2 _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_E3_STEPS = _UxGT("Bήματα ") LCD_STR_E3 _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_E4_STEPS = _UxGT("Bήματα ") LCD_STR_E4 _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_E5_STEPS = _UxGT("Bήματα ") LCD_STR_E5 _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Θερμοκρασία");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Κίνηση");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Νήμα");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("Ε σε μμ3");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Διάμετρος νήματος");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Διάμετρος νήματος ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Διάμετρος νήματος ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Διάμετρος νήματος ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Διάμετρος νήματος ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Διάμετρος νήματος ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Διάμετρος νήματος ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("Κοντράστ LCD");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Αποθήκευση");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Φόρτωση");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Επαναφορά ασφαλούς αντιγράφου"); //SHORTEN
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Ανανέωση");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Οθόνη πληροφόρησης");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Προετοιμασία");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Συντονισμός");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Παύση εκτύπωσης");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Συνέχιση εκτύπωσης");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Διακοπή εκτύπωσης");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Εκτύπωση από SD");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Δεν βρέθηκε SD");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Αναστολή λειτουργίας");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Αναμονή για χρήστη");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Διακόπτεται η εκτύπωση"); //SHORTEN
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Καμία κίνηση.");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("ΤΕΡΜΑΤΙΣΜΟΣ. ");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("ΔΙΑΚΟΠΗ. ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Ανάσυρση μμ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Εναλλαγή ανάσυρσης μμ"); //SHORTEN
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Ανάσυρση V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Μεταπήδηση μμ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("UnRet V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Αυτόματη ανάσυρση");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Αλλαγή νήματος");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Αλλαγή νήματος ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Αλλαγή νήματος ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Αλλαγή νήματος ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Αλλαγή νήματος ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Αλλαγή νήματος ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Αλλαγή νήματος ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Προετοιμασία κάρτας SD"); //SHORTEN
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Αλλαγή κάρτας SD");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Διερεύνηση Z εκτός Επ.Εκτύπωσης"); //SHORTEN
+ PROGMEM Language_Str MSG_YX_UNHOMED = _UxGT("Επαναφορά Χ/Υ πριν από Ζ"); //SHORTEN
+ PROGMEM Language_Str MSG_XYZ_UNHOMED = _UxGT("Επαναφορά ΧΥΖ πρώτα");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Μετατόπιση Ζ");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Μικρό βήμα Χ");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Μικρό βήμα Υ");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Μικρό βήμα Ζ");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Ακύρωση endstop ");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Ανεπιτυχής θέρμανση");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("ΠΛΕΟΝΑΖΟΥΣΑ ΘΕΡΜΟΤΗΤΑ");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("ΔΙΑΦΥΓΗ ΘΕΡΜΟΚΡΑΣΙΑΣ");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("ΠΕΡΙΤΗ ΘΕΡΜΟΚΡΑΣΙΑ");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("ΜΗ ΕΠΑΡΚΗΣ ΘΕΡΜΟΚΡΑΣΙΑΣ"); //SHORTEN
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("ΜΕΓΙΣΤΗ ΘΕΡΜΟΚΡΑΣΙΑΣ ΕΠ. ΕΚΤΥΠΩΣΗΣ"); //SHORTEN
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("ΕΛΑΧΙΣΤΗ ΘΕΡΜΟΚΡΑΣΙΑΣ ΕΠ. ΕΚΤΥΠΩΣΗΣ"); //SHORTEN
+ PROGMEM Language_Str MSG_HALTED = _UxGT("H εκτύπωση διακόπηκε");
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Θερμαίνεται…");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Θέρμανση ΕΠ. Εκτύπωσης"); //SHORTEN
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Βαθμονόμηση Delta");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Βαθμονόμηση X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Βαθμονόμηση Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Βαθμονόμηση Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Βαθμονόμηση κέντρου");
+
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Εσφαλμένος εκτυπωτής");
+}
diff --git a/Marlin/src/lcd/language/language_el_gr.h b/Marlin/src/lcd/language/language_el_gr.h
new file mode 100644
index 000000000000..e78a2290085e
--- /dev/null
+++ b/Marlin/src/lcd/language/language_el_gr.h
@@ -0,0 +1,283 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * Greek (Greece)
+ *
+ * LCD Menu Messages
+ * See also http://marlinfw.org/docs/development/lcd_language.html
+ *
+ */
+
+#define DISPLAY_CHARSET_ISO10646_GREEK
+
+namespace Language_el_gr {
+ using namespace Language_en; // Inherit undefined strings from English
+
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Greek (Greece)");
+
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" έτοιμο.");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Εισαγωγή κάρτας");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Αφαίρεση κάρτας");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Βασική Οθόνη");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Αυτόματη εκκίνηση");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Απενεργοποίηση βηματιστή");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Αυτομ. επαναφορά στο αρχικό σημείο");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Αρχικό σημείο X");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Αρχικό σημείο Y");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Αρχικό σημείο Z");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Επαναφορά στο αρχικό σημείο ΧΥΖ");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Κάντε κλικ για να ξεκινήσετε");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Επόμενο σημείο");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Ολοκλήρωση επιπεδοποίησης!");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Ορισμός βασικών μετατοπίσεων");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Εφαρμόστηκαν οι μετατοπίσεις");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Ορισμός προέλευσης");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" όλα");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" κλίνη");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" επιβεβαίωση");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" όλα");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" κλίνη");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Προθέρμανση ") PREHEAT_2_LABEL _UxGT(" επιβεβαίωση");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Μειωση θερμοκρασιας");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Ενεργοποίηση");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Απενεργοποίηση");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Εξώθηση");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Ανάσυρση");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Μετακίνηση άξονα");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Επιπεδοποίηση κλίνης");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Επιπεδοποίηση κλίνης");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Μετακίνηση X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Μετακίνηση Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Μετακίνηση Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Εξωθητήρας");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Εξωθητήρας ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Εξωθητήρας ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Εξωθητήρας ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Εξωθητήρας ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Εξωθητήρας ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Εξωθητήρας ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Μετακίνηση %s μμ");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Μετακίνηση 0,1 μμ");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Μετακίνηση 1 μμ");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Μετακίνηση 10 μμ");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Ταχύτητα");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Κλίνη Z");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Ακροφύσιο");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Ακροφύσιο ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Ακροφύσιο ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Ακροφύσιο ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Ακροφύσιο ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Ακροφύσιο ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Ακροφύσιο ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Κλίνη");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Ταχύτητα ανεμιστήρα");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Ταχύτητα ανεμιστήρα 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Ταχύτητα ανεμιστήρα 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Ταχύτητα ανεμιστήρα 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Ροή");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Ροή ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Ροή ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Ροή ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Ροή ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Ροή ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Ροή ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Έλεγχος");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Αυτομ. ρύθμιση θερμοκρασίας");
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("Ενεργοποιημένο");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Απενεργοποιημένο");
+ PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
+ PROGMEM Language_Str MSG_PID_P_E0 = _UxGT("PID-P ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_P_E1 = _UxGT("PID-P ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_P_E2 = _UxGT("PID-P ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_P_E3 = _UxGT("PID-P ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_P_E4 = _UxGT("PID-P ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_P_E5 = _UxGT("PID-P ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
+ PROGMEM Language_Str MSG_PID_I_E0 = _UxGT("PID-I ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_I_E1 = _UxGT("PID-I ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_I_E2 = _UxGT("PID-I ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_I_E3 = _UxGT("PID-I ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_I_E4 = _UxGT("PID-I ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_I_E5 = _UxGT("PID-I ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
+ PROGMEM Language_Str MSG_PID_D_E0 = _UxGT("PID-D ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_D_E1 = _UxGT("PID-D ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_D_E2 = _UxGT("PID-D ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_D_E3 = _UxGT("PID-D ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_D_E4 = _UxGT("PID-D ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_D_E5 = _UxGT("PID-D ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
+ PROGMEM Language_Str MSG_PID_C_E0 = _UxGT("PID-C ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_C_E1 = _UxGT("PID-C ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_C_E2 = _UxGT("PID-C ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_C_E3 = _UxGT("PID-C ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_C_E4 = _UxGT("PID-C ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_C_E5 = _UxGT("PID-C ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Επιτάχυνση");
+ PROGMEM Language_Str MSG_JERK = _UxGT("Vαντίδραση");
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("Vαντίδραση ") LCD_STR_A;
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("Vαντίδραση ") LCD_STR_B;
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("Vαντίδραση ") LCD_STR_C;
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("Vαντίδραση E");
+ PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vμεγ ") LCD_STR_A;
+ PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vμεγ ") LCD_STR_B;
+ PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vμεγ ") LCD_STR_C;
+ PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vμεγ ") LCD_STR_E;
+ PROGMEM Language_Str MSG_VMAX_E0 = _UxGT("Vμεγ ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_VMAX_E1 = _UxGT("Vμεγ ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_VMAX_E2 = _UxGT("Vμεγ ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_VMAX_E3 = _UxGT("Vμεγ ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_VMAX_E4 = _UxGT("Vμεγ ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_VMAX_E5 = _UxGT("Vμεγ ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_VMIN = _UxGT("Vελαχ");
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vελάχ. μετατόπιση");
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Accel");
+ PROGMEM Language_Str MSG_AMAX_A = _UxGT("Aμεγ ") LCD_STR_A;
+ PROGMEM Language_Str MSG_AMAX_B = _UxGT("Aμεγ ") LCD_STR_B;
+ PROGMEM Language_Str MSG_AMAX_C = _UxGT("Aμεγ ") LCD_STR_C;
+ PROGMEM Language_Str MSG_AMAX_E = _UxGT("Aμεγ ") LCD_STR_E;
+ PROGMEM Language_Str MSG_AMAX_E0 = _UxGT("Aμεγ ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AMAX_E1 = _UxGT("Aμεγ ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AMAX_E2 = _UxGT("Aμεγ ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AMAX_E3 = _UxGT("Aμεγ ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AMAX_E4 = _UxGT("Aμεγ ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AMAX_E5 = _UxGT("Aμεγ ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Α-ανάσυρση");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Α-μετατόπιση");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Bήματα ανά μμ");
+ PROGMEM Language_Str MSG_A_STEPS = _UxGT("Bήματα ") LCD_STR_A _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_B_STEPS = _UxGT("Bήματα ") LCD_STR_B _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_C_STEPS = _UxGT("Bήματα ") LCD_STR_C _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("Bήματα Ε ανά μμ");
+ PROGMEM Language_Str MSG_E0_STEPS = _UxGT("Bήματα ") LCD_STR_E0 _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_E1_STEPS = _UxGT("Bήματα ") LCD_STR_E1 _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_E2_STEPS = _UxGT("Bήματα ") LCD_STR_E2 _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_E3_STEPS = _UxGT("Bήματα ") LCD_STR_E3 _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_E4_STEPS = _UxGT("Bήματα ") LCD_STR_E4 _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_E5_STEPS = _UxGT("Bήματα ") LCD_STR_E5 _UxGT(" ανά μμ");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Θερμοκρασία");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Κίνηση");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Νήμα");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("Ε σε μμ3");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Διάμετρος νήματος");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Διάμετρος νήματος ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Διάμετρος νήματος ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Διάμετρος νήματος ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Διάμετρος νήματος ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Διάμετρος νήματος ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Διάμετρος νήματος ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("Κοντράστ LCD");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Αποθήκευση");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Φόρτωση");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Επαναφορά ασφαλούς αντιγράφου");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Ανανέωση");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Οθόνη πληροφόρησης");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Προετοιμασία");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Συντονισμός");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Παύση εκτύπωσης");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Συνέχιση εκτύπωσης");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Διακοπή εκτύπωσης");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Εκτύπωση από SD");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Δεν βρέθηκε SD");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Αναστολή λειτουργίας…");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Αναμονή για χρήστη…");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Διακόπτεται η εκτύπωση");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Καμία κίνηση.");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("ΤΕΡΜΑΤΙΣΜΟΣ. ");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("ΔΙΑΚΟΠΗ. ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Ανάσυρση μμ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Εναλλαγή ανάσυρσης μμ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Ανάσυρση V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Μεταπήδηση μμ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("UnRet V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Αυτόματη ανάσυρση");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Αλλαγή νήματος");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Αλλαγή νήματος ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Αλλαγή νήματος ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Αλλαγή νήματος ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Αλλαγή νήματος ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Αλλαγή νήματος ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Αλλαγή νήματος ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Προετοιμασία κάρτας SD");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Αλλαγή κάρτας SD");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Διερεύνηση Z εκτός κλίνης");
+ PROGMEM Language_Str MSG_YX_UNHOMED = _UxGT("Επαναφορά Χ/Υ πριν από Ζ");
+ PROGMEM Language_Str MSG_XYZ_UNHOMED = _UxGT("Επαναφορά ΧΥΖ πρώτα");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Μετατόπιση Ζ");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Μικρό βήμα Χ");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Μικρό βήμα Υ");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Μικρό βήμα Ζ");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Ματαίωση endstop ");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Ανεπιτυχής θέρμανση");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Λάθος: ΠΛΕΟΝΑΖΟΥΣΑ ΘΕΡΜΟΤΗΤΑ");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("ΔΙΑΦΥΓΗ ΘΕΡΜΟΤΗΤΑΣ");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Λάθος: ΜΕΓΙΣΤΗ ΘΕΡΜΟΤΗΤΑ");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Λάθος: ΕΛΑΧΙΣΤΗ ΘΕΡΜΟΤΗΤΑ");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("Λάθος: ΜΕΓΙΣΤΗ ΘΕΡΜΟΤΗΤΑ ΚΛΙΝΗΣ");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Λάθος: ΕΛΑΧΙΣΤΗ ΘΕΡΜΟΤΗΤΑ ΚΛΙΝΗΣ");
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Θερμαίνεται…");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Θέρμανση κλίνης…");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Βαθμονόμηση Delta");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Βαθμονόμηση X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Βαθμονόμηση Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Βαθμονόμηση Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Βαθμονόμηση κέντρου");
+
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Εσφαλμένος εκτυπωτής");
+}
diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h
index ce24ecba67e0..837290c38762 100644
--- a/Marlin/src/lcd/language/language_en.h
+++ b/Marlin/src/lcd/language/language_en.h
@@ -35,1551 +35,685 @@
#endif
#undef en
-#ifndef THIS_LANGUAGES_SPECIAL_SYMBOLS
- #define THIS_LANGUAGES_SPECIAL_SYMBOLS _UxGT("³")
-#endif
-
-#ifdef NOT_EXTENDED_ISO10646_1_5X7
- #define MSG_CUBED _UxGT("^3")
-#else
- #define MSG_CUBED _UxGT("³")
-#endif
+namespace Language_en {
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("English");
-#ifndef CHARSIZE
- #define CHARSIZE 1
-#endif
-
-#ifndef WELCOME_MSG
- #define WELCOME_MSG MACHINE_NAME _UxGT(" Ready.")
-#endif
-#ifndef MSG_YES
- #define MSG_YES _UxGT("YES")
-#endif
-#ifndef MSG_NO
- #define MSG_NO _UxGT("NO")
-#endif
-#ifndef MSG_BACK
- #define MSG_BACK _UxGT("Back")
-#endif
-#ifndef MSG_MEDIA_ABORTING
- #define MSG_MEDIA_ABORTING _UxGT("Aborting...")
-#endif
-#ifndef MSG_MEDIA_INSERTED
- #define MSG_MEDIA_INSERTED _UxGT("Media Inserted")
-#endif
-#ifndef MSG_MEDIA_REMOVED
- #define MSG_MEDIA_REMOVED _UxGT("Media Removed")
-#endif
-#ifndef MSG_MEDIA_RELEASED
- #define MSG_MEDIA_RELEASED _UxGT("Media Released")
-#endif
-#ifndef MSG_MEDIA_WAITING
- #define MSG_MEDIA_WAITING _UxGT("Waiting for media")
-#endif
-#ifndef MSG_MEDIA_READ_ERROR
- #define MSG_MEDIA_READ_ERROR _UxGT("Media read error")
-#endif
-#ifndef MSG_MEDIA_USB_REMOVED
- #define MSG_MEDIA_USB_REMOVED _UxGT("USB device removed")
-#endif
-#ifndef MSG_MEDIA_USB_FAILED
- #define MSG_MEDIA_USB_FAILED _UxGT("USB start failed")
-#endif
-#ifndef MSG_LCD_ENDSTOPS
- #define MSG_LCD_ENDSTOPS _UxGT("Endstops") // Max length 8 characters
-#endif
-#ifndef MSG_LCD_SOFT_ENDSTOPS
- #define MSG_LCD_SOFT_ENDSTOPS _UxGT("Soft Endstops")
-#endif
-#ifndef MSG_MAIN
- #define MSG_MAIN _UxGT("Main")
-#endif
-#ifndef MSG_ADVANCED_SETTINGS
- #define MSG_ADVANCED_SETTINGS _UxGT("Advanced Settings")
-#endif
-#ifndef MSG_CONFIGURATION
- #define MSG_CONFIGURATION _UxGT("Configuration")
-#endif
-#ifndef MSG_AUTOSTART
- #define MSG_AUTOSTART _UxGT("Autostart")
-#endif
-#ifndef MSG_DISABLE_STEPPERS
- #define MSG_DISABLE_STEPPERS _UxGT("Disable Steppers")
-#endif
-#ifndef MSG_DEBUG_MENU
- #define MSG_DEBUG_MENU _UxGT("Debug Menu")
-#endif
-#ifndef MSG_PROGRESS_BAR_TEST
- #define MSG_PROGRESS_BAR_TEST _UxGT("Progress Bar Test")
-#endif
-#ifndef MSG_AUTO_HOME
- #define MSG_AUTO_HOME _UxGT("Auto Home")
-#endif
-#ifndef MSG_AUTO_HOME_X
- #define MSG_AUTO_HOME_X _UxGT("Home X")
-#endif
-#ifndef MSG_AUTO_HOME_Y
- #define MSG_AUTO_HOME_Y _UxGT("Home Y")
-#endif
-#ifndef MSG_AUTO_HOME_Z
- #define MSG_AUTO_HOME_Z _UxGT("Home Z")
-#endif
-#ifndef MSG_AUTO_Z_ALIGN
- #define MSG_AUTO_Z_ALIGN _UxGT("Auto Z-Align")
-#endif
-#ifndef MSG_LEVEL_BED_HOMING
- #define MSG_LEVEL_BED_HOMING _UxGT("Homing XYZ")
-#endif
-#ifndef MSG_LEVEL_BED_WAITING
- #define MSG_LEVEL_BED_WAITING _UxGT("Click to Begin")
-#endif
-#ifndef MSG_LEVEL_BED_NEXT_POINT
- #define MSG_LEVEL_BED_NEXT_POINT _UxGT("Next Point")
-#endif
-#ifndef MSG_LEVEL_BED_DONE
- #define MSG_LEVEL_BED_DONE _UxGT("Leveling Done!")
-#endif
-#ifndef MSG_Z_FADE_HEIGHT
- #define MSG_Z_FADE_HEIGHT _UxGT("Fade Height")
-#endif
-#ifndef MSG_SET_HOME_OFFSETS
- #define MSG_SET_HOME_OFFSETS _UxGT("Set Home Offsets")
-#endif
-#ifndef MSG_HOME_OFFSETS_APPLIED
- #define MSG_HOME_OFFSETS_APPLIED _UxGT("Offsets Applied")
-#endif
-#ifndef MSG_SET_ORIGIN
- #define MSG_SET_ORIGIN _UxGT("Set Origin")
-#endif
-#ifndef MSG_PREHEAT_1
- #define MSG_PREHEAT_1 _UxGT("Preheat " PREHEAT_1_LABEL)
-#endif
-#ifndef MSG_PREHEAT_1_N
- #define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#endif
-#ifndef MSG_PREHEAT_1_ALL
- #define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" All")
-#endif
-#ifndef MSG_PREHEAT_1_END
- #define MSG_PREHEAT_1_END MSG_PREHEAT_1 _UxGT(" End")
-#endif
-#ifndef MSG_PREHEAT_1_BEDONLY
- #define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" Bed")
-#endif
-#ifndef MSG_PREHEAT_1_SETTINGS
- #define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" Conf")
-#endif
-#ifndef MSG_PREHEAT_2
- #define MSG_PREHEAT_2 _UxGT("Preheat " PREHEAT_2_LABEL)
-#endif
-#ifndef MSG_PREHEAT_2_N
- #define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#endif
-#ifndef MSG_PREHEAT_2_ALL
- #define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" All")
-#endif
-#ifndef MSG_PREHEAT_2_END
- #define MSG_PREHEAT_2_END MSG_PREHEAT_2 _UxGT(" End")
-#endif
-#ifndef MSG_PREHEAT_2_BEDONLY
- #define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" Bed")
-#endif
-#ifndef MSG_PREHEAT_2_SETTINGS
- #define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" Conf")
-#endif
-#ifndef MSG_PREHEAT_CUSTOM
- #define MSG_PREHEAT_CUSTOM _UxGT("Preheat Custom")
-#endif
-#ifndef MSG_COOLDOWN
- #define MSG_COOLDOWN _UxGT("Cooldown")
-#endif
-#ifndef MSG_LASER_MENU
- #define MSG_LASER_MENU _UxGT("Laser Control")
-#endif
-#ifndef MSG_LASER_OFF
- #define MSG_LASER_OFF _UxGT("Laser Off")
-#endif
-#ifndef MSG_LASER_ON
- #define MSG_LASER_ON _UxGT("Laser On")
-#endif
-#ifndef MSG_LASER_POWER
- #define MSG_LASER_POWER _UxGT("Laser Power")
-#endif
-#ifndef MSG_SPINDLE_MENU
- #define MSG_SPINDLE_MENU _UxGT("Spindle Control")
-#endif
-#ifndef MSG_SPINDLE_OFF
- #define MSG_SPINDLE_OFF _UxGT("Spindle Off")
-#endif
-#ifndef MSG_SPINDLE_ON
- #define MSG_SPINDLE_ON _UxGT("Spindle On")
-#endif
-#ifndef MSG_SPINDLE_POWER
- #define MSG_SPINDLE_POWER _UxGT("Spindle Power")
-#endif
-#ifndef MSG_SPINDLE_REVERSE
- #define MSG_SPINDLE_REVERSE _UxGT("Spindle Reverse")
-#endif
-#ifndef MSG_SWITCH_PS_ON
- #define MSG_SWITCH_PS_ON _UxGT("Switch Power On")
-#endif
-#ifndef MSG_SWITCH_PS_OFF
- #define MSG_SWITCH_PS_OFF _UxGT("Switch Power Off")
-#endif
-#ifndef MSG_EXTRUDE
- #define MSG_EXTRUDE _UxGT("Extrude")
-#endif
-#ifndef MSG_RETRACT
- #define MSG_RETRACT _UxGT("Retract")
-#endif
-#ifndef MSG_MOVE_AXIS
- #define MSG_MOVE_AXIS _UxGT("Move Axis")
-#endif
-#ifndef MSG_BED_LEVELING
- #define MSG_BED_LEVELING _UxGT("Bed Leveling")
-#endif
-#ifndef MSG_LEVEL_BED
- #define MSG_LEVEL_BED _UxGT("Level Bed")
-#endif
-#ifndef MSG_LEVEL_CORNERS
- #define MSG_LEVEL_CORNERS _UxGT("Level Corners")
-#endif
-#ifndef MSG_NEXT_CORNER
- #define MSG_NEXT_CORNER _UxGT("Next Corner")
-#endif
-#ifndef MSG_MESH_EDITOR
- #define MSG_MESH_EDITOR _UxGT("Mesh Editor")
-#endif
-#ifndef MSG_EDIT_MESH
- #define MSG_EDIT_MESH _UxGT("Edit Mesh")
-#endif
-#ifndef MSG_EDITING_STOPPED
- #define MSG_EDITING_STOPPED _UxGT("Mesh Editing Stopped")
-#endif
-#ifndef MSG_PROBING_MESH
- #define MSG_PROBING_MESH _UxGT("Probing Point")
-#endif
-#ifndef MSG_MESH_X
- #define MSG_MESH_X _UxGT("Index X")
-#endif
-#ifndef MSG_MESH_Y
- #define MSG_MESH_Y _UxGT("Index Y")
-#endif
-#ifndef MSG_MESH_EDIT_Z
- #define MSG_MESH_EDIT_Z _UxGT("Z Value")
-#endif
-#ifndef MSG_USER_MENU
- #define MSG_USER_MENU _UxGT("Custom Commands")
-#endif
-#ifndef MSG_M48_TEST
- #define MSG_M48_TEST _UxGT("M48 Probe Test")
-#endif
-#ifndef MSG_M48_POINT
- #define MSG_M48_POINT _UxGT("M48 Point")
-#endif
-#ifndef MSG_M48_DEVIATION
- #define MSG_M48_DEVIATION _UxGT("Deviation")
-#endif
-#ifndef MSG_IDEX_MENU
- #define MSG_IDEX_MENU _UxGT("IDEX Mode")
-#endif
-#ifndef MSG_OFFSETS_MENU
- #define MSG_OFFSETS_MENU _UxGT("Tool Offsets")
-#endif
-#ifndef MSG_IDEX_MODE_AUTOPARK
- #define MSG_IDEX_MODE_AUTOPARK _UxGT("Auto-Park")
-#endif
-#ifndef MSG_IDEX_MODE_DUPLICATE
- #define MSG_IDEX_MODE_DUPLICATE _UxGT("Duplication")
-#endif
-#ifndef MSG_IDEX_MODE_MIRRORED_COPY
- #define MSG_IDEX_MODE_MIRRORED_COPY _UxGT("Mirrored Copy")
-#endif
-#ifndef MSG_IDEX_MODE_FULL_CTRL
- #define MSG_IDEX_MODE_FULL_CTRL _UxGT("Full Control")
-#endif
-#ifndef MSG_X_OFFSET
- #define MSG_X_OFFSET _UxGT("2nd Nozzle X")
-#endif
-#ifndef MSG_Y_OFFSET
- #define MSG_Y_OFFSET _UxGT("2nd Nozzle Y")
-#endif
-#ifndef MSG_Z_OFFSET
- #define MSG_Z_OFFSET _UxGT("2nd nNozzle Z")
-#endif
-#ifndef MSG_UBL_DOING_G29
- #define MSG_UBL_DOING_G29 _UxGT("Doing G29")
-#endif
-#ifndef MSG_UBL_TOOLS
- #define MSG_UBL_TOOLS _UxGT("UBL Tools")
-#endif
-#ifndef MSG_UBL_LEVEL_BED
- #define MSG_UBL_LEVEL_BED _UxGT("Unified Bed Leveling")
-#endif
-#ifndef MSG_LCD_TILTING_MESH
- #define MSG_LCD_TILTING_MESH _UxGT("Tilting Point")
-#endif
-#ifndef MSG_UBL_MANUAL_MESH
- #define MSG_UBL_MANUAL_MESH _UxGT("Manually Build Mesh")
-#endif
-#ifndef MSG_UBL_BC_INSERT
- #define MSG_UBL_BC_INSERT _UxGT("Place Shim & Measure")
-#endif
-#ifndef MSG_UBL_BC_INSERT2
- #define MSG_UBL_BC_INSERT2 _UxGT("Measure")
-#endif
-#ifndef MSG_UBL_BC_REMOVE
- #define MSG_UBL_BC_REMOVE _UxGT("Remove & Measure Bed")
-#endif
-#ifndef MSG_UBL_MOVING_TO_NEXT
- #define MSG_UBL_MOVING_TO_NEXT _UxGT("Moving to next")
-#endif
-#ifndef MSG_UBL_ACTIVATE_MESH
- #define MSG_UBL_ACTIVATE_MESH _UxGT("Activate UBL")
-#endif
-#ifndef MSG_UBL_DEACTIVATE_MESH
- #define MSG_UBL_DEACTIVATE_MESH _UxGT("Deactivate UBL")
-#endif
-#ifndef MSG_UBL_SET_TEMP_BED
- #define MSG_UBL_SET_TEMP_BED _UxGT("Bed Temp")
-#endif
-#ifndef MSG_UBL_BED_TEMP_CUSTOM
- #define MSG_UBL_BED_TEMP_CUSTOM MSG_UBL_SET_TEMP_BED
-#endif
-#ifndef MSG_UBL_SET_TEMP_HOTEND
- #define MSG_UBL_SET_TEMP_HOTEND _UxGT("Hotend Temp")
-#endif
-#ifndef MSG_UBL_HOTEND_TEMP_CUSTOM
- #define MSG_UBL_HOTEND_TEMP_CUSTOM MSG_UBL_SET_TEMP_HOTEND
-#endif
-#ifndef MSG_UBL_MESH_EDIT
- #define MSG_UBL_MESH_EDIT _UxGT("Mesh Edit")
-#endif
-#ifndef MSG_UBL_EDIT_CUSTOM_MESH
- #define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("Edit Custom Mesh")
-#endif
-#ifndef MSG_UBL_FINE_TUNE_MESH
- #define MSG_UBL_FINE_TUNE_MESH _UxGT("Fine Tuning Mesh")
-#endif
-#ifndef MSG_UBL_DONE_EDITING_MESH
- #define MSG_UBL_DONE_EDITING_MESH _UxGT("Done Editing Mesh")
-#endif
-#ifndef MSG_UBL_BUILD_CUSTOM_MESH
- #define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("Build Custom Mesh")
-#endif
-#ifndef MSG_UBL_BUILD_MESH_MENU
- #define MSG_UBL_BUILD_MESH_MENU _UxGT("Build Mesh")
-#endif
-#ifndef MSG_UBL_BUILD_MESH_M1
- #define MSG_UBL_BUILD_MESH_M1 _UxGT("Build Mesh (" PREHEAT_1_LABEL ")")
-#endif
-#ifndef MSG_UBL_BUILD_MESH_M2
- #define MSG_UBL_BUILD_MESH_M2 _UxGT("Build Mesh (" PREHEAT_2_LABEL ")")
-#endif
-#ifndef MSG_UBL_BUILD_COLD_MESH
- #define MSG_UBL_BUILD_COLD_MESH _UxGT("Build Cold Mesh")
-#endif
-#ifndef MSG_UBL_MESH_HEIGHT_ADJUST
- #define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("Adjust Mesh Height")
-#endif
-#ifndef MSG_UBL_MESH_HEIGHT_AMOUNT
- #define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("Height Amount")
-#endif
-#ifndef MSG_UBL_VALIDATE_MESH_MENU
- #define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Validate Mesh")
-#endif
-#ifndef MSG_UBL_VALIDATE_MESH_M1
- #define MSG_UBL_VALIDATE_MESH_M1 _UxGT("Validate Mesh (" PREHEAT_1_LABEL ")")
-#endif
-#ifndef MSG_UBL_VALIDATE_MESH_M2
- #define MSG_UBL_VALIDATE_MESH_M2 _UxGT("Validate Mesh (" PREHEAT_2_LABEL ")")
-#endif
-#ifndef MSG_UBL_VALIDATE_CUSTOM_MESH
- #define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Validate Custom Mesh")
-#endif
-#ifndef MSG_G26_HEATING_BED
- #define MSG_G26_HEATING_BED _UxGT("G26 Heating Bed")
-#endif
-#ifndef MSG_G26_HEATING_NOZZLE
- #define MSG_G26_HEATING_NOZZLE _UxGT("G26 Heating Nozzle")
-#endif
-#ifndef MSG_G26_MANUAL_PRIME
- #define MSG_G26_MANUAL_PRIME _UxGT("Manual priming...")
-#endif
-#ifndef MSG_G26_FIXED_LENGTH
- #define MSG_G26_FIXED_LENGTH _UxGT("Fixed Length Prime")
-#endif
-#ifndef MSG_G26_PRIME_DONE
- #define MSG_G26_PRIME_DONE _UxGT("Done Priming")
-#endif
-#ifndef MSG_G26_CANCELED
- #define MSG_G26_CANCELED _UxGT("G26 Canceled")
-#endif
-#ifndef MSG_G26_LEAVING
- #define MSG_G26_LEAVING _UxGT("Leaving G26")
-#endif
-#ifndef MSG_UBL_CONTINUE_MESH
- #define MSG_UBL_CONTINUE_MESH _UxGT("Continue Bed Mesh")
-#endif
-#ifndef MSG_UBL_MESH_LEVELING
- #define MSG_UBL_MESH_LEVELING _UxGT("Mesh Leveling")
-#endif
-#ifndef MSG_UBL_3POINT_MESH_LEVELING
- #define MSG_UBL_3POINT_MESH_LEVELING _UxGT("3-Point Leveling")
-#endif
-#ifndef MSG_UBL_GRID_MESH_LEVELING
- #define MSG_UBL_GRID_MESH_LEVELING _UxGT("Grid Mesh Leveling")
-#endif
-#ifndef MSG_UBL_MESH_LEVEL
- #define MSG_UBL_MESH_LEVEL _UxGT("Level Mesh")
-#endif
-#ifndef MSG_UBL_SIDE_POINTS
- #define MSG_UBL_SIDE_POINTS _UxGT("Side Points")
-#endif
-#ifndef MSG_UBL_MAP_TYPE
- #define MSG_UBL_MAP_TYPE _UxGT("Map Type")
-#endif
-#ifndef MSG_UBL_OUTPUT_MAP
- #define MSG_UBL_OUTPUT_MAP _UxGT("Output Mesh Map")
-#endif
-#ifndef MSG_UBL_OUTPUT_MAP_HOST
- #define MSG_UBL_OUTPUT_MAP_HOST _UxGT("Output for Host")
-#endif
-#ifndef MSG_UBL_OUTPUT_MAP_CSV
- #define MSG_UBL_OUTPUT_MAP_CSV _UxGT("Output for CSV")
-#endif
-#ifndef MSG_UBL_OUTPUT_MAP_BACKUP
- #define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("Off Printer Backup")
-#endif
-#ifndef MSG_UBL_INFO_UBL
- #define MSG_UBL_INFO_UBL _UxGT("Output UBL Info")
-#endif
-#ifndef MSG_UBL_FILLIN_AMOUNT
- #define MSG_UBL_FILLIN_AMOUNT _UxGT("Fill-in Amount")
-#endif
-#ifndef MSG_UBL_MANUAL_FILLIN
- #define MSG_UBL_MANUAL_FILLIN _UxGT("Manual Fill-in")
-#endif
-#ifndef MSG_UBL_SMART_FILLIN
- #define MSG_UBL_SMART_FILLIN _UxGT("Smart Fill-in")
-#endif
-#ifndef MSG_UBL_FILLIN_MESH
- #define MSG_UBL_FILLIN_MESH _UxGT("Fill-in Mesh")
-#endif
-#ifndef MSG_UBL_INVALIDATE_ALL
- #define MSG_UBL_INVALIDATE_ALL _UxGT("Invalidate All")
-#endif
-#ifndef MSG_UBL_INVALIDATE_CLOSEST
- #define MSG_UBL_INVALIDATE_CLOSEST _UxGT("Invalidate Closest")
-#endif
-#ifndef MSG_UBL_FINE_TUNE_ALL
- #define MSG_UBL_FINE_TUNE_ALL _UxGT("Fine Tune All")
-#endif
-#ifndef MSG_UBL_FINE_TUNE_CLOSEST
- #define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("Fine Tune Closest")
-#endif
-#ifndef MSG_UBL_STORAGE_MESH_MENU
- #define MSG_UBL_STORAGE_MESH_MENU _UxGT("Mesh Storage")
-#endif
-#ifndef MSG_UBL_STORAGE_SLOT
- #define MSG_UBL_STORAGE_SLOT _UxGT("Memory Slot")
-#endif
-#ifndef MSG_UBL_LOAD_MESH
- #define MSG_UBL_LOAD_MESH _UxGT("Load Bed Mesh")
-#endif
-#ifndef MSG_UBL_SAVE_MESH
- #define MSG_UBL_SAVE_MESH _UxGT("Save Bed Mesh")
-#endif
-#ifndef MSG_MESH_LOADED
- #define MSG_MESH_LOADED _UxGT("Mesh %i Loaded")
-#endif
-#ifndef MSG_MESH_SAVED
- #define MSG_MESH_SAVED _UxGT("Mesh %i Saved")
-#endif
-#ifndef MSG_UBL_NO_STORAGE
- #define MSG_UBL_NO_STORAGE _UxGT("No Storage")
-#endif
-#ifndef MSG_UBL_SAVE_ERROR
- #define MSG_UBL_SAVE_ERROR _UxGT("Err: UBL Save")
-#endif
-#ifndef MSG_UBL_RESTORE_ERROR
- #define MSG_UBL_RESTORE_ERROR _UxGT("Err: UBL Restore")
-#endif
-#ifndef MSG_UBL_Z_OFFSET
- #define MSG_UBL_Z_OFFSET _UxGT("Z-Offset: ")
-#endif
-#ifndef MSG_UBL_Z_OFFSET_STOPPED
- #define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Z-Offset Stopped")
-#endif
-#ifndef MSG_UBL_STEP_BY_STEP_MENU
- #define MSG_UBL_STEP_BY_STEP_MENU _UxGT("Step-By-Step UBL")
-#endif
+ #ifdef NOT_EXTENDED_ISO10646_1_5X7
+ PROGMEM Language_Str MSG_CUBED = _UxGT("^3");
+ #else
+ PROGMEM Language_Str MSG_CUBED = _UxGT("³");
+ #endif
-#ifndef MSG_LED_CONTROL
- #define MSG_LED_CONTROL _UxGT("LED Control")
-#endif
-#ifndef MSG_LEDS
- #define MSG_LEDS _UxGT("Lights")
-#endif
-#ifndef MSG_LED_PRESETS
- #define MSG_LED_PRESETS _UxGT("Light Presets")
-#endif
-#ifndef MSG_SET_LEDS_RED
- #define MSG_SET_LEDS_RED _UxGT("Red")
-#endif
-#ifndef MSG_SET_LEDS_ORANGE
- #define MSG_SET_LEDS_ORANGE _UxGT("Orange")
-#endif
-#ifndef MSG_SET_LEDS_YELLOW
- #define MSG_SET_LEDS_YELLOW _UxGT("Yellow")
-#endif
-#ifndef MSG_SET_LEDS_GREEN
- #define MSG_SET_LEDS_GREEN _UxGT("Green")
-#endif
-#ifndef MSG_SET_LEDS_BLUE
- #define MSG_SET_LEDS_BLUE _UxGT("Blue")
-#endif
-#ifndef MSG_SET_LEDS_INDIGO
- #define MSG_SET_LEDS_INDIGO _UxGT("Indigo")
-#endif
-#ifndef MSG_SET_LEDS_VIOLET
- #define MSG_SET_LEDS_VIOLET _UxGT("Violet")
-#endif
-#ifndef MSG_SET_LEDS_WHITE
- #define MSG_SET_LEDS_WHITE _UxGT("White")
-#endif
-#ifndef MSG_SET_LEDS_DEFAULT
- #define MSG_SET_LEDS_DEFAULT _UxGT("Default")
-#endif
-#ifndef MSG_CUSTOM_LEDS
- #define MSG_CUSTOM_LEDS _UxGT("Custom Lights")
-#endif
-#ifndef MSG_INTENSITY_R
- #define MSG_INTENSITY_R _UxGT("Red Intensity")
-#endif
-#ifndef MSG_INTENSITY_G
- #define MSG_INTENSITY_G _UxGT("Green Intensity")
-#endif
-#ifndef MSG_INTENSITY_B
- #define MSG_INTENSITY_B _UxGT("Blue Intensity")
-#endif
-#ifndef MSG_INTENSITY_W
- #define MSG_INTENSITY_W _UxGT("White Intensity")
-#endif
-#ifndef MSG_LED_BRIGHTNESS
- #define MSG_LED_BRIGHTNESS _UxGT("Brightness")
-#endif
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" Ready.");
+ PROGMEM Language_Str MSG_YES = _UxGT("YES");
+ PROGMEM Language_Str MSG_NO = _UxGT("NO");
+ PROGMEM Language_Str MSG_BACK = _UxGT("Back");
+ PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Aborting...");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Media Inserted");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Media Removed");
+ PROGMEM Language_Str MSG_MEDIA_RELEASED = _UxGT("Media Released");
+ PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Waiting for media");
+ PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Media read error");
+ PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB device removed");
+ PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("USB start failed");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
+ PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstops");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Main");
+ PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Advanced Settings");
+ PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuration");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autostart");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Disable Steppers");
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Debug Menu");
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Progress Bar Test");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Auto Home");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Home X");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Home Y");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Home Z");
+ PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto Z-Align");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Homing XYZ");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Click to Begin");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Next Point");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Leveling Done!");
+ PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Fade Height");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Set Home Offsets");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets Applied");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Set Origin");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Preheat ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Preheat ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Preheat ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Preheat ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Preheat ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Preheat ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Preheat ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" All");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Bed");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Conf");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Preheat ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Preheat ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Preheat ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Preheat ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Preheat ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Preheat ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Preheat ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" End ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" All");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" Bed");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" Conf");
+ PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Preheat Custom");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Cooldown");
+ PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Laser Control");
+ PROGMEM Language_Str MSG_LASER_OFF = _UxGT("Laser Off");
+ PROGMEM Language_Str MSG_LASER_ON = _UxGT("Laser On");
+ PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Laser Power");
+ PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Spindle Control");
+ PROGMEM Language_Str MSG_SPINDLE_OFF = _UxGT("Spindle Off");
+ PROGMEM Language_Str MSG_SPINDLE_ON = _UxGT("Spindle On");
+ PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Spindle Power");
+ PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Spindle Reverse");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Switch Power On");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Switch Power Off");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrude");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Retract");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Move Axis");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Bed Leveling");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Level Bed");
+ PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Level Corners");
+ PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Next Corner");
+ PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Mesh Editor");
+ PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Edit Mesh");
+ PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Mesh Editing Stopped");
+ PROGMEM Language_Str MSG_PROBING_MESH = _UxGT("Probing Point");
+ PROGMEM Language_Str MSG_MESH_X = _UxGT("Index X");
+ PROGMEM Language_Str MSG_MESH_Y = _UxGT("Index Y");
+ PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Z Value");
+ PROGMEM Language_Str MSG_USER_MENU = _UxGT("Custom Commands");
+ PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Probe Test");
+ PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Point");
+ PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Deviation");
+ PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("IDEX Mode");
+ PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Tool Offsets");
+ PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
+ PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplication");
+ PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Mirrored Copy");
+ PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Full Control");
+ PROGMEM Language_Str MSG_X_OFFSET = _UxGT("2nd Nozzle X");
+ PROGMEM Language_Str MSG_Y_OFFSET = _UxGT("2nd Nozzle Y");
+ PROGMEM Language_Str MSG_Z_OFFSET = _UxGT("2nd Nozzle Z");
+ PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Doing G29");
+ PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL Tools");
+ PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
+ PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Tilting Point");
+ PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Manually Build Mesh");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Place Shim & Measure");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Measure");
+ PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Remove & Measure Bed");
+ PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Moving to next");
+ PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Activate UBL");
+ PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Deactivate UBL");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Bed Temp");
+ PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Hotend Temp");
+ PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
+ PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Mesh Edit");
+ PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edit Custom Mesh");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Fine Tuning Mesh");
+ PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Done Editing Mesh");
+ PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Build Custom Mesh");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Build Mesh");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = _UxGT("Build Mesh (") PREHEAT_1_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("Build Mesh (") PREHEAT_2_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Build Cold Mesh");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Adjust Mesh Height");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Height Amount");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validate Mesh");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("Validate Mesh (") PREHEAT_1_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Validate Mesh (") PREHEAT_2_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validate Custom Mesh");
+ PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 Heating Bed");
+ PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Heating Nozzle");
+ PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Manual priming...");
+ PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Fixed Length Prime");
+ PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Done Priming");
+ PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 Canceled");
+ PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Leaving G26");
+ PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Continue Bed Mesh");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Mesh Leveling");
+ PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Point Leveling");
+ PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Grid Mesh Leveling");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Level Mesh");
+ PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Side Points");
+ PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Map Type");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Output Mesh Map");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Output for Host");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Output for CSV");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Off Printer Backup");
+ PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Output UBL Info");
+ PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Fill-in Amount");
+ PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Manual Fill-in");
+ PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Smart Fill-in");
+ PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Fill-in Mesh");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidate All");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidate Closest");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Fine Tune All");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Fine Tune Closest");
+ PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Mesh Storage");
+ PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Memory Slot");
+ PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Load Bed Mesh");
+ PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Save Bed Mesh");
+ PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("M117 Mesh %i Loaded");
+ PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("M117 Mesh %i Saved");
+ PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("No Storage");
+ PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Err: UBL Save");
+ PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Err: UBL Restore");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Offset Stopped");
+ PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Step-By-Step UBL");
+ PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Build Cold Mesh");
+ PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2. Smart Fill-in");
+ PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Validate Mesh");
+ PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Fine Tune All");
+ PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Validate Mesh");
+ PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Fine Tune All");
+ PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7. Save Bed Mesh");
-#ifndef MSG_MOVING
- #define MSG_MOVING _UxGT("Moving...")
-#endif
-#ifndef MSG_FREE_XY
- #define MSG_FREE_XY _UxGT("Free XY")
-#endif
-#ifndef MSG_MOVE_X
- #define MSG_MOVE_X _UxGT("Move X")
-#endif
-#ifndef MSG_MOVE_Y
- #define MSG_MOVE_Y _UxGT("Move Y")
-#endif
-#ifndef MSG_MOVE_Z
- #define MSG_MOVE_Z _UxGT("Move Z")
-#endif
-#ifndef MSG_MOVE_E
- #define MSG_MOVE_E _UxGT("Extruder")
-#endif
-#ifndef MSG_HOTEND_TOO_COLD
- #define MSG_HOTEND_TOO_COLD _UxGT("Hotend too cold")
-#endif
-#ifndef MSG_MOVE_Z_DIST
- #define MSG_MOVE_Z_DIST _UxGT("Move %smm")
-#endif
-#ifndef MSG_MOVE_01MM
- #define MSG_MOVE_01MM _UxGT("Move 0.1mm")
-#endif
-#ifndef MSG_MOVE_1MM
- #define MSG_MOVE_1MM _UxGT("Move 1mm")
-#endif
-#ifndef MSG_MOVE_10MM
- #define MSG_MOVE_10MM _UxGT("Move 10mm")
-#endif
-#ifndef MSG_SPEED
- #define MSG_SPEED _UxGT("Speed")
-#endif
-#ifndef MSG_BED_Z
- #define MSG_BED_Z _UxGT("Bed Z")
-#endif
-#ifndef MSG_NOZZLE
- #define MSG_NOZZLE _UxGT("Nozzle")
-#endif
-#ifndef MSG_BED
- #define MSG_BED _UxGT("Bed")
-#endif
-#ifndef MSG_CHAMBER
- #define MSG_CHAMBER _UxGT("Enclosure")
-#endif
-#ifndef MSG_FAN_SPEED
- #define MSG_FAN_SPEED _UxGT("Fan Speed")
-#endif
-#ifndef MSG_EXTRA_FAN_SPEED
- #define MSG_EXTRA_FAN_SPEED _UxGT("Extra Fan Speed")
-#endif
-#ifndef MSG_FLOW
- #define MSG_FLOW _UxGT("Flow")
-#endif
-#ifndef MSG_CONTROL
- #define MSG_CONTROL _UxGT("Control")
-#endif
-#ifndef MSG_MIN
- #define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#endif
-#ifndef MSG_MAX
- #define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#endif
-#ifndef MSG_FACTOR
- #define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-#endif
-#ifndef MSG_AUTOTEMP
- #define MSG_AUTOTEMP _UxGT("Autotemp")
-#endif
-#ifndef MSG_LCD_ON
- #define MSG_LCD_ON _UxGT("On")
-#endif
-#ifndef MSG_LCD_OFF
- #define MSG_LCD_OFF _UxGT("Off")
-#endif
-#ifndef MSG_PID_P
- #define MSG_PID_P _UxGT("PID-P")
-#endif
-#ifndef MSG_PID_I
- #define MSG_PID_I _UxGT("PID-I")
-#endif
-#ifndef MSG_PID_D
- #define MSG_PID_D _UxGT("PID-D")
-#endif
-#ifndef MSG_PID_C
- #define MSG_PID_C _UxGT("PID-C")
-#endif
-#ifndef MSG_SELECT
- #define MSG_SELECT _UxGT("Select")
-#endif
-#ifndef MSG_ACC
- #define MSG_ACC _UxGT("Accel")
-#endif
-#ifndef MSG_JERK
- #define MSG_JERK _UxGT("Jerk")
-#endif
-#if IS_KINEMATIC
- #ifndef MSG_VA_JERK
- #define MSG_VA_JERK _UxGT("Va-Jerk")
- #endif
- #ifndef MSG_VB_JERK
- #define MSG_VB_JERK _UxGT("Vb-Jerk")
- #endif
- #ifndef MSG_VC_JERK
- #define MSG_VC_JERK _UxGT("Vc-Jerk")
- #endif
-#else
- #ifndef MSG_VA_JERK
- #define MSG_VA_JERK _UxGT("Vx-Jerk")
- #endif
- #ifndef MSG_VB_JERK
- #define MSG_VB_JERK _UxGT("Vy-Jerk")
- #endif
- #ifndef MSG_VC_JERK
- #define MSG_VC_JERK _UxGT("Vz-Jerk")
- #endif
-#endif
-#ifndef MSG_VE_JERK
- #define MSG_VE_JERK _UxGT("Ve-Jerk")
-#endif
-#ifndef MSG_JUNCTION_DEVIATION
- #define MSG_JUNCTION_DEVIATION _UxGT("Junction Dev")
-#endif
-#ifndef MSG_VELOCITY
- #define MSG_VELOCITY _UxGT("Velocity")
-#endif
-#ifndef MSG_VMAX
- #define MSG_VMAX _UxGT("Vmax ")
-#endif
-#ifndef MSG_VMIN
- #define MSG_VMIN _UxGT("Vmin")
-#endif
-#ifndef MSG_VTRAV_MIN
- #define MSG_VTRAV_MIN _UxGT("VTrav Min")
-#endif
-#ifndef MSG_ACCELERATION
- #define MSG_ACCELERATION _UxGT("Acceleration")
-#endif
-#ifndef MSG_AMAX
- #define MSG_AMAX _UxGT("Amax ")
-#endif
-#ifndef MSG_A_RETRACT
- #define MSG_A_RETRACT _UxGT("A-Retract")
-#endif
-#ifndef MSG_A_TRAVEL
- #define MSG_A_TRAVEL _UxGT("A-Travel")
-#endif
-#ifndef MSG_STEPS_PER_MM
- #define MSG_STEPS_PER_MM _UxGT("Steps/mm")
-#endif
-#if IS_KINEMATIC
- #ifndef MSG_ASTEPS
- #define MSG_ASTEPS _UxGT("Asteps/mm")
- #endif
- #ifndef MSG_BSTEPS
- #define MSG_BSTEPS _UxGT("Bsteps/mm")
- #endif
- #ifndef MSG_CSTEPS
- #define MSG_CSTEPS _UxGT("Csteps/mm")
- #endif
-#else
- #ifndef MSG_ASTEPS
- #define MSG_ASTEPS _UxGT("Xsteps/mm")
- #endif
- #ifndef MSG_BSTEPS
- #define MSG_BSTEPS _UxGT("Ysteps/mm")
- #endif
- #ifndef MSG_CSTEPS
- #define MSG_CSTEPS _UxGT("Zsteps/mm")
- #endif
-#endif
-#ifndef MSG_ESTEPS
- #define MSG_ESTEPS _UxGT("Esteps/mm")
-#endif
-#ifndef MSG_E1STEPS
- #define MSG_E1STEPS _UxGT("E1steps/mm")
-#endif
-#ifndef MSG_E2STEPS
- #define MSG_E2STEPS _UxGT("E2steps/mm")
-#endif
-#ifndef MSG_E3STEPS
- #define MSG_E3STEPS _UxGT("E3steps/mm")
-#endif
-#ifndef MSG_E4STEPS
- #define MSG_E4STEPS _UxGT("E4steps/mm")
-#endif
-#ifndef MSG_E5STEPS
- #define MSG_E5STEPS _UxGT("E5steps/mm")
-#endif
-#ifndef MSG_E6STEPS
- #define MSG_E6STEPS _UxGT("E6steps/mm")
-#endif
-#ifndef MSG_TEMPERATURE
- #define MSG_TEMPERATURE _UxGT("Temperature")
-#endif
-#ifndef MSG_MOTION
- #define MSG_MOTION _UxGT("Motion")
-#endif
-#ifndef MSG_FILAMENT
- #define MSG_FILAMENT _UxGT("Filament")
-#endif
-#ifndef MSG_VOLUMETRIC_ENABLED
- #define MSG_VOLUMETRIC_ENABLED _UxGT("E in mm") MSG_CUBED
-#endif
-#ifndef MSG_FILAMENT_DIAM
- #define MSG_FILAMENT_DIAM _UxGT("Fil. Dia.")
-#endif
-#ifndef MSG_FILAMENT_UNLOAD
- #define MSG_FILAMENT_UNLOAD _UxGT("Unload mm")
-#endif
-#ifndef MSG_FILAMENT_LOAD
- #define MSG_FILAMENT_LOAD _UxGT("Load mm")
-#endif
-#ifndef MSG_ADVANCE_K
- #define MSG_ADVANCE_K _UxGT("Advance K")
-#endif
-#ifndef MSG_CONTRAST
- #define MSG_CONTRAST _UxGT("LCD Contrast")
-#endif
-#ifndef MSG_STORE_EEPROM
- #define MSG_STORE_EEPROM _UxGT("Store Settings")
-#endif
-#ifndef MSG_LOAD_EEPROM
- #define MSG_LOAD_EEPROM _UxGT("Load Settings")
-#endif
-#ifndef MSG_RESTORE_FAILSAFE
- #define MSG_RESTORE_FAILSAFE _UxGT("Restore failsafe")
-#endif
-#ifndef MSG_INIT_EEPROM
- #define MSG_INIT_EEPROM _UxGT("Initialize EEPROM")
-#endif
-#ifndef MSG_MEDIA_UPDATE
- #define MSG_MEDIA_UPDATE _UxGT("Media Update")
-#endif
-#ifndef MSG_RESET_PRINTER
- #define MSG_RESET_PRINTER _UxGT("Reset Printer")
-#endif
-#ifndef MSG_REFRESH
- #define MSG_REFRESH _UxGT("Refresh")
-#endif
-#ifndef MSG_WATCH
- #define MSG_WATCH _UxGT("Info Screen")
-#endif
-#ifndef MSG_PREPARE
- #define MSG_PREPARE _UxGT("Prepare")
-#endif
-#ifndef MSG_TUNE
- #define MSG_TUNE _UxGT("Tune")
-#endif
-#ifndef MSG_START_PRINT
- #define MSG_START_PRINT _UxGT("Start Print")
-#endif
-#ifndef MSG_BUTTON_NEXT
- #define MSG_BUTTON_NEXT _UxGT("Next")
-#endif
-#ifndef MSG_BUTTON_INIT
- #define MSG_BUTTON_INIT _UxGT("Init")
-#endif
-#ifndef MSG_BUTTON_STOP
- #define MSG_BUTTON_STOP _UxGT("Stop")
-#endif
-#ifndef MSG_BUTTON_PRINT
- #define MSG_BUTTON_PRINT _UxGT("Print")
-#endif
-#ifndef MSG_BUTTON_RESET
- #define MSG_BUTTON_RESET _UxGT("Reset")
-#endif
-#ifndef MSG_BUTTON_CANCEL
- #define MSG_BUTTON_CANCEL _UxGT("Cancel")
-#endif
-#ifndef MSG_BUTTON_DONE
- #define MSG_BUTTON_DONE _UxGT("Done")
-#endif
-#ifndef MSG_PAUSE_PRINT
- #define MSG_PAUSE_PRINT _UxGT("Pause Print")
-#endif
-#ifndef MSG_RESUME_PRINT
- #define MSG_RESUME_PRINT _UxGT("Resume Print")
-#endif
-#ifndef MSG_STOP_PRINT
- #define MSG_STOP_PRINT _UxGT("Stop Print")
-#endif
-#ifndef MSG_OUTAGE_RECOVERY
- #define MSG_OUTAGE_RECOVERY _UxGT("Outage Recovery")
-#endif
-#ifndef MSG_MEDIA_MENU
- #define MSG_MEDIA_MENU _UxGT("Print from Media")
-#endif
-#ifndef MSG_NO_MEDIA
- #define MSG_NO_MEDIA _UxGT("No Media")
-#endif
-#ifndef MSG_DWELL
- #define MSG_DWELL _UxGT("Sleep...")
-#endif
-#ifndef MSG_USERWAIT
- #define MSG_USERWAIT _UxGT("Click to Resume...")
-#endif
-#ifndef MSG_PRINT_PAUSED
- #define MSG_PRINT_PAUSED _UxGT("Print Paused")
-#endif
-#ifndef MSG_PRINTING
- #define MSG_PRINTING _UxGT("Printing...")
-#endif
-#ifndef MSG_PRINT_ABORTED
- #define MSG_PRINT_ABORTED _UxGT("Print Aborted")
-#endif
-#ifndef MSG_NO_MOVE
- #define MSG_NO_MOVE _UxGT("No Move.")
-#endif
-#ifndef MSG_KILLED
- #define MSG_KILLED _UxGT("KILLED. ")
-#endif
-#ifndef MSG_STOPPED
- #define MSG_STOPPED _UxGT("STOPPED. ")
-#endif
-#ifndef MSG_CONTROL_RETRACT
- #define MSG_CONTROL_RETRACT _UxGT("Retract mm")
-#endif
-#ifndef MSG_CONTROL_RETRACT_SWAP
- #define MSG_CONTROL_RETRACT_SWAP _UxGT("Swap Re.mm")
-#endif
-#ifndef MSG_CONTROL_RETRACTF
- #define MSG_CONTROL_RETRACTF _UxGT("Retract V")
-#endif
-#ifndef MSG_CONTROL_RETRACT_ZHOP
- #define MSG_CONTROL_RETRACT_ZHOP _UxGT("Hop mm")
-#endif
-#ifndef MSG_CONTROL_RETRACT_RECOVER
- #define MSG_CONTROL_RETRACT_RECOVER _UxGT("UnRet mm")
-#endif
-#ifndef MSG_CONTROL_RETRACT_RECOVER_SWAP
- #define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("S UnRet mm")
-#endif
-#ifndef MSG_CONTROL_RETRACT_RECOVERF
- #define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet V")
-#endif
-#ifndef MSG_CONTROL_RETRACT_RECOVER_SWAPF
- #define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("S UnRet V")
-#endif
-#ifndef MSG_AUTORETRACT
- #define MSG_AUTORETRACT _UxGT("AutoRetr.")
-#endif
-#ifndef MSG_FILAMENT_SWAP_LENGTH
- #define MSG_FILAMENT_SWAP_LENGTH _UxGT("Swap Length")
-#endif
-#ifndef MSG_FILAMENT_PURGE_LENGTH
- #define MSG_FILAMENT_PURGE_LENGTH _UxGT("Purge Length")
-#endif
-#ifndef MSG_TOOL_CHANGE
- #define MSG_TOOL_CHANGE _UxGT("Tool Change")
-#endif
-#ifndef MSG_TOOL_CHANGE_ZLIFT
- #define MSG_TOOL_CHANGE_ZLIFT _UxGT("Z Raise")
-#endif
-#ifndef MSG_SINGLENOZZLE_PRIME_SPD
- #define MSG_SINGLENOZZLE_PRIME_SPD _UxGT("Prime Speed")
-#endif
-#ifndef MSG_SINGLENOZZLE_RETRACT_SPD
- #define MSG_SINGLENOZZLE_RETRACT_SPD _UxGT("Retract Speed")
-#endif
-#ifndef MSG_NOZZLE_STANDBY
- #define MSG_NOZZLE_STANDBY _UxGT("Nozzle Standby")
-#endif
-#ifndef MSG_FILAMENTCHANGE
- #define MSG_FILAMENTCHANGE _UxGT("Change Filament")
-#endif
-#ifndef MSG_FILAMENTLOAD
- #define MSG_FILAMENTLOAD _UxGT("Load Filament")
-#endif
-#ifndef MSG_FILAMENTUNLOAD
- #define MSG_FILAMENTUNLOAD _UxGT("Unload Filament")
-#endif
-#ifndef MSG_FILAMENTUNLOAD_ALL
- #define MSG_FILAMENTUNLOAD_ALL _UxGT("Unload All")
-#endif
-#ifndef MSG_INIT_MEDIA
- #define MSG_INIT_MEDIA _UxGT("Init. Media")
-#endif
-#ifndef MSG_CHANGE_MEDIA
- #define MSG_CHANGE_MEDIA _UxGT("Change Media")
-#endif
-#ifndef MSG_RELEASE_MEDIA
- #define MSG_RELEASE_MEDIA _UxGT("Release Media")
-#endif
-#ifndef MSG_ZPROBE_OUT
- #define MSG_ZPROBE_OUT _UxGT("Z Probe Past Bed")
-#endif
-#ifndef MSG_SKEW_FACTOR
- #define MSG_SKEW_FACTOR _UxGT("Skew Factor")
-#endif
-#ifndef MSG_BLTOUCH
- #define MSG_BLTOUCH _UxGT("BLTouch")
-#endif
-#ifndef MSG_BLTOUCH_SELFTEST
- #define MSG_BLTOUCH_SELFTEST _UxGT("Cmd: Self-Test")
-#endif
-#ifndef MSG_BLTOUCH_RESET
- #define MSG_BLTOUCH_RESET _UxGT("Cmd: Reset")
-#endif
-#ifndef MSG_BLTOUCH_STOW
- #define MSG_BLTOUCH_STOW _UxGT("Cmd: Stow")
-#endif
-#ifndef MSG_BLTOUCH_DEPLOY
- #define MSG_BLTOUCH_DEPLOY _UxGT("Cmd: Deploy")
-#endif
-#ifndef MSG_BLTOUCH_SW_MODE
- #define MSG_BLTOUCH_SW_MODE _UxGT("Cmd: SW-Mode")
-#endif
-#ifndef MSG_BLTOUCH_5V_MODE
- #define MSG_BLTOUCH_5V_MODE _UxGT("Cmd: 5V-Mode")
-#endif
-#ifndef MSG_BLTOUCH_OD_MODE
- #define MSG_BLTOUCH_OD_MODE _UxGT("Cmd: OD-Mode")
-#endif
-#ifndef MSG_BLTOUCH_MODE_STORE
- #define MSG_BLTOUCH_MODE_STORE _UxGT("Cmd: Mode-Store")
-#endif
-#ifndef MSG_BLTOUCH_MODE_STORE_5V
- #define MSG_BLTOUCH_MODE_STORE_5V _UxGT("Set BLTouch to 5V")
-#endif
-#ifndef MSG_BLTOUCH_MODE_STORE_OD
- #define MSG_BLTOUCH_MODE_STORE_OD _UxGT("Set BLTouch to OD")
-#endif
-#ifndef MSG_BLTOUCH_MODE_ECHO
- #define MSG_BLTOUCH_MODE_ECHO _UxGT("Report Drain")
-#endif
-#ifndef MSG_BLTOUCH_MODE_CHANGE
- #define MSG_BLTOUCH_MODE_CHANGE _UxGT("DANGER: Bad settings can cause damage! Proceed anyway?")
-#endif
-#ifndef MSG_TOUCHMI_PROBE
- #define MSG_TOUCHMI_PROBE _UxGT("TouchMI")
-#endif
-#ifndef MSG_TOUCHMI_INIT
- #define MSG_TOUCHMI_INIT _UxGT("Init TouchMI")
-#endif
-#ifndef MSG_TOUCHMI_ZTEST
- #define MSG_TOUCHMI_ZTEST _UxGT("Z Offset Test")
-#endif
-#ifndef MSG_TOUCHMI_SAVE
- #define MSG_TOUCHMI_SAVE _UxGT("Save")
-#endif
-#ifndef MSG_MANUAL_DEPLOY_TOUCHMI
- #define MSG_MANUAL_DEPLOY_TOUCHMI _UxGT("Deploy TouchMI")
-#endif
-#ifndef MSG_MANUAL_DEPLOY
- #define MSG_MANUAL_DEPLOY _UxGT("Deploy Z-Probe")
-#endif
-#ifndef MSG_MANUAL_STOW
- #define MSG_MANUAL_STOW _UxGT("Stow Z-Probe")
-#endif
-#ifndef MSG_HOME_FIRST
- #define MSG_HOME_FIRST _UxGT("Home %s%s%s First")
-#endif
-#ifndef MSG_ZPROBE_ZOFFSET
- #define MSG_ZPROBE_ZOFFSET _UxGT("Probe Z Offset")
-#endif
-#ifndef MSG_BABYSTEP_X
- #define MSG_BABYSTEP_X _UxGT("Babystep X")
-#endif
-#ifndef MSG_BABYSTEP_Y
- #define MSG_BABYSTEP_Y _UxGT("Babystep Y")
-#endif
-#ifndef MSG_BABYSTEP_Z
- #define MSG_BABYSTEP_Z _UxGT("Babystep Z")
-#endif
-#ifndef MSG_BABYSTEP_TOTAL
- #define MSG_BABYSTEP_TOTAL _UxGT("Total")
-#endif
-#ifndef MSG_ENDSTOP_ABORT
- #define MSG_ENDSTOP_ABORT _UxGT("Endstop Abort")
-#endif
-#ifndef MSG_HEATING_FAILED_LCD
- #define MSG_HEATING_FAILED_LCD _UxGT("Heating Failed")
-#endif
-#ifndef MSG_HEATING_FAILED_LCD_BED
- #define MSG_HEATING_FAILED_LCD_BED _UxGT("Bed Heating Failed")
-#endif
-#ifndef MSG_HEATING_FAILED_LCD_CHAMBER
- #define MSG_HEATING_FAILED_LCD_CHAMBER _UxGT("Chamber Heating Fail")
-#endif
-#ifndef MSG_ERR_REDUNDANT_TEMP
- #define MSG_ERR_REDUNDANT_TEMP _UxGT("Err: REDUNDANT TEMP")
-#endif
-#ifndef MSG_THERMAL_RUNAWAY
- #define MSG_THERMAL_RUNAWAY _UxGT("THERMAL RUNAWAY")
-#endif
-#ifndef MSG_THERMAL_RUNAWAY_BED
- #define MSG_THERMAL_RUNAWAY_BED _UxGT("BED THERMAL RUNAWAY")
-#endif
-#ifndef MSG_THERMAL_RUNAWAY_CHAMBER
- #define MSG_THERMAL_RUNAWAY_CHAMBER _UxGT("CHAMBER T. RUNAWAY")
-#endif
-#ifndef MSG_ERR_MAXTEMP
- #define MSG_ERR_MAXTEMP _UxGT("Err: MAXTEMP")
-#endif
-#ifndef MSG_ERR_MINTEMP
- #define MSG_ERR_MINTEMP _UxGT("Err: MINTEMP")
-#endif
-#ifndef MSG_ERR_MAXTEMP_BED
- #define MSG_ERR_MAXTEMP_BED _UxGT("Err: MAXTEMP BED")
-#endif
-#ifndef MSG_ERR_MINTEMP_BED
- #define MSG_ERR_MINTEMP_BED _UxGT("Err: MINTEMP BED")
-#endif
-#ifndef MSG_ERR_MAXTEMP_CHAMBER
- #define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Err: MAXTEMP CHAMBER")
-#endif
-#ifndef MSG_ERR_MINTEMP_CHAMBER
- #define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err: MINTEMP CHAMBER")
-#endif
-#ifndef MSG_ERR_Z_HOMING
- #define MSG_ERR_Z_HOMING _UxGT("Home XY First")
-#endif
-#ifndef MSG_HALTED
- #define MSG_HALTED _UxGT("PRINTER HALTED")
-#endif
-#ifndef MSG_PLEASE_RESET
- #define MSG_PLEASE_RESET _UxGT("Please Reset")
-#endif
-#ifndef MSG_SHORT_DAY
- #define MSG_SHORT_DAY _UxGT("d") // One character only
-#endif
-#ifndef MSG_SHORT_HOUR
- #define MSG_SHORT_HOUR _UxGT("h") // One character only
-#endif
-#ifndef MSG_SHORT_MINUTE
- #define MSG_SHORT_MINUTE _UxGT("m") // One character only
-#endif
-#ifndef MSG_HEATING
- #define MSG_HEATING _UxGT("Heating...")
-#endif
-#ifndef MSG_COOLING
- #define MSG_COOLING _UxGT("Cooling...")
-#endif
-#ifndef MSG_BED_HEATING
- #define MSG_BED_HEATING _UxGT("Bed Heating...")
-#endif
-#ifndef MSG_BED_COOLING
- #define MSG_BED_COOLING _UxGT("Bed Cooling...")
-#endif
-#ifndef MSG_CHAMBER_HEATING
- #define MSG_CHAMBER_HEATING _UxGT("Chamber Heating...")
-#endif
-#ifndef MSG_CHAMBER_COOLING
- #define MSG_CHAMBER_COOLING _UxGT("Chamber Cooling...")
-#endif
-#ifndef MSG_DELTA_CALIBRATE
- #define MSG_DELTA_CALIBRATE _UxGT("Delta Calibration")
-#endif
-#ifndef MSG_DELTA_CALIBRATE_X
- #define MSG_DELTA_CALIBRATE_X _UxGT("Calibrate X")
-#endif
-#ifndef MSG_DELTA_CALIBRATE_Y
- #define MSG_DELTA_CALIBRATE_Y _UxGT("Calibrate Y")
-#endif
-#ifndef MSG_DELTA_CALIBRATE_Z
- #define MSG_DELTA_CALIBRATE_Z _UxGT("Calibrate Z")
-#endif
-#ifndef MSG_DELTA_CALIBRATE_CENTER
- #define MSG_DELTA_CALIBRATE_CENTER _UxGT("Calibrate Center")
-#endif
-#ifndef MSG_DELTA_SETTINGS
- #define MSG_DELTA_SETTINGS _UxGT("Delta Settings")
-#endif
-#ifndef MSG_DELTA_AUTO_CALIBRATE
- #define MSG_DELTA_AUTO_CALIBRATE _UxGT("Auto Calibration")
-#endif
-#ifndef MSG_DELTA_HEIGHT_CALIBRATE
- #define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Set Delta Height")
-#endif
-#ifndef MSG_DELTA_Z_OFFSET_CALIBRATE
- #define MSG_DELTA_Z_OFFSET_CALIBRATE _UxGT("Probe Z-offset")
-#endif
-#ifndef MSG_DELTA_DIAG_ROD
- #define MSG_DELTA_DIAG_ROD _UxGT("Diag Rod")
-#endif
-#ifndef MSG_DELTA_HEIGHT
- #define MSG_DELTA_HEIGHT _UxGT("Height")
-#endif
-#ifndef MSG_DELTA_RADIUS
- #define MSG_DELTA_RADIUS _UxGT("Radius")
-#endif
-#ifndef MSG_INFO_MENU
- #define MSG_INFO_MENU _UxGT("About Printer")
-#endif
-#ifndef MSG_INFO_PRINTER_MENU
- #define MSG_INFO_PRINTER_MENU _UxGT("Printer Info")
-#endif
-#ifndef MSG_3POINT_LEVELING
- #define MSG_3POINT_LEVELING _UxGT("3-Point Leveling")
-#endif
-#ifndef MSG_LINEAR_LEVELING
- #define MSG_LINEAR_LEVELING _UxGT("Linear Leveling")
-#endif
-#ifndef MSG_BILINEAR_LEVELING
- #define MSG_BILINEAR_LEVELING _UxGT("Bilinear Leveling")
-#endif
-#ifndef MSG_UBL_LEVELING
- #define MSG_UBL_LEVELING _UxGT("Unified Bed Leveling")
-#endif
-#ifndef MSG_MESH_LEVELING
- #define MSG_MESH_LEVELING _UxGT("Mesh Leveling")
-#endif
-#ifndef MSG_INFO_STATS_MENU
- #define MSG_INFO_STATS_MENU _UxGT("Printer Stats")
-#endif
-#ifndef MSG_INFO_BOARD_MENU
- #define MSG_INFO_BOARD_MENU _UxGT("Board Info")
-#endif
-#ifndef MSG_INFO_THERMISTOR_MENU
- #define MSG_INFO_THERMISTOR_MENU _UxGT("Thermistors")
-#endif
-#ifndef MSG_INFO_EXTRUDERS
- #define MSG_INFO_EXTRUDERS _UxGT("Extruders")
-#endif
-#ifndef MSG_INFO_BAUDRATE
- #define MSG_INFO_BAUDRATE _UxGT("Baud")
-#endif
-#ifndef MSG_INFO_PROTOCOL
- #define MSG_INFO_PROTOCOL _UxGT("Protocol")
-#endif
-#ifndef MSG_INFO_RUNAWAY_OFF
- #define MSG_INFO_RUNAWAY_OFF _UxGT("Runaway Watch: OFF")
-#endif
-#ifndef MSG_INFO_RUNAWAY_ON
- #define MSG_INFO_RUNAWAY_ON _UxGT("Runaway Watch: ON")
-#endif
+ PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("LED Control");
+ PROGMEM Language_Str MSG_LEDS = _UxGT("Lights");
+ PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Light Presets");
+ PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Red");
+ PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Orange");
+ PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Yellow");
+ PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Green");
+ PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Blue");
+ PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
+ PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Violet");
+ PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("White");
+ PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Default");
+ PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Custom Lights");
+ PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Red Intensity");
+ PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Green Intensity");
+ PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Blue Intensity");
+ PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("White Intensity");
+ PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Brightness");
-#ifndef MSG_CASE_LIGHT
- #define MSG_CASE_LIGHT _UxGT("Case Light")
-#endif
-#ifndef MSG_CASE_LIGHT_BRIGHTNESS
- #define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Light Brightness")
-#endif
+ PROGMEM Language_Str MSG_MOVING = _UxGT("Moving...");
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("Free XY");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Move X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Move Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Move Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extruder");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Extruder ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Extruder ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Extruder ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Extruder ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Extruder ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Extruder ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Hotend too cold");
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Move %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Move 0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Move 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Move 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Speed");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozzle");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Nozzle ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Nozzle ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Nozzle ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Nozzle ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Nozzle ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Nozzle ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Bed");
+ PROGMEM Language_Str MSG_CHAMBER = _UxGT("Enclosure");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Fan Speed");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Fan Speed 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Fan Speed 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Fan Speed 3");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Extra Fan Speed");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1 = _UxGT("Extra Fan Speed 1");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2 = _UxGT("Extra Fan Speed 2");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3 = _UxGT("Extra Fan Speed 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Flow");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Flow ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Flow ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Flow ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Flow ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Flow ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Flow ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Control");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Autotemp");
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("On");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Off");
+ PROGMEM Language_Str MSG_AUTOTUNE_PID = _UxGT("PID Autotune");
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E0 = _UxGT("PID Autotune ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E1 = _UxGT("PID Autotune ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E2 = _UxGT("PID Autotune ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E3 = _UxGT("PID Autotune ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E4 = _UxGT("PID Autotune ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E5 = _UxGT("PID Autotune ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
+ PROGMEM Language_Str MSG_PID_P_E0 = _UxGT("PID-P ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_P_E1 = _UxGT("PID-P ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_P_E2 = _UxGT("PID-P ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_P_E3 = _UxGT("PID-P ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_P_E4 = _UxGT("PID-P ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_P_E5 = _UxGT("PID-P ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
+ PROGMEM Language_Str MSG_PID_I_E0 = _UxGT("PID-I ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_I_E1 = _UxGT("PID-I ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_I_E2 = _UxGT("PID-I ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_I_E3 = _UxGT("PID-I ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_I_E4 = _UxGT("PID-I ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_I_E5 = _UxGT("PID-I ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
+ PROGMEM Language_Str MSG_PID_D_E0 = _UxGT("PID-D ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_D_E1 = _UxGT("PID-D ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_D_E2 = _UxGT("PID-D ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_D_E3 = _UxGT("PID-D ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_D_E4 = _UxGT("PID-D ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_D_E5 = _UxGT("PID-D ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
+ PROGMEM Language_Str MSG_PID_C_E0 = _UxGT("PID-C ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_C_E1 = _UxGT("PID-C ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_C_E2 = _UxGT("PID-C ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_C_E3 = _UxGT("PID-C ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_C_E4 = _UxGT("PID-C ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_C_E5 = _UxGT("PID-C ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Select");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Select ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Select ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Select ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Select ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Select ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Select ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Accel");
+ PROGMEM Language_Str MSG_JERK = _UxGT("Jerk");
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-Jerk");
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-Jerk");
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-Jerk");
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-Jerk");
+ PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
+ PROGMEM Language_Str MSG_VELOCITY = _UxGT("Velocity");
+ PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A;
+ PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B;
+ PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C;
+ PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E;
+ PROGMEM Language_Str MSG_VMAX_E0 = _UxGT("Vmax ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_VMAX_E1 = _UxGT("Vmax ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_VMAX_E2 = _UxGT("Vmax ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_VMAX_E3 = _UxGT("Vmax ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_VMAX_E4 = _UxGT("Vmax ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_VMAX_E5 = _UxGT("Vmax ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_VMIN = _UxGT("Vmin");
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VTrav Min");
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Acceleration");
+ PROGMEM Language_Str MSG_AMAX_A = _UxGT("Amax ") LCD_STR_A;
+ PROGMEM Language_Str MSG_AMAX_B = _UxGT("Amax ") LCD_STR_B;
+ PROGMEM Language_Str MSG_AMAX_C = _UxGT("Amax ") LCD_STR_C;
+ PROGMEM Language_Str MSG_AMAX_E = _UxGT("Amax ") LCD_STR_E;
+ PROGMEM Language_Str MSG_AMAX_E0 = _UxGT("Amax ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AMAX_E1 = _UxGT("Amax ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AMAX_E2 = _UxGT("Amax ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AMAX_E3 = _UxGT("Amax ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AMAX_E4 = _UxGT("Amax ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AMAX_E5 = _UxGT("Amax ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-Retract");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-Travel");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Steps/mm");
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT("steps/mm");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT("steps/mm");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT("steps/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("Esteps/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT("steps/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT("steps/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT("steps/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT("steps/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT("steps/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT("steps/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperature");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Motion");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm³");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Fil. Dia. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Fil. Dia. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Fil. Dia. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Fil. Dia. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Fil. Dia. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Fil. Dia. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Unload mm");
+ PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Load mm");
+ PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Advance K");
+ PROGMEM Language_Str MSG_ADVANCE_K_E0 = _UxGT("Advance K ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_ADVANCE_K_E1 = _UxGT("Advance K ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_ADVANCE_K_E2 = _UxGT("Advance K ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_ADVANCE_K_E3 = _UxGT("Advance K ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_ADVANCE_K_E4 = _UxGT("Advance K ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_ADVANCE_K_E5 = _UxGT("Advance K ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD Contrast");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Store Settings");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Load Settings");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Restore failsafe");
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Initialize EEPROM");
+ PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Media Update");
+ PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Reset Printer");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Refresh");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Info Screen");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Prepare");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Tune");
+ PROGMEM Language_Str MSG_START_PRINT = _UxGT("Start Print");
+ PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Next");
+ PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Init");
+ PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Stop");
+ PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Print");
+ PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Reset");
+ PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Cancel");
+ PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Done");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pause Print");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Resume Print");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Stop Print");
+ PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Printing Object");
+ PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Cancel Object");
+ PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Outage Recovery");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Print from Media");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("No Media");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Sleep...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Click to Resume...");
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Print Paused");
+ PROGMEM Language_Str MSG_PRINTING = _UxGT("Printing...");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Print Aborted");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("No Move.");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("KILLED. ");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("STOPPED. ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retract mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Re.mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retract V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("UnRet V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("AutoRetr.");
+ PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Swap Length");
+ PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Purge Length");
+ PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Tool Change");
+ PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Raise");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD = _UxGT("Prime Speed");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD = _UxGT("Retract Speed");
+ PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Nozzle Standby");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Change Filament");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Change Filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Change Filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Change Filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Change Filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Change Filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Change Filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Load Filament");
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E0 = _UxGT("Load Filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E1 = _UxGT("Load Filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E2 = _UxGT("Load Filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E3 = _UxGT("Load Filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E4 = _UxGT("Load Filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E5 = _UxGT("Load Filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Unload Filament");
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0 = _UxGT("Unload Filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1 = _UxGT("Unload Filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2 = _UxGT("Unload Filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3 = _UxGT("Unload Filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4 = _UxGT("Unload Filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5 = _UxGT("Unload Filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Unload All");
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Init. Media");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Change Media");
+ PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Release Media");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z Probe Past Bed");
+ PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Skew Factor");
+ PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Cmd: Self-Test");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Cmd: Reset");
+ PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Cmd: Stow");
+ PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Cmd: Deploy");
+ PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("Cmd: SW-Mode");
+ PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("Cmd: 5V-Mode");
+ PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("Cmd: OD-Mode");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Cmd: Mode-Store");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Set BLTouch to 5V");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Set BLTouch to OD");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Report Drain");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("DANGER: Bad settings can cause damage! Proceed anyway?");
+ PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Init TouchMI");
+ PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Z Offset Test");
+ PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Save");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Deploy TouchMI");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Deploy Z-Probe");
+ PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Stow Z-Probe");
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Home %s%s%s First");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Probe Z Offset");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
+ PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Total");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Endstop Abort");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Heating Failed");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED = _UxGT("Bed Heating Failed");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_CHAMBER = _UxGT("Chamber Heating Fail");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: REDUNDANT TEMP");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("THERMAL RUNAWAY");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("BED THERMAL RUNAWAY");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("CHAMBER T. RUNAWAY");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err: MAXTEMP");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err: MINTEMP");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("Err: MAXTEMP BED");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Err: MINTEMP BED");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER = _UxGT("Err: MAXTEMP CHAMBER");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER = _UxGT("Err: MINTEMP CHAMBER");
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Home XY First");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("PRINTER HALTED");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Please Reset");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Heating...");
+ PROGMEM Language_Str MSG_COOLING = _UxGT("Cooling...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Bed Heating...");
+ PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Bed Cooling...");
+ PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Chamber Heating...");
+ PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Chamber Cooling...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Calibration");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibrate X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrate Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrate Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrate Center");
+ PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Delta Settings");
+ PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibration");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Set Delta Height");
+ PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Probe Z-offset");
+ PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Diag Rod");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Height");
+ PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Radius");
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("About Printer");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Printer Info");
+ PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-Point Leveling");
+ PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Linear Leveling");
+ PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Bilinear Leveling");
+ PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
+ PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Mesh Leveling");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Printer Stats");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Board Info");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistors");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extruders");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baud");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocol");
+ PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Runaway Watch: OFF");
+ PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Runaway Watch: ON");
-#ifndef MSG_EXPECTED_PRINTER
- #define MSG_EXPECTED_PRINTER _UxGT("INCORRECT PRINTER")
-#endif
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Case Light");
+ PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Light Brightness");
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("INCORRECT PRINTER");
-#if LCD_WIDTH >= 20
- #ifndef MSG_INFO_PRINT_COUNT
- #define MSG_INFO_PRINT_COUNT _UxGT("Print Count")
- #endif
- #ifndef MSG_INFO_COMPLETED_PRINTS
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Completed")
- #endif
- #ifndef MSG_INFO_PRINT_TIME
- #define MSG_INFO_PRINT_TIME _UxGT("Total Print time")
- #endif
- #ifndef MSG_INFO_PRINT_LONGEST
- #define MSG_INFO_PRINT_LONGEST _UxGT("Longest Job Time")
- #endif
- #ifndef MSG_INFO_PRINT_FILAMENT
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Extruded Total")
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Print Count");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completed");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total Print time");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Longest Job Time");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extruded Total");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Prints");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completed");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Longest");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extruded");
#endif
-#else
- #ifndef MSG_INFO_PRINT_COUNT
- #define MSG_INFO_PRINT_COUNT _UxGT("Prints")
- #endif
- #ifndef MSG_INFO_COMPLETED_PRINTS
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Completed")
- #endif
- #ifndef MSG_INFO_PRINT_TIME
- #define MSG_INFO_PRINT_TIME _UxGT("Total")
- #endif
- #ifndef MSG_INFO_PRINT_LONGEST
- #define MSG_INFO_PRINT_LONGEST _UxGT("Longest")
- #endif
- #ifndef MSG_INFO_PRINT_FILAMENT
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Extruded")
- #endif
-#endif
-#ifndef MSG_INFO_MIN_TEMP
- #define MSG_INFO_MIN_TEMP _UxGT("Min Temp")
-#endif
-#ifndef MSG_INFO_MAX_TEMP
- #define MSG_INFO_MAX_TEMP _UxGT("Max Temp")
-#endif
-#ifndef MSG_INFO_PSU
- #define MSG_INFO_PSU _UxGT("PSU")
-#endif
-#ifndef MSG_DRIVE_STRENGTH
- #define MSG_DRIVE_STRENGTH _UxGT("Drive Strength")
-#endif
-#ifndef MSG_DAC_PERCENT
- #define MSG_DAC_PERCENT _UxGT("Driver %")
-#endif
-#ifndef MSG_ERROR_TMC
- #define MSG_ERROR_TMC _UxGT("TMC CONNECTION ERROR")
-#endif
-#ifndef MSG_DAC_EEPROM_WRITE
- #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write")
-#endif
-#ifndef MSG_FILAMENT_CHANGE_HEADER_PAUSE
- #define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("PRINT PAUSED")
-#endif
-#ifndef MSG_FILAMENT_CHANGE_HEADER_LOAD
- #define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("LOAD FILAMENT")
-#endif
-#ifndef MSG_FILAMENT_CHANGE_HEADER_UNLOAD
- #define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("UNLOAD FILAMENT")
-#endif
-#ifndef MSG_FILAMENT_CHANGE_OPTION_HEADER
- #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
-#endif
-#ifndef MSG_FILAMENT_CHANGE_OPTION_PURGE
- #define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Purge more")
-#endif
-#ifndef MSG_FILAMENT_CHANGE_OPTION_RESUME
- #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Continue")
-#endif
-#ifndef MSG_FILAMENT_CHANGE_NOZZLE
- #define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Nozzle: ")
-#endif
-#ifndef MSG_RUNOUT_SENSOR
- #define MSG_RUNOUT_SENSOR _UxGT("Runout Sensor")
-#endif
-#ifndef MSG_RUNOUT_DISTANCE_MM
- #define MSG_RUNOUT_DISTANCE_MM _UxGT("Runout Dist mm")
-#endif
-#ifndef MSG_ERR_HOMING_FAILED
- #define MSG_ERR_HOMING_FAILED _UxGT("Homing Failed")
-#endif
-#ifndef MSG_ERR_PROBING_FAILED
- #define MSG_ERR_PROBING_FAILED _UxGT("Probing Failed")
-#endif
-#ifndef MSG_M600_TOO_COLD
- #define MSG_M600_TOO_COLD _UxGT("M600: Too Cold")
-#endif
-#ifndef MSG_MMU2_FILAMENT_CHANGE_HEADER
- #define MSG_MMU2_FILAMENT_CHANGE_HEADER _UxGT("FILAMENT CHANGE")
-#endif
-#ifndef MSG_MMU2_CHOOSE_FILAMENT_HEADER
- #define MSG_MMU2_CHOOSE_FILAMENT_HEADER _UxGT("CHOOSE FILAMENT")
-#endif
-#ifndef MSG_MMU2_MENU
- #define MSG_MMU2_MENU _UxGT("MMU")
-#endif
-#ifndef MSG_MMU2_WRONG_FIRMWARE
- #define MSG_MMU2_WRONG_FIRMWARE _UxGT("Update MMU Firmware!")
-#endif
-#ifndef MSG_MMU2_NOT_RESPONDING
- #define MSG_MMU2_NOT_RESPONDING _UxGT("MMU Needs Attention.")
-#endif
-#ifndef MSG_MMU2_RESUME
- #define MSG_MMU2_RESUME _UxGT("Resume Print")
-#endif
-#ifndef MSG_MMU2_RESUMING
- #define MSG_MMU2_RESUMING _UxGT("Resuming...")
-#endif
-#ifndef MSG_MMU2_LOAD_FILAMENT
- #define MSG_MMU2_LOAD_FILAMENT _UxGT("Load Filament")
-#endif
-#ifndef MSG_MMU2_LOAD_ALL
- #define MSG_MMU2_LOAD_ALL _UxGT("Load All")
-#endif
-#ifndef MSG_MMU2_LOAD_TO_NOZZLE
- #define MSG_MMU2_LOAD_TO_NOZZLE _UxGT("Load to Nozzle")
-#endif
-#ifndef MSG_MMU2_EJECT_FILAMENT
- #define MSG_MMU2_EJECT_FILAMENT _UxGT("Eject Filament")
-#endif
-#ifndef MSG_MMU2_EJECT_FILAMENT0
- #define MSG_MMU2_EJECT_FILAMENT0 _UxGT("Eject Filament 1")
-#endif
-#ifndef MSG_MMU2_EJECT_FILAMENT1
- #define MSG_MMU2_EJECT_FILAMENT1 _UxGT("Eject Filament 2")
-#endif
-#ifndef MSG_MMU2_EJECT_FILAMENT2
- #define MSG_MMU2_EJECT_FILAMENT2 _UxGT("Eject Filament 3")
-#endif
-#ifndef MSG_MMU2_EJECT_FILAMENT3
- #define MSG_MMU2_EJECT_FILAMENT3 _UxGT("Eject Filament 4")
-#endif
-#ifndef MSG_MMU2_EJECT_FILAMENT4
- #define MSG_MMU2_EJECT_FILAMENT4 _UxGT("Eject Filament 5")
-#endif
-#ifndef MSG_MMU2_UNLOAD_FILAMENT
- #define MSG_MMU2_UNLOAD_FILAMENT _UxGT("Unload Filament")
-#endif
-#ifndef MSG_MMU2_LOADING_FILAMENT
- #define MSG_MMU2_LOADING_FILAMENT _UxGT("Loading Fil. %i...")
-#endif
-#ifndef MSG_MMU2_EJECTING_FILAMENT
- #define MSG_MMU2_EJECTING_FILAMENT _UxGT("Ejecting Fil. ...")
-#endif
-#ifndef MSG_MMU2_UNLOADING_FILAMENT
- #define MSG_MMU2_UNLOADING_FILAMENT _UxGT("Unloading Fil....")
-#endif
-#ifndef MSG_MMU2_ALL
- #define MSG_MMU2_ALL _UxGT("All")
-#endif
-#ifndef MSG_MMU2_FILAMENT0
- #define MSG_MMU2_FILAMENT0 _UxGT("Filament 1")
-#endif
-#ifndef MSG_MMU2_FILAMENT1
- #define MSG_MMU2_FILAMENT1 _UxGT("Filament 2")
-#endif
-#ifndef MSG_MMU2_FILAMENT2
- #define MSG_MMU2_FILAMENT2 _UxGT("Filament 3")
-#endif
-#ifndef MSG_MMU2_FILAMENT3
- #define MSG_MMU2_FILAMENT3 _UxGT("Filament 4")
-#endif
-#ifndef MSG_MMU2_FILAMENT4
- #define MSG_MMU2_FILAMENT4 _UxGT("Filament 5")
-#endif
-#ifndef MSG_MMU2_RESET
- #define MSG_MMU2_RESET _UxGT("Reset MMU")
-#endif
-#ifndef MSG_MMU2_RESETTING
- #define MSG_MMU2_RESETTING _UxGT("Resetting MMU...")
-#endif
-#ifndef MSG_MMU2_EJECT_RECOVER
- #define MSG_MMU2_EJECT_RECOVER _UxGT("Remove, click")
-#endif
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("PSU");
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Drive Strength");
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("Driver %");
+ PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("TMC CONNECTION ERROR");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Write");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("FILAMENT CHANGE");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("PRINT PAUSED");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("LOAD FILAMENT");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("UNLOAD FILAMENT");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("RESUME OPTIONS:");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purge more");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Continue");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozzle: ");
+ PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Runout Sensor");
+ PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Runout Dist mm");
+ PROGMEM Language_Str MSG_LCD_HOMING_FAILED = _UxGT("Homing Failed");
+ PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Probing Failed");
+ PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: Too Cold");
-#ifndef MSG_MIX
- #define MSG_MIX _UxGT("Mix")
-#endif
-#ifndef MSG_MIX_COMPONENT
- #define MSG_MIX_COMPONENT _UxGT("Component")
-#endif
-#ifndef MSG_MIXER
- #define MSG_MIXER _UxGT("Mixer")
-#endif
-#ifndef MSG_GRADIENT
- #define MSG_GRADIENT _UxGT("Gradient")
-#endif
-#ifndef MSG_FULL_GRADIENT
- #define MSG_FULL_GRADIENT _UxGT("Full Gradient")
-#endif
-#ifndef MSG_TOGGLE_MIX
- #define MSG_TOGGLE_MIX _UxGT("Toggle Mix")
-#endif
-#ifndef MSG_CYCLE_MIX
- #define MSG_CYCLE_MIX _UxGT("Cycle Mix")
-#endif
-#ifndef MSG_GRADIENT_MIX
- #define MSG_GRADIENT_MIX _UxGT("Gradient Mix")
-#endif
-#ifndef MSG_REVERSE_GRADIENT
- #define MSG_REVERSE_GRADIENT _UxGT("Reverse Gradient")
-#endif
-#ifndef MSG_ACTIVE_VTOOL
- #define MSG_ACTIVE_VTOOL _UxGT("Active V-tool")
-#endif
-#ifndef MSG_START_VTOOL
- #define MSG_START_VTOOL _UxGT("Start V-tool")
-#endif
-#ifndef MSG_END_VTOOL
- #define MSG_END_VTOOL _UxGT(" End V-tool")
-#endif
-#ifndef MSG_GRADIENT_ALIAS
- #define MSG_GRADIENT_ALIAS _UxGT("Alias V-tool")
-#endif
-#ifndef MSG_RESET_VTOOLS
- #define MSG_RESET_VTOOLS _UxGT("Reset V-tools")
-#endif
-#ifndef MSG_COMMIT_VTOOL
- #define MSG_COMMIT_VTOOL _UxGT("Commit V-tool Mix")
-#endif
-#ifndef MSG_VTOOLS_RESET
- #define MSG_VTOOLS_RESET _UxGT("V-tools Were Reset")
-#endif
-#ifndef MSG_START_Z
- #define MSG_START_Z _UxGT("Start Z")
-#endif
-#ifndef MSG_END_Z
- #define MSG_END_Z _UxGT(" End Z")
-#endif
+ PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("CHOOSE FILAMENT");
+ PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
+ PROGMEM Language_Str MSG_MMU2_WRONG_FIRMWARE = _UxGT("Update MMU Firmware!");
+ PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Needs Attention.");
+ PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Resume Print");
+ PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Resuming...");
+ PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Load Filament");
+ PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Load All");
+ PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Load to Nozzle");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Eject Filament");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT0 = _UxGT("Eject Filament 1");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT1 = _UxGT("Eject Filament 2");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT2 = _UxGT("Eject Filament 3");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT3 = _UxGT("Eject Filament 4");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT4 = _UxGT("Eject Filament 5");
+ PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Unload Filament");
+ PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Loading Fil. %i...");
+ PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Ejecting Fil. ...");
+ PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Unloading Fil....");
+ PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("All");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT0 = _UxGT("Filament 1");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT1 = _UxGT("Filament 2");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT2 = _UxGT("Filament 3");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT3 = _UxGT("Filament 4");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT4 = _UxGT("Filament 5");
+ PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Reset MMU");
+ PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Resetting MMU...");
+ PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Remove, click");
-#ifndef MSG_GAMES
- #define MSG_GAMES _UxGT("Games")
-#endif
-#ifndef MSG_BRICKOUT
- #define MSG_BRICKOUT _UxGT("Brickout")
-#endif
-#ifndef MSG_INVADERS
- #define MSG_INVADERS _UxGT("Invaders")
-#endif
-#ifndef MSG_SNAKE
- #define MSG_SNAKE _UxGT("Sn4k3")
-#endif
-#ifndef MSG_MAZE
- #define MSG_MAZE _UxGT("Maze")
-#endif
+ PROGMEM Language_Str MSG_MIX = _UxGT("Mix");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_1 = _UxGT("Component 1");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_2 = _UxGT("Component 2");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_3 = _UxGT("Component 3");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_4 = _UxGT("Component 4");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_5 = _UxGT("Component 5");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_6 = _UxGT("Component 6");
+ PROGMEM Language_Str MSG_MIXER = _UxGT("Mixer");
+ PROGMEM Language_Str MSG_GRADIENT = _UxGT("Gradient");
+ PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Full Gradient");
+ PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Toggle Mix");
+ PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Cycle Mix");
+ PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
+ PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Reverse Gradient");
+ PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Active V-tool");
+ PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Start V-tool");
+ PROGMEM Language_Str MSG_END_VTOOL = _UxGT(" End V-tool");
+ PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
+ PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Reset V-tools");
+ PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Commit V-tool Mix");
+ PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-tools Were Reset");
+ PROGMEM Language_Str MSG_START_Z = _UxGT("Start Z:");
+ PROGMEM Language_Str MSG_END_Z = _UxGT(" End Z:");
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-// ...or up to 2 lines on a 3-line display
-//
-#if LCD_HEIGHT >= 4
- #ifndef MSG_ADVANCED_PAUSE_WAITING_1
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Press Button")
- #define MSG_ADVANCED_PAUSE_WAITING_2 _UxGT("to resume print")
- #endif
- #ifndef MSG_PAUSE_PRINT_INIT_1
- #define MSG_PAUSE_PRINT_INIT_1 _UxGT("Parking...")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_INIT_1
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Wait for")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("filament change")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("to start")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_INSERT_1
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insert filament")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("and press button")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("to continue")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_HEAT_1
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Press button")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("to heat nozzle")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_HEATING_1
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Nozzle heating")
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Please wait...")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_UNLOAD_1
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Wait for")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("filament unload")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_LOAD_1
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Wait for")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("filament load")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_PURGE_1
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Wait for")
- #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("filament purge")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_CONT_PURGE_1
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Click to finish")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_2 _UxGT("filament purge")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_RESUME_1
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wait for print")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("to resume...")
- #endif
-#else // LCD_HEIGHT < 4
- #ifndef MSG_ADVANCED_PAUSE_WAITING_1
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Click to continue")
- #endif
- #ifndef MSG_PAUSE_PRINT_INIT_1
- #define MSG_PAUSE_PRINT_INIT_1 _UxGT("Parking...")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_INIT_1
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Please wait...")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_INSERT_1
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insert and Click")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_HEAT_1
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Click to heat")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_HEATING_1
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Heating...")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_UNLOAD_1
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Ejecting...")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_LOAD_1
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Loading...")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_PURGE_1
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Purging...")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_CONT_PURGE_1
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Click to finish")
- #endif
- #ifndef MSG_FILAMENT_CHANGE_RESUME_1
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Resuming...")
- #endif
-#endif // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_GAMES = _UxGT("Games");
+ PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
+ PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
+ PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
+ PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
-#ifndef MSG_TMC_DRIVERS
- #define MSG_TMC_DRIVERS _UxGT("TMC Drivers")
-#endif
-#ifndef MSG_TMC_CURRENT
- #define MSG_TMC_CURRENT _UxGT("Driver Current")
-#endif
-#ifndef MSG_TMC_HYBRID_THRS
- #define MSG_TMC_HYBRID_THRS _UxGT("Hybrid Threshold")
-#endif
-#ifndef MSG_TMC_HOMING_THRS
- #define MSG_TMC_HOMING_THRS _UxGT("Sensorless Homing")
-#endif
-#ifndef MSG_TMC_STEPPING_MODE
- #define MSG_TMC_STEPPING_MODE _UxGT("Stepping Mode")
-#endif
-#ifndef MSG_TMC_STEALTH_ENABLED
- #define MSG_TMC_STEALTH_ENABLED _UxGT("StealthChop Enabled")
-#endif
+ #define MSG_1_LINE(A) A "\0" "\0"
+ #define MSG_2_LINE(A,B) A "\0" B "\0"
+ #define MSG_3_LINE(A,B,C) A "\0" B "\0" C
-#ifndef MSG_SERVICE_RESET
- #define MSG_SERVICE_RESET _UxGT("Reset")
-#endif
-#ifndef MSG_SERVICE_IN
- #define MSG_SERVICE_IN _UxGT(" in:")
-#endif
+ //
+ // Filament Change screens show up to 3 lines on a 4-line display
+ // ...or up to 2 lines on a 3-line display
+ //
+ #if LCD_HEIGHT >= 4
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Press Button", "to resume print"));
+ PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Parking..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Wait for", "filament change", "to start"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Insert filament", "and press button", "to continue"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Press button", "to heat nozzle"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nozzle heating", "Please wait..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Wait for", "filament unload"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Wait for", "filament load"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Wait for", "filament purge"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Click to finish", "filament purge"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Wait for print", "to resume..."));
+ #else
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Click to continue"));
+ PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Parking..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Please wait..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insert and Click"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Click to heat"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Heating..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Ejecting..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Loading..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purging..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Click to finish"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Resuming..."));
+ #endif
+ PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("TMC Drivers");
+ PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Driver Current");
+ PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Hybrid Threshold");
+ PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Sensorless Homing");
+ PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Stepping Mode");
+ PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Enabled");
+ PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Reset");
+ PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" in:");
+ PROGMEM Language_Str MSG_BACKLASH = _UxGT("Backlash");
+ PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
+ PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
+ PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
+ PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Correction");
+ PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Smoothing");
+}
-#ifndef MSG_BACKLASH
- #define MSG_BACKLASH _UxGT("Backlash")
-#endif
-#ifndef MSG_BACKLASH_CORRECTION
- #define MSG_BACKLASH_CORRECTION _UxGT("Correction")
-#endif
-#ifndef MSG_BACKLASH_SMOOTHING
- #define MSG_BACKLASH_SMOOTHING _UxGT("Smoothing")
+#if FAN_COUNT == 1
+ #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
+ #define MSG_FIRST_EXTRA_FAN_SPEED MSG_EXTRA_FAN_SPEED
+#else
+ #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_1
+ #define MSG_FIRST_EXTRA_FAN_SPEED MSG_EXTRA_FAN_SPEED_1
#endif
diff --git a/Marlin/src/lcd/language/language_es.h b/Marlin/src/lcd/language/language_es.h
index e38390b3f9da..9c33add941b9 100644
--- a/Marlin/src/lcd/language/language_es.h
+++ b/Marlin/src/lcd/language/language_es.h
@@ -29,536 +29,606 @@
*
*/
-#define THIS_LANGUAGES_SPECIAL_SYMBOLS _UxGT ("¡¿ªáéíóúÁÉÍÓÚ")
#define DISPLAY_CHARSET_ISO10646_1
-#define CHARSIZE 2
-#define WELCOME_MSG MACHINE_NAME _UxGT(" lista")
-#define MSG_YES _UxGT("SI")
-#define MSG_NO _UxGT("NO")
-#define MSG_BACK _UxGT("Atrás")
-#define MSG_MEDIA_ABORTING _UxGT("Cancelando...")
-#define MSG_MEDIA_INSERTED _UxGT("SD/USB insertado")
-#define MSG_MEDIA_REMOVED _UxGT("SD/USB retirado")
-#define MSG_MEDIA_RELEASED _UxGT("SD/USB lanzado")
-#define MSG_MEDIA_WAITING _UxGT("Esperando al SD/USB")
-#define MSG_MEDIA_READ_ERROR _UxGT("Error lectura SD/USB")
-#define MSG_MEDIA_USB_REMOVED _UxGT("Disp. USB retirado")
-#define MSG_MEDIA_USB_FAILED _UxGT("Inicio USB fallido")
-#define MSG_LCD_ENDSTOPS _UxGT("Endstops") // Max length 8 characters
-#define MSG_LCD_SOFT_ENDSTOPS _UxGT("Soft Endstops")
-#define MSG_MAIN _UxGT("Menú principal")
-#define MSG_ADVANCED_SETTINGS _UxGT("Ajustes avanzados")
-#define MSG_CONFIGURATION _UxGT("Configuración")
-#define MSG_AUTOSTART _UxGT("Inicio automático")
-#define MSG_DISABLE_STEPPERS _UxGT("Apagar motores")
-#define MSG_DEBUG_MENU _UxGT("Menú depuración")
-#define MSG_PROGRESS_BAR_TEST _UxGT("Prob. barra progreso")
-#define MSG_AUTO_HOME _UxGT("Llevar al origen")
-#define MSG_AUTO_HOME_X _UxGT("Origen X")
-#define MSG_AUTO_HOME_Y _UxGT("Origen Y")
-#define MSG_AUTO_HOME_Z _UxGT("Origen Z")
-#define MSG_AUTO_Z_ALIGN _UxGT("Auto alineado Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Origen XYZ")
-#define MSG_LEVEL_BED_WAITING _UxGT("Pulsar para comenzar")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Siguiente punto")
-#define MSG_LEVEL_BED_DONE _UxGT("¡Nivelación lista!")
-#define MSG_Z_FADE_HEIGHT _UxGT("Compensación Altura")
-#define MSG_SET_HOME_OFFSETS _UxGT("Ajustar desfases")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Desfase aplicada")
-#define MSG_SET_ORIGIN _UxGT("Establecer origen")
-#define MSG_PREHEAT_1 _UxGT("Precalentar " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" Todo")
-#define MSG_PREHEAT_1_END MSG_PREHEAT_1 _UxGT(" Fin")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" Cama")
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" Ajuste")
-#define MSG_PREHEAT_2 _UxGT("Precalentar" PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" Todo")
-#define MSG_PREHEAT_2_END MSG_PREHEAT_2 _UxGT(" Fin")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" Cama")
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" Ajuste")
-#define MSG_PREHEAT_CUSTOM _UxGT("Precalen. Personali.")
-#define MSG_COOLDOWN _UxGT("Enfriar")
-#define MSG_LASER_MENU _UxGT("Control Láser")
-#define MSG_LASER_OFF _UxGT("Láser Apagado")
-#define MSG_LASER_ON _UxGT("Láser Encendido")
-#define MSG_LASER_POWER _UxGT("Potencia Láser")
-#define MSG_SPINDLE_MENU _UxGT("Control Mandrino")
-#define MSG_SPINDLE_OFF _UxGT("Mandrino Apagado")
-#define MSG_SPINDLE_ON _UxGT("Mandrino Encendido")
-#define MSG_SPINDLE_POWER _UxGT("Potencia Mandrino")
-#define MSG_SPINDLE_REVERSE _UxGT("Invertir giro")
-#define MSG_SWITCH_PS_ON _UxGT("Encender Fuente")
-#define MSG_SWITCH_PS_OFF _UxGT("Apagar Fuente")
-#define MSG_EXTRUDE _UxGT("Extruir")
-#define MSG_RETRACT _UxGT("Retraer")
-#define MSG_MOVE_AXIS _UxGT("Mover ejes")
-#define MSG_BED_LEVELING _UxGT("Nivelando Cama")
-#define MSG_LEVEL_BED _UxGT("Nivelar Cama")
-#define MSG_LEVEL_CORNERS _UxGT("Nivelar Esquinas")
-#define MSG_NEXT_CORNER _UxGT("Siguente Esquina")
-#define MSG_MESH_EDITOR _UxGT("Editor Mallado")
-#define MSG_EDIT_MESH _UxGT("Editar Mallado")
-#define MSG_EDITING_STOPPED _UxGT("Ed. Mallado parada")
-#define MSG_PROBING_MESH _UxGT("Sondear Punto")
-#define MSG_MESH_X _UxGT("Índice X")
-#define MSG_MESH_Y _UxGT("Índice Y")
-#define MSG_MESH_EDIT_Z _UxGT("Valor Z")
-#define MSG_USER_MENU _UxGT("Comandos Personaliz.")
-#define MSG_M48_TEST _UxGT("M48 Probar Sonda")
-#define MSG_M48_POINT _UxGT("M48 Punto")
-#define MSG_M48_DEVIATION _UxGT("Desviación")
-#define MSG_IDEX_MENU _UxGT("Modo IDEX")
-#define MSG_OFFSETS_MENU _UxGT("Desfase Boquillas")
-#define MSG_IDEX_MODE_AUTOPARK _UxGT("Auto-Aparcado")
-#define MSG_IDEX_MODE_DUPLICATE _UxGT("Duplicar")
-#define MSG_IDEX_MODE_MIRRORED_COPY _UxGT("Copia Reflejada")
-#define MSG_IDEX_MODE_FULL_CTRL _UxGT("Control Total")
-#define MSG_X_OFFSET _UxGT("2ª Boquilla X")
-#define MSG_Y_OFFSET _UxGT("2ª Boquilla Y")
-#define MSG_Z_OFFSET _UxGT("2ª Boquilla Z")
-#define MSG_UBL_DOING_G29 _UxGT("Hacer G29")
-#define MSG_UBL_TOOLS _UxGT("Herramientas UBL")
-#define MSG_UBL_LEVEL_BED _UxGT("Nivel.Cama.Uni.(UBL)")
-#define MSG_LCD_TILTING_MESH _UxGT("Punto de inclinación")
-#define MSG_UBL_MANUAL_MESH _UxGT("Crear Mallado man.")
-#define MSG_UBL_BC_INSERT _UxGT("Colocar cuña y Medir")
-#define MSG_UBL_BC_INSERT2 _UxGT("Medir")
-#define MSG_UBL_BC_REMOVE _UxGT("Retirar y Medir Cama")
-#define MSG_UBL_MOVING_TO_NEXT _UxGT("Mover al Siguente")
-#define MSG_UBL_ACTIVATE_MESH _UxGT("Activar UBL")
-#define MSG_UBL_DEACTIVATE_MESH _UxGT("Desactivar UBL")
-#define MSG_UBL_SET_TEMP_BED _UxGT("Temp. Cama")
-#define MSG_UBL_BED_TEMP_CUSTOM MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND _UxGT ("Hotend Temp")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT _UxGT("Editar Mallado")
-#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("Edit. Mallado perso.")
-#define MSG_UBL_FINE_TUNE_MESH _UxGT("Ajuste fino Mallado")
-#define MSG_UBL_DONE_EDITING_MESH _UxGT("Term. edici. Mallado")
-#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("Crear Mallado Perso.")
-#define MSG_UBL_BUILD_MESH_MENU _UxGT("Crear Mallado")
-#define MSG_UBL_BUILD_MESH_M1 _UxGT("Crear Mallado (" PREHEAT_1_LABEL ")")
-#define MSG_UBL_BUILD_MESH_M2 _UxGT("Crear Mallado (" PREHEAT_2_LABEL ")")
-#define MSG_UBL_BUILD_COLD_MESH _UxGT("Crear Mallado Frío")
-#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("Ajustar alt. Mallado")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("Cantidad de altura")
-#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Validar Mallado")
-#define MSG_UBL_VALIDATE_MESH_M1 _UxGT("Validar Mallado (" PREHEAT_1_LABEL ")")
-#define MSG_UBL_VALIDATE_MESH_M2 _UxGT("Validar Mallado (" PREHEAT_2_LABEL ")")
-#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Vali. Mallado perso.")
-#define MSG_G26_HEATING_BED _UxGT("G26 Calentando Cama")
-#define MSG_G26_HEATING_NOZZLE _UxGT("G26 Calent. Boquilla")
-#define MSG_G26_MANUAL_PRIME _UxGT("Imprimado manual...")
-#define MSG_G26_FIXED_LENGTH _UxGT("Impri. longit. fija")
-#define MSG_G26_PRIME_DONE _UxGT("Imprimación Lista")
-#define MSG_G26_CANCELED _UxGT("G26 Cancelado")
-#define MSG_G26_LEAVING _UxGT("Dejando G26")
-#define MSG_UBL_CONTINUE_MESH _UxGT("Contin. Mallado cama")
-#define MSG_UBL_MESH_LEVELING _UxGT("Nivelando Mallado")
-#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("Nivelando 3Puntos")
-#define MSG_UBL_GRID_MESH_LEVELING _UxGT("Nivel. Mallado cuad.")
-#define MSG_UBL_MESH_LEVEL _UxGT("Nivel de Mallado")
-#define MSG_UBL_SIDE_POINTS _UxGT("Puntos Laterales")
-#define MSG_UBL_MAP_TYPE _UxGT("Tipo de mapa ")
-#define MSG_UBL_OUTPUT_MAP _UxGT("Salida Mapa mallado")
-#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("Salida para el host")
-#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("Salida para CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("Off Printer Backup")
-#define MSG_UBL_INFO_UBL _UxGT("Salida Info. UBL")
-#define MSG_UBL_FILLIN_AMOUNT _UxGT("Cantidad de relleno")
-#define MSG_UBL_MANUAL_FILLIN _UxGT("Relleno manual")
-#define MSG_UBL_SMART_FILLIN _UxGT("Relleno inteligente")
-#define MSG_UBL_FILLIN_MESH _UxGT("Mallado de relleno")
-#define MSG_UBL_INVALIDATE_ALL _UxGT("Invalidar todo")
-#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("Invalidar proximos")
-#define MSG_UBL_FINE_TUNE_ALL _UxGT("Ajustar Fino Todo")
-#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("Ajustar Fino proxi.")
-#define MSG_UBL_STORAGE_MESH_MENU _UxGT("Almacen de Mallado")
-#define MSG_UBL_STORAGE_SLOT _UxGT("Huecos de memoria")
-#define MSG_UBL_LOAD_MESH _UxGT("Cargar Mallado cama")
-#define MSG_UBL_SAVE_MESH _UxGT("Guardar Mallado cama")
-#define MSG_MESH_LOADED _UxGT("Mallado %i Cargado")
-#define MSG_MESH_SAVED _UxGT("Mallado %i Guardado")
-#define MSG_UBL_NO_STORAGE _UxGT("Sin guardar")
-#define MSG_UBL_SAVE_ERROR _UxGT("Error: Guardar UBL")
-#define MSG_UBL_RESTORE_ERROR _UxGT("Error: Restaurar UBL")
-#define MSG_UBL_Z_OFFSET _UxGT("Desfase de Z: ")
-#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Desfase de Z Parado")
-#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("UBL Paso a Paso")
+namespace Language_es {
+ using namespace Language_en; // Inherit undefined strings from English
-#define MSG_LED_CONTROL _UxGT("Control LED")
-#define MSG_LEDS _UxGT("Luzes")
-#define MSG_LED_PRESETS _UxGT("Luz predefinida")
-#define MSG_SET_LEDS_RED _UxGT("Rojo")
-#define MSG_SET_LEDS_ORANGE _UxGT("Naranja")
-#define MSG_SET_LEDS_YELLOW _UxGT("Amarillo")
-#define MSG_SET_LEDS_GREEN _UxGT("Verde")
-#define MSG_SET_LEDS_BLUE _UxGT("Azul")
-#define MSG_SET_LEDS_INDIGO _UxGT("Índigo")
-#define MSG_SET_LEDS_VIOLET _UxGT("Violeta")
-#define MSG_SET_LEDS_WHITE _UxGT("Blanco")
-#define MSG_SET_LEDS_DEFAULT _UxGT("Por defecto")
-#define MSG_CUSTOM_LEDS _UxGT("Luces personalizadas")
-#define MSG_INTENSITY_R _UxGT("Intensidad Rojo")
-#define MSG_INTENSITY_G _UxGT("Intensidad Verde")
-#define MSG_INTENSITY_B _UxGT("Intensidad Azul")
-#define MSG_INTENSITY_W _UxGT("Intensidad Blanco")
-#define MSG_LED_BRIGHTNESS _UxGT("Brillo")
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Spanish");
-#define MSG_MOVING _UxGT("Moviendo...")
-#define MSG_FREE_XY _UxGT("Libre XY")
-#define MSG_MOVE_X _UxGT("Mover X")
-#define MSG_MOVE_Y _UxGT("Mover Y")
-#define MSG_MOVE_Z _UxGT("Mover Z")
-#define MSG_MOVE_E _UxGT("Extrusor")
-#define MSG_HOTEND_TOO_COLD _UxGT("Hotend muy frio")
-#define MSG_MOVE_Z_DIST _UxGT("Mover %smm")
-#define MSG_MOVE_01MM _UxGT("Mover 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Mover 1mm")
-#define MSG_MOVE_10MM _UxGT("Mover 10mm")
-#define MSG_SPEED _UxGT("Velocidad")
-#define MSG_BED_Z _UxGT("Cama Z")
-#define MSG_NOZZLE _UxGT("Boquilla")
-#define MSG_BED _UxGT("Cama")
-#define MSG_CHAMBER _UxGT("Recinto")
-#define MSG_FAN_SPEED _UxGT("Ventilador")
-#define MSG_EXTRA_FAN_SPEED _UxGT("Vel. Ext. ventilador")
-#define MSG_FLOW _UxGT("Flujo")
-#define MSG_CONTROL _UxGT("Control")
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP _UxGT("Temperatura Auto.")
-#define MSG_LCD_ON _UxGT("Encender")
-#define MSG_LCD_OFF _UxGT("Apagar")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Seleccionar")
-#define MSG_ACC _UxGT("Aceleración")
-#define MSG_JERK _UxGT("Jerk")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va-Jerk")
- #define MSG_VB_JERK _UxGT("Vb-Jerk")
- #define MSG_VC_JERK _UxGT("Vc-Jerk")
-#else
- #define MSG_VA_JERK _UxGT("Vx-Jerk")
- #define MSG_VB_JERK _UxGT("Vy-Jerk")
- #define MSG_VC_JERK _UxGT("Vz-Jerk")
-#endif
-#define MSG_VE_JERK _UxGT("Ve-Jerk")
-#define MSG_JUNCTION_DEVIATION _UxGT("Junction Dev")
-#define MSG_VELOCITY _UxGT("Velocidad")
-#define MSG_VMAX _UxGT("Vmax")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("Vel. viaje min")
-#define MSG_ACCELERATION MSG_ACC
-#define MSG_AMAX _UxGT("Acel. max")
-#define MSG_A_RETRACT _UxGT("Acel. retrac.")
-#define MSG_A_TRAVEL _UxGT("Acel. Viaje")
-#define MSG_STEPS_PER_MM _UxGT("Pasos/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("A pasos/mm")
- #define MSG_BSTEPS _UxGT("B pasos/mm")
- #define MSG_CSTEPS _UxGT("C pasos/mm")
-#else
- #define MSG_ASTEPS _UxGT("X pasos/mm")
- #define MSG_BSTEPS _UxGT("Y pasos/mm")
- #define MSG_CSTEPS _UxGT("Z pasos/mm")
-#endif
-#define MSG_ESTEPS _UxGT("E pasos/mm")
-#define MSG_E1STEPS _UxGT("E1 pasos/mm")
-#define MSG_E2STEPS _UxGT("E2 pasos/mm")
-#define MSG_E3STEPS _UxGT("E3 pasos/mm")
-#define MSG_E4STEPS _UxGT("E4 pasos/mm")
-#define MSG_E5STEPS _UxGT("E5 pasos/mm")
-#define MSG_E6STEPS _UxGT("E6 pasos/mm")
-#define MSG_TEMPERATURE _UxGT("Temperatura")
-#define MSG_MOTION _UxGT("Movimiento")
-#define MSG_FILAMENT _UxGT("Filamento")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E en mm") MSG_CUBED
-#define MSG_FILAMENT_DIAM _UxGT("Fil. Dia.")
-#define MSG_FILAMENT_UNLOAD _UxGT("Descarga mm")
-#define MSG_FILAMENT_LOAD _UxGT("Carga mm")
-#define MSG_ADVANCE_K _UxGT("Avance K")
-#define MSG_CONTRAST _UxGT("Contraste LCD")
-#define MSG_STORE_EEPROM _UxGT("Guardar EEPROM")
-#define MSG_LOAD_EEPROM _UxGT("Cargar EEPROM")
-#define MSG_RESTORE_FAILSAFE _UxGT("Rest. fábrica")
-#define MSG_INIT_EEPROM _UxGT("Inicializar EEPROM")
-#define MSG_MEDIA_UPDATE _UxGT("Actualizar SD/USB")
-#define MSG_RESET_PRINTER _UxGT("Resetear Impresora")
-#define MSG_REFRESH _UxGT("Recargar")
-#define MSG_WATCH _UxGT("Pantalla de Inf.")
-#define MSG_PREPARE _UxGT("Preparar")
-#define MSG_TUNE _UxGT("Ajustar")
-#define MSG_START_PRINT _UxGT("Iniciar impresión")
-#define MSG_BUTTON_NEXT _UxGT("Siguinte")
-#define MSG_BUTTON_INIT _UxGT("Iniciar")
-#define MSG_BUTTON_STOP _UxGT("Parar")
-#define MSG_BUTTON_PRINT _UxGT("Imprimir")
-#define MSG_BUTTON_RESET _UxGT("Reiniciar")
-#define MSG_BUTTON_CANCEL _UxGT("Cancelar")
-#define MSG_BUTTON_DONE _UxGT("Listo")
-#define MSG_PAUSE_PRINT _UxGT("Pausar impresión")
-#define MSG_RESUME_PRINT _UxGT("Reanudar impresión")
-#define MSG_STOP_PRINT _UxGT("Detener impresión")
-#define MSG_OUTAGE_RECOVERY _UxGT("Recuper. por interr.")
-#define MSG_MEDIA_MENU _UxGT("Imprim. desde SD/USB")
-#define MSG_NO_MEDIA _UxGT("SD/USB no presente")
-#define MSG_DWELL _UxGT("Reposo...")
-#define MSG_USERWAIT _UxGT("Pulsar para Reanudar")
-#define MSG_PRINT_PAUSED _UxGT("Impresión Pausada")
-#define MSG_PRINTING _UxGT("Imprimiendo...")
-#define MSG_PRINT_ABORTED _UxGT("Impresión cancelada")
-#define MSG_NO_MOVE _UxGT("Sin movimiento")
-#define MSG_KILLED _UxGT("MUERTA")
-#define MSG_STOPPED _UxGT("DETENIDA")
-#define MSG_CONTROL_RETRACT _UxGT("Retraer mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Interc. Retraer mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Retraer V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Levantar mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("DesRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Interc. DesRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("DesRet V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("S UnRet V")
-#define MSG_AUTORETRACT _UxGT("Retracción Auto.")
-#define MSG_FILAMENT_SWAP_LENGTH _UxGT("Inter. longitud")
-#define MSG_FILAMENT_PURGE_LENGTH _UxGT("Purgar longitud")
-#define MSG_TOOL_CHANGE _UxGT("Cambiar Herramienta")
-#define MSG_TOOL_CHANGE_ZLIFT _UxGT("Aumentar Z")
-#define MSG_SINGLENOZZLE_PRIME_SPD _UxGT("Prime Speed")
-#define MSG_SINGLENOZZLE_RETRACT_SPD _UxGT("Vel. de retracción")
-#define MSG_NOZZLE_STANDBY _UxGT("Colocar boquilla")
-#define MSG_FILAMENTCHANGE _UxGT("Cambiar filamento")
-#define MSG_FILAMENTLOAD _UxGT("Cargar filamento")
-#define MSG_FILAMENTUNLOAD _UxGT("Descargar filamento")
-#define MSG_FILAMENTUNLOAD_ALL _UxGT("Descargar todo")
-#define MSG_INIT_MEDIA _UxGT("Iniciar SD/USB")
-#define MSG_CHANGE_MEDIA _UxGT("Cambiar SD/USB")
-#define MSG_RELEASE_MEDIA _UxGT("Lanzar SD/USB")
-#define MSG_ZPROBE_OUT _UxGT("Sonda Z fuera cama")
-#define MSG_SKEW_FACTOR _UxGT("Factor de desviación")
-#define MSG_BLTOUCH _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST _UxGT("Cmd: Auto-Prueba")
-#define MSG_BLTOUCH_RESET _UxGT("Cmd: Reiniciar")
-#define MSG_BLTOUCH_STOW _UxGT("Cmd: Bajar pistón")
-#define MSG_BLTOUCH_DEPLOY _UxGT("Cmd: Subir pistón")
-#define MSG_BLTOUCH_SW_MODE _UxGT("Cmd: Modo Software")
-#define MSG_BLTOUCH_5V_MODE _UxGT("Cmd: Modo 5V")
-#define MSG_BLTOUCH_OD_MODE _UxGT("Cmd: Modo OD")
-#define MSG_BLTOUCH_MODE_STORE _UxGT("Cmd: Modo almacenar")
-#define MSG_BLTOUCH_MODE_STORE_5V _UxGT("Poner BLTouch a 5V")
-#define MSG_BLTOUCH_MODE_STORE_OD _UxGT("Poner BLTouch a OD")
-#define MSG_BLTOUCH_MODE_ECHO _UxGT("Informe de drenaje")
-#define MSG_BLTOUCH_MODE_CHANGE _UxGT("PELIGRO: ¡Una mala configuración puede producir daños! ¿Proceder igualmente?")
-#define MSG_TOUCHMI_PROBE _UxGT("TouchMI")
-#define MSG_TOUCHMI_INIT _UxGT("Iniciar TouchMI")
-#define MSG_TOUCHMI_ZTEST _UxGT("Test de desfase Z")
-#define MSG_TOUCHMI_SAVE _UxGT("Guardar")
-#define MSG_MANUAL_DEPLOY_TOUCHMI _UxGT("Subir TouchMI")
-#define MSG_MANUAL_DEPLOY _UxGT("Subir Sonda Z")
-#define MSG_MANUAL_STOW _UxGT("Bajar Sonda Z")
-#define MSG_HOME_FIRST _UxGT("Origen %s%s%s Primero")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Desfase Z")
-#define MSG_BABYSTEP_X _UxGT("Micropaso X")
-#define MSG_BABYSTEP_Y _UxGT("Micropaso Y")
-#define MSG_BABYSTEP_Z _UxGT("Micropaso Z")
-#define MSG_BABYSTEP_TOTAL _UxGT("Total")
-#define MSG_ENDSTOP_ABORT _UxGT("Cancelado - Endstop")
-#define MSG_HEATING_FAILED_LCD _UxGT("Calent. fallido")
-#define MSG_HEATING_FAILED_LCD_BED _UxGT("Calent. cama fallido")
-#define MSG_HEATING_FAILED_LCD_CHAMBER _UxGT("Calent. Cám. fallido")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Err: TEMP. REDUN.")
-#define MSG_THERMAL_RUNAWAY _UxGT("ESCAPE TERMICO")
-#define MSG_THERMAL_RUNAWAY_BED _UxGT("ESC. TERMICO CAMA")
-#define MSG_THERMAL_RUNAWAY_CHAMBER _UxGT("ESC. TERMICO CAMARA")
-#define MSG_ERR_MAXTEMP _UxGT("Err:TEMP. MÁX")
-#define MSG_ERR_MINTEMP _UxGT("Err:TEMP. MIN")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Err:TEMP. MÁX CAMA")
-#define MSG_ERR_MINTEMP_BED _UxGT("Err:TEMP. MIN CAMA")
-#define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Err:TEMP. MÁX CÁMARA")
-#define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err:TEMP. MIN CÁMARA")
-#define MSG_ERR_Z_HOMING _UxGT("Origen XY Primero")
-#define MSG_HALTED _UxGT("IMPRESORA DETENIDA")
-#define MSG_PLEASE_RESET _UxGT("Por favor, reinicie")
-#define MSG_SHORT_DAY _UxGT("d") // One character only
-#define MSG_SHORT_HOUR _UxGT("h") // One character only
-#define MSG_SHORT_MINUTE _UxGT("m") // One character only
-#define MSG_HEATING _UxGT("Calentando...")
-#define MSG_COOLING _UxGT("Enfriando...")
-#define MSG_BED_HEATING _UxGT("Calentando Cama...")
-#define MSG_BED_COOLING _UxGT("Enfriando Cama...")
-#define MSG_CHAMBER_HEATING _UxGT("Calentando Cámara...")
-#define MSG_CHAMBER_COOLING _UxGT("Enfriando Cámara...")
-#define MSG_DELTA_CALIBRATE _UxGT("Calibración Delta")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Calibrar X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Calibrar Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Calibrar Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Calibrar Centro")
-#define MSG_DELTA_SETTINGS _UxGT("Configuración Delta")
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Auto Calibración")
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Est. Altura Delta")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE _UxGT("Ajustar Sonda Z")
-#define MSG_DELTA_DIAG_ROD _UxGT("Barra Diagonal")
-#define MSG_DELTA_HEIGHT _UxGT("Altura")
-#define MSG_DELTA_RADIUS _UxGT("Radio")
-#define MSG_INFO_MENU _UxGT("Acerca de Impresora")
-#define MSG_INFO_PRINTER_MENU _UxGT("Info. Impresora")
-#define MSG_3POINT_LEVELING _UxGT("Nivelando 3puntos")
-#define MSG_LINEAR_LEVELING _UxGT("Nivelando Lineal")
-#define MSG_BILINEAR_LEVELING _UxGT("Nivelando Bilineal")
-#define MSG_UBL_LEVELING _UxGT("Nivelando UBL")
-#define MSG_MESH_LEVELING _UxGT("Nivelando en Mallado")
-#define MSG_INFO_STATS_MENU _UxGT("Estadísticas Imp.")
-#define MSG_INFO_BOARD_MENU _UxGT("Info. Controlador")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Termistores")
-#define MSG_INFO_EXTRUDERS _UxGT("Extrusores")
-#define MSG_INFO_BAUDRATE _UxGT("Baudios")
-#define MSG_INFO_PROTOCOL _UxGT("Protocolo")
-#define MSG_CASE_LIGHT _UxGT("Luz cabina")
-#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Brillo cabina")
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" lista");
+ PROGMEM Language_Str MSG_YES = _UxGT("SI");
+ PROGMEM Language_Str MSG_NO = _UxGT("NO");
+ PROGMEM Language_Str MSG_BACK = _UxGT("Atrás");
+ PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Cancelando...");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("SD/USB insertado");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("SD/USB retirado");
+ PROGMEM Language_Str MSG_MEDIA_RELEASED = _UxGT("SD/USB lanzado");
+ PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Esperando al SD/USB");
+ PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Error lectura SD/USB");
+ PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("Disp. USB retirado");
+ PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Inicio USB fallido");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
+ PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstops");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Menú principal");
+ PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Ajustes avanzados");
+ PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuración");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Inicio automático");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Apagar motores");
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menú depuración");
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Prob. barra progreso");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Llevar al origen");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Origen X");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Origen Y");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Origen Z");
+ PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto alineado Z");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Origen XYZ");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Pulsar para comenzar");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Siguiente punto");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("¡Nivelación lista!");
+ PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Compensación Altura");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Ajustar desfases");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Desfase aplicada");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Establecer origen");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Precalentar ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Precalentar ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Fin");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Fin ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Fin ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Fin ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Fin ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Fin ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Fin ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Todo");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Cama");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Ajuste");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Precalentar ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Precalentar ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Fin");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Fin ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Fin ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Fin ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Fin ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Fin ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Fin ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Todo");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Cama");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Precalentar ") PREHEAT_2_LABEL _UxGT(" Ajuste");
+ PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Precalen. Personali.");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Enfriar");
+ PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Control Láser");
+ PROGMEM Language_Str MSG_LASER_OFF = _UxGT("Láser Apagado");
+ PROGMEM Language_Str MSG_LASER_ON = _UxGT("Láser Encendido");
+ PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Potencia Láser");
+ PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Control Mandrino");
+ PROGMEM Language_Str MSG_SPINDLE_OFF = _UxGT("Mandrino Apagado");
+ PROGMEM Language_Str MSG_SPINDLE_ON = _UxGT("Mandrino Encendido");
+ PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Potencia Mandrino");
+ PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Invertir giro");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Encender Fuente");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Apagar Fuente");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extruir");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Retraer");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Mover ejes");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Nivelando Cama");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Nivelar Cama");
+ PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Nivelar Esquinas");
+ PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Siguente Esquina");
+ PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Editor Mallado");
+ PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Editar Mallado");
+ PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Ed. Mallado parada");
+ PROGMEM Language_Str MSG_PROBING_MESH = _UxGT("Sondear Punto");
+ PROGMEM Language_Str MSG_MESH_X = _UxGT("Índice X");
+ PROGMEM Language_Str MSG_MESH_Y = _UxGT("Índice Y");
+ PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Valor Z");
+ PROGMEM Language_Str MSG_USER_MENU = _UxGT("Comandos Personaliz.");
+ PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Probar Sonda");
+ PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Punto");
+ PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Desviación");
+ PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Modo IDEX");
+ PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Desfase Boquillas");
+ PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Aparcado");
+ PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicar");
+ PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copia Reflejada");
+ PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Control Total");
+ PROGMEM Language_Str MSG_X_OFFSET = _UxGT("2ª Boquilla X");
+ PROGMEM Language_Str MSG_Y_OFFSET = _UxGT("2ª Boquilla Y");
+ PROGMEM Language_Str MSG_Z_OFFSET = _UxGT("2ª Boquilla Z");
+ PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Hacer G29");
+ PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Herramientas UBL");
+ PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Nivel.Cama.Uni.(UBL)");
+ PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Punto de inclinación");
+ PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Crear Mallado man.");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Colocar cuña y Medir");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Medir");
+ PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Retirar y Medir Cama");
+ PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Mover al Siguente");
+ PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Activar UBL");
+ PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Desactivar UBL");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Temp. Cama");
+ PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT ("Hotend Temp");
+ PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
+ PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Editar Mallado");
+ PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edit. Mallado perso.");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Ajuste fino Mallado");
+ PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Term. edici. Mallado");
+ PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Crear Mallado Perso.");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Crear Mallado");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = _UxGT("Crear Mallado (") PREHEAT_1_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("Crear Mallado (") PREHEAT_2_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Crear Mallado Frío");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Ajustar alt. Mallado");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Cantidad de altura");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validar Mallado");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("Validar Mallado (") PREHEAT_1_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Validar Mallado (") PREHEAT_2_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Vali. Mallado perso.");
+ PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 Calentando Cama");
+ PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Calent. Boquilla");
+ PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Imprimado manual...");
+ PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Impri. longit. fija");
+ PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Imprimación Lista");
+ PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 Cancelado");
+ PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Dejando G26");
+ PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Contin. Mallado cama");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Nivelando Mallado");
+ PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Nivelando 3Puntos");
+ PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Nivel. Mallado cuad.");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Nivel de Mallado");
+ PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Puntos Laterales");
+ PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Tipo de mapa ");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Salida Mapa mallado");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Salida para el host");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Salida para CSV");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Off Printer Backup");
+ PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Salida Info. UBL");
+ PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Cantidad de relleno");
+ PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Relleno manual");
+ PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Relleno inteligente");
+ PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Mallado de relleno");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidar todo");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidar proximos");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Ajustar Fino Todo");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Ajustar Fino proxi.");
+ PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Almacen de Mallado");
+ PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Huecos de memoria");
+ PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Cargar Mallado cama");
+ PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Guardar Mallado cama");
+ PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("M117 Mallado %i Cargado");
+ PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("M117 Mallado %i Guardado");
+ PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Sin guardar");
+ PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Error: Guardar UBL");
+ PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Error: Restaurar UBL");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Desfase de Z: ");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Desfase de Z Parado");
+ PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Paso a Paso");
+ PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Crear Mallado Frío");
+ PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Relleno inteligente");
+ PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Validar Mallado");
+ PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Ajustar Fino Todo");
+ PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Validar Mallado");
+ PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Ajustar Fino Todo");
+ PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Guardar Mallado cama");
-#define MSG_EXPECTED_PRINTER _UxGT("Impresora incorrecta")
+ PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Control LED");
+ PROGMEM Language_Str MSG_LEDS = _UxGT("Luzes");
+ PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Luz predefinida");
+ PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Rojo");
+ PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Naranja");
+ PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Amarillo");
+ PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Verde");
+ PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Azul");
+ PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Índigo");
+ PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Violeta");
+ PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Blanco");
+ PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Por defecto");
+ PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Luces personalizadas");
+ PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Intensidad Rojo");
+ PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Intensidad Verde");
+ PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Intensidad Azul");
+ PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Intensidad Blanco");
+ PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Brillo");
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Cont. de impresión")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Completadas")
- #define MSG_INFO_PRINT_TIME _UxGT("Tiempo total de imp.")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Impresión más larga")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Total Extruido")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Impresiones")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Completadas")
- #define MSG_INFO_PRINT_TIME _UxGT("Total")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Más larga")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Extruido")
-#endif
-#define MSG_INFO_MIN_TEMP _UxGT("Temp. Mínima")
-#define MSG_INFO_MAX_TEMP _UxGT("Temp. Máxima")
-#define MSG_INFO_PSU _UxGT("Fuente alimentación")
-#define MSG_DRIVE_STRENGTH _UxGT("Fuerza de empuje")
-#define MSG_DAC_PERCENT _UxGT("Driver %")
-#define MSG_ERROR_TMC _UxGT("ERROR CONEX. TMC")
-#define MSG_DAC_EEPROM_WRITE _UxGT("Escribe DAC EEPROM")
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("IMPRESIÓN PAUSADA")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("CARGAR FILAMENTO")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("DESCARGAR FILAMENTO")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("OPC. REINICIO:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Purgar más")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Continuar imp.")
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Boquilla: ")
-#define MSG_RUNOUT_SENSOR _UxGT("Sensor de sección")
-#define MSG_RUNOUT_DISTANCE_MM _UxGT("Dist de secc. mm")
-#define MSG_ERR_HOMING_FAILED _UxGT("Ir a origen Fallado")
-#define MSG_ERR_PROBING_FAILED _UxGT("Sondeo Fallado")
-#define MSG_M600_TOO_COLD _UxGT("M600: Muy Frio")
+ PROGMEM Language_Str MSG_MOVING = _UxGT("Moviendo...");
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("Libre XY");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Mover X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Mover Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Mover Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extrusor");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Extrusor ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Extrusor ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Extrusor ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Extrusor ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Extrusor ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Extrusor ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Hotend muy frio");
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Mover %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mover 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mover 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Velocidad");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Cama Z");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Boquilla");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Boquilla ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Boquilla ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Boquilla ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Boquilla ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Boquilla ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Boquilla ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Cama");
+ PROGMEM Language_Str MSG_CHAMBER = _UxGT("Recinto");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Ventilador");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Ventilador 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Ventilador 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Ventilador 3");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Vel. Ext. ventilador");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1 = _UxGT("Vel. Ext. ventilador ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2 = _UxGT("Vel. Ext. ventilador ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3 = _UxGT("Vel. Ext. ventilador ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Flujo");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Flujo ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Flujo ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Flujo ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Flujo ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Flujo ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Flujo ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Control");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Temperatura Auto.");
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("Encender");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Apagar");
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Seleccionar");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Seleccionar ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Seleccionar ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Seleccionar ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Seleccionar ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Seleccionar ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Seleccionar ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Aceleración");
+ PROGMEM Language_Str MSG_VELOCITY = _UxGT("Velocidad");
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vel. viaje min");
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Accel");
+ PROGMEM Language_Str MSG_AMAX_A = _UxGT("Acel. max") LCD_STR_A;
+ PROGMEM Language_Str MSG_AMAX_B = _UxGT("Acel. max") LCD_STR_B;
+ PROGMEM Language_Str MSG_AMAX_C = _UxGT("Acel. max") LCD_STR_C;
+ PROGMEM Language_Str MSG_AMAX_E = _UxGT("Acel. max") LCD_STR_E;
+ PROGMEM Language_Str MSG_AMAX_E0 = _UxGT("Acel. max ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AMAX_E1 = _UxGT("Acel. max ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AMAX_E2 = _UxGT("Acel. max ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AMAX_E3 = _UxGT("Acel. max ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AMAX_E4 = _UxGT("Acel. max ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AMAX_E5 = _UxGT("Acel. max ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Acel. retrac.");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Acel. Viaje");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Pasos/mm");
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("E pasos/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Movimiento");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filamento");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm³");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Fil. Dia. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Fil. Dia. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Fil. Dia. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Fil. Dia. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Fil. Dia. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Fil. Dia. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Descarga mm");
+ PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Carga mm");
+ PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Avance K");
+ PROGMEM Language_Str MSG_ADVANCE_K_E0 = _UxGT("Avance K ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_ADVANCE_K_E1 = _UxGT("Avance K ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_ADVANCE_K_E2 = _UxGT("Avance K ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_ADVANCE_K_E3 = _UxGT("Avance K ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_ADVANCE_K_E4 = _UxGT("Avance K ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_ADVANCE_K_E5 = _UxGT("Avance K ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contraste LCD");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Guardar EEPROM");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Cargar EEPROM");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Rest. fábrica");
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Inicializar EEPROM");
+ PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/USB");
+ PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Resetear Impresora");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Recargar");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Pantalla de Inf.");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Preparar");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Ajustar");
+ PROGMEM Language_Str MSG_START_PRINT = _UxGT("Iniciar impresión");
+ PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Siguinte");
+ PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Iniciar");
+ PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Parar");
+ PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Imprimir");
+ PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Reiniciar");
+ PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Cancelar");
+ PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Listo");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausar impresión");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Reanudar impresión");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Detener impresión");
+ PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Recuper. por interr.");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Imprim. desde SD/USB");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("SD/USB no presente");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Reposo...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Pulsar para Reanudar");
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Impresión Pausada");
+ PROGMEM Language_Str MSG_PRINTING = _UxGT("Imprimiendo...");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Impresión cancelada");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Sin movimiento");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("MUERTA");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("DETENIDA");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retraer mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Interc. Retraer mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retraer V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Levantar mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("DesRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Interc. DesRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("DesRet V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Retracción Auto.");
+ PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Inter. longitud");
+ PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Purgar longitud");
+ PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Cambiar Herramienta");
+ PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Aumentar Z");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD = _UxGT("Prime Speed");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD = _UxGT("Vel. de retracción");
+ PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Colocar boquilla");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Cambiar filamento");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Cambiar filamento ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Cambiar filamento ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Cambiar filamento ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Cambiar filamento ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Cambiar filamento ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Cambiar filamento ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E0 = _UxGT("Cargar filamento ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E1 = _UxGT("Cargar filamento ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E2 = _UxGT("Cargar filamento ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E3 = _UxGT("Cargar filamento ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E4 = _UxGT("Cargar filamento ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E5 = _UxGT("Cargar filamento ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0 = _UxGT("Descargar filamento ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1 = _UxGT("Descargar filamento ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2 = _UxGT("Descargar filamento ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3 = _UxGT("Descargar filamento ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4 = _UxGT("Descargar filamento ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5 = _UxGT("Descargar filamento ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Descargar todo");
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Iniciar SD/USB");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Cambiar SD/USB");
+ PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Lanzar SD/USB");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z fuera cama");
+ PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Factor de desviación");
+ PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Cmd: Auto-Prueba");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Cmd: Reiniciar");
+ PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Cmd: Bajar pistón");
+ PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Cmd: Subir pistón");
+ PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("Cmd: Modo Software");
+ PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("Cmd: Modo 5V");
+ PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("Cmd: Modo OD");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Cmd: Modo almacenar");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Poner BLTouch a 5V");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Poner BLTouch a OD");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Informe de drenaje");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("PELIGRO: ¡Una mala configuración puede producir daños! ¿Proceder igualmente?");
+ PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Iniciar TouchMI");
+ PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Test de desfase Z");
+ PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Guardar");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Subir TouchMI");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Subir Sonda Z");
+ PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Bajar Sonda Z");
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Origen %s%s%s Primero");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Desfase Z");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Micropaso X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Micropaso Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Micropaso Z");
+ PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Total");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Cancelado - Endstop");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Calent. fallido");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED = _UxGT("Calent. cama fallido");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_CHAMBER = _UxGT("Calent. Cám. fallido");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: TEMP. REDUN.");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("FUGA TÉRMICA");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("FUGA TÉRMICA CAMA");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("FUGA TÉRMICA CAMARA");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err:TEMP. MÁX");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err:TEMP. MIN");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("Err:TEMP. MÁX CAMA");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Err:TEMP. MIN CAMA");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER = _UxGT("Err:TEMP. MÁX CÁMARA");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER = _UxGT("Err:TEMP. MIN CÁMARA");
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Origen XY Primero");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("IMPRESORA DETENIDA");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Por favor, reinicie");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Calentando...");
+ PROGMEM Language_Str MSG_COOLING = _UxGT("Enfriando...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Calentando Cama...");
+ PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Enfriando Cama...");
+ PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Calentando Cámara...");
+ PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Enfriando Cámara...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibración Delta");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
+ PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Configuración Delta");
+ PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibración");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Est. Altura Delta");
+ PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Ajustar Sonda Z");
+ PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Barra Diagonal");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Altura");
+ PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Radio");
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Acerca de Impresora");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Info. Impresora");
+ PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("Nivelando 3puntos");
+ PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Nivelando Lineal");
+ PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Nivelando Bilineal");
+ PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Nivelando UBL");
+ PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Nivelando en Mallado");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Estadísticas Imp.");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Info. Controlador");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistores");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrusores");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baudios");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocolo");
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Luz cabina");
+ PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Brillo cabina");
-#define MSG_MMU2_FILAMENT_CHANGE_HEADER _UxGT("CAMBIAR FILAMENTO")
-#define MSG_MMU2_CHOOSE_FILAMENT_HEADER _UxGT("ELIJE FILAMENTO")
-#define MSG_MMU2_MENU _UxGT("MMU")
-#define MSG_MMU2_WRONG_FIRMWARE _UxGT("¡Actu. MMU Firmware!")
-#define MSG_MMU2_NOT_RESPONDING _UxGT("MMU Necesita Cuidado")
-#define MSG_MMU2_RESUME _UxGT("Continuar imp.")
-#define MSG_MMU2_RESUMING _UxGT("Resumiendo...")
-#define MSG_MMU2_LOAD_FILAMENT _UxGT("Cargar Filamento")
-#define MSG_MMU2_LOAD_ALL _UxGT("Cargar Todo")
-#define MSG_MMU2_LOAD_TO_NOZZLE _UxGT("Cargar hasta boqui.")
-#define MSG_MMU2_EJECT_FILAMENT _UxGT("Expulsar Filamento")
-#define MSG_MMU2_EJECT_FILAMENT0 _UxGT("Expulsar Filamento 1")
-#define MSG_MMU2_EJECT_FILAMENT1 _UxGT("Expulsar Filamento 2")
-#define MSG_MMU2_EJECT_FILAMENT2 _UxGT("Expulsar Filamento 3")
-#define MSG_MMU2_EJECT_FILAMENT3 _UxGT("Expulsar Filamento 4")
-#define MSG_MMU2_EJECT_FILAMENT4 _UxGT("Expulsar Filamento 5")
-#define MSG_MMU2_UNLOAD_FILAMENT _UxGT("Descargar Filamento")
-#define MSG_MMU2_LOADING_FILAMENT _UxGT("Cargando Fil. %i...")
-#define MSG_MMU2_EJECTING_FILAMENT _UxGT("Expulsando Fil. ...")
-#define MSG_MMU2_UNLOADING_FILAMENT _UxGT("Descargando Fil....")
-#define MSG_MMU2_ALL _UxGT("Todo")
-#define MSG_MMU2_FILAMENT0 _UxGT("Filamento 1")
-#define MSG_MMU2_FILAMENT1 _UxGT("Filamento 2")
-#define MSG_MMU2_FILAMENT2 _UxGT("Filamento 3")
-#define MSG_MMU2_FILAMENT3 _UxGT("Filamento 4")
-#define MSG_MMU2_FILAMENT4 _UxGT("Filamento 5")
-#define MSG_MMU2_RESET _UxGT("Reiniciar MMU")
-#define MSG_MMU2_RESETTING _UxGT("Reiniciando MMU...")
-#define MSG_MMU2_EJECT_RECOVER _UxGT("Retirar, y pulsar")
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Impresora incorrecta");
-#define MSG_MIX _UxGT("Mezcla")
-#define MSG_MIX_COMPONENT _UxGT("Componente")
-#define MSG_MIXER _UxGT("Miezclador")
-#define MSG_GRADIENT _UxGT("Degradado")
-#define MSG_FULL_GRADIENT _UxGT("Degradado Total")
-#define MSG_TOGGLE_MIX _UxGT("Mezcla Conmutada")
-#define MSG_CYCLE_MIX _UxGT("Mezcla Cíclica")
-#define MSG_GRADIENT_MIX _UxGT("Mezcla de Degradado")
-#define MSG_REVERSE_GRADIENT _UxGT("Degradado inverso")
-#define MSG_ACTIVE_VTOOL _UxGT("Activar Herr.V")
-#define MSG_START_VTOOL _UxGT("Inicio Herr.V")
-#define MSG_END_VTOOL _UxGT(" Fin Herr.V")
-#define MSG_GRADIENT_ALIAS _UxGT("Alias Herr.V")
-#define MSG_RESET_VTOOLS _UxGT("Reiniciar Herr.V")
-#define MSG_COMMIT_VTOOL _UxGT("Cometer mezc. Herr.V")
-#define MSG_VTOOLS_RESET _UxGT("Herr.V reiniciados")
-#define MSG_START_Z _UxGT("Inicio Z")
-#define MSG_END_Z _UxGT(" Fin Z")
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Cont. de impresión");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tiempo total de imp.");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Impresión más larga");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total Extruido");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Impresiones");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Más larga");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extruido");
+ #endif
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Temp. Mínima");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Temp. Máxima");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Fuente alimentación");
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Fuerza de empuje");
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("Driver %");
+ PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("ERROR CONEX. TMC");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Escribe DAC EEPROM");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("CAMBIAR FILAMENTO");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPRESIÓN PAUSADA");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CARGAR FILAMENTO");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DESCARGAR FILAMENTO");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPC. REINICIO:");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purgar más");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Continuar imp.");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Boquilla: ");
+ PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Sensor de sección");
+ PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Dist de secc. mm");
+ PROGMEM Language_Str MSG_LCD_HOMING_FAILED = _UxGT("Ir a origen Fallado");
+ PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Sondeo Fallado");
+ PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: Muy Frio");
-#define MSG_GAMES _UxGT("Games")
-#define MSG_BRICKOUT _UxGT("Brickout")
-#define MSG_INVADERS _UxGT("Invaders")
-#define MSG_SNAKE _UxGT("Sn4k3")
-#define MSG_MAZE _UxGT("Maze")
+ PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ELIJE FILAMENTO");
+ PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
+ PROGMEM Language_Str MSG_MMU2_WRONG_FIRMWARE = _UxGT("¡Actu. MMU Firmware!");
+ PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Necesita Cuidado");
+ PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Continuar imp.");
+ PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Resumiendo...");
+ PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Cargar Filamento");
+ PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Cargar Todo");
+ PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Cargar hasta boqui.");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Expulsar Filamento");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT0 = _UxGT("Expulsar Filamento 1");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT1 = _UxGT("Expulsar Filamento 2");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT2 = _UxGT("Expulsar Filamento 3");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT3 = _UxGT("Expulsar Filamento 4");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT4 = _UxGT("Expulsar Filamento 5");
+ PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Descargar Filamento");
+ PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Cargando Fil. %i...");
+ PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Expulsando Fil. ...");
+ PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Descargando Fil....");
+ PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Todo");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT0 = _UxGT("Filamento 1");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT1 = _UxGT("Filamento 2");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT2 = _UxGT("Filamento 3");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT3 = _UxGT("Filamento 4");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT4 = _UxGT("Filamento 5");
+ PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Reiniciar MMU");
+ PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Reiniciando MMU...");
+ PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Retirar, y pulsar");
-#if LCD_HEIGHT >= 4
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Pulsar el botón para")
- #define MSG_ADVANCED_PAUSE_WAITING_2 _UxGT("reanudar impresión")
- #define MSG_PAUSE_PRINT_INIT_1 _UxGT("Aparcando...")
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Esperando para")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("iniciar el cambio")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("de filamento")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Inserte el filamento")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("y pulse el botón")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("para continuar...")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Pulse el botón para")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("calentar la boquilla")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Calentando boquilla")
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Espere por favor...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Espere para")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("liberar el filamento")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Espere para")
- #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("purgar el filamento")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Pulse para finalizar")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_2 _UxGT("la purga de filamen.")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Esperando impresora")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("para reanudar...")
-#else
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Pulse para continuar")
- #define MSG_PAUSE_PRINT_INIT_1 _UxGT("Aparcando...")
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Por Favor espere...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Inserte y Pulse")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Pulse para Calentar")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Calentando...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Liberando...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Cargando...")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Purgando...")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Pulse para finalizar")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Reanudando...")
-#endif
+ PROGMEM Language_Str MSG_MIX = _UxGT("Mezcla");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_1 = _UxGT("Componente 1");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_2 = _UxGT("Componente 2");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_3 = _UxGT("Componente 3");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_4 = _UxGT("Componente 4");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_5 = _UxGT("Componente 5");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_6 = _UxGT("Componente 6");
+ PROGMEM Language_Str MSG_MIXER = _UxGT("Miezclador");
+ PROGMEM Language_Str MSG_GRADIENT = _UxGT("Degradado");
+ PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Degradado Total");
+ PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Mezcla Conmutada");
+ PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Mezcla Cíclica");
+ PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Mezcla de Degradado");
+ PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Degradado inverso");
+ PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Activar Herr.V");
+ PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Inicio Herr.V");
+ PROGMEM Language_Str MSG_END_VTOOL = _UxGT(" Fin Herr.V");
+ PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias Herr.V");
+ PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Reiniciar Herr.V");
+ PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Cometer mezc. Herr.V");
+ PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("Herr.V reiniciados");
+ PROGMEM Language_Str MSG_START_Z = _UxGT("Inicio Z:");
+ PROGMEM Language_Str MSG_END_Z = _UxGT(" Fin Z:");
-#define MSG_TMC_DRIVERS _UxGT("Controladores TMC")
-#define MSG_TMC_CURRENT _UxGT("Amperaje Controlador")
-#define MSG_TMC_HYBRID_THRS _UxGT("Límite Hibrido")
-#define MSG_TMC_HOMING_THRS _UxGT("Origen sin sensores")
-#define MSG_TMC_STEPPING_MODE _UxGT("Modo de pasos")
-#define MSG_TMC_STEALTH_ENABLED _UxGT("StealthChop Habilit.")
+ PROGMEM Language_Str MSG_GAMES = _UxGT("Games");
+ PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
+ PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
+ PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
+ PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
-#define MSG_SERVICE_RESET _UxGT("Reiniciar")
-#define MSG_SERVICE_IN _UxGT(" dentro:")
+ #if LCD_HEIGHT >= 4
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Pulsar el botón para", "reanudar impresión"));
+ PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Aparcando..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Esperando para", "iniciar el cambio", "de filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Inserte el filamento", "y pulse el botón", "para continuar..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Pulse el botón para", "calentar la boquilla"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Calentando boquilla", "Espere por favor..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Espere para", "liberar el filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Espere para", "purgar el filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Pulse para finalizar", "la purga de filamen."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Esperando impresora", "para reanudar..."));
+ #else
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Pulse para continuar"));
+ PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Aparcando..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Por Favor espere..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Inserte y Pulse"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Pulse para Calentar"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Calentando..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Liberando..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Cargando..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purgando..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Pulse para finalizar"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Reanudando..."));
+ #endif
-#define MSG_BACKLASH _UxGT("Backlash")
-#define MSG_BACKLASH_CORRECTION _UxGT("Correction")
-#define MSG_BACKLASH_SMOOTHING _UxGT("Suavizado")
+ PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("Controladores TMC");
+ PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Amperaje Controlador");
+ PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Límite Hibrido");
+ PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Origen sin sensores");
+ PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Modo de pasos");
+ PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Habilit.");
+
+ PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Reiniciar");
+ PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" dentro:");
+
+ PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Correction");
+ PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Suavizado");
+}
diff --git a/Marlin/src/lcd/language/language_eu.h b/Marlin/src/lcd/language/language_eu.h
index a77ae8a7fe07..d9c8e2c220d3 100644
--- a/Marlin/src/lcd/language/language_eu.h
+++ b/Marlin/src/lcd/language/language_eu.h
@@ -32,358 +32,362 @@
#define DISPLAY_CHARSET_ISO10646_1
#define NOT_EXTENDED_ISO10646_1_5X7
-#define WELCOME_MSG MACHINE_NAME _UxGT(" prest.")
-#define MSG_BACK _UxGT("Atzera")
-#define MSG_MEDIA_INSERTED _UxGT("Txartela sartuta")
-#define MSG_MEDIA_REMOVED _UxGT("Txartela kenduta")
-#define MSG_LCD_ENDSTOPS _UxGT("Endstops") // Max length 8 characters
-#define MSG_MAIN _UxGT("Menu nagusia")
-#define MSG_AUTOSTART _UxGT("Auto hasiera")
-#define MSG_DISABLE_STEPPERS _UxGT("Itzali motoreak")
-#define MSG_DEBUG_MENU _UxGT("Arazketa Menua")
-#define MSG_PROGRESS_BAR_TEST _UxGT("Prog. Barra Proba")
-#define MSG_AUTO_HOME _UxGT("Hasierara joan")
-#define MSG_AUTO_HOME_X _UxGT("X jatorrira")
-#define MSG_AUTO_HOME_Y _UxGT("Y jatorrira")
-#define MSG_AUTO_HOME_Z _UxGT("Z jatorrira")
-#define MSG_LEVEL_BED_HOMING _UxGT("XYZ hasieraratzen")
-#define MSG_LEVEL_BED_WAITING _UxGT("Klik egin hasteko")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Hurrengo Puntua")
-#define MSG_LEVEL_BED_DONE _UxGT("Berdintzea eginda")
-//#define MSG_Z_FADE_HEIGHT _UxGT("Fade Height")
-#define MSG_SET_HOME_OFFSETS _UxGT("Etxe. offset eza.")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Offsetak ezarrita")
-#define MSG_SET_ORIGIN _UxGT("Hasiera ipini")
-#define MSG_PREHEAT_1 _UxGT("Berotu " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" Guztia")
-#define MSG_PREHEAT_1_END MSG_PREHEAT_1 _UxGT(" Amaia")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" Ohea")
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" Ezarp.")
-#define MSG_PREHEAT_2 _UxGT("Berotu " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_1 _UxGT(" Guztia")
-#define MSG_PREHEAT_2_END MSG_PREHEAT_2 _UxGT(" Amaia")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_1 _UxGT(" Ohea")
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_1 _UxGT(" Ezarp.")
-#define MSG_COOLDOWN _UxGT("Hoztu")
-#define MSG_SWITCH_PS_ON _UxGT("Energia piztu")
-#define MSG_SWITCH_PS_OFF _UxGT("Energia itzali")
-#define MSG_EXTRUDE _UxGT("Estruitu")
-#define MSG_RETRACT _UxGT("Atzera eragin")
-#define MSG_MOVE_AXIS _UxGT("Ardatzak mugitu")
-#define MSG_BED_LEVELING _UxGT("Ohe berdinketa")
-#define MSG_LEVEL_BED _UxGT("Ohea berdindu")
-#define MSG_LEVEL_CORNERS _UxGT("Ertzak berdindu")
-#define MSG_NEXT_CORNER _UxGT("Hurrengo ertza")
-#define MSG_EDIT_MESH _UxGT("Sarea editatu")
-//#define MSG_EDITING_STOPPED _UxGT("Mesh Editing Stopped")
-//#define MSG_USER_MENU _UxGT("Custom Commands")
+namespace Language_eu {
+ using namespace Language_en; // Inherit undefined strings from English
-#define MSG_UBL_DOING_G29 _UxGT("G29 exekutatzen")
-#define MSG_UBL_TOOLS _UxGT("UBL Tresnak")
-#define MSG_UBL_LEVEL_BED _UxGT("Unified Bed Leveling")
-#define MSG_UBL_MANUAL_MESH _UxGT("Sarea eskuz sortu")
-//#define MSG_UBL_BC_INSERT _UxGT("Place shim & measure")
-#define MSG_UBL_BC_INSERT2 _UxGT("Neurtu")
-//#define MSG_UBL_BC_REMOVE _UxGT("Remove & measure bed")
-//#define MSG_UBL_MOVING_TO_NEXT _UxGT("Moving to next")
-#define MSG_UBL_ACTIVATE_MESH _UxGT("UBL aktibatu")
-#define MSG_UBL_DEACTIVATE_MESH _UxGT("UBL desaktibatu")
-#define MSG_UBL_SET_TEMP_BED _UxGT("Ohearen tenperatura")
-#define MSG_UBL_BED_TEMP_CUSTOM MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND _UxGT("Mutur beroaren tenp.")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT _UxGT("Sarea editatu")
-//#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("Edit Custom Mesh")
-//#define MSG_UBL_FINE_TUNE_MESH _UxGT("Fine Tuning Mesh")
-#define MSG_UBL_DONE_EDITING_MESH _UxGT("Sarea editatzea eginda")
-//#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("Build Custom Mesh")
-#define MSG_UBL_BUILD_MESH_MENU _UxGT("Sarea sortu")
-#define MSG_UBL_BUILD_MESH_M1 _UxGT(PREHEAT_1_LABEL " sarea sortu")
-#define MSG_UBL_BUILD_MESH_M2 _UxGT(PREHEAT_2_LABEL " sarea sortu")
-#define MSG_UBL_BUILD_COLD_MESH _UxGT("Sare hotza sortu")
-#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("Sarearen altuera doitu")
-//#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("Height Amount")
-#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Sarea balioetsi")
-#define MSG_UBL_VALIDATE_MESH_M1 _UxGT(PREHEAT_1_LABEL " sarea balioetsi")
-#define MSG_UBL_VALIDATE_MESH_M2 _UxGT(PREHEAT_2_LABEL " sarea balioetsi")
-//#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Validate Custom Mesh")
-#define MSG_UBL_CONTINUE_MESH _UxGT("Ohe sarea balioetsi")
-#define MSG_UBL_MESH_LEVELING _UxGT("Sare berdinketa")
-#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("3 puntuko berdinketa")
-#define MSG_UBL_GRID_MESH_LEVELING _UxGT("Lauki-sare berdinketa")
-#define MSG_UBL_MESH_LEVEL _UxGT("Sarea berdindu")
-//#define MSG_UBL_SIDE_POINTS _UxGT("Side Points")
-#define MSG_UBL_MAP_TYPE _UxGT("Mapa mota")
-//#define MSG_UBL_OUTPUT_MAP _UxGT("Output Mesh Map")
-//#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("Output for Host")
-//#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("Output for CSV")
-//#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("Off Printer Backup")
-//#define MSG_UBL_INFO_UBL _UxGT("Output UBL Info")
-//#define MSG_UBL_FILLIN_AMOUNT _UxGT("Fill-in Amount")
-//#define MSG_UBL_MANUAL_FILLIN _UxGT("Manual Fill-in")
-//#define MSG_UBL_SMART_FILLIN _UxGT("Smart Fill-in")
-//#define MSG_UBL_FILLIN_MESH _UxGT("Fill-in Mesh")
-//#define MSG_UBL_INVALIDATE_ALL _UxGT("Invalidate All")
-//#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("Invalidate Closest")
-//#define MSG_UBL_FINE_TUNE_ALL _UxGT("Fine Tune All")
-//#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("Fine Tune Closest")
-//#define MSG_UBL_STORAGE_MESH_MENU _UxGT("Mesh Storage")
-//#define MSG_UBL_STORAGE_SLOT _UxGT("Memory Slot")
-//#define MSG_UBL_LOAD_MESH _UxGT("Load Bed Mesh")
-//#define MSG_UBL_SAVE_MESH _UxGT("Save Bed Mesh")
-//#define MSG_MESH_LOADED _UxGT("Mesh %i loaded")
-//#define MSG_MESH_SAVED _UxGT("Mesh %i saved")
-//#define MSG_UBL_NO_STORAGE _UxGT("No storage")
-//#define MSG_UBL_SAVE_ERROR _UxGT("Err: UBL Save")
-//#define MSG_UBL_RESTORE_ERROR _UxGT("Err: UBL Restore")
-//#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Z-Offset Stopped")
-//#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("Step-By-Step UBL")
-#define MSG_LED_CONTROL _UxGT("LED ezarpenak")
-#define MSG_LEDS _UxGT("Argiak")
-#define MSG_LED_PRESETS _UxGT("Argi aurrehautaketak")
-#define MSG_SET_LEDS_RED _UxGT("Gorria")
-#define MSG_SET_LEDS_ORANGE _UxGT("Laranja")
-#define MSG_SET_LEDS_YELLOW _UxGT("Horia")
-#define MSG_SET_LEDS_GREEN _UxGT("Berdea")
-#define MSG_SET_LEDS_BLUE _UxGT("Urdina")
-#define MSG_SET_LEDS_INDIGO _UxGT("Indigo")
-#define MSG_SET_LEDS_VIOLET _UxGT("Bioleta")
-#define MSG_SET_LEDS_WHITE _UxGT("Zuria")
-#define MSG_SET_LEDS_DEFAULT _UxGT("Lehenetsia")
-#define MSG_CUSTOM_LEDS _UxGT("Argi pertsonalizatuak")
-#define MSG_INTENSITY_R _UxGT("Intentsitate gorria")
-#define MSG_INTENSITY_G _UxGT("Intentsitate berdea")
-#define MSG_INTENSITY_B _UxGT("Intentsitate urdina")
-#define MSG_INTENSITY_W _UxGT("Intentsitate zuria")
-#define MSG_LED_BRIGHTNESS _UxGT("Distira")
+ constexpr uint8_t CHARSIZE = 1;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Basque-Euskera");
-#define MSG_MOVING _UxGT("Mugitzen...")
-#define MSG_FREE_XY _UxGT("Askatu XY")
-#define MSG_MOVE_X _UxGT("Mugitu X")
-#define MSG_MOVE_Y _UxGT("Mugitu Y")
-#define MSG_MOVE_Z _UxGT("Mugitu Z")
-#define MSG_MOVE_E _UxGT("Estrusorea")
-#define MSG_MOVE_Z_DIST _UxGT("Mugitu %smm")
-#define MSG_MOVE_01MM _UxGT("Mugitu 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Mugitu 1mm")
-#define MSG_MOVE_10MM _UxGT("Mugitu 10mm")
-#define MSG_SPEED _UxGT("Abiadura")
-#define MSG_BED_Z _UxGT("Z Ohea")
-#define MSG_NOZZLE _UxGT("Pita")
-#define MSG_BED _UxGT("Ohea")
-#define MSG_FAN_SPEED _UxGT("Haizagailu abiadura")
-#define MSG_EXTRA_FAN_SPEED _UxGT("Haiz.gehig. abiadura")
-#define MSG_FLOW _UxGT("Fluxua")
-#define MSG_CONTROL _UxGT("Kontrola")
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fakt")
-#define MSG_AUTOTEMP _UxGT("Auto tenperatura")
-#define MSG_LCD_ON _UxGT("On")
-#define MSG_LCD_OFF _UxGT("Off")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Aukeratu")
-#define MSG_ACC _UxGT("Azelerazioa")
-#define MSG_JERK _UxGT("Astindua")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va-astindua")
- #define MSG_VB_JERK _UxGT("Vb-astindua")
- #define MSG_VC_JERK _UxGT("Vc-astindua")
-#else
- #define MSG_VA_JERK _UxGT("Vx-astindua")
- #define MSG_VB_JERK _UxGT("Vy-astindua")
- #define MSG_VC_JERK _UxGT("Vz-astindua")
-#endif
-#define MSG_VE_JERK _UxGT("Ve-astindua")
-//#define MSG_VELOCITY _UxGT("Velocity")
-#define MSG_VMAX _UxGT("Vmax ")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("VBidaia min")
-#define MSG_ACCELERATION MSG_ACC
-#define MSG_AMAX _UxGT("Amax ")
-#define MSG_A_RETRACT _UxGT("A-retrakt")
-#define MSG_A_TRAVEL _UxGT("A-bidaia")
-#define MSG_STEPS_PER_MM _UxGT("Pausoak/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("A pausoak/mm")
- #define MSG_BSTEPS _UxGT("B pausoak/mm")
- #define MSG_CSTEPS _UxGT("C pausoak/mm")
-#else
- #define MSG_ASTEPS _UxGT("X pausoak/mm")
- #define MSG_BSTEPS _UxGT("Y pausoak/mm")
- #define MSG_CSTEPS _UxGT("Z pausoak/mm")
-#endif
-#define MSG_ESTEPS _UxGT("E pausoak/mm")
-#define MSG_E1STEPS _UxGT("E1 pausoak/mm")
-#define MSG_E2STEPS _UxGT("E2 pausoak/mm")
-#define MSG_E3STEPS _UxGT("E3 pausoak/mm")
-#define MSG_E4STEPS _UxGT("E4 pausoak/mm")
-#define MSG_E5STEPS _UxGT("E5 pausoak/mm")
-#define MSG_E6STEPS _UxGT("E6 pausoak/mm")
-#define MSG_TEMPERATURE _UxGT("Tenperatura")
-#define MSG_MOTION _UxGT("Mugimendua")
-#define MSG_FILAMENT _UxGT("Harizpia")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E mm3-tan")
-#define MSG_FILAMENT_DIAM _UxGT("Hariz. Dia.")
-#define MSG_FILAMENT_UNLOAD _UxGT("Deskargatu mm")
-#define MSG_FILAMENT_LOAD _UxGT("Kargatu mm")
-#define MSG_ADVANCE_K _UxGT("K Aurrerapena")
-#define MSG_CONTRAST _UxGT("LCD kontrastea")
-#define MSG_STORE_EEPROM _UxGT("Gorde memoria")
-#define MSG_LOAD_EEPROM _UxGT("Kargatu memoria")
-#define MSG_RESTORE_FAILSAFE _UxGT("Larri. berriz.")
-#define MSG_INIT_EEPROM _UxGT("EEPROM-a hasieratu")
-#define MSG_REFRESH _UxGT("Berriz kargatu")
-#define MSG_WATCH _UxGT("Pantaila info")
-#define MSG_PREPARE _UxGT("Prestatu")
-#define MSG_TUNE _UxGT("Doitu")
-#define MSG_PAUSE_PRINT _UxGT("Pausatu inprimak.")
-#define MSG_RESUME_PRINT _UxGT("Jarraitu inprima.")
-#define MSG_STOP_PRINT _UxGT("Gelditu inprima.")
-#define MSG_MEDIA_MENU _UxGT("SD-tik inprimatu")
-#define MSG_NO_MEDIA _UxGT("Ez dago SD-rik")
-#define MSG_DWELL _UxGT("Lo egin...")
-#define MSG_USERWAIT _UxGT("Aginduak zain...")
-#define MSG_PRINT_PAUSED _UxGT("Inprim. geldi.")
-#define MSG_PRINT_ABORTED _UxGT("Inprim. deusezta.")
-#define MSG_NO_MOVE _UxGT("Mugimendu gabe.")
-#define MSG_KILLED _UxGT("AKABATUTA. ")
-#define MSG_STOPPED _UxGT("GELDITUTA. ")
-#define MSG_CONTROL_RETRACT _UxGT("Atzera egin mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Swap Atzera mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Atzera egin V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Igo mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("Atzera egin mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Swap Atzera mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("Atzera egin V")
-//#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("S UnRet V")
-#define MSG_AUTORETRACT _UxGT("Atzera egin")
-#define MSG_FILAMENTCHANGE _UxGT("Aldatu harizpia")
-#define MSG_FILAMENTLOAD _UxGT("Harizpia kargatu")
-#define MSG_FILAMENTUNLOAD _UxGT("Harizpia deskargatu")
-#define MSG_FILAMENTUNLOAD_ALL _UxGT("Erabat deskargatu")
-#define MSG_INIT_MEDIA _UxGT("Hasieratu SD-a")
-#define MSG_CHANGE_MEDIA _UxGT("Aldatu txartela")
-#define MSG_ZPROBE_OUT _UxGT("Z zunda kanpora")
-#define MSG_SKEW_FACTOR _UxGT("Okertze faktorea")
-#define MSG_BLTOUCH _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch AutoProba")
-#define MSG_BLTOUCH_RESET _UxGT("BLTouch berrabia.")
-#define MSG_BLTOUCH_DEPLOY _UxGT("BLTouch jaitsi/luzatu")
-#define MSG_BLTOUCH_STOW _UxGT("BLTouch igo/jaso")
-#define MSG_HOME_FIRST _UxGT("Etxera %s%s%s lehenengo")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Z Konpentsatu")
-#define MSG_BABYSTEP_X _UxGT("Mikro-urratsa X")
-#define MSG_BABYSTEP_Y _UxGT("Mikro-urratsa Y")
-#define MSG_BABYSTEP_Z _UxGT("Mikro-urratsa Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Endstop deusezta.")
-#define MSG_HEATING_FAILED_LCD _UxGT("Err: Beroketa")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Err: Tenperatura")
-#define MSG_THERMAL_RUNAWAY _UxGT("TENP. KONTROL EZA")
-#define MSG_ERR_MAXTEMP _UxGT("Err: Tenp Maximoa")
-#define MSG_ERR_MINTEMP _UxGT("Err: Tenp Minimoa")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Err: Ohe Tenp Max")
-#define MSG_ERR_MINTEMP_BED _UxGT("Err: Ohe Tenp Min")
-#define MSG_ERR_Z_HOMING _UxGT("Etxera XY lehenengo")
-#define MSG_HALTED _UxGT("INPRIMA. GELDIRIK")
-#define MSG_PLEASE_RESET _UxGT("Berrabia. Mesedez")
-#define MSG_SHORT_DAY _UxGT("d") // One character only
-#define MSG_SHORT_HOUR _UxGT("h") // One character only
-#define MSG_SHORT_MINUTE _UxGT("m") // One character only
-#define MSG_HEATING _UxGT("Berotzen...")
-#define MSG_BED_HEATING _UxGT("Ohea Berotzen...")
-#define MSG_DELTA_CALIBRATE _UxGT("Delta Kalibraketa")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Kalibratu X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Kalibratu Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Kalibratu Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Kalibratu Zentrua")
-#define MSG_DELTA_SETTINGS _UxGT("Delta ezarpenak")
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Auto Kalibraketa")
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Delta Alt. Ezar.")
-#define MSG_DELTA_DIAG_ROD _UxGT("Barra diagonala")
-#define MSG_DELTA_HEIGHT _UxGT("Altuera")
-#define MSG_DELTA_RADIUS _UxGT("Erradioa")
-#define MSG_INFO_MENU _UxGT("Inprimagailu Inf.")
-#define MSG_INFO_PRINTER_MENU _UxGT("Inprimagailu Inf.")
-#define MSG_3POINT_LEVELING _UxGT("3 puntuko berdinketa")
-#define MSG_LINEAR_LEVELING _UxGT("Berdinketa lineala")
-#define MSG_BILINEAR_LEVELING _UxGT("Berdinketa bilinearra")
-#define MSG_UBL_LEVELING _UxGT("Unified Bed Leveling")
-#define MSG_MESH_LEVELING _UxGT("Sare berdinketa")
-#define MSG_INFO_STATS_MENU _UxGT("Inprima. estatis.")
-#define MSG_INFO_BOARD_MENU _UxGT("Txartelaren Info.")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Termistoreak")
-#define MSG_INFO_EXTRUDERS _UxGT("Estrusoreak")
-#define MSG_INFO_BAUDRATE _UxGT("Baudioak")
-#define MSG_INFO_PROTOCOL _UxGT("Protokoloa")
-#define MSG_CASE_LIGHT _UxGT("Kabina Argia")
-//#define MSG_CASE_LIGHT_BRIGHTNESS
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Inprim. Zenbaketa")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Burututa")
- #define MSG_INFO_PRINT_TIME _UxGT("Inprim. denbora")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Imprimatze luzeena")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Estruituta guztira")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Inprimatze")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Burututa")
- #define MSG_INFO_PRINT_TIME _UxGT("Guztira")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Luzeena")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Estrusio")
-#endif
-#define MSG_INFO_MIN_TEMP _UxGT("Tenp. Minimoa")
-#define MSG_INFO_MAX_TEMP _UxGT("Tenp. Maximoa")
-#define MSG_INFO_PSU _UxGT("Elikadura-iturria")
-#define MSG_DRIVE_STRENGTH _UxGT("Driver-aren potentzia")
-#define MSG_DAC_PERCENT _UxGT("Driver %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("Idatzi DAC EEPROM")
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("HARIZPIA ALDATU")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("HARIZPIA KARGATU")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("HARIZPIA DESKARGATU")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("ALDAKETA AUKERAK:")
-//#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Purge more")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Inprima. jarraitu")
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Pita: ")
-#define MSG_ERR_HOMING_FAILED _UxGT("Hasi. huts egin du")
-#define MSG_ERR_PROBING_FAILED _UxGT("Neurketak huts egin du")
-#define MSG_M600_TOO_COLD _UxGT("M600: hotzegi")
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" prest.");
+ PROGMEM Language_Str MSG_BACK = _UxGT("Atzera");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Txartela sartuta");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Txartela kenduta");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Menu nagusia");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Auto hasiera");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Itzali motoreak");
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Arazketa Menua");
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Prog. Barra Proba");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Hasierara joan");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("X jatorrira");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Y jatorrira");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Z jatorrira");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("XYZ hasieraratzen");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Klik egin hasteko");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Hurrengo Puntua");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Berdintzea eginda");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Etxe. offset eza.");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsetak ezarrita");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Hasiera ipini");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Berotu ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Berotu ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Berotu ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Berotu ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Berotu ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Berotu ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Berotu ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Guztia");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Ohea");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Ezarp.");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Berotu ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Berotu ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Berotu ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Berotu ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Berotu ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Berotu ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Berotu ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Amaia");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Amaia ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Amaia ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Amaia ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Amaia ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Amaia ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Amaia ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Guztia");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Ohea");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Berotu ") PREHEAT_2_LABEL _UxGT(" Ezarp.");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Hoztu");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Energia piztu");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Energia itzali");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Estruitu");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Atzera eragin");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Ardatzak mugitu");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Ohe berdinketa");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Ohea berdindu");
+ PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Ertzak berdindu");
+ PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Hurrengo ertza");
+ PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Sarea editatu");
-#define MSG_EXPECTED_PRINTER _UxGT("Inprimagailu okerra")
+ PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("G29 exekutatzen");
+ PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL Tresnak");
+ PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
+ PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Sarea eskuz sortu");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Neurtu");
+ PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("UBL aktibatu");
+ PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("UBL desaktibatu");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Ohearen tenperatura");
+ PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Mutur beroaren tenp.");
+ PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
+ PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Sarea editatu");
+ PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Sarea editatzea eginda");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Sarea sortu");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = PREHEAT_1_LABEL _UxGT(" sarea sortu");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = PREHEAT_2_LABEL _UxGT(" sarea sortu");
+ PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Sare hotza sortu");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Sarearen altuera doitu");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Sarea balioetsi");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = PREHEAT_1_LABEL _UxGT(" sarea balioetsi");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = PREHEAT_2_LABEL _UxGT(" sarea balioetsi");
+ PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Ohe sarea balioetsi");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Sare berdinketa");
+ PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3 puntuko berdinketa");
+ PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Lauki-sare berdinketa");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Sarea berdindu");
+ PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Mapa mota");
+ PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("LED ezarpenak");
+ PROGMEM Language_Str MSG_LEDS = _UxGT("Argiak");
+ PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Argi aurrehautaketak");
+ PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Gorria");
+ PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Laranja");
+ PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Horia");
+ PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Berdea");
+ PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Urdina");
+ PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
+ PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Bioleta");
+ PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Zuria");
+ PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Lehenetsia");
+ PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Argi pertsonalizatuak");
+ PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Intentsitate gorria");
+ PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Intentsitate berdea");
+ PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Intentsitate urdina");
+ PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Intentsitate zuria");
+ PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Distira");
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-// ...or up to 2 lines on a 3-line display
-//
-#if LCD_HEIGHT >= 4
- //#define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Wait for start")
- //#define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("of the filament")
- //#define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("change")
- //#define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Wait for")
- //#define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("filament unload")
- //#define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insert filament")
- //#define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("and press button")
- //#define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("to continue...")
- //#define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Press button to")
- //#define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("heat nozzle.")
- //#define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Heating nozzle")
- //#define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Please wait...")
- //#define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Wait for")
- //#define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("filament load")
- //#define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Wait for")
- //#define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("filament purge")
- //#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wait for print")
- //#define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("to resume")
-#else // LCD_HEIGHT < 4
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Mesedez, itxaron...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Deskargatzen...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Sartu eta click egin")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Berotzen...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Kargatzen...")
- //#define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Purging...")
- //#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Resuming...")
-#endif // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_MOVING = _UxGT("Mugitzen...");
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("Askatu XY");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Mugitu X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Mugitu Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Mugitu Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Estrusorea");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Estrusorea ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Estrusorea ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Estrusorea ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Estrusorea ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Estrusorea ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Estrusorea ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Mugitu %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mugitu 0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mugitu 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mugitu 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Abiadura");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Z Ohea");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Pita");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Pita ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Pita ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Pita ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Pita ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Pita ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Pita ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Ohea");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Haizagailu abiadura");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Haizagailu abiadura 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Haizagailu abiadura 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Haizagailu abiadura 3");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Haiz.gehig. abiadura");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1 = _UxGT("Haiz.gehig. abiadura 1");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2 = _UxGT("Haiz.gehig. abiadura 2");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3 = _UxGT("Haiz.gehig. abiadura 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Fluxua");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Fluxua ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Fluxua ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Fluxua ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Fluxua ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Fluxua ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Fluxua ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Kontrola");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fakt");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Auto tenperatura");
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Aukeratu");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Aukeratu ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Aukeratu ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Aukeratu ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Aukeratu ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Aukeratu ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Aukeratu ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Azelerazioa");
+ PROGMEM Language_Str MSG_JERK = _UxGT("Astindua");
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-astindua");
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-astindua");
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-astindua");
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-astindua");
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VBidaia min");
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-retrakt");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-bidaia");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Pausoak/mm");
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" pausoak/mm");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" pausoak/mm");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" pausoak/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("E pausoak/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT(" pausoak/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT(" pausoak/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT(" pausoak/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT(" pausoak/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT(" pausoak/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT(" pausoak/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Tenperatura");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Mugimendua");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Harizpia");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E mm3-tan");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Hariz. Dia.");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Hariz. Dia. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Hariz. Dia. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Hariz. Dia. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Hariz. Dia. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Hariz. Dia. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Hariz. Dia. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Deskargatu mm");
+ PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Kargatu mm");
+ PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("K Aurrerapena");
+ PROGMEM Language_Str MSG_ADVANCE_K_E0 = _UxGT("K Aurrerapena ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_ADVANCE_K_E1 = _UxGT("K Aurrerapena ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_ADVANCE_K_E2 = _UxGT("K Aurrerapena ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_ADVANCE_K_E3 = _UxGT("K Aurrerapena ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_ADVANCE_K_E4 = _UxGT("K Aurrerapena ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_ADVANCE_K_E5 = _UxGT("K Aurrerapena ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD kontrastea");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Gorde memoria");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Kargatu memoria");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Larri. berriz.");
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("EEPROM-a hasieratu");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Berriz kargatu");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Pantaila info");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Prestatu");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Doitu");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausatu inprimak.");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Jarraitu inprima.");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Gelditu inprima.");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("SD-tik inprimatu");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Ez dago SD-rik");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Lo egin...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Aginduak zain...");
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Inprim. geldi.");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Inprim. deusezta.");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Mugimendu gabe.");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("AKABATUTA. ");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("GELDITUTA. ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Atzera egin mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Atzera mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Atzera egin V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Igo mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Atzera egin mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Swap Atzera mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Atzera egin V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Atzera egin");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Aldatu harizpia");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Aldatu harizpia ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Aldatu harizpia ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Aldatu harizpia ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Aldatu harizpia ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Aldatu harizpia ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Aldatu harizpia ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E0 = _UxGT("Harizpia kargatu ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E1 = _UxGT("Harizpia kargatu ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E2 = _UxGT("Harizpia kargatu ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E3 = _UxGT("Harizpia kargatu ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E4 = _UxGT("Harizpia kargatu ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E5 = _UxGT("Harizpia kargatu ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0 = _UxGT("Harizpia deskargatu ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1 = _UxGT("Harizpia deskargatu ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2 = _UxGT("Harizpia deskargatu ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3 = _UxGT("Harizpia deskargatu ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4 = _UxGT("Harizpia deskargatu ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5 = _UxGT("Harizpia deskargatu ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Erabat deskargatu");
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Hasieratu SD-a");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Aldatu txartela");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z zunda kanpora");
+ PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Okertze faktorea");
+ PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch AutoProba");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("BLTouch berrabia.");
+ PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("BLTouch jaitsi/luzatu");
+ PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("BLTouch igo/jaso");
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Etxera %s%s%s lehenengo");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Z Konpentsatu");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Mikro-urratsa X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Mikro-urratsa Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Mikro-urratsa Z");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Endstop deusezta.");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Err: Beroketa");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: Tenperatura");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("TENP. KONTROL EZA");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err: Tenp Maximoa");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err: Tenp Minimoa");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("Err: Ohe Tenp Max");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Err: Ohe Tenp Min");
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Etxera XY lehenengo");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("INPRIMA. GELDIRIK");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Berrabia. Mesedez");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Berotzen...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Ohea Berotzen...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibraketa");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibratu X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibratu Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibratu Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibratu Zentrua");
+ PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Delta ezarpenak");
+ PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Kalibraketa");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Delta Alt. Ezar.");
+ PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Barra diagonala");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Altuera");
+ PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Erradioa");
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Inprimagailu Inf.");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Inprimagailu Inf.");
+ PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3 puntuko berdinketa");
+ PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Berdinketa lineala");
+ PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Berdinketa bilinearra");
+ PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
+ PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Sare berdinketa");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Inprima. estatis.");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Txartelaren Info.");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistoreak");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Estrusoreak");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baudioak");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokoloa");
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Kabina Argia");
+ PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS
+ = ;
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Inprim. Zenbaketa");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Burututa");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Inprim. denbora");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Imprimatze luzeena");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Estruituta guztira");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Inprimatze");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Burututa");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Guztira");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Luzeena");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Estrusio");
+ #endif
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Tenp. Minimoa");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Tenp. Maximoa");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Elikadura-iturria");
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Driver-aren potentzia");
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("Driver %");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Idatzi DAC EEPROM");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("HARIZPIA ALDATU");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("HARIZPIA KARGATU");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("HARIZPIA DESKARGATU");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ALDAKETA AUKERAK:");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Inprima. jarraitu");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Pita: ");
+ PROGMEM Language_Str MSG_LCD_HOMING_FAILED = _UxGT("Hasi. huts egin du");
+ PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Neurketak huts egin du");
+ PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: hotzegi");
+
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Inprimagailu okerra");
+
+ //
+ // Filament Change screens show up to 3 lines on a 4-line display
+ // ...or up to 2 lines on a 3-line display
+ //
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Mesedez, itxaron..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Deskargatzen..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Sartu eta click egin"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Berotzen..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Kargatzen..."));
+}
diff --git a/Marlin/src/lcd/language/language_fi.h b/Marlin/src/lcd/language/language_fi.h
index 2fbf9e2d18c3..0b6385c21332 100644
--- a/Marlin/src/lcd/language/language_fi.h
+++ b/Marlin/src/lcd/language/language_fi.h
@@ -30,142 +30,136 @@
*/
#define DISPLAY_CHARSET_ISO10646_1
-#define CHARSIZE 2
-#define WELCOME_MSG MACHINE_NAME _UxGT(" valmis.")
-#define MSG_MEDIA_INSERTED _UxGT("Kortti asetettu")
-#define MSG_MEDIA_REMOVED _UxGT("Kortti poistettu")
-#define MSG_MAIN _UxGT("Palaa")
-#define MSG_AUTOSTART _UxGT("Automaatti")
-#define MSG_DISABLE_STEPPERS _UxGT("Vapauta moottorit")
-#define MSG_AUTO_HOME _UxGT("Aja referenssiin")
-#define MSG_LEVEL_BED_HOMING _UxGT("Homing XYZ")
-#define MSG_LEVEL_BED_WAITING _UxGT("Click to Begin")
-#define MSG_LEVEL_BED_DONE _UxGT("Leveling Done!")
-#define MSG_SET_HOME_OFFSETS _UxGT("Set home offsets")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Offsets applied")
-#define MSG_SET_ORIGIN _UxGT("Aseta origo")
-#define MSG_PREHEAT_1 _UxGT("Esilämmitä " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N _UxGT("Esilämmitä " PREHEAT_1_LABEL " ")
-#define MSG_PREHEAT_1_ALL _UxGT("Esilä. " PREHEAT_1_LABEL " Kaikki")
-#define MSG_PREHEAT_1_BEDONLY _UxGT("Esilä. " PREHEAT_1_LABEL " Alusta")
-#define MSG_PREHEAT_1_SETTINGS _UxGT("Esilämm. " PREHEAT_1_LABEL " konf")
-#define MSG_PREHEAT_2 _UxGT("Esilämmitä " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N _UxGT("Esilämmitä " PREHEAT_2_LABEL " ")
-#define MSG_PREHEAT_2_ALL _UxGT("Esilä. " PREHEAT_2_LABEL " Kaikki")
-#define MSG_PREHEAT_2_BEDONLY _UxGT("Esilä. " PREHEAT_2_LABEL " Alusta")
-#define MSG_PREHEAT_2_SETTINGS _UxGT("Esilämm. " PREHEAT_2_LABEL " konf")
-#define MSG_COOLDOWN _UxGT("Jäähdytä")
-#define MSG_SWITCH_PS_ON _UxGT("Virta päälle")
-#define MSG_SWITCH_PS_OFF _UxGT("Virta pois")
-#define MSG_EXTRUDE _UxGT("Pursota")
-#define MSG_RETRACT _UxGT("Vedä takaisin")
-#define MSG_MOVE_AXIS _UxGT("Liikuta akseleita")
-#define MSG_MOVE_X _UxGT("Liikuta X")
-#define MSG_MOVE_Y _UxGT("Liikuta Y")
-#define MSG_MOVE_Z _UxGT("Liikuta Z")
-#define MSG_MOVE_E _UxGT("Extruder")
-#define MSG_MOVE_Z_DIST _UxGT("Liikuta %smm")
-#define MSG_MOVE_01MM _UxGT("Liikuta 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Liikuta 1mm")
-#define MSG_MOVE_10MM _UxGT("Liikuta 10mm")
-#define MSG_SPEED _UxGT("Nopeus")
-#define MSG_NOZZLE _UxGT("Suutin")
-#define MSG_BED _UxGT("Alusta")
-#define MSG_FAN_SPEED _UxGT("Tuul. nopeus")
-#define MSG_FLOW _UxGT("Virtaus")
-#define MSG_CONTROL _UxGT("Kontrolli")
-#define MSG_MIN LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR LCD_STR_THERMOMETER _UxGT(" Kerr")
-#define MSG_AUTOTEMP _UxGT("Autotemp")
-#define MSG_LCD_ON _UxGT("On")
-#define MSG_LCD_OFF _UxGT("Off")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_ACC _UxGT("Kiihtyv")
-#define MSG_JERK _UxGT("Jerk")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va-jerk")
- #define MSG_VB_JERK _UxGT("Vb-jerk")
- #define MSG_VC_JERK _UxGT("Vc-jerk")
-#else
- #define MSG_VA_JERK _UxGT("Vx-jerk")
- #define MSG_VB_JERK _UxGT("Vy-jerk")
- #define MSG_VC_JERK _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK _UxGT("Ve-jerk")
-#define MSG_VMAX _UxGT("Vmax ")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("VLiike min")
-#define MSG_ACCELERATION MSG_ACC
-#define MSG_AMAX _UxGT("Amax ")
-#define MSG_A_RETRACT _UxGT("A-peruuta")
-#define MSG_STEPS_PER_MM _UxGT("Steps/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("Asteps/mm")
- #define MSG_BSTEPS _UxGT("Bsteps/mm")
- #define MSG_CSTEPS _UxGT("Csteps/mm")
-#else
- #define MSG_ASTEPS _UxGT("Xsteps/mm")
- #define MSG_BSTEPS _UxGT("Ysteps/mm")
- #define MSG_CSTEPS _UxGT("Zsteps/mm")
-#endif
-#define MSG_ESTEPS _UxGT("Esteps/mm")
-#define MSG_E1STEPS _UxGT("E1steps/mm")
-#define MSG_E2STEPS _UxGT("E2steps/mm")
-#define MSG_E3STEPS _UxGT("E3steps/mm")
-#define MSG_E4STEPS _UxGT("E4steps/mm")
-#define MSG_E5STEPS _UxGT("E5steps/mm")
-#define MSG_E6STEPS _UxGT("E6steps/mm")
-#define MSG_TEMPERATURE _UxGT("Lämpötila")
-#define MSG_MOTION _UxGT("Liike")
-#define MSG_FILAMENT _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E in mm³")
-#define MSG_FILAMENT_DIAM _UxGT("Fil. Dia.")
-#define MSG_CONTRAST _UxGT("LCD kontrasti")
-#define MSG_STORE_EEPROM _UxGT("Tallenna muistiin")
-#define MSG_LOAD_EEPROM _UxGT("Lataa muistista")
-#define MSG_RESTORE_FAILSAFE _UxGT("Palauta oletus")
-#define MSG_REFRESH _UxGT("Päivitä")
-#define MSG_WATCH _UxGT("Seuraa")
-#define MSG_PREPARE _UxGT("Valmistele")
-#define MSG_TUNE _UxGT("Säädä")
-#define MSG_PAUSE_PRINT _UxGT("Keskeytä tulostus")
-#define MSG_RESUME_PRINT _UxGT("Jatka tulostusta")
-#define MSG_STOP_PRINT _UxGT("Pysäytä tulostus")
-#define MSG_MEDIA_MENU _UxGT("Korttivalikko")
-#define MSG_NO_MEDIA _UxGT("Ei korttia")
-#define MSG_DWELL _UxGT("Nukkumassa...")
-#define MSG_USERWAIT _UxGT("Odotet. valintaa")
-#define MSG_PRINT_ABORTED _UxGT("Print aborted")
-#define MSG_NO_MOVE _UxGT("Ei liiketta.")
-#define MSG_KILLED _UxGT("KILLED. ")
-#define MSG_STOPPED _UxGT("STOPPED. ")
-#define MSG_CONTROL_RETRACT _UxGT("Vedä mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Va. Vedä mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Vedä V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Z mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Va. UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet V")
-#define MSG_AUTORETRACT _UxGT("AutoVeto.")
-#define MSG_FILAMENTCHANGE _UxGT("Change filament")
-#define MSG_INIT_MEDIA _UxGT("Init. SD-Card")
-#define MSG_CHANGE_MEDIA _UxGT("Change SD-Card")
-#define MSG_ZPROBE_OUT _UxGT("Z probe out. bed")
-#define MSG_HOME_FIRST _UxGT("Home %s%s%s first")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Z Offset")
-#define MSG_BABYSTEP_X _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Endstop abort")
-#define MSG_DELTA_CALIBRATE _UxGT("Delta Kalibrointi")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Kalibroi X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Kalibroi Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Kalibroi Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Kalibroi Center")
+namespace Language_fi {
+ using namespace Language_en; // Inherit undefined strings from English
-#define MSG_EXPECTED_PRINTER _UxGT("Väärä tulostin")
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Finnish");
+
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" valmis.");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Kortti asetettu");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Kortti poistettu");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Palaa");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Automaatti");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Vapauta moottorit");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Aja referenssiin");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Aseta origo");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Esilämmitä ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Esilämmitä ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Esilämmitä ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Esilämmitä ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Esilämmitä ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Esilämmitä ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Esilämmitä ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT(" Kaikki");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT(" Alusta");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Esilämm. ") PREHEAT_1_LABEL _UxGT(" konf");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Esilämmitä ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Esilämmitä ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Esilämmitä ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Esilämmitä ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Esilämmitä ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Esilämmitä ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Esilämmitä ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT("Suutin");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT("Suutin ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT("Suutin ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT("Suutin ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT("Suutin ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT("Suutin ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT("Suutin ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT(" Kaikki");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Esilä. ") PREHEAT_2_LABEL _UxGT(" Alusta");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Esilämm. ") PREHEAT_2_LABEL _UxGT(" konf");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Jäähdytä");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Virta päälle");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Virta pois");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Pursota");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Vedä takaisin");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Liikuta akseleita");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Liikuta X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Liikuta Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Liikuta Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extruder");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Extruder ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Extruder ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Extruder ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Extruder ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Extruder ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Extruder ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Liikuta %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Liikuta 0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Liikuta 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Liikuta 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Nopeus");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Suutin");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Suutin ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Suutin ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Suutin ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Suutin ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Suutin ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Suutin ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Alusta");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Tuul. nopeus");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Tuul. nopeus 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Tuul. nopeus 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Tuul. nopeus 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Virtaus");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Virtaus ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Virtaus ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Virtaus ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Virtaus ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Virtaus ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Virtaus ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Kontrolli");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Kerr");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Autotemp");
+ PROGMEM Language_Str MSG_ACC = _UxGT("Kiihtyv");
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VLiike min");
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-peruuta");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Lämpötila");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Liike");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm³");
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD kontrasti");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Tallenna muistiin");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Lataa muistista");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Palauta oletus");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Päivitä");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Seuraa");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Valmistele");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Säädä");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Keskeytä tulostus");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Jatka tulostusta");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Pysäytä tulostus");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Korttivalikko");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Ei korttia");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Nukkumassa...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Odotet. valintaa");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Ei liiketta.");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Vedä mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Va. Vedä mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Vedä V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Z mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Va. UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("UnRet V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("AutoVeto.");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrointi");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibroi X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibroi Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibroi Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibroi Center");
+
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Väärä tulostin");
+}
diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h
index da9a0d4acde7..34fc7becd5fa 100644
--- a/Marlin/src/lcd/language/language_fr.h
+++ b/Marlin/src/lcd/language/language_fr.h
@@ -30,533 +30,586 @@
*/
#define DISPLAY_CHARSET_ISO10646_1
-#define CHARSIZE 2
-#define WELCOME_MSG MACHINE_NAME _UxGT(" prête.")
-#define MSG_YES _UxGT("Oui")
-#define MSG_NO _UxGT("Non")
-#define MSG_BACK _UxGT("Retour")
-#define MSG_MEDIA_ABORTING _UxGT("Annulation...")
-#define MSG_MEDIA_INSERTED _UxGT("Média inséré")
-#define MSG_MEDIA_REMOVED _UxGT("Média retiré")
-#define MSG_MEDIA_RELEASED _UxGT("Média libéré")
-#define MSG_MEDIA_WAITING _UxGT("Attente média")
-#define MSG_MEDIA_READ_ERROR _UxGT("Err lecture média")
-#define MSG_MEDIA_USB_REMOVED _UxGT("USB débranché")
-#define MSG_MEDIA_USB_FAILED _UxGT("Erreur média USB")
-#define MSG_LCD_ENDSTOPS _UxGT("Butées")
-#define MSG_LCD_SOFT_ENDSTOPS _UxGT("Butées SW")
-#define MSG_MAIN _UxGT("Menu principal")
-#define MSG_ADVANCED_SETTINGS _UxGT("Config. avancée")
-#define MSG_CONFIGURATION _UxGT("Configuration")
-#define MSG_AUTOSTART _UxGT("Exéc. auto#.gcode")
-#define MSG_DISABLE_STEPPERS _UxGT("Arrêter moteurs")
-#define MSG_DEBUG_MENU _UxGT("Menu debug")
-#define MSG_PROGRESS_BAR_TEST _UxGT("Test barre progress.")
-#define MSG_AUTO_HOME _UxGT("Origine auto")
-#define MSG_AUTO_HOME_X _UxGT("Origine X auto")
-#define MSG_AUTO_HOME_Y _UxGT("Origine Y auto")
-#define MSG_AUTO_HOME_Z _UxGT("Origine Z auto")
-#define MSG_AUTO_Z_ALIGN _UxGT("Align. Z auto")
-#define MSG_LEVEL_BED_HOMING _UxGT("Origine XYZ...")
-#define MSG_LEVEL_BED_WAITING _UxGT("Clic pour commencer")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Point suivant")
-#define MSG_LEVEL_BED_DONE _UxGT("Mise à niveau OK!")
-#define MSG_Z_FADE_HEIGHT _UxGT("Hauteur lissée")
-#define MSG_SET_HOME_OFFSETS _UxGT("Régl. décal origine")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Décalages appliqués")
-#define MSG_SET_ORIGIN _UxGT("Régler origine")
-#define MSG_PREHEAT_1 _UxGT("Préchauffage " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N _UxGT("Préchauff. " PREHEAT_1_LABEL " ")
-#define MSG_PREHEAT_1_ALL _UxGT("Préch. " PREHEAT_1_LABEL " Tout")
-#define MSG_PREHEAT_1_END _UxGT("Préch. " PREHEAT_1_LABEL " buse")
-#define MSG_PREHEAT_1_BEDONLY _UxGT("Préch. " PREHEAT_1_LABEL " lit")
-#define MSG_PREHEAT_1_SETTINGS _UxGT("Régler préch. " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_2 _UxGT("Préchauffage " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N _UxGT("Préchauff. " PREHEAT_2_LABEL " ")
-#define MSG_PREHEAT_2_ALL _UxGT("Préch. " PREHEAT_2_LABEL " Tout")
-#define MSG_PREHEAT_2_END _UxGT("Préch. " PREHEAT_2_LABEL " buse")
-#define MSG_PREHEAT_2_BEDONLY _UxGT("Préch. " PREHEAT_2_LABEL " lit")
-#define MSG_PREHEAT_2_SETTINGS _UxGT("Régler préch. " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_CUSTOM _UxGT("Préchauffage perso")
-#define MSG_COOLDOWN _UxGT("Refroidir")
-#define MSG_LASER_MENU _UxGT("Contrôle Laser")
-#define MSG_LASER_OFF _UxGT("Laser Off")
-#define MSG_LASER_ON _UxGT("Laser On")
-#define MSG_LASER_POWER _UxGT("Puissance")
-#define MSG_SPINDLE_REVERSE _UxGT("Inverser broches")
-#define MSG_SWITCH_PS_ON _UxGT("Allumer alim.")
-#define MSG_SWITCH_PS_OFF _UxGT("Eteindre alim.")
-#define MSG_EXTRUDE _UxGT("Extrusion")
-#define MSG_RETRACT _UxGT("Retrait")
-#define MSG_MOVE_AXIS _UxGT("Déplacer un axe")
-#define MSG_BED_LEVELING _UxGT("Régler Niv. lit")
-#define MSG_LEVEL_BED _UxGT("Niveau du lit")
-#define MSG_LEVEL_CORNERS _UxGT("Niveau des coins")
-#define MSG_NEXT_CORNER _UxGT("Coin suivant")
-#define MSG_MESH_EDITOR _UxGT("Edition Maillage")
-#define MSG_EDIT_MESH _UxGT("Modifier maille")
-#define MSG_EDITING_STOPPED _UxGT("Arrêt édit. maillage")
-#define MSG_PROBING_MESH _UxGT("Mesure point")
-#define MSG_MESH_X _UxGT("Index X")
-#define MSG_MESH_Y _UxGT("Index Y")
-#define MSG_MESH_EDIT_Z _UxGT("Valeur Z")
-#define MSG_USER_MENU _UxGT("Commandes perso")
+namespace Language_fr {
+ using namespace Language_en; // Inherit undefined strings from English
-#define MSG_LCD_TILTING_MESH _UxGT("Touche point")
-#define MSG_M48_TEST _UxGT("Ecart sonde Z M48")
-#define MSG_M48_DEVIATION _UxGT("Ecart")
-#define MSG_M48_POINT _UxGT("Point M48")
-#define MSG_IDEX_MENU _UxGT("Mode IDEX")
-#define MSG_IDEX_MODE_AUTOPARK _UxGT("Auto-Park")
-#define MSG_IDEX_MODE_DUPLICATE _UxGT("Duplication")
-#define MSG_IDEX_MODE_MIRRORED_COPY _UxGT("Copie miroir")
-#define MSG_IDEX_MODE_FULL_CTRL _UxGT("Contrôle complet")
-#define MSG_OFFSETS_MENU _UxGT("Offsets Outil")
-#define MSG_X_OFFSET _UxGT("Buse 2 X")
-#define MSG_Y_OFFSET _UxGT("Buse 2 Y")
-#define MSG_Z_OFFSET _UxGT("Buse 2 Z")
-#define MSG_G26_HEATING_BED _UxGT("G26 Chauffe lit")
-#define MSG_G26_HEATING_NOZZLE _UxGT("G26 Chauffe buse")
-#define MSG_G26_MANUAL_PRIME _UxGT("Amorce manuelle...")
-#define MSG_G26_FIXED_LENGTH _UxGT("Amorce longueur fixe")
-#define MSG_G26_PRIME_DONE _UxGT("Amorce terminée")
-#define MSG_G26_CANCELED _UxGT("G26 annulé")
-#define MSG_G26_LEAVING _UxGT("Sortie G26")
-#define MSG_UBL_DOING_G29 _UxGT("G29 en cours")
-#define MSG_UBL_TOOLS _UxGT("Outils UBL")
-#define MSG_UBL_LEVEL_BED _UxGT("Niveau lit unifié")
-#define MSG_UBL_MANUAL_MESH _UxGT("Maillage manuel")
-#define MSG_UBL_BC_INSERT _UxGT("Poser câle & mesurer")
-#define MSG_UBL_BC_INSERT2 _UxGT("Mesure")
-#define MSG_UBL_BC_REMOVE _UxGT("ôter et mesurer lit")
-#define MSG_UBL_MOVING_TO_NEXT _UxGT("Aller au suivant")
-#define MSG_UBL_ACTIVATE_MESH _UxGT("Activer l'UBL")
-#define MSG_UBL_DEACTIVATE_MESH _UxGT("Désactiver l'UBL")
-#define MSG_UBL_SET_TEMP_BED _UxGT("Température lit")
-#define MSG_UBL_BED_TEMP_CUSTOM MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND _UxGT("Température buse")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT _UxGT("Editer maille")
-#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("Editer maille perso")
-#define MSG_UBL_FINE_TUNE_MESH _UxGT("Réglage fin maille")
-#define MSG_UBL_DONE_EDITING_MESH _UxGT("Terminer maille")
-#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("Créer maille perso")
-#define MSG_UBL_BUILD_MESH_MENU _UxGT("Créer maille")
-#define MSG_UBL_BUILD_MESH_M1 _UxGT("Créer maille " PREHEAT_1_LABEL)
-#define MSG_UBL_BUILD_MESH_M2 _UxGT("Créer maille " PREHEAT_2_LABEL)
-#define MSG_UBL_BUILD_COLD_MESH _UxGT("Créer maille froide")
-#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("Ajuster haut. maille")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("Hauteur")
-#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Valider maille")
-#define MSG_UBL_VALIDATE_MESH_M1 _UxGT("Valider maille " PREHEAT_1_LABEL)
-#define MSG_UBL_VALIDATE_MESH_M2 _UxGT("Valider maille " PREHEAT_2_LABEL)
-#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Valider maille perso")
-#define MSG_UBL_CONTINUE_MESH _UxGT("Continuer maille")
-#define MSG_UBL_MESH_LEVELING _UxGT("Niveau par maille")
-#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("Niveau à 3 points")
-#define MSG_UBL_GRID_MESH_LEVELING _UxGT("Niveau grille")
-#define MSG_UBL_MESH_LEVEL _UxGT("Maille de niveau")
-#define MSG_UBL_SIDE_POINTS _UxGT("Point latéral")
-#define MSG_UBL_MAP_TYPE _UxGT("Type de carte")
-#define MSG_UBL_OUTPUT_MAP _UxGT("Voir maille")
-#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("Voir pour hôte")
-#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("Voir pour CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("Voir pour sauveg.")
-#define MSG_UBL_INFO_UBL _UxGT("Voir info UBL")
-#define MSG_UBL_FILLIN_AMOUNT _UxGT("Taux de remplissage")
-#define MSG_UBL_MANUAL_FILLIN _UxGT("Remplissage manuel")
-#define MSG_UBL_SMART_FILLIN _UxGT("Remplissage auto")
-#define MSG_UBL_FILLIN_MESH _UxGT("Maille remplissage")
-#define MSG_UBL_INVALIDATE_ALL _UxGT("Tout annuler")
-#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("Annuler le plus près")
-#define MSG_UBL_FINE_TUNE_ALL _UxGT("Réglage fin (tous)")
-#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("Réglage fin (proche)")
-#define MSG_UBL_STORAGE_MESH_MENU _UxGT("Stockage maille")
-#define MSG_UBL_STORAGE_SLOT _UxGT("Slot mémoire")
-#define MSG_UBL_LOAD_MESH _UxGT("Charger maille")
-#define MSG_UBL_SAVE_MESH _UxGT("Sauver maille")
-#define MSG_MESH_LOADED _UxGT("Maille %i chargée")
-#define MSG_MESH_SAVED _UxGT("Maille %i enreg.")
-#define MSG_UBL_NO_STORAGE _UxGT("Pas de mémoire")
-#define MSG_UBL_SAVE_ERROR _UxGT("Err: Enreg. UBL")
-#define MSG_UBL_RESTORE_ERROR _UxGT("Err: Ouvrir UBL")
-#define MSG_UBL_Z_OFFSET _UxGT("Z-Offset: ")
-#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Décal. Z arrêté")
-#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("UBL Pas à pas")
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Français");
-#define MSG_LED_CONTROL _UxGT("Contrôle LED")
-#define MSG_LEDS _UxGT("Lumière")
-#define MSG_LED_PRESETS _UxGT("Préregl. LED")
-#define MSG_SET_LEDS_RED _UxGT("Rouge")
-#define MSG_SET_LEDS_ORANGE _UxGT("Orange")
-#define MSG_SET_LEDS_YELLOW _UxGT("Jaune")
-#define MSG_SET_LEDS_GREEN _UxGT("Vert")
-#define MSG_SET_LEDS_BLUE _UxGT("Bleu")
-#define MSG_SET_LEDS_INDIGO _UxGT("Indigo")
-#define MSG_SET_LEDS_VIOLET _UxGT("Violet")
-#define MSG_SET_LEDS_WHITE _UxGT("Blanc")
-#define MSG_SET_LEDS_DEFAULT _UxGT("Defaut")
-#define MSG_CUSTOM_LEDS _UxGT("LEDs perso.")
-#define MSG_INTENSITY_R _UxGT("Intensité rouge")
-#define MSG_INTENSITY_G _UxGT("Intensité vert")
-#define MSG_INTENSITY_B _UxGT("Intensité bleu")
-#define MSG_INTENSITY_W _UxGT("Intensité blanc")
-#define MSG_LED_BRIGHTNESS _UxGT("Luminosité")
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" prête.");
+ PROGMEM Language_Str MSG_YES = _UxGT("Oui");
+ PROGMEM Language_Str MSG_NO = _UxGT("Non");
+ PROGMEM Language_Str MSG_BACK = _UxGT("Retour");
+ PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Annulation...");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Média inséré");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Média retiré");
+ PROGMEM Language_Str MSG_MEDIA_RELEASED = _UxGT("Média libéré");
+ PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Attente média");
+ PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Err lecture média");
+ PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB débranché");
+ PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Erreur média USB");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Butées");
+ PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Butées SW");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Menu principal");
+ PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Config. avancée");
+ PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuration");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Exéc. auto#.gcode");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Arrêter moteurs");
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu debug");
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test barre progress.");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Origine auto");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Origine X auto");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Origine Y auto");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Origine Z auto");
+ PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Align. Z auto");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Origine XYZ...");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Clic pour commencer");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Point suivant");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Mise à niveau OK!");
+ PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Hauteur lissée");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Régl. décal origine");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Décalages appliqués");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Régler origine");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Préchauffage ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Préchauffage ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Préchauffage ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Préchauffage ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Préchauffage ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Préchauffage ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Préchauffage ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" Tout");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" lit");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Régler préch. ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Préchauffage ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Préchauffage ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Préchauffage ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Préchauffage ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Préchauffage ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Préchauffage ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Préchauffage ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" buse");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" buse ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" buse ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" buse ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" buse ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" buse ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" buse ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" Tout");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Préch. ") PREHEAT_2_LABEL _UxGT(" lit");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Régler préch. ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Préchauffage perso");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Refroidir");
+ PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Contrôle Laser");
+ PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Puissance");
+ PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Inverser broches");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Allumer alim.");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Eteindre alim.");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrusion");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Rétractation");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Déplacer un axe");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Régler Niv. lit");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Niveau du lit");
+ PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Niveau des coins");
+ PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Coin suivant");
+ PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Edition Maillage");
+ PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Modifier maille");
+ PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Arrêt édit. maillage");
+ PROGMEM Language_Str MSG_PROBING_MESH = _UxGT("Mesure point");
+ PROGMEM Language_Str MSG_MESH_X = _UxGT("Index X");
+ PROGMEM Language_Str MSG_MESH_Y = _UxGT("Index Y");
+ PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Valeur Z");
+ PROGMEM Language_Str MSG_USER_MENU = _UxGT("Commandes perso");
-#define MSG_MOVING _UxGT("Déplacement...")
-#define MSG_FREE_XY _UxGT("Débloquer XY")
-#define MSG_MOVE_X _UxGT("Déplacer X")
-#define MSG_MOVE_Y _UxGT("Déplacer Y")
-#define MSG_MOVE_Z _UxGT("Déplacer Z")
-#define MSG_MOVE_E _UxGT("Extrudeur")
-#define MSG_HOTEND_TOO_COLD _UxGT("Buse trop froide")
-#define MSG_MOVE_Z_DIST _UxGT("Déplacer %smm")
-#define MSG_MOVE_01MM _UxGT("Déplacer 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Déplacer 1mm")
-#define MSG_MOVE_10MM _UxGT("Déplacer 10mm")
-#define MSG_SPEED _UxGT("Vitesse")
-#define MSG_BED_Z _UxGT("Lit Z")
-#define MSG_NOZZLE _UxGT("Buse")
-#define MSG_BED _UxGT("Lit")
-#define MSG_CHAMBER _UxGT("Caisson")
-#define MSG_FAN_SPEED _UxGT("Vitesse ventil.")
-#define MSG_EXTRA_FAN_SPEED _UxGT("Extra V ventil.")
+ PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Touche point");
+ PROGMEM Language_Str MSG_M48_TEST = _UxGT("Ecart sonde Z M48");
+ PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Ecart");
+ PROGMEM Language_Str MSG_M48_POINT = _UxGT("Point M48");
+ PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Mode IDEX");
+ PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
+ PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplication");
+ PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copie miroir");
+ PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Contrôle complet");
+ PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Offsets Outil");
+ PROGMEM Language_Str MSG_X_OFFSET = _UxGT("Buse 2 X");
+ PROGMEM Language_Str MSG_Y_OFFSET = _UxGT("Buse 2 Y");
+ PROGMEM Language_Str MSG_Z_OFFSET = _UxGT("Buse 2 Z");
+ PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 Chauffe lit");
+ PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Chauffe buse");
+ PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Amorce manuelle...");
+ PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Amorce longueur fixe");
+ PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Amorce terminée");
+ PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 annulé");
+ PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Sortie G26");
+ PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("G29 en cours");
+ PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Outils UBL");
+ PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Niveau lit unifié");
+ PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Maillage manuel");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Poser câle & mesurer");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Mesure");
+ PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("ôter et mesurer lit");
+ PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Aller au suivant");
+ PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Activer l'UBL");
+ PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Désactiver l'UBL");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Température lit");
+ PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Température lit");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Température buse");
+ PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Température buse");
+ PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Editer maille");
+ PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Editer maille perso");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Réglage fin maille");
+ PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Terminer maille");
+ PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Créer maille perso");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Créer maille");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = _UxGT("Créer maille ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("Créer maille ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Créer maille froide");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Ajuster haut. maille");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Hauteur");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Valider maille");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("Valider maille ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Valider maille ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Valider maille perso");
+ PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Continuer maille");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Niveau par maille");
+ PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Niveau à 3 points");
+ PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Niveau grille");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Maille de niveau");
+ PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Point latéral");
+ PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Type de carte");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Voir maille");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Voir pour hôte");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Voir pour CSV");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Voir pour sauveg.");
+ PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Voir info UBL");
+ PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Taux de remplissage");
+ PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Remplissage manuel");
+ PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Remplissage auto");
+ PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Maille remplissage");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Tout annuler");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Annuler le plus près");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Réglage fin (tous)");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Réglage fin (proche)");
+ PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Stockage maille");
+ PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Slot mémoire");
+ PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Charger maille");
+ PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Sauver maille");
+ PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("M117 Maille %i chargée");
+ PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("M117 Maille %i enreg.");
+ PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Pas de mémoire");
+ PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Err: Enreg. UBL");
+ PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Err: Ouvrir UBL");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Décal. Z arrêté");
+ PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Pas à pas");
+ PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Créer maille froide");
+ PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Remplissage auto");
+ PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Valider maille");
+ PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Réglage fin (tous)");
+ PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Valider maille");
+ PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Réglage fin (tous)");
+ PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Sauver maille");
-#define MSG_FLOW _UxGT("Flux")
-#define MSG_CONTROL _UxGT("Contrôler")
-#define MSG_MIN LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR LCD_STR_THERMOMETER _UxGT(" Facteur")
-#define MSG_AUTOTEMP _UxGT("Temp. Auto.")
-#define MSG_LCD_ON _UxGT("Marche")
-#define MSG_LCD_OFF _UxGT("Arrêt")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Sélectionner")
-#define MSG_ACC _UxGT("Accélération")
-#define MSG_JERK _UxGT("Jerk")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va jerk")
- #define MSG_VB_JERK _UxGT("Vb jerk")
- #define MSG_VC_JERK _UxGT("Vc jerk")
-#else
- #define MSG_VA_JERK _UxGT("Vx jerk")
- #define MSG_VB_JERK _UxGT("Vy jerk")
- #define MSG_VC_JERK _UxGT("Vz jerk")
-#endif
-#define MSG_VE_JERK _UxGT("Ve jerk")
-#define MSG_VELOCITY _UxGT("Vélocité")
-#define MSG_JUNCTION_DEVIATION _UxGT("Déviat. jonct.")
-#define MSG_VMAX _UxGT("Vmax ")
-#define MSG_VMIN _UxGT("Vmin ")
-#define MSG_VTRAV_MIN _UxGT("V dépl. min")
-#define MSG_ACCELERATION _UxGT("Accélération")
-#define MSG_AMAX _UxGT("Amax ")
-#define MSG_A_RETRACT _UxGT("A retrait")
-#define MSG_A_TRAVEL _UxGT("A dépl.")
-#define MSG_STEPS_PER_MM _UxGT("Pas/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("A pas/mm")
- #define MSG_BSTEPS _UxGT("B pas/mm")
- #define MSG_CSTEPS _UxGT("C pas/mm")
-#else
- #define MSG_ASTEPS _UxGT("X pas/mm")
- #define MSG_BSTEPS _UxGT("Y pas/mm")
- #define MSG_CSTEPS _UxGT("Z pas/mm")
-#endif
-#define MSG_ESTEPS _UxGT("E pas/mm")
-#define MSG_E1STEPS _UxGT("E1 pas/mm")
-#define MSG_E2STEPS _UxGT("E2 pas/mm")
-#define MSG_E3STEPS _UxGT("E3 pas/mm")
-#define MSG_E4STEPS _UxGT("E4 pas/mm")
-#define MSG_E5STEPS _UxGT("E5 pas/mm")
-#define MSG_E6STEPS _UxGT("E6 pas/mm")
-#define MSG_TEMPERATURE _UxGT("Température")
-#define MSG_MOTION _UxGT("Mouvement")
-#define MSG_FILAMENT _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E en mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Diamètre fil.")
-#define MSG_FILAMENT_UNLOAD _UxGT("Retrait mm")
-#define MSG_FILAMENT_LOAD _UxGT("Charger mm")
-#define MSG_ADVANCE_K _UxGT("Avance K")
-#define MSG_CONTRAST _UxGT("Contraste LCD")
-#define MSG_STORE_EEPROM _UxGT("Enregistrer config.")
-#define MSG_LOAD_EEPROM _UxGT("Charger config.")
-#define MSG_RESTORE_FAILSAFE _UxGT("Restaurer défauts")
-#define MSG_INIT_EEPROM _UxGT("Initialiser EEPROM")
-#define MSG_MEDIA_UPDATE _UxGT("MaJ Firmware SD")
-#define MSG_RESET_PRINTER _UxGT("RaZ imprimante")
-#define MSG_REFRESH _UxGT("Actualiser")
-#define MSG_WATCH _UxGT("Surveiller")
-#define MSG_PREPARE _UxGT("Préparer")
-#define MSG_TUNE _UxGT("Régler")
-#define MSG_START_PRINT _UxGT("Démarrer impression")
-#define MSG_BUTTON_NEXT _UxGT("Suivant")
-#define MSG_BUTTON_INIT _UxGT("Init.")
-#define MSG_BUTTON_STOP _UxGT("Stop")
-#define MSG_BUTTON_PRINT _UxGT("Imprimer")
-#define MSG_BUTTON_RESET _UxGT("Reset")
-#define MSG_BUTTON_CANCEL _UxGT("Annuler")
-#define MSG_BUTTON_DONE _UxGT("Terminé")
-#define MSG_PAUSE_PRINT _UxGT("Pause impression")
-#define MSG_RESUME_PRINT _UxGT("Reprendre impr.")
-#define MSG_STOP_PRINT _UxGT("Arrêter impr.")
-#define MSG_OUTAGE_RECOVERY _UxGT("Récupér. coupure")
-#define MSG_MEDIA_MENU _UxGT("Impression SD")
-#define MSG_NO_MEDIA _UxGT("Pas de média")
-#define MSG_DWELL _UxGT("Repos...")
-#define MSG_USERWAIT _UxGT("Attente utilis.")
-#define MSG_PRINT_PAUSED _UxGT("Impr. en pause")
-#define MSG_PRINTING _UxGT("Impression")
-#define MSG_PRINT_ABORTED _UxGT("Impr. annulée")
-#define MSG_NO_MOVE _UxGT("Moteurs bloqués")
-#define MSG_KILLED _UxGT("KILLED")
-#define MSG_STOPPED _UxGT("STOPPÉ")
-#define MSG_CONTROL_RETRACT _UxGT("Retrait mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Ech. Retr. mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Retrait V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Saut Z mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("Rappel mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Ech. Rappel mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("Rappel V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("Ech. Rappel V")
-#define MSG_AUTORETRACT _UxGT("Retrait auto")
-#define MSG_TOOL_CHANGE _UxGT("Changement outil")
-#define MSG_TOOL_CHANGE_ZLIFT _UxGT("Augmenter Z")
-#define MSG_SINGLENOZZLE_PRIME_SPD _UxGT("Vitesse primaire")
-#define MSG_SINGLENOZZLE_RETRACT_SPD _UxGT("Vitesse retrait")
-#define MSG_NOZZLE_STANDBY _UxGT("Attente buse")
-#define MSG_FILAMENT_SWAP_LENGTH _UxGT("Distance retrait")
-#define MSG_FILAMENT_PURGE_LENGTH _UxGT("Longueur de purge")
-#define MSG_FILAMENTCHANGE _UxGT("Changer filament")
-#define MSG_FILAMENTLOAD _UxGT("Charger filament")
-#define MSG_FILAMENTUNLOAD _UxGT("Retrait filament")
-#define MSG_FILAMENTUNLOAD_ALL _UxGT("Décharger tout")
-#define MSG_INIT_MEDIA _UxGT("Charger le média")
-#define MSG_CHANGE_MEDIA _UxGT("Actualiser média")
-#define MSG_RELEASE_MEDIA _UxGT("Retirer le média")
-#define MSG_ZPROBE_OUT _UxGT("Sonde Z hors lit")
-#define MSG_SKEW_FACTOR _UxGT("Facteur écart")
-#define MSG_BLTOUCH _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST _UxGT("Cmd: Self-Test")
-#define MSG_BLTOUCH_RESET _UxGT("Cmd: Reset")
-#define MSG_BLTOUCH_STOW _UxGT("Cmd: Ranger")
-#define MSG_BLTOUCH_DEPLOY _UxGT("Cmd: Déployer")
-#define MSG_BLTOUCH_SW_MODE _UxGT("Cmd: Mode SW")
-#define MSG_BLTOUCH_5V_MODE _UxGT("Cmd: Mode 5V")
-#define MSG_BLTOUCH_OD_MODE _UxGT("Cmd: Mode OD")
-#define MSG_BLTOUCH_MODE_STORE _UxGT("Appliquer Mode")
-#define MSG_BLTOUCH_MODE_STORE_5V _UxGT("Mise en 5V")
-#define MSG_BLTOUCH_MODE_STORE_OD _UxGT("Mise en OD")
-#define MSG_BLTOUCH_MODE_ECHO _UxGT("Afficher Mode")
-#define MSG_TOUCHMI_PROBE _UxGT("TouchMI")
-#define MSG_TOUCHMI_INIT _UxGT("Init. TouchMI")
-#define MSG_TOUCHMI_ZTEST _UxGT("Test décalage Z")
-#define MSG_TOUCHMI_SAVE _UxGT("Sauvegarde")
-#define MSG_MANUAL_DEPLOY_TOUCHMI _UxGT("Déployer TouchMI")
-#define MSG_MANUAL_DEPLOY _UxGT("Déployer Sonde Z")
-#define MSG_MANUAL_STOW _UxGT("Ranger Sonde Z")
-#define MSG_HOME_FIRST _UxGT("Origine %s%s%s Premier")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Décalage Z")
-#define MSG_BABYSTEP_X _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
-#define MSG_BABYSTEP_TOTAL _UxGT("Total")
-#define MSG_ENDSTOP_ABORT _UxGT("Butée abandon")
-#define MSG_HEATING_FAILED_LCD _UxGT("Err de chauffe")
-#define MSG_HEATING_FAILED_LCD_BED _UxGT("Err de chauffe lit")
-#define MSG_HEATING_FAILED_LCD_CHAMBER _UxGT("Err chauffe caisson")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Err TEMP. REDONDANTE")
-#define MSG_THERMAL_RUNAWAY _UxGT("Err THERMIQUE")
-#define MSG_THERMAL_RUNAWAY_BED _UxGT("Err THERMIQUE LIT")
-#define MSG_THERMAL_RUNAWAY_CHAMBER _UxGT("Err THERMIQUE CAISSON")
-#define MSG_ERR_MAXTEMP _UxGT("Err TEMP. MAX")
-#define MSG_ERR_MINTEMP _UxGT("Err TEMP. MIN")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Err TEMP. MAX LIT")
-#define MSG_ERR_MINTEMP_BED _UxGT("Err TEMP. MIN LIT")
-#define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Err MAXTEMP CAISSON")
-#define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err MINTEMP CAISSON")
-#define MSG_ERR_Z_HOMING _UxGT("Origine XY Premier")
+ PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Contrôle LED");
+ PROGMEM Language_Str MSG_LEDS = _UxGT("Lumière");
+ PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Préregl. LED");
+ PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Rouge");
+ PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Orange");
+ PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Jaune");
+ PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Vert");
+ PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Bleu");
+ PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
+ PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Violet");
+ PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Blanc");
+ PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Defaut");
+ PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("LEDs perso.");
+ PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Intensité rouge");
+ PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Intensité vert");
+ PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Intensité bleu");
+ PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Intensité blanc");
+ PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Luminosité");
-#define MSG_HALTED _UxGT("IMPR. STOPPÉE")
-#define MSG_PLEASE_RESET _UxGT("Redémarrer SVP")
-#define MSG_SHORT_DAY _UxGT("j") // One character only
-#define MSG_SHORT_HOUR _UxGT("h") // One character only
-#define MSG_SHORT_MINUTE _UxGT("m") // One character only
+ PROGMEM Language_Str MSG_MOVING = _UxGT("Déplacement...");
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("Débloquer XY");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Déplacer X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Déplacer Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Déplacer Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extrudeur");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Extrudeur ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Extrudeur ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Extrudeur ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Extrudeur ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Extrudeur ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Extrudeur ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Buse trop froide");
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Déplacer %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Déplacer 0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Déplacer 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Déplacer 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Vitesse");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Lit Z");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Buse");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Buse ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Buse ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Buse ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Buse ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Buse ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Buse ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Lit");
+ PROGMEM Language_Str MSG_CHAMBER = _UxGT("Caisson");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vit. ventil. ");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Vit. ventil. 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Vit. ventil. 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Vit. ventil. 3");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Extra ventil. ");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1 = _UxGT("Extra ventil. 1");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2 = _UxGT("Extra ventil. 2");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3 = _UxGT("Extra ventil. 3");
-#define MSG_HEATING _UxGT("En chauffe...")
-#define MSG_COOLING _UxGT("Refroidissement")
-#define MSG_BED_HEATING _UxGT("Lit en chauffe...")
-#define MSG_BED_COOLING _UxGT("Refroid. du lit...")
-#define MSG_CHAMBER_HEATING _UxGT("Chauffe caisson...")
-#define MSG_CHAMBER_COOLING _UxGT("Refroid. caisson...")
-#define MSG_DELTA_CALIBRATE _UxGT("Calibration Delta")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Calibrer X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Calibrer Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Calibrer Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Calibrer centre")
-#define MSG_DELTA_SETTINGS _UxGT("Réglages Delta")
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Calibration Auto")
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Hauteur Delta")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE _UxGT("Delta Z sonde")
-#define MSG_DELTA_DIAG_ROD _UxGT("Diagonale")
-#define MSG_DELTA_HEIGHT _UxGT("Hauteur")
-#define MSG_DELTA_RADIUS _UxGT("Rayon")
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Flux");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Flux ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Flux ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Flux ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Flux ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Flux ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Flux ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Contrôler");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Facteur");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Temp. Auto.");
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("Marche");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Arrêt");
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Sélectionner");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Sélectionner ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Sélectionner ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Sélectionner ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Sélectionner ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Sélectionner ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Sélectionner ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Accélération");
+ PROGMEM Language_Str MSG_JERK = _UxGT("Jerk");
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT(" jerk");
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT(" jerk");
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT(" jerk");
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve jerk");
+ PROGMEM Language_Str MSG_VELOCITY = _UxGT("Vélocité");
+ PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Déviat. jonct.");
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("V dépl. min");
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Accélération");
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A retrait");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A dépl.");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Pas/mm");
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" pas/mm");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" pas/mm");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" pas/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("E pas/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT(" pas/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT(" pas/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT(" pas/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT(" pas/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT(" pas/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT(" pas/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Température");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Mouvement");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm3");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Diamètre fil.");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Diamètre fil. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Diamètre fil. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Diamètre fil. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Diamètre fil. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Diamètre fil. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Diamètre fil. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Retrait mm");
+ PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Charger mm");
+ PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Avance K");
+ PROGMEM Language_Str MSG_ADVANCE_K_E0 = _UxGT("Avance K ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_ADVANCE_K_E1 = _UxGT("Avance K ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_ADVANCE_K_E2 = _UxGT("Avance K ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_ADVANCE_K_E3 = _UxGT("Avance K ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_ADVANCE_K_E4 = _UxGT("Avance K ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_ADVANCE_K_E5 = _UxGT("Avance K ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contraste LCD");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Enregistrer config.");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Charger config.");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Restaurer défauts");
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Initialiser EEPROM");
+ PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("MaJ Firmware SD");
+ PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("RaZ imprimante");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Actualiser");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Surveiller");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Préparer");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Régler");
+ PROGMEM Language_Str MSG_START_PRINT = _UxGT("Démarrer impression");
+ PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Suivant");
+ PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Init.");
+ PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Stop");
+ PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Imprimer");
+ PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Reset");
+ PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Annuler");
+ PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Terminé");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pause impression");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Reprendre impr.");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Arrêter impr.");
+ PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Récupér. coupure");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Impression SD");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Pas de média");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Repos...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Attente utilis.");
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Impr. en pause");
+ PROGMEM Language_Str MSG_PRINTING = _UxGT("Impression");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Impr. annulée");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Moteurs bloqués");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("KILLED");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("STOPPÉ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retrait mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Ech. Retr. mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retrait V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Saut Z mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Rappel mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Ech. Rappel mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Rappel V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Ech. Rappel V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Retrait auto");
+ PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Changement outil");
+ PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Augmenter Z");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD = _UxGT("Vitesse primaire");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD = _UxGT("Vitesse retrait");
+ PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Attente buse");
+ PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Distance retrait");
+ PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Longueur de purge");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Changer filament");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Changer filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Changer filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Changer filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Changer filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Changer filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Changer filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Charger filament");
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E0 = _UxGT("Charger filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E1 = _UxGT("Charger filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E2 = _UxGT("Charger filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E3 = _UxGT("Charger filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E4 = _UxGT("Charger filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E5 = _UxGT("Charger filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0 = _UxGT("Retrait filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1 = _UxGT("Retrait filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2 = _UxGT("Retrait filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3 = _UxGT("Retrait filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4 = _UxGT("Retrait filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5 = _UxGT("Retrait filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Décharger tout");
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Charger le média");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Actualiser média");
+ PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Retirer le média");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonde Z hors lit");
+ PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Facteur écart");
+ PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Cmd: Self-Test");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Cmd: Reset");
+ PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Cmd: Ranger");
+ PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Cmd: Déployer");
+ PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("Cmd: Mode SW");
+ PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("Cmd: Mode 5V");
+ PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("Cmd: Mode OD");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Appliquer Mode");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Mise en 5V");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Mise en OD");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Afficher Mode");
+ PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Init. TouchMI");
+ PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Test décalage Z");
+ PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Sauvegarde");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Déployer TouchMI");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Déployer Sonde Z");
+ PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Ranger Sonde Z");
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Origine %s%s%s Premier");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Décalage Z");
+ PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Total");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Butée abandon");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Err de chauffe");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Err TEMP. REDONDANTE");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("Err THERMIQUE");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err TEMP. MAX");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err TEMP. MIN");
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Origine XY Premier");
-#define MSG_INFO_MENU _UxGT("Infos imprimante")
-#define MSG_INFO_PRINTER_MENU _UxGT("Infos imprimante")
-#define MSG_3POINT_LEVELING _UxGT("Niveau à 3 points")
-#define MSG_LINEAR_LEVELING _UxGT("Niveau linéaire")
-#define MSG_BILINEAR_LEVELING _UxGT("Niveau bilinéaire")
-#define MSG_UBL_LEVELING _UxGT("Niveau lit unifié")
-#define MSG_MESH_LEVELING _UxGT("Niveau maillage")
-#define MSG_INFO_STATS_MENU _UxGT("Stats. imprimante")
-#define MSG_INFO_BOARD_MENU _UxGT("Infos carte")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Thermistances")
-#define MSG_INFO_EXTRUDERS _UxGT("Extrudeurs")
-#define MSG_INFO_BAUDRATE _UxGT("Bauds")
-#define MSG_INFO_PROTOCOL _UxGT("Protocole")
-#define MSG_CASE_LIGHT _UxGT("Lumière caisson")
-#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Luminosité")
+ PROGMEM Language_Str MSG_HALTED = _UxGT("IMPR. STOPPÉE");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Redémarrer SVP");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("j"); // One character only
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
-#define MSG_EXPECTED_PRINTER _UxGT("Imprimante incorrecte")
+ PROGMEM Language_Str MSG_HEATING = _UxGT("En chauffe...");
+ PROGMEM Language_Str MSG_COOLING = _UxGT("Refroidissement");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Lit en chauffe...");
+ PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Refroid. du lit...");
+ PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Chauffe caisson...");
+ PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Refroid. caisson...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibration Delta");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibrer X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrer Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrer Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrer centre");
+ PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Réglages Delta");
+ PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Calibration Auto");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Hauteur Delta");
+ PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Delta Z sonde");
+ PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Diagonale");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Hauteur");
+ PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Rayon");
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Nbre impressions")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Terminées")
- #define MSG_INFO_PRINT_TIME _UxGT("Tps impr. total")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Impr. la + longue")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Total filament")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Impressions")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Terminées")
- #define MSG_INFO_PRINT_TIME _UxGT("Total")
- #define MSG_INFO_PRINT_LONGEST _UxGT("+ long")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Filament")
-#endif
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Infos imprimante");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Infos imprimante");
+ PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("Niveau à 3 points");
+ PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Niveau linéaire");
+ PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Niveau bilinéaire");
+ PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Niveau lit unifié");
+ PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Niveau maillage");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Stats. imprimante");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Infos carte");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistances");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrudeurs");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Bauds");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocole");
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Lumière caisson");
+ PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Luminosité");
-#define MSG_INFO_MIN_TEMP _UxGT("Temp Min")
-#define MSG_INFO_MAX_TEMP _UxGT("Temp Max")
-#define MSG_INFO_PSU _UxGT("Alimentation")
-#define MSG_DRIVE_STRENGTH _UxGT("Puiss. moteur ")
-#define MSG_DAC_PERCENT _UxGT("Driver %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM sauv.")
-#define MSG_ERROR_TMC _UxGT("ERREUR CONNEXION TMC")
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Imprimante incorrecte");
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("IMPR. PAUSE")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("CHARGER FIL")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("DECHARGER FIL")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("OPTIONS REPRISE:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Purger encore")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Reprendre impr.")
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Buse: ")
-#define MSG_RUNOUT_SENSOR _UxGT("Capteur fil.")
-#define MSG_ERR_HOMING_FAILED _UxGT("Echec origine")
-#define MSG_ERR_PROBING_FAILED _UxGT("Echec sonde")
-#define MSG_M600_TOO_COLD _UxGT("M600: Trop froid")
-#define MSG_MMU2_FILAMENT_CHANGE_HEADER _UxGT("CHANGER FILAMENT")
-#define MSG_MMU2_CHOOSE_FILAMENT_HEADER _UxGT("CHOISIR FILAMENT")
-#define MSG_MMU2_MENU _UxGT("MMU")
-#define MSG_MMU2_WRONG_FIRMWARE _UxGT("Update MMU firmware!")
-#define MSG_MMU2_NOT_RESPONDING _UxGT("MMU ne répond plus")
-#define MSG_MMU2_RESUME _UxGT("Continuer impr.")
-#define MSG_MMU2_RESUMING _UxGT("Reprise...")
-#define MSG_MMU2_LOAD_FILAMENT _UxGT("Charger filament")
-#define MSG_MMU2_LOAD_ALL _UxGT("Charger tous")
-#define MSG_MMU2_LOAD_TO_NOZZLE _UxGT("Charger dans buse")
-#define MSG_MMU2_EJECT_FILAMENT _UxGT("Ejecter filament")
-#define MSG_MMU2_EJECT_FILAMENT0 _UxGT("Ejecter fil. 1")
-#define MSG_MMU2_EJECT_FILAMENT1 _UxGT("Ejecter fil. 2")
-#define MSG_MMU2_EJECT_FILAMENT2 _UxGT("Ejecter fil. 3")
-#define MSG_MMU2_EJECT_FILAMENT3 _UxGT("Ejecter fil. 4")
-#define MSG_MMU2_EJECT_FILAMENT4 _UxGT("Ejecter fil. 5")
-#define MSG_MMU2_UNLOAD_FILAMENT _UxGT("Retrait filament")
-#define MSG_MMU2_LOADING_FILAMENT _UxGT("Chargem. fil. %i...")
-#define MSG_MMU2_EJECTING_FILAMENT _UxGT("Ejection fil...")
-#define MSG_MMU2_UNLOADING_FILAMENT _UxGT("Retrait fil....")
-#define MSG_MMU2_ALL _UxGT("Tous")
-#define MSG_MMU2_FILAMENT0 _UxGT("Filament 1")
-#define MSG_MMU2_FILAMENT1 _UxGT("Filament 2")
-#define MSG_MMU2_FILAMENT2 _UxGT("Filament 3")
-#define MSG_MMU2_FILAMENT3 _UxGT("Filament 4")
-#define MSG_MMU2_FILAMENT4 _UxGT("Filament 5")
-#define MSG_MMU2_RESET _UxGT("Réinit. MMU")
-#define MSG_MMU2_RESETTING _UxGT("Réinit. MMU...")
-#define MSG_MMU2_EJECT_RECOVER _UxGT("Retrait, click")
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Nbre impressions");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Terminées");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tps impr. total");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Impr. la + longue");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total filament");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Impressions");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Terminées");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("+ long");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Filament");
+ #endif
-#define MSG_MIX _UxGT("Mix")
-#define MSG_MIX_COMPONENT _UxGT("Composante")
-#define MSG_MIXER _UxGT("Mixeur")
-#define MSG_GRADIENT _UxGT("Dégradé")
-#define MSG_FULL_GRADIENT _UxGT("Dégradé complet")
-#define MSG_TOGGLE_MIX _UxGT("Toggle mix")
-#define MSG_CYCLE_MIX _UxGT("Cycle mix")
-#define MSG_GRADIENT_MIX _UxGT("Mix dégradé")
-#define MSG_REVERSE_GRADIENT _UxGT("Inverser dégradé")
-#define MSG_ACTIVE_VTOOL _UxGT("Active V-tool")
-#define MSG_START_VTOOL _UxGT("Début V-tool")
-#define MSG_END_VTOOL _UxGT(" Fin V-tool")
-#define MSG_GRADIENT_ALIAS _UxGT("Alias V-tool")
-#define MSG_RESET_VTOOLS _UxGT("Réinit. V-tools")
-#define MSG_COMMIT_VTOOL _UxGT("Valider Mix V-tool")
-#define MSG_VTOOLS_RESET _UxGT("V-tools réinit. ok")
-#define MSG_START_Z _UxGT("Début Z")
-#define MSG_END_Z _UxGT(" Fin Z")
-#define MSG_GAMES _UxGT("Jeux")
-#define MSG_BRICKOUT _UxGT("Casse-briques")
-#define MSG_INVADERS _UxGT("Invaders")
-#define MSG_SNAKE _UxGT("Sn4k3")
-#define MSG_MAZE _UxGT("Labyrinthe")
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Temp Min");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Temp Max");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Alimentation");
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Puiss. moteur ");
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("Driver %");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM sauv.");
+ PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("ERREUR CONNEXION TMC");
-#if LCD_HEIGHT >= 4
- // Up to 3 lines allowed
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Presser bouton")
- #define MSG_ADVANCED_PAUSE_WAITING_2 _UxGT("pour reprendre")
- #define MSG_PAUSE_PRINT_INIT_1 _UxGT("Parking...")
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Attente filament")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("pour démarrer")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insérer filament")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("et app. bouton")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("pour continuer...")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Presser le bouton")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("pour chauffer...")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Buse en chauffe")
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Patienter SVP...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Attente")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("retrait du filament")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Attente")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("chargement filament")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Attente")
- #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("Purge filament")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Presser pour finir")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_2 _UxGT("la purge du filament")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Attente reprise")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("impression")
-#else // LCD_HEIGHT < 4
- // Up to 2 lines allowed
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Clic pour continuer")
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Patience...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insérer fil.")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Chauffer ?")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Chauffage...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Retrait fil...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Chargement...")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Purge...")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Terminer ?")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Reprise...")
-#endif // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("CHANGER FILAMENT");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPR. PAUSE");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CHARGER FIL");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DECHARGER FIL");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPTIONS REPRISE:");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purger encore");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Reprendre impr.");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Buse: ");
+ PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Capteur fil.");
+ PROGMEM Language_Str MSG_LCD_HOMING_FAILED = _UxGT("Echec origine");
+ PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Echec sonde");
+ PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: Trop froid");
-#define MSG_TMC_DRIVERS _UxGT("Drivers TMC")
-#define MSG_TMC_CURRENT _UxGT("Courant driver")
-#define MSG_TMC_HYBRID_THRS _UxGT("Seuil hybride")
-#define MSG_TMC_HOMING_THRS _UxGT("Home sans capteur")
-#define MSG_TMC_STEPPING_MODE _UxGT("Mode pas à pas")
-#define MSG_TMC_STEALTH_ENABLED _UxGT("StealthChop activé")
-#define MSG_SERVICE_RESET _UxGT("Réinit.")
-#define MSG_SERVICE_IN _UxGT(" dans:")
-#define MSG_BACKLASH _UxGT("Backlash")
-#define MSG_BACKLASH_CORRECTION _UxGT("Correction")
-#define MSG_BACKLASH_SMOOTHING _UxGT("Lissage")
+ PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("CHOISIR FILAMENT");
+ PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
+ PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU ne répond plus");
+ PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Continuer impr.");
+ PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Reprise...");
+ PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Charger filament");
+ PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Charger tous");
+ PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Charger dans buse");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Ejecter filament");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT0 = _UxGT("Ejecter fil. 1");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT1 = _UxGT("Ejecter fil. 2");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT2 = _UxGT("Ejecter fil. 3");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT3 = _UxGT("Ejecter fil. 4");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT4 = _UxGT("Ejecter fil. 5");
+ PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Retrait filament");
+ PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Chargem. fil. %i...");
+ PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Ejection fil...");
+ PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Retrait fil....");
+ PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Tous");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT0 = _UxGT("Filament 1");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT1 = _UxGT("Filament 2");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT2 = _UxGT("Filament 3");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT3 = _UxGT("Filament 4");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT4 = _UxGT("Filament 5");
+ PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Réinit. MMU");
+ PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Réinit. MMU...");
+ PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Retrait, click");
+
+ PROGMEM Language_Str MSG_MIX_COMPONENT_1 = _UxGT("Composante 1");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_2 = _UxGT("Composante 2");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_3 = _UxGT("Composante 3");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_4 = _UxGT("Composante 4");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_5 = _UxGT("Composante 5");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_6 = _UxGT("Composante 6");
+ PROGMEM Language_Str MSG_MIXER = _UxGT("Mixeur");
+ PROGMEM Language_Str MSG_GRADIENT = _UxGT("Dégradé");
+ PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Dégradé complet");
+ PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Toggle mix");
+ PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Cycle mix");
+ PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Mix dégradé");
+ PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Inverser dégradé");
+ PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Active V-tool");
+ PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Début V-tool");
+ PROGMEM Language_Str MSG_END_VTOOL = _UxGT(" Fin V-tool");
+ PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
+ PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Réinit. V-tools");
+ PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Valider Mix V-tool");
+ PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-tools réinit. ok");
+ PROGMEM Language_Str MSG_START_Z = _UxGT("Début Z:");
+ PROGMEM Language_Str MSG_END_Z = _UxGT(" Fin Z:");
+ PROGMEM Language_Str MSG_GAMES = _UxGT("Jeux");
+ PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Casse-briques");
+ PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
+ PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
+ PROGMEM Language_Str MSG_MAZE = _UxGT("Labyrinthe");
+
+ #if LCD_HEIGHT >= 4
+ // Up to 3 lines allowed
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Presser bouton", "pour reprendre"));
+ PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Parking..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Attente filament", "pour démarrer"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Insérer filament", "et app. bouton", "pour continuer..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Presser le bouton", "pour chauffer..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Buse en chauffe", "Patienter SVP..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Attente", "retrait du filament"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Attente", "chargement filament"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Attente", "Purge filament"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Presser pour finir", "la purge du filament"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Attente reprise", "impression"));
+ #else // LCD_HEIGHT < 4
+ // Up to 2 lines allowed
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Clic pour continuer"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Patience..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insérer fil."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Chauffer ?"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Chauffage..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Retrait fil..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Chargement..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purge..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Terminer ?"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Reprise..."));
+ #endif // LCD_HEIGHT < 4
+
+ PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Courant driver");
+ PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Seuil hybride");
+ PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Home sans capteur");
+ PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Mode pas à pas");
+ PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop activé");
+ PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Réinit.");
+ PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" dans:");
+ PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Correction");
+ PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Lissage");
+}
diff --git a/Marlin/src/lcd/language/language_gl.h b/Marlin/src/lcd/language/language_gl.h
index 0de6382e54a7..554230ca359d 100644
--- a/Marlin/src/lcd/language/language_gl.h
+++ b/Marlin/src/lcd/language/language_gl.h
@@ -32,222 +32,241 @@
#define DISPLAY_CHARSET_ISO10646_1
#define NOT_EXTENDED_ISO10646_1_5X7
-#define WELCOME_MSG MACHINE_NAME _UxGT(" lista.")
-#define MSG_MEDIA_INSERTED _UxGT("Tarxeta inserida")
-#define MSG_MEDIA_REMOVED _UxGT("Tarxeta retirada")
-#define MSG_LCD_ENDSTOPS _UxGT("FinCarro")
-#define MSG_MAIN _UxGT("Menu principal")
-#define MSG_AUTOSTART _UxGT("Autoarranque")
-#define MSG_DISABLE_STEPPERS _UxGT("Apagar motores")
-#define MSG_AUTO_HOME _UxGT("Ir a orixe")
-#define MSG_AUTO_HOME_X _UxGT("Ir orixe X")
-#define MSG_AUTO_HOME_Y _UxGT("Ir orixe Y")
-#define MSG_AUTO_HOME_Z _UxGT("Ir orixe Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Ir orixes XYZ")
-#define MSG_LEVEL_BED_WAITING _UxGT("Prema pulsador")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Seguinte punto")
-#define MSG_LEVEL_BED_DONE _UxGT("Nivelado feito")
-#define MSG_SET_HOME_OFFSETS _UxGT("Offsets na orixe")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Offsets fixados")
-#define MSG_SET_ORIGIN _UxGT("Fixar orixe")
-#define MSG_PREHEAT_1 _UxGT("Prequentar " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N _UxGT("Prequentar " PREHEAT_1_LABEL " ")
-#define MSG_PREHEAT_1_ALL _UxGT("Preque. " PREHEAT_1_LABEL " Todo")
-#define MSG_PREHEAT_1_BEDONLY _UxGT("Preque. " PREHEAT_1_LABEL " Cama")
-#define MSG_PREHEAT_1_SETTINGS _UxGT("Preque. " PREHEAT_1_LABEL " conf")
-#define MSG_PREHEAT_2 _UxGT("Prequentar " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N _UxGT("Prequentar " PREHEAT_2_LABEL " ")
-#define MSG_PREHEAT_2_ALL _UxGT("Preque. " PREHEAT_2_LABEL " Todo")
-#define MSG_PREHEAT_2_BEDONLY _UxGT("Preque. " PREHEAT_2_LABEL " Cama")
-#define MSG_PREHEAT_2_SETTINGS _UxGT("Preque. " PREHEAT_2_LABEL " conf")
-#define MSG_COOLDOWN _UxGT("Arrefriar")
-#define MSG_SWITCH_PS_ON _UxGT("Acender")
-#define MSG_SWITCH_PS_OFF _UxGT("Apagar")
-#define MSG_EXTRUDE _UxGT("Extrudir")
-#define MSG_RETRACT _UxGT("Retraer")
-#define MSG_MOVE_AXIS _UxGT("Mover eixe")
-#define MSG_BED_LEVELING _UxGT("Nivelar cama")
-#define MSG_LEVEL_BED _UxGT("Nivelar cama")
-#define MSG_MOVE_X _UxGT("Mover X")
-#define MSG_MOVE_Y _UxGT("Mover Y")
-#define MSG_MOVE_Z _UxGT("Mover Z")
-#define MSG_MOVE_E _UxGT("Extrusor")
-#define MSG_MOVE_Z_DIST _UxGT("Mover %smm")
-#define MSG_MOVE_01MM _UxGT("Mover 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Mover 1mm")
-#define MSG_MOVE_10MM _UxGT("Mover 10mm")
-#define MSG_SPEED _UxGT("Velocidade")
-#define MSG_BED_Z _UxGT("Cama Z")
-#define MSG_NOZZLE _UxGT("Bico")
-#define MSG_BED _UxGT("Cama")
-#define MSG_FAN_SPEED _UxGT("Velocidade vent.")
-#define MSG_FLOW _UxGT("Fluxo")
-//#define MSG_CONTROL _UxGT("Control")
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-//#define MSG_AUTOTEMP _UxGT("Autotemp")
-//#define MSG_LCD_ON _UxGT("On")
-//#define MSG_LCD_OFF _UxGT("Off")
-//#define MSG_PID_P _UxGT("PID-P")
-//#define MSG_PID_I _UxGT("PID-I")
-//#define MSG_PID_D _UxGT("PID-D")
-//#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Escolla")
-#define MSG_ACC _UxGT("Acel")
-//#define MSG_JERK _UxGT("Jerk")
-//#if IS_KINEMATIC
-// #define MSG_VA_JERK _UxGT("Va-jerk")
-// #define MSG_VB_JERK _UxGT("Vb-jerk")
-// #define MSG_VC_JERK _UxGT("Vc-jerk")
-//#else
-// #define MSG_VA_JERK _UxGT("Vx-jerk")
-// #define MSG_VB_JERK _UxGT("Vy-jerk")
-// #define MSG_VC_JERK _UxGT("Vz-jerk")
-//#endif
-//#define MSG_VE_JERK _UxGT("Ve-jerk")
-//#define MSG_VMAX _UxGT("Vmax ")
-//#define MSG_VMIN _UxGT("Vmin")
-//#define MSG_VTRAV_MIN _UxGT("VTrav min")
-//#define MSG_AMAX _UxGT("Amax ")
-//#define MSG_A_RETRACT _UxGT("A-retract")
-//#define MSG_A_TRAVEL _UxGT("A-travel")
-#define MSG_STEPS_PER_MM _UxGT("Pasos/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("A pasos/mm")
- #define MSG_BSTEPS _UxGT("B pasos/mm")
- #define MSG_CSTEPS _UxGT("C pasos/mm")
-#else
- #define MSG_ASTEPS _UxGT("X pasos/mm")
- #define MSG_BSTEPS _UxGT("Y pasos/mm")
- #define MSG_CSTEPS _UxGT("Z pasos/mm")
-#endif
-#define MSG_ESTEPS _UxGT("E pasos/mm")
-#define MSG_E1STEPS _UxGT("E1 pasos/mm")
-#define MSG_E2STEPS _UxGT("E2 pasos/mm")
-#define MSG_E3STEPS _UxGT("E3 pasos/mm")
-#define MSG_E4STEPS _UxGT("E4 pasos/mm")
-#define MSG_E5STEPS _UxGT("E5 pasos/mm")
-#define MSG_E6STEPS _UxGT("E6 pasos/mm")
-#define MSG_TEMPERATURE _UxGT("Temperatura")
-#define MSG_MOTION _UxGT("Movemento")
-#define MSG_FILAMENT _UxGT("Filamento")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E en mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Diam. fil.")
-#define MSG_CONTRAST _UxGT("Constraste LCD")
-#define MSG_STORE_EEPROM _UxGT("Gardar en memo.")
-#define MSG_LOAD_EEPROM _UxGT("Cargar de memo.")
-#define MSG_RESTORE_FAILSAFE _UxGT("Cargar de firm.")
-#define MSG_REFRESH _UxGT("Volver a cargar")
-#define MSG_WATCH _UxGT("Monitorizacion")
-#define MSG_PREPARE _UxGT("Preparar")
-#define MSG_TUNE _UxGT("Axustar")
-#define MSG_PAUSE_PRINT _UxGT("Pausar impres.")
-#define MSG_RESUME_PRINT _UxGT("Seguir impres.")
-#define MSG_STOP_PRINT _UxGT("Deter impres.")
-#define MSG_MEDIA_MENU _UxGT("Tarxeta SD")
-#define MSG_NO_MEDIA _UxGT("Sen tarxeta SD")
-#define MSG_DWELL _UxGT("En repouso...")
-#define MSG_USERWAIT _UxGT("A espera...")
-#define MSG_PRINT_ABORTED _UxGT("Impre. cancelada")
-#define MSG_NO_MOVE _UxGT("Sen movemento.")
-#define MSG_KILLED _UxGT("PROGRAMA MORTO")
-#define MSG_STOPPED _UxGT("PROGRAMA PARADO")
-#define MSG_CONTROL_RETRACT _UxGT("Retraccion mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Cambio retra. mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Retraccion V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Alzar Z mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("Recup. retra. mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Cambio recup. mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("Recuperacion V")
-#define MSG_AUTORETRACT _UxGT("Retraccion auto.")
-#define MSG_FILAMENTCHANGE _UxGT("Cambiar filamen.")
-#define MSG_INIT_MEDIA _UxGT("Iniciando SD")
-#define MSG_CHANGE_MEDIA _UxGT("Cambiar SD")
-#define MSG_ZPROBE_OUT _UxGT("Sonda-Z sen cama")
-//#define MSG_HOME_FIRST _UxGT("Home %s%s%s first")
-#define MSG_BLTOUCH_SELFTEST _UxGT("Comprobar BLTouch")
-#define MSG_BLTOUCH_RESET _UxGT("Iniciar BLTouch")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Offset Z")
-#define MSG_BABYSTEP_X _UxGT("Micropaso X")
-#define MSG_BABYSTEP_Y _UxGT("Micropaso Y")
-#define MSG_BABYSTEP_Z _UxGT("Micropaso Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Erro fin carro")
-#define MSG_HEATING_FAILED_LCD _UxGT("Fallo quentando")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Erro temperatura")
-#define MSG_THERMAL_RUNAWAY _UxGT("Temp. excesiva")
-//#define MSG_ERR_MAXTEMP _UxGT("Err: temp. max.")
-//#define MSG_ERR_MINTEMP _UxGT("Err: temp. min.")
-//#define MSG_ERR_MAXTEMP_BED _UxGT("Err: MAXTEMP BED")
-//#define MSG_ERR_MINTEMP_BED _UxGT("Err: MINTEMP BED")
-//#define MSG_ERR_Z_HOMING _UxGT("Home XY first")
-#define MSG_HALTED _UxGT("SISTEMA MORTO")
-#define MSG_PLEASE_RESET _UxGT("Debe reiniciar!")
-//#define MSG_SHORT_DAY _UxGT("d") // One character only
-//#define MSG_SHORT_HOUR _UxGT("h") // One character only
-//#define MSG_SHORT_MINUTE _UxGT("m") // One character only
-#define MSG_HEATING _UxGT("Quentando...")
-#define MSG_BED_HEATING _UxGT("Quentando cama...")
-#define MSG_DELTA_CALIBRATE _UxGT("Calibracion Delta")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Calibrar X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Calibrar Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Calibrar Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Calibrar Centro")
-#define MSG_INFO_MENU _UxGT("Acerca de...")
-#define MSG_INFO_PRINTER_MENU _UxGT("Informacion")
-#define MSG_INFO_STATS_MENU _UxGT("Estadisticas")
-#define MSG_INFO_BOARD_MENU _UxGT("Placa nai")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Termistores")
-#define MSG_INFO_EXTRUDERS _UxGT("Extrusores")
-#define MSG_INFO_BAUDRATE _UxGT("Baudios")
-#define MSG_INFO_PROTOCOL _UxGT("Protocolo")
-#define MSG_CASE_LIGHT _UxGT("Luz")
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Total traballos")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Total completos")
- #define MSG_INFO_PRINT_TIME _UxGT("Tempo impresion")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Traballo +longo")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Total extruido")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Traballos")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Completos")
- #define MSG_INFO_PRINT_TIME _UxGT("Tempo")
- #define MSG_INFO_PRINT_LONGEST _UxGT("O +longo")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Extruido")
-#endif
-#define MSG_INFO_MIN_TEMP _UxGT("Min Temp")
-#define MSG_INFO_MAX_TEMP _UxGT("Max Temp")
-#define MSG_INFO_PSU _UxGT("Fonte alime.")
-#define MSG_DRIVE_STRENGTH _UxGT("Potencia motor")
-#define MSG_DAC_PERCENT _UxGT("Motor %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("Garda DAC EEPROM")
+namespace Language_gl {
+ using namespace Language_en; // Inherit undefined strings from English
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Segue traballo")
+ constexpr uint8_t CHARSIZE = 1;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Galician");
-#define MSG_EXPECTED_PRINTER _UxGT("Impresora incorrecta")
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" lista.");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Tarxeta inserida");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Tarxeta retirada");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("FinCarro");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Menu principal");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autoarranque");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Apagar motores");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Ir a orixe");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Ir orixe X");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Ir orixe Y");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Ir orixe Z");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Ir orixes XYZ");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Prema pulsador");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Seguinte punto");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Nivelado feito");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Offsets na orixe");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets fixados");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Fixar orixe");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Prequentar ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Prequentar ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Prequentar ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Prequentar ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Prequentar ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Prequentar ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Prequentar ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Todo");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Cama");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" conf");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Prequentar ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Prequentar ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Prequentar ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Prequentar ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Prequentar ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Prequentar ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Prequentar ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Bico");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Todo");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" Cama");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Preque. ") PREHEAT_2_LABEL _UxGT(" conf");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Arrefriar");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Acender");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Apagar");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrudir");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Retraer");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Mover eixe");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Nivelar cama");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Nivelar cama");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Mover X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Mover Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Mover Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extrusor");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Extrusor ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Extrusor ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Extrusor ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Extrusor ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Extrusor ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Extrusor ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Mover %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mover 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mover 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Velocidade");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Cama Z");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Bico");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Bico ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Bico ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Bico ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Bico ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Bico ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Bico ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Cama");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Velocidade vent.");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Velocidade vent. 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Velocidade vent. 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Velocidade vent. 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Fluxo");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Fluxo ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Fluxo ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Fluxo ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Fluxo ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Fluxo ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Fluxo ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Escolla");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Escolla ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Escolla ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Escolla ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Escolla ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Escolla ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Escolla ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Acel");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Pasos/mm");
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("E pasos/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT(" pasos/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Movemento");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filamento");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm3");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Diam. fil.");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Diam. fil. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Diam. fil. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Diam. fil. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Diam. fil. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Diam. fil. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Diam. fil. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("Constraste LCD");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Gardar en memo.");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Cargar de memo.");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Cargar de firm.");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Volver a cargar");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Monitorizacion");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Preparar");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Axustar");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausar impres.");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Seguir impres.");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Deter impres.");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Tarxeta SD");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Sen tarxeta SD");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("En repouso...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("A espera...");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Impre. cancelada");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Sen movemento.");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("PROGRAMA MORTO");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("PROGRAMA PARADO");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retraccion mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Cambio retra. mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retraccion V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Alzar Z mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Recup. retra. mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Cambio recup. mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Recuperacion V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Retraccion auto.");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Cambiar filamen.");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Cambiar filamen. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Cambiar filamen. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Cambiar filamen. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Cambiar filamen. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Cambiar filamen. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Cambiar filamen. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Iniciando SD");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Cambiar SD");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda-Z sen cama");
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Comprobar BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Iniciar BLTouch");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Offset Z");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Micropaso X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Micropaso Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Micropaso Z");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Erro fin carro");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Fallo quentando");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Erro temperatura");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("Temp. excesiva");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("SISTEMA MORTO");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Debe reiniciar!");
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Quentando...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Quentando cama...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibracion Delta");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Acerca de...");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Informacion");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Estadisticas");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Placa nai");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistores");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrusores");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baudios");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocolo");
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Luz");
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Total traballos");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Total completos");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tempo impresion");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Traballo +longo");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total extruido");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Traballos");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completos");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tempo");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("O +longo");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extruido");
+ #endif
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Fonte alime.");
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Potencia motor");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Garda DAC EEPROM");
-#if LCD_HEIGHT >= 4
- // Up to 3 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Agarde para")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("iniciar troco")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("de filamento")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Agarde pola")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("descarga do")
- #define MSG_FILAMENT_CHANGE_UNLOAD_3 _UxGT("filamento")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Introduza o")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("filamento e")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("faga click")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Agarde pola")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("carga do")
- #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("filamento")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Agarde para")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("seguir co")
- #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("traballo")
-#else // LCD_HEIGHT < 4
- // Up to 2 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Agarde...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Descargando...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Introduza e click")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Cargando...")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Seguindo...")
-#endif // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Segue traballo");
+
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Impresora incorrecta");
+
+ #if LCD_HEIGHT >= 4
+ // Up to 3 lines allowed
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Agarde para", "iniciar troco", "de filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Agarde pola", "descarga do", "filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Introduza o", "filamento e", "faga click"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Agarde pola", "carga do", "filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Agarde para", "seguir co", "traballo"));
+ #else // LCD_HEIGHT < 4
+ // Up to 2 lines allowed
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Agarde..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Descargando..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Introduza e click"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Cargando..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Seguindo..."));
+ #endif // LCD_HEIGHT < 4
+}
diff --git a/Marlin/src/lcd/language/language_hr.h b/Marlin/src/lcd/language/language_hr.h
index 6b46d730f257..06822b3ccfe3 100644
--- a/Marlin/src/lcd/language/language_hr.h
+++ b/Marlin/src/lcd/language/language_hr.h
@@ -30,223 +30,181 @@
*/
#define DISPLAY_CHARSET_ISO10646_1 // use the better font on full graphic displays.
-#define CHARSIZE 2
-#define WELCOME_MSG MACHINE_NAME _UxGT(" spreman.")
-#define MSG_MEDIA_INSERTED _UxGT("SD kartica umetnuta")
-#define MSG_MEDIA_REMOVED _UxGT("SD kartica uklonjena")
-//#define MSG_LCD_ENDSTOPS _UxGT("Endstops") // Max length 8 characters
-//#define MSG_MAIN _UxGT("Main")
-#define MSG_AUTOSTART _UxGT("Auto pokretanje")
-#define MSG_DISABLE_STEPPERS _UxGT("Ugasi steppere")
-#define MSG_AUTO_HOME _UxGT("Automatski homing")
-#define MSG_AUTO_HOME_X _UxGT("Home-aj X")
-#define MSG_AUTO_HOME_Y _UxGT("Home-aj Y")
-#define MSG_AUTO_HOME_Z _UxGT("Home-aj Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Home-aj XYZ")
-#define MSG_LEVEL_BED_WAITING _UxGT("Klikni za početak")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Sljedeća točka")
-#define MSG_LEVEL_BED_DONE _UxGT("Niveliranje gotovo!")
-#define MSG_SET_HOME_OFFSETS _UxGT("Postavi home offsete")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Offsets postavljeni")
-#define MSG_SET_ORIGIN _UxGT("Postavi ishodište")
-#define MSG_PREHEAT_1 _UxGT("Predgrij " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" Sve")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" Bed")
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" conf")
-#define MSG_PREHEAT_2 _UxGT("Predgrij " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" Sve")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" Bed")
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" conf")
-#define MSG_COOLDOWN _UxGT("Hlađenje")
-#define MSG_SWITCH_PS_ON _UxGT("Uključi napajanje")
-#define MSG_SWITCH_PS_OFF _UxGT("Isključi napajanje")
-//#define MSG_EXTRUDE _UxGT("Extrude")
-//#define MSG_RETRACT _UxGT("Retract")
-#define MSG_MOVE_AXIS _UxGT("Miči os")
-#define MSG_BED_LEVELING _UxGT("Niveliraj bed")
-#define MSG_LEVEL_BED _UxGT("Niveliraj bed")
-#define MSG_MOVE_X _UxGT("Miči X")
-#define MSG_MOVE_Y _UxGT("Miči Y")
-#define MSG_MOVE_Z _UxGT("Miči Z")
-//#define MSG_MOVE_E _UxGT("Extruder")
-#define MSG_MOVE_Z_DIST _UxGT("Miči %smm")
-#define MSG_MOVE_01MM _UxGT("Miči 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Miči 1mm")
-#define MSG_MOVE_10MM _UxGT("Miči 10mm")
-#define MSG_SPEED _UxGT("Brzina")
-#define MSG_BED_Z _UxGT("Bed Z")
-#define MSG_NOZZLE _UxGT("Dizna")
-#define MSG_BED _UxGT("Bed")
-#define MSG_FAN_SPEED _UxGT("Brzina ventilatora")
-//#define MSG_FLOW _UxGT("Flow")
-//#define MSG_CONTROL _UxGT("Control")
-//#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-//#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-//#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-//#define MSG_AUTOTEMP _UxGT("Autotemp")
-//#define MSG_LCD_ON _UxGT("On")
-//#define MSG_LCD_OFF _UxGT("Off")
-//#define MSG_PID_P _UxGT("PID-P")
-//#define MSG_PID_I _UxGT("PID-I")
-//#define MSG_PID_D _UxGT("PID-D")
-//#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Odaberi")
-//#define MSG_ACC _UxGT("Accel")
-//#define MSG_JERK _UxGT("Jerk")
-//#if IS_KINEMATIC
-// #define MSG_VA_JERK _UxGT("Va-jerk")
-// #define MSG_VB_JERK _UxGT("Vb-jerk")
-// #define MSG_VC_JERK _UxGT("Vc-jerk")
-//#else
-// #define MSG_VA_JERK _UxGT("Vx-jerk")
-// #define MSG_VB_JERK _UxGT("Vy-jerk")
-// #define MSG_VC_JERK _UxGT("Vz-jerk")
-//#endif
-//#define MSG_VE_JERK _UxGT("Ve-jerk")
-//#define MSG_VMAX _UxGT("Vmax ")
-//#define MSG_VMIN _UxGT("Vmin")
-//#define MSG_VTRAV_MIN _UxGT("VTrav min")
-//#define MSG_AMAX _UxGT("Amax ")
-//#define MSG_A_RETRACT _UxGT("A-retract")
-//#define MSG_A_TRAVEL _UxGT("A-travel")
-//#define MSG_STEPS_PER_MM _UxGT("Steps/mm")
-//#if IS_KINEMATIC
-// #define MSG_ASTEPS _UxGT("Asteps/mm")
-// #define MSG_BSTEPS _UxGT("Bsteps/mm")
-// #define MSG_CSTEPS _UxGT("Csteps/mm")
-//#else
-// #define MSG_ASTEPS _UxGT("Xsteps/mm")
-// #define MSG_BSTEPS _UxGT("Ysteps/mm")
-// #define MSG_CSTEPS _UxGT("Zsteps/mm")
-//#endif
-//#define MSG_ESTEPS _UxGT("Esteps/mm")
-//#define MSG_E1STEPS _UxGT("E1steps/mm")
-//#define MSG_E2STEPS _UxGT("E2steps/mm")
-//#define MSG_E3STEPS _UxGT("E3steps/mm")
-//#define MSG_E4STEPS _UxGT("E4steps/mm")
-//#define MSG_E5STEPS _UxGT("E5steps/mm")
-//#define MSG_E6STEPS _UxGT("E6steps/mm")
-#define MSG_TEMPERATURE _UxGT("Temperature")
-#define MSG_MOTION _UxGT("Gibanje")
-//#define MSG_FILAMENT _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E in mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Fil. Dia.")
-#define MSG_CONTRAST _UxGT("Kontrast LCD-a")
-#define MSG_STORE_EEPROM _UxGT("Pohrani u memoriju")
-#define MSG_LOAD_EEPROM _UxGT("Učitaj memoriju")
-#define MSG_RESTORE_FAILSAFE _UxGT("Učitaj failsafe")
-#define MSG_REFRESH _UxGT("Osvježi")
-#define MSG_WATCH _UxGT("Info screen")
-#define MSG_PREPARE _UxGT("Pripremi")
-//#define MSG_TUNE _UxGT("Tune")
-#define MSG_PAUSE_PRINT _UxGT("Pauziraj print")
-#define MSG_RESUME_PRINT _UxGT("Nastavi print")
-#define MSG_STOP_PRINT _UxGT("Zaustavi print")
-#define MSG_MEDIA_MENU _UxGT("Printaj s SD kartice")
-#define MSG_NO_MEDIA _UxGT("Nema SD kartice")
-//#define MSG_DWELL _UxGT("Sleep...")
-#define MSG_USERWAIT _UxGT("Čekaj korisnika...")
-#define MSG_PRINT_ABORTED _UxGT("Print otkazan")
-//#define MSG_NO_MOVE _UxGT("No move.")
-//#define MSG_KILLED _UxGT("KILLED. ")
-#define MSG_STOPPED _UxGT("ZAUSTAVLJEN. ")
-//#define MSG_CONTROL_RETRACT _UxGT("Retract mm")
-//#define MSG_CONTROL_RETRACT_SWAP _UxGT("Swap Re.mm")
-//#define MSG_CONTROL_RETRACTF _UxGT("Retract V")
-//#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Hop mm")
-//#define MSG_CONTROL_RETRACT_RECOVER _UxGT("UnRet mm")
-//#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("S UnRet mm")
-//#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet V")
-//#define MSG_AUTORETRACT _UxGT("AutoRetr.")
-#define MSG_FILAMENTCHANGE _UxGT("Promijeni filament")
-#define MSG_INIT_MEDIA _UxGT("Init. SD karticu")
-#define MSG_CHANGE_MEDIA _UxGT("Promijeni SD karticu")
-//#define MSG_ZPROBE_OUT _UxGT("Z probe out. bed")
-//#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Self-Test")
-//#define MSG_BLTOUCH_RESET _UxGT("Reset BLTouch")
-//#define MSG_HOME_FIRST _UxGT("Home %s%s%s first")
-//#define MSG_ZPROBE_ZOFFSET _UxGT("Z Offset")
-//#define MSG_BABYSTEP_X _UxGT("Babystep X")
-//#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
-//#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
-//#define MSG_ENDSTOP_ABORT _UxGT("Endstop abort")
-#define MSG_HEATING_FAILED_LCD _UxGT("Grijanje neuspješno")
-//#define MSG_ERR_REDUNDANT_TEMP _UxGT("Err: REDUNDANT TEMP")
-//#define MSG_THERMAL_RUNAWAY _UxGT("THERMAL RUNAWAY")
-//#define MSG_ERR_MAXTEMP _UxGT("Err: MAXTEMP")
-//#define MSG_ERR_MINTEMP _UxGT("Err: MINTEMP")
-//#define MSG_ERR_MAXTEMP_BED _UxGT("Err: MAXTEMP BED")
-//#define MSG_ERR_MINTEMP_BED _UxGT("Err: MINTEMP BED")
-//#define MSG_ERR_Z_HOMING _UxGT("Home XY first")
-//#define MSG_HALTED _UxGT("PRINTER HALTED")
-//#define MSG_PLEASE_RESET _UxGT("Please reset")
-//#define MSG_SHORT_DAY _UxGT("d") // One character only
-//#define MSG_SHORT_HOUR _UxGT("h") // One character only
-//#define MSG_SHORT_MINUTE _UxGT("m") // One character only
-#define MSG_HEATING _UxGT("Grijanje...")
-#define MSG_BED_HEATING _UxGT("Grijanje Bed-a...")
-#define MSG_DELTA_CALIBRATE _UxGT("Delta Kalibracija")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Kalibriraj X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Kalibriraj Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Kalibriraj Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Kalibriraj Središte")
-#define MSG_INFO_MENU _UxGT("O printeru")
-#define MSG_INFO_PRINTER_MENU _UxGT("Podaci o printeru")
-#define MSG_INFO_STATS_MENU _UxGT("Statistika printera")
-#define MSG_INFO_BOARD_MENU _UxGT("Podaci o elektronici")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Termistori")
-#define MSG_INFO_EXTRUDERS _UxGT("Extruderi")
-#define MSG_INFO_BAUDRATE _UxGT("Baud")
-#define MSG_INFO_PROTOCOL _UxGT("Protokol")
-#define MSG_CASE_LIGHT _UxGT("Osvjetljenje")
+namespace Language_hr {
+ using namespace Language_en; // Inherit undefined strings from English
-#define MSG_EXPECTED_PRINTER _UxGT("Neispravan pisač")
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Croatian");
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Broj printova")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Završeni")
- #define MSG_INFO_PRINT_TIME _UxGT("Ukupno printanja")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Najduži print")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Extrudirano ukupno")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Printovi")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Završeni")
- #define MSG_INFO_PRINT_TIME _UxGT("Ukupno")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Najduži")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Extrudirano")
-#endif
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" spreman.");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("SD kartica umetnuta");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("SD kartica uklonjena");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Main");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Auto pokretanje");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Ugasi steppere");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Automatski homing");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Home-aj X");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Home-aj Y");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Home-aj Z");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Home-aj XYZ");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Klikni za početak");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Sljedeća točka");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Niveliranje gotovo!");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Postavi home offsete");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets postavljeni");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Postavi ishodište");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Predgrij ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Predgrij ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Predgrij ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Predgrij ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Predgrij ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Predgrij ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Predgrij ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Sve");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Bed");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" conf");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Predgrij ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Predgrij ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Predgrij ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Predgrij ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Predgrij ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Predgrij ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Predgrij ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Dizna");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Dizna ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Dizna ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Dizna ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Dizna ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Dizna ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Dizna ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Sve");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" Bed");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Predgrij ") PREHEAT_2_LABEL _UxGT(" conf");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Hlađenje");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Uključi napajanje");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Isključi napajanje");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Miči os");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Niveliraj bed");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Niveliraj bed");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Miči X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Miči Y");
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Miči %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Miči 0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Miči 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Miči 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Brzina");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Dizna");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Dizna ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Dizna ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Dizna ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Dizna ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Dizna ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Dizna ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Bed");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Brzina ventilatora");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Brzina ventilatora 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Brzina ventilatora 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Brzina ventilatora 3");
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Odaberi");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Odaberi ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Odaberi ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Odaberi ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Odaberi ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Odaberi ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Odaberi ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperature");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Gibanje");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm3");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Fil. Dia. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Fil. Dia. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Fil. Dia. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Fil. Dia. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Fil. Dia. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Fil. Dia. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("Kontrast LCD-a");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Pohrani u memoriju");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Učitaj memoriju");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Učitaj failsafe");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Osvježi");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Info screen");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Pripremi");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pauziraj print");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Nastavi print");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Zaustavi print");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Printaj s SD kartice");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Nema SD kartice");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Čekaj korisnika...");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Print otkazan");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("ZAUSTAVLJEN. ");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Promijeni filament");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Promijeni filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Promijeni filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Promijeni filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Promijeni filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Promijeni filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Promijeni filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Init. SD karticu");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Promijeni SD karticu");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Grijanje neuspješno");
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Grijanje...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Grijanje Bed-a...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibracija");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibriraj X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibriraj Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibriraj Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibriraj Središte");
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("O printeru");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Podaci o printeru");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Statistika printera");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Podaci o elektronici");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistori");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extruderi");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baud");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokol");
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Osvjetljenje");
-//#define MSG_INFO_MIN_TEMP _UxGT("Min Temp")
-//#define MSG_INFO_MAX_TEMP _UxGT("Max Temp")
-#define MSG_INFO_PSU _UxGT("Napajanje")
-//#define MSG_DRIVE_STRENGTH _UxGT("Drive Strength")
-//#define MSG_DAC_PERCENT _UxGT("Driver %")
-//#define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write")
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Neispravan pisač");
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Nastavi print")
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Broj printova");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Završeni");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Ukupno printanja");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Najduži print");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extrudirano ukupno");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Printovi");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Završeni");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Ukupno");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Najduži");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extrudirano");
+ #endif
-#if LCD_HEIGHT >= 4
- // Up to 3 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Čekaj početak")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("filamenta")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("promijeni")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Čekaj")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("filament unload")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Umetni filament")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("i pritisni tipku")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("za nastavak...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Pričekaj")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("filament load")
- //#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wait for print")
- //#define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("to resume")
-#else // LCD_HEIGHT < 4
- // Up to 2 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Pričekaj...")
- //#define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Ejecting...")
- //#define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insert and Click")
- //#define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Loading...")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Nastavljam...")
-#endif // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Napajanje");
+
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Nastavi print");
+
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Čekaj", "filament unload"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Pričekaj", "filament load"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Nastavljam..."));
+
+ #if LCD_HEIGHT >= 4
+ // Up to 3 lines allowed
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Čekaj početak", "filamenta", "promijeni"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Umetni filament", "i pritisni tipku", "za nastavak..."));
+ #else
+ // Up to 2 lines allowed
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT("Pričekaj...");
+ //PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_2_LINE("?", "?"));
+ #endif
+}
diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h
index 94f5ba0ede44..ff3c5f4ea90f 100644
--- a/Marlin/src/lcd/language/language_it.h
+++ b/Marlin/src/lcd/language/language_it.h
@@ -31,543 +31,667 @@
#define DISPLAY_CHARSET_ISO10646_1
-#define WELCOME_MSG MACHINE_NAME _UxGT(" pronto.")
-#define MSG_YES _UxGT("SI")
-#define MSG_NO _UxGT("NO")
-#define MSG_BACK _UxGT("Indietro")
-#define MSG_MEDIA_ABORTING _UxGT("Annullando...")
-#define MSG_MEDIA_INSERTED _UxGT("Media inserito")
-#define MSG_MEDIA_REMOVED _UxGT("Media rimosso")
-#define MSG_MEDIA_RELEASED _UxGT("Media rilasciato")
-#define MSG_MEDIA_WAITING _UxGT("Aspettando media")
-#define MSG_MEDIA_READ_ERROR _UxGT("Err.leggendo media")
-#define MSG_MEDIA_USB_REMOVED _UxGT("Dispos.USB rimosso")
-#define MSG_MEDIA_USB_FAILED _UxGT("Avvio USB fallito")
-#define MSG_LCD_ENDSTOPS _UxGT("Finecor.") // Max 8 caratteri
-#define MSG_LCD_SOFT_ENDSTOPS _UxGT("Finecorsa Soft")
-#define MSG_MAIN _UxGT("Menu principale")
-#define MSG_ADVANCED_SETTINGS _UxGT("Impostaz. avanzate")
-#define MSG_CONFIGURATION _UxGT("Configurazione")
-#define MSG_AUTOSTART _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS _UxGT("Disabilita Motori")
-#define MSG_DEBUG_MENU _UxGT("Menu di debug")
-#define MSG_PROGRESS_BAR_TEST _UxGT("Test barra avanzam.")
-#define MSG_AUTO_HOME _UxGT("Auto Home")
-#define MSG_AUTO_HOME_X _UxGT("Home asse X")
-#define MSG_AUTO_HOME_Y _UxGT("Home asse Y")
-#define MSG_AUTO_HOME_Z _UxGT("Home asse Z")
-#define MSG_AUTO_Z_ALIGN _UxGT("Allineam.automat. Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Home assi XYZ")
-#define MSG_LEVEL_BED_WAITING _UxGT("Premi per iniziare")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Punto successivo")
-#define MSG_LEVEL_BED_DONE _UxGT("Livel. terminato!")
-#define MSG_Z_FADE_HEIGHT _UxGT("Fade Height")
-#define MSG_SET_HOME_OFFSETS _UxGT("Imp. offset home")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Offset applicato")
-#define MSG_SET_ORIGIN _UxGT("Imposta Origine")
-#define MSG_PREHEAT_1 _UxGT("Preriscalda " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N _UxGT("Preris." PREHEAT_1_LABEL " ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1_N _UxGT("Tutto")
-#define MSG_PREHEAT_1_END MSG_PREHEAT_1_N _UxGT("Ugello")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1_N _UxGT("Piatto")
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1_N _UxGT("conf")
-#define MSG_PREHEAT_2 _UxGT("Preriscalda " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N _UxGT("Preris." PREHEAT_2_LABEL " ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2_N _UxGT("Tutto")
-#define MSG_PREHEAT_2_END MSG_PREHEAT_2_N _UxGT("Ugello")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2_N _UxGT("Piatto")
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2_N _UxGT("conf")
-#define MSG_PREHEAT_CUSTOM _UxGT("Prerisc.personal.")
-#define MSG_COOLDOWN _UxGT("Raffredda")
-#define MSG_LASER_MENU _UxGT("Controllo laser")
-#define MSG_LASER_OFF _UxGT("Laser Off")
-#define MSG_LASER_ON _UxGT("Laser On")
-#define MSG_LASER_POWER _UxGT("Potenza laser")
-#define MSG_SPINDLE_MENU _UxGT("Controllo mandrino")
-#define MSG_SPINDLE_OFF _UxGT("Mandrino Off")
-#define MSG_SPINDLE_ON _UxGT("Mandrino On")
-#define MSG_SPINDLE_POWER _UxGT("Potenza mandrino")
-#define MSG_SPINDLE_REVERSE _UxGT("Inverti mandrino")
-#define MSG_SWITCH_PS_ON _UxGT("Accendi aliment.")
-#define MSG_SWITCH_PS_OFF _UxGT("Spegni aliment.")
-#define MSG_EXTRUDE _UxGT("Estrudi")
-#define MSG_RETRACT _UxGT("Ritrai")
-#define MSG_MOVE_AXIS _UxGT("Muovi Asse")
-#define MSG_BED_LEVELING _UxGT("Livella piano")
-#define MSG_LEVEL_BED MSG_BED_LEVELING
-#define MSG_LEVEL_CORNERS _UxGT("Livella spigoli")
-#define MSG_NEXT_CORNER _UxGT("Prossimo spigolo")
-#define MSG_MESH_EDITOR _UxGT("Editor Mesh")
-#define MSG_EDIT_MESH _UxGT("Modifica Mesh")
-#define MSG_EDITING_STOPPED _UxGT("Modif. Mesh Fermata")
-#define MSG_PROBING_MESH _UxGT("Punto sondato")
-#define MSG_MESH_X _UxGT("Indice X")
-#define MSG_MESH_Y _UxGT("Indice Y")
-#define MSG_MESH_EDIT_Z _UxGT("Valore di Z")
-#define MSG_USER_MENU _UxGT("Comandi personaliz.")
-#define MSG_LCD_TILTING_MESH _UxGT("Punto inclinaz.")
-#define MSG_M48_TEST _UxGT("Test sonda M48")
-#define MSG_M48_POINT _UxGT("Punto M48")
-#define MSG_M48_DEVIATION _UxGT("Deviazione")
-#define MSG_IDEX_MENU _UxGT("Modo IDEX")
-#define MSG_OFFSETS_MENU _UxGT("Strumenti Offsets")
-#define MSG_IDEX_MODE_AUTOPARK _UxGT("Auto-Park")
-#define MSG_IDEX_MODE_DUPLICATE _UxGT("Duplicazione")
-#define MSG_IDEX_MODE_MIRRORED_COPY _UxGT("Copia speculare")
-#define MSG_IDEX_MODE_FULL_CTRL _UxGT("Pieno controllo")
-#define MSG_X_OFFSET _UxGT("2° ugello X")
-#define MSG_Y_OFFSET _UxGT("2° ugello Y")
-#define MSG_Z_OFFSET _UxGT("2° ugello Z")
-#define MSG_UBL_DOING_G29 _UxGT("G29 in corso")
-#define MSG_UBL_TOOLS _UxGT("Strumenti UBL")
-#define MSG_UBL_LEVEL_BED _UxGT("Unified Bed Leveling")
-#define MSG_UBL_MANUAL_MESH _UxGT("Mesh Manuale")
-#define MSG_UBL_BC_INSERT _UxGT("Metti spes. e misura")
-#define MSG_UBL_BC_INSERT2 _UxGT("Misura")
-#define MSG_UBL_BC_REMOVE _UxGT("Rimuovi e mis.piatto")
-#define MSG_UBL_MOVING_TO_NEXT _UxGT("Spostamento succes.")
-#define MSG_UBL_ACTIVATE_MESH _UxGT("Attiva UBL")
-#define MSG_UBL_DEACTIVATE_MESH _UxGT("Disattiva UBL")
-#define MSG_UBL_SET_TEMP_BED _UxGT("Temp. Piatto")
-#define MSG_UBL_BED_TEMP_CUSTOM MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND _UxGT("Temp. Ugello")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT _UxGT("Modifica Mesh")
-#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("Modif.Mesh personal.")
-#define MSG_UBL_FINE_TUNE_MESH _UxGT("Ritocca Mesh")
-#define MSG_UBL_DONE_EDITING_MESH _UxGT("Modif.Mesh fatta")
-#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("Crea Mesh personal.")
-#define MSG_UBL_BUILD_MESH_MENU _UxGT("Crea Mesh")
-#define MSG_UBL_BUILD_MESH_M1 _UxGT("Crea Mesh " PREHEAT_1_LABEL)
-#define MSG_UBL_BUILD_MESH_M2 _UxGT("Crea Mesh " PREHEAT_2_LABEL)
-#define MSG_UBL_BUILD_COLD_MESH _UxGT("Crea Mesh a freddo")
-#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("Aggiusta Alt. Mesh")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("Altezza")
-#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Valida Mesh")
-#define MSG_UBL_VALIDATE_MESH_M1 _UxGT("Valida Mesh " PREHEAT_1_LABEL)
-#define MSG_UBL_VALIDATE_MESH_M2 _UxGT("Valida Mesh " PREHEAT_2_LABEL)
-#define MSG_G26_HEATING_BED _UxGT("G26 riscald.letto")
-#define MSG_G26_HEATING_NOZZLE _UxGT("G26 riscald.ugello")
-#define MSG_G26_MANUAL_PRIME _UxGT("Priming manuale...")
-#define MSG_G26_FIXED_LENGTH _UxGT("Prime a lung.fissa")
-#define MSG_G26_PRIME_DONE _UxGT("Priming terminato")
-#define MSG_G26_CANCELED _UxGT("G26 Annullato")
-#define MSG_G26_LEAVING _UxGT("Uscita da G26")
-#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Valida Mesh pers.")
-#define MSG_UBL_CONTINUE_MESH _UxGT("Continua Mesh")
-#define MSG_UBL_MESH_LEVELING _UxGT("Livell. Mesh")
-#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("Livell. 3 Punti")
-#define MSG_UBL_GRID_MESH_LEVELING _UxGT("Livell. Griglia Mesh")
-#define MSG_UBL_MESH_LEVEL _UxGT("Livella Mesh")
-#define MSG_UBL_SIDE_POINTS _UxGT("Punti laterali")
-#define MSG_UBL_MAP_TYPE _UxGT("Tipo di Mappa")
-#define MSG_UBL_OUTPUT_MAP _UxGT("Esporta Mappa")
-#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("Esporta per Host")
-#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("Esporta in CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("Backup esterno")
-#define MSG_UBL_INFO_UBL _UxGT("Esporta Info UBL")
-#define MSG_UBL_FILLIN_AMOUNT _UxGT("Riempimento")
-#define MSG_UBL_MANUAL_FILLIN _UxGT("Riempimento Manuale")
-#define MSG_UBL_SMART_FILLIN _UxGT("Riempimento Smart")
-#define MSG_UBL_FILLIN_MESH _UxGT("Riempimento Mesh")
-#define MSG_UBL_INVALIDATE_ALL _UxGT("Invalida Tutto")
-#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("Invalid.Punto Vicino")
-#define MSG_UBL_FINE_TUNE_ALL _UxGT("Ritocca All")
-#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("Ritocca Punto Vicino")
-#define MSG_UBL_STORAGE_MESH_MENU _UxGT("Mesh Salvate")
-#define MSG_UBL_STORAGE_SLOT _UxGT("Slot di memoria")
-#define MSG_UBL_LOAD_MESH _UxGT("Carica Mesh Piatto")
-#define MSG_UBL_SAVE_MESH _UxGT("Salva Mesh Piatto")
-#define MSG_MESH_LOADED _UxGT("Mesh %i caricata")
-#define MSG_MESH_SAVED _UxGT("Mesh %i salvata")
-#define MSG_UBL_NO_STORAGE _UxGT("Nessuna memoria")
-#define MSG_UBL_SAVE_ERROR _UxGT("Err: Salvataggio UBL")
-#define MSG_UBL_RESTORE_ERROR _UxGT("Err: Ripristino UBL")
-#define MSG_UBL_Z_OFFSET _UxGT("Z-Offset: ")
-#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Z-Offset Fermato")
-#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("UBL passo passo")
+namespace Language_it {
+ using namespace Language_en; // Inherit undefined strings from English
-#define MSG_LED_CONTROL _UxGT("Controllo LED")
-#define MSG_LEDS _UxGT("Luci")
-#define MSG_LED_PRESETS _UxGT("Preset luce")
-#define MSG_SET_LEDS_RED _UxGT("Rosso")
-#define MSG_SET_LEDS_ORANGE _UxGT("Arancione")
-#define MSG_SET_LEDS_YELLOW _UxGT("Giallo")
-#define MSG_SET_LEDS_GREEN _UxGT("Verde")
-#define MSG_SET_LEDS_BLUE _UxGT("Blu")
-#define MSG_SET_LEDS_INDIGO _UxGT("Indaco")
-#define MSG_SET_LEDS_VIOLET _UxGT("Viola")
-#define MSG_SET_LEDS_WHITE _UxGT("Bianco")
-#define MSG_SET_LEDS_DEFAULT _UxGT("Predefinito")
-#define MSG_CUSTOM_LEDS _UxGT("Luci personalizzate")
-#define MSG_INTENSITY_R _UxGT("Intensità rosso")
-#define MSG_INTENSITY_G _UxGT("Intensità verde")
-#define MSG_INTENSITY_B _UxGT("Intensità blu")
-#define MSG_INTENSITY_W _UxGT("Intensità bianco")
-#define MSG_LED_BRIGHTNESS _UxGT("Luminosità")
+ constexpr uint8_t CHARSIZE = 1;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Italian");
-#define MSG_MOVING _UxGT("In movimento...")
-#define MSG_FREE_XY _UxGT("XY liberi")
-#define MSG_MOVE_X _UxGT("Muovi X")
-#define MSG_MOVE_Y _UxGT("Muovi Y")
-#define MSG_MOVE_Z _UxGT("Muovi Z")
-#define MSG_MOVE_E _UxGT("Estrusore")
-#define MSG_HOTEND_TOO_COLD _UxGT("Ugello freddo")
-#define MSG_MOVE_Z_DIST _UxGT("Muovi di %smm")
-#define MSG_MOVE_01MM _UxGT("Muovi di 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Muovi di 1mm")
-#define MSG_MOVE_10MM _UxGT("Muovi di 10mm")
-#define MSG_SPEED _UxGT("Velocità")
-#define MSG_BED_Z _UxGT("Piatto Z")
-#define MSG_NOZZLE _UxGT("Ugello")
-#define MSG_BED _UxGT("Piatto")
-#define MSG_CHAMBER _UxGT("Camera")
-#define MSG_FAN_SPEED _UxGT("Velocità ventola")
-#define MSG_EXTRA_FAN_SPEED _UxGT("Extra vel. ventola")
-#define MSG_FLOW _UxGT("Flusso")
-#define MSG_CONTROL _UxGT("Controllo")
-#define MSG_MIN LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP _UxGT("Autotemp")
-#define MSG_LCD_ON _UxGT("On")
-#define MSG_LCD_OFF _UxGT("Off")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Seleziona")
-#define MSG_ACC _UxGT("Accel")
-#define MSG_JERK _UxGT("Jerk")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va-jerk")
- #define MSG_VB_JERK _UxGT("Vb-jerk")
- #define MSG_VC_JERK _UxGT("Vc-jerk")
-#else
- #define MSG_VA_JERK _UxGT("Vx-jerk")
- #define MSG_VB_JERK _UxGT("Vy-jerk")
- #define MSG_VC_JERK _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK _UxGT("Ve-jerk")
-#define MSG_JUNCTION_DEVIATION _UxGT("Deviaz. giunzioni")
-#define MSG_VELOCITY _UxGT("Velocità")
-#define MSG_VMAX _UxGT("Vmax ")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("VTrav min")
-#define MSG_ACCELERATION _UxGT("Accelerazione")
-#define MSG_AMAX _UxGT("Amax ")
-#define MSG_A_RETRACT _UxGT("A-Ritrazione")
-#define MSG_A_TRAVEL _UxGT("A-Spostamento")
-#define MSG_STEPS_PER_MM _UxGT("Passi/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("Apassi/mm")
- #define MSG_BSTEPS _UxGT("Bpassi/mm")
- #define MSG_CSTEPS _UxGT("Cpassi/mm")
-#else
- #define MSG_ASTEPS _UxGT("Xpassi/mm")
- #define MSG_BSTEPS _UxGT("Ypassi/mm")
- #define MSG_CSTEPS _UxGT("Zpassi/mm")
-#endif
-#define MSG_ESTEPS _UxGT("Epassi/mm")
-#define MSG_E1STEPS _UxGT("E1passi/mm")
-#define MSG_E2STEPS _UxGT("E2passi/mm")
-#define MSG_E3STEPS _UxGT("E3passi/mm")
-#define MSG_E4STEPS _UxGT("E4passi/mm")
-#define MSG_E5STEPS _UxGT("E5passi/mm")
-#define MSG_E6STEPS _UxGT("E6passi/mm")
-#define MSG_TEMPERATURE _UxGT("Temperatura")
-#define MSG_MOTION _UxGT("Movimento")
-#define MSG_FILAMENT _UxGT("Filamento")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E in mm³")
-#define MSG_FILAMENT_DIAM _UxGT("Diam. filo")
-#define MSG_FILAMENT_UNLOAD _UxGT("Rimuovi mm")
-#define MSG_FILAMENT_LOAD _UxGT("Carica mm")
-#define MSG_ADVANCE_K _UxGT("K Avanzamento")
-#define MSG_CONTRAST _UxGT("Contrasto LCD")
-#define MSG_STORE_EEPROM _UxGT("Salva impostazioni")
-#define MSG_LOAD_EEPROM _UxGT("Carica impostazioni")
-#define MSG_RESTORE_FAILSAFE _UxGT("Ripristina imp.")
-#define MSG_INIT_EEPROM _UxGT("Inizializza EEPROM")
-#define MSG_MEDIA_UPDATE _UxGT("Aggiorna media")
-#define MSG_RESET_PRINTER _UxGT("Resetta stampante")
-#define MSG_REFRESH _UxGT("Aggiorna")
-#define MSG_WATCH _UxGT("Schermata info")
-#define MSG_PREPARE _UxGT("Prepara")
-#define MSG_TUNE _UxGT("Regola")
-#define MSG_START_PRINT _UxGT("Avvia stampa")
-#define MSG_BUTTON_NEXT _UxGT("Prossimo")
-#define MSG_BUTTON_INIT _UxGT("Inizializza")
-#define MSG_BUTTON_STOP _UxGT("Stop")
-#define MSG_BUTTON_PRINT _UxGT("Stampa")
-#define MSG_BUTTON_RESET _UxGT("Resetta")
-#define MSG_BUTTON_CANCEL _UxGT("Annulla")
-#define MSG_BUTTON_DONE _UxGT("Fatto")
-#define MSG_PAUSE_PRINT _UxGT("Pausa stampa")
-#define MSG_RESUME_PRINT _UxGT("Riprendi stampa")
-#define MSG_STOP_PRINT _UxGT("Arresta stampa")
-#define MSG_OUTAGE_RECOVERY _UxGT("Ripresa da PowerLoss")
-#define MSG_MEDIA_MENU _UxGT("Stampa da media")
-#define MSG_NO_MEDIA _UxGT("Media non presente")
-#define MSG_DWELL _UxGT("Sospensione...")
-#define MSG_USERWAIT _UxGT("Premi tasto..")
-#define MSG_PRINT_PAUSED _UxGT("Stampa sospesa")
-#define MSG_PRINTING _UxGT("Stampa...")
-#define MSG_PRINT_ABORTED _UxGT("Stampa annullata")
-#define MSG_NO_MOVE _UxGT("Nessun Movimento")
-#define MSG_KILLED _UxGT("UCCISO. ")
-#define MSG_STOPPED _UxGT("ARRESTATO. ")
-#define MSG_CONTROL_RETRACT _UxGT("Ritrai mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Scamb. Ritrai mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Ritrai V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Salta mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Scamb. UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("S UnRet V")
-#define MSG_AUTORETRACT _UxGT("AutoRitrai")
-#define MSG_FILAMENT_SWAP_LENGTH _UxGT("Dist. ritrazione")
-#define MSG_FILAMENT_PURGE_LENGTH _UxGT("Lunghezza spurgo")
-#define MSG_TOOL_CHANGE _UxGT("Cambio utensile")
-#define MSG_TOOL_CHANGE_ZLIFT _UxGT("Risalita Z")
-#define MSG_SINGLENOZZLE_PRIME_SPD _UxGT("Velocità innesco")
-#define MSG_SINGLENOZZLE_RETRACT_SPD _UxGT("Velocità retrazione")
-#define MSG_NOZZLE_STANDBY _UxGT("Standby ugello")
-#define MSG_FILAMENTCHANGE _UxGT("Cambia filamento")
-#define MSG_FILAMENTLOAD _UxGT("Carica filamento")
-#define MSG_FILAMENTUNLOAD _UxGT("Rimuovi filamento")
-#define MSG_FILAMENTUNLOAD_ALL _UxGT("Rimuovi tutto")
-#define MSG_INIT_MEDIA _UxGT("Inizializ. media")
-#define MSG_CHANGE_MEDIA _UxGT("Cambia media")
-#define MSG_RELEASE_MEDIA _UxGT("Rilascia media")
-#define MSG_ZPROBE_OUT _UxGT("Z probe fuori piatto")
-#define MSG_SKEW_FACTOR _UxGT("Fattore distorsione")
-#define MSG_BLTOUCH _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST _UxGT("Autotest BLTouch")
-#define MSG_BLTOUCH_RESET _UxGT("Resetta BLTouch")
-#define MSG_BLTOUCH_DEPLOY _UxGT("Estendi BLTouch")
-#define MSG_BLTOUCH_SW_MODE _UxGT("BLTouch modo SW")
-#define MSG_BLTOUCH_5V_MODE _UxGT("BLTouch modo 5V")
-#define MSG_BLTOUCH_OD_MODE _UxGT("BLTouch modo OD")
-#define MSG_BLTOUCH_MODE_STORE _UxGT("BLTouch modo mem.")
-#define MSG_BLTOUCH_MODE_STORE_5V _UxGT("Metti BLTouch a 5V")
-#define MSG_BLTOUCH_MODE_STORE_OD _UxGT("Metti BLTouch a OD")
-#define MSG_BLTOUCH_MODE_ECHO _UxGT("Segnala modo")
-#define MSG_BLTOUCH_MODE_CHANGE _UxGT("PERICOLO: Impostazioni errate possono cause danni! Procedo comunque?")
-#define MSG_TOUCHMI_PROBE _UxGT("TouchMI")
-#define MSG_TOUCHMI_INIT _UxGT("Inizializ.TouchMI")
-#define MSG_TOUCHMI_ZTEST _UxGT("Test Z offset")
-#define MSG_TOUCHMI_SAVE _UxGT("Memorizzare")
-#define MSG_MANUAL_DEPLOY_TOUCHMI _UxGT("Estendi TouchMI")
-#define MSG_MANUAL_DEPLOY _UxGT("Estendi Sonda-Z")
-#define MSG_BLTOUCH_STOW _UxGT("Ritrai BLTouch")
-#define MSG_MANUAL_STOW _UxGT("Ritrai Sonda-Z")
-#define MSG_HOME_FIRST _UxGT("Home %s%s%s prima")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Offset sonda Z")
-#define MSG_BABYSTEP_X _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
-#define MSG_BABYSTEP_TOTAL _UxGT("Totali")
-#define MSG_ENDSTOP_ABORT _UxGT("Finecorsa annullati")
-#define MSG_HEATING_FAILED_LCD _UxGT("Riscald. Fallito")
-#define MSG_HEATING_FAILED_LCD_BED _UxGT("Risc. piatto fallito")
-#define MSG_HEATING_FAILED_LCD_CHAMBER _UxGT("Risc. camera fallito")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Err: TEMP RIDONDANTE")
-#define MSG_THERMAL_RUNAWAY _UxGT("TEMP FUORI CONTROLLO")
-#define MSG_THERMAL_RUNAWAY_BED _UxGT("TEMP PIAT.FUORI CTRL")
-#define MSG_THERMAL_RUNAWAY_CHAMBER _UxGT("T.CAMERA FUORI CTRL")
-#define MSG_ERR_MAXTEMP _UxGT("Err: TEMP MASSIMA")
-#define MSG_ERR_MINTEMP _UxGT("Err: TEMP MINIMA")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Err: TEMP MAX PIATTO")
-#define MSG_ERR_MINTEMP_BED _UxGT("Err: TEMP MIN PIATTO")
-#define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Err: TEMP MAX CAMERA")
-#define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err: TEMP MIN CAMERA")
-#define MSG_ERR_Z_HOMING _UxGT("Home XY prima")
-#define MSG_HALTED _UxGT("STAMPANTE FERMATA")
-#define MSG_PLEASE_RESET _UxGT("Riavviare prego")
-#define MSG_SHORT_DAY _UxGT("g") // Un solo carattere
-#define MSG_SHORT_HOUR _UxGT("h") // Un solo carattere
-#define MSG_SHORT_MINUTE _UxGT("m") // Un solo carattere
-#define MSG_HEATING _UxGT("Riscaldamento...")
-#define MSG_COOLING _UxGT("Raffreddamento..")
-#define MSG_BED_HEATING _UxGT("Risc. piatto...")
-#define MSG_BED_COOLING _UxGT("Raffr. piatto...")
-#define MSG_CHAMBER_HEATING _UxGT("Risc. camera...")
-#define MSG_CHAMBER_COOLING _UxGT("Raffr. camera...")
-#define MSG_DELTA_CALIBRATE _UxGT("Calibraz. Delta")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Calibra X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Calibra Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Calibra Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Calibra centro")
-#define MSG_DELTA_SETTINGS _UxGT("Impostaz. Delta")
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Auto calibrazione")
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Imp. altezza Delta")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE _UxGT("Offset sonda-Z")
-#define MSG_DELTA_DIAG_ROD _UxGT("Barra Diagonale")
-#define MSG_DELTA_HEIGHT _UxGT("Altezza")
-#define MSG_DELTA_RADIUS _UxGT("Raggio")
-#define MSG_INFO_MENU _UxGT("Riguardo stampante")
-#define MSG_INFO_PRINTER_MENU _UxGT("Info. stampante")
-#define MSG_3POINT_LEVELING _UxGT("Livel. a 3 punti")
-#define MSG_LINEAR_LEVELING _UxGT("Livel. Lineare")
-#define MSG_BILINEAR_LEVELING _UxGT("Livel. Bilineare")
-#define MSG_UBL_LEVELING _UxGT("Livel.piatto unific.")
-#define MSG_MESH_LEVELING _UxGT("Livel. Mesh")
-#define MSG_INFO_STATS_MENU _UxGT("Statistiche")
-#define MSG_INFO_BOARD_MENU _UxGT("Info. scheda")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Termistori")
-#define MSG_INFO_EXTRUDERS _UxGT("Estrusori")
-#define MSG_INFO_BAUDRATE _UxGT("Baud")
-#define MSG_INFO_PROTOCOL _UxGT("Protocollo")
-#define MSG_INFO_RUNAWAY_OFF _UxGT("Controllo fuga: OFF")
-#define MSG_INFO_RUNAWAY_ON _UxGT("Controllo fuga: ON")
-#define MSG_CASE_LIGHT _UxGT("Luci Case")
-#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Luminosità Luci")
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Contat. stampa")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Completati")
- #define MSG_INFO_PRINT_TIME _UxGT("Tempo totale")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Lavoro più lungo")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Totale estruso")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Stampe")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Completati")
- #define MSG_INFO_PRINT_TIME _UxGT("Durata")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Più lungo")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Estruso")
-#endif
-#define MSG_INFO_MIN_TEMP _UxGT("Temp min")
-#define MSG_INFO_MAX_TEMP _UxGT("Temp max")
-#define MSG_INFO_PSU _UxGT("Alimentatore")
-#define MSG_DRIVE_STRENGTH _UxGT("Potenza Drive")
-#define MSG_DAC_PERCENT _UxGT("Driver %")
-#define MSG_ERROR_TMC _UxGT("ERR.CONNESSIONE TMC")
-#define MSG_DAC_EEPROM_WRITE _UxGT("Scrivi DAC EEPROM")
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("STAMPA IN PAUSA")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("CARICA FILAMENTO")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("RIMUOVI FILAMENTO")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("OPZIONI RIPRESA:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Spurga di più")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Riprendi stampa")
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Ugello: ")
-#define MSG_RUNOUT_SENSOR _UxGT("Sens.filo termin.") // Max 17 caratteri
-#define MSG_RUNOUT_DISTANCE_MM _UxGT("Dist mm filo term.")
-#define MSG_ERR_HOMING_FAILED _UxGT("Home fallito")
-#define MSG_ERR_PROBING_FAILED _UxGT("Sondaggio fallito")
-#define MSG_M600_TOO_COLD _UxGT("M600:Troppo freddo")
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" pronto.");
+ PROGMEM Language_Str MSG_YES = _UxGT("SI");
+ PROGMEM Language_Str MSG_NO = _UxGT("NO");
+ PROGMEM Language_Str MSG_BACK = _UxGT("Indietro");
+ PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Annullando...");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Media inserito");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Media rimosso");
+ PROGMEM Language_Str MSG_MEDIA_RELEASED = _UxGT("Media rilasciato");
+ PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Aspettando media");
+ PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Err.leggendo media");
+ PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("Dispos.USB rimosso");
+ PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Avvio USB fallito");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Finecor."); // Max 8 characters
+ PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Finecorsa Soft");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Menu principale");
+ PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Impostaz. avanzate");
+ PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configurazione");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autostart");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Disabilita Motori");
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu di debug");
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test barra avanzam.");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Auto Home");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Home asse X");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Home asse Y");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Home asse Z");
+ PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Allineam.automat. Z");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Home assi XYZ");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Premi per iniziare");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Punto successivo");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Livel. terminato!");
+ PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Fade Height");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Imp. offset home");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offset applicato");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Imposta Origine");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Preriscalda ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Preriscalda ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Preriscalda ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Preriscalda ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Preriscalda ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Preriscalda ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Preriscalda ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Tutto");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Piatto");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" conf");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Preriscalda ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Preriscalda ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Preriscalda ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Preriscalda ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Preriscalda ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Preriscalda ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Preriscalda ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Ugello");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Ugello ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Ugello ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Ugello ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Ugello ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Ugello ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Ugello ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Tutto");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" Piatto");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Preris.") PREHEAT_2_LABEL _UxGT(" conf");
+ PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Prerisc.personal.");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Raffredda");
+ PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Controllo laser");
+ PROGMEM Language_Str MSG_LASER_OFF = _UxGT("Laser Off");
+ PROGMEM Language_Str MSG_LASER_ON = _UxGT("Laser On");
+ PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Potenza laser");
+ PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Controllo mandrino");
+ PROGMEM Language_Str MSG_SPINDLE_OFF = _UxGT("Mandrino Off");
+ PROGMEM Language_Str MSG_SPINDLE_ON = _UxGT("Mandrino On");
+ PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Potenza mandrino");
+ PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Inverti mandrino");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Accendi aliment.");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Spegni aliment.");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Estrudi");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Ritrai");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Muovi Asse");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Livella piano");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Livella piano");
+ PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Livella spigoli");
+ PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Prossimo spigolo");
+ PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Editor Mesh");
+ PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Modifica Mesh");
+ PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Modif. Mesh Fermata");
+ PROGMEM Language_Str MSG_PROBING_MESH = _UxGT("Punto sondato");
+ PROGMEM Language_Str MSG_MESH_X = _UxGT("Indice X");
+ PROGMEM Language_Str MSG_MESH_Y = _UxGT("Indice Y");
+ PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Valore di Z");
+ PROGMEM Language_Str MSG_USER_MENU = _UxGT("Comandi personaliz.");
+ PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Punto inclinaz.");
+ PROGMEM Language_Str MSG_M48_TEST = _UxGT("Test sonda M48");
+ PROGMEM Language_Str MSG_M48_POINT = _UxGT("Punto M48");
+ PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Deviazione");
+ PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Modo IDEX");
+ PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Strumenti Offsets");
+ PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
+ PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicazione");
+ PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copia speculare");
+ PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Pieno controllo");
+ PROGMEM Language_Str MSG_X_OFFSET = _UxGT("2° ugello X");
+ PROGMEM Language_Str MSG_Y_OFFSET = _UxGT("2° ugello Y");
+ PROGMEM Language_Str MSG_Z_OFFSET = _UxGT("2° ugello Z");
+ PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("G29 in corso");
+ PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Strumenti UBL");
+ PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
+ PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Mesh Manuale");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Metti spes. e misura");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Misura");
+ PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Rimuovi e mis.piatto");
+ PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Spostamento succes.");
+ PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Attiva UBL");
+ PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Disattiva UBL");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Temp. Piatto");
+ PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temp. Piatto");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temp. Ugello");
+ PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temp. Ugello");
+ PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Modifica Mesh");
+ PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Modif.Mesh personal.");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Ritocca Mesh");
+ PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Modif.Mesh fatta");
+ PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Crea Mesh personal.");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Crea Mesh");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = _UxGT("Crea Mesh ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("Crea Mesh ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Crea Mesh a freddo");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Aggiusta Alt. Mesh");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Altezza");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Valida Mesh");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("Valida Mesh ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Valida Mesh ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 riscald.letto");
+ PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 riscald.ugello");
+ PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Priming manuale...");
+ PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Prime a lung.fissa");
+ PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Priming terminato");
+ PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 Annullato");
+ PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Uscita da G26");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Valida Mesh pers.");
+ PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Continua Mesh");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Livell. Mesh");
+ PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Livell. 3 Punti");
+ PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Livell. Griglia Mesh");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Livella Mesh");
+ PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Punti laterali");
+ PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Tipo di Mappa");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Esporta Mappa");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Esporta per Host");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Esporta in CSV");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Backup esterno");
+ PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Esporta Info UBL");
+ PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Riempimento");
+ PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Riempimento Manuale");
+ PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Riempimento Smart");
+ PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Riempimento Mesh");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Invalida Tutto");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalid.Punto Vicino");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Ritocca All");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Ritocca Punto Vicino");
+ PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Mesh Salvate");
+ PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Slot di memoria");
+ PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Carica Mesh Piatto");
+ PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Salva Mesh Piatto");
+ PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("M117 Mesh %i caricata");
+ PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("M117 Mesh %i salvata");
+ PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Nessuna memoria");
+ PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Err: Salvataggio UBL");
+ PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Err: Ripristino UBL");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Offset Fermato");
+ PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL passo passo");
+ PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Crea Mesh a freddo");
+ PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Riempimento Smart");
+ PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Valida Mesh");
+ PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Ritocca All");
+ PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Valida Mesh");
+ PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Ritocca All");
+ PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Salva Mesh Piatto");
-#define MSG_MMU2_FILAMENT_CHANGE_HEADER _UxGT("CAMBIO FILAMENTO")
-#define MSG_MMU2_CHOOSE_FILAMENT_HEADER _UxGT("SCELTA FILAMENTO")
-#define MSG_MMU2_MENU _UxGT("MMU")
-#define MSG_MMU2_WRONG_FIRMWARE _UxGT("Agg.firmware MMU!")
-#define MSG_MMU2_NOT_RESPONDING _UxGT("MMU chiede attenz.")
-#define MSG_MMU2_RESUME _UxGT("Riprendi stampa")
-#define MSG_MMU2_RESUMING _UxGT("Ripresa...")
-#define MSG_MMU2_LOAD_FILAMENT _UxGT("Carica filamento")
-#define MSG_MMU2_LOAD_ALL _UxGT("Carica tutto")
-#define MSG_MMU2_LOAD_TO_NOZZLE _UxGT("Carica fino ugello")
-#define MSG_MMU2_EJECT_FILAMENT _UxGT("Espelli filamento")
-#define MSG_MMU2_EJECT_FILAMENT0 _UxGT("Espelli filam.1")
-#define MSG_MMU2_EJECT_FILAMENT1 _UxGT("Espelli filam.2")
-#define MSG_MMU2_EJECT_FILAMENT2 _UxGT("Espelli filam.3")
-#define MSG_MMU2_EJECT_FILAMENT3 _UxGT("Espelli filam.4")
-#define MSG_MMU2_EJECT_FILAMENT4 _UxGT("Espelli filam.5")
-#define MSG_MMU2_UNLOAD_FILAMENT _UxGT("Scarica filamento")
-#define MSG_MMU2_LOADING_FILAMENT _UxGT("Caric.fil. %i...")
-#define MSG_MMU2_EJECTING_FILAMENT _UxGT("Esplus.filam. ...")
-#define MSG_MMU2_UNLOADING_FILAMENT _UxGT("Scaric.filam. ...")
-#define MSG_MMU2_ALL _UxGT("Tutto")
-#define MSG_MMU2_FILAMENT0 _UxGT("Filamento 1")
-#define MSG_MMU2_FILAMENT1 _UxGT("Filamento 2")
-#define MSG_MMU2_FILAMENT2 _UxGT("Filamento 3")
-#define MSG_MMU2_FILAMENT3 _UxGT("Filamento 4")
-#define MSG_MMU2_FILAMENT4 _UxGT("Filamento 5")
-#define MSG_MMU2_RESET _UxGT("Azzera MMU")
-#define MSG_MMU2_RESETTING _UxGT("Azzeramento MMU...")
-#define MSG_MMU2_EJECT_RECOVER _UxGT("Rimuovi, click")
+ PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Controllo LED");
+ PROGMEM Language_Str MSG_LEDS = _UxGT("Luci");
+ PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Preset luce");
+ PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Rosso");
+ PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Arancione");
+ PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Giallo");
+ PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Verde");
+ PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Blu");
+ PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indaco");
+ PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Viola");
+ PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Bianco");
+ PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Predefinito");
+ PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Luci personalizzate");
+ PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Intensità rosso");
+ PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Intensità verde");
+ PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Intensità blu");
+ PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Intensità bianco");
+ PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Luminosità");
-#define MSG_MIX _UxGT("Miscela")
-#define MSG_MIX_COMPONENT _UxGT("Componente")
-#define MSG_MIXER _UxGT("Miscelatore")
-#define MSG_GRADIENT _UxGT("Gradiente")
-#define MSG_FULL_GRADIENT _UxGT("Gradiente pieno")
-#define MSG_TOGGLE_MIX _UxGT("Alterna miscela")
-#define MSG_CYCLE_MIX _UxGT("Ciclo miscela")
-#define MSG_GRADIENT_MIX _UxGT("Miscela gradiente")
-#define MSG_REVERSE_GRADIENT _UxGT("Inverti gradiente")
-#define MSG_ACTIVE_VTOOL _UxGT("V-tool attivo")
-#define MSG_START_VTOOL _UxGT("V-tool iniziale")
-#define MSG_END_VTOOL _UxGT("V-tool finale")
-#define MSG_GRADIENT_ALIAS _UxGT("V-tool alias")
-#define MSG_RESET_VTOOLS _UxGT("Ripristina V-tools")
-#define MSG_COMMIT_VTOOL _UxGT("Commit mix V-tool")
-#define MSG_VTOOLS_RESET _UxGT("V-tools ripristin.")
-#define MSG_START_Z _UxGT("Z inizio")
-#define MSG_END_Z _UxGT("Z fine")
+ PROGMEM Language_Str MSG_MOVING = _UxGT("In movimento...");
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("XY liberi");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Muovi X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Muovi Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Muovi Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Estrusore");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Estrusore ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Estrusore ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Estrusore ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Estrusore ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Estrusore ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Estrusore ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Ugello freddo");
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Muovi di %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Muovi di 0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Muovi di 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Muovi di 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Velocità");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Piatto Z");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Ugello");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Ugello ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Ugello ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Ugello ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Ugello ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Ugello ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Ugello ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Piatto");
+ PROGMEM Language_Str MSG_CHAMBER = _UxGT("Camera");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vel. ventola"); // Max 15 characters
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Vel. ventola 1"); // Max 15 characters
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Vel. ventola 2"); // Max 15 characters
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Vel. ventola 3"); // Max 15 characters
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Extra vel.vent."); // Max 15 characters
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1 = _UxGT("Extra v.vent. 1"); // Max 15 characters
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2 = _UxGT("Extra v.vent. 2"); // Max 15 characters
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3 = _UxGT("Extra v.vent. 3"); // Max 15 characters
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Flusso");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Flusso ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Flusso ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Flusso ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Flusso ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Flusso ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Flusso ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Controllo");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Autotemp");
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("On");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Off");
+ PROGMEM Language_Str MSG_AUTOTUNE_PID = _UxGT("PID Autotune");
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E0 = _UxGT("PID Autotune ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E1 = _UxGT("PID Autotune ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E2 = _UxGT("PID Autotune ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E3 = _UxGT("PID Autotune ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E4 = _UxGT("PID Autotune ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E5 = _UxGT("PID Autotune ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
+ PROGMEM Language_Str MSG_PID_P_E0 = _UxGT("PID-P ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_P_E1 = _UxGT("PID-P ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_P_E2 = _UxGT("PID-P ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_P_E3 = _UxGT("PID-P ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_P_E4 = _UxGT("PID-P ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_P_E5 = _UxGT("PID-P ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
+ PROGMEM Language_Str MSG_PID_I_E0 = _UxGT("PID-I ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_I_E1 = _UxGT("PID-I ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_I_E2 = _UxGT("PID-I ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_I_E3 = _UxGT("PID-I ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_I_E4 = _UxGT("PID-I ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_I_E5 = _UxGT("PID-I ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
+ PROGMEM Language_Str MSG_PID_D_E0 = _UxGT("PID-D ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_D_E1 = _UxGT("PID-D ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_D_E2 = _UxGT("PID-D ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_D_E3 = _UxGT("PID-D ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_D_E4 = _UxGT("PID-D ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_D_E5 = _UxGT("PID-D ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
+ PROGMEM Language_Str MSG_PID_C_E0 = _UxGT("PID-C ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_C_E1 = _UxGT("PID-C ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_C_E2 = _UxGT("PID-C ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_C_E3 = _UxGT("PID-C ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_C_E4 = _UxGT("PID-C ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_C_E5 = _UxGT("PID-C ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Seleziona");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Seleziona ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Seleziona ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Seleziona ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Seleziona ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Seleziona ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Seleziona ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Accel");
+ PROGMEM Language_Str MSG_JERK = _UxGT("Jerk");
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-jerk");
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-jerk");
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-jerk");
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-jerk");
+ PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Deviaz. giunzioni");
+ PROGMEM Language_Str MSG_VELOCITY = _UxGT("Velocità");
+ PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A;
+ PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B;
+ PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C;
+ PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E;
+ PROGMEM Language_Str MSG_VMAX_E0 = _UxGT("Vmax ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_VMAX_E1 = _UxGT("Vmax ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_VMAX_E2 = _UxGT("Vmax ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_VMAX_E3 = _UxGT("Vmax ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_VMAX_E4 = _UxGT("Vmax ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_VMAX_E5 = _UxGT("Vmax ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_VMIN = _UxGT("Vmin");
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VTrav min");
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Accelerazione");
+ PROGMEM Language_Str MSG_AMAX_A = _UxGT("Amax ") LCD_STR_A;
+ PROGMEM Language_Str MSG_AMAX_B = _UxGT("Amax ") LCD_STR_B;
+ PROGMEM Language_Str MSG_AMAX_C = _UxGT("Amax ") LCD_STR_C;
+ PROGMEM Language_Str MSG_AMAX_E = _UxGT("Amax ") LCD_STR_E;
+ PROGMEM Language_Str MSG_AMAX_E0 = _UxGT("Amax ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AMAX_E1 = _UxGT("Amax ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AMAX_E2 = _UxGT("Amax ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AMAX_E3 = _UxGT("Amax ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AMAX_E4 = _UxGT("Amax ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AMAX_E5 = _UxGT("Amax ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-Ritrazione");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-Spostamento");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Passi/mm");
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT("passi/mm");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT("passi/mm");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT("passi/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("Epassi/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT("passi/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT("passi/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT("passi/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT("passi/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT("passi/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT("passi/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Movimento");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filamento");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm³");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Diam. filo");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Diam. filo ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Diam. filo ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Diam. filo ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Diam. filo ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Diam. filo ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Diam. filo ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Rimuovi mm");
+ PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Carica mm");
+ PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("K Avanzamento");
+ PROGMEM Language_Str MSG_ADVANCE_K_E0 = _UxGT("K Avanzamento ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_ADVANCE_K_E1 = _UxGT("K Avanzamento ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_ADVANCE_K_E2 = _UxGT("K Avanzamento ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_ADVANCE_K_E3 = _UxGT("K Avanzamento ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_ADVANCE_K_E4 = _UxGT("K Avanzamento ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_ADVANCE_K_E5 = _UxGT("K Avanzamento ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contrasto LCD");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Salva impostazioni");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Carica impostazioni");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Ripristina imp.");
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Inizializza EEPROM");
+ PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Aggiorna media");
+ PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Resetta stampante");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Aggiorna");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Schermata info");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Prepara");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Regola");
+ PROGMEM Language_Str MSG_START_PRINT = _UxGT("Avvia stampa");
+ PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Prossimo");
+ PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Inizializza");
+ PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Stop");
+ PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Stampa");
+ PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Resetta");
+ PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Annulla");
+ PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Fatto");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausa stampa");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Riprendi stampa");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Arresta stampa");
+ PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Cancella Oggetto");
+ PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Ripresa da PowerLoss");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Stampa da media");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Media non presente");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Sospensione...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Premi tasto..");
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Stampa sospesa");
+ PROGMEM Language_Str MSG_PRINTING = _UxGT("Stampa...");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Stampa annullata");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Nessun Movimento");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("UCCISO. ");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("ARRESTATO. ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Ritrai mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Scamb. Ritrai mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Ritrai V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Salta mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Scamb. UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("UnRet V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("AutoRitrai");
+ PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Dist. ritrazione");
+ PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Lunghezza spurgo");
+ PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Cambio utensile");
+ PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Risalita Z");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD = _UxGT("Velocità innesco");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD = _UxGT("Velocità retrazione");
+ PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Standby ugello");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Cambia filamento");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Cambia filamento ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Cambia filamento ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Cambia filamento ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Cambia filamento ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Cambia filamento ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Cambia filamento ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Carica filamento");
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E0 = _UxGT("Carica filamento ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E1 = _UxGT("Carica filamento ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E2 = _UxGT("Carica filamento ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E3 = _UxGT("Carica filamento ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E4 = _UxGT("Carica filamento ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E5 = _UxGT("Carica filamento ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Rimuovi filamento");
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0 = _UxGT("Rimuovi filamento ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1 = _UxGT("Rimuovi filamento ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2 = _UxGT("Rimuovi filamento ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3 = _UxGT("Rimuovi filamento ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4 = _UxGT("Rimuovi filamento ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5 = _UxGT("Rimuovi filamento ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Rimuovi tutto");
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Inizializ. media");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Cambia media");
+ PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Rilascia media");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z probe fuori piatto");
+ PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Fattore distorsione");
+ PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Autotest BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Resetta BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Estendi BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("BLTouch modo SW");
+ PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("BLTouch modo 5V");
+ PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("BLTouch modo OD");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("BLTouch modo mem.");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Metti BLTouch a 5V");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Metti BLTouch a OD");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Segnala modo");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("PERICOLO: Impostazioni errate possono cause danni! Procedo comunque?");
+ PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Inizializ.TouchMI");
+ PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Test Z offset");
+ PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Memorizzare");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Estendi TouchMI");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Estendi Sonda-Z");
+ PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Ritrai BLTouch");
+ PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Ritrai Sonda-Z");
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Home %s%s%s prima");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Offset sonda Z");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
+ PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Totali");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Finecorsa annullati");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Riscald. Fallito");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED = _UxGT("Risc. piatto fallito");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_CHAMBER = _UxGT("Risc. camera fallito");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: TEMP RIDONDANTE");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("TEMP FUORI CONTROLLO");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("TEMP PIAT.FUORI CTRL");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("T.CAMERA FUORI CTRL");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err: TEMP MASSIMA");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err: TEMP MINIMA");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("Err: TEMP MAX PIATTO");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Err: TEMP MIN PIATTO");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER = _UxGT("Err: TEMP MAX CAMERA");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER = _UxGT("Err: TEMP MIN CAMERA");
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Home XY prima");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("STAMPANTE FERMATA");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Riavviare prego");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("g"); // Un solo carattere
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // Un solo carattere
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // Un solo carattere
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Riscaldamento...");
+ PROGMEM Language_Str MSG_COOLING = _UxGT("Raffreddamento..");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Risc. piatto...");
+ PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Raffr. piatto...");
+ PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Risc. camera...");
+ PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Raffr. camera...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibraz. Delta");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibra X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibra Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibra Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibra centro");
+ PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Impostaz. Delta");
+ PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto calibrazione");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Imp. altezza Delta");
+ PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Offset sonda-Z");
+ PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Barra Diagonale");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Altezza");
+ PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Raggio");
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Riguardo stampante");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Info. stampante");
+ PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("Livel. a 3 punti");
+ PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Livel. Lineare");
+ PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Livel. Bilineare");
+ PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Livel.piatto unific.");
+ PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Livel. Mesh");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Statistiche");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Info. scheda");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistori");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Estrusori");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baud");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocollo");
+ PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Controllo fuga: OFF");
+ PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Controllo fuga: ON");
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Luci Case");
+ PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Luminosità Luci");
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Contat. stampa");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completati");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tempo totale");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Lavoro più lungo");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Totale estruso");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Stampe");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completati");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Durata");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Più lungo");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Estruso");
+ #endif
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Temp min");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Temp max");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Alimentatore");
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Potenza Drive");
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("Driver %");
+ PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("ERR.CONNESSIONE TMC");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Scrivi DAC EEPROM");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("CAMBIO FILAMENTO");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("STAMPA IN PAUSA");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CARICA FILAMENTO");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("RIMUOVI FILAMENTO");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPZIONI RIPRESA:");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Spurga di più");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Riprendi stampa");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Ugello: ");
+ PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Sens.filo termin."); // Max 17 characters
+ PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Dist mm filo term.");
+ PROGMEM Language_Str MSG_LCD_HOMING_FAILED = _UxGT("Home fallito");
+ PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Sondaggio fallito");
+ PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600:Troppo freddo");
-#define MSG_GAMES _UxGT("Giochi")
-#define MSG_BRICKOUT _UxGT("Brickout")
-#define MSG_INVADERS _UxGT("Invaders")
-#define MSG_SNAKE _UxGT("Sn4k3")
-#define MSG_MAZE _UxGT("Maze")
+ PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("SCELTA FILAMENTO");
+ PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
+ PROGMEM Language_Str MSG_MMU2_WRONG_FIRMWARE = _UxGT("Agg.firmware MMU!");
+ PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU chiede attenz.");
+ PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Riprendi stampa");
+ PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Ripresa...");
+ PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Carica filamento");
+ PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Carica tutto");
+ PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Carica fino ugello");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Espelli filamento");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT0 = _UxGT("Espelli filam.1");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT1 = _UxGT("Espelli filam.2");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT2 = _UxGT("Espelli filam.3");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT3 = _UxGT("Espelli filam.4");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT4 = _UxGT("Espelli filam.5");
+ PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Scarica filamento");
+ PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Caric.fil. %i...");
+ PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Esplus.filam. ...");
+ PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Scaric.filam. ...");
+ PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Tutto");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT0 = _UxGT("Filamento 1");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT1 = _UxGT("Filamento 2");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT2 = _UxGT("Filamento 3");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT3 = _UxGT("Filamento 4");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT4 = _UxGT("Filamento 5");
+ PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Azzera MMU");
+ PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Azzeramento MMU...");
+ PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Rimuovi, click");
-#define MSG_EXPECTED_PRINTER _UxGT("Stampante errata")
+ PROGMEM Language_Str MSG_MIX = _UxGT("Miscela");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_1 = _UxGT("Componente 1");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_2 = _UxGT("Componente 2");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_3 = _UxGT("Componente 3");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_4 = _UxGT("Componente 4");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_5 = _UxGT("Componente 5");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_6 = _UxGT("Componente 6");
+ PROGMEM Language_Str MSG_MIXER = _UxGT("Miscelatore");
+ PROGMEM Language_Str MSG_GRADIENT = _UxGT("Gradiente");
+ PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Gradiente pieno");
+ PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Alterna miscela");
+ PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Ciclo miscela");
+ PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Miscela gradiente");
+ PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Inverti gradiente");
+ PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("V-tool attivo");
+ PROGMEM Language_Str MSG_START_VTOOL = _UxGT("V-tool iniziale");
+ PROGMEM Language_Str MSG_END_VTOOL = _UxGT("V-tool finale");
+ PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("V-tool alias");
+ PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Ripristina V-tools");
+ PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Commit mix V-tool");
+ PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-tools ripristin.");
+ PROGMEM Language_Str MSG_START_Z = _UxGT("Z inizio:");
+ PROGMEM Language_Str MSG_END_Z = _UxGT("Z fine:");
-//
-// Le schermate di Cambio Filamento possono visualizzare fino a 3 linee su un display a 4 righe
-// ...o fino a 2 linee su un display a 3 righe.
-#if LCD_HEIGHT >= 4
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Premi per")
- #define MSG_ADVANCED_PAUSE_WAITING_2 _UxGT("riprendere")
- #define MSG_ADVANCED_PAUSE_WAITING_3 _UxGT("la stampa")
- #define MSG_PAUSE_PRINT_INIT_1 _UxGT("Parcheggiando...")
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Attendere avvio")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("del cambio")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("di filamento")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Inserisci il")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("filamento e premi")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("per continuare")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Premi per")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("riscaldare ugello")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Riscaldam. ugello")
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Attendere prego...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Attendere")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("l'espulsione")
- #define MSG_FILAMENT_CHANGE_UNLOAD_3 _UxGT("del filamento")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Attendere")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("il caricamento")
- #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("del filamento")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Attendere")
- #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("lo spurgo")
- #define MSG_FILAMENT_CHANGE_PURGE_3 _UxGT("del filamento")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Premi x terminare")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_2 _UxGT("lo spurgo")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_3 _UxGT("del filamento")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Attendere")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("la ripresa")
- #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("della stampa...")
-#else // LCD_HEIGHT < 4
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Premi x continuare")
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Attendere...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Inserisci e premi")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Riscalda ugello")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Riscaldamento...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Espulsione...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Caricamento...")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Spurgo filamento")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Premi x terminare")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Ripresa...")
-#endif // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_GAMES = _UxGT("Giochi");
+ PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
+ PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
+ PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
+ PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
-#define MSG_TMC_DRIVERS _UxGT("Drivers TMC")
-#define MSG_TMC_CURRENT _UxGT("Driver in uso")
-#define MSG_TMC_HYBRID_THRS _UxGT("Soglia modo ibrido")
-#define MSG_TMC_HOMING_THRS _UxGT("Azzer. sensorless")
-#define MSG_TMC_STEPPING_MODE _UxGT("Modo stepping")
-#define MSG_TMC_STEALTH_ENABLED _UxGT("StealthChop abil.")
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Stampante errata");
-#define MSG_SERVICE_RESET _UxGT("Resetta")
-#define MSG_SERVICE_IN _UxGT(" tra:")
+ //
+ // Le schermate di Cambio Filamento possono visualizzare fino a 3 linee su un display a 4 righe
+ // ...o fino a 2 linee su un display a 3 righe.
+ #if LCD_HEIGHT >= 4
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_3_LINE("Premi per", "riprendere", "la stampa"));
+ PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Parcheggiando..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Attendere avvio", "del cambio", "di filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Inserisci il", "filamento e premi", "per continuare"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Premi per", "riscaldare ugello"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Riscaldam. ugello", "Attendere prego..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Attendere", "l'espulsione", "del filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Attendere", "il caricamento", "del filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Attendere", "lo spurgo", "del filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Premi x terminare", "lo spurgo", "del filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Attendere", "la ripresa", "della stampa..."));
+ #else // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Premi x continuare"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Attendere..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Inserisci e premi"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Riscalda ugello"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Riscaldamento..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Espulsione..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Caricamento..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Spurgo filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Premi x terminare"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Ripresa..."));
+ #endif // LCD_HEIGHT < 4
-#define MSG_BACKLASH _UxGT("Gioco")
-#define MSG_BACKLASH_CORRECTION _UxGT("Correzione")
-#define MSG_BACKLASH_SMOOTHING _UxGT("Smoothing")
+ PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("Drivers TMC");
+ PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Driver in uso");
+ PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Soglia modo ibrido");
+ PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Azzer. sensorless");
+ PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Modo stepping");
+ PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop abil.");
+
+ PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Resetta");
+ PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" tra:");
+
+ PROGMEM Language_Str MSG_BACKLASH = _UxGT("Gioco");
+ PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
+ PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
+ PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
+ PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Correzione");
+ PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Smoothing");
+}
diff --git a/Marlin/src/lcd/language/language_jp-kana.h b/Marlin/src/lcd/language/language_jp-kana.h
deleted file mode 100644
index 1898ab01d6ce..000000000000
--- a/Marlin/src/lcd/language/language_jp-kana.h
+++ /dev/null
@@ -1,222 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-#pragma once
-
-/**
- * Japanese (Kana)
- * UTF-8 for Graphical Display
- *
- * LCD Menu Messages
- * See also http://marlinfw.org/docs/development/lcd_language.html
- *
- */
-
-#define DISPLAY_CHARSET_ISO10646_KANA
-#define CHARSIZE 3
-
-// This just to show the potential benefit of unicode.
-// This translation can be improved by using the full charset of unicode codeblock U+30A0 to U+30FF.
-
-// 片仮名表示定義
-#define WELCOME_MSG MACHINE_NAME _UxGT(" ready.")
-#define MSG_MEDIA_INSERTED _UxGT("カードガソウニュウサレマシタ") // "Card inserted"
-#define MSG_MEDIA_REMOVED _UxGT("カードガアリマセン") // "Card removed"
-#define MSG_LCD_ENDSTOPS _UxGT("エンドストップ") // "Endstops" // Max length 8 characters
-#define MSG_MAIN _UxGT("メイン") // "Main"
-#define MSG_AUTOSTART _UxGT("ジドウカイシ") // "Autostart"
-#define MSG_DISABLE_STEPPERS _UxGT("モーターデンゲン オフ") // "Disable steppers"
-#define MSG_DEBUG_MENU _UxGT("デバッグメニュー") // "Debug Menu"
-#define MSG_PROGRESS_BAR_TEST _UxGT("プログレスバー テスト") // "Progress Bar Test"
-#define MSG_AUTO_HOME _UxGT("ゲンテンフッキ") // "Auto home"
-#define MSG_AUTO_HOME_X _UxGT("Xジク ゲンテンフッキ") // "Home X"
-#define MSG_AUTO_HOME_Y _UxGT("Yジク ゲンテンフッキ") // "Home Y"
-#define MSG_AUTO_HOME_Z _UxGT("Zジク ゲンテンフッキ") // "Home Z"
-#define MSG_LEVEL_BED_HOMING _UxGT("ゲンテンフッキチュウ") // "Homing XYZ"
-#define MSG_LEVEL_BED_WAITING _UxGT("レベリングカイシ") // "Click to Begin"
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("ツギノソクテイテンヘ") // "Next Point"
-#define MSG_LEVEL_BED_DONE _UxGT("レベリングカンリョウ") // "Leveling Done!"
-#define MSG_SET_HOME_OFFSETS _UxGT("キジュンオフセットセッテイ") // "Set home offsets"
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("オフセットガテキヨウサレマシタ") // "Offsets applied"
-#define MSG_SET_ORIGIN _UxGT("キジュンセット") // "Set origin"
-#define MSG_PREHEAT_1 _UxGT(PREHEAT_1_LABEL " ヨネツ") // "Preheat " PREHEAT_1_LABEL
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL _UxGT(PREHEAT_1_LABEL " スベテヨネツ") // " All"
-#define MSG_PREHEAT_1_BEDONLY _UxGT(PREHEAT_1_LABEL " ベッドヨネツ") // " Bed"
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT("セッテイ") // " conf"
-#define MSG_PREHEAT_2 _UxGT(PREHEAT_2_LABEL " ヨネツ") // "Preheat " PREHEAT_2_LABEL
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL _UxGT(PREHEAT_2_LABEL " スベテヨネツ") // " All"
-#define MSG_PREHEAT_2_BEDONLY _UxGT(PREHEAT_2_LABEL " ベッドヨネツ") // " Bed"
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT("セッテイ") // " conf"
-#define MSG_COOLDOWN _UxGT("カネツテイシ") // "Cooldown"
-#define MSG_SWITCH_PS_ON _UxGT("デンゲン オン") // "Switch power on"
-#define MSG_SWITCH_PS_OFF _UxGT("デンゲン オフ") // "Switch power off"
-#define MSG_EXTRUDE _UxGT("オシダシ") // "Extrude"
-#define MSG_RETRACT _UxGT("ヒキコミセッテイ") // "Retract"
-#define MSG_MOVE_AXIS _UxGT("ジクイドウ") // "Move axis"
-#define MSG_BED_LEVELING _UxGT("ベッドレベリング") // "Bed leveling"
-#define MSG_LEVEL_BED _UxGT("ベッドレベリング") // "Level bed"
-
-#define MSG_MOVING _UxGT("イドウチュウ") // "Moving..."
-#define MSG_FREE_XY _UxGT("XYジク カイホウ") // "Free XY"
-#define MSG_MOVE_X _UxGT("Xジク イドウ") // "Move X"
-#define MSG_MOVE_Y _UxGT("Yジク イドウ") // "Move Y"
-#define MSG_MOVE_Z _UxGT("Zジク イドウ") // "Move Z"
-#define MSG_MOVE_E _UxGT("エクストルーダー") // "Extruder"
-#define MSG_MOVE_Z_DIST _UxGT("%smm イドウ") // "Move 0.025mm"
-#define MSG_MOVE_01MM _UxGT("0.1mm イドウ") // "Move 0.1mm"
-#define MSG_MOVE_1MM _UxGT(" 1mm イドウ") // "Move 1mm"
-#define MSG_MOVE_10MM _UxGT(" 10mm イドウ") // "Move 10mm"
-#define MSG_SPEED _UxGT("ソクド") // "Speed"
-#define MSG_BED_Z _UxGT("Zオフセット") // "Bed Z"
-#define MSG_NOZZLE _UxGT("ノズル") // "Nozzle"
-#define MSG_BED _UxGT("ベッド") // "Bed"
-#define MSG_FAN_SPEED _UxGT("ファンソクド") // "Fan speed"
-#define MSG_FLOW _UxGT("トシュツリョウ") // "Flow"
-#define MSG_CONTROL _UxGT("セイギョ") // "Control"
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" サイテイ") // " Min"
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" サイコウ") // " Max"
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" ファクター") // " Fact"
-#define MSG_AUTOTEMP _UxGT("ジドウオンドセイギョ") // "Autotemp"
-#define MSG_LCD_ON _UxGT("オン") // "On"
-#define MSG_LCD_OFF _UxGT("オフ") // "Off"
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("センタク") // "Select"
-#define MSG_ACC _UxGT("カソクド mm/s2") // "Accel"
-#define MSG_JERK _UxGT("ヤクド mm/s") // "Jerk"
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Aジク ヤクド mm/s") // "Va-jerk"
- #define MSG_VB_JERK _UxGT("Bジク ヤクド mm/s") // "Vb-jerk"
- #define MSG_VC_JERK _UxGT("Cジク ヤクド mm/s") // "Vc-jerk"
-#else
- #define MSG_VA_JERK _UxGT("Xジク ヤクド mm/s") // "Vx-jerk"
- #define MSG_VB_JERK _UxGT("Yジク ヤクド mm/s") // "Vy-jerk"
- #define MSG_VC_JERK _UxGT("Zジク ヤクド mm/s") // "Vz-jerk"
-#endif
-#define MSG_VE_JERK _UxGT("エクストルーダー ヤクド") // "Ve-jerk"
-#define MSG_VMAX _UxGT("サイダイオクリソクド ") // "Vmax "
-#define MSG_VMIN _UxGT("サイショウオクリソクド") // "Vmin"
-#define MSG_VTRAV_MIN _UxGT("サイショウイドウソクド") // "VTrav min"
-#define MSG_ACCELERATION MSG_ACC
-#define MSG_AMAX _UxGT("サイダイカソクド ") // "Amax "
-#define MSG_A_RETRACT _UxGT("ヒキコミカソクド") // "A-retract"
-#define MSG_A_TRAVEL _UxGT("イドウカソクド") // "A-travel"
-#define MSG_TEMPERATURE _UxGT("オンド") // "Temperature"
-#define MSG_MOTION _UxGT("ウゴキセッテイ") // "Motion"
-#define MSG_FILAMENT _UxGT("フィラメント") // "Filament"
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E in mm3")
-#define MSG_FILAMENT_DIAM _UxGT("フィラメントチョッケイ") // "Fil. Dia."
-#define MSG_CONTRAST _UxGT("LCDコントラスト") // "LCD contrast"
-#define MSG_STORE_EEPROM _UxGT("メモリヘカクノウ") // "Store memory"
-#define MSG_LOAD_EEPROM _UxGT("メモリカラヨミコミ") // "Load memory"
-#define MSG_RESTORE_FAILSAFE _UxGT("セッテイリセット") // "Restore failsafe"
-#define MSG_REFRESH _UxGT("リフレッシュ") // "Refresh"
-#define MSG_WATCH _UxGT("ジョウホウガメン") // "Info screen"
-#define MSG_PREPARE _UxGT("ジュンビセッテイ") // "Prepare"
-#define MSG_TUNE _UxGT("チョウセイ") // "Tune"
-#define MSG_PAUSE_PRINT _UxGT("イチジテイシ") // "Pause print"
-#define MSG_RESUME_PRINT _UxGT("プリントサイカイ") // "Resume print"
-#define MSG_STOP_PRINT _UxGT("プリントテイシ") // "Stop print"
-#define MSG_MEDIA_MENU _UxGT("SDカードカラプリント") // "Print from SD"
-#define MSG_NO_MEDIA _UxGT("SDカードガアリマセン") // "No SD card"
-#define MSG_DWELL _UxGT("キュウシ") // "Sleep..."
-#define MSG_USERWAIT _UxGT("シバラクオマチクダサイ") // "Wait for user..."
-#define MSG_PRINT_ABORTED _UxGT("プリントガチュウシサレマシタ") // "Print aborted"
-#define MSG_NO_MOVE _UxGT("ウゴキマセン") // "No move."
-#define MSG_KILLED _UxGT("ヒジョウテイシ") // "KILLED. "
-#define MSG_STOPPED _UxGT("テイシシマシタ") // "STOPPED. "
-#define MSG_CONTROL_RETRACT _UxGT("ヒキコミリョウ mm") // "Retract mm"
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("ヒキコミリョウS mm") // "Swap Re.mm"
-#define MSG_CONTROL_RETRACTF _UxGT("ヒキコミソクド mm/s") // "Retract V"
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("ノズルタイヒ mm") // "Hop mm"
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("ホショウリョウ mm") // "UnRet mm"
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("ホショウリョウS mm") // "S UnRet mm"
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("ホショウソクド mm/s") // "UnRet V"
-#define MSG_AUTORETRACT _UxGT("ジドウヒキコミ") // "AutoRetr."
-#define MSG_FILAMENTCHANGE _UxGT("フィラメントコウカン") // "Change filament"
-#define MSG_INIT_MEDIA _UxGT("SDカードサイヨミコミ") // "Init. SD card"
-#define MSG_CHANGE_MEDIA _UxGT("SDカードコウカン") // "Change SD card"
-#define MSG_ZPROBE_OUT _UxGT("Zプローブ ベッドガイ") // "Z probe out. bed"
-#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch ジコシンダン") // "BLTouch Self-Test"
-#define MSG_BLTOUCH_RESET _UxGT("BLTouch リセット") // "Reset BLTouch"
-#define MSG_HOME_FIRST _UxGT("サキニ %s%s%s ヲフッキサセテクダサイ") // "Home ... first"
-#define MSG_ZPROBE_ZOFFSET _UxGT("Zオフセット") // "Z Offset"
-#define MSG_BABYSTEP_X _UxGT("Xジク ビドウ") // "Babystep X"
-#define MSG_BABYSTEP_Y _UxGT("Yジク ビドウ") // "Babystep Y"
-#define MSG_BABYSTEP_Z _UxGT("Zジク ビドウ") // "Babystep Z"
-#define MSG_ENDSTOP_ABORT _UxGT("イドウゲンカイケンチキノウ") // "Endstop abort"
-#define MSG_HEATING_FAILED_LCD _UxGT("カネツシッパイ") // "Heating failed"
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("エラー:ジョウチョウサーミスターキノウ") // "Err: REDUNDANT TEMP"
-#define MSG_THERMAL_RUNAWAY _UxGT("ネツボウソウ") // "THERMAL RUNAWAY"
-#define MSG_ERR_MAXTEMP _UxGT("エラー:サイコウオンチョウカ") // "Err: MAXTEMP"
-#define MSG_ERR_MINTEMP _UxGT("エラー:サイテイオンミマン") // "Err: MINTEMP"
-#define MSG_ERR_MAXTEMP_BED _UxGT("エラー:ベッド サイコウオンチョウカ") // "Err: MAXTEMP BED"
-#define MSG_ERR_MINTEMP_BED _UxGT("エラー:ベッド サイテイオンミマン") // "Err: MINTEMP BED"
-#define MSG_ERR_Z_HOMING _UxGT("サキニ XY ヲフッキサセテクダサイ") // "Home XY first"
-#define MSG_HALTED _UxGT("プリンターハテイシシマシタ") // "PRINTER HALTED"
-#define MSG_PLEASE_RESET _UxGT("リセットシテクダサイ") // "Please reset"
-#define MSG_SHORT_DAY _UxGT("d") // One character only
-#define MSG_SHORT_HOUR _UxGT("h") // One character only
-#define MSG_SHORT_MINUTE _UxGT("m") // One character only
-#define MSG_HEATING _UxGT("カネツチュウ") // "Heating..."
-#define MSG_BED_HEATING _UxGT("ベッド カネツチュウ") // "Bed Heating..."
-#define MSG_DELTA_CALIBRATE _UxGT("デルタ コウセイ") // "Delta Calibration"
-#define MSG_DELTA_CALIBRATE_X _UxGT("Xジク コウセイ") // "Calibrate X"
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Yジク コウセイ") // "Calibrate Y"
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Zジク コウセイ") // "Calibrate Z"
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("チュウシン コウセイ") // "Calibrate Center"
-#define MSG_INFO_MENU _UxGT("コノプリンターニツイテ") // "About Printer"
-#define MSG_INFO_PRINTER_MENU _UxGT("プリンタージョウホウ") // "Printer Info"
-#define MSG_INFO_STATS_MENU _UxGT("プリントジョウキョウ") // "Printer Stats"
-#define MSG_INFO_BOARD_MENU _UxGT("セイギョケイジョウホウ") // "Board Info"
-#define MSG_INFO_THERMISTOR_MENU _UxGT("サーミスター") // "Thermistors"
-#define MSG_INFO_EXTRUDERS _UxGT("エクストルーダースウ") // "Extruders"
-#define MSG_INFO_BAUDRATE _UxGT("ボーレート") // "Baud"
-#define MSG_INFO_PROTOCOL _UxGT("プロトコル") // "Protocol"
-#define MSG_CASE_LIGHT _UxGT("キョウタイナイショウメイ") // "Case light"
-#define MSG_INFO_PRINT_COUNT _UxGT("プリントスウ ") // "Print Count"
-#define MSG_INFO_COMPLETED_PRINTS _UxGT("カンリョウスウ") // "Completed"
-#define MSG_INFO_PRINT_TIME _UxGT("プリントジカンルイケイ") // "Total print time"
-#define MSG_INFO_PRINT_LONGEST _UxGT("サイチョウプリントジカン") // "Longest job time"
-#define MSG_INFO_PRINT_FILAMENT _UxGT("フィラメントシヨウリョウルイケイ") // "Extruded total"
-#define MSG_INFO_MIN_TEMP _UxGT("セッテイサイテイオン") // "Min Temp"
-#define MSG_INFO_MAX_TEMP _UxGT("セッテイサイコウオン") // "Max Temp"
-#define MSG_INFO_PSU _UxGT("デンゲンシュベツ") // "Power Supply"
-#define MSG_DRIVE_STRENGTH _UxGT("モータークドウリョク") // "Drive Strength"
-#define MSG_DAC_PERCENT _UxGT("DACシュツリョク %") // "Driver %"
-#define MSG_DAC_EEPROM_WRITE MSG_STORE_EEPROM // "DAC EEPROM Write"
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("プリントサイカイ") // "Resume print"
-#define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("コウカンヲカイシシマス") // "Wait for start"
-#define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("シバラクオマチクダサイ") // "of the filament"
-#define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("フィラメントヌキダシチュウ") // "Wait for"
-#define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("シバラクオマチクダサイ") // "filament unload"
-#define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("フィラメントヲソウニュウシ,") // "Insert filament"
-#define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("クリックスルトゾッコウシマス") // "and press button"
-#define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("フィラメントソウテンチュウ") // "Wait for"
-#define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("シバラクオマチクダサイ") // "filament load"
-#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("プリントヲサイカイシマス") // "Wait for print"
-#define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("シバラクオマチクダサイ") // "to resume"
-
-#define MSG_EXPECTED_PRINTER _UxGT("間違ったプリンター") // "Wrong printer"
diff --git a/Marlin/src/lcd/language/language_jp_kana.h b/Marlin/src/lcd/language/language_jp_kana.h
new file mode 100644
index 000000000000..d9538c525159
--- /dev/null
+++ b/Marlin/src/lcd/language/language_jp_kana.h
@@ -0,0 +1,314 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * Japanese (Kana)
+ * UTF-8 for Graphical Display
+ *
+ * LCD Menu Messages
+ * See also http://marlinfw.org/docs/development/lcd_language.html
+ *
+ */
+
+//#define DISPLAY_CHARSET_ISO10646_KANA
+
+namespace Language_jp_kana {
+ using namespace Language_en; // Inherit undefined strings from English
+
+ constexpr uint8_t CHARSIZE = 3;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Japanese");
+
+ // This is just to show the potential benefit of Unicode.
+ // This translation can be improved by using the full charset of unicode codeblock U+30A0 to U+30FF.
+
+ // 片仮名表示定義
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" ジュンビカンリョウ");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("メディアガソウニュウサレマシタ"); // "Card inserted"
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("メディアガアリマセン"); // "Card removed"
+ PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("メディアノトリダシ");
+ PROGMEM Language_Str MSG_MEDIA_RELEASED = _UxGT("メディアガアリマセン"); // "Card removed"
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("エンドストップ"); // "Endstops" // Max length 8 characters
+ PROGMEM Language_Str MSG_MAIN = _UxGT("メイン"); // "Main"
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("ジドウカイシ"); // "Autostart"
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("モーターデンゲン オフ"); // "Disable steppers"
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("デバッグメニュー"); // "Debug Menu"
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("プログレスバー テスト"); // "Progress Bar Test"
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("ゲンテンフッキ"); // "Auto home"
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Xジク ゲンテンフッキ"); // "Home X"
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Yジク ゲンテンフッキ"); // "Home Y"
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Zジク ゲンテンフッキ"); // "Home Z"
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("ゲンテンフッキチュウ"); // "Homing XYZ"
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("レベリングカイシ"); // "Click to Begin"
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("ツギノソクテイテンヘ"); // "Next Point"
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("レベリングカンリョウ"); // "Leveling Done!"
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("キジュンオフセットセッテイ"); // "Set home offsets"
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("オフセットガテキヨウサレマシタ"); // "Offsets applied"
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("キジュンセット"); // "Set origin"
+ PROGMEM Language_Str MSG_PREHEAT_1 = PREHEAT_1_LABEL _UxGT(" ヨネツ"); // "Preheat " PREHEAT_1_LABEL
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = PREHEAT_1_LABEL _UxGT(" ヨネツ ") LCD_STR_N0; // "Preheat " PREHEAT_1_LABEL
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = PREHEAT_1_LABEL _UxGT(" ヨネツ ") LCD_STR_N1; // "Preheat " PREHEAT_1_LABEL
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = PREHEAT_1_LABEL _UxGT(" ヨネツ ") LCD_STR_N2; // "Preheat " PREHEAT_1_LABEL
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = PREHEAT_1_LABEL _UxGT(" ヨネツ ") LCD_STR_N3; // "Preheat " PREHEAT_1_LABEL
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = PREHEAT_1_LABEL _UxGT(" ヨネツ ") LCD_STR_N4; // "Preheat " PREHEAT_1_LABEL
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = PREHEAT_1_LABEL _UxGT(" ヨネツ ") LCD_STR_N5; // "Preheat " PREHEAT_1_LABEL
+ PROGMEM Language_Str MSG_PREHEAT_1_END = PREHEAT_1_LABEL _UxGT(" ヨネツノズル"); // " Nozzle"
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = PREHEAT_1_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N0; // " Nozzle"
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = PREHEAT_1_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N1; // " Nozzle"
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = PREHEAT_1_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N2; // " Nozzle"
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = PREHEAT_1_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N3; // " Nozzle"
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = PREHEAT_1_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N4; // " Nozzle"
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = PREHEAT_1_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N5; // " Nozzle"
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = PREHEAT_1_LABEL _UxGT(" スベテヨネツ"); // " All"
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = PREHEAT_1_LABEL _UxGT(" ベッドヨネツ"); // " Bed"
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = PREHEAT_1_LABEL _UxGT(" ヨネツセッテイ"); // " conf"
+ PROGMEM Language_Str MSG_PREHEAT_2 = PREHEAT_2_LABEL _UxGT(" ヨネツ"); // "Preheat " PREHEAT_1_LABEL
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = PREHEAT_2_LABEL _UxGT(" ヨネツ ") LCD_STR_N0; // "Preheat " PREHEAT_1_LABEL
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = PREHEAT_2_LABEL _UxGT(" ヨネツ ") LCD_STR_N1; // "Preheat " PREHEAT_1_LABEL
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = PREHEAT_2_LABEL _UxGT(" ヨネツ ") LCD_STR_N2; // "Preheat " PREHEAT_1_LABEL
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = PREHEAT_2_LABEL _UxGT(" ヨネツ ") LCD_STR_N3; // "Preheat " PREHEAT_1_LABEL
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = PREHEAT_2_LABEL _UxGT(" ヨネツ ") LCD_STR_N4; // "Preheat " PREHEAT_1_LABEL
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = PREHEAT_2_LABEL _UxGT(" ヨネツ ") LCD_STR_N5; // "Preheat " PREHEAT_1_LABEL
+ PROGMEM Language_Str MSG_PREHEAT_2_END = PREHEAT_2_LABEL _UxGT(" ヨネツノズル"); // " Nozzle"
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = PREHEAT_2_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N0; // " Nozzle"
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = PREHEAT_2_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N1; // " Nozzle"
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = PREHEAT_2_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N2; // " Nozzle"
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = PREHEAT_2_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N3; // " Nozzle"
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = PREHEAT_2_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N4; // " Nozzle"
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = PREHEAT_2_LABEL _UxGT(" ヨネツノズル ") LCD_STR_N5; // " Nozzle"
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = PREHEAT_2_LABEL _UxGT(" スベテヨネツ"); // " All"
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = PREHEAT_2_LABEL _UxGT(" ベッドヨネツ"); // " Bed"
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = PREHEAT_2_LABEL _UxGT(" ヨネツセッテイ"); // " conf"
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("カネツテイシ"); // "Cooldown"
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("デンゲン オン"); // "Switch power on"
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("デンゲン オフ"); // "Switch power off"
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("オシダシ"); // "Extrude"
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("ヒキコミセッテイ"); // "Retract"
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("ジクイドウ"); // "Move axis"
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("ベッドレベリング"); // "Bed leveling"
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("ベッドレベリング"); // "Level bed"
+
+ PROGMEM Language_Str MSG_MOVING = _UxGT("イドウチュウ"); // "Moving..."
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("XYジク カイホウ"); // "Free XY"
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Xジク イドウ"); // "Move X"
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Yジク イドウ"); // "Move Y"
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Zジク イドウ"); // "Move Z"
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("エクストルーダー"); // "Extruder"
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("%smm イドウ"); // "Move 0.025mm"
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("0.1mm イドウ"); // "Move 0.1mm"
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT(" 1mm イドウ"); // "Move 1mm"
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT(" 10mm イドウ"); // "Move 10mm"
+ PROGMEM Language_Str MSG_SPEED = _UxGT("ソクド"); // "Speed"
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Zオフセット"); // "Bed Z"
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("ノズル"); // "Nozzle"
+ PROGMEM Language_Str MSG_BED = _UxGT("ベッド"); // "Bed"
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("ファンソクド"); // "Fan speed"
+ PROGMEM Language_Str MSG_FLOW = _UxGT("トシュツリョウ"); // "Flow"
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("セイギョ"); // "Control"
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" サイテイ"); // " Min"
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" サイコウ"); // " Max"
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" ファクター"); // " Fact"
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("ジドウオンドセイギョ"); // "Autotemp"
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("オン"); // "On"
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("オフ"); // "Off"
+ PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
+ PROGMEM Language_Str MSG_PID_P_E0 = _UxGT("PID-P ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_P_E1 = _UxGT("PID-P ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_P_E2 = _UxGT("PID-P ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_P_E3 = _UxGT("PID-P ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_P_E4 = _UxGT("PID-P ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_P_E5 = _UxGT("PID-P ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
+ PROGMEM Language_Str MSG_PID_I_E0 = _UxGT("PID-I ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_I_E1 = _UxGT("PID-I ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_I_E2 = _UxGT("PID-I ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_I_E3 = _UxGT("PID-I ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_I_E4 = _UxGT("PID-I ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_I_E5 = _UxGT("PID-I ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
+ PROGMEM Language_Str MSG_PID_D_E0 = _UxGT("PID-D ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_D_E1 = _UxGT("PID-D ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_D_E2 = _UxGT("PID-D ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_D_E3 = _UxGT("PID-D ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_D_E4 = _UxGT("PID-D ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_D_E5 = _UxGT("PID-D ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
+ PROGMEM Language_Str MSG_PID_C_E0 = _UxGT("PID-C ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_C_E1 = _UxGT("PID-C ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_C_E2 = _UxGT("PID-C ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_C_E3 = _UxGT("PID-C ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_C_E4 = _UxGT("PID-C ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_C_E5 = _UxGT("PID-C ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_SELECT = _UxGT("センタク"); // "Select"
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("センタク ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("センタク ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("センタク ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("センタク ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("センタク ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("センタク ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("カソクド mm/s²"); // "Accel"
+ PROGMEM Language_Str MSG_JERK = _UxGT("ヤクドウ mm/s"); // "Jerk"
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_A; // "Va-jerk"
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_B; // "Vb-jerk"
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_C; // "Vc-jerk"
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT("ステップ/mm");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT("ステップ/mm");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT("ステップ/mm");
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("エクストルーダー ヤクド"); // "Ve-jerk"
+ PROGMEM Language_Str MSG_VMAX_A = _UxGT("サイダイオクリソクド ") LCD_STR_A; // "Vmax A"
+ PROGMEM Language_Str MSG_VMAX_B = _UxGT("サイダイオクリソクド ") LCD_STR_A; // "Vmax B"
+ PROGMEM Language_Str MSG_VMAX_C = _UxGT("サイダイオクリソクド ") LCD_STR_A; // "Vmax C"
+ PROGMEM Language_Str MSG_VMAX_E = _UxGT("サイダイオクリソクド ") LCD_STR_A; // "Vmax E"
+ PROGMEM Language_Str MSG_VMAX_E0 = _UxGT("サイダイオクリソクド ") LCD_STR_E0; // "Vmax E1"
+ PROGMEM Language_Str MSG_VMAX_E1 = _UxGT("サイダイオクリソクド ") LCD_STR_E1; // "Vmax E2"
+ PROGMEM Language_Str MSG_VMAX_E2 = _UxGT("サイダイオクリソクド ") LCD_STR_E2; // "Vmax E3"
+ PROGMEM Language_Str MSG_VMAX_E3 = _UxGT("サイダイオクリソクド ") LCD_STR_E3; // "Vmax E4"
+ PROGMEM Language_Str MSG_VMAX_E4 = _UxGT("サイダイオクリソクド ") LCD_STR_E4; // "Vmax E5"
+ PROGMEM Language_Str MSG_VMAX_E5 = _UxGT("サイダイオクリソクド ") LCD_STR_E5; // "Vmax E6"
+ PROGMEM Language_Str MSG_VMIN = _UxGT("サイショウオクリソクド"); // "Vmin"
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("サイショウイドウソクド"); // "VTrav min"
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("カソクド mm/s²"); // "Accel"
+ PROGMEM Language_Str MSG_AMAX = _UxGT("サイダイカソクド "); // "Amax "
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("ヒキコミカソクド"); // "A-retract"
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("イドウカソクド"); // "A-travel"
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("オンド"); // "Temperature"
+ PROGMEM Language_Str MSG_MOTION = _UxGT("ウゴキセッテイ"); // "Motion"
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("フィラメント"); // "Filament"
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm³");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("フィラメントチョッケイ"); // "Fil. Dia."
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("フィラメントチョッケイ ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("フィラメントチョッケイ ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("フィラメントチョッケイ ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("フィラメントチョッケイ ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("フィラメントチョッケイ ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("フィラメントチョッケイ ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCDコントラスト"); // "LCD contrast"
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("EEPROMヘホゾン"); // "Store memory"
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("EEPROMカラヨミコミ"); // "Load memory"
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("セッテイリセット"); // "Restore failsafe"
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("リフレッシュ"); // "Refresh"
+ PROGMEM Language_Str MSG_WATCH = _UxGT("ジョウホウガメン"); // "Info screen"
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("ジュンビセッテイ"); // "Prepare"
+ PROGMEM Language_Str MSG_TUNE = _UxGT("チョウセイ"); // "Tune"
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("イチジテイシ"); // "Pause print"
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("プリントサイカイ"); // "Resume print"
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("プリントテイシ"); // "Stop print"
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("メディアカラプリント"); // "Print from SD"
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("メディアガアリマセン"); // "Card removed"
+ PROGMEM Language_Str MSG_DWELL = _UxGT("キュウシ"); // "Sleep..."
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("ツヅケルニハクリックシテクダサイ"); // "Wait for user..."
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("プリントガチュウシサレマシタ"); // "Print aborted"
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("ウゴキマセン"); // "No move."
+ PROGMEM Language_Str MSG_KILLED = _UxGT("ヒジョウテイシ"); // "KILLED. "
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("テイシシマシタ"); // "STOPPED. "
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("ヒキコミリョウ mm"); // "Retract mm"
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("ヒキコミリョウS mm"); // "Swap Re.mm"
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("ヒキコミソクド mm/s"); // "Retract V"
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("ノズルタイヒ mm"); // "Hop mm"
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("ホショウリョウ mm"); // "UnRet mm"
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("ホショウリョウS mm"); // "S UnRet mm"
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("ホショウソクド mm/s"); // "UnRet V"
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("ジドウヒキコミ"); // "AutoRetr."
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("フィラメントコウカン"); // "Change filament"
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("メディアサイヨミコミ"); // "Init. SD card"
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("メディアコウカン"); // "Change SD card"
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Zプローブ ベッドガイ"); // "Z probe out. bed"
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch ジコシンダン"); // "BLTouch Self-Test"
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("BLTouch リセット"); // "Reset BLTouch"
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("サキニ %s%s%s ヲフッキサセテクダサイ"); // "Home ... first"
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Zオフセット"); // "Z Offset"
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Xジク ビドウ"); // "Babystep X"
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Yジク ビドウ"); // "Babystep Y"
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Zジク ビドウ"); // "Babystep Z"
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("イドウゲンカイケンチキノウ"); // "Endstop abort"
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("カネツシッパイ"); // "Heating failed"
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("エラー:ジョウチョウサーミスターキノウ"); // "Err: REDUNDANT TEMP"
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("ネツボウソウ"); // "THERMAL RUNAWAY"
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("エラー:サイコウオンチョウカ"); // "Err: MAXTEMP"
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("エラー:サイテイオンミマン"); // "Err: MINTEMP"
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("エラー:ベッド サイコウオンチョウカ"); // "Err: MAXTEMP BED"
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("エラー:ベッド サイテイオンミマン"); // "Err: MINTEMP BED"
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("サキニ XY ヲフッキサセテクダサイ"); // "Home XY first"
+ PROGMEM Language_Str MSG_HALTED = _UxGT("プリンターハテイシシマシタ"); // "PRINTER HALTED"
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("リセットシテクダサイ"); // "Please reset"
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
+ PROGMEM Language_Str MSG_HEATING = _UxGT("カネツチュウ"); // "Heating..."
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("ベッド カネツチュウ"); // "Bed Heating..."
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("デルタ コウセイ"); // "Delta Calibration"
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Xジク コウセイ"); // "Calibrate X"
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Yジク コウセイ"); // "Calibrate Y"
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Zジク コウセイ"); // "Calibrate Z"
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("チュウシン コウセイ"); // "Calibrate Center"
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("コノプリンターニツイテ"); // "About Printer"
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("プリンタージョウホウ"); // "Printer Info"
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("プリントジョウキョウ"); // "Printer Stats"
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("セイギョケイジョウホウ"); // "Board Info"
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("サーミスター"); // "Thermistors"
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("エクストルーダースウ"); // "Extruders"
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("ボーレート"); // "Baud"
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("プロトコル"); // "Protocol"
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("キョウタイナイショウメイ"); // "Case light"
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("プリントスウ "); // "Print Count"
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("カンリョウスウ"); // "Completed"
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("プリントジカンルイケイ"); // "Total print time"
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("サイチョウプリントジカン"); // "Longest job time"
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("フィラメントシヨウリョウルイケイ"); // "Extruded total"
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("セッテイサイテイオン"); // "Min Temp"
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("セッテイサイコウオン"); // "Max Temp"
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("デンゲンシュベツ"); // "Power Supply"
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("モータークドウリョク"); // "Drive Strength"
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("DACシュツリョク %"); // "Driver %"
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("EEPROMヘホゾン"); // "Store memory"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("イチジテイシ");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("プリントサイカイ"); // "Resume print"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("コウカンヲカイシシマス", "シバラクオマチクダサイ")); // "Wait for start of the filament"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("フィラメントヌキダシチュウ", "シバラクオマチクダサイ")); // "Wait for filament unload"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_2_LINE("フィラメントヲソウニュウシ,", "クリックスルトゾッコウシマス")); // "Insert filament and press button"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("フィラメントソウテンチュウ", "シバラクオマチクダサイ")); // "Wait for filament load"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("プリントヲサイカイシマス", "シバラクオマチクダサイ")); // "Wait for print to resume"
+
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("マチガッタプリンター"); // "Wrong printer"
+
+ PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("セッテイカンリ");
+ PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("ショウサイセッテイ");
+ PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("コショカイフク");
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("EEPROMショキカ");
+
+ PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("ツギヘ");
+ PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("ショキカ");
+ PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("ストップ");
+ PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("プリント");
+ PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("リセット");
+ PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("キャンセル");
+ PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("カンリョウ");
+
+ PROGMEM Language_Str MSG_YES = _UxGT("ハイ");
+ PROGMEM Language_Str MSG_NO = _UxGT("イイエ");
+ PROGMEM Language_Str MSG_BACK = _UxGT("モドリ");
+ PROGMEM Language_Str MSG_VELOCITY = _UxGT("ソクド");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("ステップ/mm");
+ PROGMEM Language_Str MSG_USER_MENU = _UxGT("ユーザーコマンド");
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("プリントガイチジテイシサレマシタ");
+ PROGMEM Language_Str MSG_PRINTING = _UxGT("プリントチュウ...");
+}
diff --git a/Marlin/src/lcd/language/language_ko_KR.h b/Marlin/src/lcd/language/language_ko_KR.h
index 20e35af58b8c..15173a93d5ae 100644
--- a/Marlin/src/lcd/language/language_ko_KR.h
+++ b/Marlin/src/lcd/language/language_ko_KR.h
@@ -28,386 +28,106 @@
* See also http://marlinfw.org/docs/development/lcd_language.html
*
*/
+namespace Language_ko_KR {
+ using namespace Language_en; // Inherit undefined strings from English
-#define CHARSIZE 1
+ constexpr uint8_t CHARSIZE = 1;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Korean");
-#define WELCOME_MSG MACHINE_NAME _UxGT(" 준비.")
-#define MSG_BACK _UxGT("뒤로")
-#define MSG_MEDIA_INSERTED _UxGT("카드 삽입됨")
-#define MSG_MEDIA_REMOVED _UxGT("카드 제거됨")
-#define MSG_LCD_ENDSTOPS _UxGT("엔드스탑")
-#define MSG_LCD_SOFT_ENDSTOPS _UxGT("소프트 엔드스탑")
-#define MSG_MAIN _UxGT("뒤로")
-#define MSG_ADVANCED_SETTINGS _UxGT("고급 설정")
-#define MSG_CONFIGURATION _UxGT("설정")
-#define MSG_AUTOSTART _UxGT("자동 시작")
-#define MSG_DISABLE_STEPPERS _UxGT("모터 정지")
-#define MSG_DEBUG_MENU _UxGT("디버깅 메뉴")
-#define MSG_PROGRESS_BAR_TEST _UxGT("프로그레스바 테스트")
-#define MSG_AUTO_HOME _UxGT("오토홈")
-#define MSG_AUTO_HOME_X _UxGT("X 홈으로")
-#define MSG_AUTO_HOME_Y _UxGT("Y 홈으로")
-#define MSG_AUTO_HOME_Z _UxGT("Z 홈으로")
-#define MSG_LEVEL_BED_HOMING _UxGT("XYZ 홈으로")
-#define MSG_LEVEL_BED_WAITING _UxGT("누르면 시작합니다")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("다음 Point")
-#define MSG_LEVEL_BED_DONE _UxGT("레벨링 완료!")
-//#define MSG_Z_FADE_HEIGHT _UxGT("Fade Height")
-//#define MSG_SET_HOME_OFFSETS _UxGT("Set home offsets")
-//#define MSG_HOME_OFFSETS_APPLIED _UxGT("Offsets applied")
-//#define MSG_SET_ORIGIN _UxGT("Set origin")
-#define MSG_PREHEAT_1 _UxGT("예열하기 - " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" 모두")
-#define MSG_PREHEAT_1_END MSG_PREHEAT_1 _UxGT(" 노즐만")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" 베드만")
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" conf")
-#define MSG_PREHEAT_2 _UxGT("예열하기 - " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" 모두")
-#define MSG_PREHEAT_2_END MSG_PREHEAT_2 _UxGT(" 노즐만")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" 베드만")
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" conf")
-#define MSG_PREHEAT_CUSTOM _UxGT("Custom 예열")
-#define MSG_COOLDOWN _UxGT("식히기")
-#define MSG_SWITCH_PS_ON _UxGT("스위치 전원 켜기")
-#define MSG_SWITCH_PS_OFF _UxGT("스위치 전원 끄기")
-#define MSG_EXTRUDE _UxGT("밀어내기")
-#define MSG_RETRACT _UxGT("당기기")
-#define MSG_MOVE_AXIS _UxGT("축 이동")
-#define MSG_BED_LEVELING _UxGT("베드 레벨링")
-//#define MSG_LEVEL_BED _UxGT("Level bed")
-//#define MSG_LEVEL_CORNERS _UxGT("Level corners")
-//#define MSG_NEXT_CORNER _UxGT("Next corner")
-//#define MSG_EDIT_MESH _UxGT("Edit Mesh")
-//#define MSG_EDITING_STOPPED _UxGT("Mesh Editing Stopped")
-//#define MSG_USER_MENU _UxGT("Custom User Commands")
-//#define MSG_IDEX_MENU _UxGT("IDEX Mode")
-//#define MSG_IDEX_MODE_AUTOPARK _UxGT("Auto-Park")
-//#define MSG_IDEX_MODE_DUPLICATE _UxGT("Duplication")
-#define MSG_IDEX_MODE_MIRRORED_COPY _UxGT("미러 사본")
-//#define MSG_IDEX_MODE_FULL_CTRL _UxGT("Full control")
-//#define MSG_X_OFFSET _UxGT("2nd nozzle X")
-//#define MSG_Y_OFFSET _UxGT("2nd nozzle Y")
-//#define MSG_Z_OFFSET _UxGT("2nd nozzle Z")
-#define MSG_UBL_DOING_G29 _UxGT("오토레벨링 하기")
-//#define MSG_UBL_TOOLS _UxGT("UBL Tools")
-//#define MSG_UBL_LEVEL_BED _UxGT("Unified Bed Leveling")
-//#define MSG_UBL_MANUAL_MESH _UxGT("Manually Build Mesh")
-//#define MSG_UBL_BC_INSERT _UxGT("Place shim & measure")
-//#define MSG_UBL_BC_INSERT2 _UxGT("Measure")
-//#define MSG_UBL_BC_REMOVE _UxGT("Remove & measure bed")
-//#define MSG_UBL_MOVING_TO_NEXT _UxGT("Moving to next")
-//#define MSG_UBL_ACTIVATE_MESH _UxGT("Activate UBL")
-//#define MSG_UBL_DEACTIVATE_MESH _UxGT("Deactivate UBL")
-//#define MSG_UBL_SET_TEMP_BED _UxGT("Bed Temp")
-//#define MSG_UBL_BED_TEMP_CUSTOM MSG_UBL_SET_TEMP_BED
-//#define MSG_UBL_SET_TEMP_HOTEND _UxGT("Hotend Temp")
-//#define MSG_UBL_HOTEND_TEMP_CUSTOM MSG_UBL_SET_TEMP_HOTEND
-//#define MSG_UBL_MESH_EDIT _UxGT("Mesh Edit")
-//#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("Edit Custom Mesh")
-//#define MSG_UBL_FINE_TUNE_MESH _UxGT("Fine Tuning Mesh")
-//#define MSG_UBL_DONE_EDITING_MESH _UxGT("Done Editing Mesh")
-//#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("Build Custom Mesh")
-//#define MSG_UBL_BUILD_MESH_MENU _UxGT("Build Mesh")
-//#define MSG_UBL_BUILD_MESH_M1 _UxGT("Build Mesh (" PREHEAT_1_LABEL ")")
-//#define MSG_UBL_BUILD_MESH_M2 _UxGT("Build Mesh (" PREHEAT_2_LABEL ")")
-//#define MSG_UBL_BUILD_COLD_MESH _UxGT("Build Cold Mesh")
-//#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("Adjust Mesh Height")
-//#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("Height Amount")
-//#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Validate Mesh")
-//#define MSG_UBL_VALIDATE_MESH_M1 _UxGT("Validate " PREHEAT_1_LABEL " Mesh")
-//#define MSG_UBL_VALIDATE_MESH_M2 _UxGT("Validate Mesh (" PREHEAT_2_LABEL ")")
-//#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Validate Custom Mesh")
-//#define MSG_UBL_CONTINUE_MESH _UxGT("Continue Bed Mesh")
-//#define MSG_UBL_MESH_LEVELING _UxGT("Mesh Leveling")
-//#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("3-Point Leveling")
-//#define MSG_UBL_GRID_MESH_LEVELING _UxGT("Grid Mesh Leveling")
-//#define MSG_UBL_MESH_LEVEL _UxGT("Level Mesh")
-//#define MSG_UBL_SIDE_POINTS _UxGT("Side Points")
-//#define MSG_UBL_MAP_TYPE _UxGT("Map Type")
-//#define MSG_UBL_OUTPUT_MAP _UxGT("Output Mesh Map")
-//#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("Output for Host")
-//#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("Output for CSV")
-//#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("Off Printer Backup")
-//#define MSG_UBL_INFO_UBL _UxGT("Output UBL Info")
-//#define MSG_UBL_FILLIN_AMOUNT _UxGT("Fill-in Amount")
-//#define MSG_UBL_MANUAL_FILLIN _UxGT("Manual Fill-in")
-//#define MSG_UBL_SMART_FILLIN _UxGT("Smart Fill-in")
-//#define MSG_UBL_FILLIN_MESH _UxGT("Fill-in Mesh")
-//#define MSG_UBL_INVALIDATE_ALL _UxGT("Invalidate All")
-//#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("Invalidate Closest")
-//#define MSG_UBL_FINE_TUNE_ALL _UxGT("Fine Tune All")
-//#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("Fine Tune Closest")
-//#define MSG_UBL_STORAGE_MESH_MENU _UxGT("Mesh Storage")
-//#define MSG_UBL_STORAGE_SLOT _UxGT("Memory Slot")
-//#define MSG_UBL_LOAD_MESH _UxGT("Load Bed Mesh")
-//#define MSG_UBL_SAVE_MESH _UxGT("Save Bed Mesh")
-//#define MSG_MESH_LOADED _UxGT("Mesh %i loaded")
-//#define MSG_MESH_SAVED _UxGT("Mesh %i saved")
-//#define MSG_UBL_NO_STORAGE _UxGT("No storage")
-//#define MSG_UBL_SAVE_ERROR _UxGT("Err: UBL Save")
-//#define MSG_UBL_RESTORE_ERROR _UxGT("Err: UBL Restore")
-//#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Z-Offset Stopped")
-//#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("Step-By-Step UBL")
-
-//#define MSG_LED_CONTROL _UxGT("LED Control")
-//#define MSG_LEDS _UxGT("Lights")
-//#define MSG_LED_PRESETS _UxGT("Light Presets")
-//#define MSG_SET_LEDS_RED _UxGT("Red")
-//#define MSG_SET_LEDS_ORANGE _UxGT("Orange")
-//#define MSG_SET_LEDS_YELLOW _UxGT("Yellow")
-//#define MSG_SET_LEDS_GREEN _UxGT("Green")
-//#define MSG_SET_LEDS_BLUE _UxGT("Blue")
-//#define MSG_SET_LEDS_INDIGO _UxGT("Indigo")
-//#define MSG_SET_LEDS_VIOLET _UxGT("Violet")
-//#define MSG_SET_LEDS_WHITE _UxGT("White")
-//#define MSG_SET_LEDS_DEFAULT _UxGT("Default")
-//#define MSG_CUSTOM_LEDS _UxGT("Custom Lights")
-//#define MSG_INTENSITY_R _UxGT("Red Intensity")
-//#define MSG_INTENSITY_G _UxGT("Green Intensity")
-//#define MSG_INTENSITY_B _UxGT("Blue Intensity")
-//#define MSG_INTENSITY_W _UxGT("White Intensity")
-//#define MSG_LED_BRIGHTNESS _UxGT("Brightness")
-
-//#define MSG_MOVING _UxGT("Moving...")
-//#define MSG_FREE_XY _UxGT("Free XY")
-//#define MSG_MOVE_X _UxGT("Move X")
-//#define MSG_MOVE_Y _UxGT("Move Y")
-//#define MSG_MOVE_Z _UxGT("Move Z")
-//#define MSG_MOVE_E _UxGT("Extruder")
-//#define MSG_MOVE_Z_DIST _UxGT("Move %smm")
-//#define MSG_MOVE_01MM _UxGT("Move 0.1mm")
-//#define MSG_MOVE_1MM _UxGT("Move 1mm")
-//#define MSG_MOVE_10MM _UxGT("Move 10mm")
-//#define MSG_SPEED _UxGT("Speed")
-//#define MSG_BED_Z _UxGT("Bed Z")
-#define MSG_NOZZLE _UxGT("노즐")
-#define MSG_BED _UxGT("베드")
-#define MSG_FAN_SPEED _UxGT("펜 속도")
-#define MSG_EXTRA_FAN_SPEED _UxGT("엑스트라 펜 속도")
-//#define MSG_FLOW _UxGT("Flow")
-//#define MSG_CONTROL _UxGT("Control")
-//#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-//#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-//#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-//#define MSG_AUTOTEMP _UxGT("Autotemp")
-//#define MSG_LCD_ON _UxGT("On")
-//#define MSG_LCD_OFF _UxGT("Off")
-//#define MSG_PID_P _UxGT("PID-P")
-//#define MSG_PID_I _UxGT("PID-I")
-//#define MSG_PID_D _UxGT("PID-D")
-//#define MSG_PID_C _UxGT("PID-C")
-//#define MSG_SELECT _UxGT("Select")
-//#define MSG_ACC _UxGT("Accel")
-//#define MSG_JERK _UxGT("Jerk")
-#if IS_KINEMATIC
- //#define MSG_VA_JERK _UxGT("Va-jerk")
- //#define MSG_VB_JERK _UxGT("Vb-jerk")
- //#define MSG_VC_JERK _UxGT("Vc-jerk")
-#else
- //#define MSG_VA_JERK _UxGT("Vx-jerk")
- //#define MSG_VB_JERK _UxGT("Vy-jerk")
- //#define MSG_VC_JERK _UxGT("Vz-jerk")
-#endif
-//#define MSG_VE_JERK _UxGT("Ve-jerk")
-//#define MSG_JUNCTION_DEVIATION _UxGT("Junction Dev")
-//#define MSG_VELOCITY _UxGT("Velocity")
-//#define MSG_VMAX _UxGT("Vmax ")
-//#define MSG_VMIN _UxGT("Vmin")
-//#define MSG_VTRAV_MIN _UxGT("VTrav min")
-//#define MSG_ACCELERATION _UxGT("Acceleration")
-//#define MSG_AMAX _UxGT("Amax ")
-//#define MSG_A_RETRACT _UxGT("A-retract")
-//#define MSG_A_TRAVEL _UxGT("A-travel")
-//#define MSG_STEPS_PER_MM _UxGT("Steps/mm")
-#if IS_KINEMATIC
- //#define MSG_ASTEPS _UxGT("Asteps/mm")
- //#define MSG_BSTEPS _UxGT("Bsteps/mm")
- //#define MSG_CSTEPS _UxGT("Csteps/mm")
-#else
- //#define MSG_ASTEPS _UxGT("Xsteps/mm")
- //#define MSG_BSTEPS _UxGT("Ysteps/mm")
- //#define MSG_CSTEPS _UxGT("Zsteps/mm")
-#endif
-//#define MSG_ESTEPS _UxGT("Esteps/mm")
-//#define MSG_E1STEPS _UxGT("E1steps/mm")
-//#define MSG_E2STEPS _UxGT("E2steps/mm")
-//#define MSG_E3STEPS _UxGT("E3steps/mm")
-//#define MSG_E4STEPS _UxGT("E4steps/mm")
-//#define MSG_E5STEPS _UxGT("E5steps/mm")
-//#define MSG_E6STEPS _UxGT("E6steps/mm")
-#define MSG_TEMPERATURE _UxGT("온도")
-#define MSG_MOTION _UxGT("동작")
-//#define MSG_FILAMENT _UxGT("Filament")
-//#define MSG_VOLUMETRIC_ENABLED _UxGT("E in mm3")
-//#define MSG_FILAMENT_DIAM _UxGT("Fil. Dia.")
-//#define MSG_FILAMENT_UNLOAD _UxGT("Unload mm")
-//#define MSG_FILAMENT_LOAD _UxGT("Load mm")
-//#define MSG_ADVANCE_K _UxGT("Advance K")
-//#define MSG_CONTRAST _UxGT("LCD contrast")
-#define MSG_STORE_EEPROM _UxGT("설정 저장하기")
-#define MSG_LOAD_EEPROM _UxGT("설정 읽어오기")
-#define MSG_RESTORE_FAILSAFE _UxGT("설정 되돌리기")
-#define MSG_INIT_EEPROM _UxGT("EEPROM 초기화")
-#define MSG_REFRESH _UxGT("새로고침")
-#define MSG_WATCH _UxGT("처음으로")
-#define MSG_PREPARE _UxGT("준비하기")
-//#define MSG_TUNE _UxGT("Tune")
-#define MSG_PAUSE_PRINT _UxGT("일시정지")
-#define MSG_RESUME_PRINT _UxGT("재시작")
-#define MSG_STOP_PRINT _UxGT("출력중지")
-//#define MSG_OUTAGE_RECOVERY _UxGT("Outage Recovery")
-#define MSG_MEDIA_MENU _UxGT("SD 카드출력")
-#define MSG_NO_MEDIA _UxGT("SD 카드없음")
-#define MSG_DWELL _UxGT("슬립모드...")
-//#define MSG_USERWAIT _UxGT("Click to resume...")
-#define MSG_PRINT_PAUSED _UxGT("일시 정지됨")
-#define MSG_PRINTING _UxGT("출력중...")
-#define MSG_PRINT_ABORTED _UxGT("취소됨")
-//#define MSG_NO_MOVE _UxGT("No move.")
-#define MSG_KILLED _UxGT("죽음. ")
-#define MSG_STOPPED _UxGT("멈춤. ")
-//#define MSG_CONTROL_RETRACT _UxGT("Retract mm")
-//#define MSG_CONTROL_RETRACT_SWAP _UxGT("Swap Re.mm")
-//#define MSG_CONTROL_RETRACTF _UxGT("Retract V")
-//#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Hop mm")
-//#define MSG_CONTROL_RETRACT_RECOVER _UxGT("UnRet mm")
-//#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("S UnRet mm")
-//#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet V")
-//#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("S UnRet V")
-//#define MSG_AUTORETRACT _UxGT("AutoRetr.")
-//#define MSG_FILAMENTCHANGE _UxGT("Change filament")
-//#define MSG_FILAMENTLOAD _UxGT("Load filament")
-//#define MSG_FILAMENTUNLOAD _UxGT("Unload filament")
-//#define MSG_FILAMENTUNLOAD_ALL _UxGT("Unload All")
-//#define MSG_INIT_MEDIA _UxGT("Init. SD card")
-//#define MSG_CHANGE_MEDIA _UxGT("Change SD card")
-//#define MSG_ZPROBE_OUT _UxGT("Z Probe past bed")
-//#define MSG_SKEW_FACTOR _UxGT("Skew Factor")
-//#define MSG_BLTOUCH _UxGT("BLTouch")
-//#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Self-Test")
-//#define MSG_BLTOUCH_RESET _UxGT("Reset BLTouch")
-//#define MSG_BLTOUCH_DEPLOY _UxGT("Deploy BLTouch")
-//#define MSG_BLTOUCH_STOW _UxGT("Stow BLTouch")
-//#define MSG_MANUAL_DEPLOY _UxGT("Deploy Z-Probe")
-//#define MSG_MANUAL_STOW _UxGT("Stow Z-Probe")
-//#define MSG_HOME_FIRST _UxGT("Home %s%s%s first")
-//#define MSG_ZPROBE_ZOFFSET _UxGT("Probe Z Offset")
-//#define MSG_BABYSTEP_X _UxGT("Babystep X")
-//#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
-//#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
-//#define MSG_ENDSTOP_ABORT _UxGT("Endstop abort")
-//#define MSG_HEATING_FAILED_LCD _UxGT("Heating failed")
-//#define MSG_HEATING_FAILED_LCD_BED _UxGT("Bed heating failed")
-//#define MSG_ERR_REDUNDANT_TEMP _UxGT("Err: REDUNDANT TEMP")
-//#define MSG_THERMAL_RUNAWAY _UxGT("THERMAL RUNAWAY")
-//#define MSG_THERMAL_RUNAWAY_BED _UxGT("BED THERMAL RUNAWAY")
-//#define MSG_ERR_MAXTEMP _UxGT("Err: MAXTEMP")
-//#define MSG_ERR_MINTEMP _UxGT("Err: MINTEMP")
-//#define MSG_ERR_MAXTEMP_BED _UxGT("Err: MAXTEMP BED")
-//#define MSG_ERR_MINTEMP_BED _UxGT("Err: MINTEMP BED")
-//#define MSG_ERR_Z_HOMING _UxGT("Home XY first")
-//#define MSG_HALTED _UxGT("PRINTER HALTED")
-//#define MSG_PLEASE_RESET _UxGT("Please reset")
-//#define MSG_SHORT_DAY _UxGT("d") // One character only
-//#define MSG_SHORT_HOUR _UxGT("h") // One character only
-//#define MSG_SHORT_MINUTE _UxGT("m") // One character only
-//#define MSG_HEATING _UxGT("Heating...")
-//#define MSG_COOLING _UxGT("Cooling...")
-//#define MSG_BED_HEATING _UxGT("Bed heating...")
-//#define MSG_BED_COOLING _UxGT("Bed cooling...")
-//#define MSG_DELTA_CALIBRATE _UxGT("Delta Calibration")
-//#define MSG_DELTA_CALIBRATE_X _UxGT("Calibrate X")
-//#define MSG_DELTA_CALIBRATE_Y _UxGT("Calibrate Y")
-//#define MSG_DELTA_CALIBRATE_Z _UxGT("Calibrate Z")
-//#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Calibrate Center")
-//#define MSG_DELTA_SETTINGS _UxGT("Delta Settings")
-//#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Auto Calibration")
-//#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Set Delta Height")
-//#define MSG_DELTA_Z_OFFSET_CALIBRATE _UxGT("Probe Z-offset")
-//#define MSG_DELTA_DIAG_ROD _UxGT("Diag Rod")
-//#define MSG_DELTA_HEIGHT _UxGT("Height")
-//#define MSG_DELTA_RADIUS _UxGT("Radius")
-//#define MSG_INFO_MENU _UxGT("About Printer")
-//#define MSG_INFO_PRINTER_MENU _UxGT("Printer Info")
-//#define MSG_3POINT_LEVELING _UxGT("3-Point Leveling")
-//#define MSG_LINEAR_LEVELING _UxGT("Linear Leveling")
-//#define MSG_BILINEAR_LEVELING _UxGT("Bilinear Leveling")
-//#define MSG_UBL_LEVELING _UxGT("Unified Bed Leveling")
-//#define MSG_MESH_LEVELING _UxGT("Mesh Leveling")
-//#define MSG_INFO_STATS_MENU _UxGT("Printer Stats")
-//#define MSG_INFO_BOARD_MENU _UxGT("Board Info")
-//#define MSG_INFO_THERMISTOR_MENU _UxGT("Thermistors")
-//#define MSG_INFO_EXTRUDERS _UxGT("Extruders")
-//#define MSG_INFO_BAUDRATE _UxGT("Baud")
-//#define MSG_INFO_PROTOCOL _UxGT("Protocol")
-//#define MSG_CASE_LIGHT _UxGT("Case light")
-//#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Light Brightness")
-
-#define MSG_EXPECTED_PRINTER _UxGT("잘못된 프린터")
-
-#if LCD_WIDTH >= 20
- //#define MSG_INFO_PRINT_COUNT _UxGT("Print Count")
- //#define MSG_INFO_COMPLETED_PRINTS _UxGT("Completed")
- //#define MSG_INFO_PRINT_TIME _UxGT("Total print time")
- //#define MSG_INFO_PRINT_LONGEST _UxGT("Longest job time")
- //#define MSG_INFO_PRINT_FILAMENT _UxGT("Extruded total")
-#else
- //#define MSG_INFO_PRINT_COUNT _UxGT("Prints")
- //#define MSG_INFO_COMPLETED_PRINTS _UxGT("Completed")
- //#define MSG_INFO_PRINT_TIME _UxGT("Total")
- //#define MSG_INFO_PRINT_LONGEST _UxGT("Longest")
- //#define MSG_INFO_PRINT_FILAMENT _UxGT("Extruded")
-#endif
-//#define MSG_INFO_MIN_TEMP _UxGT("Min Temp")
-//#define MSG_INFO_MAX_TEMP _UxGT("Max Temp")
-//#define MSG_INFO_PSU _UxGT("PSU")
-//#define MSG_DRIVE_STRENGTH _UxGT("Drive Strength")
-//#define MSG_DAC_PERCENT _UxGT("Driver %")
-//#define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write")
-//#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("PRINT PAUSED")
-//#define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("LOAD FILAMENT")
-//#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("UNLOAD FILAMENT")
-//#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
-//#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Purge more")
-//#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Continue")
-//#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Nozzle: ")
-//#define MSG_RUNOUT_SENSOR _UxGT("Runout Sensor")
-//#define MSG_ERR_HOMING_FAILED _UxGT("Homing failed")
-//#define MSG_ERR_PROBING_FAILED _UxGT("Probing failed")
-//#define MSG_M600_TOO_COLD _UxGT("M600: Too cold")
-
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-// ...or up to 2 lines on a 3-line display
-//
-#if LCD_HEIGHT >= 4
- //#define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Wait for start")
- //#define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("of the filament")
- //#define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("change")
- //#define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Wait for")
- //#define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("filament unload")
- //#define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insert filament")
- //#define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("and press button")
- //#define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("to continue...")
- //#define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Press button to")
- //#define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("heat nozzle.")
- //#define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Heating nozzle")
- //#define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Please wait...")
- //#define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Wait for")
- //#define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("filament load")
- //#define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Wait for")
- //#define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("filament purge")
- //#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wait for print")
- //#define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("to resume")
-#else // LCD_HEIGHT < 4
- //#define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Please wait...")
- //#define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Ejecting...")
- //#define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insert and Click")
- //#define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Click to heat")
- //#define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Heating...")
- //#define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Loading...")
- //#define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Purging...")
- //#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Resuming...")
-#endif // LCD_HEIGHT < 4
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" 준비.");
+ PROGMEM Language_Str MSG_BACK = _UxGT("뒤로");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("카드 삽입됨");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("카드 제거됨");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("엔드스탑");
+ PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("소프트 엔드스탑");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("뒤로");
+ PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("고급 설정");
+ PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("설정");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("자동 시작");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("모터 정지");
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("디버깅 메뉴");
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("프로그레스바 테스트");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("오토홈");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("X 홈으로");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Y 홈으로");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Z 홈으로");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("XYZ 홈으로");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("누르면 시작합니다");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("다음 Point");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("레벨링 완료!");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("예열하기 - ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("예열하기 - ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("예열하기 - ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("예열하기 - ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("예열하기 - ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("예열하기 - ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("예열하기 - ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐 ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐 ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐 ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐 ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐 ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐 ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("예열하기 - ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("예열하기 - ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("예열하기 - ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("예열하기 - ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("예열하기 - ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("예열하기 - ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("예열하기 - ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("예열하기 - ") PREHEAT_2_LABEL _UxGT(" 노즐");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("예열하기 - ") PREHEAT_2_LABEL _UxGT(" 노즐 ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("예열하기 - ") PREHEAT_2_LABEL _UxGT(" 노즐 ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("예열하기 - ") PREHEAT_2_LABEL _UxGT(" 노즐 ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("예열하기 - ") PREHEAT_2_LABEL _UxGT(" 노즐 ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("예열하기 - ") PREHEAT_2_LABEL _UxGT(" 노즐 ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("예열하기 - ") PREHEAT_2_LABEL _UxGT(" 노즐 ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Custom 예열");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("식히기");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("스위치 전원 켜기");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("스위치 전원 끄기");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("밀어내기");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("당기기");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("축 이동");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("베드 레벨링");
+ PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("미러 사본");
+ PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("오토레벨링 하기");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("노즐");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("노즐 ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("노즐 ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("노즐 ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("노즐 ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("노즐 ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("노즐 ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("베드");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("펜 속도");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("펜 속도 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("펜 속도 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("펜 속도 3");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("엑스트라 펜 속도");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1 = _UxGT("엑스트라 펜 속도 1");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2 = _UxGT("엑스트라 펜 속도 2");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3 = _UxGT("엑스트라 펜 속도 3");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("온도");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("동작");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("설정 저장하기");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("설정 읽어오기");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("설정 되돌리기");
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("EEPROM 초기화");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("새로고침");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("처음으로");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("준비하기");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("일시정지");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("재시작");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("출력중지");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("SD 카드출력");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("SD 카드없음");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("슬립모드...");
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("일시 정지됨");
+ PROGMEM Language_Str MSG_PRINTING = _UxGT("출력중...");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("취소됨");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("죽음. ");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("멈춤. ");
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("잘못된 프린터");
+}
diff --git a/Marlin/src/lcd/language/language_nl.h b/Marlin/src/lcd/language/language_nl.h
index 483b24250181..7555194eb8f9 100644
--- a/Marlin/src/lcd/language/language_nl.h
+++ b/Marlin/src/lcd/language/language_nl.h
@@ -32,252 +32,270 @@
#define DISPLAY_CHARSET_ISO10646_1
#define NOT_EXTENDED_ISO10646_1_5X7
-#define WELCOME_MSG MACHINE_NAME _UxGT(" gereed.")
-#define MSG_BACK _UxGT("Terug")
-#define MSG_MEDIA_INSERTED _UxGT("Kaart ingestoken")
-#define MSG_MEDIA_REMOVED _UxGT("Kaart verwijderd")
-#define MSG_LCD_ENDSTOPS _UxGT("Endstops") // Max length 8 characters
-#define MSG_MAIN _UxGT("Hoofdmenu")
-#define MSG_AUTOSTART _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS _UxGT("Motoren uit")
-#define MSG_DEBUG_MENU _UxGT("Debug Menu") //accepted English terms
-#define MSG_PROGRESS_BAR_TEST _UxGT("Vooruitgang Test")
-#define MSG_AUTO_HOME _UxGT("Auto home")
-#define MSG_AUTO_HOME_X _UxGT("Home X")
-#define MSG_AUTO_HOME_Y _UxGT("Home Y")
-#define MSG_AUTO_HOME_Z _UxGT("Home Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Homing XYZ")
-#define MSG_LEVEL_BED_WAITING _UxGT("Klik voor begin")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Volgende Plaats")
-#define MSG_LEVEL_BED_DONE _UxGT("Bed level kompl.")
-#define MSG_SET_HOME_OFFSETS _UxGT("Zet home offsets")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("H offset toegep.")
-#define MSG_SET_ORIGIN _UxGT("Nulpunt instellen")
-#define MSG_PREHEAT_1 _UxGT(PREHEAT_1_LABEL " voorverwarmen")
-#define MSG_PREHEAT_1_N _UxGT(PREHEAT_1_LABEL " voorverw. ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1_N _UxGT("aan")
-#define MSG_PREHEAT_1_END MSG_PREHEAT_1 _UxGT(" Einde")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1_N _UxGT("Bed")
-#define MSG_PREHEAT_1_SETTINGS _UxGT(PREHEAT_1_LABEL " verw. conf")
-#define MSG_PREHEAT_2 _UxGT(PREHEAT_2_LABEL " voorverwarmen")
-#define MSG_PREHEAT_2_N _UxGT(PREHEAT_2_LABEL " voorverw. ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2_N _UxGT("aan")
-#define MSG_PREHEAT_2_END MSG_PREHEAT_2 _UxGT(" Einde")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2_N _UxGT("Bed")
-#define MSG_PREHEAT_2_SETTINGS _UxGT(PREHEAT_2_LABEL " verw. conf")
-#define MSG_COOLDOWN _UxGT("Afkoelen")
-#define MSG_SWITCH_PS_ON _UxGT("Stroom aan")
-#define MSG_SWITCH_PS_OFF _UxGT("Stroom uit")
-#define MSG_EXTRUDE _UxGT("Extrude")
-#define MSG_RETRACT _UxGT("Retract")
-#define MSG_MOVE_AXIS _UxGT("As verplaatsen")
-#define MSG_BED_LEVELING _UxGT("Bed Leveling")
-#define MSG_LEVEL_BED _UxGT("Level bed")
+namespace Language_nl {
+ using namespace Language_en; // Inherit undefined strings from English
-#define MSG_MOVING _UxGT("Verplaatsen...")
-#define MSG_FREE_XY _UxGT("Vrij XY")
-#define MSG_MOVE_X _UxGT("Verplaats X")
-#define MSG_MOVE_Y _UxGT("Verplaats Y")
-#define MSG_MOVE_Z _UxGT("Verplaats Z")
-#define MSG_MOVE_E _UxGT("Extruder")
-#define MSG_MOVE_Z_DIST _UxGT("Verplaats %smm")
-#define MSG_MOVE_01MM _UxGT("Verplaats 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Verplaats 1mm")
-#define MSG_MOVE_10MM _UxGT("Verplaats 10mm")
-#define MSG_SPEED _UxGT("Snelheid")
-#define MSG_BED_Z _UxGT("Bed Z")
-#define MSG_NOZZLE _UxGT("Nozzle")
-#define MSG_BED _UxGT("Bed")
-#define MSG_FAN_SPEED _UxGT("Fan snelheid")
-#define MSG_FLOW _UxGT("Flow")
-#define MSG_CONTROL _UxGT("Control")
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP _UxGT("Autotemp")
-#define MSG_LCD_ON _UxGT("Aan")
-#define MSG_LCD_OFF _UxGT("Uit")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Selecteer")
-#define MSG_ACC _UxGT("Versn")
-#define MSG_JERK _UxGT("Jerk")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va-jerk")
- #define MSG_VB_JERK _UxGT("Vb-jerk")
- #define MSG_VC_JERK _UxGT("Vc-jerk")
-#else
- #define MSG_VA_JERK _UxGT("Vx-jerk")
- #define MSG_VB_JERK _UxGT("Vy-jerk")
- #define MSG_VC_JERK _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK _UxGT("Ve-jerk")
-#define MSG_VMAX _UxGT("Vmax ")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("VTrav min")
-#define MSG_AMAX _UxGT("Amax ")
-#define MSG_A_RETRACT _UxGT("A-retract")
-#define MSG_A_TRAVEL _UxGT("A-travel")
-#define MSG_STEPS_PER_MM _UxGT("Steps/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("Asteps/mm")
- #define MSG_BSTEPS _UxGT("Bsteps/mm")
- #define MSG_CSTEPS _UxGT("Csteps/mm")
-#else
- #define MSG_ASTEPS _UxGT("Xsteps/mm")
- #define MSG_BSTEPS _UxGT("Ysteps/mm")
- #define MSG_CSTEPS _UxGT("Zsteps/mm")
-#endif
-#define MSG_ESTEPS _UxGT("Esteps/mm")
-#define MSG_E1STEPS _UxGT("E1steps/mm")
-#define MSG_E2STEPS _UxGT("E2steps/mm")
-#define MSG_E3STEPS _UxGT("E3steps/mm")
-#define MSG_E4STEPS _UxGT("E4steps/mm")
-#define MSG_E5STEPS _UxGT("E5steps/mm")
-#define MSG_E6STEPS _UxGT("E6steps/mm")
-#define MSG_TEMPERATURE _UxGT("Temperatuur")
-#define MSG_MOTION _UxGT("Beweging")
-#define MSG_FILAMENT _UxGT("Filament")
-#define MSG_ADVANCE_K _UxGT("Advance K") //accepted english dutch
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E in mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Fil. Dia.")
-#define MSG_CONTRAST _UxGT("LCD contrast")
-#define MSG_STORE_EEPROM _UxGT("Geheugen opslaan")
-#define MSG_LOAD_EEPROM _UxGT("Geheugen laden")
-#define MSG_RESTORE_FAILSAFE _UxGT("Noodstop reset")
-#define MSG_REFRESH _UxGT("Ververs")
-#define MSG_WATCH _UxGT("Info scherm")
-#define MSG_PREPARE _UxGT("Voorbereiden")
-#define MSG_TUNE _UxGT("Afstellen")
-#define MSG_PAUSE_PRINT _UxGT("Print pauzeren")
-#define MSG_RESUME_PRINT _UxGT("Print hervatten")
-#define MSG_STOP_PRINT _UxGT("Print stoppen")
-#define MSG_MEDIA_MENU _UxGT("Print van SD")
-#define MSG_NO_MEDIA _UxGT("Geen SD kaart")
-#define MSG_DWELL _UxGT("Slapen...")
-#define MSG_USERWAIT _UxGT("Wachten...")
-#define MSG_PRINT_ABORTED _UxGT("Print afgebroken")
-#define MSG_NO_MOVE _UxGT("Geen beweging.")
-#define MSG_KILLED _UxGT("Afgebroken. ")
-#define MSG_STOPPED _UxGT("Gestopt. ")
-#define MSG_CONTROL_RETRACT _UxGT("Retract mm") //accepted English term in Dutch
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Ruil Retract mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Retract F")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Hop mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Ruil UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet F")
-#define MSG_AUTORETRACT _UxGT("AutoRetr.")
-#define MSG_FILAMENTCHANGE _UxGT("Verv. Filament")
-#define MSG_INIT_MEDIA _UxGT("Init. SD kaart")
-#define MSG_CHANGE_MEDIA _UxGT("Verv. SD Kaart")
-#define MSG_ZPROBE_OUT _UxGT("Z probe uit. bed")
-#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Zelf-Test")
-#define MSG_BLTOUCH_RESET _UxGT("Reset BLTouch")
-#define MSG_HOME_FIRST _UxGT("Home %s%s%s Eerst")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Z Offset") //accepted English term in Dutch
-#define MSG_BABYSTEP_X _UxGT("Babystap X")
-#define MSG_BABYSTEP_Y _UxGT("Babystap Y")
-#define MSG_BABYSTEP_Z _UxGT("Babystap Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Endstop afbr.")
-#define MSG_HEATING_FAILED_LCD _UxGT("Voorverw. fout")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Redun. temp fout")
-#define MSG_THERMAL_RUNAWAY _UxGT("Therm. wegloop")
-#define MSG_ERR_MAXTEMP _UxGT("Err: Max. temp")
-#define MSG_ERR_MINTEMP _UxGT("Err: Min. temp")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Err: Max.tmp bed")
-#define MSG_ERR_MINTEMP_BED _UxGT("Err: Min.tmp bed")
-#define MSG_ERR_Z_HOMING _UxGT("Home XY Eerst")
-#define MSG_HALTED _UxGT("PRINTER GESTOPT")
-#define MSG_PLEASE_RESET _UxGT("Reset A.U.B.")
-#define MSG_SHORT_DAY _UxGT("d") // One character only. Keep English standard
-#define MSG_SHORT_HOUR _UxGT("h") // One character only
-#define MSG_SHORT_MINUTE _UxGT("m") // One character only
-#define MSG_HEATING _UxGT("Voorwarmen...")
-#define MSG_BED_HEATING _UxGT("Bed voorverw...")
-#define MSG_DELTA_CALIBRATE _UxGT("Delta Calibratie")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Kalibreer X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Kalibreer Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Kalibreer Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Kalibreer Midden")
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Auto Calibratie")
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Zet Delta Hoogte")
+ constexpr uint8_t CHARSIZE = 1;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Dutch");
-#define MSG_INFO_STATS_MENU _UxGT("Printer Stats")
-#define MSG_INFO_BOARD_MENU _UxGT("Board Info") //accepted English term in Dutch
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Thermistors")
-#define MSG_INFO_EXTRUDERS _UxGT("Extruders")
-#define MSG_INFO_BAUDRATE _UxGT("Baud")
-#define MSG_INFO_MENU _UxGT("Over Printer")
-#define MSG_INFO_PRINTER_MENU _UxGT("Printer Info")
-#define MSG_INFO_PROTOCOL _UxGT("Protocol")
-#define MSG_CASE_LIGHT _UxGT("Case licht")
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" gereed.");
+ PROGMEM Language_Str MSG_BACK = _UxGT("Terug");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Kaart ingestoken");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Kaart verwijderd");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Hoofdmenu");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autostart");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Motoren uit");
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Debug Menu"); //accepted English terms
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Vooruitgang Test");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Auto home");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Home X");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Home Y");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Home Z");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Homing XYZ");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Klik voor begin");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Volgende Plaats");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Bed level kompl.");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Zet home offsets");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("H offset toegep.");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Nulpunt instellen");
+ PROGMEM Language_Str MSG_PREHEAT_1 = PREHEAT_1_LABEL _UxGT(" voorverwarmen");
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = PREHEAT_1_LABEL _UxGT(" voorverw. ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = PREHEAT_1_LABEL _UxGT(" voorverw. ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = PREHEAT_1_LABEL _UxGT(" voorverw. ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = PREHEAT_1_LABEL _UxGT(" voorverw. ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = PREHEAT_1_LABEL _UxGT(" voorverw. ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = PREHEAT_1_LABEL _UxGT(" voorverw. ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = PREHEAT_1_LABEL _UxGT(" voorverw. Einde");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = PREHEAT_1_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = PREHEAT_1_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = PREHEAT_1_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = PREHEAT_1_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = PREHEAT_1_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = PREHEAT_1_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = PREHEAT_1_LABEL _UxGT(" voorverw. aan");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = PREHEAT_1_LABEL _UxGT(" voorverw. Bed");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = PREHEAT_1_LABEL _UxGT(" verw. conf");
+ PROGMEM Language_Str MSG_PREHEAT_2 = PREHEAT_2_LABEL _UxGT(" voorverwarmen");
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = PREHEAT_2_LABEL _UxGT(" voorverw. ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = PREHEAT_2_LABEL _UxGT(" voorverw. ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = PREHEAT_2_LABEL _UxGT(" voorverw. ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = PREHEAT_2_LABEL _UxGT(" voorverw. ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = PREHEAT_2_LABEL _UxGT(" voorverw. ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = PREHEAT_2_LABEL _UxGT(" voorverw. ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = PREHEAT_2_LABEL _UxGT(" voorverw. Einde");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = PREHEAT_2_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = PREHEAT_2_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = PREHEAT_2_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = PREHEAT_2_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = PREHEAT_2_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = PREHEAT_2_LABEL _UxGT(" voorverw. Einde ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = PREHEAT_2_LABEL _UxGT(" voorverw. aan");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = PREHEAT_2_LABEL _UxGT(" voorverw. Bed");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = PREHEAT_2_LABEL _UxGT(" verw. conf");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Afkoelen");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Stroom aan");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Stroom uit");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrude");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Retract");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("As verplaatsen");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Bed Leveling");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Level bed");
-#define MSG_EXPECTED_PRINTER _UxGT("Onjuiste printer")
+ PROGMEM Language_Str MSG_MOVING = _UxGT("Verplaatsen...");
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("Vrij XY");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Verplaats X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Verplaats Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Verplaats Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extruder");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Extruder ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Extruder ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Extruder ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Extruder ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Extruder ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Extruder ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Verplaats %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Verplaats 0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Verplaats 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Verplaats 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Snelheid");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozzle");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Nozzle ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Nozzle ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Nozzle ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Nozzle ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Nozzle ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Nozzle ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Bed");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Fan snelheid");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Fan snelheid 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Fan snelheid 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Fan snelheid 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Flow");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Flow ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Flow ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Flow ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Flow ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Flow ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Flow ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Control");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Autotemp");
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("Aan");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Uit");
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Selecteer");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Selecteer ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Selecteer ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Selecteer ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Selecteer ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Selecteer ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Selecteer ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Versn");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatuur");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Beweging");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
+ PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Advance K"); //accepted english dutch
+ PROGMEM Language_Str MSG_ADVANCE_K_E0 = _UxGT("Advance K ") LCD_STR_E0; //accepted english dutch
+ PROGMEM Language_Str MSG_ADVANCE_K_E1 = _UxGT("Advance K ") LCD_STR_E1; //accepted english dutch
+ PROGMEM Language_Str MSG_ADVANCE_K_E2 = _UxGT("Advance K ") LCD_STR_E2; //accepted english dutch
+ PROGMEM Language_Str MSG_ADVANCE_K_E3 = _UxGT("Advance K ") LCD_STR_E3; //accepted english dutch
+ PROGMEM Language_Str MSG_ADVANCE_K_E4 = _UxGT("Advance K ") LCD_STR_E4; //accepted english dutch
+ PROGMEM Language_Str MSG_ADVANCE_K_E5 = _UxGT("Advance K ") LCD_STR_E5; //accepted english dutch
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm3");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Fil. Dia. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Fil. Dia. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Fil. Dia. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Fil. Dia. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Fil. Dia. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Fil. Dia. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD contrast");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Geheugen opslaan");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Geheugen laden");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Noodstop reset");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Ververs");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Info scherm");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Voorbereiden");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Afstellen");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Print pauzeren");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Print hervatten");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Print stoppen");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Print van SD");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Geen SD kaart");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Slapen...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Wachten...");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Print afgebroken");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Geen beweging.");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("Afgebroken. ");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("Gestopt. ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retract mm"); //accepted English term in Dutch
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Ruil Retract mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retract F");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Ruil UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("UnRet F");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("AutoRetr.");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Verv. Filament");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Verv. Filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Verv. Filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Verv. Filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Verv. Filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Verv. Filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Verv. Filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Init. SD kaart");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Verv. SD Kaart");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z probe uit. bed");
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Zelf-Test");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reset BLTouch");
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Home %s%s%s Eerst");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Z Offset"); //accepted English term in Dutch
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystap X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystap Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystap Z");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Endstop afbr.");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Voorverw. fout");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Redun. temp fout");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("Therm. wegloop");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err: Max. temp");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err: Min. temp");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("Err: Max.tmp bed");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Err: Min.tmp bed");
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Home XY Eerst");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("PRINTER GESTOPT");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Reset A.U.B.");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only. Keep English standard
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Voorwarmen...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Bed voorverw...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Calibratie");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibreer X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibreer Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibreer Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibreer Midden");
+ PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibratie");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Zet Delta Hoogte");
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Printed Aantal")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Totaal Voltooid")
- #define MSG_INFO_PRINT_TIME _UxGT("Totale Printtijd")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Langste Printtijd")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Totaal Extrudeert")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Aantal")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Voltooid")
- #define MSG_INFO_PRINT_TIME _UxGT("Printtijd ")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Langste")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Extrud.")
-#endif
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Printer Stats");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Board Info"); //accepted English term in Dutch
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistors");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extruders");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baud");
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Over Printer");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Printer Info");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocol");
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Case licht");
-#define MSG_INFO_MIN_TEMP _UxGT("Min Temp")
-#define MSG_INFO_MAX_TEMP _UxGT("Max Temp")
-#define MSG_INFO_PSU _UxGT("PSU") //accepted English term in Dutch
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Onjuiste printer");
-#define MSG_DRIVE_STRENGTH _UxGT("Motorstroom")
-#define MSG_DAC_PERCENT _UxGT("Driver %") //accepted English term in Dutch
-#define MSG_DAC_EEPROM_WRITE _UxGT("DAC Opslaan")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Hervat print")
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Nozzle: ") //accepeted English term
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-// ...or up to 2 lines on a 3-line display
-//
-#if LCD_HEIGHT >= 4
- // Up to 3 lines
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Wacht voor start")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("filament te")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("verwisselen")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Wacht voor")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("filament uit")
- #define MSG_FILAMENT_CHANGE_UNLOAD_3 _UxGT("te laden")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Klik knop om...")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("verw. nozzle.") //nozzle accepted English term
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Nozzle verw.")
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Wacht a.u.b.")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Laad filament")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("en druk knop")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("om verder...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Wacht voor")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("filament te")
- #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("laden")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wacht voor print")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("om verder")
- #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("te gaan")
-#else // LCD_HEIGHT < 4
- // Up to 2 lines
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Wacht voor")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("start...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Wacht voor")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("uitladen...")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Klik knop om...")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("verw. nozzle.") //nozzle accepted English term
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Verwarmen...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Laad filament")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("en druk knop")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Wacht voor")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("inladen...")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wacht voor")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("printing...")
-#endif // LCD_HEIGHT < 4
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Printed Aantal");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Totaal Voltooid");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Totale Printtijd");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Langste Printtijd");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Totaal Extrudeert");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Aantal");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Voltooid");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Printtijd ");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Langste");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extrud.");
+ #endif
+
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("PSU"); //accepted English term in Dutch
+
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Motorstroom");
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("Driver %"); //accepted English term in Dutch
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("DAC Opslaan");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Hervat print");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozzle: "); //accepeted English term
+ //
+ // Filament Change screens show up to 3 lines on a 4-line display
+ // ...or up to 2 lines on a 3-line display
+ //
+ #if LCD_HEIGHT >= 4
+ // Up to 3 lines
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Wacht voor start", "filament te", "verwisselen"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Wacht voor", "filament uit", "te laden"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Klik knop om...", "verw. nozzle.")); //nozzle accepted English term
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nozzle verw.", "Wacht a.u.b."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Laad filament", "en druk knop", "om verder..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Wacht voor", "filament te", "laden"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Wacht voor print", "om verder", "te gaan"));
+ #else
+ // Up to 2 lines
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Wacht voor", "start..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Wacht voor", "uitladen..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Klik knop om...", "verw. nozzle.")); //nozzle accepted English term
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Verwarmen..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_2_LINE("Laad filament", "en druk knop"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Wacht voor", "inladen..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Wacht voor", "printing..."));
+ #endif
+}
diff --git a/Marlin/src/lcd/language/language_pl.h b/Marlin/src/lcd/language/language_pl.h
index 97924a7024d0..ab5461536363 100644
--- a/Marlin/src/lcd/language/language_pl.h
+++ b/Marlin/src/lcd/language/language_pl.h
@@ -22,233 +22,679 @@
#pragma once
/**
- * Polish for DOGM display - includes accented characters
+ * Polish - includes accented characters
+ *
+ * LCD Menu Messages
+ * See also http://marlinfw.org/docs/development/lcd_language.html
+ *
*/
#define DISPLAY_CHARSET_ISO10646_PL
-#define CHARSIZE 2
+namespace Language_pl {
+ using namespace Language_en; // Inherit undefined strings from English
+
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Polish");
+
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" gotowy.");
+ PROGMEM Language_Str MSG_YES = _UxGT("TAK");
+ PROGMEM Language_Str MSG_NO = _UxGT("NIE");
+ PROGMEM Language_Str MSG_BACK = _UxGT("Wstecz");
+ PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Przerywanie...");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Karta włożona");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Karta usunięta");
+ PROGMEM Language_Str MSG_MEDIA_RELEASED = _UxGT("Karta zwolniona");
+ PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Oczekiwanie na kartę");
+ PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Bład odczytu karty");
+ PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("Urządzenie USB usunięte");
+ PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Błąd uruchomienia USB");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Krańców."); // Max length 8 characters
+ PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Progr. Krańcówki");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Menu główne");
+ PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Ustawienie zaawansowane");
+ PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfiguracja");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Autostart");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Wyłącz silniki");
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu Debugowania");
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Testowy pasek postępu");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Pozycja zerowa");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Zeruj X");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Zeruj Y");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Zeruj Z");
+ PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Autowyrównanie Z");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Pozycja zerowa");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Kliknij by rozp.");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Następny punkt");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Wypoziomowano!");
+ PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Wys. zanikania");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Ust. poz. zer.");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Poz. zerowa ust.");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Ustaw punkt zero");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" wsz.");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" stół");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" ustaw.");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Rozgrzej ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Rozgrzej ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Rozgrzej ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Rozgrzej ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Rozgrzej ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Rozgrzej ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Rozgrzej ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" Dysza");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" Dysza ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" Dysza ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" Dysza ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" Dysza ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" Dysza ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" Dysza ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" wsz.");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" stół");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Rozgrzej ") PREHEAT_2_LABEL _UxGT(" ustaw.");
+ PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Rozgrzej własne ust.");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Chłodzenie");
+ PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Sterowanie Lasera");
+ PROGMEM Language_Str MSG_LASER_OFF = _UxGT("Wyłącz Laser");
+ PROGMEM Language_Str MSG_LASER_ON = _UxGT("Włącz Laser");
+ PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Zasilanie Lasera");
+ PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Sterowanie wrzeciona");
+ PROGMEM Language_Str MSG_SPINDLE_OFF = _UxGT("Wyłącz wrzeciono");
+ PROGMEM Language_Str MSG_SPINDLE_ON = _UxGT("Włącz wrzeciono");
+ PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Zasilanie wrzeciona");
+ PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Rewers wrzeciona");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Włącz zasilacz");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Wyłącz zasilacz");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Ekstruzja");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Wycofanie");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Ruch osi");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Poziomowanie stołu");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Wypoziomuj stół");
+ PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Narożniki poziomowania");
+ PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Nastepny narożnik");
+ PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Edytor siatki");
+ PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Edycja siatki");
+ PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Edycja siatki zatrzymana");
+ PROGMEM Language_Str MSG_PROBING_MESH = _UxGT("Punkt pomiarowy");
+ PROGMEM Language_Str MSG_MESH_X = _UxGT("Indeks X");
+ PROGMEM Language_Str MSG_MESH_Y = _UxGT("Indeks Y");
+ PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Wartość Z");
+ PROGMEM Language_Str MSG_USER_MENU = _UxGT("Własne Polecenia");
+ PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Test sondy");
+ PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Punky");
+ PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Odchylenie");
+ PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Tryb IDEX");
+ PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Przesunięcie narzędzia");
+ PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Parkowanie");
+ PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplikowanie");
+ PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Kopia lustrzana");
+ PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Pełne sterowanie");
+ PROGMEM Language_Str MSG_X_OFFSET = _UxGT("2ga dysza X");
+ PROGMEM Language_Str MSG_Y_OFFSET = _UxGT("2ga dysza Y");
+ PROGMEM Language_Str MSG_Z_OFFSET = _UxGT("2ga dysza Z");
+ PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Wykonywanie G29");
+ PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Narzędzia UBL");
+ PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
+ PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Punkt pochylenia");
+ PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Ręczne Budowanie Siatki");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Umieść podkładkę i zmierz");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Zmierz");
+ PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Usuń & Zmierz Stół");
+ PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Przesuwanie do następnego");
+ PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Aktywacja UBL");
+ PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Dezaktywacja UBL");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Temperatura stołu");
+ PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temperatura stołu");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temperatura dyszy");
+ PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temperatura dyszy");
+ PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Edycja siatki");
+ PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edycja własnej siatki");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Dostrajanie siatki");
+ PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Koniec edycji siati");
+ PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Buduj własna siatkę");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Buduj siatkę");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = _UxGT("Buduj siatkę (") PREHEAT_1_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("Buduj siatkę (") PREHEAT_2_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Buduj siatkę na zimno");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Dostrojenie wysokości siatki");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Wartość wysokości");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Sprawdzenie siatki");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("Sprawdzenie siatki (") PREHEAT_1_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Sprawdzenie siatki (") PREHEAT_2_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Sprawdzenie własnej siatki");
+ PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 Nagrzewanie stołu");
+ PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Nagrzewanie dyszy");
+ PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Napełnianie ręczne...");
+ PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Napełnij kreśloną długością");
+ PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Napełianie zakończone");
+ PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 Przewane");
+ PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Opuszczanie G26");
+ PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Kontynuuj tworzenie siatki");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Poziomowanie siatką");
+ PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Poziomowaie 3-punktowe");
+ PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Poziomowaie według siatki");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Poziomuj siatkę");
+ PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Punkty boczne");
+ PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Rodzaj mapy");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Wyslij mapę siatki");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Wyslij do Hosta");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Wyslij do CSV");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Kopia poza drukarką");
+ PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Wyslij info UBL");
+ PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Stopień wypełnienia");
+ PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Ręczne wypełnienie");
+ PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Inteligentne wypełnienie");
+ PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Wypełnienie siatki");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Unieważnij wszystko");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Unieważnij najbliższy");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Dostrajaj wszystko");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Dostrajaj najbliższy");
+ PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Przechowywanie siatki");
+ PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Slot Pamięci");
+ PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Załaduj siatke stołu");
+ PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Zapisz siatke stołu");
+ PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("M117 Siatka %i załadowana");
+ PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("M117 Siatka %i Zapisana");
+ PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Brak magazynu");
+ PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Błąd: Zapis UBL");
+ PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Bład: Odczyt UBL");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Przesunięcie Z: ");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Przesunięcie Z zatrzymane");
+ PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Krok po kroku");
+ PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Tworzeni ezimnej siatki");
+ PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2. Inteligentne wypełnienie");
+ PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Sprawdzenie siatki");
+ PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Dostrojenie wszystkiego");
+ PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Sprawdzenie siatki");
+ PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Dostrojenie wszystkiego");
+ PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7. Zapis siatki stołu");
+
+ PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Sterowanie LED");
+ PROGMEM Language_Str MSG_LEDS = _UxGT("Światła");
+ PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Ustawienia świateł");
+ PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Czerwony");
+ PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Pomarańczowy");
+ PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Zółty");
+ PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Zielony");
+ PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Niebieski");
+ PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indygo");
+ PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Fioletowy");
+ PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Biały");
+ PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Domyślny");
+ PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Własne światła");
+ PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Czerwony");
+ PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Zielony");
+ PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Niebieski");
+ PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Biały");
+ PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Jasność");
+
+ PROGMEM Language_Str MSG_MOVING = _UxGT("Ruch...");
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("Swobodne XY");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Przesuń w X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Przesuń w Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Przesuń w Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Ekstruzja (os E)");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Ekstruzja (os E) ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Ekstruzja (os E) ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Ekstruzja (os E) ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Ekstruzja (os E) ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Ekstruzja (os E) ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Ekstruzja (os E) ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Dysza za zimna");
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Przesuń co %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Przesuń co .1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Przesuń co 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Przesuń co 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Predkość");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Stół Z");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Dysza");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Dysza ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Dysza ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Dysza ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Dysza ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Dysza ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Dysza ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Stół");
+ PROGMEM Language_Str MSG_CHAMBER = _UxGT("Obudowa");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Obroty wiatraka");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Obroty wiatraka 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Obroty wiatraka 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Obroty wiatraka 3");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Obroty dodatkowego wiatraka");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1 = _UxGT("Obroty dodatkowego wiatraka 1");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2 = _UxGT("Obroty dodatkowego wiatraka 2");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3 = _UxGT("Obroty dodatkowego wiatraka 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Przepływ");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Przepływ ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Przepływ ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Przepływ ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Przepływ ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Przepływ ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Przepływ ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Ustawienia");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Mnożnik");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Auto. temperatura");
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("Wł.");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Wył.");
+ PROGMEM Language_Str MSG_AUTOTUNE_PID = _UxGT("PID Autostrojenie");
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E0 = _UxGT("PID Autostrojenie ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E1 = _UxGT("PID Autostrojenie ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E2 = _UxGT("PID Autostrojenie ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E3 = _UxGT("PID Autostrojenie ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E4 = _UxGT("PID Autostrojenie ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E5 = _UxGT("PID Autostrojenie ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
+ PROGMEM Language_Str MSG_PID_P_E0 = _UxGT("PID-P ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_P_E1 = _UxGT("PID-P ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_P_E2 = _UxGT("PID-P ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_P_E3 = _UxGT("PID-P ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_P_E4 = _UxGT("PID-P ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_P_E5 = _UxGT("PID-P ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
+ PROGMEM Language_Str MSG_PID_I_E0 = _UxGT("PID-I ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_I_E1 = _UxGT("PID-I ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_I_E2 = _UxGT("PID-I ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_I_E3 = _UxGT("PID-I ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_I_E4 = _UxGT("PID-I ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_I_E5 = _UxGT("PID-I ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
+ PROGMEM Language_Str MSG_PID_D_E0 = _UxGT("PID-D ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_D_E1 = _UxGT("PID-D ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_D_E2 = _UxGT("PID-D ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_D_E3 = _UxGT("PID-D ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_D_E4 = _UxGT("PID-D ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_D_E5 = _UxGT("PID-D ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
+ PROGMEM Language_Str MSG_PID_C_E0 = _UxGT("PID-C ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_C_E1 = _UxGT("PID-C ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_C_E2 = _UxGT("PID-C ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_C_E3 = _UxGT("PID-C ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_C_E4 = _UxGT("PID-C ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_C_E5 = _UxGT("PID-C ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Wybierz");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Wybierz ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Wybierz ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Wybierz ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Wybierz ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Wybierz ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Wybierz ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Przyspieszenie");
+ PROGMEM Language_Str MSG_JERK = _UxGT("Zryw");
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("Zryw V") LCD_STR_A;
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("Zryw V") LCD_STR_B;
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("Zryw V") LCD_STR_C;
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("Zryw Ve");
+ PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
+ PROGMEM Language_Str MSG_VELOCITY = _UxGT("Prędkość (V)");
+ PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A;
+ PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B;
+ PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C;
+ PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E;
+ PROGMEM Language_Str MSG_VMAX_E0 = _UxGT("Vmax ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_VMAX_E1 = _UxGT("Vmax ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_VMAX_E2 = _UxGT("Vmax ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_VMAX_E3 = _UxGT("Vmax ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_VMAX_E4 = _UxGT("Vmax ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_VMAX_E5 = _UxGT("Vmax ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_VMIN = _UxGT("Vmin");
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vskok min");
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Przyspieszenie (A)");
+ PROGMEM Language_Str MSG_AMAX_A = _UxGT("Amax ") LCD_STR_A;
+ PROGMEM Language_Str MSG_AMAX_B = _UxGT("Amax ") LCD_STR_B;
+ PROGMEM Language_Str MSG_AMAX_C = _UxGT("Amax ") LCD_STR_C;
+ PROGMEM Language_Str MSG_AMAX_E = _UxGT("Amax ") LCD_STR_E;
+ PROGMEM Language_Str MSG_AMAX_E0 = _UxGT("Amax ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AMAX_E1 = _UxGT("Amax ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AMAX_E2 = _UxGT("Amax ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AMAX_E3 = _UxGT("Amax ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AMAX_E4 = _UxGT("Amax ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AMAX_E5 = _UxGT("Amax ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-wycofanie");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-przesuń.");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("kroki/mm");
+ PROGMEM Language_Str MSG_A_STEPS = _UxGT("kroki") LCD_STR_A _UxGT("/mm");
+ PROGMEM Language_Str MSG_B_STEPS = _UxGT("kroki") LCD_STR_B _UxGT("/mm");
+ PROGMEM Language_Str MSG_C_STEPS = _UxGT("kroki") LCD_STR_C _UxGT("/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("krokiE/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = _UxGT("kroki ") LCD_STR_E0 _UxGT("/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = _UxGT("kroki ") LCD_STR_E1 _UxGT("/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = _UxGT("kroki ") LCD_STR_E2 _UxGT("/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = _UxGT("kroki ") LCD_STR_E3 _UxGT("/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = _UxGT("kroki ") LCD_STR_E4 _UxGT("/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = _UxGT("kroki ") LCD_STR_E5 _UxGT("/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Ruch");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E w mm3");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Śr. fil.");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Śr. fil. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Śr. fil. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Śr. fil. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Śr. fil. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Śr. fil. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Śr. fil. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Wyładuj mm");
+ PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Załaduj mm");
+ PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Advance K");
+ PROGMEM Language_Str MSG_ADVANCE_K_E0 = _UxGT("Advance K ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_ADVANCE_K_E1 = _UxGT("Advance K ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_ADVANCE_K_E2 = _UxGT("Advance K ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_ADVANCE_K_E3 = _UxGT("Advance K ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_ADVANCE_K_E4 = _UxGT("Advance K ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_ADVANCE_K_E5 = _UxGT("Advance K ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("Kontrast LCD");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Zapisz w pamięci");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Wczytaj z pamięci");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Ustaw. fabryczne");
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Initializuj EEPROM");
+ PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Uaktualnij kartę");
+ PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Resetuj drukarkę");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Odswież");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Ekran główny");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Przygotuj");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Strojenie");
+ PROGMEM Language_Str MSG_START_PRINT = _UxGT("Start wydruku");
+ PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Następny");
+ PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Inic.");
+ PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Stop");
+ PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Drukuj");
+ PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Resetuj");
+ PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Przerwij");
+ PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Gotowe");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Wstrzymaj druk");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Wznowienie");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Stop");
+ PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Odzyskiwanie po awarii");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Karta SD");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Brak karty");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Uśpij...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Oczekiwanie...");
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Druk wstrzymany");
+ PROGMEM Language_Str MSG_PRINTING = _UxGT("Drukowanie...");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Druk przerwany");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Brak ruchu");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("Ubity. ");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("Zatrzymany. ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Wycofaj mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Z Wycof. mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Wycofaj V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Skok Z mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Cof. wycof. mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Z Cof. wyc. mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Cof. wycof. V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto. wycofanie");
+ PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Długość zmiany");
+ PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Długość oczyszczania");
+ PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Zmiana narzędzia");
+ PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Podniesienie Z");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD = _UxGT("Prędkość napełniania");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD = _UxGT("Prędkość wycofania");
+ PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Dysza w oczekiwaniu");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Zmień filament");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Zmień filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Zmień filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Zmień filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Zmień filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Zmień filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Zmień filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Załaduj Filament");
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E0 = _UxGT("Załaduj Filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E1 = _UxGT("Załaduj Filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E2 = _UxGT("Załaduj Filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E3 = _UxGT("Załaduj Filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E4 = _UxGT("Załaduj Filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E5 = _UxGT("Załaduj Filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Wyładuj Filament");
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0 = _UxGT("Wyładuj Filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1 = _UxGT("Wyładuj Filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2 = _UxGT("Wyładuj Filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3 = _UxGT("Wyładuj Filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4 = _UxGT("Wyładuj Filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5 = _UxGT("Wyładuj Filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Wyładuj wszystkie");
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Inicjal. karty SD");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Zmiana karty SD");
+ PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Zwolnienie karty");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z za stołem");
+ PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Współczynik skrzywienia");
+ PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Self-Test");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reset BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Cmd: Stow");
+ PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Cmd: Deploy");
+ PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("Cmd: SW-Mode");
+ PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("Cmd: 5V-Mode");
+ PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("Cmd: OD-Mode");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Cmd: Mode-Store");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Set BLTouch to 5V");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Set BLTouch to OD");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Report Drain");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("NIEBEZPIECZNE: Złe ustawienia mogą uszkodzić drukarkę. Kontynuować?");
+ PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Init TouchMI");
+ PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Z Offset Test");
+ PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Save");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Deploy TouchMI");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Deploy Z-Probe");
+ PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Stow Z-Probe");
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Najpierw Home %s%s%s");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Offset Z");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
+ PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Łącznie");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Błąd krańcówki");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Rozgrz. nieudane");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED = _UxGT("Rozgrz. stołu nieudane");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_CHAMBER = _UxGT("Rozgrz. komory nieudane");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Błąd temperatury");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("ZANIK TEMPERATURY");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("ZANIK TEMP. STOŁU");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ZANIK TEMP.KOMORY");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Błąd: MAXTEMP");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Błąd: MINTEMP");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("Błąd: MAXTEMP STÓŁ");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Błąd: MINTEMP STÓŁ");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER = _UxGT("Błąd: MAXTEMP KOMORA");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER = _UxGT("Błąd: MINTEMP KOMORA");
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Najpierw Home XY");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("Drukarka zatrzym.");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Proszę zresetować");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("g"); // One character only
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Rozgrzewanie...");
+ PROGMEM Language_Str MSG_COOLING = _UxGT("Chłodzenie...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Rozgrzewanie stołu...");
+ PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Chłodzenie stołu...");
+ PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Rozgrzewanie komory...");
+ PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Chłodzenie komory...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Kalibrowanie Delty");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibruj X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibruj Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibruj Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibruj środek");
+ PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Ustawienia delty");
+ PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto kalibrowanie");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Ustaw wysokość delty");
+ PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Przesun. Z sondy");
+ PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Ukośne ramię");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Wysokość");
+ PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Promień");
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("O drukarce");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Info drukarki");
+ PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("Poziomowanie 3-punktowe");
+ PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Poziomowanie liniowe");
+ PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Poziomowanie biliniowe");
+ PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
+ PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Poziomowanie siatką");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Statystyki");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Info płyty");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistory");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Ekstrudery");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Predkość USB");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokół");
+ PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Zegar pracy: OFF");
+ PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Zegar pracy: ON");
-#define WELCOME_MSG MACHINE_NAME _UxGT(" gotowy.")
-#define MSG_MEDIA_INSERTED _UxGT("Karta włożona")
-#define MSG_MEDIA_REMOVED _UxGT("Karta usunięta")
-#define MSG_LCD_ENDSTOPS _UxGT("Kranców.") // Max length 8 characters
-#define MSG_MAIN _UxGT("Menu główne")
-#define MSG_AUTOSTART _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS _UxGT("Wyłącz silniki")
-#define MSG_AUTO_HOME _UxGT("Pozycja zerowa")
-#define MSG_AUTO_HOME_X _UxGT("Zeruj X")
-#define MSG_AUTO_HOME_Y _UxGT("Zeruj Y")
-#define MSG_AUTO_HOME_Z _UxGT("Zeruj Z")
-#define MSG_LEVEL_BED _UxGT("Poziom. stołu")
-#define MSG_LEVEL_BED_HOMING _UxGT("Pozycja zerowa")
-#define MSG_LEVEL_BED_WAITING _UxGT("Kliknij by rozp.")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Następny punkt")
-#define MSG_LEVEL_BED_DONE _UxGT("Wypoziomowano!")
-#define MSG_USER_MENU _UxGT("Własne Polecenia")
-#define MSG_SET_HOME_OFFSETS _UxGT("Ust. poz. zer.")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Poz. zerowa ust.")
-#define MSG_SET_ORIGIN _UxGT("Ustaw punkt zero")
-#define MSG_PREHEAT_1 _UxGT("Rozgrzej " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" wsz.")
-#define MSG_PREHEAT_1_BEDONLY _UxGT("Rozgrzej stół " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_SETTINGS _UxGT("Ustaw. rozg. " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_2 _UxGT("Rozgrzej " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" wsz.")
-#define MSG_PREHEAT_2_BEDONLY _UxGT("Rozgrzej stół " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_SETTINGS _UxGT("Ustaw. rozg. " PREHEAT_2_LABEL)
-#define MSG_COOLDOWN _UxGT("Chłodzenie")
-#define MSG_SWITCH_PS_ON _UxGT("Włącz zasilacz")
-#define MSG_SWITCH_PS_OFF _UxGT("Wyłącz zasilacz")
-#define MSG_EXTRUDE _UxGT("Ekstruzja")
-#define MSG_RETRACT _UxGT("Wycofanie")
-#define MSG_MOVE_AXIS _UxGT("Ruch osi")
-#define MSG_BED_LEVELING _UxGT("Poziom. stołu")
-#define MSG_MOVE_X _UxGT("Przesuń w X")
-#define MSG_MOVE_Y _UxGT("Przesuń w Y")
-#define MSG_MOVE_Z _UxGT("Przesuń w Z")
-#define MSG_MOVE_E _UxGT("Ekstruzja (os E)")
-#define MSG_MOVE_Z_DIST _UxGT("Przesuń co %smm")
-#define MSG_MOVE_01MM _UxGT("Przesuń co .1mm")
-#define MSG_MOVE_1MM _UxGT("Przesuń co 1mm")
-#define MSG_MOVE_10MM _UxGT("Przesuń co 10mm")
-#define MSG_SPEED _UxGT("Predkość")
-#define MSG_BED_Z _UxGT("Stół Z")
-#define MSG_NOZZLE _UxGT("Dysza")
-#define MSG_BED _UxGT("Stół")
-#define MSG_FAN_SPEED _UxGT("Obroty wiatraka")
-#define MSG_FLOW _UxGT("Przepływ")
-#define MSG_CONTROL _UxGT("Ustawienia")
-#define MSG_MIN LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR LCD_STR_THERMOMETER _UxGT(" Mnożnik")
-#define MSG_AUTOTEMP _UxGT("Auto. temperatura")
-#define MSG_LCD_ON _UxGT("Wł.")
-#define MSG_LCD_OFF _UxGT("Wył.")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Select")
-#define MSG_ACC _UxGT("Przyśpieszenie")
-#define MSG_JERK _UxGT("Zryw")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Zryw Va")
- #define MSG_VB_JERK _UxGT("Zryw Vb")
- #define MSG_VC_JERK _UxGT("Zryw Vc")
-#else
- #define MSG_VA_JERK _UxGT("Zryw Vx")
- #define MSG_VB_JERK _UxGT("Zryw Vy")
- #define MSG_VC_JERK _UxGT("Zryw Vz")
-#endif
-#define MSG_VE_JERK _UxGT("Zryw Ve")
-#define MSG_VMAX _UxGT("Vmax ")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("Vskok min")
-#define MSG_ACCELERATION MSG_ACC
-#define MSG_AMAX _UxGT("Amax")
-#define MSG_A_RETRACT _UxGT("A-wycofanie")
-#define MSG_A_TRAVEL _UxGT("A-przesuń.")
-#define MSG_STEPS_PER_MM _UxGT("kroki/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("krokiA/mm")
- #define MSG_BSTEPS _UxGT("krokiB/mm")
- #define MSG_CSTEPS _UxGT("krokiC/mm")
-#else
- #define MSG_ASTEPS _UxGT("krokiX/mm")
- #define MSG_BSTEPS _UxGT("krokiY/mm")
- #define MSG_CSTEPS _UxGT("krokiZ/mm")
-#endif
-#define MSG_ESTEPS _UxGT("krokiE/mm")
-#define MSG_E1STEPS _UxGT("krokiE1/mm")
-#define MSG_E2STEPS _UxGT("krokiE2/mm")
-#define MSG_E3STEPS _UxGT("krokiE3/mm")
-#define MSG_E4STEPS _UxGT("krokiE4/mm")
-#define MSG_E5STEPS _UxGT("krokiE5/mm")
-#define MSG_E6STEPS _UxGT("krokiE6/mm")
-#define MSG_TEMPERATURE _UxGT("Temperatura")
-#define MSG_MOTION _UxGT("Ruch")
-#define MSG_FILAMENT _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E w mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Śr. fil.")
-#define MSG_CONTRAST _UxGT("Kontrast LCD")
-#define MSG_STORE_EEPROM _UxGT("Zapisz w pamięci")
-#define MSG_LOAD_EEPROM _UxGT("Wczytaj z pamięci")
-#define MSG_RESTORE_FAILSAFE _UxGT("Ustaw. fabryczne")
-#define MSG_REFRESH _UxGT("Odswież")
-#define MSG_WATCH _UxGT("Ekran główny")
-#define MSG_PREPARE _UxGT("Przygotuj")
-#define MSG_TUNE _UxGT("Strojenie")
-#define MSG_PAUSE_PRINT _UxGT("Pauza")
-#define MSG_RESUME_PRINT _UxGT("Wznowienie")
-#define MSG_STOP_PRINT _UxGT("Stop")
-#define MSG_MEDIA_MENU _UxGT("Karta SD")
-#define MSG_NO_MEDIA _UxGT("Brak karty")
-#define MSG_DWELL _UxGT("Uśpij...")
-#define MSG_USERWAIT _UxGT("Oczekiwanie...")
-#define MSG_PRINT_ABORTED _UxGT("Druk przerwany")
-#define MSG_NO_MOVE _UxGT("Brak ruchu")
-#define MSG_KILLED _UxGT("Ubity. ")
-#define MSG_STOPPED _UxGT("Zatrzymany. ")
-#define MSG_CONTROL_RETRACT _UxGT("Wycofaj mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Z Wycof. mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Wycofaj V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Skok Z mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("Cof. wycof. mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Z Cof. wyc. mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("Cof. wycof. V")
-#define MSG_AUTORETRACT _UxGT("Auto. wycofanie")
-#define MSG_FILAMENTCHANGE _UxGT("Zmień filament")
-#define MSG_INIT_MEDIA _UxGT("Inicjal. karty SD")
-#define MSG_CHANGE_MEDIA _UxGT("Zmiana karty SD")
-#define MSG_ZPROBE_OUT _UxGT("Sonda Z za stołem")
-#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Self-Test")
-#define MSG_BLTOUCH_RESET _UxGT("Reset BLTouch")
-#define MSG_HOME_FIRST _UxGT("Home %s%s%s first")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Offset Z")
-#define MSG_BABYSTEP_X _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Błąd krańcówki")
-#define MSG_HEATING_FAILED_LCD _UxGT("Rozgrz. nieudane")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Błąd temperatury")
-#define MSG_THERMAL_RUNAWAY _UxGT("Zanik temp.")
-#define MSG_ERR_MAXTEMP _UxGT("Err max temp")
-#define MSG_ERR_MINTEMP _UxGT("Err min temp")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Err max temp stołu")
-#define MSG_ERR_MINTEMP_BED _UxGT("Err min temp stołu")
-#define MSG_ERR_Z_HOMING _UxGT("Home XY first")
-#define MSG_HALTED _UxGT("Drukarka zatrzym.")
-#define MSG_PLEASE_RESET _UxGT("Proszę zresetować")
-#define MSG_SHORT_DAY _UxGT("d") // One character only
-#define MSG_SHORT_HOUR _UxGT("g") // One character only
-#define MSG_SHORT_MINUTE _UxGT("m") // One character only
-#define MSG_HEATING _UxGT("Rozgrzewanie...")
-#define MSG_BED_HEATING _UxGT("Rozgrzewanie stołu...")
-#define MSG_DELTA_CALIBRATE _UxGT("Kalibrowanie Delty")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Kalibruj X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Kalibruj Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Kalibruj Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Kalibruj środek")
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Oświetlenie obudowy");
+ PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jasność oświetlenia");
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Niepoprawna drukarka");
-#define MSG_INFO_MENU _UxGT("O drukarce")
-#define MSG_INFO_PRINTER_MENU _UxGT("Info drukarki")
-#define MSG_INFO_STATS_MENU _UxGT("Statystyki")
-#define MSG_INFO_BOARD_MENU _UxGT("Board Info")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Thermistory")
-#define MSG_INFO_EXTRUDERS _UxGT("Ekstrudery")
-#define MSG_INFO_BAUDRATE _UxGT("Predkość USB")
-#define MSG_INFO_PROTOCOL _UxGT("Protokół")
-#define MSG_CASE_LIGHT _UxGT("Oświetlenie")
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Wydrukowano");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Ukończono");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Czas druku");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Najdł. druk");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Użyty fil.");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Wydrukowano");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Ukończono");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Razem");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Najdł. druk");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Użyty fil.");
+ #endif
-#define MSG_EXPECTED_PRINTER _UxGT("Niepoprawna drukarka")
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Zasilacz");
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Siła silnika");
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("Siła %");
+ PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("TMC BŁĄD POŁĄCZENIA");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Zapisz DAC EEPROM");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("ZMIEŃ FILAMENT");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("WYDRUK WSTRZYMANY");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ZAŁADUJ FILAMENT");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("WYŁADUJ FILAMENT");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPCJE WZNOWIENIA:");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Oczyść więcej");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Kontynuuj");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Dysza: ");
+ PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Czujnik filamentu");
+ PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Dystans do czujnika mm");
+ PROGMEM Language_Str MSG_LCD_HOMING_FAILED = _UxGT("Zerowanie nieudane");
+ PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Sondowanie nieudane");
+ PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: za zimne");
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Wydrukowano")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Ukończono")
- #define MSG_INFO_PRINT_TIME _UxGT("Czas druku")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Najdł. druk")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Użyty fil.")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Wydrukowano")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Ukończono")
- #define MSG_INFO_PRINT_TIME _UxGT("Razem")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Najdł. druk")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Użyty fil.")
-#endif
+ PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("WYBIERZ FILAMENT");
+ PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
+ PROGMEM Language_Str MSG_MMU2_WRONG_FIRMWARE = _UxGT("Uaktualnij firmware MMU!");
+ PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU wymaga uwagi.");
+ PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Wznów wydruk");
+ PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Wznawianie...");
+ PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Załaduj filament");
+ PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Załaduj wszystko");
+ PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Załaduj do dyszy");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Wysuń filament");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT0 = _UxGT("Wysuń filament 1");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT1 = _UxGT("Wysuń filament 2");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT2 = _UxGT("Wysuń filament 3");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT3 = _UxGT("Wysuń filament 4");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT4 = _UxGT("Wysuń filament 5");
+ PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Wyładuj filament");
+ PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Ładowanie fil. %i...");
+ PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Wysuwanie fil. ...");
+ PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Wyładowywanie fil....");
+ PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Wszystko");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT0 = _UxGT("Filament 1");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT1 = _UxGT("Filament 2");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT2 = _UxGT("Filament 3");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT3 = _UxGT("Filament 4");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT4 = _UxGT("Filament 5");
+ PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Resetuj MMU");
+ PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Resetowanie MMU...");
+ PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Usuń, kliknij");
-#define MSG_INFO_MIN_TEMP _UxGT("Min Temp")
-#define MSG_INFO_MAX_TEMP _UxGT("Max Temp")
-#define MSG_INFO_PSU _UxGT("Zasilacz")
+ PROGMEM Language_Str MSG_MIX = _UxGT("Miks");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_1 = _UxGT("Komponent 1");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_2 = _UxGT("Komponent 2");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_3 = _UxGT("Komponent 3");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_4 = _UxGT("Komponent 4");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_5 = _UxGT("Komponent 5");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_6 = _UxGT("Komponent 6");
+ PROGMEM Language_Str MSG_MIXER = _UxGT("Mikser");
+ PROGMEM Language_Str MSG_GRADIENT = _UxGT("Gradient");
+ PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Pełny gradient");
+ PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Przełacz miks");
+ PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Cycle Mix");
+ PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
+ PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Odwrotny gradient");
+ PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Active V-tool");
+ PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Start V-tool");
+ PROGMEM Language_Str MSG_END_VTOOL = _UxGT(" End V-tool");
+ PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
+ PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Reset V-tools");
+ PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Commit V-tool Mix");
+ PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-tools Were Reset");
+ PROGMEM Language_Str MSG_START_Z = _UxGT("Start Z:");
+ PROGMEM Language_Str MSG_END_Z = _UxGT(" End Z:");
-#define MSG_DRIVE_STRENGTH _UxGT("Siła silnika")
-#define MSG_DAC_PERCENT _UxGT("Siła %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("Zapisz DAC EEPROM")
+ PROGMEM Language_Str MSG_GAMES = _UxGT("Games");
+ PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
+ PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
+ PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
+ PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("ZMIEŃ FILAMENT")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("ZMIEŃ OPCJE:")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Wznów drukowanie")
+ #define MSG_1_LINE(A) A "\0" "\0"
+ #define MSG_2_LINE(A,B) A "\0" B "\0"
+ #define MSG_3_LINE(A,B,C) A "\0" B "\0" C
-#if LCD_HEIGHT >= 4
- // Up to 3 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Czekam na ")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("zmianę filamentu")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Czekam na")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("wyjęcie filamentu")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Włóz filament")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("i naciśnij przycisk")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("aby kontynuować...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Czekam na")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("włożenie filamentu")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Czekam na")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("wznowienie druku")
-#else // LCD_HEIGHT < 4
- // Up to 2 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Proszę czekać...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Wysuwanie...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Włóż i naciśnij prz.")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Ładowanie...")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wznowienie...")
-#endif // LCD_HEIGHT < 4
+ //
+ // Filament Change screens show up to 3 lines on a 4-line display
+ // ...or up to 2 lines on a 3-line display
+ //
+ #if LCD_HEIGHT >= 4
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Nacisnik przycisk", "by wznowić drukowanie"));
+ PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Parkowanie..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Czekam na", "zmianę filamentu", "by wystartować"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Włóż filament", "i naciśnij przycisk", "by kontynuować"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Naciśnij przycisk", "by nagrzać dyszę"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nagrzewanie dyszy", "Proszę czekać..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Czekam na", "wyjęcie filamentu"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Czekam na", "włożenie filamentu"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Czekam na", "oczyszczenie filamentu"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Kliknij by zakończyć", "oczyszczanie filamentu"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Czekam na", "wznowienie wydruku..."));
+ #else
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Kliknij by kontynuować"));
+ PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Parkowanie..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Proszę czekać..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Włóż i kliknij"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Kliknij by nagrzać"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Nagrzewanie..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Wysuwanie..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Ładowanie..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Oczyszczanie..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Kliknij by zakończyć"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Wznawianie..."));
+ #endif
+ PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("TMC Drivers");
+ PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Driver Current");
+ PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Hybrid Threshold");
+ PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Sensorless Homing");
+ PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Stepping Mode");
+ PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Enabled");
+ PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Reset");
+ PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" in:");
+ PROGMEM Language_Str MSG_BACKLASH = _UxGT("Backlash");
+ PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
+ PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
+ PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
+ PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Correction");
+ PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Smoothing");
+}
diff --git a/Marlin/src/lcd/language/language_pt-br.h b/Marlin/src/lcd/language/language_pt-br.h
deleted file mode 100644
index d78bd5a13844..000000000000
--- a/Marlin/src/lcd/language/language_pt-br.h
+++ /dev/null
@@ -1,444 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-#pragma once
-
-/**
- * Portuguese (Brazil)
- * UTF-8 for Graphical Display
- *
- * LCD Menu Messages
- * See also http://marlinfw.org/docs/development/lcd_language.html
- *
- */
-
-// Put characters here that should be displayed with M117
-//_UxGT("áãàçÉéêíóõ")
-
-#define CHARSIZE 2
-
-#define WELCOME_MSG MACHINE_NAME _UxGT(" pronto.")
-
-#define MSG_BACK _UxGT("Voltar")
-#define MSG_MEDIA_INSERTED _UxGT("Cartão inserido")
-#define MSG_MEDIA_REMOVED _UxGT("Cartão removido")
-#define MSG_LCD_ENDSTOPS _UxGT("Fins de curso")
-#define MSG_LCD_SOFT_ENDSTOPS _UxGT("Soft Fins curso")
-#define MSG_MAIN _UxGT("Menu principal")
-#define MSG_ADVANCED_SETTINGS _UxGT("Config. Avançada")
-#define MSG_CONFIGURATION _UxGT("Configuração")
-#define MSG_AUTOSTART _UxGT("Início automático")
-#define MSG_DISABLE_STEPPERS _UxGT("Desabilit. motores")
-#define MSG_DEBUG_MENU _UxGT("Menu Debug")
-#define MSG_PROGRESS_BAR_TEST _UxGT("Testar Barra Progres")
-#define MSG_AUTO_HOME _UxGT("Ir a origem XYZ")
-#define MSG_AUTO_HOME_X _UxGT("Ir na origem X")
-#define MSG_AUTO_HOME_Y _UxGT("Ir na origem Y")
-#define MSG_AUTO_HOME_Z _UxGT("Ir na origem Z")
-#define MSG_AUTO_Z_ALIGN _UxGT("Auto alinhar Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Indo para origem")
-#define MSG_LEVEL_BED_WAITING _UxGT("Clique para Iniciar")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Próximo Ponto")
-#define MSG_LEVEL_BED_DONE _UxGT("Fim nivelação!")
-#define MSG_Z_FADE_HEIGHT _UxGT("Suavizar altura")
-#define MSG_SET_HOME_OFFSETS _UxGT("Compensar origem")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Alteração aplicada")
-#define MSG_SET_ORIGIN _UxGT("Ajustar Origem")
-#define MSG_PREHEAT_1 _UxGT("Pre-aquecer " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL _UxGT("Pre-aq.Todo " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_END _UxGT("Extrusora " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_BEDONLY _UxGT("Pre-aq.Mesa " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_SETTINGS _UxGT("Ajustar " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_2 _UxGT("Pre-aquecer " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL _UxGT("Pre-aq.Todo " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_END _UxGT("Extrusora " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_BEDONLY _UxGT("Pre-aq.Mesa " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_SETTINGS _UxGT("Ajustar " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_CUSTOM _UxGT("Customizar Pre-aq.")
-#define MSG_COOLDOWN _UxGT("Esfriar")
-#define MSG_SWITCH_PS_ON _UxGT("Ligar")
-#define MSG_SWITCH_PS_OFF _UxGT("Desligar")
-#define MSG_EXTRUDE _UxGT("Extrusar")
-#define MSG_RETRACT _UxGT("Retrair")
-#define MSG_MOVE_AXIS _UxGT("Mover eixo")
-#define MSG_BED_LEVELING _UxGT("Nivelação Mesa")
-#define MSG_LEVEL_BED _UxGT("Nivelar Mesa")
-#define MSG_LEVEL_CORNERS _UxGT("Nivelar Cantos")
-#define MSG_NEXT_CORNER _UxGT("Próximo Canto")
-#define MSG_EDIT_MESH _UxGT("Editar Malha")
-#define MSG_EDITING_STOPPED _UxGT("Fim da Edição")
-#define MSG_MESH_X _UxGT("Índice X")
-#define MSG_MESH_Y _UxGT("Índice Y")
-#define MSG_MESH_EDIT_Z _UxGT("Valor Z")
-#define MSG_USER_MENU _UxGT("Comando customizado")
-
-#define MSG_IDEX_MENU _UxGT("Modo IDEX")
-#define MSG_IDEX_MODE_AUTOPARK _UxGT("Auto-Estacionar")
-#define MSG_IDEX_MODE_DUPLICATE _UxGT("Duplicação")
-#define MSG_IDEX_MODE_MIRRORED_COPY _UxGT("Cópia espelhada")
-#define MSG_IDEX_MODE_FULL_CTRL _UxGT("Controle Total")
-#define MSG_X_OFFSET _UxGT("2o bico X")
-#define MSG_Y_OFFSET _UxGT("2o bico Y")
-#define MSG_Z_OFFSET _UxGT("2o bico Z")
-
-#define MSG_UBL_DOING_G29 _UxGT("Executando G29")
-#define MSG_UBL_TOOLS _UxGT("Ferramentas UBL")
-#define MSG_UBL_LEVEL_BED _UxGT("Nivel. Mesa Unif.")
-#define MSG_UBL_MANUAL_MESH _UxGT("Fazer malha manual")
-#define MSG_UBL_BC_INSERT _UxGT("Calçar e calibrar")
-#define MSG_UBL_BC_INSERT2 _UxGT("Medir")
-#define MSG_UBL_BC_REMOVE _UxGT("Remover e calibrar")
-#define MSG_UBL_MOVING_TO_NEXT _UxGT("Movendo para Próximo")
-#define MSG_UBL_ACTIVATE_MESH _UxGT("Ativar UBL")
-#define MSG_UBL_DEACTIVATE_MESH _UxGT("Desativar UBL")
-#define MSG_UBL_SET_TEMP_BED _UxGT("Temp. Mesa")
-#define MSG_UBL_BED_TEMP_CUSTOM MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND _UxGT("Temp. Extrusora")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT _UxGT("Editar Malha")
-#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("Editar Malha Custom")
-#define MSG_UBL_FINE_TUNE_MESH _UxGT("Ajuste Fino da Malha")
-#define MSG_UBL_DONE_EDITING_MESH _UxGT("Fim da Edição")
-#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("Montar Malha Custom")
-#define MSG_UBL_BUILD_MESH_MENU _UxGT("Montar ")
-#define MSG_UBL_BUILD_MESH_M1 _UxGT("Montar " PREHEAT_1_LABEL)
-#define MSG_UBL_BUILD_MESH_M2 _UxGT("Montar " PREHEAT_2_LABEL)
-#define MSG_UBL_BUILD_COLD_MESH _UxGT("Montar Malha fria")
-#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("Ajustar Altura")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("Quant. de Altura")
-#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Validar Malha")
-#define MSG_UBL_VALIDATE_MESH_M1 _UxGT("Checar " PREHEAT_1_LABEL)
-#define MSG_UBL_VALIDATE_MESH_M2 _UxGT("Checar " PREHEAT_2_LABEL)
-#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Validar Malha Custom")
-#define MSG_UBL_CONTINUE_MESH _UxGT("Continuar Malha")
-#define MSG_UBL_MESH_LEVELING _UxGT("Nivelação da Malha")
-#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("Nivelação 3 pontos")
-#define MSG_UBL_GRID_MESH_LEVELING _UxGT("Nivelação Grid")
-#define MSG_UBL_MESH_LEVEL _UxGT("Nivelar Malha")
-#define MSG_UBL_SIDE_POINTS _UxGT("Cantos")
-#define MSG_UBL_MAP_TYPE _UxGT("Tipo de Mapa")
-#define MSG_UBL_OUTPUT_MAP _UxGT("Salvar Mapa da Malha")
-#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("Enviar Para Host")
-#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("Salvar Malha CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("Salvar Backup")
-#define MSG_UBL_INFO_UBL _UxGT("Informação do UBL")
-#define MSG_UBL_FILLIN_AMOUNT _UxGT("Qtd de Enchimento")
-#define MSG_UBL_MANUAL_FILLIN _UxGT("Enchimento Manual")
-#define MSG_UBL_SMART_FILLIN _UxGT("Enchimento Smart")
-#define MSG_UBL_FILLIN_MESH _UxGT("Preencher malha")
-#define MSG_UBL_INVALIDATE_ALL _UxGT("Invalidar tudo")
-#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("Invalidar próximo")
-#define MSG_UBL_FINE_TUNE_ALL _UxGT("Ajuste Fino de Todos")
-#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("Ajustar Mais Próximo")
-#define MSG_UBL_STORAGE_MESH_MENU _UxGT("Armazenamento Malha")
-#define MSG_UBL_STORAGE_SLOT _UxGT("Slot de Memória")
-#define MSG_UBL_LOAD_MESH _UxGT("Ler Malha")
-#define MSG_UBL_SAVE_MESH _UxGT("Salvar Malha")
-#define MSG_MESH_LOADED _UxGT("Malha %i carregada")
-#define MSG_MESH_SAVED _UxGT("Malha %i salva")
-#define MSG_UBL_NO_STORAGE _UxGT("Sem armazenamento")
-#define MSG_UBL_SAVE_ERROR _UxGT("Erro ao salvar UBL")
-#define MSG_UBL_RESTORE_ERROR _UxGT("Erro no restauro UBL")
-#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Compensação Z parou")
-#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("UBL passo a passo")
-#define MSG_LED_CONTROL _UxGT("Controle do LED")
-#define MSG_LEDS _UxGT("Luz")
-#define MSG_LED_PRESETS _UxGT("Configuração da Luz")
-#define MSG_SET_LEDS_RED _UxGT("Luz Vermelha")
-#define MSG_SET_LEDS_ORANGE _UxGT("Luz Laranja")
-#define MSG_SET_LEDS_YELLOW _UxGT("Luz Amarela")
-#define MSG_SET_LEDS_GREEN _UxGT("Luz Verde")
-#define MSG_SET_LEDS_BLUE _UxGT("Luz Azul")
-#define MSG_SET_LEDS_INDIGO _UxGT("Luz Indigo")
-#define MSG_SET_LEDS_VIOLET _UxGT("Luz Violeta")
-#define MSG_SET_LEDS_WHITE _UxGT("Luz Branca")
-#define MSG_SET_LEDS_DEFAULT _UxGT("Luz Padrão")
-#define MSG_CUSTOM_LEDS _UxGT("Luz Customizada")
-#define MSG_INTENSITY_R _UxGT("Intensidade Vermelho")
-#define MSG_INTENSITY_G _UxGT("Intensidade Verde")
-#define MSG_INTENSITY_B _UxGT("Intensidade Azul")
-#define MSG_INTENSITY_W _UxGT("Intensidade Branco")
-#define MSG_LED_BRIGHTNESS _UxGT("Brilho")
-#define MSG_MOVING _UxGT("Movendo...")
-#define MSG_FREE_XY _UxGT("Liberar XY")
-#define MSG_MOVE_X _UxGT("Mover X")
-#define MSG_MOVE_Y _UxGT("Mover Y")
-#define MSG_MOVE_Z _UxGT("Mover Z")
-#define MSG_MOVE_E _UxGT("Mover Extrusor")
-#define MSG_HOTEND_TOO_COLD _UxGT("Extrus. mto fria")
-#define MSG_MOVE_Z_DIST _UxGT("Mover %smm")
-#define MSG_MOVE_01MM _UxGT("Mover 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Mover 1mm")
-#define MSG_MOVE_10MM _UxGT("Mover 10mm")
-#define MSG_SPEED _UxGT("Velocidade")
-#define MSG_BED_Z _UxGT("Base Z")
-#define MSG_NOZZLE _UxGT("Bocal")
-#define MSG_BED _UxGT("Mesa")
-#define MSG_FAN_SPEED _UxGT("Vel. Ventoinha")
-#define MSG_EXTRA_FAN_SPEED _UxGT("+Vel. Ventoinha")
-#define MSG_FLOW _UxGT("Vazão")
-#define MSG_CONTROL _UxGT("Controle")
-#define MSG_MIN LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX LCD_STR_THERMOMETER _UxGT(" Máx")
-#define MSG_FACTOR LCD_STR_THERMOMETER _UxGT(" Fator")
-#define MSG_AUTOTEMP _UxGT("Temp. Automática")
-#define MSG_LCD_ON _UxGT("Ligado")
-#define MSG_LCD_OFF _UxGT("Desligado")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Selecionar")
-#define MSG_ACC _UxGT("Acel.")
-#define MSG_JERK _UxGT("Arrancada")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("arrancada VA")
- #define MSG_VB_JERK _UxGT("arrancada VB")
- #define MSG_VC_JERK _UxGT("arrancada VC")
-#else
- #define MSG_VA_JERK _UxGT("arrancada VX")
- #define MSG_VB_JERK _UxGT("arrancada VY")
- #define MSG_VC_JERK _UxGT("arrancada VZ")
-#endif
-#define MSG_VE_JERK _UxGT("arrancada VE")
-#define MSG_JUNCTION_DEVIATION _UxGT("Desv. Junção")
-#define MSG_VELOCITY _UxGT("Velocidade")
-#define MSG_VMAX _UxGT("Vmax ")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("VDeslocamento min")
-#define MSG_ACCELERATION _UxGT("Aceleração")
-#define MSG_AMAX _UxGT("Amax ")
-#define MSG_A_RETRACT _UxGT("Retrair A")
-#define MSG_A_TRAVEL _UxGT("Movimento A")
-#define MSG_STEPS_PER_MM _UxGT("Passo/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("Passo A/mm")
- #define MSG_BSTEPS _UxGT("Passo B/mm")
- #define MSG_CSTEPS _UxGT("Passo C/mm")
-#else
- #define MSG_ASTEPS _UxGT("Passo X/mm")
- #define MSG_BSTEPS _UxGT("Passo Y/mm")
- #define MSG_CSTEPS _UxGT("Passo Z/mm")
-#endif
-#define MSG_ESTEPS _UxGT("E/mm")
-#define MSG_E1STEPS _UxGT("E1/mm")
-#define MSG_E2STEPS _UxGT("E2/mm")
-#define MSG_E3STEPS _UxGT("E3/mm")
-#define MSG_E4STEPS _UxGT("E4/mm")
-#define MSG_E5STEPS _UxGT("E5/mm")
-#define MSG_E6STEPS _UxGT("E6/mm")
-#define MSG_TEMPERATURE _UxGT("Temperatura")
-#define MSG_MOTION _UxGT("Movimento")
-#define MSG_FILAMENT _UxGT("Filamento")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("Extrusão em mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Diâmetro Fil.")
-#define MSG_FILAMENT_UNLOAD _UxGT("Descarr. mm")
-#define MSG_FILAMENT_LOAD _UxGT("Carregar mm")
-#define MSG_ADVANCE_K _UxGT("Avanço K")
-#define MSG_CONTRAST _UxGT("Contraste")
-#define MSG_STORE_EEPROM _UxGT("Salvar Configuração")
-#define MSG_LOAD_EEPROM _UxGT("Ler Configuração")
-#define MSG_RESTORE_FAILSAFE _UxGT("Restauro seguro")
-#define MSG_INIT_EEPROM _UxGT("Iniciar EEPROM")
-#define MSG_MEDIA_UPDATE _UxGT("Atualiz. SD")
-#define MSG_RESET_PRINTER _UxGT("Resetar Impressora")
-#define MSG_REFRESH _UxGT("Atualização")
-#define MSG_WATCH _UxGT("Informações")
-#define MSG_PREPARE _UxGT("Preparar")
-#define MSG_TUNE _UxGT("Ajustar")
-#define MSG_PAUSE_PRINT _UxGT("Pausar impressão")
-#define MSG_RESUME_PRINT _UxGT("Resumir impressão")
-#define MSG_STOP_PRINT _UxGT("Parar impressão")
-#define MSG_OUTAGE_RECOVERY _UxGT("Recuperar Impressão")
-#define MSG_MEDIA_MENU _UxGT("Imprimir do SD")
-#define MSG_NO_MEDIA _UxGT("Sem cartão SD")
-#define MSG_DWELL _UxGT("Dormindo...")
-#define MSG_USERWAIT _UxGT("Clique para retomar")
-#define MSG_PRINT_PAUSED _UxGT("Impressão Pausada")
-#define MSG_PRINTING _UxGT("Imprimindo...")
-#define MSG_PRINT_ABORTED _UxGT("Impressão Abortada")
-#define MSG_NO_MOVE _UxGT("Sem movimento")
-#define MSG_KILLED _UxGT("PARADA DE EMERGÊNCIA")
-#define MSG_STOPPED _UxGT("PAROU. ")
-#define MSG_CONTROL_RETRACT _UxGT("Retrair mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Retrair Troca mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Retrair V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Saltar mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("Des-Retrair mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Des-RetTroca mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("Des-Retrair V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("Des-RetTroca V")
-#define MSG_AUTORETRACT _UxGT("Retração Automática")
-#define MSG_FILAMENT_SWAP_LENGTH _UxGT("Distancia Retração")
-#define MSG_TOOL_CHANGE _UxGT("Mudar Ferramenta")
-#define MSG_TOOL_CHANGE_ZLIFT _UxGT("Levantar Z")
-#define MSG_SINGLENOZZLE_PRIME_SPD _UxGT("Preparar Veloc.")
-#define MSG_SINGLENOZZLE_RETRACT_SPD _UxGT("Veloc. Retração")
-#define MSG_FILAMENTCHANGE _UxGT("Trocar Filamento")
-#define MSG_FILAMENTLOAD _UxGT("Carregar Filamento")
-#define MSG_FILAMENTUNLOAD _UxGT("Descarreg. Filamento")
-#define MSG_FILAMENTUNLOAD_ALL _UxGT("Descarregar Todos")
-#define MSG_INIT_MEDIA _UxGT("Iniciar SD")
-#define MSG_CHANGE_MEDIA _UxGT("Trocar SD")
-#define MSG_ZPROBE_OUT _UxGT("Sonda fora da mesa")
-#define MSG_SKEW_FACTOR _UxGT("Fator de Cisalho")
-#define MSG_BLTOUCH _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST _UxGT("Testar BLTouch")
-#define MSG_BLTOUCH_RESET _UxGT("Reiniciar BLTouch")
-#define MSG_BLTOUCH_DEPLOY _UxGT("Estender BLTouch")
-#define MSG_BLTOUCH_STOW _UxGT("Recolher BLTouch")
-#define MSG_MANUAL_DEPLOY _UxGT("Estender Sonda-Z")
-#define MSG_MANUAL_STOW _UxGT("Recolher Sonda-Z")
-
-#define MSG_HOME_FIRST _UxGT("Home %s%s%s Primeiro")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Compensar Sonda em Z")
-#define MSG_BABYSTEP_X _UxGT("Passinho X")
-#define MSG_BABYSTEP_Y _UxGT("Passinho Y")
-#define MSG_BABYSTEP_Z _UxGT("Passinho Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Abortar Fim de Curso")
-#define MSG_HEATING_FAILED_LCD _UxGT("Aquecimento falhou")
-#define MSG_HEATING_FAILED_LCD_BED _UxGT("Aquecer mesa falhou")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Erro:Temp Redundante")
-#define MSG_THERMAL_RUNAWAY _UxGT("ESCAPE TÉRMICO")
-#define MSG_THERMAL_RUNAWAY_BED _UxGT("ESCAPE TÉRMICO MESA")
-#define MSG_ERR_MAXTEMP _UxGT("Erro:Temp Máxima")
-#define MSG_ERR_MINTEMP _UxGT("Erro:Temp Mínima")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Erro:Temp Mesa Máx")
-#define MSG_ERR_MINTEMP_BED _UxGT("Erro:Temp Mesa Mín")
-#define MSG_ERR_Z_HOMING _UxGT("Home XY Primeiro")
-#define MSG_HALTED _UxGT("IMPRESSORA PAROU")
-#define MSG_PLEASE_RESET _UxGT("Favor resetar")
-#define MSG_SHORT_DAY _UxGT("d")
-#define MSG_SHORT_HOUR _UxGT("h")
-#define MSG_SHORT_MINUTE _UxGT("m")
-#define MSG_HEATING _UxGT("Aquecendo...")
-#define MSG_COOLING _UxGT("Resfriando...")
-#define MSG_BED_HEATING _UxGT("Aquecendo mesa...")
-#define MSG_BED_COOLING _UxGT("Esfriando mesa...")
-#define MSG_DELTA_CALIBRATE _UxGT("Calibrar Delta")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Calibrar X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Calibrar Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Calibrar Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Calibrar Centro")
-
-#define MSG_DELTA_SETTINGS _UxGT("Configuração Delta")
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Auto-Calibração")
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Calibrar Altura")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE _UxGT("Desloc. Sonda Z")
-#define MSG_DELTA_DIAG_ROD _UxGT("Haste Diagonal")
-#define MSG_DELTA_HEIGHT _UxGT("Altura")
-#define MSG_DELTA_RADIUS _UxGT("Raio")
-#define MSG_INFO_MENU _UxGT("Sobre")
-#define MSG_INFO_PRINTER_MENU _UxGT("Impressora")
-#define MSG_3POINT_LEVELING _UxGT("Nivelamento 3 pontos")
-#define MSG_LINEAR_LEVELING _UxGT("Nivelamento Linear")
-#define MSG_BILINEAR_LEVELING _UxGT("Nivelamento Bilinear")
-#define MSG_UBL_LEVELING _UxGT("Nivelamento UBL")
-#define MSG_MESH_LEVELING _UxGT("Nivelamento da Malha")
-#define MSG_INFO_STATS_MENU _UxGT("Estatísticas")
-#define MSG_INFO_BOARD_MENU _UxGT("Info. da Placa")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Termistores")
-#define MSG_INFO_EXTRUDERS _UxGT("Extrusoras")
-#define MSG_INFO_BAUDRATE _UxGT("Taxa de Transmissão")
-#define MSG_INFO_PROTOCOL _UxGT("Protocolo")
-#define MSG_CASE_LIGHT _UxGT("Luz da Impressora")
-#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Intensidade Brilho")
-
-#define MSG_EXPECTED_PRINTER _UxGT("Impressora Incorreta")
-
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Total de Impressões")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Realizadas")
- #define MSG_INFO_PRINT_TIME _UxGT("Tempo de Impressão")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Trabalho Mais longo")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Total de Extrusão")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Qtd de Impressões")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Realizadas")
- #define MSG_INFO_PRINT_TIME _UxGT("Tempo de Impressão")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Maior trabalho")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("T. Extrusão")
-#endif
-
-#define MSG_INFO_MIN_TEMP _UxGT("Temp Mín")
-#define MSG_INFO_MAX_TEMP _UxGT("Temp Máx")
-#define MSG_INFO_PSU _UxGT("PSU")
-#define MSG_DRIVE_STRENGTH _UxGT("Força do Motor")
-#define MSG_DAC_PERCENT _UxGT("Driver %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("Escrever EEPROM DAC")
-
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("IMPRESSÃO PAUSADA")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("CARREGAR FILAMENTO")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("DESCARREG. FILAMENTO")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("Config. de Retomada")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Purgar mais")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Continuar Impressão")
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Bocal: ")
-#define MSG_RUNOUT_SENSOR _UxGT("Sensor filamento")
-#define MSG_ERR_HOMING_FAILED _UxGT("Falha ao ir à origem")
-#define MSG_ERR_PROBING_FAILED _UxGT("Falha ao sondar")
-#define MSG_M600_TOO_COLD _UxGT("M600: Muito frio")
-
-#if LCD_HEIGHT >= 4
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Aperte o botão para")
- #define MSG_ADVANCED_PAUSE_WAITING_2 _UxGT("continuar impressão")
-
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Esperando o")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("inicio da")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("troca de filamento")
-
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Coloque filamento")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("pressione o botão")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("para continuar...")
-
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Pressione o botão")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("p/ aquecer o bocal")
-
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Aquecendo o bocal")
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Aguarde...")
-
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Esperando")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("remoção de filamento")
-
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Esperando")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("filamento")
-
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Espere pela")
- #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("purga de filamento")
-
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Clique para finaliz.")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_2 _UxGT("purga de filamento")
-
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Esperando impressão")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("continuar")
-#else // LCD_HEIGHT < 4
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Clique p. continuar")
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Aguarde...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insira e Clique")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Aquecendo...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Ejetando...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Carregando...")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Purgando...")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Clique p. finalizar")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Continuando...")
-#endif
diff --git a/Marlin/src/lcd/language/language_pt.h b/Marlin/src/lcd/language/language_pt.h
index 9fde8f89ba39..7f3288f15573 100644
--- a/Marlin/src/lcd/language/language_pt.h
+++ b/Marlin/src/lcd/language/language_pt.h
@@ -30,159 +30,186 @@
*
*/
-#define DISPLAY_CHARSET_ISO10646_1
-#define CHARSIZE 2
+ #define DISPLAY_CHARSET_ISO10646_1
-#define WELCOME_MSG MACHINE_NAME _UxGT(" pronta.")
-#define MSG_MEDIA_INSERTED _UxGT("Cartão inserido")
-#define MSG_MEDIA_REMOVED _UxGT("Cartão removido")
-#define MSG_MAIN _UxGT("Menu principal")
-#define MSG_AUTOSTART _UxGT("Autostart")
-#define MSG_DISABLE_STEPPERS _UxGT("Desactivar motores")
-#define MSG_AUTO_HOME _UxGT("Ir para origem")
-#define MSG_AUTO_HOME_X _UxGT("Ir para origem X")
-#define MSG_AUTO_HOME_Y _UxGT("Ir para origem Y")
-#define MSG_AUTO_HOME_Z _UxGT("Ir para origem Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Indo para origem")
-#define MSG_LEVEL_BED_WAITING _UxGT("Click para iniciar")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Próximo ponto")
-#define MSG_LEVEL_BED_DONE _UxGT("Pronto !")
-#define MSG_SET_HOME_OFFSETS _UxGT("Definir desvio")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Offsets aplicados")
-#define MSG_SET_ORIGIN _UxGT("Definir origem")
-#define MSG_PREHEAT_1 _UxGT("Pre-aquecer " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N _UxGT("Pre-aquecer " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_ALL _UxGT("Pre-aq. " PREHEAT_1_LABEL " Tudo")
-#define MSG_PREHEAT_1_BEDONLY _UxGT("Pre-aq. " PREHEAT_1_LABEL " ") LCD_STR_THERMOMETER _UxGT("Base")
-#define MSG_PREHEAT_1_SETTINGS _UxGT("Definições " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_2 _UxGT("Pre-aquecer " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N _UxGT("Pre-aquecer " PREHEAT_2_LABEL " ")
-#define MSG_PREHEAT_2_ALL _UxGT("Pre-aq. " PREHEAT_2_LABEL " Tudo")
-#define MSG_PREHEAT_2_BEDONLY _UxGT("Pre-aq. " PREHEAT_2_LABEL " ") LCD_STR_THERMOMETER _UxGT("Base")
-#define MSG_PREHEAT_2_SETTINGS _UxGT("Definições " PREHEAT_2_LABEL)
-#define MSG_COOLDOWN _UxGT("Arrefecer")
-#define MSG_SWITCH_PS_ON _UxGT("Ligar")
-#define MSG_SWITCH_PS_OFF _UxGT("Desligar")
-#define MSG_EXTRUDE _UxGT("Extrudir")
-#define MSG_RETRACT _UxGT("Retrair")
-#define MSG_MOVE_AXIS _UxGT("Mover eixo")
-#define MSG_MOVE_X _UxGT("Mover X")
-#define MSG_MOVE_Y _UxGT("Mover Y")
-#define MSG_MOVE_Z _UxGT("Mover Z")
-#define MSG_MOVE_E _UxGT("Mover Extrusor")
-#define MSG_MOVE_Z_DIST _UxGT("Mover %smm")
-#define MSG_MOVE_01MM _UxGT("Mover 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Mover 1mm")
-#define MSG_MOVE_10MM _UxGT("Mover 10mm")
-#define MSG_SPEED _UxGT("Velocidade")
-#define MSG_BED_Z _UxGT("Base Z")
-#define MSG_NOZZLE _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Bico")
-#define MSG_BED _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Base")
-#define MSG_FAN_SPEED _UxGT("Vel. ventoinha")
-#define MSG_FLOW _UxGT("Fluxo")
-#define MSG_CONTROL _UxGT("Controlo")
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact")
-#define MSG_AUTOTEMP _UxGT("Temp. Automática")
-#define MSG_LCD_ON _UxGT("On")
-#define MSG_LCD_OFF _UxGT("Off")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_ACC _UxGT("Acc")
-#define MSG_JERK _UxGT("Jerk")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va-jerk")
- #define MSG_VB_JERK _UxGT("Vb-jerk")
- #define MSG_VC_JERK _UxGT("Vc-jerk")
-#else
- #define MSG_VA_JERK _UxGT("Vx-jerk")
- #define MSG_VB_JERK _UxGT("Vy-jerk")
- #define MSG_VC_JERK _UxGT("Vz-jerk")
-#endif
-#define MSG_VE_JERK _UxGT("Ve-jerk")
-#define MSG_VMAX _UxGT(" Vmax ")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("VTrav min")
-#define MSG_AMAX _UxGT("Amax ")
-#define MSG_A_RETRACT _UxGT("A-retracção")
-#define MSG_A_TRAVEL _UxGT("A-movimento")
-#define MSG_STEPS_PER_MM _UxGT("Passo/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("A passo/mm")
- #define MSG_BSTEPS _UxGT("B passo/mm")
- #define MSG_CSTEPS _UxGT("C passo/mm")
-#else
- #define MSG_ASTEPS _UxGT("X passo/mm")
- #define MSG_BSTEPS _UxGT("Y passo/mm")
- #define MSG_CSTEPS _UxGT("Z passo/mm")
-#endif
-#define MSG_ESTEPS _UxGT("E passo/mm")
-#define MSG_E1STEPS _UxGT("E1 passo/mm")
-#define MSG_E2STEPS _UxGT("E2 passo/mm")
-#define MSG_E3STEPS _UxGT("E3 passo/mm")
-#define MSG_E4STEPS _UxGT("E4 passo/mm")
-#define MSG_E5STEPS _UxGT("E5 passo/mm")
-#define MSG_E6STEPS _UxGT("E6 passo/mm")
-#define MSG_TEMPERATURE _UxGT("Temperatura")
-#define MSG_MOTION _UxGT("Movimento")
-#define MSG_FILAMENT _UxGT("Filamento")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E em mm3")
-#define MSG_FILAMENT_DIAM _UxGT("Fil. Diam.")
-#define MSG_CONTRAST _UxGT("Contraste")
-#define MSG_STORE_EEPROM _UxGT("Guardar na memoria")
-#define MSG_LOAD_EEPROM _UxGT("Carregar da memoria")
-#define MSG_RESTORE_FAILSAFE _UxGT("Rest. de emergen.")
-#define MSG_REFRESH LCD_STR_REFRESH _UxGT(" Recarregar")
-#define MSG_WATCH _UxGT("Monitorizar")
-#define MSG_PREPARE _UxGT("Preparar")
-#define MSG_TUNE _UxGT("Afinar")
-#define MSG_PAUSE_PRINT _UxGT("Pausar impressão")
-#define MSG_RESUME_PRINT _UxGT("Retomar impressão")
-#define MSG_STOP_PRINT _UxGT("Parar impressão")
-#define MSG_MEDIA_MENU _UxGT("Imprimir do SD")
-#define MSG_NO_MEDIA _UxGT("Sem cartão SD")
-#define MSG_DWELL _UxGT("Em espera...")
-#define MSG_USERWAIT _UxGT("Á espera de ordem")
-#define MSG_PRINT_ABORTED _UxGT("Impressão cancelada")
-#define MSG_NO_MOVE _UxGT("Sem movimento")
-#define MSG_KILLED _UxGT("EMERGÊNCIA. ")
-#define MSG_STOPPED _UxGT("PARADO. ")
-#define MSG_CONTROL_RETRACT _UxGT(" Retrair mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Troca Retrair mm")
-#define MSG_CONTROL_RETRACTF _UxGT(" Retrair V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT(" Levantar mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT(" DesRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Troca DesRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT(" DesRet V")
-#define MSG_AUTORETRACT _UxGT(" AutoRetr.")
-#define MSG_FILAMENTCHANGE _UxGT("Trocar filamento")
-#define MSG_INIT_MEDIA _UxGT("Inici. cartão SD")
-#define MSG_CHANGE_MEDIA _UxGT("Trocar cartão SD")
-#define MSG_ZPROBE_OUT _UxGT("Sensor fora/base")
-#define MSG_HOME_FIRST _UxGT("Home %s%s%s first")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Desvio Z")
-#define MSG_BABYSTEP_X _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Fim de curso")
-#define MSG_HEATING_FAILED_LCD _UxGT("Aquecimento falhou")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Err: REDUNDANT TEMP")
-#define MSG_THERMAL_RUNAWAY _UxGT("THERMAL RUNAWAY")
-#define MSG_ERR_MAXTEMP _UxGT("Err: T Máxima")
-#define MSG_ERR_MINTEMP _UxGT("Err: T Mínima")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Err: T Base Máxima")
-#define MSG_ERR_MINTEMP_BED _UxGT("Err: T Base Mínima")
-#define MSG_HEATING _UxGT("Aquecendo...")
-#define MSG_BED_HEATING _UxGT("Aquecendo base...")
-#define MSG_DELTA_CALIBRATE _UxGT("Calibração Delta")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Calibrar X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Calibrar Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Calibrar Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Calibrar Centro")
+namespace Language_pt {
+ using namespace Language_en; // Inherit undefined strings from English
-#define MSG_LCD_ENDSTOPS _UxGT("Fim de curso")
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Portuguese");
-#define MSG_EXPECTED_PRINTER _UxGT("Impressora Incorreta")
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" pronta.");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Cartão inserido");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Cartão removido");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Menu principal");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Desactivar motores");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Ir para origem");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Ir para origem X");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Ir para origem Y");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Ir para origem Z");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Indo para origem");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Click para iniciar");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Próximo ponto");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Pronto !");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Definir desvio");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets aplicados");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Definir origem");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Pre-aq. ") PREHEAT_1_LABEL _UxGT(" Tudo");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Pre-aq. ") PREHEAT_1_LABEL _UxGT(" ") LCD_STR_THERMOMETER _UxGT("Base");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Definições ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL _UxGT(" Bico");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL _UxGT(" Bico ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Pre-aq. ") PREHEAT_2_LABEL _UxGT(" Tudo");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Pre-aq. ") PREHEAT_2_LABEL _UxGT(" ") LCD_STR_THERMOMETER _UxGT("Base");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Definições ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Arrefecer");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Ligar");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Desligar");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrudir");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Retrair");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Mover eixo");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Mover X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Mover Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Mover Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Mover Extrusor");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Mover Extrusor ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Mover Extrusor ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Mover Extrusor ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Mover Extrusor ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Mover Extrusor ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Mover Extrusor ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Mover %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mover 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mover 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Velocidade");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Base Z");
+ PROGMEM Language_Str MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" Bico");
+ PROGMEM Language_Str MSG_NOZZLE_0 = " " LCD_STR_THERMOMETER _UxGT(" Bico ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = " " LCD_STR_THERMOMETER _UxGT(" Bico ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = " " LCD_STR_THERMOMETER _UxGT(" Bico ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = " " LCD_STR_THERMOMETER _UxGT(" Bico ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = " " LCD_STR_THERMOMETER _UxGT(" Bico ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = " " LCD_STR_THERMOMETER _UxGT(" Bico ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" Base");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vel. ventoinha");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Vel. ventoinha 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Vel. ventoinha 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Vel. ventoinha 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Fluxo");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Fluxo ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Fluxo ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Fluxo ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Fluxo ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Fluxo ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Fluxo ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Controlo");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-retracção");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-movimento");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Passo/mm");
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" passo/mm");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" passo/mm");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" passo/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("E passo/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT(" passo/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT(" passo/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT(" passo/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT(" passo/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT(" passo/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT(" passo/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Movimento");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filamento");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E em mm3");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Fil. Diam.");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Fil. Diam. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Fil. Diam. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Fil. Diam. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Fil. Diam. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Fil. Diam. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Fil. Diam. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contraste");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Guardar na memoria");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Carregar da memoria");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Rest. de emergen.");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT(" Recarregar");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Monitorizar");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Preparar");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Afinar");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausar impressão");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Retomar impressão");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Parar impressão");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Imprimir do SD");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Sem cartão SD");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Em espera...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Á espera de ordem");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Impressão cancelada");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Sem movimento");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("EMERGÊNCIA. ");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("PARADO. ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT(" Retrair mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Troca Retrair mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT(" Retrair V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT(" Levantar mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT(" DesRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Troca DesRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT(" DesRet V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT(" AutoRetr.");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Trocar filamento");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Trocar filamento ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Trocar filamento ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Trocar filamento ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Trocar filamento ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Trocar filamento ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Trocar filamento ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Inici. cartão SD");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Trocar cartão SD");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sensor fora/base");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Desvio Z");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Fim de curso");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Aquecimento falhou");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err: T Máxima");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err: T Mínima");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("Err: T Base Máxima");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Err: T Base Mínima");
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Aquecendo...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Aquecendo base...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibração Delta");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
+
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Fim de curso");
+
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Impressora Incorreta");
+}
diff --git a/Marlin/src/lcd/language/language_pt_br.h b/Marlin/src/lcd/language/language_pt_br.h
new file mode 100644
index 000000000000..548ba4cd97da
--- /dev/null
+++ b/Marlin/src/lcd/language/language_pt_br.h
@@ -0,0 +1,492 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * Portuguese (Brazil)
+ * UTF-8 for Graphical Display
+ *
+ * LCD Menu Messages
+ * See also http://marlinfw.org/docs/development/lcd_language.html
+ *
+ */
+namespace Language_pt_br {
+ using namespace Language_en; // Inherit undefined strings from English
+
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Portuguese (BR)");
+
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" pronto.");
+
+ PROGMEM Language_Str MSG_BACK = _UxGT("Voltar");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Cartão inserido");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Cartão removido");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Fins de curso");
+ PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Fins curso");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Menu principal");
+ PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Config. Avançada");
+ PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuração");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Início automático");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Desabilit. motores");
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu Debug");
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Testar Barra Progres");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Ir a origem XYZ");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Ir na origem X");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Ir na origem Y");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Ir na origem Z");
+ PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto alinhar Z");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Indo para origem");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Clique para Iniciar");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Próximo Ponto");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Fim nivelação!");
+ PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Suavizar altura");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Compensar origem");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Alteração aplicada");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Ajustar Origem");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Extrusora ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Extrusora ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Extrusora ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Extrusora ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Extrusora ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Extrusora ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Extrusora ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Pre-aq.Todo ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Pre-aq.Mesa ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Ajustar ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Pre-aquecer ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Extrusora ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Extrusora ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Extrusora ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Extrusora ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Extrusora ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Extrusora ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Extrusora ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Pre-aq.Todo ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Pre-aq.Mesa ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Ajustar ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Customizar Pre-aq.");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Esfriar");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Ligar");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Desligar");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrusar");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Retrair");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Mover eixo");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Nivelação Mesa");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Nivelar Mesa");
+ PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Nivelar Cantos");
+ PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Próximo Canto");
+ PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Editar Malha");
+ PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Fim da Edição");
+ PROGMEM Language_Str MSG_MESH_X = _UxGT("Índice X");
+ PROGMEM Language_Str MSG_MESH_Y = _UxGT("Índice Y");
+ PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Valor Z");
+ PROGMEM Language_Str MSG_USER_MENU = _UxGT("Comando customizado");
+
+ PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Modo IDEX");
+ PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Estacionar");
+ PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicação");
+ PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Cópia espelhada");
+ PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Controle Total");
+ PROGMEM Language_Str MSG_X_OFFSET = _UxGT("2o bico X");
+ PROGMEM Language_Str MSG_Y_OFFSET = _UxGT("2o bico Y");
+ PROGMEM Language_Str MSG_Z_OFFSET = _UxGT("2o bico Z");
+
+ PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Executando G29");
+ PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Ferramentas UBL");
+ PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Nivel. Mesa Unif.");
+ PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Fazer malha manual");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Calçar e calibrar");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Medir");
+ PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Remover e calibrar");
+ PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Movendo para Próximo");
+ PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Ativar UBL");
+ PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Desativar UBL");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Temp. Mesa");
+ PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temp. Extrusora");
+ PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
+ PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Editar Malha");
+ PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Editar Malha Custom");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Ajuste Fino da Malha");
+ PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Fim da Edição");
+ PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Montar Malha Custom");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Montar ");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = _UxGT("Montar ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("Montar ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Montar Malha fria");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Ajustar Altura");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Quant. de Altura");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validar Malha");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("Checar ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Checar ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validar Malha Custom");
+ PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Continuar Malha");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Nivelação da Malha");
+ PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Nivelação 3 pontos");
+ PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Nivelação Grid");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Nivelar Malha");
+ PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Cantos");
+ PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Tipo de Mapa");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Salvar Mapa da Malha");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Enviar Para Host");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Salvar Malha CSV");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Salvar Backup");
+ PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Informação do UBL");
+ PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Qtd de Enchimento");
+ PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Enchimento Manual");
+ PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Enchimento Smart");
+ PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Preencher malha");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidar tudo");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidar próximo");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Ajuste Fino de Todos");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Ajustar Mais Próximo");
+ PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Armazenamento Malha");
+ PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Slot de Memória");
+ PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Ler Malha");
+ PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Salvar Malha");
+ PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("M117 Malha %i carregada");
+ PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("M117 Malha %i salva");
+ PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Sem armazenamento");
+ PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Erro ao salvar UBL");
+ PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Erro no restauro UBL");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Compensação Z parou");
+ PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL passo a passo");
+ PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Montar Malha fria");
+ PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Enchimento Smart");
+ PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Validar Malha");
+ PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Ajuste Fino de Todos");
+ PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Validar Malha");
+ PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Ajuste Fino de Todos");
+ PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Salvar Malha");
+
+ PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Controle do LED");
+ PROGMEM Language_Str MSG_LEDS = _UxGT("Luz");
+ PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Configuração da Luz");
+ PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Luz Vermelha");
+ PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Luz Laranja");
+ PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Luz Amarela");
+ PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Luz Verde");
+ PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Luz Azul");
+ PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Luz Indigo");
+ PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Luz Violeta");
+ PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Luz Branca");
+ PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Luz Padrão");
+ PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Luz Customizada");
+ PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Intensidade Vermelho");
+ PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Intensidade Verde");
+ PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Intensidade Azul");
+ PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Intensidade Branco");
+ PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Brilho");
+ PROGMEM Language_Str MSG_MOVING = _UxGT("Movendo...");
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("Liberar XY");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Mover X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Mover Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Mover Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Mover Extrusor");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Mover Extrusor ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Mover Extrusor ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Mover Extrusor ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Mover Extrusor ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Mover Extrusor ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Mover Extrusor ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Extrus. mto fria");
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Mover %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mover 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mover 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Velocidade");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Base Z");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Bocal");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Bocal ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Bocal ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Bocal ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Bocal ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Bocal ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Bocal ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Mesa");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vel. Ventoinha");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Vel. Ventoinha 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Vel. Ventoinha 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Vel. Ventoinha 3");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("+Vel. Ventoinha");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1 = _UxGT("+Vel. Ventoinha 1");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2 = _UxGT("+Vel. Ventoinha 2");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3 = _UxGT("+Vel. Ventoinha 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Vazão");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Vazão ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Vazão ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Vazão ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Vazão ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Vazão ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Vazão ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Controle");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Máx");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fator");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Temp. Automática");
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("Ligado");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Desligado");
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Selecionar");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Selecionar ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Selecionar ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Selecionar ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Selecionar ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Selecionar ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Selecionar ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Acel.");
+ PROGMEM Language_Str MSG_JERK = _UxGT("Arrancada");
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("arrancada V") LCD_STR_A;
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("arrancada V") LCD_STR_B;
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("arrancada V") LCD_STR_C;
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("arrancada VE");
+ PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Desv. Junção");
+ PROGMEM Language_Str MSG_VELOCITY = _UxGT("Velocidade");
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VDeslocamento min");
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Aceleração");
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Retrair A");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Movimento A");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Passo/mm");
+ PROGMEM Language_Str MSG_A_STEPS = _UxGT("Passo ") LCD_STR_A _UxGT("/mm");
+ PROGMEM Language_Str MSG_B_STEPS = _UxGT("Passo ") LCD_STR_B _UxGT("/mm");
+ PROGMEM Language_Str MSG_C_STEPS = _UxGT("Passo ") LCD_STR_C _UxGT("/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("E/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT("/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT("/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT("/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT("/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT("/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT("/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Movimento");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filamento");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("Extrusão em mm3");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Diâmetro Fil.");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Diâmetro Fil. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Diâmetro Fil. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Diâmetro Fil. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Diâmetro Fil. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Diâmetro Fil. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Diâmetro Fil. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Descarr. mm");
+ PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Carregar mm");
+ PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Avanço K");
+ PROGMEM Language_Str MSG_ADVANCE_K_E0 = _UxGT("Avanço K ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_ADVANCE_K_E1 = _UxGT("Avanço K ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_ADVANCE_K_E2 = _UxGT("Avanço K ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_ADVANCE_K_E3 = _UxGT("Avanço K ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_ADVANCE_K_E4 = _UxGT("Avanço K ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_ADVANCE_K_E5 = _UxGT("Avanço K ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contraste");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Salvar Configuração");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Ler Configuração");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Restauro seguro");
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Iniciar EEPROM");
+ PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Atualiz. SD");
+ PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Resetar Impressora");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Atualização");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Informações");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Preparar");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Ajustar");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausar impressão");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Resumir impressão");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Parar impressão");
+ PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Recuperar Impressão");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Imprimir do SD");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Sem cartão SD");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Dormindo...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Clique para retomar");
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Impressão Pausada");
+ PROGMEM Language_Str MSG_PRINTING = _UxGT("Imprimindo...");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Impressão Abortada");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Sem movimento");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("PARADA DE EMERGÊNCIA");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("PAROU. ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retrair mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Retrair Troca mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retrair V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Saltar mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Des-Retrair mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Des-RetTroca mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Des-Retrair V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Des-RetTroca V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Retração Automática");
+ PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Distancia Retração");
+ PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Mudar Ferramenta");
+ PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Levantar Z");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD = _UxGT("Preparar Veloc.");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD = _UxGT("Veloc. Retração");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Trocar Filamento");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Trocar Filamento ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Trocar Filamento ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Trocar Filamento ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Trocar Filamento ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Trocar Filamento ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Trocar Filamento ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E0 = _UxGT("Carregar Filamento ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E1 = _UxGT("Carregar Filamento ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E2 = _UxGT("Carregar Filamento ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E3 = _UxGT("Carregar Filamento ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E4 = _UxGT("Carregar Filamento ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E5 = _UxGT("Carregar Filamento ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0 = _UxGT("Descarreg. Filamento ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1 = _UxGT("Descarreg. Filamento ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2 = _UxGT("Descarreg. Filamento ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3 = _UxGT("Descarreg. Filamento ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4 = _UxGT("Descarreg. Filamento ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5 = _UxGT("Descarreg. Filamento ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Descarregar Todos");
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Iniciar SD");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Trocar SD");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda fora da mesa");
+ PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Fator de Cisalho");
+ PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Testar BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reiniciar BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Estender BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Recolher BLTouch");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Estender Sonda-Z");
+ PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Recolher Sonda-Z");
+
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Home %s%s%s Primeiro");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Compensar Sonda em Z");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Passinho X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Passinho Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Passinho Z");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Abortar Fim de Curso");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Aquecimento falhou");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED = _UxGT("Aquecer mesa falhou");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Erro:Temp Redundante");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("ESCAPE TÉRMICO");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("ESCAPE TÉRMICO MESA");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Erro:Temp Máxima");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Erro:Temp Mínima");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("Erro:Temp Mesa Máx");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Erro:Temp Mesa Mín");
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Home XY Primeiro");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("IMPRESSORA PAROU");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Favor resetar");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d");
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h");
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m");
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Aquecendo...");
+ PROGMEM Language_Str MSG_COOLING = _UxGT("Resfriando...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Aquecendo mesa...");
+ PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Esfriando mesa...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibrar Delta");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
+
+ PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Configuração Delta");
+ PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto-Calibração");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Calibrar Altura");
+ PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Desloc. Sonda Z");
+ PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Haste Diagonal");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Altura");
+ PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Raio");
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Sobre");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Impressora");
+ PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("Nivelamento 3 pontos");
+ PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Nivelamento Linear");
+ PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Nivelamento Bilinear");
+ PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Nivelamento UBL");
+ PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Nivelamento da Malha");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Estatísticas");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Info. da Placa");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistores");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrusoras");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Taxa de Transmissão");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocolo");
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Luz da Impressora");
+ PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Intensidade Brilho");
+
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Impressora Incorreta");
+
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Total de Impressões");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Realizadas");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tempo de Impressão");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Trabalho Mais longo");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total de Extrusão");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Qtd de Impressões");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Realizadas");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tempo de Impressão");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Maior trabalho");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("T. Extrusão");
+ #endif
+
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Temp Mín");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Temp Máx");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("PSU");
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Força do Motor");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Escrever EEPROM DAC");
+
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPRESSÃO PAUSADA");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CARREGAR FILAMENTO");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DESCARREG. FILAMENTO");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("Config. de Retomada");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purgar mais");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Continuar Impressão");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Bocal: ");
+ PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Sensor filamento");
+ PROGMEM Language_Str MSG_LCD_HOMING_FAILED = _UxGT("Falha ao ir à origem");
+ PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Falha ao sondar");
+ PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: Muito frio");
+
+ #if LCD_HEIGHT >= 4
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Aperte o botão para", "continuar impressão"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Esperando o", "inicio da", "troca de filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Coloque filamento", "pressione o botão", "para continuar..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Pressione o botão", "p/ aquecer o bocal"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Aquecendo o bocal", "Aguarde..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Esperando", "remoção de filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Esperando", "filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Espere pela", "purga de filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Clique para finaliz.", "purga de filamento"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Esperando impressão", "continuar"));
+ #else // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Clique p. continuar"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Aguarde..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insira e Clique"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Aquecendo..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Ejetando..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Carregando..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purgando..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Clique p. finalizar"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Continuando..."));
+ #endif
+}
diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h
index e825dbe7d051..f19b33dd0cf5 100644
--- a/Marlin/src/lcd/language/language_ru.h
+++ b/Marlin/src/lcd/language/language_ru.h
@@ -28,434 +28,544 @@
* See also http://marlinfw.org/docs/development/lcd_language.html
*
*/
-
#define DISPLAY_CHARSET_ISO10646_5
-#define CHARSIZE 2
-#define WELCOME_MSG MACHINE_NAME _UxGT(" готов.")
-#define MSG_BACK _UxGT("Назад")
-#define MSG_MEDIA_INSERTED _UxGT("Карта вставлена")
-#define MSG_MEDIA_REMOVED _UxGT("Карта извлечена")
-#define MSG_MEDIA_RELEASED _UxGT("SD карта не активна")
-#define MSG_LCD_ENDSTOPS _UxGT("Эндстопы") // Max length 8 characters
-#define MSG_LCD_SOFT_ENDSTOPS _UxGT("Прогр. эндстопы")
-#define MSG_MAIN _UxGT("Меню")
-#define MSG_ADVANCED_SETTINGS _UxGT("Другие настройки")
-#define MSG_CONFIGURATION _UxGT("Настройки")
-#define MSG_AUTOSTART _UxGT("Автостарт")
-#define MSG_DISABLE_STEPPERS _UxGT("Выкл. двигатели")
-#define MSG_DEBUG_MENU _UxGT("Меню отладки")
-#define MSG_PROGRESS_BAR_TEST _UxGT("Тест индикатора")
-#define MSG_AUTO_HOME _UxGT("Авто парковка")
-#define MSG_AUTO_HOME_X _UxGT("Парковка X")
-#define MSG_AUTO_HOME_Y _UxGT("Парковка Y")
-#define MSG_AUTO_HOME_Z _UxGT("Парковка Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Нулевое положение")
-#define MSG_LEVEL_BED_WAITING _UxGT("Нажмите чтобы начать")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Следующая точка")
-#define MSG_LEVEL_BED_DONE _UxGT("Выравнивание готово!")
-#define MSG_Z_FADE_HEIGHT _UxGT("Высота спада")
-#define MSG_SET_HOME_OFFSETS _UxGT("Запомнить парковку")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Коррекции применены")
-#define MSG_SET_ORIGIN _UxGT("Запомнить ноль")
-#define MSG_PREHEAT_1 _UxGT("Преднагрев " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" всё")
-#define MSG_PREHEAT_1_END MSG_PREHEAT_1 _UxGT(" сопло")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" стол")
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" настр.")
-#define MSG_PREHEAT_2 _UxGT("Преднагрев " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" всё")
-#define MSG_PREHEAT_2_END MSG_PREHEAT_2 _UxGT(" сопло")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" стол")
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" настр.")
-#define MSG_COOLDOWN _UxGT("Охлаждение")
-#define MSG_SWITCH_PS_ON _UxGT("Включить питание")
-#define MSG_SWITCH_PS_OFF _UxGT("Выключить питание")
-#define MSG_EXTRUDE _UxGT("Экструзия")
-#define MSG_RETRACT _UxGT("Втягивание")
-#define MSG_MOVE_AXIS _UxGT("Движение по осям")
-#define MSG_BED_LEVELING _UxGT("Калибровка стола")
-#define MSG_LEVEL_BED _UxGT("Калибровать стол")
-#define MSG_LEVEL_CORNERS _UxGT("Выровнять углы")
-#define MSG_NEXT_CORNER _UxGT("Следующий угол")
-#define MSG_EDIT_MESH _UxGT("Редактировать сетку")
-#define MSG_EDITING_STOPPED _UxGT("Ред. сетки завершено")
-#define MSG_USER_MENU _UxGT("Свои команды")
+namespace Language_ru {
+ using namespace Language_en; // Inherit undefined strings from English
+
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Russian");
+
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" готов.");
+ PROGMEM Language_Str MSG_BACK = _UxGT("Назад");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Карта вставлена");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Карта извлечена");
+ PROGMEM Language_Str MSG_MEDIA_RELEASED = _UxGT("SD карта не активна");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Эндстопы"); // Max length 8 characters
+ PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Прогр. эндстопы");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Меню");
+ PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Другие настройки");
+ PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Настройки");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Автостарт");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Выкл. двигатели");
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Меню отладки");
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Тест индикатора");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Авто парковка");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Парковка X");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Парковка Y");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Парковка Z");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Нулевое положение");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Нажмите чтобы начать");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Следующая точка");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Выравнивание готово!");
+ PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Высота спада");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Запомнить парковку");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Коррекции применены");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Запомнить ноль");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Преднагрев ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Преднагрев ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Преднагрев ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Преднагрев ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Преднагрев ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Преднагрев ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Преднагрев ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" сопло");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" сопло ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" сопло ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" сопло ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" сопло ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" сопло ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" сопло ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" всё");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" стол");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Преднагрев ") PREHEAT_1_LABEL _UxGT(" настр.");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Преднагрев ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Преднагрев ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Преднагрев ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Преднагрев ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Преднагрев ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Преднагрев ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Преднагрев ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" сопло");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" сопло ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" сопло ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" сопло ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" сопло ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" сопло ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" сопло ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" всё");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" стол");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Преднагрев ") PREHEAT_2_LABEL _UxGT(" настр.");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Охлаждение");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Включить питание");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Выключить питание");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Экструзия");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Втягивание");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Движение по осям");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Калибровка стола");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Калибровать стол");
+ PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Выровнять углы");
+ PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Следующий угол");
+ PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Редактировать сетку");
+ PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Ред. сетки завершено");
+ PROGMEM Language_Str MSG_USER_MENU = _UxGT("Свои команды");
-#define MSG_M48_TEST _UxGT("Проверка датчика Z")
-#define MSG_M48_DEVIATION _UxGT("Отклонение")
-#define MSG_M48_POINT _UxGT("Измерение")
+ PROGMEM Language_Str MSG_M48_TEST = _UxGT("Проверка датчика Z");
+ PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Отклонение");
+ PROGMEM Language_Str MSG_M48_POINT = _UxGT("Измерение");
-// TODO: IDEX Menu
-#define MSG_OFFSETS_MENU _UxGT("Размещение сопел")
+ // TODO: IDEX Menu
+ PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Размещение сопел");
-#define MSG_X_OFFSET _UxGT("2-е сопло X")
-#define MSG_Y_OFFSET _UxGT("2-е сопло Y")
-#define MSG_Z_OFFSET _UxGT("2-е сопло Z")
+ PROGMEM Language_Str MSG_X_OFFSET = _UxGT("2-е сопло X");
+ PROGMEM Language_Str MSG_Y_OFFSET = _UxGT("2-е сопло Y");
+ PROGMEM Language_Str MSG_Z_OFFSET = _UxGT("2-е сопло Z");
-#define MSG_UBL_DOING_G29 _UxGT("Выполняем G29")
-#define MSG_UBL_TOOLS _UxGT("Утилиты UBL")
-#define MSG_UBL_LEVEL_BED _UxGT("Калибровка UBL")
-#define MSG_UBL_MANUAL_MESH _UxGT("Постр. сетку от руки")
-#define MSG_UBL_BC_INSERT _UxGT("Пост. шимм и измер.")
-#define MSG_UBL_BC_INSERT2 _UxGT("Измерение")
-#define MSG_UBL_BC_REMOVE _UxGT("Удал. и измер. стол")
-#define MSG_UBL_MOVING_TO_NEXT _UxGT("Двигаемся дальше")
-#define MSG_UBL_ACTIVATE_MESH _UxGT("Активировать UBL")
-#define MSG_UBL_DEACTIVATE_MESH _UxGT("Деактивировать UBL")
-#define MSG_UBL_SET_TEMP_BED _UxGT("Температура стола")
-#define MSG_UBL_BED_TEMP_CUSTOM MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND _UxGT("Температура сопла")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT _UxGT("Редактор сеток")
-#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("Редакт. свою сетку")
-#define MSG_UBL_FINE_TUNE_MESH _UxGT("Точная настр. сетки")
-#define MSG_UBL_DONE_EDITING_MESH _UxGT("Ред. сетки завершено")
-#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("Построить свою сетку")
-#define MSG_UBL_BUILD_MESH_MENU _UxGT("Построить сетку")
-#define MSG_UBL_BUILD_MESH_M1 _UxGT("Построить сетку " PREHEAT_1_LABEL)
-#define MSG_UBL_BUILD_MESH_M2 _UxGT("Построить сетку " PREHEAT_2_LABEL)
-#define MSG_UBL_BUILD_COLD_MESH _UxGT("Построить хол. сетку")
-#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("Устан. высоту сетки")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("Высота")
-#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Проверить сетку")
-#define MSG_UBL_VALIDATE_MESH_M1 _UxGT("Проверить сетку " PREHEAT_1_LABEL)
-#define MSG_UBL_VALIDATE_MESH_M2 _UxGT("Проверить сетку " PREHEAT_2_LABEL)
-#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Проверить свою сетку")
-#define MSG_UBL_CONTINUE_MESH _UxGT("Продолжить сетку")
-#define MSG_UBL_MESH_LEVELING _UxGT("Калибровка сетки")
-#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("Калибровка 3-х точек")
-#define MSG_UBL_GRID_MESH_LEVELING _UxGT("Калибровка растера")
-#define MSG_UBL_MESH_LEVEL _UxGT("Выровнить сетку")
-#define MSG_UBL_SIDE_POINTS _UxGT("Крайние точки")
-#define MSG_UBL_MAP_TYPE _UxGT("Тип карты")
-#define MSG_UBL_OUTPUT_MAP _UxGT("Вывести карту сетки")
-#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("Вывести на хост")
-#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("Вывести в CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("Забекапить сетку")
-#define MSG_UBL_INFO_UBL _UxGT("Вывод информации UBL")
-#define MSG_UBL_FILLIN_AMOUNT _UxGT("Кол-во заполнителя")
-#define MSG_UBL_MANUAL_FILLIN _UxGT("Ручное заполнение")
-#define MSG_UBL_SMART_FILLIN _UxGT("Умное заполнение")
-#define MSG_UBL_FILLIN_MESH _UxGT("Заполнить сетку")
-#define MSG_UBL_INVALIDATE_ALL _UxGT("Аннулировать всё")
-#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("Аннулир. ближ. точку")
-#define MSG_UBL_FINE_TUNE_ALL _UxGT("Точная настр. всего")
-#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("Настр. ближ. точки")
-#define MSG_UBL_STORAGE_MESH_MENU _UxGT("Хранилище сетей")
-#define MSG_UBL_STORAGE_SLOT _UxGT("Слот памяти")
-#define MSG_UBL_LOAD_MESH _UxGT("Загрузить сетку стола")
-#define MSG_UBL_SAVE_MESH _UxGT("Сохранить сетку стола")
-#define MSG_MESH_LOADED _UxGT("Сетка %i загружена")
-#define MSG_MESH_SAVED _UxGT("Сетка %i сохранена")
-#define MSG_UBL_NO_STORAGE _UxGT("Нет хранилища")
-#define MSG_UBL_SAVE_ERROR _UxGT("Ошибка: Сохран. UBL")
-#define MSG_UBL_RESTORE_ERROR _UxGT("Ошибка: Восстан. UBL")
-#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Смещение Z останов.")
-#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("Пошаговое UBL")
+ PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Выполняем G29");
+ PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Утилиты UBL");
+ PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Калибровка UBL");
+ PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Постр. сетку от руки");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Пост. шимм и измер.");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Измерение");
+ PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Удал. и измер. стол");
+ PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Двигаемся дальше");
+ PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Активировать UBL");
+ PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Деактивировать UBL");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Температура стола");
+ PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Температура сопла");
+ PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
+ PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Редактор сеток");
+ PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Редакт. свою сетку");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Точная настр. сетки");
+ PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Ред. сетки завершено");
+ PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Построить свою сетку");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Построить сетку");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = _UxGT("Построить сетку ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("Построить сетку ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Построить хол. сетку");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Устан. высоту сетки");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Высота");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Проверить сетку");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("Проверить сетку ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Проверить сетку ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Проверить свою сетку");
+ PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Продолжить сетку");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Калибровка сетки");
+ PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Калибровка 3-х точек");
+ PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Калибровка растера");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Выровнить сетку");
+ PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Крайние точки");
+ PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Тип карты");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Вывести карту сетки");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Вывести на хост");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Вывести в CSV");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Забекапить сетку");
+ PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Вывод информации UBL");
+ PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Кол-во заполнителя");
+ PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Ручное заполнение");
+ PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Умное заполнение");
+ PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Заполнить сетку");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Аннулировать всё");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Аннулир. ближ. точку");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Точная настр. всего");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Настр. ближ. точки");
+ PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Хранилище сетей");
+ PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Слот памяти");
+ PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Загрузить сетку стола");
+ PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Сохранить сетку стола");
+ PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("M117 Сетка %i загружена");
+ PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("M117 Сетка %i сохранена");
+ PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Нет хранилища");
+ PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Ошибка: Сохран. UBL");
+ PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Ошибка: Восстан. UBL");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Смещение Z останов.");
+ PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Пошаговое UBL");
+ PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Построить хол. сетку");
+ PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Умное заполнение");
+ PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Проверить сетку");
+ PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Точная настр. всего");
+ PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Проверить сетку");
+ PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Точная настр. всего");
+ PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Сохранить сетку стола");
-#define MSG_LED_CONTROL _UxGT("Настройки LED")
-#define MSG_LEDS _UxGT("Подсветку")
-#define MSG_LED_PRESETS _UxGT("Предустановки света")
-#define MSG_SET_LEDS_RED _UxGT("Красный свет")
-#define MSG_SET_LEDS_ORANGE _UxGT("Оранжевый свет")
-#define MSG_SET_LEDS_YELLOW _UxGT("Жёлтый свет")
-#define MSG_SET_LEDS_GREEN _UxGT("Зелёный свет")
-#define MSG_SET_LEDS_BLUE _UxGT("Синий свет")
-#define MSG_SET_LEDS_INDIGO _UxGT("Индиго свет")
-#define MSG_SET_LEDS_VIOLET _UxGT("Фиолетовый свет")
-#define MSG_SET_LEDS_WHITE _UxGT("Белый свет")
-#define MSG_SET_LEDS_DEFAULT _UxGT("Свет по умолчанию")
-#define MSG_CUSTOM_LEDS _UxGT("Свои настр. света")
-#define MSG_INTENSITY_R _UxGT("Интенсивн. красного")
-#define MSG_INTENSITY_G _UxGT("Интенсивн. зелёного")
-#define MSG_INTENSITY_B _UxGT("Интенсивн. синего")
-#define MSG_INTENSITY_W _UxGT("Интенсивн. белого")
-#define MSG_LED_BRIGHTNESS _UxGT("Яркость")
+ PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Настройки LED");
+ PROGMEM Language_Str MSG_LEDS = _UxGT("Подсветку");
+ PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Предустановки света");
+ PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Красный свет");
+ PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Оранжевый свет");
+ PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Жёлтый свет");
+ PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Зелёный свет");
+ PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Синий свет");
+ PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Индиго свет");
+ PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Фиолетовый свет");
+ PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Белый свет");
+ PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Свет по умолчанию");
+ PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Свои настр. света");
+ PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Интенсивн. красного");
+ PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Интенсивн. зелёного");
+ PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Интенсивн. синего");
+ PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Интенсивн. белого");
+ PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Яркость");
-#define MSG_MOVING _UxGT("Движемся...")
-#define MSG_FREE_XY _UxGT("Освобождаем XY")
-#define MSG_MOVE_X _UxGT("Движение по X")
-#define MSG_MOVE_Y _UxGT("Движение по Y")
-#define MSG_MOVE_Z _UxGT("Движение по Z")
-#define MSG_MOVE_E _UxGT("Экструдер")
-#define MSG_MOVE_Z_DIST _UxGT("Движение %sмм")
-#define MSG_MOVE_01MM _UxGT("Движение 0.1мм")
-#define MSG_MOVE_1MM _UxGT("Движение 1мм")
-#define MSG_MOVE_10MM _UxGT("Движение 10мм")
-#define MSG_SPEED _UxGT("Скорость")
-#define MSG_BED_Z _UxGT("Z стола")
-#define MSG_NOZZLE _UxGT("Сопло")
-#define MSG_BED _UxGT("Стол")
-#define MSG_FAN_SPEED _UxGT("Кулер")
-#define MSG_EXTRA_FAN_SPEED _UxGT("Кулер доп.")
-#define MSG_FLOW _UxGT("Поток")
-#define MSG_CONTROL _UxGT("Настройки")
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Мин")
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Макс")
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Фактор")
-#define MSG_AUTOTEMP _UxGT("Автотемпература")
-#define MSG_LCD_ON _UxGT("Вкл.")
-#define MSG_LCD_OFF _UxGT("Выкл.")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Выбор")
-#define MSG_ACC _UxGT("Ускорение")
-#define MSG_JERK _UxGT("Рывок")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va-рывок")
- #define MSG_VB_JERK _UxGT("Vb-рывок")
- #define MSG_VC_JERK _UxGT("Vc-рывок")
-#else
- #define MSG_VX_JERK _UxGT("Vx-рывок")
- #define MSG_VY_JERK _UxGT("Vy-рывок")
- #define MSG_VZ_JERK _UxGT("Vz-рывок")
-#endif
-#define MSG_VE_JERK _UxGT("Ve-рывок")
-#define MSG_VELOCITY _UxGT("Быстрота")
-#define MSG_VMAX _UxGT("Vмакс ")
-#define MSG_VMIN _UxGT("Vмин")
-#define MSG_VTRAV_MIN _UxGT("Vпутеш. мин")
-#define MSG_ACCELERATION _UxGT("Ускорение")
-#define MSG_AMAX _UxGT("Aмакс ")
-#define MSG_A_RETRACT _UxGT("A-втягивание")
-#define MSG_A_TRAVEL _UxGT("A-путеш.")
-#define MSG_STEPS_PER_MM _UxGT("Шаг/мм")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("Aшаг/мм")
- #define MSG_BSTEPS _UxGT("Bшаг/мм")
- #define MSG_CSTEPS _UxGT("Cшаг/мм")
-#else
- #define MSG_ASTEPS _UxGT("Xшаг/мм")
- #define MSG_BSTEPS _UxGT("Yшаг/мм")
- #define MSG_CSTEPS _UxGT("Zшаг/мм")
-#endif
-#define MSG_ESTEPS _UxGT("Eшаг/мм")
-#define MSG_E1STEPS _UxGT("E1шаг/мм")
-#define MSG_E2STEPS _UxGT("E2шаг/мм")
-#define MSG_E3STEPS _UxGT("E3шаг/мм")
-#define MSG_E4STEPS _UxGT("E4шаг/мм")
-#define MSG_E5STEPS _UxGT("E5шаг/мм")
-#define MSG_E6STEPS _UxGT("E6шаг/мм")
-#define MSG_TEMPERATURE _UxGT("Температура")
-#define MSG_MOTION _UxGT("Движение")
-#define MSG_FILAMENT _UxGT("Филамент")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E в мм3")
-#define MSG_FILAMENT_DIAM _UxGT("Диаметр филамента")
-#define MSG_FILAMENT_UNLOAD _UxGT("Загрузка мм")
-#define MSG_FILAMENT_LOAD _UxGT("Выгрузка мм")
-#define MSG_ADVANCE_K _UxGT("K продвижения")
-#define MSG_CONTRAST _UxGT("Контраст LCD")
-#define MSG_STORE_EEPROM _UxGT("Сохранить настройки")
-#define MSG_LOAD_EEPROM _UxGT("Загрузить настройки")
-#define MSG_RESTORE_FAILSAFE _UxGT("Вернуть настройки")
-#define MSG_INIT_EEPROM _UxGT("Инициализация EEPROM")
-#define MSG_MEDIA_UPDATE _UxGT("Обновление прошивки")
-#define MSG_RESET_PRINTER _UxGT("Сброс принтера")
-#define MSG_REFRESH _UxGT("Обновить")
-#define MSG_WATCH _UxGT("Информационный экран")
-#define MSG_PREPARE _UxGT("Подготовить")
-#define MSG_TUNE _UxGT("Настроить")
-#define MSG_START_PRINT _UxGT("Начало печати")
-#define MSG_BUTTON_NEXT _UxGT("Дальше")
-#define MSG_BUTTON_INIT _UxGT("Инициализация")
-#define MSG_BUTTON_STOP _UxGT("Остановить")
-#define MSG_BUTTON_PRINT _UxGT("Печать")
-#define MSG_BUTTON_RESET _UxGT("Сброс")
-#define MSG_BUTTON_CANCEL _UxGT("Отмена")
-#define MSG_BUTTON_DONE _UxGT("Готово")
-#define MSG_PAUSE_PRINT _UxGT("Пауза печати")
-#define MSG_RESUME_PRINT _UxGT("Продолжить печать")
-#define MSG_STOP_PRINT _UxGT("Остановить печать")
-#define MSG_OUTAGE_RECOVERY _UxGT("Восстановение сбоя")
-#define MSG_MEDIA_MENU _UxGT("Печать с SD карты")
-#define MSG_NO_MEDIA _UxGT("Нет SD карты")
-#define MSG_DWELL _UxGT("Сон...")
-#define MSG_USERWAIT _UxGT("Продолжить...")
-#define MSG_PRINT_PAUSED _UxGT("Печать на паузе")
-#define MSG_PRINT_ABORTED _UxGT("Печать отменена")
-#define MSG_NO_MOVE _UxGT("Нет движения.")
-#define MSG_KILLED _UxGT("УБИТО. ")
-#define MSG_STOPPED _UxGT("ОСТАНОВЛЕНО. ")
-#define MSG_CONTROL_RETRACT _UxGT("Втягивание мм")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Втягивание смены мм")
-#define MSG_CONTROL_RETRACTF _UxGT("Втягивание V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Втяг. прыжка мм")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("Возврат мм")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("Возврат смены мм")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("Возврат V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("Возврат смены V")
-#define MSG_AUTORETRACT _UxGT("Авто Втягивание")
+ PROGMEM Language_Str MSG_MOVING = _UxGT("Движемся...");
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("Освобождаем XY");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Движение по X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Движение по Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Движение по Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Экструдер");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Экструдер ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Экструдер ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Экструдер ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Экструдер ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Экструдер ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Экструдер ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Движение %sмм");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Движение 0.1мм");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Движение 1мм");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Движение 10мм");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Скорость");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Z стола");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Сопло");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Сопло ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Сопло ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Сопло ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Сопло ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Сопло ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Сопло ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Стол");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Кулер");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Кулер 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Кулер 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Кулер 3");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Кулер доп.");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1 = _UxGT("Кулер доп. 1");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2 = _UxGT("Кулер доп. 2");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3 = _UxGT("Кулер доп. 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Поток");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Поток ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Поток ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Поток ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Поток ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Поток ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Поток ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Настройки");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Мин");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Макс");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Фактор");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Автотемпература");
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("Вкл.");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Выкл.");
+ PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
+ PROGMEM Language_Str MSG_PID_P_E0 = _UxGT("PID-P ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_P_E1 = _UxGT("PID-P ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_P_E2 = _UxGT("PID-P ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_P_E3 = _UxGT("PID-P ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_P_E4 = _UxGT("PID-P ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_P_E5 = _UxGT("PID-P ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
+ PROGMEM Language_Str MSG_PID_I_E0 = _UxGT("PID-I ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_I_E1 = _UxGT("PID-I ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_I_E2 = _UxGT("PID-I ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_I_E3 = _UxGT("PID-I ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_I_E4 = _UxGT("PID-I ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_I_E5 = _UxGT("PID-I ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
+ PROGMEM Language_Str MSG_PID_D_E0 = _UxGT("PID-D ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_D_E1 = _UxGT("PID-D ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_D_E2 = _UxGT("PID-D ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_D_E3 = _UxGT("PID-D ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_D_E4 = _UxGT("PID-D ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_D_E5 = _UxGT("PID-D ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
+ PROGMEM Language_Str MSG_PID_C_E0 = _UxGT("PID-C ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_C_E1 = _UxGT("PID-C ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_C_E2 = _UxGT("PID-C ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_C_E3 = _UxGT("PID-C ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_C_E4 = _UxGT("PID-C ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_C_E5 = _UxGT("PID-C ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Выбор");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Выбор ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Выбор ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Выбор ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Выбор ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Выбор ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Выбор ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Ускорение");
+ PROGMEM Language_Str MSG_JERK = _UxGT("Рывок");
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-рывок");
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-рывок");
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-рывок");
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-рывок");
+ PROGMEM Language_Str MSG_VELOCITY = _UxGT("Быстрота");
+ PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vмакс ") LCD_STR_A;
+ PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vмакс ") LCD_STR_B;
+ PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vмакс ") LCD_STR_C;
+ PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vмакс ") LCD_STR_E;
+ PROGMEM Language_Str MSG_VMAX_E0 = _UxGT("Vмакс ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_VMAX_E1 = _UxGT("Vмакс ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_VMAX_E2 = _UxGT("Vмакс ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_VMAX_E3 = _UxGT("Vмакс ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_VMAX_E4 = _UxGT("Vмакс ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_VMAX_E5 = _UxGT("Vмакс ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_VMIN = _UxGT("Vмин");
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vпутеш. мин");
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Ускорение");
+ PROGMEM Language_Str MSG_AMAX_A = _UxGT("Aмакс ") LCD_STR_A;
+ PROGMEM Language_Str MSG_AMAX_B = _UxGT("Aмакс ") LCD_STR_B;
+ PROGMEM Language_Str MSG_AMAX_C = _UxGT("Aмакс ") LCD_STR_C;
+ PROGMEM Language_Str MSG_AMAX_E = _UxGT("Aмакс ") LCD_STR_E;
+ PROGMEM Language_Str MSG_AMAX_E0 = _UxGT("Aмакс ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AMAX_E1 = _UxGT("Aмакс ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AMAX_E2 = _UxGT("Aмакс ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AMAX_E3 = _UxGT("Aмакс ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AMAX_E4 = _UxGT("Aмакс ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AMAX_E5 = _UxGT("Aмакс ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-втягивание");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-путеш.");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Шаг/мм");
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT("шаг/мм");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT("шаг/мм");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT("шаг/мм");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("Eшаг/мм");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT("шаг/мм");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT("шаг/мм");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT("шаг/мм");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT("шаг/мм");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT("шаг/мм");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT("шаг/мм");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Температура");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Движение");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Филамент");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E в мм3");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Диаметр филамента");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Диаметр филамента ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Диаметр филамента ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Диаметр филамента ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Диаметр филамента ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Диаметр филамента ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Диаметр филамента ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Загрузка мм");
+ PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Выгрузка мм");
+ PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("K продвижения");
+ PROGMEM Language_Str MSG_ADVANCE_K_E0 = _UxGT("K продвижения ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_ADVANCE_K_E1 = _UxGT("K продвижения ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_ADVANCE_K_E2 = _UxGT("K продвижения ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_ADVANCE_K_E3 = _UxGT("K продвижения ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_ADVANCE_K_E4 = _UxGT("K продвижения ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_ADVANCE_K_E5 = _UxGT("K продвижения ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("Контраст LCD");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Сохранить настройки");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Загрузить настройки");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Вернуть настройки");
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Инициализация EEPROM");
+ PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Обновление прошивки");
+ PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Сброс принтера");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Обновить");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Информационный экран");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Подготовить");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Настроить");
+ PROGMEM Language_Str MSG_START_PRINT = _UxGT("Начало печати");
+ PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Дальше");
+ PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Инициализация");
+ PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Остановить");
+ PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Печать");
+ PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Сброс");
+ PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Отмена");
+ PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Готово");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Пауза печати");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Продолжить печать");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Остановить печать");
+ PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Восстановение сбоя");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Печать с SD карты");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Нет SD карты");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Сон...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Продолжить...");
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Печать на паузе");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Печать отменена");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Нет движения.");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("УБИТО. ");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("ОСТАНОВЛЕНО. ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Втягивание мм");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Втягивание смены мм");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Втягивание V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Втяг. прыжка мм");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Возврат мм");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Возврат смены мм");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Возврат V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Возврат смены V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Авто Втягивание");
-// TODO: Filament Change Swap / Purge Length
+ // TODO: Filament Change Swap / Purge Length
-#define MSG_TOOL_CHANGE _UxGT("Смена сопел")
-#define MSG_TOOL_CHANGE_ZLIFT _UxGT("Поднятие по Z")
+ PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Смена сопел");
+ PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Поднятие по Z");
-// TODO: Singlenozzle, nozzle standby
+ // TODO: Singlenozzle, nozzle standby
-#define MSG_FILAMENTCHANGE _UxGT("Смена филамента")
-#define MSG_FILAMENTLOAD _UxGT("Загрузка филамента")
-#define MSG_FILAMENTUNLOAD _UxGT("Выгрузка филамента")
-#define MSG_FILAMENTUNLOAD_ALL _UxGT("Выгрузить всё")
-#define MSG_INIT_MEDIA _UxGT("Активировать SD")
-#define MSG_CHANGE_MEDIA _UxGT("Сменить SD карту")
-#define MSG_RELEASE_MEDIA _UxGT("Деактивировать SD")
-#define MSG_ZPROBE_OUT _UxGT("Z датчик вне стола")
-#define MSG_SKEW_FACTOR _UxGT("Фактор наклона")
-#define MSG_BLTOUCH _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST _UxGT("Тестирование BLTouch")
-#define MSG_BLTOUCH_RESET _UxGT("Сброс BLTouch")
-#define MSG_BLTOUCH_DEPLOY _UxGT("Установка BLTouch")
-#define MSG_BLTOUCH_STOW _UxGT("Набивка BLTouch")
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Смена филамента");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Смена филамента ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Смена филамента ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Смена филамента ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Смена филамента ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Смена филамента ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Смена филамента ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Загрузка филамента");
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E0 = _UxGT("Загрузка филамента ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E1 = _UxGT("Загрузка филамента ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E2 = _UxGT("Загрузка филамента ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E3 = _UxGT("Загрузка филамента ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E4 = _UxGT("Загрузка филамента ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E5 = _UxGT("Загрузка филамента ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0 = _UxGT("Выгрузка филамента ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1 = _UxGT("Выгрузка филамента ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2 = _UxGT("Выгрузка филамента ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3 = _UxGT("Выгрузка филамента ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4 = _UxGT("Выгрузка филамента ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5 = _UxGT("Выгрузка филамента ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Выгрузить всё");
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Активировать SD");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Сменить SD карту");
+ PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Деактивировать SD");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z датчик вне стола");
+ PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Фактор наклона");
+ PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Тестирование BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Сброс BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Установка BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Набивка BLTouch");
-// TODO: TouchMI Probe, Manual deploy/stow
+ // TODO: TouchMI Probe, Manual deploy/stow
-#define MSG_HOME_FIRST _UxGT("Паркуй %s%s%s сначала")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Смещение Z")
-#define MSG_BABYSTEP_X _UxGT("Микрошаг X")
-#define MSG_BABYSTEP_Y _UxGT("Микрошаг Y")
-#define MSG_BABYSTEP_Z _UxGT("Микрошаг Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Сработал концевик")
-#define MSG_HEATING_FAILED_LCD _UxGT("Разогрев не удался")
-#define MSG_HEATING_FAILED_LCD_BED _UxGT("Неудача нагрева стола")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Ошибка: Избыточная Т")
-#define MSG_THERMAL_RUNAWAY _UxGT("УБЕГАНИЕ ТЕПЛА")
-#define MSG_THERMAL_RUNAWAY_BED _UxGT("УБЕГАНИЕ ТЕПЛА СТОЛА")
-// TODO: Heated chamber
-#define MSG_ERR_MAXTEMP _UxGT("Ошибка: Т макс.")
-#define MSG_ERR_MINTEMP _UxGT("Ошибка: Т мин.")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Ошибка: Т стола макс")
-#define MSG_ERR_MINTEMP_BED _UxGT("Ошибка: Т стола мин.")
-// TODO: Heated chamber
-#define MSG_ERR_Z_HOMING _UxGT("Паркуй XY сначала")
-#define MSG_HALTED _UxGT("ПРИНТЕР ОСТАНОВЛЕН")
-#define MSG_PLEASE_RESET _UxGT("Сделайте сброс")
-#define MSG_SHORT_DAY _UxGT("д") // One character only
-#define MSG_SHORT_HOUR _UxGT("ч") // One character only
-#define MSG_SHORT_MINUTE _UxGT("м") // One character only
-#define MSG_HEATING _UxGT("Нагрев...")
-#define MSG_COOLING _UxGT("Охлаждение...")
-#define MSG_BED_HEATING _UxGT("Нагрев стола...")
-#define MSG_BED_COOLING _UxGT("Охлаждение стола...")
-// TODO: Heated chamber
-#define MSG_DELTA_CALIBRATE _UxGT("Калибровка Delta")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Калибровать X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Калибровать Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Калибровать Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Калибровать центр")
-#define MSG_DELTA_SETTINGS _UxGT("Настройки Delta")
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Авто калибровка")
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Задать высоту Delta")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE _UxGT("Задать Z-смещение")
-#define MSG_DELTA_DIAG_ROD _UxGT("Диаг. стержень")
-#define MSG_DELTA_HEIGHT _UxGT("Высота")
-#define MSG_DELTA_RADIUS _UxGT("Радиус")
-#define MSG_INFO_MENU _UxGT("О принтере")
-#define MSG_INFO_PRINTER_MENU _UxGT("Инф. о принтере")
-#define MSG_3POINT_LEVELING _UxGT("Калибровка 3-х точек")
-#define MSG_LINEAR_LEVELING _UxGT("Линейная калибровка")
-#define MSG_BILINEAR_LEVELING _UxGT("Билинейная калибр.")
-#define MSG_UBL_LEVELING _UxGT("Калибровка UBL")
-#define MSG_MESH_LEVELING _UxGT("Калибровка сетки")
-#define MSG_INFO_STATS_MENU _UxGT("Статистика принтера")
-#define MSG_INFO_BOARD_MENU _UxGT("Информация о плате")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Термисторы")
-#define MSG_INFO_EXTRUDERS _UxGT("Экструдеры")
-#define MSG_INFO_BAUDRATE _UxGT("Бод")
-#define MSG_INFO_PROTOCOL _UxGT("Протокол")
-#define MSG_CASE_LIGHT _UxGT("Подсветка корпуса")
-#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Яркость подсветки")
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Паркуй %s%s%s сначала");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Смещение Z");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Микрошаг X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Микрошаг Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Микрошаг Z");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Сработал концевик");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Разогрев не удался");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED = _UxGT("Неудача нагрева стола");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Ошибка: Избыточная Т");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("УБЕГАНИЕ ТЕПЛА");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("УБЕГАНИЕ ТЕПЛА СТОЛА");
+ // TODO: Heated chamber
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Ошибка: Т макс.");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Ошибка: Т мин.");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("Ошибка: Т стола макс");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Ошибка: Т стола мин.");
+ // TODO: Heated chamber
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Паркуй XY сначала");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("ПРИНТЕР ОСТАНОВЛЕН");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Сделайте сброс");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("д"); // One character only
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("ч"); // One character only
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("м"); // One character only
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Нагрев...");
+ PROGMEM Language_Str MSG_COOLING = _UxGT("Охлаждение...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Нагрев стола...");
+ PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Охлаждение стола...");
+ // TODO: Heated chamber
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Калибровка Delta");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Калибровать X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Калибровать Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Калибровать Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Калибровать центр");
+ PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Настройки Delta");
+ PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Авто калибровка");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Задать высоту Delta");
+ PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Задать Z-смещение");
+ PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Диаг. стержень");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Высота");
+ PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Радиус");
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("О принтере");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Инф. о принтере");
+ PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("Калибровка 3-х точек");
+ PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Линейная калибровка");
+ PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Билинейная калибр.");
+ PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Калибровка UBL");
+ PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Калибровка сетки");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Статистика принтера");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Информация о плате");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Термисторы");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Экструдеры");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Бод");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Протокол");
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Подсветка корпуса");
+ PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Яркость подсветки");
-#define MSG_EXPECTED_PRINTER _UxGT("Неверный принтер")
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Неверный принтер");
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Счётчик печати")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Закончено")
- #define MSG_INFO_PRINT_TIME _UxGT("Общее время печати")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Наидольшее задание")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Длина филамента")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Отпечатков")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Закончено")
- #define MSG_INFO_PRINT_TIME _UxGT("Всего")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Наидольшее")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Выдавлено")
-#endif
-#define MSG_INFO_MIN_TEMP _UxGT("Мин. Т")
-#define MSG_INFO_MAX_TEMP _UxGT("Макс. Т")
-#define MSG_INFO_PSU _UxGT("БП")
-#define MSG_DRIVE_STRENGTH _UxGT("Сила привода")
-#define MSG_DAC_PERCENT _UxGT("Привод %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("Запись DAC EEPROM")
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("ПЕЧАТЬ НА ПАУЗЕ")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("ЗАГРУЗКА ФИЛАМЕНТА")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("ВЫГРУЗКА ФИЛАМЕНТА")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("ОПЦИИ ВОЗОБНОВЛЕНИЯ:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Выдавить ещё")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Возобновить печать")
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Сопла: ")
-#define MSG_ERR_HOMING_FAILED _UxGT("Возврат не удался")
-#define MSG_ERR_PROBING_FAILED _UxGT("Не удалось прощупать")
-#define MSG_M600_TOO_COLD _UxGT("M600: Низкая Т")
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Счётчик печати");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Закончено");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Общее время печати");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Наидольшее задание");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Длина филамента");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Отпечатков");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Закончено");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Всего");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Наидольшее");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Выдавлено");
+ #endif
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Мин. Т");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Макс. Т");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("БП");
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Сила привода");
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("Привод %");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Запись DAC EEPROM");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("ПЕЧАТЬ НА ПАУЗЕ");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ЗАГРУЗКА ФИЛАМЕНТА");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("ВЫГРУЗКА ФИЛАМЕНТА");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ОПЦИИ ВОЗОБНОВЛЕНИЯ:");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Выдавить ещё");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Возобновить печать");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Сопла: ");
+ PROGMEM Language_Str MSG_LCD_HOMING_FAILED = _UxGT("Возврат не удался");
+ PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Не удалось прощупать");
+ PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: Низкая Т");
-// TODO: MMU2
+ // TODO: MMU2
-// TODO: Mixing
+ // TODO: Mixing
-#define MSG_GAMES _UxGT("Игры")
-#define MSG_BRICKOUT _UxGT("Кирпичи")
-#define MSG_INVADERS _UxGT("Вторжение")
-#define MSG_SNAKE _UxGT("Змейка")
-#define MSG_MAZE _UxGT("Лабиринт")
+ PROGMEM Language_Str MSG_GAMES = _UxGT("Игры");
+ PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Кирпичи");
+ PROGMEM Language_Str MSG_INVADERS = _UxGT("Вторжение");
+ PROGMEM Language_Str MSG_SNAKE = _UxGT("Змейка");
+ PROGMEM Language_Str MSG_MAZE = _UxGT("Лабиринт");
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-// ...or up to 2 lines on a 3-line display
-//
-#if LCD_HEIGHT >= 4
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Ожидайте")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("начала смены")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("филамента")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Ожидайте")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("выгрузки")
- #define MSG_FILAMENT_CHANGE_UNLOAD_3 _UxGT("филамента")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Вставьте пруток")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("и нажмите кнопку")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("для продолжения")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Нажмите кнопку для")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("нагрева сопла...")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Нагрев сопла")
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Ждите...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Ожидайте")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("загрузки прутка")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Ожидайте")
- #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("экструзии")
- #define MSG_FILAMENT_CHANGE_PURGE_3 _UxGT("филамента")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Ожидайте")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("возобновления")
- #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("печати")
-#else // LCD_HEIGHT < 4
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Ожидайте...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Выгрузка...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Вставь и нажми")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Нагрев...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Загрузка...")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Выдавливание...")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Возобновление...")
-#endif // LCD_HEIGHT < 4
+ //
+ // Filament Change screens show up to 3 lines on a 4-line display
+ // ...or up to 2 lines on a 3-line display
+ //
+ #if LCD_HEIGHT >= 4
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Ожидайте", "начала смены", "филамента"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Ожидайте", "выгрузки", "филамента"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Вставьте пруток", "и нажмите кнопку", "для продолжения"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Нажмите кнопку для", "нагрева сопла..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Нагрев сопла", "Ждите..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Ожидайте", "загрузки прутка"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Ожидайте", "экструзии", "филамента"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Ожидайте", "возобновления", "печати"));
+ #else
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Ожидайте..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Выгрузка..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Вставь и нажми"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Нагрев..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Загрузка..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Выдавливание..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Возобновление..."));
+ #endif
-#define MSG_TMC_DRIVERS _UxGT("Драйвера TMC")
-#define MSG_TMC_CURRENT _UxGT("Текущие настройки")
-#define MSG_TMC_HYBRID_THRS _UxGT("Гибридный режим")
-#define MSG_TMC_HOMING_THRS _UxGT("Режим без эндстопов")
-#define MSG_TMC_STEPPING_MODE _UxGT("Режим шага")
-#define MSG_TMC_STEALTH_ENABLED _UxGT("Тихий режим вкл")
+ PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("Драйвера TMC");
+ PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Текущие настройки");
+ PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Гибридный режим");
+ PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Режим без эндстопов");
+ PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Режим шага");
+ PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("Тихий режим вкл");
-// TODO: Service
+ // TODO: Service
-// TODO: Backlash
+ // TODO: Backlash
+}
diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h
index 8897ff2310fd..176834a81148 100644
--- a/Marlin/src/lcd/language/language_sk.h
+++ b/Marlin/src/lcd/language/language_sk.h
@@ -32,534 +32,669 @@
* http://www.facebook.com/farmamam
*
*/
-
#define DISPLAY_CHARSET_ISO10646_SK
-#define CHARSIZE 2
-
-// Characters that can be displayed with M117
-#define THIS_LANGUAGES_SPECIAL_SYMBOLS _UxGT("äÄáÁčČďĎéÉíÍĺĹľĽňŇóÓôÔŕŔšŠťŤúÚýÝžŽ³")
-#define WELCOME_MSG MACHINE_NAME _UxGT(" pripravená.")
-#define MSG_YES _UxGT("ÁNO")
-#define MSG_NO _UxGT("NIE")
-#define MSG_BACK _UxGT("Naspäť")
-#define MSG_MEDIA_INSERTED _UxGT("Karta vložená")
-#define MSG_MEDIA_REMOVED _UxGT("Karta vybraná")
-#define MSG_MEDIA_RELEASED _UxGT("Karta odpojená")
-#define MSG_LCD_ENDSTOPS _UxGT("Endstopy") // max 8 znakov
-#define MSG_LCD_SOFT_ENDSTOPS _UxGT("Soft. endstopy")
-#define MSG_MAIN _UxGT("Hlavná ponuka")
-#define MSG_ADVANCED_SETTINGS _UxGT("Pokročilé nastav.")
-#define MSG_CONFIGURATION _UxGT("Konfigurácia")
-#define MSG_AUTOSTART _UxGT("Auto-štart")
-#define MSG_DISABLE_STEPPERS _UxGT("Uvolniť motory")
-#define MSG_DEBUG_MENU _UxGT("Ponuka ladenia")
-#define MSG_PROGRESS_BAR_TEST _UxGT("Test uk. priebehu")
-#define MSG_AUTO_HOME _UxGT("Domovská pozícia")
-#define MSG_AUTO_HOME_X _UxGT("Domov os X")
-#define MSG_AUTO_HOME_Y _UxGT("Domov os Y")
-#define MSG_AUTO_HOME_Z _UxGT("Domov os Z")
-#define MSG_AUTO_Z_ALIGN _UxGT("Auto-zarovn. Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Parkovanie XYZ")
-#define MSG_LEVEL_BED_WAITING _UxGT("Kliknutím spusťte")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Ďalší bod")
-#define MSG_LEVEL_BED_DONE _UxGT("Meranie hotové!")
-#define MSG_Z_FADE_HEIGHT _UxGT("Výška rovnania")
-#define MSG_SET_HOME_OFFSETS _UxGT("Nastaviť ofsety")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Ofsety nastavené")
-#define MSG_SET_ORIGIN _UxGT("Nastaviť začiatok")
-#define MSG_PREHEAT_1 _UxGT("Zahriať " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" všetko")
-#define MSG_PREHEAT_1_END MSG_PREHEAT_1 _UxGT(" hotend")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" podlož")
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" nast.")
-#define MSG_PREHEAT_2 _UxGT("Zahriať " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" všetko")
-#define MSG_PREHEAT_2_END MSG_PREHEAT_2 _UxGT(" hotend")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" podlož")
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" nast.")
-#define MSG_PREHEAT_CUSTOM _UxGT("Vlastná teplota")
-#define MSG_COOLDOWN _UxGT("Schladiť")
-#define MSG_LASER_MENU _UxGT("Nastavenie lasera")
-#define MSG_LASER_OFF _UxGT("Vypnúť laser")
-#define MSG_LASER_ON _UxGT("Zapnúť laser")
-#define MSG_LASER_POWER _UxGT("Výkon lasera")
-#define MSG_SPINDLE_MENU _UxGT("Nastavenie vretena")
-#define MSG_SPINDLE_OFF _UxGT("Vypnúť vreteno")
-#define MSG_SPINDLE_ON _UxGT("Zapnúť vreteno")
-#define MSG_SPINDLE_POWER _UxGT("Výkon vretena")
-#define MSG_SPINDLE_REVERSE _UxGT("Spätný chod")
-#define MSG_SWITCH_PS_ON _UxGT("Zapnúť napájanie")
-#define MSG_SWITCH_PS_OFF _UxGT("Vypnúť napájanie")
-#define MSG_EXTRUDE _UxGT("Vytlačiť (extr.)")
-#define MSG_RETRACT _UxGT("Vytiahnuť (retr.)")
-#define MSG_MOVE_AXIS _UxGT("Posunúť osy")
-#define MSG_BED_LEVELING _UxGT("Vyrovnanie podložky")
-#define MSG_LEVEL_BED _UxGT("Vyrovnať podložku")
-#define MSG_LEVEL_CORNERS _UxGT("Vyrovnať rohy")
-#define MSG_NEXT_CORNER _UxGT("Ďalší roh")
-#define MSG_EDIT_MESH _UxGT("Upraviť sieť bodov")
-#define MSG_EDITING_STOPPED _UxGT("Koniec úprav siete")
-#define MSG_PROBING_MESH _UxGT("Skúšam bod")
-#define MSG_MESH_X _UxGT("Index X")
-#define MSG_MESH_Y _UxGT("Index Y")
-#define MSG_MESH_EDIT_Z _UxGT("Hodnota Z")
-#define MSG_USER_MENU _UxGT("Vlastné príkazy")
-#define MSG_M48_TEST _UxGT("M48 Test sondy")
-#define MSG_M48_POINT _UxGT("M48 Bod")
-#define MSG_M48_DEVIATION _UxGT("Odchýlka")
-#define MSG_IDEX_MENU _UxGT("IDEX režim")
-#define MSG_OFFSETS_MENU _UxGT("Ofset nástrojov")
-#define MSG_IDEX_MODE_AUTOPARK _UxGT("Auto-parkovanie")
-#define MSG_IDEX_MODE_DUPLICATE _UxGT("Duplikácia")
-#define MSG_IDEX_MODE_MIRRORED_COPY _UxGT("Zrkadlená kópia")
-#define MSG_IDEX_MODE_FULL_CTRL _UxGT("Plná kontrola")
-#define MSG_X_OFFSET _UxGT("2. tryska X")
-#define MSG_Y_OFFSET _UxGT("2. tryska Y")
-#define MSG_Z_OFFSET _UxGT("2. tryska Z")
-#define MSG_UBL_DOING_G29 _UxGT("Vykonávam G29")
-#define MSG_UBL_TOOLS _UxGT("Nástroje UBL")
-#define MSG_UBL_LEVEL_BED _UxGT("UBL rovnanie")
-#define MSG_LCD_TILTING_MESH _UxGT("Vyrovnávam bod")
-#define MSG_UBL_MANUAL_MESH _UxGT("Manuálna sieť bodov")
-#define MSG_UBL_BC_INSERT _UxGT("Položte a zmerajte")
-#define MSG_UBL_BC_INSERT2 _UxGT("Zmerajte")
-#define MSG_UBL_BC_REMOVE _UxGT("Odstráňte a zmerajte")
-#define MSG_UBL_MOVING_TO_NEXT _UxGT("Presun na ďalší")
-#define MSG_UBL_ACTIVATE_MESH _UxGT("Aktivovať UBL")
-#define MSG_UBL_DEACTIVATE_MESH _UxGT("Deaktivovať UBL")
-#define MSG_UBL_SET_TEMP_BED _UxGT("Teplota podložky")
-#define MSG_UBL_BED_TEMP_CUSTOM MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND _UxGT("Teplota hotendu")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT _UxGT("Úprava siete bodov")
-#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("Upraviť vlastnú sieť")
-#define MSG_UBL_FINE_TUNE_MESH _UxGT("Doladiť sieť bodov")
-#define MSG_UBL_DONE_EDITING_MESH _UxGT("Koniec úprav siete")
-#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("Vlastná sieť")
-#define MSG_UBL_BUILD_MESH_MENU _UxGT("Vytvoriť sieť")
-#define MSG_UBL_BUILD_MESH_M1 _UxGT("Sieť bodov " PREHEAT_1_LABEL)
-#define MSG_UBL_BUILD_MESH_M2 _UxGT("Sieť bodov " PREHEAT_2_LABEL)
-#define MSG_UBL_BUILD_COLD_MESH _UxGT("Studená sieť bodov")
-#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("Upraviť výšku siete")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("Výška")
-#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Skontrolovať sieť")
-#define MSG_UBL_VALIDATE_MESH_M1 _UxGT("Kontrola siete " PREHEAT_1_LABEL)
-#define MSG_UBL_VALIDATE_MESH_M2 _UxGT("Kontrola siete " PREHEAT_2_LABEL)
-#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Kontrola vlast.siete")
-#define MSG_UBL_CONTINUE_MESH _UxGT("Pokračovať v sieti")
-#define MSG_UBL_MESH_LEVELING _UxGT("Sieťové rovnanie")
-#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("3-bodové rovnanie")
-#define MSG_UBL_GRID_MESH_LEVELING _UxGT("Mriežkové rovnanie")
-#define MSG_UBL_MESH_LEVEL _UxGT("Vyrovnať podložku")
-#define MSG_UBL_SIDE_POINTS _UxGT("Postranné body")
-#define MSG_UBL_MAP_TYPE _UxGT("Typ siete bodov")
-#define MSG_UBL_OUTPUT_MAP _UxGT("Exportovať sieť")
-#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("Exportovať do PC")
-#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("Exportovať do CSV")
-#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("Záloha do PC")
-#define MSG_UBL_INFO_UBL _UxGT("Info. o UBL do PC")
-#define MSG_UBL_FILLIN_AMOUNT _UxGT("Hustota mriežky")
-#define MSG_UBL_MANUAL_FILLIN _UxGT("Ručné vyplnenie")
-#define MSG_UBL_SMART_FILLIN _UxGT("Chytré vyplnenie")
-#define MSG_UBL_FILLIN_MESH _UxGT("Vyplniť mriežku")
-#define MSG_UBL_INVALIDATE_ALL _UxGT("Zrušiť všetko")
-#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("Zrušiť najbližší")
-#define MSG_UBL_FINE_TUNE_ALL _UxGT("Upraviť všetky")
-#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("Upraviť najbližší")
-#define MSG_UBL_STORAGE_MESH_MENU _UxGT("Úložisko sietí")
-#define MSG_UBL_STORAGE_SLOT _UxGT("Pamäťový slot")
-#define MSG_UBL_LOAD_MESH _UxGT("Načítať sieť bodov")
-#define MSG_UBL_SAVE_MESH _UxGT("Uložiť sieť bodov")
-#define MSG_MESH_LOADED _UxGT("Sieť %i načítaná")
-#define MSG_MESH_SAVED _UxGT("Sieť %i uložená")
-#define MSG_UBL_NO_STORAGE _UxGT("Nedostatok miesta")
-#define MSG_UBL_SAVE_ERROR _UxGT("Chyba: Ukladanie UBL")
-#define MSG_UBL_RESTORE_ERROR _UxGT("Chyba: Obnovenie UBL")
-#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Koniec kompenz. Z")
-#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("Postupné UBL")
+namespace Language_sk {
+ using namespace Language_en; // Inherit undefined strings from English
-#define MSG_LED_CONTROL _UxGT("Nastavenie LED")
-#define MSG_LEDS _UxGT("Svetlo")
-#define MSG_LED_PRESETS _UxGT("Prednastavené farby")
-#define MSG_SET_LEDS_RED _UxGT("Červená")
-#define MSG_SET_LEDS_ORANGE _UxGT("Oranžová")
-#define MSG_SET_LEDS_YELLOW _UxGT("Žltá")
-#define MSG_SET_LEDS_GREEN _UxGT("Zelená")
-#define MSG_SET_LEDS_BLUE _UxGT("Modrá")
-#define MSG_SET_LEDS_INDIGO _UxGT("Indigo")
-#define MSG_SET_LEDS_VIOLET _UxGT("Fialová")
-#define MSG_SET_LEDS_WHITE _UxGT("Biela")
-#define MSG_SET_LEDS_DEFAULT _UxGT("Obnoviť nastavenie")
-#define MSG_CUSTOM_LEDS _UxGT("Vlastná farba")
-#define MSG_INTENSITY_R _UxGT("Inten. červenej")
-#define MSG_INTENSITY_G _UxGT("Inten. zelenej")
-#define MSG_INTENSITY_B _UxGT("Inten. modrej")
-#define MSG_INTENSITY_W _UxGT("Inten. bielej")
-#define MSG_LED_BRIGHTNESS _UxGT("Jas")
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Slovak");
-#define MSG_MOVING _UxGT("Posúvam...")
-#define MSG_FREE_XY _UxGT("Uvolniť XY")
-#define MSG_MOVE_X _UxGT("Posunúť X")
-#define MSG_MOVE_Y _UxGT("Posunúť Y")
-#define MSG_MOVE_Z _UxGT("Posunúť Z")
-#define MSG_MOVE_E _UxGT("Extrudér")
-#define MSG_HOTEND_TOO_COLD _UxGT("Hotend je studený")
-#define MSG_MOVE_Z_DIST _UxGT("Posunúť o %smm")
-#define MSG_MOVE_01MM _UxGT("Posunúť o 0,1mm")
-#define MSG_MOVE_1MM _UxGT("Posunúť o 1mm")
-#define MSG_MOVE_10MM _UxGT("Posunúť o 10mm")
-#define MSG_SPEED _UxGT("Rýchlosť")
-#define MSG_BED_Z _UxGT("Výška podl.")
-#define MSG_NOZZLE _UxGT("Tryska")
-#define MSG_BED _UxGT("Podložka")
-#define MSG_CHAMBER _UxGT("Komora")
-#define MSG_FAN_SPEED _UxGT("Rýchlosť vent.")
-#define MSG_EXTRA_FAN_SPEED _UxGT("Rýchlosť ex. vent.")
-#define MSG_FLOW _UxGT("Prietok")
-#define MSG_CONTROL _UxGT("Ovládanie")
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fakt")
-#define MSG_AUTOTEMP _UxGT("Auto-teplota")
-#define MSG_LCD_ON _UxGT("Zap")
-#define MSG_LCD_OFF _UxGT("Vyp")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Vybrať")
-#define MSG_ACC _UxGT("Zrýchlenie")
-#define MSG_JERK _UxGT("Skok")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va-skok")
- #define MSG_VB_JERK _UxGT("Vb-skok")
- #define MSG_VC_JERK _UxGT("Vc-skok")
-#else
- #define MSG_VA_JERK _UxGT("Vx-skok")
- #define MSG_VB_JERK _UxGT("Vy-skok")
- #define MSG_VC_JERK _UxGT("Vz-skok")
-#endif
-#define MSG_VE_JERK _UxGT("Ve-skok")
-#define MSG_JUNCTION_DEVIATION _UxGT("Junction Dev")
-#define MSG_VELOCITY _UxGT("Rýchlosť")
-#define MSG_VMAX _UxGT("Vmax ")
-#define MSG_VMIN _UxGT("Vmin")
-#define MSG_VTRAV_MIN _UxGT("VTrav min")
-#define MSG_ACCELERATION _UxGT("Akcelerácia")
-#define MSG_AMAX _UxGT("Amax ")
-#define MSG_A_RETRACT _UxGT("A-retrakt")
-#define MSG_A_TRAVEL _UxGT("A-prejazd")
-#define MSG_STEPS_PER_MM _UxGT("Kroky/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("Akrokov/mm")
- #define MSG_BSTEPS _UxGT("Bkrokov/mm")
- #define MSG_CSTEPS _UxGT("Ckrokov/mm")
-#else
- #define MSG_ASTEPS _UxGT("Xkrokov/mm")
- #define MSG_BSTEPS _UxGT("Ykrokov/mm")
- #define MSG_CSTEPS _UxGT("Zkrokov/mm")
-#endif
-#define MSG_ESTEPS _UxGT("Ekrokov/mm")
-#define MSG_E1STEPS _UxGT("E1krokov/mm")
-#define MSG_E2STEPS _UxGT("E2krokov/mm")
-#define MSG_E3STEPS _UxGT("E3krokov/mm")
-#define MSG_E4STEPS _UxGT("E4krokov/mm")
-#define MSG_E5STEPS _UxGT("E5krokov/mm")
-#define MSG_E6STEPS _UxGT("E6krokov/mm")
-#define MSG_TEMPERATURE _UxGT("Teplota")
-#define MSG_MOTION _UxGT("Pohyb")
-#define MSG_FILAMENT _UxGT("Filament")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E na mm³")
-#define MSG_FILAMENT_DIAM _UxGT("Priem. fil.")
-#define MSG_FILAMENT_UNLOAD _UxGT("Vysunúť mm")
-#define MSG_FILAMENT_LOAD _UxGT("Zaviesť mm")
-#define MSG_ADVANCE_K _UxGT("K pre posun")
-#define MSG_CONTRAST _UxGT("Kontrast LCD")
-#define MSG_STORE_EEPROM _UxGT("Uložiť nastavenie")
-#define MSG_LOAD_EEPROM _UxGT("Načítať nastavenie")
-#define MSG_RESTORE_FAILSAFE _UxGT("Obnoviť nastavenie")
-#define MSG_INIT_EEPROM _UxGT("Inicializ. EEPROM")
-#define MSG_MEDIA_UPDATE _UxGT("Aktualizovať z SD")
-#define MSG_RESET_PRINTER _UxGT("Reštart. tlačiar.")
-#define MSG_REFRESH _UxGT("Obnoviť")
-#define MSG_WATCH _UxGT("Info. obrazovka")
-#define MSG_PREPARE _UxGT("Príprava tlače")
-#define MSG_TUNE _UxGT("Doladenie tlače")
-#define MSG_START_PRINT _UxGT("Spustiť tlač")
-#define MSG_BUTTON_NEXT _UxGT("Ďalší")
-#define MSG_BUTTON_INIT _UxGT("Inicial.")
-#define MSG_BUTTON_STOP _UxGT("Zastaviť")
-#define MSG_BUTTON_PRINT _UxGT("Tlačiť")
-#define MSG_BUTTON_RESET _UxGT("Vynulovať")
-#define MSG_BUTTON_CANCEL _UxGT("Zrušiť")
-#define MSG_BUTTON_DONE _UxGT("Hotovo")
-#define MSG_PAUSE_PRINT _UxGT("Pozastaviť tlač")
-#define MSG_RESUME_PRINT _UxGT("Obnoviť tlač")
-#define MSG_STOP_PRINT _UxGT("Zastaviť tlač")
-#define MSG_OUTAGE_RECOVERY _UxGT("Obnova po výp. nap.")
-#define MSG_MEDIA_MENU _UxGT("Tlačiť z SD")
-#define MSG_NO_MEDIA _UxGT("Žiadna SD karta")
-#define MSG_DWELL _UxGT("Spím...")
-#define MSG_USERWAIT _UxGT("Pokrač. kliknutím...")
-#define MSG_PRINT_PAUSED _UxGT("Tlač pozastavená")
-#define MSG_PRINTING _UxGT("Tlačím...")
-#define MSG_PRINT_ABORTED _UxGT("Tlač zrušená")
-#define MSG_NO_MOVE _UxGT("Žiadny pohyb.")
-#define MSG_KILLED _UxGT("PRERUŠENÉ. ")
-#define MSG_STOPPED _UxGT("ZASTAVENÉ. ")
-#define MSG_CONTROL_RETRACT _UxGT("Retrakt mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Výmena Re.mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Retraktovať V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Zdvih Z mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("S UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("S UnRet V")
-#define MSG_AUTORETRACT _UxGT("AutoRetr.")
-#define MSG_FILAMENT_SWAP_LENGTH _UxGT("Dĺžka výmeny")
-#define MSG_FILAMENT_PURGE_LENGTH _UxGT("Dĺžka vytlačenia")
-#define MSG_TOOL_CHANGE _UxGT("Výmena nástroja")
-#define MSG_TOOL_CHANGE_ZLIFT _UxGT("Zdvihnúť Z")
-#define MSG_SINGLENOZZLE_PRIME_SPD _UxGT("Primárna rýchl.")
-#define MSG_SINGLENOZZLE_RETRACT_SPD _UxGT("Rýchl. retrakcie")
-#define MSG_NOZZLE_STANDBY _UxGT("Záložná tryska")
-#define MSG_FILAMENTCHANGE _UxGT("Vymeniť filament")
-#define MSG_FILAMENTLOAD _UxGT("Zaviesť filament")
-#define MSG_FILAMENTUNLOAD _UxGT("Vysunúť filament")
-#define MSG_FILAMENTUNLOAD_ALL _UxGT("Vysunúť všetko")
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" pripravená.");
+ PROGMEM Language_Str MSG_YES = _UxGT("ÁNO");
+ PROGMEM Language_Str MSG_NO = _UxGT("NIE");
+ PROGMEM Language_Str MSG_BACK = _UxGT("Naspäť");
+ PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Ruším...");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Karta vložená");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Karta vybraná");
+ PROGMEM Language_Str MSG_MEDIA_RELEASED = _UxGT("Karta odpojená");
+ PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Čakám na kartu");
+ PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Chyba čítania karty");
+ PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB zaria. odstrán.");
+ PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Chyba spúšťania USB");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstopy"); // max 8 znakov
+ PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft. endstopy");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Hlavná ponuka");
+ PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Pokročilé nastav.");
+ PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfigurácia");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Auto-štart");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Uvolniť motory");
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Ponuka ladenia");
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test uk. priebehu");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Domovská pozícia");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Domov os X");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Domov os Y");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Domov os Z");
+ PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto-zarovn. Z");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Parkovanie XYZ");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Kliknutím spusťte");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Ďalší bod");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Meranie hotové!");
+ PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Výška rovnania");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Nastaviť ofsety");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Ofsety nastavené");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Nastaviť začiatok");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Zahriať ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Zahriať ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Zahriať ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Zahriať ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Zahriať ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Zahriať ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Zahriať ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" hotend");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" hotend ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" hotend ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" hotend ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" hotend ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" hotend ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" hotend ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" všetko");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" podlož");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" nast.");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Zahriať ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Zahriať ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Zahriať ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Zahriať ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Zahriať ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Zahriať ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Zahriať ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" hotend");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" hotend ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" hotend ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" hotend ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" hotend ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" hotend ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" hotend ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" všetko");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" podlož");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Zahriať ") PREHEAT_2_LABEL _UxGT(" nast.");
+ PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Vlastná teplota");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Schladiť");
+ PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Nastavenie lasera");
+ PROGMEM Language_Str MSG_LASER_OFF = _UxGT("Vypnúť laser");
+ PROGMEM Language_Str MSG_LASER_ON = _UxGT("Zapnúť laser");
+ PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Výkon lasera");
+ PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Nastavenie vretena");
+ PROGMEM Language_Str MSG_SPINDLE_OFF = _UxGT("Vypnúť vreteno");
+ PROGMEM Language_Str MSG_SPINDLE_ON = _UxGT("Zapnúť vreteno");
+ PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Výkon vretena");
+ PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Spätný chod");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Zapnúť napájanie");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Vypnúť napájanie");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Vytlačiť (extr.)");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Vytiahnuť (retr.)");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Posunúť osy");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Vyrovnanie podložky");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Vyrovnať podložku");
+ PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Vyrovnať rohy");
+ PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Ďalší roh");
+ PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Editor sieťe bodov");
+ PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Upraviť sieť bodov");
+ PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Koniec úprav siete");
+ PROGMEM Language_Str MSG_PROBING_MESH = _UxGT("Skúšam bod");
+ PROGMEM Language_Str MSG_MESH_X = _UxGT("Index X");
+ PROGMEM Language_Str MSG_MESH_Y = _UxGT("Index Y");
+ PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Hodnota Z");
+ PROGMEM Language_Str MSG_USER_MENU = _UxGT("Vlastné príkazy");
+ PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Test sondy");
+ PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Bod");
+ PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Odchýlka");
+ PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("IDEX režim");
+ PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Ofset nástrojov");
+ PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-parkovanie");
+ PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplikácia");
+ PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Zrkadlená kópia");
+ PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Plná kontrola");
+ PROGMEM Language_Str MSG_X_OFFSET = _UxGT("2. tryska X");
+ PROGMEM Language_Str MSG_Y_OFFSET = _UxGT("2. tryska Y");
+ PROGMEM Language_Str MSG_Z_OFFSET = _UxGT("2. tryska Z");
+ PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Vykonávam G29");
+ PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Nástroje UBL");
+ PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("UBL rovnanie");
+ PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Vyrovnávam bod");
+ PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Manuálna sieť bodov");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Položte a zmerajte");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Zmerajte");
+ PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Odstráňte a zmerajte");
+ PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Presun na ďalší");
+ PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Aktivovať UBL");
+ PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Deaktivovať UBL");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Teplota podložky");
+ PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Teplota podložky");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Teplota hotendu");
+ PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Teplota hotendu");
+ PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Úprava siete bodov");
+ PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Upraviť vlastnú sieť");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Doladiť sieť bodov");
+ PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Koniec úprav siete");
+ PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Vlastná sieť");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Vytvoriť sieť");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = _UxGT("Sieť bodov ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("Sieť bodov ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Studená sieť bodov");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Upraviť výšku siete");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Výška");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Skontrolovať sieť");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("Kontrola siete ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Kontrola siete ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Kontrola vlast.siete");
+ PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 ohrev podlž.");
+ PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 ohrev trysky");
+ PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Ručné čistenie...");
+ PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Čistenie pevn. dĺž.");
+ PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Čistenie dokončené");
+ PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 zrušený");
+ PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Opúšťam G26");
+ PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Pokračovať v sieti");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Sieťové rovnanie");
+ PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-bodové rovnanie");
+ PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Mriežkové rovnanie");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Vyrovnať podložku");
+ PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Postranné body");
+ PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Typ siete bodov");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Exportovať sieť");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Exportovať do PC");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Exportovať do CSV");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Záloha do PC");
+ PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Info. o UBL do PC");
+ PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Hustota mriežky");
+ PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Ručné vyplnenie");
+ PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Chytré vyplnenie");
+ PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Vyplniť mriežku");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Zrušiť všetko");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Zrušiť najbližší");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Upraviť všetky");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Upraviť najbližší");
+ PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Úložisko sietí");
+ PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Pamäťový slot");
+ PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Načítať sieť bodov");
+ PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Uložiť sieť bodov");
+ PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("M117 Sieť %i načítaná");
+ PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("M117 Sieť %i uložená");
+ PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Nedostatok miesta");
+ PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Chyba: Ukladanie UBL");
+ PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Chyba: Obnovenie UBL");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z-Ofset: ");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Koniec kompenz. Z");
+ PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Postupné UBL");
+ PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Studená sieť bodov");
+ PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Chytré vyplnenie");
+ PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Skontrolovať sieť");
+ PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Точная настр. всего");
+ PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Skontrolovať sieť");
+ PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Точная настр. всего");
+ PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Uložiť sieť bodov");
-#define MSG_INIT_MEDIA _UxGT("Načítať SD kartu")
-#define MSG_CHANGE_MEDIA _UxGT("Vymeniť SD kartu")
-#define MSG_RELEASE_MEDIA _UxGT("Odpojiť SD kartu")
-#define MSG_ZPROBE_OUT _UxGT("Sonda Z mimo podl.")
-#define MSG_SKEW_FACTOR _UxGT("Faktor skosenia")
-#define MSG_BLTOUCH _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST _UxGT("Cmd: Self-Test")
-#define MSG_BLTOUCH_RESET _UxGT("Cmd: Reset")
-#define MSG_BLTOUCH_STOW _UxGT("Cmd: Zasunúť")
-#define MSG_BLTOUCH_DEPLOY _UxGT("Cmd: Vysunúť")
-#define MSG_BLTOUCH_SW_MODE _UxGT("Cmd: Režim SW")
-#define MSG_BLTOUCH_5V_MODE _UxGT("Cmd: Režim 5V")
-#define MSG_BLTOUCH_OD_MODE _UxGT("Cmd: Režim OD")
-#define MSG_BLTOUCH_MODE_STORE _UxGT("Cmd: Ulož. režim")
-#define MSG_BLTOUCH_MODE_STORE_5V _UxGT("Prepnúť do 5V")
-#define MSG_BLTOUCH_MODE_STORE_OD _UxGT("Prepnúť do OD")
-#define MSG_BLTOUCH_MODE_ECHO _UxGT("Zobraziť režim")
-#define MSG_BLTOUCH_MODE_CHANGE _UxGT("POZOR: Zlé nastav. môže spôsobiť poškoden. Pokračovať?")
-#define MSG_TOUCHMI_PROBE _UxGT("TouchMI")
-#define MSG_TOUCHMI_INIT _UxGT("Inicializ. TouchMI")
-#define MSG_TOUCHMI_ZTEST _UxGT("Test ofsetu Z")
-#define MSG_TOUCHMI_SAVE _UxGT("Uložiť")
-#define MSG_MANUAL_DEPLOY_TOUCHMI _UxGT("Zasunúť TouchMI")
-#define MSG_MANUAL_DEPLOY _UxGT("Zasunúť sondu Z")
-#define MSG_MANUAL_STOW _UxGT("Vysunúť sondu Z")
-#define MSG_HOME_FIRST _UxGT("Najskôr os %s%s%s domov")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Ofset sondy Z")
-#define MSG_BABYSTEP_X _UxGT("Babystep X")
-#define MSG_BABYSTEP_Y _UxGT("Babystep Y")
-#define MSG_BABYSTEP_Z _UxGT("Babystep Z")
-#define MSG_BABYSTEP_TOTAL _UxGT("Celkom")
-#define MSG_ENDSTOP_ABORT _UxGT("Zastavenie Endstop")
-#define MSG_HEATING_FAILED_LCD _UxGT("Chyba ohrevu")
-#define MSG_HEATING_FAILED_LCD_BED _UxGT("Chyba ohrevu podl.")
-#define MSG_HEATING_FAILED_LCD_CHAMBER _UxGT("Chyba ohrevu komory")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Chyba: REDUND. TEP.")
-#define MSG_THERMAL_RUNAWAY _UxGT("TEPLOTNÝ SKOK")
-#define MSG_THERMAL_RUNAWAY_BED _UxGT("TEPLOTNÝ SKOK PODL.")
-#define MSG_THERMAL_RUNAWAY_CHAMBER _UxGT("TEPLOTNÝ SKOK KOMO.")
-#define MSG_ERR_MAXTEMP _UxGT("Chyba: MAXTEMP")
-#define MSG_ERR_MINTEMP _UxGT("Chyba: MINTEMP")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Chyba: MAXTEMP PODL.")
-#define MSG_ERR_MINTEMP_BED _UxGT("Chyba: MINTEMP PODL.")
-#define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Chyba: MAXTEMP KOMO.")
-#define MSG_ERR_MINTEMP_CHAMBER _UxGT("Chyba: MINTEMP KOMO.")
-#define MSG_ERR_Z_HOMING _UxGT("Najskôr os XY domov")
-#define MSG_HALTED _UxGT("TLAČIAREŇ ZASTAVENÁ")
-#define MSG_PLEASE_RESET _UxGT("Reštartuje ju")
-#define MSG_SHORT_DAY _UxGT("d")
-#define MSG_SHORT_HOUR _UxGT("h")
-#define MSG_SHORT_MINUTE _UxGT("m")
-#define MSG_HEATING _UxGT("Ohrev...")
-#define MSG_COOLING _UxGT("Ochladzovanie...")
-#define MSG_BED_HEATING _UxGT("Ohrev podložky...")
-#define MSG_BED_COOLING _UxGT("Ochladz. podložky...")
-#define MSG_CHAMBER_HEATING _UxGT("Ohrev komory...")
-#define MSG_CHAMBER_COOLING _UxGT("Ochladz. komory...")
-#define MSG_DELTA_CALIBRATE _UxGT("Delta kalibrácia")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Kalibrovať X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Kalibrovať Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Kalibrovať Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Kalibrovať stred")
-#define MSG_DELTA_SETTINGS _UxGT("Delta nastavenia")
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Auto-kalibrácia")
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Nast. výšku delty")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE _UxGT("Ofset sondy Z")
-#define MSG_DELTA_DIAG_ROD _UxGT("Diag. rameno")
-#define MSG_DELTA_HEIGHT _UxGT("Výška")
-#define MSG_DELTA_RADIUS _UxGT("Polomer")
-#define MSG_INFO_MENU _UxGT("O tlačiarni")
-#define MSG_INFO_PRINTER_MENU _UxGT("Info. o tlačiarni")
-#define MSG_3POINT_LEVELING _UxGT("3-bodové rovnanie")
-#define MSG_LINEAR_LEVELING _UxGT("Lineárne rovnanie")
-#define MSG_BILINEAR_LEVELING _UxGT("Bilineárne rovnanie")
-#define MSG_UBL_LEVELING _UxGT("UBL rovnanie")
-#define MSG_MESH_LEVELING _UxGT("Mriežkové rovnanie")
-#define MSG_INFO_STATS_MENU _UxGT("Štatistika")
-#define MSG_INFO_BOARD_MENU _UxGT("Info. o doske")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Termistory")
-#define MSG_INFO_EXTRUDERS _UxGT("Extrudéry")
-#define MSG_INFO_BAUDRATE _UxGT("Rýchlosť")
-#define MSG_INFO_PROTOCOL _UxGT("Protokol")
-#define MSG_CASE_LIGHT _UxGT("Osvetlenie")
-#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Jas svetla")
+ PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Nastavenie LED");
+ PROGMEM Language_Str MSG_LEDS = _UxGT("Svetlo");
+ PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Prednastavené farby");
+ PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Červená");
+ PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Oranžová");
+ PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Žltá");
+ PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Zelená");
+ PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Modrá");
+ PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
+ PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Fialová");
+ PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Biela");
+ PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Obnoviť nastavenie");
+ PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Vlastná farba");
+ PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Inten. červenej");
+ PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Inten. zelenej");
+ PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Inten. modrej");
+ PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Inten. bielej");
+ PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Jas");
-#define MSG_EXPECTED_PRINTER _UxGT("Nesprávna tlačiareň")
+ PROGMEM Language_Str MSG_MOVING = _UxGT("Posúvam...");
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("Uvolniť XY");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Posunúť X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Posunúť Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Posunúť Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extrudér");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Extrudér ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Extrudér ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Extrudér ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Extrudér ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Extrudér ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Extrudér ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Hotend je studený");
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Posunúť o %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Posunúť o 0,1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Posunúť o 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Posunúť o 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Rýchlosť");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Výška podl.");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Tryska");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Tryska ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Tryska ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Tryska ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Tryska ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Tryska ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Tryska ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Podložka");
+ PROGMEM Language_Str MSG_CHAMBER = _UxGT("Komora");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Rýchlosť vent.");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Rýchlosť vent. 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Rýchlosť vent. 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Rýchlosť vent. 3");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Rýchlosť ex. vent.");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1 = _UxGT("Rýchlosť ex. vent. 1");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2 = _UxGT("Rýchlosť ex. vent. 2");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3 = _UxGT("Rýchlosť ex. vent. 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Prietok");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Prietok ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Prietok ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Prietok ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Prietok ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Prietok ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Prietok ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Ovládanie");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fakt");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Auto-teplota");
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("Zap");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Vyp");
+ PROGMEM Language_Str MSG_AUTOTUNE_PID = _UxGT("PID kalibrácia");
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E0 = _UxGT("PID kalibrácia ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E1 = _UxGT("PID kalibrácia ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E2 = _UxGT("PID kalibrácia ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E3 = _UxGT("PID kalibrácia ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E4 = _UxGT("PID kalibrácia ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AUTOTUNE_PID_E5 = _UxGT("PID kalibrácia ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
+ PROGMEM Language_Str MSG_PID_P_E0 = _UxGT("PID-P ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_P_E1 = _UxGT("PID-P ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_P_E2 = _UxGT("PID-P ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_P_E3 = _UxGT("PID-P ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_P_E4 = _UxGT("PID-P ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_P_E5 = _UxGT("PID-P ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
+ PROGMEM Language_Str MSG_PID_I_E0 = _UxGT("PID-I ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_I_E1 = _UxGT("PID-I ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_I_E2 = _UxGT("PID-I ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_I_E3 = _UxGT("PID-I ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_I_E4 = _UxGT("PID-I ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_I_E5 = _UxGT("PID-I ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
+ PROGMEM Language_Str MSG_PID_D_E0 = _UxGT("PID-D ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_D_E1 = _UxGT("PID-D ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_D_E2 = _UxGT("PID-D ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_D_E3 = _UxGT("PID-D ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_D_E4 = _UxGT("PID-D ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_D_E5 = _UxGT("PID-D ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
+ PROGMEM Language_Str MSG_PID_C_E0 = _UxGT("PID-C ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_C_E1 = _UxGT("PID-C ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_C_E2 = _UxGT("PID-C ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_C_E3 = _UxGT("PID-C ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_C_E4 = _UxGT("PID-C ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_C_E5 = _UxGT("PID-C ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Vybrať");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Vybrať ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Vybrať ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Vybrať ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Vybrať ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Vybrať ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Vybrať ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Zrýchlenie");
+ PROGMEM Language_Str MSG_JERK = _UxGT("Skok");
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-skok");
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-skok");
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-skok");
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-skok");
+ PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
+ PROGMEM Language_Str MSG_VELOCITY = _UxGT("Rýchlosť");
+ PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A;
+ PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B;
+ PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C;
+ PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E;
+ PROGMEM Language_Str MSG_VMAX_E0 = _UxGT("Vmax ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_VMAX_E1 = _UxGT("Vmax ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_VMAX_E2 = _UxGT("Vmax ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_VMAX_E3 = _UxGT("Vmax ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_VMAX_E4 = _UxGT("Vmax ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_VMAX_E5 = _UxGT("Vmax ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_VMIN = _UxGT("Vmin");
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VPrej Min");
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Akcelerácia");
+ PROGMEM Language_Str MSG_AMAX_A = _UxGT("Amax ") LCD_STR_A;
+ PROGMEM Language_Str MSG_AMAX_B = _UxGT("Amax ") LCD_STR_B;
+ PROGMEM Language_Str MSG_AMAX_C = _UxGT("Amax ") LCD_STR_C;
+ PROGMEM Language_Str MSG_AMAX_E = _UxGT("Amax ") LCD_STR_E;
+ PROGMEM Language_Str MSG_AMAX_E0 = _UxGT("Amax ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AMAX_E1 = _UxGT("Amax ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AMAX_E2 = _UxGT("Amax ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AMAX_E3 = _UxGT("Amax ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AMAX_E4 = _UxGT("Amax ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AMAX_E5 = _UxGT("Amax ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-retrakt");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-prejazd");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Kroky/mm");
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT("krokov/mm");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT("krokov/mm");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT("krokov/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("Ekrokov/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT("krokov/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT("krokov/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT("krokov/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT("krokov/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT("krokov/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT("krokov/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Teplota");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Pohyb");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E na mm³");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Priem. fil.");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Priem. fil. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Priem. fil. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Priem. fil. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Priem. fil. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Priem. fil. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Priem. fil. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Vysunúť mm");
+ PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Zaviesť mm");
+ PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("K pre posun");
+ PROGMEM Language_Str MSG_ADVANCE_K_E0 = _UxGT("K pre posun ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_ADVANCE_K_E1 = _UxGT("K pre posun ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_ADVANCE_K_E2 = _UxGT("K pre posun ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_ADVANCE_K_E3 = _UxGT("K pre posun ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_ADVANCE_K_E4 = _UxGT("K pre posun ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_ADVANCE_K_E5 = _UxGT("K pre posun ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("Kontrast LCD");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Uložiť nastavenie");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Načítať nastavenie");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Obnoviť nastavenie");
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Inicializ. EEPROM");
+ PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Aktualizovať z SD");
+ PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Reštart. tlačiar.");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Obnoviť");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Info. obrazovka");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Príprava tlače");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Doladenie tlače");
+ PROGMEM Language_Str MSG_START_PRINT = _UxGT("Spustiť tlač");
+ PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Ďalší");
+ PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Inicial.");
+ PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Zastaviť");
+ PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Tlačiť");
+ PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Vynulovať");
+ PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Zrušiť");
+ PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Hotovo");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pozastaviť tlač");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Obnoviť tlač");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Zastaviť tlač");
+ PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Obnova po výp. nap.");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Tlačiť z SD");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Žiadna SD karta");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Spím...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Pokrač. kliknutím...");
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Tlač pozastavená");
+ PROGMEM Language_Str MSG_PRINTING = _UxGT("Tlačím...");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Tlač zrušená");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Žiadny pohyb.");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("PRERUŠENÉ. ");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("ZASTAVENÉ. ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retrakt mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Výmena Re.mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retraktovať V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Zdvih Z mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("UnRet V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("AutoRetr.");
+ PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Dĺžka výmeny");
+ PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Dĺžka vytlačenia");
+ PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Výmena nástroja");
+ PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Zdvihnúť Z");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD = _UxGT("Primárna rýchl.");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD = _UxGT("Rýchl. retrakcie");
+ PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Záložná tryska");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Vymeniť filament");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Vymeniť filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Vymeniť filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Vymeniť filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Vymeniť filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Vymeniť filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Vymeniť filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Zaviesť filament");
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E0 = _UxGT("Zaviesť filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E1 = _UxGT("Zaviesť filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E2 = _UxGT("Zaviesť filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E3 = _UxGT("Zaviesť filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E4 = _UxGT("Zaviesť filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E5 = _UxGT("Zaviesť filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Vysunúť filament");
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0 = _UxGT("Vysunúť filament ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1 = _UxGT("Vysunúť filament ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2 = _UxGT("Vysunúť filament ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3 = _UxGT("Vysunúť filament ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4 = _UxGT("Vysunúť filament ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5 = _UxGT("Vysunúť filament ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Vysunúť všetko");
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Načítať SD kartu");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Vymeniť SD kartu");
+ PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Odpojiť SD kartu");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z mimo podl.");
+ PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Faktor skosenia");
+ PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Cmd: Self-Test");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Cmd: Reset");
+ PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Cmd: Zasunúť");
+ PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Cmd: Vysunúť");
+ PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("Cmd: Režim SW");
+ PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("Cmd: Režim 5V");
+ PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("Cmd: Režim OD");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Cmd: Ulož. režim");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Prepnúť do 5V");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Prepnúť do OD");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Zobraziť režim");
+ PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("POZOR: Zlé nastav. môže spôsobiť poškoden. Pokračovať?");
+ PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Inicializ. TouchMI");
+ PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Test ofsetu Z");
+ PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Uložiť");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Zasunúť TouchMI");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Zasunúť sondu Z");
+ PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Vysunúť sondu Z");
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Najskôr os %s%s%s domov");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Ofset sondy Z");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
+ PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Celkom");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Zastavenie Endstop");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Chyba ohrevu");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED = _UxGT("Chyba ohrevu podl.");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_CHAMBER = _UxGT("Chyba ohrevu komory");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Chyba: REDUND. TEP.");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("TEPLOTNÝ SKOK");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("TEPLOTNÝ SKOK PODL.");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("TEPLOTNÝ SKOK KOMO.");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Chyba: MAXTEMP");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Chyba: MINTEMP");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("Chyba: MAXTEMP PODL.");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Chyba: MINTEMP PODL.");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER = _UxGT("Chyba: MAXTEMP KOMO.");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER = _UxGT("Chyba: MINTEMP KOMO.");
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Najskôr os XY domov");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("TLAČIAREŇ ZASTAVENÁ");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Reštartuje ju");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d");
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h");
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m");
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Ohrev...");
+ PROGMEM Language_Str MSG_COOLING = _UxGT("Ochladzovanie...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Ohrev podložky...");
+ PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Ochladz. podložky...");
+ PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Ohrev komory...");
+ PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Ochladz. komory...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta kalibrácia");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibrovať X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibrovať Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibrovať Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibrovať stred");
+ PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Delta nastavenia");
+ PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto-kalibrácia");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Nast. výšku delty");
+ PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Ofset sondy Z");
+ PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Diag. rameno");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Výška");
+ PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Polomer");
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("O tlačiarni");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Info. o tlačiarni");
+ PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-bodové rovnanie");
+ PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Lineárne rovnanie");
+ PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Bilineárne rovnanie");
+ PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("UBL rovnanie");
+ PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Mriežkové rovnanie");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Štatistika");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Info. o doske");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistory");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrudéry");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Rýchlosť");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokol");
+ PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Tepl. ochrana: VYP");
+ PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Tepl. ochrana: ZAP");
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Počet tlačí")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Dokončené")
- #define MSG_INFO_PRINT_TIME _UxGT("Celkový čas")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Najdlhšia tlač")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Celkom vytlačené")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Tlače")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Hotovo")
- #define MSG_INFO_PRINT_TIME _UxGT("Čas")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Najdlhšia")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Vytlačené")
-#endif
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Osvetlenie");
+ PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jas svetla");
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Nesprávna tlačiareň");
-#define MSG_INFO_MIN_TEMP _UxGT("Teplota min")
-#define MSG_INFO_MAX_TEMP _UxGT("Teplota max")
-#define MSG_INFO_PSU _UxGT("Nap. zdroj")
-#define MSG_DRIVE_STRENGTH _UxGT("Budenie motorov")
-#define MSG_DAC_PERCENT _UxGT("Motor %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("Uložiť do EEPROM")
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Počet tlačí");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Dokončené");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Celkový čas");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Najdlhšia tlač");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Celkom vytlačené");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Tlače");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Hotovo");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Čas");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Najdlhšia");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Vytlačené");
+ #endif
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("PAUZA TLAČE")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("ZAVEDENIE FILAMENTU")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("VYSUNUTIE FILAMENTU")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("MOŽNOSTI POKRAČ.:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Vytlačiť viacej")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Obnoviť tlač")
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Tryska: ")
-#define MSG_RUNOUT_SENSOR _UxGT("Senzor filamentu")
-#define MSG_RUNOUT_DISTANCE_MM _UxGT("Vzd. mm fil. senz.")
-#define MSG_ERR_HOMING_FAILED _UxGT("Parkovanie zlyhalo")
-#define MSG_ERR_PROBING_FAILED _UxGT("Kalibrácia zlyhala")
-#define MSG_M600_TOO_COLD _UxGT("M600: Príliš studený")
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Teplota min");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Teplota max");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Nap. zdroj");
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Budenie motorov");
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("Motor %");
+ PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("CHYBA KOMUNIKÁ. TMC");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Uložiť do EEPROM");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("VÝMENA FILAMENTU");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("PAUZA TLAČE");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ZAVEDENIE FILAMENTU");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("VYSUNUTIE FILAMENTU");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("MOŽNOSTI POKRAČ.:");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Vytlačiť viacej");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Obnoviť tlač");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Tryska: ");
+ PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Senzor filamentu");
+ PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Vzd. mm fil. senz.");
+ PROGMEM Language_Str MSG_LCD_HOMING_FAILED = _UxGT("Parkovanie zlyhalo");
+ PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Kalibrácia zlyhala");
+ PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: Príliš studený");
-#define MSG_MMU2_FILAMENT_CHANGE_HEADER _UxGT("VÝMENA FILAMENTU")
-#define MSG_MMU2_CHOOSE_FILAMENT_HEADER _UxGT("VYBERTE FILAMENT")
-#define MSG_MMU2_MENU _UxGT("MMU2")
-#define MSG_MMU2_WRONG_FIRMWARE _UxGT("Aktualizujte FW MMU!")
-#define MSG_MMU2_NOT_RESPONDING _UxGT("MMU potrebuje zásah.")
-#define MSG_MMU2_RESUME _UxGT("Obnoviť tlač")
-#define MSG_MMU2_RESUMING _UxGT("Obnovovanie...")
-#define MSG_MMU2_LOAD_FILAMENT _UxGT("Zaviesť filament")
-#define MSG_MMU2_LOAD_ALL _UxGT("Zaviesť všetky")
-#define MSG_MMU2_LOAD_TO_NOZZLE _UxGT("Zaviesť po trysku")
-#define MSG_MMU2_EJECT_FILAMENT _UxGT("Vysunúť filament")
-#define MSG_MMU2_EJECT_FILAMENT0 _UxGT("Vysunúť filament 1")
-#define MSG_MMU2_EJECT_FILAMENT1 _UxGT("Vysunúť filament 2")
-#define MSG_MMU2_EJECT_FILAMENT2 _UxGT("Vysunúť filament 3")
-#define MSG_MMU2_EJECT_FILAMENT3 _UxGT("Vysunúť filament 4")
-#define MSG_MMU2_EJECT_FILAMENT4 _UxGT("Vysunúť filament 5")
-#define MSG_MMU2_UNLOAD_FILAMENT _UxGT("Vyňať filament")
-#define MSG_MMU2_LOADING_FILAMENT _UxGT("Zavádzanie fil. %i...")
-#define MSG_MMU2_EJECTING_FILAMENT _UxGT("Vysúvanie fil. ...")
-#define MSG_MMU2_UNLOADING_FILAMENT _UxGT("Vysúvanie fil. ...")
-#define MSG_MMU2_ALL _UxGT("Všetky")
-#define MSG_MMU2_FILAMENT0 _UxGT("Filament 1")
-#define MSG_MMU2_FILAMENT1 _UxGT("Filament 2")
-#define MSG_MMU2_FILAMENT2 _UxGT("Filament 3")
-#define MSG_MMU2_FILAMENT3 _UxGT("Filament 4")
-#define MSG_MMU2_FILAMENT4 _UxGT("Filament 5")
-#define MSG_MMU2_RESET _UxGT("Reštartovať MMU")
-#define MSG_MMU2_RESETTING _UxGT("Reštart MMU...")
-#define MSG_MMU2_EJECT_RECOVER _UxGT("Odstráňte, kliknite")
+ PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("VYBERTE FILAMENT");
+ PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU2");
+ PROGMEM Language_Str MSG_MMU2_WRONG_FIRMWARE = _UxGT("Aktualizujte FW MMU!");
+ PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU potrebuje zásah.");
+ PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Obnoviť tlač");
+ PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Obnovovanie...");
+ PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Zaviesť filament");
+ PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Zaviesť všetky");
+ PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Zaviesť po trysku");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Vysunúť filament");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT0 = _UxGT("Vysunúť filament 1");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT1 = _UxGT("Vysunúť filament 2");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT2 = _UxGT("Vysunúť filament 3");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT3 = _UxGT("Vysunúť filament 4");
+ PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT4 = _UxGT("Vysunúť filament 5");
+ PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Vyňať filament");
+ PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Zavádzanie fil. %i...");
+ PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Vysúvanie fil. ...");
+ PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Vysúvanie fil. ...");
+ PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Všetky");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT0 = _UxGT("Filament 1");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT1 = _UxGT("Filament 2");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT2 = _UxGT("Filament 3");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT3 = _UxGT("Filament 4");
+ PROGMEM Language_Str MSG_MMU2_FILAMENT4 = _UxGT("Filament 5");
+ PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Reštartovať MMU");
+ PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Reštart MMU...");
+ PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Odstráňte, kliknite");
-#define MSG_MIX _UxGT("Mix")
-#define MSG_MIX_COMPONENT _UxGT("Zložka")
-#define MSG_MIXER _UxGT("Mixér")
-#define MSG_GRADIENT _UxGT("Gradient")
-#define MSG_FULL_GRADIENT _UxGT("Plný gradient")
-#define MSG_TOGGLE_MIX _UxGT("Prepnúť mix")
-#define MSG_CYCLE_MIX _UxGT("Cyklický mix")
-#define MSG_GRADIENT_MIX _UxGT("Gradientný mix")
-#define MSG_REVERSE_GRADIENT _UxGT("Otočiť gradient")
-#define MSG_ACTIVE_VTOOL _UxGT("Aktívny V-tool")
-#define MSG_START_VTOOL _UxGT("Počiat. V-tool")
-#define MSG_END_VTOOL _UxGT("Konečn. V-tool")
-#define MSG_GRADIENT_ALIAS _UxGT("Alias V-tool")
-#define MSG_RESET_VTOOLS _UxGT("Vynulovať V-tools")
-#define MSG_COMMIT_VTOOL _UxGT("Uložiť V-tool Mix")
-#define MSG_VTOOLS_RESET _UxGT("V-tools vynulované")
-#define MSG_START_Z _UxGT("Počiat.Z")
-#define MSG_END_Z _UxGT("Konečn.Z")
-#define MSG_GAMES _UxGT("Hry")
-#define MSG_BRICKOUT _UxGT("Brickout")
-#define MSG_INVADERS _UxGT("Nájazdníci")
-#define MSG_SNAKE _UxGT("Had")
-#define MSG_MAZE _UxGT("Bludisko")
+ PROGMEM Language_Str MSG_MIX = _UxGT("Mix");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_1 = _UxGT("Zložka 1");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_2 = _UxGT("Zložka 2");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_3 = _UxGT("Zložka 3");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_4 = _UxGT("Zložka 4");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_5 = _UxGT("Zložka 5");
+ PROGMEM Language_Str MSG_MIX_COMPONENT_6 = _UxGT("Zložka 6");
+ PROGMEM Language_Str MSG_MIXER = _UxGT("Mixér");
+ PROGMEM Language_Str MSG_GRADIENT = _UxGT("Gradient");
+ PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Plný gradient");
+ PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Prepnúť mix");
+ PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Cyklický mix");
+ PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Gradientný mix");
+ PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Otočiť gradient");
+ PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Aktívny V-tool");
+ PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Počiat. V-tool");
+ PROGMEM Language_Str MSG_END_VTOOL = _UxGT("Konečn. V-tool");
+ PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
+ PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Vynulovať V-tools");
+ PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Uložiť V-tool Mix");
+ PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-tools vynulované");
+ PROGMEM Language_Str MSG_START_Z = _UxGT("Počiat.Z:");
+ PROGMEM Language_Str MSG_END_Z = _UxGT("Konečn.Z:");
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-// ...or up to 2 lines on a 3-line display
-//
-#if LCD_HEIGHT >= 4
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Stlačte tlačidlo")
- #define MSG_ADVANCED_PAUSE_WAITING_2 _UxGT("pre obnovu tlače")
- #define MSG_PAUSE_PRINT_INIT_1 _UxGT("Parkovanie...")
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Čakajte prosím")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("na spustenie")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("výmeny filamentu")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Vložte filament")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("a stlačte tlačidlo")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("pre pokračovanie")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Stlačte tlačidlo")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("pre ohrev trysky")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Ohrev trysky")
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Čakajte prosím...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Čakajte prosím")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("na vysunutie")
- #define MSG_FILAMENT_CHANGE_UNLOAD_3 _UxGT("filamentu")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Čakajte prosím")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("na zavedenie")
- #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("filamentu")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Čakajte prosím")
- #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("na vytlačenie")
- #define MSG_FILAMENT_CHANGE_PURGE_3 _UxGT("filamentu")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Stlačte tlačidlo")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_2 _UxGT("pre dokončenie")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_3 _UxGT("vytláčania filam.")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Čakajte prosím na")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("obnovenie tlače...")
-#else // LCD_HEIGHT < 4
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Kliknite pre pokr.")
- #define MSG_PAUSE_PRINT_INIT_1 _UxGT("Parkovanie...")
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Čakajte prosím...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Vložte a kliknite")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Kliknite pre ohrev")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Ohrev...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Vysúvanie...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Zavádzanie...")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Vytlačovanie...")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Klik. pre dokonč.")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Pokračovanie...")
-#endif // LCD_HEIGHT < 4
-#define MSG_TMC_DRIVERS _UxGT("Ovládače TMC")
-#define MSG_TMC_CURRENT _UxGT("Prúd ovládača")
-#define MSG_TMC_HYBRID_THRS _UxGT("Hybridný prah")
-#define MSG_TMC_HOMING_THRS _UxGT("Bezsenzor. domov")
-#define MSG_TMC_STEPPING_MODE _UxGT("Režim krokovania")
-#define MSG_TMC_STEALTH_ENABLED _UxGT("StealthChop zapnutý")
+ PROGMEM Language_Str MSG_GAMES = _UxGT("Hry");
+ PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
+ PROGMEM Language_Str MSG_INVADERS = _UxGT("Nájazdníci");
+ PROGMEM Language_Str MSG_SNAKE = _UxGT("Had");
+ PROGMEM Language_Str MSG_MAZE = _UxGT("Bludisko");
-#define MSG_SERVICE_RESET _UxGT("Vynulovať")
-#define MSG_SERVICE_IN _UxGT(" za:")
-#define MSG_BACKLASH _UxGT("Kompenz. vôle")
-#define MSG_BACKLASH_CORRECTION _UxGT("Korekcia")
-#define MSG_BACKLASH_SMOOTHING _UxGT("Vyhladzovanie")
+ //
+ // Filament Change screens show up to 3 lines on a 4-line display
+ // ...or up to 2 lines on a 3-line display
+ //
+ #if LCD_HEIGHT >= 4
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Stlačte tlačidlo", "pre obnovu tlače"));
+ PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Parkovanie..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Čakajte prosím", "na spustenie", "výmeny filamentu"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Vložte filament", "a stlačte tlačidlo", "pre pokračovanie"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Stlačte tlačidlo", "pre ohrev trysky"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Ohrev trysky", "Čakajte prosím..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Čakajte prosím", "na vysunutie", "filamentu"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Čakajte prosím", "na zavedenie", "filamentu"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Čakajte prosím", "na vytlačenie", "filamentu"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Stlačte tlačidlo", "pre dokončenie", "vytláčania filam."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Čakajte prosím na", "obnovenie tlače..."));
+ #else
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Kliknite pre pokr."));
+ PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Parkovanie..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Čakajte prosím..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Vložte a kliknite"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Kliknite pre ohrev"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Ohrev..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Vysúvanie..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Zavádzanie..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Vytlačovanie..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Klik. pre dokonč."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Pokračovanie..."));
+ #endif
+ PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("Ovládače TMC");
+ PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Prúd ovládača");
+ PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Hybridný prah");
+ PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Bezsenzor. domov");
+ PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Režim krokovania");
+ PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop zapnutý");
+ PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Vynulovať");
+ PROGMEM Language_Str MSG_SERVICE_IN = _UxGT("za:");
+ PROGMEM Language_Str MSG_BACKLASH = _UxGT("Kompenz. vôle");
+ PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
+ PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
+ PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
+ PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Korekcia");
+ PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Vyhladzovanie");
+}
diff --git a/Marlin/src/lcd/language/language_test.h b/Marlin/src/lcd/language/language_test.h
index b2be749a0027..8098fdd8722d 100644
--- a/Marlin/src/lcd/language/language_test.h
+++ b/Marlin/src/lcd/language/language_test.h
@@ -114,114 +114,145 @@
#define STRG_OKTAL_e "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357"
#define STRG_OKTAL_f "\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377"
-#if ENABLED(DISPLAYTEST)
- #define WELCOME_MSG _UxGT("Language TEST")
-
- #define MSG_WATCH _UxGT("Display test")
- #define MSG_PREPARE STRG_OKTAL_b
- #define MSG_CONTROL STRG_OKTAL_c
-#endif
-
-#if ENABLED(WEST)
- #define WELCOME_MSG _UxGT("Language TEST")
-
- #define MSG_WATCH _UxGT("\001\002\003\004\005\006\007\010\011")
- #define MSG_PREPARE _UxGT("UTF8")
- #define MSG_CONTROL _UxGT("ASCII")
-
- //#define MSG_MAIN _UxGT("..")
- #define MSG_DISABLE_STEPPERS STRG_C2_8
- #define MSG_AUTO_HOME STRG_C2_9
- #define MSG_SET_HOME_OFFSETS STRG_C2_a
- #define MSG_PREHEAT_1 STRG_C2_b
- #define MSG_PREHEAT_2 STRG_C3_8
- #define MSG_COOLDOWN STRG_C3_9
- #define MSG_SWITCH_PS_OFF STRG_C3_a
- #define MSG_MOVE_AXIS STRG_C3_b
-
- #define MSG_MAIN STRG_OKTAL_2
- #define MSG_TEMPERATURE STRG_OKTAL_3
- #define MSG_MOTION STRG_OKTAL_4
- #define MSG_FILAMENT STRG_OKTAL_5
- #define MSG_CONTRAST STRG_OKTAL_6
- #define MSG_RESTORE_FAILSAFE STRG_OKTAL_7
-
- #define MSG_NOZZLE STRG_OKTAL_8
- #define MSG_FAN_SPEED STRG_OKTAL_9
- #define MSG_AUTOTEMP STRG_OKTAL_a
- #define MSG_MIN STRG_OKTAL_b
- #define MSG_MAX STRG_OKTAL_c
- #define MSG_FACTOR STRG_OKTAL_d
- #define MSG_PID_P STRG_OKTAL_e
- #define MSG_PID_I STRG_OKTAL_f
-
-#endif
-
-#if ENABLED(CYRIL)
- #define WELCOME_MSG _UxGT("Language TEST")
-
- #define MSG_WATCH _UxGT("\001\002\003\004\005\006\007\010\011")
- #define MSG_PREPARE _UxGT("UTF8")
- #define MSG_CONTROL _UxGT("ASCII")
-
- //#define MSG_MAIN _UxGT("..")
- #define MSG_DISABLE_STEPPERS STRG_D0_8
- #define MSG_AUTO_HOME STRG_D0_9
- #define MSG_SET_HOME_OFFSETS STRG_D0_a
- #define MSG_PREHEAT_1 STRG_D0_b
- #define MSG_PREHEAT_2 STRG_D1_8
- #define MSG_COOLDOWN STRG_D1_9
- #define MSG_SWITCH_PS_OFF STRG_D1_a
- #define MSG_MOVE_AXIS STRG_D1_b
-
- #define MSG_MAIN STRG_OKTAL_2
- #define MSG_TEMPERATURE STRG_OKTAL_3
- #define MSG_MOTION STRG_OKTAL_4
- #define MSG_FILAMENT STRG_OKTAL_5
- #define MSG_CONTRAST STRG_OKTAL_6
- #define MSG_RESTORE_FAILSAFE STRG_OKTAL_7
-
- #define MSG_NOZZLE STRG_OKTAL_8
- #define MSG_FAN_SPEED STRG_OKTAL_9
- #define MSG_AUTOTEMP STRG_OKTAL_a
- #define MSG_MIN STRG_OKTAL_b
- #define MSG_MAX STRG_OKTAL_c
- #define MSG_FACTOR STRG_OKTAL_d
- #define MSG_PID_P STRG_OKTAL_e
- #define MSG_PID_I STRG_OKTAL_f
-
-#endif
-
-#if ENABLED(KANA)
- #define WELCOME_MSG _UxGT("Language TEST")
-
- #define MSG_WATCH _UxGT("\001\002\003\004\005\006\007\010\011")
- #define MSG_PREPARE _UxGT("UTF8")
- #define MSG_CONTROL _UxGT("ASCII")
-
- //#define MSG_MAIN _UxGT("..")
- #define MSG_DISABLE_STEPPERS STRG_E382_8
- #define MSG_AUTO_HOME STRG_E382_9
- #define MSG_SET_HOME_OFFSETS STRG_E382_a
- #define MSG_PREHEAT_1 STRG_E382_b
- #define MSG_PREHEAT_2 STRG_E383_8
- #define MSG_COOLDOWN STRG_E383_9
- #define MSG_SWITCH_PS_OFF STRG_E383_a
- #define MSG_MOVE_AXIS STRG_E383_b
-
- #define MSG_MAIN STRG_OKTAL_2
- #define MSG_TEMPERATURE STRG_OKTAL_3
- #define MSG_MOTION STRG_OKTAL_4
- #define MSG_FILAMENT STRG_OKTAL_5
- #define MSG_CONTRAST STRG_OKTAL_6
- #define MSG_RESTORE_FAILSAFE STRG_OKTAL_7
-
- #define MSG_NOZZLE STRG_OKTAL_8
- #define MSG_FAN_SPEED STRG_OKTAL_9
- #define MSG_AUTOTEMP STRG_OKTAL_a
- #define MSG_MIN STRG_OKTAL_b
- #define MSG_MAX STRG_OKTAL_c
- #define MSG_FACTOR STRG_OKTAL_d
- #define MSG_PID_P STRG_OKTAL_e
- #define MSG_PID_I STRG_OKTAL_f
-#endif
+namespace Language_test {
+ using namespace Language_en; // Inherit undefined strings from English
+
+ constexpr uint8_t CHARSIZE = 1;
+
+ #if ENABLED(DISPLAYTEST)
+ PROGMEM Language_Str WELCOME_MSG = _UxGT("Language TEST");
+
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Display test");
+ PROGMEM Language_Str MSG_PREPARE = STRG_OKTAL_b;
+ PROGMEM Language_Str MSG_CONTROL = STRG_OKTAL_c;
+ #endif
+
+ #if ENABLED(WEST)
+ PROGMEM Language_Str WELCOME_MSG = _UxGT("Language TEST");
+
+ PROGMEM Language_Str MSG_WATCH = _UxGT("\001\002\003\004\005\006\007\010\011");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("UTF8");
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("ASCII");
+
+ PROGMEM Language_Str MSG_MAIN = _UxGT("..");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = STRG_C2_8;
+ PROGMEM Language_Str MSG_AUTO_HOME = STRG_C2_9;
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = STRG_C2_a;
+ PROGMEM Language_Str MSG_PREHEAT_1 = STRG_C2_b;
+ PROGMEM Language_Str MSG_PREHEAT_2 = STRG_C3_8;
+ PROGMEM Language_Str MSG_COOLDOWN = STRG_C3_9;
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = STRG_C3_a;
+ PROGMEM Language_Str MSG_MOVE_AXIS = STRG_C3_b;
+
+ PROGMEM Language_Str MSG_MAIN = STRG_OKTAL_2;
+ PROGMEM Language_Str MSG_TEMPERATURE = STRG_OKTAL_3;
+ PROGMEM Language_Str MSG_MOTION = STRG_OKTAL_4;
+ PROGMEM Language_Str MSG_FILAMENT = STRG_OKTAL_5;
+ PROGMEM Language_Str MSG_CONTRAST = STRG_OKTAL_6;
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = STRG_OKTAL_7;
+
+ PROGMEM Language_Str MSG_NOZZLE = STRG_OKTAL_8;
+ PROGMEM Language_Str MSG_NOZZLE_0 = STRG_OKTAL_8 " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = STRG_OKTAL_8 " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = STRG_OKTAL_8 " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = STRG_OKTAL_8 " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = STRG_OKTAL_8 " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = STRG_OKTAL_8 " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_FAN_SPEED = STRG_OKTAL_9;
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = STRG_OKTAL_9;
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = STRG_OKTAL_9;
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = STRG_OKTAL_9;
+ PROGMEM Language_Str MSG_AUTOTEMP = STRG_OKTAL_a;
+ PROGMEM Language_Str MSG_MIN = STRG_OKTAL_b;
+ PROGMEM Language_Str MSG_MAX = STRG_OKTAL_c;
+ PROGMEM Language_Str MSG_FACTOR = STRG_OKTAL_d;
+ PROGMEM Language_Str MSG_PID_P = STRG_OKTAL_e;
+ PROGMEM Language_Str MSG_PID_I = STRG_OKTAL_f;
+
+ #endif
+
+ #if ENABLED(CYRIL)
+ PROGMEM Language_Str WELCOME_MSG = _UxGT("Language TEST");
+
+ PROGMEM Language_Str MSG_WATCH = _UxGT("\001\002\003\004\005\006\007\010\011");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("UTF8");
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("ASCII");
+
+ PROGMEM Language_Str MSG_MAIN = _UxGT("..");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = STRG_D0_8;
+ PROGMEM Language_Str MSG_AUTO_HOME = STRG_D0_9;
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = STRG_D0_a;
+ PROGMEM Language_Str MSG_PREHEAT_1 = STRG_D0_b;
+ PROGMEM Language_Str MSG_PREHEAT_2 = STRG_D1_8;
+ PROGMEM Language_Str MSG_COOLDOWN = STRG_D1_9;
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = STRG_D1_a;
+ PROGMEM Language_Str MSG_MOVE_AXIS = STRG_D1_b;
+
+ PROGMEM Language_Str MSG_MAIN = STRG_OKTAL_2;
+ PROGMEM Language_Str MSG_TEMPERATURE = STRG_OKTAL_3;
+ PROGMEM Language_Str MSG_MOTION = STRG_OKTAL_4;
+ PROGMEM Language_Str MSG_FILAMENT = STRG_OKTAL_5;
+ PROGMEM Language_Str MSG_CONTRAST = STRG_OKTAL_6;
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = STRG_OKTAL_7;
+
+ PROGMEM Language_Str MSG_NOZZLE = STRG_OKTAL_8;
+ PROGMEM Language_Str MSG_NOZZLE_0 = STRG_OKTAL_8 " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = STRG_OKTAL_8 " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = STRG_OKTAL_8 " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = STRG_OKTAL_8 " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = STRG_OKTAL_8 " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = STRG_OKTAL_8 " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = STRG_OKTAL_9;
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = STRG_OKTAL_9;
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = STRG_OKTAL_9;
+ PROGMEM Language_Str MSG_AUTOTEMP = STRG_OKTAL_a;
+ PROGMEM Language_Str MSG_MIN = STRG_OKTAL_b;
+ PROGMEM Language_Str MSG_MAX = STRG_OKTAL_c;
+ PROGMEM Language_Str MSG_FACTOR = STRG_OKTAL_d;
+ PROGMEM Language_Str MSG_PID_P = STRG_OKTAL_e;
+ PROGMEM Language_Str MSG_PID_I = STRG_OKTAL_f;
+
+ #endif
+
+ #if ENABLED(KANA)
+ PROGMEM Language_Str WELCOME_MSG = _UxGT("Language TEST");
+
+ PROGMEM Language_Str MSG_WATCH = _UxGT("\001\002\003\004\005\006\007\010\011");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("UTF8");
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("ASCII");
+
+ PROGMEM Language_Str MSG_MAIN = _UxGT("..");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = STRG_E382_8;
+ PROGMEM Language_Str MSG_AUTO_HOME = STRG_E382_9;
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = STRG_E382_a;
+ PROGMEM Language_Str MSG_PREHEAT_1 = STRG_E382_b;
+ PROGMEM Language_Str MSG_PREHEAT_2 = STRG_E383_8;
+ PROGMEM Language_Str MSG_COOLDOWN = STRG_E383_9;
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = STRG_E383_a;
+ PROGMEM Language_Str MSG_MOVE_AXIS = STRG_E383_b;
+
+ PROGMEM Language_Str MSG_MAIN = STRG_OKTAL_2;
+ PROGMEM Language_Str MSG_TEMPERATURE = STRG_OKTAL_3;
+ PROGMEM Language_Str MSG_MOTION = STRG_OKTAL_4;
+ PROGMEM Language_Str MSG_FILAMENT = STRG_OKTAL_5;
+ PROGMEM Language_Str MSG_CONTRAST = STRG_OKTAL_6;
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = STRG_OKTAL_7;
+
+ PROGMEM Language_Str MSG_NOZZLE = STRG_OKTAL_8;
+ PROGMEM Language_Str MSG_NOZZLE_0 = STRG_OKTAL_8 " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = STRG_OKTAL_8 " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = STRG_OKTAL_8 " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = STRG_OKTAL_8 " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = STRG_OKTAL_8 " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = STRG_OKTAL_8 " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = STRG_OKTAL_9;
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = STRG_OKTAL_9;
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = STRG_OKTAL_9;
+ PROGMEM Language_Str MSG_AUTOTEMP = STRG_OKTAL_a;
+ PROGMEM Language_Str MSG_MIN = STRG_OKTAL_b;
+ PROGMEM Language_Str MSG_MAX = STRG_OKTAL_c;
+ PROGMEM Language_Str MSG_FACTOR = STRG_OKTAL_d;
+ PROGMEM Language_Str MSG_PID_P = STRG_OKTAL_e;
+ PROGMEM Language_Str MSG_PID_I = STRG_OKTAL_f;
+ #endif
+}
diff --git a/Marlin/src/lcd/language/language_tr.h b/Marlin/src/lcd/language/language_tr.h
index 3e025934a76f..26ec1e35fec4 100644
--- a/Marlin/src/lcd/language/language_tr.h
+++ b/Marlin/src/lcd/language/language_tr.h
@@ -34,402 +34,484 @@
*/
#define DISPLAY_CHARSET_ISO10646_TR
-#define CHARSIZE 2
-#define THIS_LANGUAGES_SPECIAL_SYMBOLS _UxGT("İÖÇğüşöç³")
-#define WELCOME_MSG MACHINE_NAME _UxGT(" hazır.")
-#define MSG_BACK _UxGT("Geri")
-#define MSG_MEDIA_INSERTED _UxGT("SD K. Yerleştirildi.")
-#define MSG_MEDIA_REMOVED _UxGT("SD Kart Çıkarıldı.")
-#define MSG_LCD_ENDSTOPS _UxGT("Enstops") // Max length 8 characters
-#define MSG_LCD_SOFT_ENDSTOPS _UxGT("Yazılımsal Endstops")
-#define MSG_MAIN _UxGT("Ana")
-#define MSG_ADVANCED_SETTINGS _UxGT("Gelişmiş Ayarlar")
-#define MSG_CONFIGURATION _UxGT("Yapılandırma")
-#define MSG_AUTOSTART _UxGT("Oto. Başlat")
-#define MSG_DISABLE_STEPPERS _UxGT("Motorları Durdur")
-#define MSG_DEBUG_MENU _UxGT("Hata Ayıklama")
-#define MSG_PROGRESS_BAR_TEST _UxGT("Durum Çubuğu Testi")
-#define MSG_AUTO_HOME _UxGT("Eksenleri Sıfırla")
-#define MSG_AUTO_HOME_X _UxGT("X Sıfırla")
-#define MSG_AUTO_HOME_Y _UxGT("Y Sıfırla")
-#define MSG_AUTO_HOME_Z _UxGT("Z Sıfırla")
-#define MSG_AUTO_Z_ALIGN _UxGT("Oto. Z-Hizalama")
-#define MSG_LEVEL_BED_HOMING _UxGT("XYZ Sıfırlanıyor")
-#define MSG_LEVEL_BED_WAITING _UxGT("Başlatmak için tıkla")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Sonraki Nokta")
-#define MSG_LEVEL_BED_DONE _UxGT("Hizalama Tamam!")
-#define MSG_Z_FADE_HEIGHT _UxGT("Kaçınma Yüksekliği")
-#define MSG_SET_HOME_OFFSETS _UxGT("Offset Ayarla")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Offset Tamam")
-#define MSG_SET_ORIGIN _UxGT("Sıfır Belirle")
-#define MSG_PREHEAT_1 _UxGT("Ön Isınma " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" Tüm")
-#define MSG_PREHEAT_1_END MSG_PREHEAT_1 _UxGT(" Nozul")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" Tabla")
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" Ayarlar")
-#define MSG_PREHEAT_2 _UxGT("Ön Isınma " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" Tüm")
-#define MSG_PREHEAT_2_END MSG_PREHEAT_2 _UxGT(" Nozul")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" Tabla")
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" Ayarlar")
-#define MSG_PREHEAT_CUSTOM _UxGT("Özel Ön Isınma")
-#define MSG_COOLDOWN _UxGT("Soğut")
-#define MSG_SWITCH_PS_ON _UxGT("Gücü Aç")
-#define MSG_SWITCH_PS_OFF _UxGT("Gücü Kapat")
-#define MSG_EXTRUDE _UxGT("Ekstrüzyon")
-#define MSG_RETRACT _UxGT("Geri Çek")
-#define MSG_MOVE_AXIS _UxGT("Eksen Hareketleri")
-#define MSG_BED_LEVELING _UxGT("Tabla Hizalama")
-#define MSG_LEVEL_BED _UxGT("Tabla Hizası")
-#define MSG_LEVEL_CORNERS _UxGT("Hizalama Köşeleri")
-#define MSG_NEXT_CORNER _UxGT("Sonraki Köşe")
-#define MSG_EDIT_MESH _UxGT("Mesh Düzenle")
-#define MSG_EDITING_STOPPED _UxGT("Mesh Düzenleme Durdu")
-#define MSG_MESH_X _UxGT("İndeks X")
-#define MSG_MESH_Y _UxGT("İndeks Y")
-#define MSG_MESH_EDIT_Z _UxGT("Z Değeri")
-#define MSG_USER_MENU _UxGT("Özel Komutlar")
-#define MSG_IDEX_MENU _UxGT("IDEX Modu")
-#define MSG_IDEX_MODE_AUTOPARK _UxGT("Oto-Park")
-#define MSG_IDEX_MODE_DUPLICATE _UxGT("Kopyala")
-#define MSG_IDEX_MODE_MIRRORED_COPY _UxGT("Yansıtılmış kopya")
-#define MSG_IDEX_MODE_FULL_CTRL _UxGT("Tam Kontrol")
-#define MSG_X_OFFSET _UxGT("2. nozul X")
-#define MSG_Y_OFFSET _UxGT("2. nozul Y")
-#define MSG_Z_OFFSET _UxGT("2. nozul Z")
-#define MSG_UBL_DOING_G29 _UxGT("G29 Çalışıyor")
-#define MSG_UBL_TOOLS _UxGT("UBL Araçları")
-#define MSG_UBL_LEVEL_BED _UxGT("UBL Yatak Hizalama")
-#define MSG_UBL_MANUAL_MESH _UxGT("Elle Mesh Oluştur")
-#define MSG_UBL_BC_INSERT _UxGT("Altlık & Ölçü Ver")
-#define MSG_UBL_BC_INSERT2 _UxGT("Ölçü")
-#define MSG_UBL_BC_REMOVE _UxGT("Yataktan Ölçü Kaldır")
-#define MSG_UBL_MOVING_TO_NEXT _UxGT("Sonrakine Git")
-#define MSG_UBL_ACTIVATE_MESH _UxGT("UBL'yi Etkinleştir")
-#define MSG_UBL_DEACTIVATE_MESH _UxGT("UBL'yi Etkisizleştir")
-#define MSG_UBL_SET_TEMP_BED _UxGT("Yatak Sıcaklığı")
-#define MSG_UBL_BED_TEMP_CUSTOM MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND _UxGT("Nozul Sıcaklığı")
-#define MSG_UBL_HOTEND_TEMP_CUSTOM MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT _UxGT("Mesh Düzenleme")
-#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("Özel Mesh Düzenleme")
-#define MSG_UBL_FINE_TUNE_MESH _UxGT("İnce Ayar Mesh")
-#define MSG_UBL_DONE_EDITING_MESH _UxGT("Mesh Düzenleme Tamam")
-#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("Özel Mesh Oluştur")
-#define MSG_UBL_BUILD_MESH_MENU _UxGT("Mesh Oluştur")
-#define MSG_UBL_BUILD_MESH_M1 _UxGT("Mesh Oluştur (" PREHEAT_1_LABEL ")")
-#define MSG_UBL_BUILD_MESH_M2 _UxGT("Mesh Oluştur (" PREHEAT_2_LABEL ")")
-#define MSG_UBL_BUILD_COLD_MESH _UxGT("Soğuk Mesh Oluştur")
-#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("Mesh Yükseklik Ayarı")
-#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("Yükseklik miktarı")
-#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Doğrulama Mesh")
-#define MSG_UBL_VALIDATE_MESH_M1 _UxGT("Doğrulama Mesh (" PREHEAT_1_LABEL ")")
-#define MSG_UBL_VALIDATE_MESH_M2 _UxGT("Doğrulama Mesh (" PREHEAT_2_LABEL ")")
-#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Özel Mesh Doğrulama")
-#define MSG_UBL_CONTINUE_MESH _UxGT("Tabla Mesh Devam et")
-#define MSG_UBL_MESH_LEVELING _UxGT("Mesh Hizalama")
-#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("3-Nokta Hizalama")
-#define MSG_UBL_GRID_MESH_LEVELING _UxGT("Kafes Mesh Hizalama")
-#define MSG_UBL_MESH_LEVEL _UxGT("Mesh Seviyesi")
-#define MSG_UBL_SIDE_POINTS _UxGT("Yan Noktalar")
-#define MSG_UBL_MAP_TYPE _UxGT("Haritalama Türü")
-#define MSG_UBL_OUTPUT_MAP _UxGT("Mesh Çıkış Haritası")
-#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("Host için Çıktı")
-#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("CSV için Çıktı")
-#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("Yazıcıda Yedek Kpalı")
-#define MSG_UBL_INFO_UBL _UxGT("UBL Çıkış Bilgisi")
-#define MSG_UBL_FILLIN_AMOUNT _UxGT("Dolgu Miktarı")
-#define MSG_UBL_MANUAL_FILLIN _UxGT("Manuel Dolgu")
-#define MSG_UBL_SMART_FILLIN _UxGT("Akıllı Dogu")
-#define MSG_UBL_FILLIN_MESH _UxGT("Mesh Dolgu")
-#define MSG_UBL_INVALIDATE_ALL _UxGT("Tümünü Geçersiz Kıl")
-#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("Yakını Geçersiz Kıl")
-#define MSG_UBL_FINE_TUNE_ALL _UxGT("Tümünü İnce Ayarla")
-#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("Yakını İnce Ayarla")
-#define MSG_UBL_STORAGE_MESH_MENU _UxGT("Mesh Depolama")
-#define MSG_UBL_STORAGE_SLOT _UxGT("Bellek Yuvası")
-#define MSG_UBL_LOAD_MESH _UxGT("Yatak Mesh Yükle")
-#define MSG_UBL_SAVE_MESH _UxGT("Yatak Mesh Kayıt Et")
-#define MSG_MESH_LOADED _UxGT("Mesh %i yüklendi")
-#define MSG_MESH_SAVED _UxGT("Mesh %i kayıtlandı")
-#define MSG_UBL_NO_STORAGE _UxGT("Depolama Yok")
-#define MSG_UBL_SAVE_ERROR _UxGT("Hata: UBL Kayıt")
-#define MSG_UBL_RESTORE_ERROR _UxGT("Hata: UBL Yenileme")
-#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Z-Ofset Durduruldu")
-#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("Adım Adım UBL")
-#define MSG_LED_CONTROL _UxGT("LED Kontrolü")
-#define MSG_LEDS _UxGT("Işıklar")
-#define MSG_LED_PRESETS _UxGT("Işık Hazır Ayarları")
-#define MSG_SET_LEDS_RED _UxGT("Kırmızı")
-#define MSG_SET_LEDS_ORANGE _UxGT("Turuncu")
-#define MSG_SET_LEDS_YELLOW _UxGT("Sarı")
-#define MSG_SET_LEDS_GREEN _UxGT("Yeşil")
-#define MSG_SET_LEDS_BLUE _UxGT("Mavi")
-#define MSG_SET_LEDS_INDIGO _UxGT("Lacivert")
-#define MSG_SET_LEDS_VIOLET _UxGT("Menekşe")
-#define MSG_SET_LEDS_WHITE _UxGT("Beyaz")
-#define MSG_SET_LEDS_DEFAULT _UxGT("Varsayılan")
-#define MSG_CUSTOM_LEDS _UxGT("Özel Işıklar")
-#define MSG_INTENSITY_R _UxGT("Kırmızı Şiddeti")
-#define MSG_INTENSITY_G _UxGT("Yeşil Şiddeti")
-#define MSG_INTENSITY_B _UxGT("Mavi Şiddeti")
-#define MSG_INTENSITY_W _UxGT("Beyaz Şiddeti")
-#define MSG_LED_BRIGHTNESS _UxGT("Parlaklık")
-#define MSG_MOVING _UxGT("Hareket Ediyor..")
-#define MSG_FREE_XY _UxGT("Durdur XY")
-#define MSG_MOVE_X _UxGT("X Hareketi")
-#define MSG_MOVE_Y _UxGT("Y Hareketi")
-#define MSG_MOVE_Z _UxGT("Z Hareketi")
-#define MSG_MOVE_E _UxGT("Ekstruder")
-#define MSG_HOTEND_TOO_COLD _UxGT("Nozul Çok Soğuk")
-#define MSG_MOVE_Z_DIST _UxGT("%smm")
-#define MSG_MOVE_01MM _UxGT("0.1mm")
-#define MSG_MOVE_1MM _UxGT("1mm")
-#define MSG_MOVE_10MM _UxGT("10mm")
-#define MSG_SPEED _UxGT("Hız")
-#define MSG_BED_Z _UxGT("Z Mesafesi")
-#define MSG_NOZZLE _UxGT("Nozul")
-#define MSG_BED _UxGT("Tabla")
-#define MSG_FAN_SPEED _UxGT("Fan Hızı")
-#define MSG_EXTRA_FAN_SPEED _UxGT("Ekstra Fan Hızı")
-#define MSG_FLOW _UxGT("Akış")
-#define MSG_CONTROL _UxGT("Kontrol")
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min")
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max")
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Çarpan")
-#define MSG_AUTOTEMP _UxGT("Oto. Sıcaklık")
-#define MSG_LCD_ON _UxGT("Açık")
-#define MSG_LCD_OFF _UxGT("Kapalı")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Seç")
-#define MSG_ACC _UxGT("İvme")
-#define MSG_JERK _UxGT("Sarsım")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va-Sarsım")
- #define MSG_VB_JERK _UxGT("Vb-Sarsım")
- #define MSG_VC_JERK _UxGT("Vc-Sarsım")
-#else
- #define MSG_VA_JERK _UxGT("Vx-Sarsım")
- #define MSG_VB_JERK _UxGT("Vy-Sarsım")
- #define MSG_VC_JERK _UxGT("Vz-Sarsım")
-#endif
-#define MSG_VE_JERK _UxGT("Ve-Sarsım")
-#define MSG_JUNCTION_DEVIATION _UxGT("Jonksiyon Sapması")
-#define MSG_VELOCITY _UxGT("Hız Vektörü")
-#define MSG_VMAX _UxGT("HızVektör.max ")
-#define MSG_VMIN _UxGT("HızVektör.min")
-#define MSG_VTRAV_MIN _UxGT("HV.gezinme min")
-#define MSG_ACCELERATION _UxGT("Ivme")
-#define MSG_AMAX _UxGT("Max. ivme ")
-#define MSG_A_RETRACT _UxGT("Ivme-geri çekme")
-#define MSG_A_TRAVEL _UxGT("Ivme-gezinme")
-#define MSG_STEPS_PER_MM _UxGT("Adım/mm")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("A adım/mm")
- #define MSG_BSTEPS _UxGT("B adım/mm")
- #define MSG_CSTEPS _UxGT("C adım/mm")
-#else
- #define MSG_ASTEPS _UxGT("X adım/mm")
- #define MSG_BSTEPS _UxGT("Y adım/mm")
- #define MSG_CSTEPS _UxGT("Z adım/mm")
-#endif
-#define MSG_ESTEPS _UxGT("E adım/mm")
-#define MSG_E1STEPS _UxGT("E1 adım/mm")
-#define MSG_E2STEPS _UxGT("E2 adım/mm")
-#define MSG_E3STEPS _UxGT("E3 adım/mm")
-#define MSG_E4STEPS _UxGT("E4 adım/mm")
-#define MSG_E5STEPS _UxGT("E5 adım/mm")
-#define MSG_E6STEPS _UxGT("E6 adım/mm")
-#define MSG_TEMPERATURE _UxGT("Sıcaklık")
-#define MSG_MOTION _UxGT("Hareket")
-#define MSG_FILAMENT _UxGT("Filaman")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("Ekstrüzyon/mm³")
-#define MSG_FILAMENT_DIAM _UxGT("Filaman Çapı")
-#define MSG_FILAMENT_UNLOAD _UxGT("Çıkart mm")
-#define MSG_FILAMENT_LOAD _UxGT("Yükle mm")
-#define MSG_ADVANCE_K _UxGT("K İlerlet")
-#define MSG_CONTRAST _UxGT("LCD Kontrast")
-#define MSG_STORE_EEPROM _UxGT("Hafızaya Al")
-#define MSG_LOAD_EEPROM _UxGT("Hafızadan Yükle")
-#define MSG_RESTORE_FAILSAFE _UxGT("Fabrika Ayarları")
-#define MSG_INIT_EEPROM _UxGT("EEPROM'u başlat")
-#define MSG_MEDIA_UPDATE _UxGT("SD Güncellemesi")
-#define MSG_RESET_PRINTER _UxGT("Yazıcıyı Resetle")
-#define MSG_REFRESH _UxGT("Yenile")
-#define MSG_WATCH _UxGT("Bilgi Ekranı")
-#define MSG_PREPARE _UxGT("Hazırlık")
-#define MSG_TUNE _UxGT("Ayar")
-#define MSG_PAUSE_PRINT _UxGT("Duraklat")
-#define MSG_RESUME_PRINT _UxGT("Sürdür")
-#define MSG_STOP_PRINT _UxGT("Durdur")
-#define MSG_OUTAGE_RECOVERY _UxGT("Kesinti Kurtarma")
-#define MSG_MEDIA_MENU _UxGT("SD Karttan Yazdır")
-#define MSG_NO_MEDIA _UxGT("SD Kart Yok!")
-#define MSG_DWELL _UxGT("Uyku...")
-#define MSG_USERWAIT _UxGT("Operatör bekleniyor.")
-#define MSG_PRINT_PAUSED _UxGT("Baskı Duraklatıldı")
-#define MSG_PRINTING _UxGT("Baskı Yapılıyor...")
-#define MSG_PRINT_ABORTED _UxGT("Baskı Durduruldu!")
-#define MSG_NO_MOVE _UxGT("İşlem yok.")
-#define MSG_KILLED _UxGT("Kilitlendi. ")
-#define MSG_STOPPED _UxGT("Durdu. ")
-#define MSG_CONTROL_RETRACT _UxGT("Geri Çek mm")
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Swap Re.mm")
-#define MSG_CONTROL_RETRACTF _UxGT("Geri Çekme V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Atlama mm")
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("S UnRet mm")
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet V")
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("S UnRet V")
-#define MSG_AUTORETRACT _UxGT("Oto. Geri Çekme")
-#define MSG_FILAMENT_SWAP_LENGTH _UxGT("G.Çekme Boyu")
-#define MSG_TOOL_CHANGE _UxGT("Takım Değişimi")
-#define MSG_TOOL_CHANGE_ZLIFT _UxGT("Z Yükselt")
-#define MSG_SINGLENOZZLE_PRIME_SPD _UxGT("Birincil Hız")
-#define MSG_SINGLENOZZLE_RETRACT_SPD _UxGT("Geri Çekme Hızı")
-#define MSG_FILAMENTCHANGE _UxGT("Filaman Değiştir")
-#define MSG_FILAMENTLOAD _UxGT("Filaman Yükle")
-#define MSG_FILAMENTUNLOAD _UxGT("Filaman Çıkart")
-#define MSG_FILAMENTUNLOAD_ALL _UxGT("Tümünü Çıkart")
-#define MSG_INIT_MEDIA _UxGT("SD Kart Başlatılıyor")
-#define MSG_CHANGE_MEDIA _UxGT("SD Kart Değiştir")
-#define MSG_ZPROBE_OUT _UxGT("Z Prob Açık. Tabla")
-#define MSG_SKEW_FACTOR _UxGT("Çarpıklık Faktörü")
-#define MSG_BLTOUCH _UxGT("BLTouch")
-#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Self-Test")
-#define MSG_BLTOUCH_RESET _UxGT("Sıfırla BLTouch")
-#define MSG_BLTOUCH_DEPLOY _UxGT("BLTouch Aç")
-#define MSG_BLTOUCH_STOW _UxGT("BLTouch Kapat")
-#define MSG_MANUAL_DEPLOY _UxGT("Z-Prob Aç")
-#define MSG_MANUAL_STOW _UxGT("Z-Sensör Kapat")
-#define MSG_HOME_FIRST _UxGT("Sıfırla %s%s%s Önce")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Z Offset")
-#define MSG_BABYSTEP_X _UxGT("Miniadım X")
-#define MSG_BABYSTEP_Y _UxGT("Miniadım Y")
-#define MSG_BABYSTEP_Z _UxGT("Miniadım Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Endstop iptal")
-#define MSG_HEATING_FAILED_LCD _UxGT("Isınma başarısız")
-#define MSG_HEATING_FAILED_LCD_BED _UxGT("Yatak Isınma Başrsız")
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Hata: Sıcaklık Aşımı")
-#define MSG_THERMAL_RUNAWAY _UxGT("TERMAL PROBLEM")
-#define MSG_THERMAL_RUNAWAY_BED _UxGT("TABLA TERMAL PROBLEM")
-#define MSG_ERR_MAXTEMP _UxGT("Hata: MAX.SICAKLIK")
-#define MSG_ERR_MINTEMP _UxGT("Hata: MIN.SICAKLIK")
-#define MSG_ERR_MAXTEMP_BED _UxGT("Hata: MAX.SIC. TABLA")
-#define MSG_ERR_MINTEMP_BED _UxGT("Hata: MIN.SIC. TABLA")
-#define MSG_ERR_Z_HOMING _UxGT("Önce XY Sıfırla")
-#define MSG_HALTED _UxGT("YAZICI DURDURULDU")
-#define MSG_PLEASE_RESET _UxGT("Lütfen Resetleyin")
-#define MSG_SHORT_DAY _UxGT("G") // One character only
-#define MSG_SHORT_HOUR _UxGT("S") // One character only
-#define MSG_SHORT_MINUTE _UxGT("D") // One character only
-#define MSG_HEATING _UxGT("Isınıyor...")
-#define MSG_COOLING _UxGT("Soğuyor...")
-#define MSG_BED_HEATING _UxGT("Tabla Isınıyor...")
-#define MSG_BED_COOLING _UxGT("Tabla Soğuyor...")
-#define MSG_DELTA_CALIBRATE _UxGT("Delta Kalibrasyonu")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Ayarla X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Ayarla Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Ayarla Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Ayarla Merkez")
-#define MSG_DELTA_SETTINGS _UxGT("Delta Ayarları")
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Oto Kalibrasyon")
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Delta Yük. Ayarla")
-#define MSG_DELTA_Z_OFFSET_CALIBRATE _UxGT("Z Prob Ofseti")
-#define MSG_DELTA_DIAG_ROD _UxGT("Çapral Mil")
-#define MSG_DELTA_HEIGHT _UxGT("Yükseklik")
-#define MSG_DELTA_RADIUS _UxGT("Yarıçap")
-#define MSG_INFO_MENU _UxGT("Yazıcı Hakkında")
-#define MSG_INFO_PRINTER_MENU _UxGT("Yazıcı Bilgisi")
-#define MSG_3POINT_LEVELING _UxGT("3-Nokta Hizalama")
-#define MSG_LINEAR_LEVELING _UxGT("Doğrusal Hizalama")
-#define MSG_BILINEAR_LEVELING _UxGT("İki Yönlü Doğ. Hiza.")
-#define MSG_UBL_LEVELING _UxGT("Birleşik Tabla Hiza.")
-#define MSG_MESH_LEVELING _UxGT("Mesh Hizalama")
-#define MSG_INFO_STATS_MENU _UxGT("İstatistikler")
-#define MSG_INFO_BOARD_MENU _UxGT("Kontrolcü Bilgisi")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Termistörler")
-#define MSG_INFO_EXTRUDERS _UxGT("Ekstruderler")
-#define MSG_INFO_BAUDRATE _UxGT("İletişim Hızı")
-#define MSG_INFO_PROTOCOL _UxGT("Protokol")
-#define MSG_CASE_LIGHT _UxGT("Aydınlatmayı Aç")
-#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Aydınlatma Parlaklğı")
+namespace Language_tr {
+ using namespace Language_en; // Inherit undefined strings from English
-#define MSG_EXPECTED_PRINTER _UxGT("Yanlış Yazıcı")
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Turkish");
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Baskı Sayısı")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Tamamlanan")
- #define MSG_INFO_PRINT_TIME _UxGT("Toplam Baskı Süresi")
- #define MSG_INFO_PRINT_LONGEST _UxGT("En Uzun Baskı Süresi")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Toplam Filaman")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Baskı")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Tamamlanan")
- #define MSG_INFO_PRINT_TIME _UxGT("Süre")
- #define MSG_INFO_PRINT_LONGEST _UxGT("En Uzun")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Filaman")
-#endif
-#define MSG_INFO_MIN_TEMP _UxGT("Min Sıc.")
-#define MSG_INFO_MAX_TEMP _UxGT("Max Sıc.")
-#define MSG_INFO_PSU _UxGT("Güç Kaynağı")
-#define MSG_DRIVE_STRENGTH _UxGT("Sürücü Gücü")
-#define MSG_DAC_PERCENT _UxGT("Sürücü %")
-#define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Yaz")
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("BASKI DURAKLATILDI")
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("FILAMAN YüKLE")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("FILAMAN ÇIKART")
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("Seçenekler:")
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Daha Fazla Tasviye")
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Baskıyı sürdür")
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Nozul: ")
-#define MSG_RUNOUT_SENSOR _UxGT("Runout Sensörü")
-#define MSG_ERR_HOMING_FAILED _UxGT("Sıfırlama Başarısız")
-#define MSG_ERR_PROBING_FAILED _UxGT("Probing Başarısız")
-#define MSG_M600_TOO_COLD _UxGT("M600: Çok Soğuk")
-//
-// Filament Değiştirme ekranları, 4 satırlı bir ekranda 3 satıra kadar gösterilir
-// ...veya 3 satırlı ekranda 2 satıra kadar
-#if LCD_HEIGHT >= 4
- // Up to 3 lines allowed
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Baskıya devam etmek")
- #define MSG_ADVANCED_PAUSE_WAITING_2 _UxGT("için Butona bas")
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Filaman değişimi")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("için başlama")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("bekleniyor")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Filamanı yükle")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("ve devam için")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("tuşa bas...")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Nozulü Isıtmak için")
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("Butona Bas.")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Nozul Isınıyor")
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Lütfen Bekleyin...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Filamanın çıkması")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("bekleniyor")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Filamanın yüklenmesi")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("bekleniyor..")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Filaman Temizlemesi")
- #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("için bekle")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Filaman Temizlemesi")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_2 _UxGT("bitirmek için tıkla")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Baskının devam ")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("etmesi için bekle")
-#else // LCD_HEIGHT < 4
- // Up to 2 lines allowed
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Sürdürmek İçin Tıkla")
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Lütfen bekleyiniz...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Yükle ve bas")
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Isıtmak için Tıkla")
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Isınıyor...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Çıkartılıyor...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Yüklüyor...")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Temizleniyor...")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Bitirmek için Tıkla")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Sürdürülüyor...")
-#endif // LCD_HEIGHT < 4
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" hazır.");
+ PROGMEM Language_Str MSG_BACK = _UxGT("Geri");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("SD K. Yerleştirildi.");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("SD Kart Çıkarıldı.");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Enstops"); // Max length 8 characters
+ PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Yazılımsal Endstops");
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Ana");
+ PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Gelişmiş Ayarlar");
+ PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Yapılandırma");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Oto. Başlat");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Motorları Durdur");
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Hata Ayıklama");
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Durum Çubuğu Testi");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Eksenleri Sıfırla");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("X Sıfırla");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Y Sıfırla");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Z Sıfırla");
+ PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Oto. Z-Hizalama");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("XYZ Sıfırlanıyor");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Başlatmak için tıkla");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Sonraki Nokta");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Hizalama Tamam!");
+ PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Kaçınma Yüksekliği");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Offset Ayarla");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offset Tamam");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Sıfır Belirle");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Tüm");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Tabla");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Ayarlar");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Ön Isınma ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Ön Isınma ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Ön Isınma ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Ön Isınma ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Ön Isınma ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Ön Isınma ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Ön Isınma ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Nozul");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Nozul ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Nozul ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Nozul ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Nozul ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Nozul ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Nozul ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Tüm");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Tabla");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Ayarlar");
+ PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Özel Ön Isınma");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Soğut");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Gücü Aç");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Gücü Kapat");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Ekstrüzyon");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Geri Çek");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Eksen Hareketleri");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Tabla Hizalama");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Tabla Hizası");
+ PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Hizalama Köşeleri");
+ PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Sonraki Köşe");
+ PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Mesh Düzenle");
+ PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Mesh Düzenleme Durdu");
+ PROGMEM Language_Str MSG_MESH_X = _UxGT("İndeks X");
+ PROGMEM Language_Str MSG_MESH_Y = _UxGT("İndeks Y");
+ PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Z Değeri");
+ PROGMEM Language_Str MSG_USER_MENU = _UxGT("Özel Komutlar");
+ PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("IDEX Modu");
+ PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Oto-Park");
+ PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Kopyala");
+ PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Yansıtılmış kopya");
+ PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Tam Kontrol");
+ PROGMEM Language_Str MSG_X_OFFSET = _UxGT("2. nozul X");
+ PROGMEM Language_Str MSG_Y_OFFSET = _UxGT("2. nozul Y");
+ PROGMEM Language_Str MSG_Z_OFFSET = _UxGT("2. nozul Z");
+ PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("G29 Çalışıyor");
+ PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL Araçları");
+ PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("UBL Yatak Hizalama");
+ PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Elle Mesh Oluştur");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Altlık & Ölçü Ver");
+ PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Ölçü");
+ PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Yataktan Ölçü Kaldır");
+ PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Sonrakine Git");
+ PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("UBL'yi Etkinleştir");
+ PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("UBL'yi Etkisizleştir");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Yatak Sıcaklığı");
+ PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Yatak Sıcaklığı");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Nozul Sıcaklığı");
+ PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Nozul Sıcaklığı");
+ PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Mesh Düzenleme");
+ PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Özel Mesh Düzenleme");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("İnce Ayar Mesh");
+ PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Mesh Düzenleme Tamam");
+ PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Özel Mesh Oluştur");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Mesh Oluştur");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = _UxGT("Mesh Oluştur (") PREHEAT_1_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("Mesh Oluştur (") PREHEAT_2_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Soğuk Mesh Oluştur");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Mesh Yükseklik Ayarı");
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Yükseklik miktarı");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Doğrulama Mesh");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("Doğrulama Mesh (") PREHEAT_1_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Doğrulama Mesh (") PREHEAT_2_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Özel Mesh Doğrulama");
+ PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Tabla Mesh Devam et");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Mesh Hizalama");
+ PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Nokta Hizalama");
+ PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Kafes Mesh Hizalama");
+ PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Mesh Seviyesi");
+ PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Yan Noktalar");
+ PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Haritalama Türü");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Mesh Çıkış Haritası");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Host için Çıktı");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("CSV için Çıktı");
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Yazıcıda Yedek Kpalı");
+ PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("UBL Çıkış Bilgisi");
+ PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Dolgu Miktarı");
+ PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Manuel Dolgu");
+ PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Akıllı Dogu");
+ PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Mesh Dolgu");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Tümünü Geçersiz Kıl");
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Yakını Geçersiz Kıl");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Tümünü İnce Ayarla");
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Yakını İnce Ayarla");
+ PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Mesh Depolama");
+ PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Bellek Yuvası");
+ PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Yatak Mesh Yükle");
+ PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Yatak Mesh Kayıt Et");
+ PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("M117 Mesh %i yüklendi");
+ PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("M117 Mesh %i kayıtlandı");
+ PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Depolama Yok");
+ PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Hata: UBL Kayıt");
+ PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Hata: UBL Yenileme");
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Ofset Durduruldu");
+ PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Adım Adım UBL");
+ PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Soğuk Mesh Oluştur");
+ PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Akıllı Dogu");
+ PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Doğrulama Mesh");
+ PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Tümünü İnce Ayarla");
+ PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Doğrulama Mesh");
+ PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Tümünü İnce Ayarla");
+ PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Yatak Mesh Kayıt Et");
+
+ PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("LED Kontrolü");
+ PROGMEM Language_Str MSG_LEDS = _UxGT("Işıklar");
+ PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Işık Hazır Ayarları");
+ PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Kırmızı");
+ PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Turuncu");
+ PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Sarı");
+ PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Yeşil");
+ PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Mavi");
+ PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Lacivert");
+ PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Menekşe");
+ PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Beyaz");
+ PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Varsayılan");
+ PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Özel Işıklar");
+ PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Kırmızı Şiddeti");
+ PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Yeşil Şiddeti");
+ PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Mavi Şiddeti");
+ PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Beyaz Şiddeti");
+ PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Parlaklık");
+ PROGMEM Language_Str MSG_MOVING = _UxGT("Hareket Ediyor..");
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("Durdur XY");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("X Hareketi");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Y Hareketi");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Z Hareketi");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Ekstruder");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Ekstruder ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Ekstruder ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Ekstruder ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Ekstruder ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Ekstruder ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Ekstruder ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Nozul Çok Soğuk");
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("%smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Hız");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Z Mesafesi");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozul");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Nozul ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Nozul ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Nozul ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Nozul ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Nozul ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Nozul ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Tabla");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Fan Hızı");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Fan Hızı 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Fan Hızı 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Fan Hızı 3");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Ekstra Fan Hızı");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1 = _UxGT("Ekstra Fan Hızı 1");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2 = _UxGT("Ekstra Fan Hızı 2");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3 = _UxGT("Ekstra Fan Hızı 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Akış");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Akış ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Akış ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Akış ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Akış ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Akış ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Akış ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Kontrol");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Çarpan");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Oto. Sıcaklık");
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("Açık");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Kapalı");
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Seç");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Seç ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Seç ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Seç ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Seç ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Seç ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Seç ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("İvme");
+ PROGMEM Language_Str MSG_JERK = _UxGT("Sarsım");
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-Sarsım");
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-Sarsım");
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-Sarsım");
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-Sarsım");
+ PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Jonksiyon Sapması");
+ PROGMEM Language_Str MSG_VELOCITY = _UxGT("Hız Vektörü");
+ PROGMEM Language_Str MSG_VMAX_A = _UxGT("HızVektör.max ") LCD_STR_A;
+ PROGMEM Language_Str MSG_VMAX_B = _UxGT("HızVektör.max ") LCD_STR_B;
+ PROGMEM Language_Str MSG_VMAX_C = _UxGT("HızVektör.max ") LCD_STR_C;
+ PROGMEM Language_Str MSG_VMAX_E = _UxGT("HızVektör.max ") LCD_STR_E;
+ PROGMEM Language_Str MSG_VMAX_E0 = _UxGT("HızVektör.max ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_VMAX_E1 = _UxGT("HızVektör.max ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_VMAX_E2 = _UxGT("HızVektör.max ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_VMAX_E3 = _UxGT("HızVektör.max ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_VMAX_E4 = _UxGT("HızVektör.max ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_VMAX_E5 = _UxGT("HızVektör.max ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_VMIN = _UxGT("HızVektör.min");
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("HV.gezinme min");
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Ivme");
+ PROGMEM Language_Str MSG_AMAX_A = _UxGT("Max. ivme ") LCD_STR_A;
+ PROGMEM Language_Str MSG_AMAX_B = _UxGT("Max. ivme ") LCD_STR_B;
+ PROGMEM Language_Str MSG_AMAX_C = _UxGT("Max. ivme ") LCD_STR_C;
+ PROGMEM Language_Str MSG_AMAX_E = _UxGT("Max. ivme ") LCD_STR_E;
+ PROGMEM Language_Str MSG_AMAX_E0 = _UxGT("Max. ivme ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AMAX_E1 = _UxGT("Max. ivme ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AMAX_E2 = _UxGT("Max. ivme ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AMAX_E3 = _UxGT("Max. ivme ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AMAX_E4 = _UxGT("Max. ivme ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AMAX_E5 = _UxGT("Max. ivme ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Ivme-geri çekme");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Ivme-gezinme");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Adım/mm");
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" adım/mm");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" adım/mm");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" adım/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("E adım/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT(" adım/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT(" adım/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT(" adım/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT(" adım/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT(" adım/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT(" adım/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Sıcaklık");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Hareket");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filaman");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("Ekstrüzyon/mm³");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Filaman Çapı");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Filaman Çapı ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Filaman Çapı ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Filaman Çapı ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Filaman Çapı ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Filaman Çapı ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Filaman Çapı ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Çıkart mm");
+ PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Yükle mm");
+ PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("K İlerlet");
+ PROGMEM Language_Str MSG_ADVANCE_K_E0 = _UxGT("K İlerlet ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_ADVANCE_K_E1 = _UxGT("K İlerlet ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_ADVANCE_K_E2 = _UxGT("K İlerlet ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_ADVANCE_K_E3 = _UxGT("K İlerlet ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_ADVANCE_K_E4 = _UxGT("K İlerlet ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_ADVANCE_K_E5 = _UxGT("K İlerlet ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD Kontrast");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Hafızaya Al");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Hafızadan Yükle");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Fabrika Ayarları");
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("EEPROM'u başlat");
+ PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("SD Güncellemesi");
+ PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Yazıcıyı Resetle");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Yenile");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Bilgi Ekranı");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Hazırlık");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Ayar");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Duraklat");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Sürdür");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Durdur");
+ PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Kesinti Kurtarma");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("SD Karttan Yazdır");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("SD Kart Yok!");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Uyku...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Operatör bekleniyor.");
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Baskı Duraklatıldı");
+ PROGMEM Language_Str MSG_PRINTING = _UxGT("Baskı Yapılıyor...");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Baskı Durduruldu!");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("İşlem yok.");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("Kilitlendi. ");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("Durdu. ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Geri Çek mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Re.mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Geri Çekme V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Atlama mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S UnRet mm");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("UnRet V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Oto. Geri Çekme");
+ PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("G.Çekme Boyu");
+ PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Takım Değişimi");
+ PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Yükselt");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD = _UxGT("Birincil Hız");
+ PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD = _UxGT("Geri Çekme Hızı");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Filaman Değiştir");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Filaman Değiştir ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Filaman Değiştir ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Filaman Değiştir ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Filaman Değiştir ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Filaman Değiştir ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Filaman Değiştir ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E0 = _UxGT("Filaman Yükle ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E1 = _UxGT("Filaman Yükle ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E2 = _UxGT("Filaman Yükle ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E3 = _UxGT("Filaman Yükle ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E4 = _UxGT("Filaman Yükle ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E5 = _UxGT("Filaman Yükle ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0 = _UxGT("Filaman Çıkart ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1 = _UxGT("Filaman Çıkart ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2 = _UxGT("Filaman Çıkart ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3 = _UxGT("Filaman Çıkart ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4 = _UxGT("Filaman Çıkart ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5 = _UxGT("Filaman Çıkart ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Tümünü Çıkart");
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("SD Kart Başlatılıyor");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("SD Kart Değiştir");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z Prob Açık. Tabla");
+ PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Çarpıklık Faktörü");
+ PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Self-Test");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Sıfırla BLTouch");
+ PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("BLTouch Aç");
+ PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("BLTouch Kapat");
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Z-Prob Aç");
+ PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Z-Sensör Kapat");
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Sıfırla %s%s%s Önce");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Miniadım X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Miniadım Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Miniadım Z");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Endstop iptal");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Isınma başarısız");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED = _UxGT("Yatak Isınma Başrsız");
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Hata: Sıcaklık Aşımı");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("TERMAL PROBLEM");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("TABLA TERMAL PROBLEM");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Hata: MAX.SICAKLIK");
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Hata: MIN.SICAKLIK");
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("Hata: MAX.SIC. TABLA");
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Hata: MIN.SIC. TABLA");
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Önce XY Sıfırla");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("YAZICI DURDURULDU");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Lütfen Resetleyin");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("G"); // One character only
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("S"); // One character only
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("D"); // One character only
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Isınıyor...");
+ PROGMEM Language_Str MSG_COOLING = _UxGT("Soğuyor...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Tabla Isınıyor...");
+ PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Tabla Soğuyor...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrasyonu");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Ayarla X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Ayarla Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Ayarla Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Ayarla Merkez");
+ PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Delta Ayarları");
+ PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Oto Kalibrasyon");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Delta Yük. Ayarla");
+ PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Z Prob Ofseti");
+ PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Çapral Mil");
+ PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Yükseklik");
+ PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Yarıçap");
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Yazıcı Hakkında");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Yazıcı Bilgisi");
+ PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-Nokta Hizalama");
+ PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Doğrusal Hizalama");
+ PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("İki Yönlü Doğ. Hiza.");
+ PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Birleşik Tabla Hiza.");
+ PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Mesh Hizalama");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("İstatistikler");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Kontrolcü Bilgisi");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistörler");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Ekstruderler");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("İletişim Hızı");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokol");
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Aydınlatmayı Aç");
+ PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Aydınlatma Parlaklğı");
+
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Yanlış Yazıcı");
+
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Baskı Sayısı");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Tamamlanan");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Toplam Baskı Süresi");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("En Uzun Baskı Süresi");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Toplam Filaman");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Baskı");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Tamamlanan");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Süre");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("En Uzun");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Filaman");
+ #endif
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Min Sıc.");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Max Sıc.");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Güç Kaynağı");
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Sürücü Gücü");
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("Sürücü %");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Yaz");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("BASKI DURAKLATILDI");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("FILAMAN YüKLE");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("FILAMAN ÇIKART");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("Seçenekler:");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Daha Fazla Tasviye");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Baskıyı sürdür");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozul: ");
+ PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Runout Sensörü");
+ PROGMEM Language_Str MSG_LCD_HOMING_FAILED = _UxGT("Sıfırlama Başarısız");
+ PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Probing Başarısız");
+ PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: Çok Soğuk");
+ //
+ // Filament Değiştirme ekranları, 4 satırlı bir ekranda 3 satıra kadar gösterilir
+ // ...veya 3 satırlı ekranda 2 satıra kadar
+ #if LCD_HEIGHT >= 4
+ // Up to 3 lines allowed
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Baskıya devam etmek", "için Butona bas"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Filaman değişimi", "için başlama", "bekleniyor"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Filamanı yükle", "ve devam için", "tuşa bas..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Nozulü Isıtmak için", "Butona Bas."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nozul Isınıyor", "Lütfen Bekleyin..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Filamanın çıkması", "bekleniyor"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Filamanın yüklenmesi", "bekleniyor.."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Filaman Temizlemesi", "için bekle"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Filaman Temizlemesi", "bitirmek için tıkla"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Baskının devam ", "etmesi için bekle"));
+ #else // LCD_HEIGHT < 4
+ // Up to 2 lines allowed
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Sürdürmek İçin Tıkla"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Lütfen bekleyiniz..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Yükle ve bas"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Isıtmak için Tıkla"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Isınıyor..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Çıkartılıyor..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Yüklüyor..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Temizleniyor..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Bitirmek için Tıkla"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Sürdürülüyor..."));
+ #endif // LCD_HEIGHT < 4
+}
diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h
index b358743be61f..769d1c97efb8 100644
--- a/Marlin/src/lcd/language/language_uk.h
+++ b/Marlin/src/lcd/language/language_uk.h
@@ -30,213 +30,304 @@
*/
#define DISPLAY_CHARSET_ISO10646_5
-#define CHARSIZE 2
-#define WELCOME_MSG MACHINE_NAME _UxGT(" готовий.")
-#define MSG_MEDIA_INSERTED _UxGT("Картка вставлена")
-#define MSG_MEDIA_REMOVED _UxGT("Картка видалена")
-#define MSG_LCD_ENDSTOPS _UxGT("Кінцевик") // Max length 8 characters
-#define MSG_MAIN _UxGT("Меню")
-#define MSG_AUTOSTART _UxGT("Автостарт")
-#define MSG_DISABLE_STEPPERS _UxGT("Вимк. двигуни")
-#define MSG_AUTO_HOME _UxGT("Авто паркування")
-#define MSG_AUTO_HOME_X _UxGT("Паркування X")
-#define MSG_AUTO_HOME_Y _UxGT("Паркування Y")
-#define MSG_AUTO_HOME_Z _UxGT("Паркування Z")
-#define MSG_LEVEL_BED_HOMING _UxGT("Паркування XYZ")
-#define MSG_LEVEL_BED_WAITING _UxGT("Почати")
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Слідуюча Точка")
-#define MSG_LEVEL_BED_DONE _UxGT("Завершено!")
-#define MSG_SET_HOME_OFFSETS _UxGT("Зберегти паркув.")
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Зміщення застос.")
-#define MSG_SET_ORIGIN _UxGT("Встанов. початок")
-#define MSG_PREHEAT_1 _UxGT("Нагрів " PREHEAT_1_LABEL)
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" Все")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" Стіл")
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" нал.")
-#define MSG_PREHEAT_2 _UxGT("Нагрів " PREHEAT_2_LABEL)
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" Все")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" Стіл")
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" нал.")
-#define MSG_COOLDOWN _UxGT("Охолодження")
-#define MSG_SWITCH_PS_ON _UxGT("Увімкнути живлення")
-#define MSG_SWITCH_PS_OFF _UxGT("Вимкнути живлення")
-#define MSG_EXTRUDE _UxGT("Екструзія")
-#define MSG_RETRACT _UxGT("Втягування")
-#define MSG_MOVE_AXIS _UxGT("Рух по осям")
-#define MSG_BED_LEVELING _UxGT("Нівелювання столу")
-#define MSG_LEVEL_BED _UxGT("Нівелювання столу")
-#define MSG_MOVE_X _UxGT("Рух по X")
-#define MSG_MOVE_Y _UxGT("Рух по Y")
-#define MSG_MOVE_Z _UxGT("Рух по Z")
-#define MSG_MOVE_E _UxGT("Екструдер")
-#define MSG_MOVE_Z_DIST _UxGT("Рух по %smm")
-#define MSG_MOVE_01MM _UxGT("Рух по 0.1mm")
-#define MSG_MOVE_1MM _UxGT("Рух по 1mm")
-#define MSG_MOVE_10MM _UxGT("Рух по 10mm")
-#define MSG_SPEED _UxGT("Швидкість")
-#define MSG_BED_Z _UxGT("Z Столу")
-#define MSG_NOZZLE _UxGT("Сопло")
-#define MSG_BED _UxGT("Стіл")
-#define MSG_FAN_SPEED _UxGT("Охолодж.")
-#define MSG_FLOW _UxGT("Потік")
-#define MSG_CONTROL _UxGT("Налаштування")
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Мін")
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Макс")
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Факт")
-#define MSG_AUTOTEMP _UxGT("Автотемпер.")
-#define MSG_LCD_ON _UxGT("Увімк.")
-#define MSG_LCD_OFF _UxGT("Вимк.")
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Вибрати")
-#define MSG_ACC _UxGT("Приск.")
-#define MSG_JERK _UxGT("Ривок")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Va-ривок")
- #define MSG_VB_JERK _UxGT("Vb-ривок")
- #define MSG_VC_JERK _UxGT("Vc-ривок")
-#else
- #define MSG_VA_JERK _UxGT("Vx-ривок")
- #define MSG_VB_JERK _UxGT("Vy-ривок")
- #define MSG_VC_JERK _UxGT("Vz-ривок")
-#endif
-#define MSG_VE_JERK _UxGT("Ve-ривок")
-#define MSG_VMAX _UxGT("Vмакс")
-#define MSG_VMIN _UxGT("Vмін")
-#define MSG_VTRAV_MIN _UxGT("Vруху мін")
-#define MSG_AMAX _UxGT("Aмакс ")
-#define MSG_A_RETRACT _UxGT("A-втягув.")
-#define MSG_A_TRAVEL _UxGT("A-руху")
-#define MSG_STEPS_PER_MM _UxGT("Кроків/мм")
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("Aкроків/мм")
- #define MSG_BSTEPS _UxGT("Bкроків/мм")
- #define MSG_CSTEPS _UxGT("Cкроків/мм")
-#else
- #define MSG_ASTEPS _UxGT("Xкроків/мм")
- #define MSG_BSTEPS _UxGT("Yкроків/мм")
- #define MSG_CSTEPS _UxGT("Zкроків/мм")
-#endif
-#define MSG_ESTEPS _UxGT("Eкроків/мм")
-#define MSG_E1STEPS _UxGT("E1кроків/мм")
-#define MSG_E2STEPS _UxGT("E2кроків/мм")
-#define MSG_E3STEPS _UxGT("E3кроків/мм")
-#define MSG_E4STEPS _UxGT("E4кроків/мм")
-#define MSG_E5STEPS _UxGT("E5кроків/мм")
-#define MSG_E6STEPS _UxGT("E6кроків/мм")
-#define MSG_TEMPERATURE _UxGT("Температура")
-#define MSG_MOTION _UxGT("Рух")
-#define MSG_FILAMENT _UxGT("Волокно")
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E в мм3")
-#define MSG_FILAMENT_DIAM _UxGT("Діам. волок.")
-#define MSG_CONTRAST _UxGT("контраст LCD")
-#define MSG_STORE_EEPROM _UxGT("Зберегти в ПЗП")
-#define MSG_LOAD_EEPROM _UxGT("Зчитати з ПЗП")
-#define MSG_RESTORE_FAILSAFE _UxGT("Відновити базові")
-#define MSG_REFRESH _UxGT("Поновити")
-#define MSG_WATCH _UxGT("Інформація")
-#define MSG_PREPARE _UxGT("Підготувати")
-#define MSG_TUNE _UxGT("Підлаштування")
-#define MSG_PAUSE_PRINT _UxGT("Призупинити друк")
-#define MSG_RESUME_PRINT _UxGT("Відновити друк")
-#define MSG_STOP_PRINT _UxGT("Скасувати друк")
-#define MSG_MEDIA_MENU _UxGT("Друкувати з SD")
-#define MSG_NO_MEDIA _UxGT("Відсутня SD карт.")
-#define MSG_DWELL _UxGT("Сплячка...")
-#define MSG_USERWAIT _UxGT("Очікування дій...")
-#define MSG_PRINT_ABORTED _UxGT("Друк скасовано")
-#define MSG_NO_MOVE _UxGT("Немає руху.")
-#define MSG_KILLED _UxGT("ПЕРЕРВАНО. ")
-#define MSG_STOPPED _UxGT("ЗУПИНЕНО. ")
-#define MSG_FILAMENTCHANGE _UxGT("Зміна волокна")
-#define MSG_INIT_MEDIA _UxGT("Старт SD картки")
-#define MSG_CHANGE_MEDIA _UxGT("Заміна SD карти")
-#define MSG_ZPROBE_OUT _UxGT("Z дет. не в межах")
-#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Само-Тест")
-#define MSG_BLTOUCH_RESET _UxGT("Скинути BLTouch")
-#define MSG_HOME_FIRST _UxGT("Дім %s%s%s перший")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Зміщення Z")
-#define MSG_BABYSTEP_X _UxGT("Мікрокрок X")
-#define MSG_BABYSTEP_Y _UxGT("Мікрокрок Y")
-#define MSG_BABYSTEP_Z _UxGT("Мікрокрок Z")
-#define MSG_ENDSTOP_ABORT _UxGT("невдача кінцевика")
-#define MSG_HEATING_FAILED_LCD _UxGT("Невдалий нагрів")
-#define MSG_THERMAL_RUNAWAY _UxGT("ЗБІЙ ТЕМПЕРАТУРИ")
-#define MSG_ERR_Z_HOMING _UxGT("Дім XY перший")
-#define MSG_HALTED _UxGT("ПРИНТЕР ЗУПИНЕНО")
-#define MSG_PLEASE_RESET _UxGT("Перезавантажте")
-#define MSG_SHORT_DAY _UxGT("д") // One character only
-#define MSG_SHORT_HOUR _UxGT("г") // One character only
-#define MSG_SHORT_MINUTE _UxGT("х") // One character only
-#define MSG_HEATING _UxGT("Нагрівання...")
-#define MSG_BED_HEATING _UxGT("Нагрівання столу...")
-#define MSG_DELTA_CALIBRATE _UxGT("Калібр. Delta")
-#define MSG_DELTA_CALIBRATE_X _UxGT("Калібрування X")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Калібрування Y")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Калібрування Z")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Калібр. Центру")
+namespace Language_uk {
+ using namespace Language_en; // Inherit undefined strings from English
-#define MSG_INFO_MENU _UxGT("Про принтер")
-#define MSG_INFO_PRINTER_MENU _UxGT("Інформація")
-#define MSG_INFO_STATS_MENU _UxGT("Статистика")
-#define MSG_INFO_BOARD_MENU _UxGT("Про плату")
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Термістори")
-#define MSG_INFO_EXTRUDERS _UxGT("Екструдери")
-#define MSG_INFO_BAUDRATE _UxGT("біт/с")
-#define MSG_INFO_PROTOCOL _UxGT("Протокол")
-#define MSG_CASE_LIGHT _UxGT("Підсвітка")
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Ukranian");
-#define MSG_EXPECTED_PRINTER _UxGT("Неправильний принтер")
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" готовий.");
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Картка вставлена");
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Картка видалена");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Кінцевик"); // Max length 8 characters
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Меню");
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Автостарт");
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Вимк. двигуни");
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Авто паркування");
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Паркування X");
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Паркування Y");
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Паркування Z");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Паркування XYZ");
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Почати");
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Слідуюча Точка");
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Завершено!");
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Зберегти паркув.");
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Зміщення застос.");
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Встанов. початок");
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Нагрів ") PREHEAT_1_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Нагрів ") PREHEAT_1_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Нагрів ") PREHEAT_1_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Нагрів ") PREHEAT_1_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Нагрів ") PREHEAT_1_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Нагрів ") PREHEAT_1_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Нагрів ") PREHEAT_1_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Сопло");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Сопло ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Сопло ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Сопло ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Сопло ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Сопло ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Сопло ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Все");
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" Стіл");
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" нал.");
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Нагрів ") PREHEAT_2_LABEL;
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Нагрів ") PREHEAT_2_LABEL " " LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Нагрів ") PREHEAT_2_LABEL " " LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Нагрів ") PREHEAT_2_LABEL " " LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Нагрів ") PREHEAT_2_LABEL " " LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Нагрів ") PREHEAT_2_LABEL " " LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Нагрів ") PREHEAT_2_LABEL " " LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Сопло");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Сопло ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Сопло ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Сопло ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Сопло ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Сопло ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Сопло ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Все");
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Стіл");
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" нал.");
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Охолодження");
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Увімкнути живлення");
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Вимкнути живлення");
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Екструзія");
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Втягування");
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Рух по осям");
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Нівелювання столу");
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Нівелювання столу");
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Рух по X");
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Рух по Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Рух по Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Екструдер");
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Екструдер ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Екструдер ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Екструдер ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Екструдер ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Екструдер ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Екструдер ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("Рух по %smm");
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Рух по 0.1mm");
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Рух по 1mm");
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Рух по 10mm");
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Швидкість");
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Z Столу");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Сопло");
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Сопло ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Сопло ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Сопло ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Сопло ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Сопло ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Сопло ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = _UxGT("Стіл");
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Охолодж.");
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Охолодж. 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Охолодж. 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Охолодж. 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Потік");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Потік ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Потік ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Потік ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Потік ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Потік ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Потік ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Налаштування");
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Мін");
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Макс");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Факт");
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Автотемпер.");
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("Увімк.");
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Вимк.");
+ PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
+ PROGMEM Language_Str MSG_PID_P_E0 = _UxGT("PID-P ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_P_E1 = _UxGT("PID-P ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_P_E2 = _UxGT("PID-P ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_P_E3 = _UxGT("PID-P ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_P_E4 = _UxGT("PID-P ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_P_E5 = _UxGT("PID-P ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
+ PROGMEM Language_Str MSG_PID_I_E0 = _UxGT("PID-I ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_I_E1 = _UxGT("PID-I ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_I_E2 = _UxGT("PID-I ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_I_E3 = _UxGT("PID-I ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_I_E4 = _UxGT("PID-I ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_I_E5 = _UxGT("PID-I ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
+ PROGMEM Language_Str MSG_PID_D_E0 = _UxGT("PID-D ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_D_E1 = _UxGT("PID-D ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_D_E2 = _UxGT("PID-D ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_D_E3 = _UxGT("PID-D ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_D_E4 = _UxGT("PID-D ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_D_E5 = _UxGT("PID-D ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
+ PROGMEM Language_Str MSG_PID_C_E0 = _UxGT("PID-C ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_C_E1 = _UxGT("PID-C ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_C_E2 = _UxGT("PID-C ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_C_E3 = _UxGT("PID-C ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_C_E4 = _UxGT("PID-C ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_C_E5 = _UxGT("PID-C ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Вибрати");
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Вибрати ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Вибрати ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Вибрати ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Вибрати ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Вибрати ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Вибрати ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Приск.");
+ PROGMEM Language_Str MSG_JERK = _UxGT("Ривок");
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-ривок");
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-ривок");
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-ривок");
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-ривок");
+ PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vмакс") LCD_STR_A;
+ PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vмакс") LCD_STR_B;
+ PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vмакс") LCD_STR_C;
+ PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vмакс") LCD_STR_E;
+ PROGMEM Language_Str MSG_VMAX_E0 = _UxGT("Vмакс ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_VMAX_E1 = _UxGT("Vмакс ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_VMAX_E2 = _UxGT("Vмакс ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_VMAX_E3 = _UxGT("Vмакс ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_VMAX_E4 = _UxGT("Vмакс ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_VMAX_E5 = _UxGT("Vмакс ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_VMIN = _UxGT("Vмін");
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vруху мін");
+ PROGMEM Language_Str MSG_AMAX_A = _UxGT("Aмакс ") LCD_STR_A;
+ PROGMEM Language_Str MSG_AMAX_B = _UxGT("Aмакс ") LCD_STR_B;
+ PROGMEM Language_Str MSG_AMAX_C = _UxGT("Aмакс ") LCD_STR_C;
+ PROGMEM Language_Str MSG_AMAX_E = _UxGT("Aмакс ") LCD_STR_E;
+ PROGMEM Language_Str MSG_AMAX_E0 = _UxGT("Aмакс ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_AMAX_E1 = _UxGT("Aмакс ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AMAX_E2 = _UxGT("Aмакс ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AMAX_E3 = _UxGT("Aмакс ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AMAX_E4 = _UxGT("Aмакс ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AMAX_E5 = _UxGT("Aмакс ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-втягув.");
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-руху");
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Кроків/мм");
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT("кроків/мм");
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT("кроків/мм");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT("кроків/мм");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("Eкроків/мм");
+ PROGMEM Language_Str MSG_E0_STEPS = LCD_STR_E0 _UxGT("кроків/мм");
+ PROGMEM Language_Str MSG_E1_STEPS = LCD_STR_E1 _UxGT("кроків/мм");
+ PROGMEM Language_Str MSG_E2_STEPS = LCD_STR_E2 _UxGT("кроків/мм");
+ PROGMEM Language_Str MSG_E3_STEPS = LCD_STR_E3 _UxGT("кроків/мм");
+ PROGMEM Language_Str MSG_E4_STEPS = LCD_STR_E4 _UxGT("кроків/мм");
+ PROGMEM Language_Str MSG_E5_STEPS = LCD_STR_E5 _UxGT("кроків/мм");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Температура");
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Рух");
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Волокно");
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E в мм3");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Діам. волок.");
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Діам. волок. ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Діам. волок. ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Діам. волок. ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Діам. волок. ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Діам. волок. ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Діам. волок. ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("контраст LCD");
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Зберегти в ПЗП");
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Зчитати з ПЗП");
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Відновити базові");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Поновити");
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Інформація");
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Підготувати");
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Підлаштування");
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Призупинити друк");
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Відновити друк");
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Скасувати друк");
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Друкувати з SD");
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Відсутня SD карт.");
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Сплячка...");
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Очікування дій...");
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Друк скасовано");
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Немає руху.");
+ PROGMEM Language_Str MSG_KILLED = _UxGT("ПЕРЕРВАНО. ");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("ЗУПИНЕНО. ");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Зміна волокна");
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Зміна волокна ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Зміна волокна ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Зміна волокна ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Зміна волокна ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Зміна волокна ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Зміна волокна ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Старт SD картки");
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Заміна SD карти");
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z дет. не в межах");
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Само-Тест");
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Скинути BLTouch");
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Дім %s%s%s перший");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Зміщення Z");
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Мікрокрок X");
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Мікрокрок Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Мікрокрок Z");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("невдача кінцевика");
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Невдалий нагрів");
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("ЗБІЙ ТЕМПЕРАТУРИ");
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Дім XY перший");
+ PROGMEM Language_Str MSG_HALTED = _UxGT("ПРИНТЕР ЗУПИНЕНО");
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Перезавантажте");
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("д"); // One character only
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("г"); // One character only
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("х"); // One character only
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Нагрівання...");
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Нагрівання столу...");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Калібр. Delta");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Калібрування X");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Калібрування Y");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Калібрування Z");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Калібр. Центру");
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("К-сть друків")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Завершено")
- #define MSG_INFO_PRINT_TIME _UxGT("Весь час друку")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Найдовший час")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Екструдовано")
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("Друків")
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Завершено")
- #define MSG_INFO_PRINT_TIME _UxGT("Загалом")
- #define MSG_INFO_PRINT_LONGEST _UxGT("Найдовший")
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Ексдруд.")
-#endif
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Про принтер");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Інформація");
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Статистика");
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Про плату");
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Термістори");
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Екструдери");
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("біт/с");
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Протокол");
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Підсвітка");
-#define MSG_INFO_MIN_TEMP _UxGT("Мін Темп.")
-#define MSG_INFO_MAX_TEMP _UxGT("Макс Темп.")
-#define MSG_INFO_PSU _UxGT("Джерело жив.")
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("Неправильний принтер");
-#define MSG_DRIVE_STRENGTH _UxGT("Сила мотору")
-#define MSG_DAC_PERCENT _UxGT("% мотору")
-#define MSG_DAC_EEPROM_WRITE _UxGT("Запис ЦАП на ПЗП")
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("К-сть друків");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Завершено");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Весь час друку");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Найдовший час");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Екструдовано");
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Друків");
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Завершено");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Загалом");
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Найдовший");
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Ексдруд.");
+ #endif
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Відновити друк")
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Мін Темп.");
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Макс Темп.");
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Джерело жив.");
-#if LCD_HEIGHT >= 4
- // Up to 3 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Зачекайте на")
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("початок заміни")
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("волокна")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Зачекайте на")
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("вивід волокна")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Вставте волокно")
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("та натисніть для")
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("продовження...")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Зачекайте на")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("ввід волокна")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Зачекайте на")
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("відновлення")
- #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("друку")
-#else // LCD_HEIGHT < 4
- // Up to 2 lines allowed
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Зачекайте...")
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Вивід...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Вставте і нат.")
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Ввід...")
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Відновлення...")
-#endif // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Сила мотору");
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("% мотору");
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Запис ЦАП на ПЗП");
+
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Відновити друк");
+
+ #if LCD_HEIGHT >= 4
+ // Up to 3 lines allowed
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Зачекайте на", "початок заміни", "волокна"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Зачекайте на", "вивід волокна"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Вставте волокно", "та натисніть для", "продовження..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Зачекайте на", "ввід волокна"));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Зачекайте на", "відновлення", "друку"));
+ #else
+ // Up to 2 lines allowed
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Зачекайте..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Вивід..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Вставте і нат."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Ввід..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Відновлення..."));
+ #endif
+}
diff --git a/Marlin/src/lcd/language/language_vi.h b/Marlin/src/lcd/language/language_vi.h
index 3b8885e707c0..abb96a58a1cd 100644
--- a/Marlin/src/lcd/language/language_vi.h
+++ b/Marlin/src/lcd/language/language_vi.h
@@ -28,410 +28,518 @@
* See also http://marlinfw.org/docs/development/lcd_language.html
*
*/
+namespace Language_vi {
+ using namespace Language_en; // Inherit undefined strings from English
-#define CHARSIZE 2
+ constexpr uint8_t CHARSIZE = 2;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Vietnamese");
-#define THIS_LANGUAGES_SPECIAL_SYMBOLS _UxGT("àạậẵắấầđẻểếềìỉởộỗợúự")
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" Sẵn sàng."); // Ready
+ PROGMEM Language_Str MSG_BACK = _UxGT("Trở lại"); // Back
+ PROGMEM Language_Str MSG_SD_INSERTED = _UxGT("Thẻ được cắm vào"); // Card inserted
+ PROGMEM Language_Str MSG_SD_REMOVED = _UxGT("Thẻ được rút ra");
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Công tắc"); // Endstops - công tắc hành trình
+ PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Công tắc mềm"); // soft Endstops
+ PROGMEM Language_Str MSG_MAIN = _UxGT("Chính"); // Main
+ PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Thiết lập cấp cao"); // Advanced Settings
+ PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Cấu hình"); // Configuration
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Khởi chạy tự động"); // Autostart
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Tắt động cơ bước"); // Disable steppers
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu gỡ lỗi"); // Debug Menu
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Kiểm tra tiến độ"); // Progress bar test
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Về nhà tự động"); // Auto home
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Về nhà X"); // home x
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Về nhà Y"); // home y
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Về nhà Z");
+ PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Chỉnh canh Z tự động");
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Đang về nhà XYZ"); // Homing XYZ
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Nhấn để bắt đầu"); // Click to Begin
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Điểm tiếp theo"); // Next Point
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("San lấp được hoàn thành"); // Leveling Done!
+ PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Chiều cao mờ dần"); // Fade Height
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Đặt bù đắp nhà"); // Set home offsets
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Bù đắp được áp dụng"); // Offsets applied
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Đặt nguồn gốc"); // Set origin
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước"); // Preheat
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước ") LCD_STR_N0; // Preheat
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước ") LCD_STR_N1; // Preheat
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước ") LCD_STR_N2; // Preheat
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước ") LCD_STR_N3; // Preheat
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước ") LCD_STR_N4; // Preheat
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước ") LCD_STR_N5; // Preheat
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu");
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Tất cả"); // all
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Bàn"); // bed -- using vietnamese term for 'table' instead
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Cấu hình"); // conf
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" trước"); // Preheat
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" trước ") LCD_STR_N0; // Preheat
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" trước ") LCD_STR_N1; // Preheat
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" trước ") LCD_STR_N2; // Preheat
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" trước ") LCD_STR_N3; // Preheat
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" trước ") LCD_STR_N4; // Preheat
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" trước ") LCD_STR_N5; // Preheat
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Đầu");
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Đầu ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Đầu ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Đầu ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Đầu ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Đầu ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Đầu ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Tất cả"); // all
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Bàn"); // bed -- using vietnamese term for 'table' instead
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Làm nóng ") PREHEAT_2_LABEL _UxGT(" Cấu hình"); // conf
+ PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Sự nóng trước tự chọn"); // Preheat Custom
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Nguội xuống"); // Cooldown
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Bật nguồn"); // Switch power on
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Tắt nguồn"); // Switch power off
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Ép đùn"); // Extrude
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("Rút lại"); // Retract
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Di chuyển trục"); // Move axis
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("San Lấp Bàn"); // Bed Leveling
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Làm bằng mặt bàn"); // Level bed
+ PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Làm bằng góc bàn"); // Level corners
+ PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Góc tiếp theo"); // Next corner
+ PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Chỉnh lưới đã dừng"); // Mesh Editing Stopped
+ PROGMEM Language_Str MSG_MESH_X = _UxGT("Mục lục X"); // Index X
+ PROGMEM Language_Str MSG_MESH_Y = _UxGT("Mục lục Y");
+ PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Giá trị Z"); // Z Value
+ PROGMEM Language_Str MSG_USER_MENU = _UxGT("Các lệnh tự chọn"); // Custom Commands
+ PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Đang chạy G29"); // Doing G29
+ PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Công cụ UBL"); // UBL tools
+ PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("San Lấp Bàn Thống Nhất (UBL)"); // Unified Bed Leveling
+ PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("chế độ IDEX"); // IDEX Mode
+ PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Đậu tự động"); // Auto-Park
+ PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Sự gấp đôi"); // Duplication
+ PROGMEM Language_Str MSG_IDEX_MODE_SCALED_COPY = _UxGT("Bản sao thu nhỏ");
+ PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Toàn quyền điều khiển"); // Full control
+ PROGMEM Language_Str MSG_IDEX_X_OFFSET = _UxGT("Đầu phun X nhì"); // 2nd nozzle X
+ PROGMEM Language_Str MSG_IDEX_Y_OFFSET = _UxGT("Đầu phun Y nhì");
+ PROGMEM Language_Str MSG_IDEX_Z_OFFSET = _UxGT("Đầu phun Z nhì");
+ PROGMEM Language_Str MSG_IDEX_SAVE_OFFSETS = _UxGT("Lưu bù đắp"); // Save offsets
+ PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Tự xây dựng lưới"); // Manually Build Mesh
+ PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Đặt chêm và đo"); // Place shim & measure
+ PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Đo"); // Measure
+ PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Tháo và đo bàn"); // Remove & measure bed
+ PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Chuyển sang tiếp theo"); // moving to next
+ PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Bật UBL");
+ PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Tắt UBL");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Nhiệt độ bàn"); // Bed Temp
+ PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Nhiệt độ đầu phun"); // Hotend Temp
+ PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
+ PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Chỉnh sửa lưới"); // Mesh Edit
+ PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Chỉnh sửa lưới tự chọn"); // Edit Custom Mesh
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Chỉnh lưới chính xác"); // Fine tuning mesh
+ PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Chỉnh sửa xong lưới"); // Done Editing Mesh
+ PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Xây dựng lưới tự chọn"); // Build Custom Mesh
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Xây dựng lưới"); // Build Mesh
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = _UxGT("Xây dựng lưới (") PREHEAT_1_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("Xây dựng lưới (") PREHEAT_2_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Xây dựng lưới lạnh"); // Build cold mesh
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Điều chỉnh chiều cao lưới"); // Adjust Mesh Height
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Số lượng chiều cao"); // Height Amount
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Thẩm tra lưới"); // Validate Mesh
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("Thẩm tra lưới (") PREHEAT_1_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Thẩm tra lưới (") PREHEAT_2_LABEL _UxGT(")");
+ PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Thẩm tra lưới tự chọn"); // validate custom mesh
+ PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Tiếp tục xây lưới bàn"); // Continue Bed Mesh
+ PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Đang san lấp lưới"); // Mesh Leveling
+ PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Đang san lấp 3-điểm"); // 3-Point Leveling
+ PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Đang san lấp lưới phẳng"); // Grid (planar) Mesh Leveling
+ PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Làm bằng lưới"); // Level Mesh
+ PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Điểm bên cạnh"); // Side Points
+ PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Loại bản đồ"); // Map Type
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Đầu ra bản đồ lưới"); // Output Mesh Map
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Đầu ra cho máy chủ"); // Output for Host
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Đầu ra cho CSV"); // Output for CSV
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Hỗ trợ lưới"); // Off Printer Backup | backup mesh
+ PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Đầu ra thông tin UBL"); // Output UBL Info
+ PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Chỉnh sửa lưới"); // Edit mesh
+ PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Số lượng lấp đầy"); // Fill-in Amount
+ PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Tự lấp đầy"); // Manual Fill-in
+ PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Lấp đầy thông minh"); // Smart Fill-in
+ PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Lưới lấp đầy"); // Fill-in Mesh
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Bác bỏ tất cả"); // Invalidate All
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Bác bỏ gần nhất"); // Invalidate Closest
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Chỉnh chính xác tất cả"); // Fine Tune ALl
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Chỉnh chính xác gần nhất"); // Fine Tune Closest
+ PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Lưu trữ lưới"); // Mesh Storage
+ PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Khe nhớ"); // Memory Slot
+ PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Tải lưới bàn"); // Load Bed Mesh
+ PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Lưu lưới bàn"); // Save Bed Mesh
+ PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("M117 %i lưới được nạp"); // Mesh %i loaded
+ PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("M117 %i lưới đã lưu");
+ PROGMEM Language_Str MSG_NO_STORAGE = _UxGT("Không lưu trữ"); // No Storage
+ PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Điều sai: Lưu UBL"); // Err: UBL Save
+ PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Điều Sai: Khôi Phục UBL"); // Err: UBL Restore
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Đầu Dò-Z Đã Ngừng"); // Z-Offset Stopped
+ PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Bước-Từng-Bước UBL"); // Step-By-Step UBL
+ PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Xây dựng lưới lạnh");
+ PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Lấp đầy thông minh");
+ PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Thẩm tra lưới");
+ PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Chỉnh chính xác tất cả");
+ PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Thẩm tra lưới");
+ PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Chỉnh chính xác tất cả");
+ PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Lưu lưới bàn");
-#define WELCOME_MSG MACHINE_NAME _UxGT(" Sẵn sàng.") // Ready
-#define MSG_BACK _UxGT("Trở lại") // Back
-#define MSG_SD_INSERTED _UxGT("Thẻ được cắm vào") // Card inserted
-#define MSG_SD_REMOVED _UxGT("Thẻ được rút ra")
-#define MSG_LCD_ENDSTOPS _UxGT("Công tắc") // Endstops - công tắc hành trình
-#define MSG_LCD_SOFT_ENDSTOPS _UxGT("Công tắc mềm") // soft Endstops
-#define MSG_MAIN _UxGT("Chính") // Main
-#define MSG_ADVANCED_SETTINGS _UxGT("Thiết lập cấp cao") // Advanced Settings
-#define MSG_CONFIGURATION _UxGT("Cấu hình") // Configuration
-#define MSG_AUTOSTART _UxGT("Khởi chạy tự động") // Autostart
-#define MSG_DISABLE_STEPPERS _UxGT("Tắt động cơ bước") // Disable steppers
-#define MSG_DEBUG_MENU _UxGT("Menu gỡ lỗi") // Debug Menu
-#define MSG_PROGRESS_BAR_TEST _UxGT("Kiểm tra tiến độ") // Progress bar test
-#define MSG_AUTO_HOME _UxGT("Về nhà tự động") // Auto home
-#define MSG_AUTO_HOME_X _UxGT("Về nhà X") // home x
-#define MSG_AUTO_HOME_Y _UxGT("Về nhà Y") // home y
-#define MSG_AUTO_HOME_Z _UxGT("Về nhà Z")
-#define MSG_AUTO_Z_ALIGN _UxGT("Chỉnh canh Z tự động")
-#define MSG_LEVEL_BED_HOMING _UxGT("Đang về nhà XYZ") // Homing XYZ
-#define MSG_LEVEL_BED_WAITING _UxGT("Nhấn để bắt đầu") // Click to Begin
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("Điểm tiếp theo") // Next Point
-#define MSG_LEVEL_BED_DONE _UxGT("San lấp được hoàn thành") // Leveling Done!
-#define MSG_Z_FADE_HEIGHT _UxGT("Chiều cao mờ dần") // Fade Height
-#define MSG_SET_HOME_OFFSETS _UxGT("Đặt bù đắp nhà") // Set home offsets
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("Bù đắp được áp dụng") // Offsets applied
-#define MSG_SET_ORIGIN _UxGT("Đặt nguồn gốc") // Set origin
-#define MSG_PREHEAT_1 _UxGT("Làm nóng " PREHEAT_1_LABEL " trước") // Preheat
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ")
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" Tất cả") // all
-#define MSG_PREHEAT_1_END MSG_PREHEAT_1 _UxGT(" Đầu")
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" Bàn") // bed -- using vietnamese term for 'table' instead
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" Cấu hình") // conf
-#define MSG_PREHEAT_2 _UxGT("Làm nóng " PREHEAT_2_LABEL " trước")
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ")
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" Tất cả")
-#define MSG_PREHEAT_2_END MSG_PREHEAT_2 _UxGT(" Đầu")
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" Bàn") // bed -- using vietnamese term for 'table' instead
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" Cấu hình")
-#define MSG_PREHEAT_CUSTOM _UxGT("Sự nóng trước tự chọn") // Preheat Custom
-#define MSG_COOLDOWN _UxGT("Nguội xuống") // Cooldown
-#define MSG_SWITCH_PS_ON _UxGT("Bật nguồn") // Switch power on
-#define MSG_SWITCH_PS_OFF _UxGT("Tắt nguồn") // Switch power off
-#define MSG_EXTRUDE _UxGT("Ép đùn") // Extrude
-#define MSG_RETRACT _UxGT("Rút lại") // Retract
-#define MSG_MOVE_AXIS _UxGT("Di chuyển trục") // Move axis
-#define MSG_BED_LEVELING _UxGT("San Lấp Bàn") // Bed Leveling
-#define MSG_LEVEL_BED _UxGT("Làm bằng mặt bàn") // Level bed
-#define MSG_LEVEL_CORNERS _UxGT("Làm bằng góc bàn") // Level corners
-#define MSG_NEXT_CORNER _UxGT("Góc tiếp theo") // Next corner
-#define MSG_EDITING_STOPPED _UxGT("Chỉnh lưới đã dừng") // Mesh Editing Stopped
-#define MSG_MESH_X _UxGT("Mục lục X") // Index X
-#define MSG_MESH_Y _UxGT("Mục lục Y")
-#define MSG_MESH_EDIT_Z _UxGT("Giá trị Z") // Z Value
-#define MSG_USER_MENU _UxGT("Các lệnh tự chọn") // Custom Commands
-#define MSG_UBL_DOING_G29 _UxGT("Đang chạy G29") // Doing G29
-#define MSG_UBL_TOOLS _UxGT("Công cụ UBL") // UBL tools
-#define MSG_UBL_LEVEL_BED _UxGT("San Lấp Bàn Thống Nhất (UBL)") // Unified Bed Leveling
-#define MSG_IDEX_MENU _UxGT("chế độ IDEX") // IDEX Mode
-#define MSG_IDEX_MODE_AUTOPARK _UxGT("Đậu tự động") // Auto-Park
-#define MSG_IDEX_MODE_DUPLICATE _UxGT("Sự gấp đôi") // Duplication
-#define MSG_IDEX_MODE_SCALED_COPY _UxGT("Bản sao thu nhỏ")
-#define MSG_IDEX_MODE_FULL_CTRL _UxGT("Toàn quyền điều khiển") // Full control
-#define MSG_IDEX_X_OFFSET _UxGT("Đầu phun X nhì") // 2nd nozzle X
-#define MSG_IDEX_Y_OFFSET _UxGT("Đầu phun Y nhì")
-#define MSG_IDEX_Z_OFFSET _UxGT("Đầu phun Z nhì")
-#define MSG_IDEX_SAVE_OFFSETS _UxGT("Lưu bù đắp") // Save offsets
-#define MSG_UBL_MANUAL_MESH _UxGT("Tự xây dựng lưới") // Manually Build Mesh
-#define MSG_UBL_BC_INSERT _UxGT("Đặt chêm và đo") // Place shim & measure
-#define MSG_UBL_BC_INSERT2 _UxGT("Đo") // Measure
-#define MSG_UBL_BC_REMOVE _UxGT("Tháo và đo bàn") // Remove & measure bed
-#define MSG_UBL_MOVING_TO_NEXT _UxGT("Chuyển sang tiếp theo") // moving to next
-#define MSG_UBL_ACTIVATE_MESH _UxGT("Bật UBL")
-#define MSG_UBL_DEACTIVATE_MESH _UxGT("Tắt UBL")
-#define MSG_UBL_SET_TEMP_BED _UxGT("Nhiệt độ bàn") // Bed Temp
-#define MSG_UBL_BED_TEMP_CUSTOM MSG_UBL_SET_TEMP_BED
-#define MSG_UBL_SET_TEMP_HOTEND _UxGT("Nhiệt độ đầu phun") // Hotend Temp
-#define MSG_UBL_HOTEND_TEMP_CUSTOM MSG_UBL_SET_TEMP_HOTEND
-#define MSG_UBL_MESH_EDIT _UxGT("Chỉnh sửa lưới") // Mesh Edit
-#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("Chỉnh sửa lưới tự chọn") // Edit Custom Mesh
-#define MSG_UBL_FINE_TUNE_MESH _UxGT("Chỉnh lưới chính xác") // Fine tuning mesh
-#define MSG_UBL_DONE_EDITING_MESH _UxGT("Chỉnh sửa xong lưới") // Done Editing Mesh
-#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("Xây dựng lưới tự chọn") // Build Custom Mesh
-#define MSG_UBL_BUILD_MESH_MENU _UxGT("Xây dựng lưới") // Build Mesh
-#define MSG_UBL_BUILD_MESH_M1 _UxGT("Xây dựng lưới (" PREHEAT_1_LABEL ")")
-#define MSG_UBL_BUILD_MESH_M2 _UxGT("Xây dựng lưới (" PREHEAT_2_LABEL ")")
-#define MSG_UBL_BUILD_COLD_MESH _UxGT("Xây dựng lưới lạnh") // Build cold mesh
-#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("Điều chỉnh chiều cao lưới") // Adjust Mesh Height
-#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("Số lượng chiều cao") // Height Amount
-#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Thẩm tra lưới") // Validate Mesh
-#define MSG_UBL_VALIDATE_MESH_M1 _UxGT("Thẩm tra lưới (" PREHEAT_1_LABEL ")")
-#define MSG_UBL_VALIDATE_MESH_M2 _UxGT("Thẩm tra lưới (" PREHEAT_2_LABEL ")")
-#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Thẩm tra lưới tự chọn") // validate custom mesh
-#define MSG_UBL_CONTINUE_MESH _UxGT("Tiếp tục xây lưới bàn") // Continue Bed Mesh
-#define MSG_UBL_MESH_LEVELING _UxGT("Đang san lấp lưới") // Mesh Leveling
-#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("Đang san lấp 3-điểm") // 3-Point Leveling
-#define MSG_UBL_GRID_MESH_LEVELING _UxGT("Đang san lấp lưới phẳng") // Grid (planar) Mesh Leveling
-#define MSG_UBL_MESH_LEVEL _UxGT("Làm bằng lưới") // Level Mesh
-#define MSG_UBL_SIDE_POINTS _UxGT("Điểm bên cạnh") // Side Points
-#define MSG_UBL_MAP_TYPE _UxGT("Loại bản đồ") // Map Type
-#define MSG_UBL_OUTPUT_MAP _UxGT("Đầu ra bản đồ lưới") // Output Mesh Map
-#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("Đầu ra cho máy chủ") // Output for Host
-#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("Đầu ra cho CSV") // Output for CSV
-#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("Hỗ trợ lưới") // Off Printer Backup | backup mesh
-#define MSG_UBL_INFO_UBL _UxGT("Đầu ra thông tin UBL") // Output UBL Info
-#define MSG_EDIT_MESH _UxGT("Chỉnh sửa lưới") // Edit mesh
-#define MSG_UBL_FILLIN_AMOUNT _UxGT("Số lượng lấp đầy") // Fill-in Amount
-#define MSG_UBL_MANUAL_FILLIN _UxGT("Tự lấp đầy") // Manual Fill-in
-#define MSG_UBL_SMART_FILLIN _UxGT("Lấp đầy thông minh") // Smart Fill-in
-#define MSG_UBL_FILLIN_MESH _UxGT("Lưới lấp đầy") // Fill-in Mesh
-#define MSG_UBL_INVALIDATE_ALL _UxGT("Bác bỏ tất cả") // Invalidate All
-#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("Bác bỏ gần nhất") // Invalidate Closest
-#define MSG_UBL_FINE_TUNE_ALL _UxGT("Chỉnh chính xác tất cả") // Fine Tune ALl
-#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("Chỉnh chính xác gần nhất") // Fine Tune Closest
-#define MSG_UBL_STORAGE_MESH_MENU _UxGT("Lưu trữ lưới") // Mesh Storage
-#define MSG_UBL_STORAGE_SLOT _UxGT("Khe nhớ") // Memory Slot
-#define MSG_UBL_LOAD_MESH _UxGT("Tải lưới bàn") // Load Bed Mesh
-#define MSG_UBL_SAVE_MESH _UxGT("Lưu lưới bàn") // Save Bed Mesh
-#define MSG_MESH_LOADED _UxGT("%i lưới được nạp") // Mesh %i loaded
-#define MSG_MESH_SAVED _UxGT("%i lưới đã lưu")
-#define MSG_NO_STORAGE _UxGT("Không lưu trữ") // No Storage
-#define MSG_UBL_SAVE_ERROR _UxGT("Điều sai: Lưu UBL") // Err: UBL Save
-#define MSG_UBL_RESTORE_ERROR _UxGT("Điều Sai: Khôi Phục UBL") // Err: UBL Restore
-#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Đầu Dò-Z Đã Ngừng") // Z-Offset Stopped
-#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("Bước-Từng-Bước UBL") // Step-By-Step UBL
+ PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Điều khiển LED"); // LED Control
+ PROGMEM Language_Str MSG_LEDS = _UxGT("Đèn"); // Lights
+ PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Đèn định sẵn"); // Light Presets
+ PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Đỏ"); // Red
+ PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Cam"); // Orange
+ PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Vàng"); // Yellow
+ PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Xanh Lá"); // Green
+ PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Xanh"); // Blue
+ PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Xanh Đậm"); // Indigo
+ PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Tím"); // Violet
+ PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Trắng"); // White
+ PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Mặc định"); // Default
+ PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Đèn Tự Chọn"); // Custom Lights
+ PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Cường Độ Đỏ"); // Red Intensity
+ PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Cường Độ Xanh Lá"); // Green Intensity
+ PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Cường Độ Xanh"); // Blue Intensity
+ PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Cường Độ Trắng"); // White Intensity
+ PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("độ sáng"); // Brightness
-#define MSG_LED_CONTROL _UxGT("Điều khiển LED") // LED Control
-#define MSG_LEDS _UxGT("Đèn") // Lights
-#define MSG_LED_PRESETS _UxGT("Đèn định sẵn") // Light Presets
-#define MSG_SET_LEDS_RED _UxGT("Đỏ") // Red
-#define MSG_SET_LEDS_ORANGE _UxGT("Cam") // Orange
-#define MSG_SET_LEDS_YELLOW _UxGT("Vàng") // Yellow
-#define MSG_SET_LEDS_GREEN _UxGT("Xanh Lá") // Green
-#define MSG_SET_LEDS_BLUE _UxGT("Xanh") // Blue
-#define MSG_SET_LEDS_INDIGO _UxGT("Xanh Đậm") // Indigo
-#define MSG_SET_LEDS_VIOLET _UxGT("Tím") // Violet
-#define MSG_SET_LEDS_WHITE _UxGT("Trắng") // White
-#define MSG_SET_LEDS_DEFAULT _UxGT("Mặc định") // Default
-#define MSG_CUSTOM_LEDS _UxGT("Đèn Tự Chọn") // Custom Lights
-#define MSG_INTENSITY_R _UxGT("Cường Độ Đỏ") // Red Intensity
-#define MSG_INTENSITY_G _UxGT("Cường Độ Xanh Lá") // Green Intensity
-#define MSG_INTENSITY_B _UxGT("Cường Độ Xanh") // Blue Intensity
-#define MSG_INTENSITY_W _UxGT("Cường Độ Trắng") // White Intensity
-#define MSG_LED_BRIGHTNESS _UxGT("độ sáng") // Brightness
+ PROGMEM Language_Str MSG_MOVING = _UxGT("Di chuyển..."); // Moving
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("Giải phóng XY"); // Free XY
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("Di chuyển X"); // Move X
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Di chuyển Y");
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Di chuyển Z");
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("Máy đùn"); // Extruder
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("Máy đùn ") LCD_STR_E0; // Extruder
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("Máy đùn ") LCD_STR_E1; // Extruder
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("Máy đùn ") LCD_STR_E2; // Extruder
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("Máy đùn ") LCD_STR_E3; // Extruder
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("Máy đùn ") LCD_STR_E4; // Extruder
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("Máy đùn ") LCD_STR_E5; // Extruder
+ PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Đầu nóng quá lạnh"); // Hotend too cold
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Di chuyển 0.1mm"); // Move 0.1mm
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Di chuyển 1mm"); // Move 1mm
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Di chuyển 10mm"); // Move 10mm
+ PROGMEM Language_Str MSG_SPEED = _UxGT("Tốc độ"); // Speed
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("Z Bàn");
+ PROGMEM Language_Str MSG_NOZZLE = _UxGT("Đầu phun"); // Nozzle
+ PROGMEM Language_Str MSG_NOZZLE_0 = _UxGT("Đầu phun ") LCD_STR_N0; // Nozzle
+ PROGMEM Language_Str MSG_NOZZLE_1 = _UxGT("Đầu phun ") LCD_STR_N1; // Nozzle
+ PROGMEM Language_Str MSG_NOZZLE_2 = _UxGT("Đầu phun ") LCD_STR_N2; // Nozzle
+ PROGMEM Language_Str MSG_NOZZLE_3 = _UxGT("Đầu phun ") LCD_STR_N3; // Nozzle
+ PROGMEM Language_Str MSG_NOZZLE_4 = _UxGT("Đầu phun ") LCD_STR_N4; // Nozzle
+ PROGMEM Language_Str MSG_NOZZLE_5 = _UxGT("Đầu phun ") LCD_STR_N5; // Nozzle
+ PROGMEM Language_Str MSG_BED = _UxGT("Bàn"); // bed
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Tốc độ quạt"); // fan speed
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("Tốc độ quạt 1"); // fan speed
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("Tốc độ quạt 2"); // fan speed
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("Tốc độ quạt 3"); // fan speed
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Tốc độ quạt phụ"); // Extra fan speed
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1 = _UxGT("Tốc độ quạt phụ 1"); // Extra fan speed
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2 = _UxGT("Tốc độ quạt phụ 2"); // Extra fan speed
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3 = _UxGT("Tốc độ quạt phụ 3"); // Extra fan speed
+ PROGMEM Language_Str MSG_FLOW = _UxGT("Lưu Lượng");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("Lưu Lượng ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("Lưu Lượng ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("Lưu Lượng ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("Lưu Lượng ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("Lưu Lượng ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("Lưu Lượng ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("Điều khiển"); // Control
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Đa"); // min
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Thiểu");
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Hệ Số"); // factor
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Nhiệt độ tự động"); // Autotemp
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("Bật"); // on
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Tắt"); // off
+ PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
+ PROGMEM Language_Str MSG_PID_P_E0 = _UxGT("PID-P ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_P_E1 = _UxGT("PID-P ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_P_E2 = _UxGT("PID-P ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_P_E3 = _UxGT("PID-P ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_P_E4 = _UxGT("PID-P ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_P_E5 = _UxGT("PID-P ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
+ PROGMEM Language_Str MSG_PID_I_E0 = _UxGT("PID-I ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_I_E1 = _UxGT("PID-I ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_I_E2 = _UxGT("PID-I ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_I_E3 = _UxGT("PID-I ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_I_E4 = _UxGT("PID-I ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_I_E5 = _UxGT("PID-I ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
+ PROGMEM Language_Str MSG_PID_D_E0 = _UxGT("PID-D ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_D_E1 = _UxGT("PID-D ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_D_E2 = _UxGT("PID-D ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_D_E3 = _UxGT("PID-D ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_D_E4 = _UxGT("PID-D ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_D_E5 = _UxGT("PID-D ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
+ PROGMEM Language_Str MSG_PID_C_E0 = _UxGT("PID-C ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_C_E1 = _UxGT("PID-C ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_C_E2 = _UxGT("PID-C ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_C_E3 = _UxGT("PID-C ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_C_E4 = _UxGT("PID-C ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_C_E5 = _UxGT("PID-C ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_SELECT = _UxGT("Lựa"); // Select
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("Lựa ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("Lựa ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("Lựa ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("Lựa ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("Lựa ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("Lựa ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("Tăng Tốc");
+ PROGMEM Language_Str MSG_JERK = _UxGT("Giật");
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("Giật-V") LCD_STR_A;
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("Giật-V") LCD_STR_B;
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("Giật-V") LCD_STR_C;
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("Giật-Ve");
+ PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Độ Lệch Chỗ Giao"); // Junction Dev
+ PROGMEM Language_Str MSG_VELOCITY = _UxGT("Vận tốc"); // velocity
+ PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vđa") LCD_STR_A; // Vmax
+ PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vđa") LCD_STR_B; // Vmax
+ PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vđa") LCD_STR_C; // Vmax
+ PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vđa") LCD_STR_E; // Vmax
+ PROGMEM Language_Str MSG_VMAX_E0 = _UxGT("Vđa ") LCD_STR_E0; // Vmax
+ PROGMEM Language_Str MSG_VMAX_E1 = _UxGT("Vđa ") LCD_STR_E1; // Vmax
+ PROGMEM Language_Str MSG_VMAX_E2 = _UxGT("Vđa ") LCD_STR_E2; // Vmax
+ PROGMEM Language_Str MSG_VMAX_E3 = _UxGT("Vđa ") LCD_STR_E3; // Vmax
+ PROGMEM Language_Str MSG_VMAX_E4 = _UxGT("Vđa ") LCD_STR_E4; // Vmax
+ PROGMEM Language_Str MSG_VMAX_E5 = _UxGT("Vđa ") LCD_STR_E5; // Vmax
+ PROGMEM Language_Str MSG_VMIN = _UxGT("Vthiểu"); // Vmin
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vchuyển thiểu"); // VTrav min
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Sự tăng tốc"); // Acceleration
+ PROGMEM Language_Str MSG_AMAX_A = _UxGT("Tăng tốc ca") LCD_STR_A; // Amax
+ PROGMEM Language_Str MSG_AMAX_B = _UxGT("Tăng tốc ca") LCD_STR_B; // Amax
+ PROGMEM Language_Str MSG_AMAX_C = _UxGT("Tăng tốc ca") LCD_STR_C; // Amax
+ PROGMEM Language_Str MSG_AMAX_E = _UxGT("Tăng tốc ca") LCD_STR_E; // Amax
+ PROGMEM Language_Str MSG_AMAX_E0 = _UxGT("Tăng tốc ca ") LCD_STR_E0; // Amax
+ PROGMEM Language_Str MSG_AMAX_E1 = _UxGT("Tăng tốc ca ") LCD_STR_E1; // Amax
+ PROGMEM Language_Str MSG_AMAX_E2 = _UxGT("Tăng tốc ca ") LCD_STR_E2; // Amax
+ PROGMEM Language_Str MSG_AMAX_E3 = _UxGT("Tăng tốc ca ") LCD_STR_E3; // Amax
+ PROGMEM Language_Str MSG_AMAX_E4 = _UxGT("Tăng tốc ca ") LCD_STR_E4; // Amax
+ PROGMEM Language_Str MSG_AMAX_E5 = _UxGT("Tăng tốc ca ") LCD_STR_E5; // Amax
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("TT-Rút"); // A-retract
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("TT-Chuyển"); // A-travel
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Bước/mm"); // Steps
+ PROGMEM Language_Str MSG_A_STEPS = _UxGT("Bước") LCD_STR_A _UxGT("/mm"); // Asteps/mm
+ PROGMEM Language_Str MSG_B_STEPS = _UxGT("Bước") LCD_STR_B _UxGT("/mm");
+ PROGMEM Language_Str MSG_C_STEPS = _UxGT("Bước") LCD_STR_C _UxGT("/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("BướcE/mm");
+ PROGMEM Language_Str MSG_E0_STEPS = _UxGT("Bước ") LCD_STR_E0 _UxGT("/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = _UxGT("Bước ") LCD_STR_E1 _UxGT("/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = _UxGT("Bước ") LCD_STR_E2 _UxGT("/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = _UxGT("Bước ") LCD_STR_E3 _UxGT("/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = _UxGT("Bước ") LCD_STR_E4 _UxGT("/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = _UxGT("Bước ") LCD_STR_E5 _UxGT("/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Nhiệt độ"); // Temperature
+ PROGMEM Language_Str MSG_MOTION = _UxGT("Chuyển động"); // Motion
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("Vật liệu in"); // dây nhựa
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E bằng mm³"); // E in mm
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Đường kính nhựa"); // Fil. Dai.
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("Đường kính nhựa ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("Đường kính nhựa ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("Đường kính nhựa ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("Đường kính nhựa ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("Đường kính nhựa ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("Đường kính nhựa ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Dỡ mm"); // unload mm
+ PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Nạp mm");
+ PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("K Cấp Cao"); // Advance K
+ PROGMEM Language_Str MSG_ADVANCE_K_E0 = _UxGT("K Cấp Cao ") LCD_STR_E0; // Advance K
+ PROGMEM Language_Str MSG_ADVANCE_K_E1 = _UxGT("K Cấp Cao ") LCD_STR_E1; // Advance K
+ PROGMEM Language_Str MSG_ADVANCE_K_E2 = _UxGT("K Cấp Cao ") LCD_STR_E2; // Advance K
+ PROGMEM Language_Str MSG_ADVANCE_K_E3 = _UxGT("K Cấp Cao ") LCD_STR_E3; // Advance K
+ PROGMEM Language_Str MSG_ADVANCE_K_E4 = _UxGT("K Cấp Cao ") LCD_STR_E4; // Advance K
+ PROGMEM Language_Str MSG_ADVANCE_K_E5 = _UxGT("K Cấp Cao ") LCD_STR_E5; // Advance K
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("Độ tương phản LCD"); // LCD contrast
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Lưu các thiết lập"); // Store settings
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Tải các cài đặt"); // Load settings
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Khôi phục phòng hư"); // Restore failsafe
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Khởi Tạo EEPROM"); // Initialize EEPROM
+ PROGMEM Language_Str MSG_SD_UPDATE = _UxGT("Cập Nhật SD"); // SD Update
+ PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Bặt Lại Máy In");
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Cập Nhật"); // Refresh
+ PROGMEM Language_Str MSG_WATCH = _UxGT("Màn Hình Thông Tin"); // Info screen
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("Chuẩn bị"); // Prepare
+ PROGMEM Language_Str MSG_TUNE = _UxGT("Điều Chỉnh"); // Tune
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Tạm dừng in"); // Pause print
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Tiếp tục in"); // Resume print
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Ngừng in"); // Stop print
+ PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Phục Hồi Mất Điện"); // Outage Recovery
+ PROGMEM Language_Str MSG_CARD_MENU = _UxGT("In từ SD"); // Print from SD
+ PROGMEM Language_Str MSG_NO_CARD = _UxGT("Không có thẻ SD"); // No SD card
+ PROGMEM Language_Str MSG_DWELL = _UxGT("Ngủ..."); // Sleep
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("Nhấn để tiếp tục..."); // Click to resume (same as 'continue')
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("In tạm dừng"); // print paused
+ PROGMEM Language_Str MSG_PRINTING = _UxGT("Đang in..."); // printing
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("In đã hủy bỏ"); // Print aborted
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Không di chuyển."); // No move.
+ PROGMEM Language_Str MSG_KILLED = _UxGT("ĐÃ CHẾT. ");
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("ĐÃ NGỪNG. ");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Rút mm"); // Retract mm
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Rút Trao.mm"); // Swap Re.mm
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Rút V");
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Nhảy mm"); // hop
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("BỏRút mm"); // UnRet mm
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("BỏRút T mm"); // S UnRet mm
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("BỏRút V"); // UnRet V
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("BỏRút T V"); // S UnRet V
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("RútTựĐộng"); // AutoRetr.
+ PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Khoảng Cách Rút"); // Retract Distance
+ PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Thay Đổi Công Cụ"); // Tool Change
+ PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Đưa Lên Z"); // Z Raise
+ PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPD = _UxGT("Tốc Độ Tuôn Ra"); // Prime Speed
+ PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPD = _UxGT("Tốc Độ Rút Lại"); // Retract Speed
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Thay dây nhựa"); // change filament
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("Thay dây nhựa ") LCD_STR_E0; // change filament
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("Thay dây nhựa ") LCD_STR_E1; // change filament
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("Thay dây nhựa ") LCD_STR_E2; // change filament
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("Thay dây nhựa ") LCD_STR_E3; // change filament
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("Thay dây nhựa ") LCD_STR_E4; // change filament
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("Thay dây nhựa ") LCD_STR_E5; // change filament
+ PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Nạp dây nhựa"); // load filament
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E0 = _UxGT("Nạp dây nhựa ") LCD_STR_E0; // load filament
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E1 = _UxGT("Nạp dây nhựa ") LCD_STR_E1; // load filament
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E2 = _UxGT("Nạp dây nhựa ") LCD_STR_E2; // load filament
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E3 = _UxGT("Nạp dây nhựa ") LCD_STR_E3; // load filament
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E4 = _UxGT("Nạp dây nhựa ") LCD_STR_E4; // load filament
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E5 = _UxGT("Nạp dây nhựa ") LCD_STR_E5; // load filament
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0 = _UxGT("Dỡ dây nhựa ") LCD_STR_E0; // unload filament
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1 = _UxGT("Dỡ dây nhựa ") LCD_STR_E1; // unload filament
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2 = _UxGT("Dỡ dây nhựa ") LCD_STR_E2; // unload filament
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3 = _UxGT("Dỡ dây nhựa ") LCD_STR_E3; // unload filament
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4 = _UxGT("Dỡ dây nhựa ") LCD_STR_E4; // unload filament
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5 = _UxGT("Dỡ dây nhựa ") LCD_STR_E5; // unload filament
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Dỡ tất cả"); // Unload All
+ PROGMEM Language_Str MSG_INIT_SDCARD = _UxGT("Khởi tạo thẻ SD "); // Init. SD card
+ PROGMEM Language_Str MSG_CHANGE_SDCARD = _UxGT("Thay thẻ SD"); // Change SD card
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Đầu Dò Z qua bàn"); // Z Probe past bed
+ PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Hệ số nghiêng"); // Skew Factor
+ PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTOUCH"); // BLTouch
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Tự kiểm tra BLTOUCH "); // BLTouch Self-Test
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Bặt lại BLTouch"); // Reset BLTouch
+ PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Đem BLTouch"); // Deploy BLTouch
+ PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Cất BLTouch"); // Stow BLTouch
+ PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Đem Đầu Dò-Z"); // Deploy Z-Probe
+ PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Cất Đầu Dò-Z"); // Stow Z-Probe
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Về nhà %s%s%s Trước");
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Đầu Dò Bù Đắp Z"); // Probe Z Offset
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Nhít X"); // Babystep X
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Nhít Y");
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Nhít Z");
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Hủy bỏ công tắc"); // Endstop abort
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Sưởi đầu phun không thành công"); // Heating failed
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED = _UxGT("Sưởi bàn không thành công"); // Bed heating failed
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Điều sai: nhiệt độ dư"); // Err: REDUNDANT TEMP
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("Vấn đề nhiệt"); // THERMAL RUNAWAY | problem
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("Vấn đề nhiệt bàn"); // BED THERMAL RUNAWAY
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Điều sai: nhiệt độ tối đa"); // Err: MAXTEMP
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Điều sai: nhiệt độ tối thiểu"); // Err: MINTEMP
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("Điều sai: nhiệt độ bàn tối đa"); // Err: MAXTEMP BED
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Điều sai: nhiệt độ bàn tối thiểu"); // Err: MINTEMP BED
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Về nhà XY Trước"); // Home XY First
+ PROGMEM Language_Str MSG_HALTED = _UxGT("MÁY IN ĐÃ DỪNG LẠI"); // PRINTER HALTED
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Xin bặt lại"); // Please reset
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("n"); // d - ngày - One character only
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("g"); // h - giờ - One character only
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("p"); // m - phút - One character only
+ PROGMEM Language_Str MSG_HEATING = _UxGT("Đang sưởi nóng..."); // heating
+ PROGMEM Language_Str MSG_COOLING = _UxGT("Đang làm nguội..."); // cooling
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Đang sưởi nong bàn..."); // bed heating
+ PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Đang làm nguội bàn..."); // bed cooling
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Cân Chỉnh Delta"); // Delta calibration
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Chỉnh X lại");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Chỉnh Y lại");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Chỉnh Z lại");
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Chỉnh Z Center"); // Calibrate Center
+ PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Cài Đặt Delta"); // Delta Settings
+ PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Cân Chỉnh Tự Động"); // Auto Calibration
+ PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Đặt Chiều Cao Delta"); // Set Delta Height
+ PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Đầu Dò Z-Bù Đắp"); // Probe Z-offset
+ PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Gậy Chéo"); // Diag Rod
+ PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Chiều Cao"); // Height
+ PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Bán Kính"); // Radius
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Về Máy In");
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Thông Tin Máy In"); // Printer Info
+ PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("San lấp 3-Điểm"); // 3-Point Leveling
+ PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("San Lấp Tuyến Tính"); // Linear Leveling
+ PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("San Lấp Song Tuyến"); // Bilinear Leveling
+ PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("San Lấp Bàn Thống Nhất"); // Unified Bed Leveling
+ PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Lưới San Lấp"); // Mesh Leveling
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Thống Kê Máy In"); // Printer Stats
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Thông Tin Bo Mạch"); // Board Info
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Điện Trở Nhiệt"); // Thermistors
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Máy đùn"); // Extruders
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baud"); // Baud
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Giao Thức"); // Protocol
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Đèn Khuông"); // Case light
+ PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Độ Sáng"); // Light Brightness
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Số In"); // Print Count
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Đã hoàn thành");
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tổng số thời gian in"); // Total print time
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Thời gian việc lâu nhất"); // Longest job time
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Tổng số đùn"); // Extruded total
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("In"); // prints
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Đã hoàn thành"); // Completed
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tổng số"); // total
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Dài nhất"); // Longest
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Đã ép đùn");
+ #endif
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Nhiệt độ tối thiểu"); // Min Temp
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Nhiệt độ tối đa"); // Max temp
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Bộ nguồn"); // PSU
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Sức mạnh ổ đĩa"); // Drive Strength
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("% trình điều khiển"); // Driver %
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Ghi DAC EEPROM"); // DAC EEPROM Write
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("In tạm dừng"); // PRINT PAUSED
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("Nạp dây nhựa");
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("Dỡ dây nhựa"); // unload filament
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("Tùy chọn hồi phục:"); // RESUME OPTIONS
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Xả thêm"); // Purge more
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Tiếp tục"); // continue
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Đầu Phun: "); // Nozzle
+ PROGMEM Language_Str MSG_RUNOUT_SENSOR_ENABLE = _UxGT("Cảm Biến Hết"); // Runout Sensor
+ PROGMEM Language_Str MSG_LCD_HOMING_FAILED = _UxGT("Sự nhà không thành công"); // Homing failed
+ PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT(" không thành công"); // Probing failed
+ PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: Quá lạnh");
-#define MSG_MOVING _UxGT("Di chuyển...") // Moving
-#define MSG_FREE_XY _UxGT("Giải phóng XY") // Free XY
-#define MSG_MOVE_X _UxGT("Di chuyển X") // Move X
-#define MSG_MOVE_Y _UxGT("Di chuyển Y")
-#define MSG_MOVE_Z _UxGT("Di chuyển Z")
-#define MSG_MOVE_E _UxGT("Máy đùn") // Extruder
-#define MSG_HOTEND_TOO_COLD _UxGT("Đầu nóng quá lạnh") // Hotend too cold
-#define MSG_MOVE_01MM _UxGT("Di chuyển 0.1mm") // Move 0.1mm
-#define MSG_MOVE_1MM _UxGT("Di chuyển 1mm") // Move 1mm
-#define MSG_MOVE_10MM _UxGT("Di chuyển 10mm") // Move 10mm
-#define MSG_SPEED _UxGT("Tốc độ") // Speed
-#define MSG_BED_Z _UxGT("Z Bàn")
-#define MSG_NOZZLE _UxGT("Đầu phun") // Nozzle
-#define MSG_BED _UxGT("Bàn") // bed
-#define MSG_FAN_SPEED _UxGT("Tốc độ quạt") // fan speed
-#define MSG_EXTRA_FAN_SPEED _UxGT("Tốc độ quạt phụ") // Extra fan speed
-#define MSG_FLOW _UxGT("Lưu Lượng")
-#define MSG_CONTROL _UxGT("Điều khiển") // Control
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Đa") // min
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Thiểu")
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Hệ Số") // factor
-#define MSG_AUTOTEMP _UxGT("Nhiệt độ tự động") // Autotemp
-#define MSG_LCD_ON _UxGT("Bật") // on
-#define MSG_LCD_OFF _UxGT("Tắt") // off
-#define MSG_PID_P _UxGT("PID-P")
-#define MSG_PID_I _UxGT("PID-I")
-#define MSG_PID_D _UxGT("PID-D")
-#define MSG_PID_C _UxGT("PID-C")
-#define MSG_SELECT _UxGT("Lựa") // Select
-#define MSG_ACC _UxGT("Tăng Tốc")
-#define MSG_JERK _UxGT("Giật")
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("Giật-Va")
- #define MSG_VB_JERK _UxGT("Giật-Vb")
- #define MSG_VC_JERK _UxGT("Giật-Vc")
-#else
- #define MSG_VA_JERK _UxGT("Giật-Vx")
- #define MSG_VB_JERK _UxGT("Giật-Vy")
- #define MSG_VC_JERK _UxGT("Giật-Vz")
-#endif
-#define MSG_VE_JERK _UxGT("Giật-Ve")
-#define MSG_JUNCTION_DEVIATION _UxGT("Độ Lệch Chỗ Giao") // Junction Dev
-#define MSG_VELOCITY _UxGT("Vận tốc") // velocity
-#define MSG_VMAX _UxGT("Vđa") // Vmax
-#define MSG_VMIN _UxGT("Vthiểu") // Vmin
-#define MSG_VTRAV_MIN _UxGT("Vchuyển thiểu") // VTrav min
-#define MSG_ACCELERATION _UxGT("Sự tăng tốc") // Acceleration
-#define MSG_AMAX _UxGT("Tăng tốc ca") // Amax
-#define MSG_A_RETRACT _UxGT("TT-Rút") // A-retract
-#define MSG_A_TRAVEL _UxGT("TT-Chuyển") // A-travel
-#define MSG_STEPS_PER_MM _UxGT("Bước/mm") // Steps
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("BướcA/mm") // Asteps/mm
- #define MSG_BSTEPS _UxGT("BướcB/mm")
- #define MSG_CSTEPS _UxGT("BướcC/mm")
-#else
- #define MSG_ASTEPS _UxGT("BướcX/mm") // Xsteps/mm
- #define MSG_BSTEPS _UxGT("BướcY/mm")
- #define MSG_CSTEPS _UxGT("BướcZ/mm")
-#endif
-#define MSG_ESTEPS _UxGT("BướcE/mm")
-#define MSG_E1STEPS _UxGT("BướcE1/mm")
-#define MSG_E2STEPS _UxGT("BướcE2/mm")
-#define MSG_E3STEPS _UxGT("BướcE3/mm")
-#define MSG_E4STEPS _UxGT("BướcE4/mm")
-#define MSG_E5STEPS _UxGT("BướcE5/mm")
-#define MSG_E6STEPS _UxGT("BướcE6/mm")
-#define MSG_TEMPERATURE _UxGT("Nhiệt độ") // Temperature
-#define MSG_MOTION _UxGT("Chuyển động") // Motion
-#define MSG_FILAMENT _UxGT("Vật liệu in") // dây nhựa
-#define MSG_VOLUMETRIC_ENABLED _UxGT("E bằng mm") MSG_CUBED // E in mm
-#define MSG_FILAMENT_DIAM _UxGT("Đường kính nhựa") // Fil. Dai.
-#define MSG_FILAMENT_UNLOAD _UxGT("Dỡ mm") // unload mm
-#define MSG_FILAMENT_LOAD _UxGT("Nạp mm")
-#define MSG_ADVANCE_K _UxGT("K Cấp Cao") // Advance K
-#define MSG_CONTRAST _UxGT("Độ tương phản LCD") // LCD contrast
-#define MSG_STORE_EEPROM _UxGT("Lưu các thiết lập") // Store settings
-#define MSG_LOAD_EEPROM _UxGT("Tải các cài đặt") // Load settings
-#define MSG_RESTORE_FAILSAFE _UxGT("Khôi phục phòng hư") // Restore failsafe
-#define MSG_INIT_EEPROM _UxGT("Khởi Tạo EEPROM") // Initialize EEPROM
-#define MSG_SD_UPDATE _UxGT("Cập Nhật SD") // SD Update
-#define MSG_RESET_PRINTER _UxGT("Bặt Lại Máy In")
-#define MSG_REFRESH _UxGT("Cập Nhật") // Refresh
-#define MSG_WATCH _UxGT("Màn Hình Thông Tin") // Info screen
-#define MSG_PREPARE _UxGT("Chuẩn bị") // Prepare
-#define MSG_TUNE _UxGT("Điều Chỉnh") // Tune
-#define MSG_PAUSE_PRINT _UxGT("Tạm dừng in") // Pause print
-#define MSG_RESUME_PRINT _UxGT("Tiếp tục in") // Resume print
-#define MSG_STOP_PRINT _UxGT("Ngừng in") // Stop print
-#define MSG_OUTAGE_RECOVERY _UxGT("Phục Hồi Mất Điện") // Outage Recovery
-#define MSG_CARD_MENU _UxGT("In từ SD") // Print from SD
-#define MSG_NO_CARD _UxGT("Không có thẻ SD") // No SD card
-#define MSG_DWELL _UxGT("Ngủ...") // Sleep
-#define MSG_USERWAIT _UxGT("Nhấn để tiếp tục...") // Click to resume (same as 'continue')
-#define MSG_PRINT_PAUSED _UxGT("In tạm dừng") // print paused
-#define MSG_PRINTING _UxGT("Đang in...") // printing
-#define MSG_PRINT_ABORTED _UxGT("In đã hủy bỏ") // Print aborted
-#define MSG_NO_MOVE _UxGT("Không di chuyển.") // No move.
-#define MSG_KILLED _UxGT("ĐÃ CHẾT. ")
-#define MSG_STOPPED _UxGT("ĐÃ NGỪNG. ")
-#define MSG_CONTROL_RETRACT _UxGT("Rút mm") // Retract mm
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("Rút Trao.mm") // Swap Re.mm
-#define MSG_CONTROL_RETRACTF _UxGT("Rút V")
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Nhảy mm") // hop
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("BỏRút mm") // UnRet mm
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("BỏRút T mm") // S UnRet mm
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("BỏRút V") // UnRet V
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("BỏRút T V") // S UnRet V
-#define MSG_AUTORETRACT _UxGT("RútTựĐộng") // AutoRetr.
-#define MSG_FILAMENT_SWAP_LENGTH _UxGT("Khoảng Cách Rút") // Retract Distance
-#define MSG_TOOL_CHANGE _UxGT("Thay Đổi Công Cụ") // Tool Change
-#define MSG_TOOL_CHANGE_ZLIFT _UxGT("Đưa Lên Z") // Z Raise
-#define MSG_SINGLENOZZLE_PRIME_SPD _UxGT("Tốc Độ Tuôn Ra") // Prime Speed
-#define MSG_SINGLENOZZLE_RETRACT_SPD _UxGT("Tốc Độ Rút Lại") // Retract Speed
-#define MSG_FILAMENTCHANGE _UxGT("Thay dây nhựa") // change filament
-#define MSG_FILAMENTLOAD _UxGT("Nạp dây nhựa") // load filament
-#define MSG_FILAMENTUNLOAD _UxGT("Dỡ dây nhựa") // unload filament
-#define MSG_FILAMENTUNLOAD_ALL _UxGT("Dỡ tất cả") // Unload All
-#define MSG_INIT_SDCARD _UxGT("Khởi tạo thẻ SD ") // Init. SD card
-#define MSG_CHANGE_SDCARD _UxGT("Thay thẻ SD") // Change SD card
-#define MSG_ZPROBE_OUT _UxGT("Đầu Dò Z qua bàn") // Z Probe past bed
-#define MSG_SKEW_FACTOR _UxGT("Hệ số nghiêng") // Skew Factor
-#define MSG_BLTOUCH _UxGT("BLTOUCH") // BLTouch
-#define MSG_BLTOUCH_SELFTEST _UxGT("Tự kiểm tra BLTOUCH ") // BLTouch Self-Test
-#define MSG_BLTOUCH_RESET _UxGT("Bặt lại BLTouch") // Reset BLTouch
-#define MSG_BLTOUCH_DEPLOY _UxGT("Đem BLTouch") // Deploy BLTouch
-#define MSG_BLTOUCH_STOW _UxGT("Cất BLTouch") // Stow BLTouch
-#define MSG_MANUAL_DEPLOY _UxGT("Đem Đầu Dò-Z") // Deploy Z-Probe
-#define MSG_MANUAL_STOW _UxGT("Cất Đầu Dò-Z") // Stow Z-Probe
-#define MSG_HOME_FIRST _UxGT("Về nhà %s%s%s Trước")
-#define MSG_ZPROBE_ZOFFSET _UxGT("Đầu Dò Bù Đắp Z") // Probe Z Offset
-#define MSG_BABYSTEP_X _UxGT("Nhít X") // Babystep X
-#define MSG_BABYSTEP_Y _UxGT("Nhít Y")
-#define MSG_BABYSTEP_Z _UxGT("Nhít Z")
-#define MSG_ENDSTOP_ABORT _UxGT("Hủy bỏ công tắc") // Endstop abort
-#define MSG_HEATING_FAILED_LCD _UxGT("Sưởi đầu phun không thành công") // Heating failed
-#define MSG_HEATING_FAILED_LCD_BED _UxGT("Sưởi bàn không thành công") // Bed heating failed
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("Điều sai: nhiệt độ dư") // Err: REDUNDANT TEMP
-#define MSG_THERMAL_RUNAWAY _UxGT("Vấn đề nhiệt") // THERMAL RUNAWAY | problem
-#define MSG_THERMAL_RUNAWAY_BED _UxGT("Vấn đề nhiệt bàn") // BED THERMAL RUNAWAY
-#define MSG_ERR_MAXTEMP _UxGT("Điều sai: nhiệt độ tối đa") // Err: MAXTEMP
-#define MSG_ERR_MINTEMP _UxGT("Điều sai: nhiệt độ tối thiểu") // Err: MINTEMP
-#define MSG_ERR_MAXTEMP_BED _UxGT("Điều sai: nhiệt độ bàn tối đa") // Err: MAXTEMP BED
-#define MSG_ERR_MINTEMP_BED _UxGT("Điều sai: nhiệt độ bàn tối thiểu") // Err: MINTEMP BED
-#define MSG_ERR_Z_HOMING _UxGT("Về nhà XY Trước") // Home XY First
-#define MSG_HALTED _UxGT("MÁY IN ĐÃ DỪNG LẠI") // PRINTER HALTED
-#define MSG_PLEASE_RESET _UxGT("Xin bặt lại") // Please reset
-#define MSG_SHORT_DAY _UxGT("n") // d - ngày - One character only
-#define MSG_SHORT_HOUR _UxGT("g") // h - giờ - One character only
-#define MSG_SHORT_MINUTE _UxGT("p") // m - phút - One character only
-#define MSG_HEATING _UxGT("Đang sưởi nóng...") // heating
-#define MSG_COOLING _UxGT("Đang làm nguội...") // cooling
-#define MSG_BED_HEATING _UxGT("Đang sưởi nong bàn...") // bed heating
-#define MSG_BED_COOLING _UxGT("Đang làm nguội bàn...") // bed cooling
-#define MSG_DELTA_CALIBRATE _UxGT("Cân Chỉnh Delta") // Delta calibration
-#define MSG_DELTA_CALIBRATE_X _UxGT("Chỉnh X lại")
-#define MSG_DELTA_CALIBRATE_Y _UxGT("Chỉnh Y lại")
-#define MSG_DELTA_CALIBRATE_Z _UxGT("Chỉnh Z lại")
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("Chỉnh Z Center") // Calibrate Center
-#define MSG_DELTA_SETTINGS _UxGT("Cài Đặt Delta") // Delta Settings
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("Cân Chỉnh Tự Động") // Auto Calibration
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("Đặt Chiều Cao Delta") // Set Delta Height
-#define MSG_DELTA_Z_OFFSET_CALIBRATE _UxGT("Đầu Dò Z-Bù Đắp") // Probe Z-offset
-#define MSG_DELTA_DIAG_ROD _UxGT("Gậy Chéo") // Diag Rod
-#define MSG_DELTA_HEIGHT _UxGT("Chiều Cao") // Height
-#define MSG_DELTA_RADIUS _UxGT("Bán Kính") // Radius
-#define MSG_INFO_MENU _UxGT("Về Máy In")
-#define MSG_INFO_PRINTER_MENU _UxGT("Thông Tin Máy In") // Printer Info
-#define MSG_3POINT_LEVELING _UxGT("San lấp 3-Điểm") // 3-Point Leveling
-#define MSG_LINEAR_LEVELING _UxGT("San Lấp Tuyến Tính") // Linear Leveling
-#define MSG_BILINEAR_LEVELING _UxGT("San Lấp Song Tuyến") // Bilinear Leveling
-#define MSG_UBL_LEVELING _UxGT("San Lấp Bàn Thống Nhất") // Unified Bed Leveling
-#define MSG_MESH_LEVELING _UxGT("Lưới San Lấp") // Mesh Leveling
-#define MSG_INFO_STATS_MENU _UxGT("Thống Kê Máy In") // Printer Stats
-#define MSG_INFO_BOARD_MENU _UxGT("Thông Tin Bo Mạch") // Board Info
-#define MSG_INFO_THERMISTOR_MENU _UxGT("Điện Trở Nhiệt") // Thermistors
-#define MSG_INFO_EXTRUDERS _UxGT("Máy đùn") // Extruders
-#define MSG_INFO_BAUDRATE _UxGT("Baud") // Baud
-#define MSG_INFO_PROTOCOL _UxGT("Giao Thức") // Protocol
-#define MSG_CASE_LIGHT _UxGT("Đèn Khuông") // Case light
-#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Độ Sáng") // Light Brightness
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("Số In") // Print Count
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Đã hoàn thành")
- #define MSG_INFO_PRINT_TIME _UxGT("Tổng số thời gian in") // Total print time
- #define MSG_INFO_PRINT_LONGEST _UxGT("Thời gian việc lâu nhất") // Longest job time
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Tổng số đùn") // Extruded total
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("In") // prints
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("Đã hoàn thành") // Completed
- #define MSG_INFO_PRINT_TIME _UxGT("Tổng số") // total
- #define MSG_INFO_PRINT_LONGEST _UxGT("Dài nhất") // Longest
- #define MSG_INFO_PRINT_FILAMENT _UxGT("Đã ép đùn")
-#endif
-#define MSG_INFO_MIN_TEMP _UxGT("Nhiệt độ tối thiểu") // Min Temp
-#define MSG_INFO_MAX_TEMP _UxGT("Nhiệt độ tối đa") // Max temp
-#define MSG_INFO_PSU _UxGT("Bộ nguồn") // PSU
-#define MSG_DRIVE_STRENGTH _UxGT("Sức mạnh ổ đĩa") // Drive Strength
-#define MSG_DAC_PERCENT _UxGT("% trình điều khiển") // Driver %
-#define MSG_DAC_EEPROM_WRITE _UxGT("Ghi DAC EEPROM") // DAC EEPROM Write
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("In tạm dừng") // PRINT PAUSED
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("Nạp dây nhựa")
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("Dỡ dây nhựa") // unload filament
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("Tùy chọn hồi phục:") // RESUME OPTIONS
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Xả thêm") // Purge more
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Tiếp tục") // continue
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Đầu Phun: ") // Nozzle
-#define MSG_RUNOUT_SENSOR_ENABLE _UxGT("Cảm Biến Hết") // Runout Sensor
-#define MSG_ERR_HOMING_FAILED _UxGT("Sự nhà không thành công") // Homing failed
-#define MSG_ERR_PROBING_FAILED _UxGT(" không thành công") // Probing failed
-#define MSG_M600_TOO_COLD _UxGT("M600: Quá lạnh")
+ //
+ // Filament Change screens show up to 3 lines on a 4-line display
+ // ...or up to 2 lines on a 3-line display
+ //
+ #if LCD_HEIGHT >= 4
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Nhấn nút", "để tiếp tục in")); // Press button to resume print
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Chờ cho sự", "thay đổi dây nhựa", "bắt đầu")); // wait for filament change to start
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Đút dây nhựa vào", "và nhấn nút", "để tiếp tục")); // insert filament and press button to continue //
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Nhấn nút", "để làm nóng đầu phun")); // Press button to heat nozzle
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Đầu phun đang nóng lên", "Xin chờ...")); // Nozzle heating Please wait
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Chờ tro", "dây nhựa ra")); // Wait for filament unload
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Chờ tro", "dây nhựa vào")); // Wait for filament load
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Chờ tro", "xả dây nhựa")); // wait for filament purge
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Nhấn nút để kết thúc", "xả dây nhựa")); // Click to finish dây nhựa purge
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Chờ tro in", "tiếp tục...")); // Wait for print to resume
+ #else // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Nhấn nút để tiếp tục")); // Click to continue
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Xin chờ..."));
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Chèn và nhấn")); // Insert and Click
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Nhấn để sưởi")); // Click to heat
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Đang sưởi nóng")); // Heating
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Đang dỡ ra...")); // Ejecting
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Đang nạp...")); // Loading
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Đang xả...")); // Purging
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Nhấn nút để kết thúc")); // Click to finish
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Đang tiếp tục...")); // Resuming
+ #endif // LCD_HEIGHT < 4
-//
-// Filament Change screens show up to 3 lines on a 4-line display
-// ...or up to 2 lines on a 3-line display
-//
-#if LCD_HEIGHT >= 4
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Nhấn nút") // Press button
- #define MSG_ADVANCED_PAUSE_WAITING_2 _UxGT("để tiếp tục in") // to resume print
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Chờ cho sự") // wait for
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("thay đổi dây nhựa") // filament change
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("bắt đầu") // to start
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Đút dây nhựa vào") // insert filament
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("và nhấn nút") // and press button
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("để tiếp tục") // to continue
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Nhấn nút") // Press button
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("để làm nóng đầu phun") // to heat nozzle
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Đầu phun đang nóng lên") // Nozzle heating
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Xin chờ...") // Please wait
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Chờ tro") // Wait for
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("dây nhựa ra") // filament unload
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Chờ tro")
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("dây nhựa vào")
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Chờ tro") // wait for filament purge
- #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("xả dây nhựa")
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Nhấn nút để kết thúc") // Click to finish
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_2 _UxGT("xả dây nhựa") // dây nhựa purge
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Chờ tro in") // Wait for print to resume
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("tiếp tục...")
-#else // LCD_HEIGHT < 4
- #define MSG_ADVANCED_PAUSE_WAITING_1 _UxGT("Nhấn nút để tiếp tục") // Click to continue
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Xin chờ...")
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Chèn và nhấn") // Insert and Click
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Nhấn để sưởi") // Click to heat
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Đang sưởi nóng") // Heating
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Đang dỡ ra...") // Ejecting
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Đang nạp...") // Loading
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Đang xả...") // Purging
- #define MSG_FILAMENT_CHANGE_CONT_PURGE_1 _UxGT("Nhấn nút để kết thúc") // Click to finish
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Đang tiếp tục...") // Resuming
-#endif // LCD_HEIGHT < 4
-
-#define MSG_TMC_DRIVERS _UxGT("Trình điều khiển TMC") // TMC drivers
-#define MSG_TMC_CURRENT _UxGT("Dòng điện trình điều khiển") // Driver current
-#define MSG_TMC_HYBRID_THRS _UxGT("Ngưỡng Hỗn Hợp") // Hybrid threshold
-#define MSG_TMC_HOMING_THRS _UxGT("Vô cảm biến") // Sensorless homing
-#define MSG_TMC_STEPPING_MODE _UxGT("Chế độ từng bước") // Stepping mode
-#define MSG_TMC_STEALTH_ENABLED _UxGT("CắtTàngHình được kích hoạt") // StealthChop enabled
+ PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("Trình điều khiển TMC"); // TMC drivers
+ PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Dòng điện trình điều khiển"); // Driver current
+ PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Ngưỡng Hỗn Hợp"); // Hybrid threshold
+ PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Vô cảm biến"); // Sensorless homing
+ PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Chế độ từng bước"); // Stepping mode
+ PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("CắtTàngHình được kích hoạt"); // StealthChop enabled
+}
diff --git a/Marlin/src/lcd/language/language_zh_CN.h b/Marlin/src/lcd/language/language_zh_CN.h
index a87f469a0ee2..a9286b0f4814 100644
--- a/Marlin/src/lcd/language/language_zh_CN.h
+++ b/Marlin/src/lcd/language/language_zh_CN.h
@@ -28,357 +28,463 @@
* See also http://marlinfw.org/docs/development/lcd_language.html
*
*/
+namespace Language_zh_CN {
+ using namespace Language_en; // Inherit undefined strings from English
-#define CHARSIZE 3
+ constexpr uint8_t CHARSIZE = 3;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Simplified Chinese");
-#define WELCOME_MSG MACHINE_NAME _UxGT("已就绪.") //" ready."
-#define MSG_BACK _UxGT("返回") // ”Back“
-#define MSG_MEDIA_INSERTED _UxGT("存储卡已插入") //"Card inserted"
-#define MSG_MEDIA_REMOVED _UxGT("存储卡被拔出") //"Card removed"
-#define MSG_LCD_ENDSTOPS _UxGT("挡块") //"Endstops" // Max length 8 characters
-#define MSG_MAIN _UxGT("主菜单") //"Main"
-#define MSG_AUTOSTART _UxGT("自动开始") //"Autostart"
-#define MSG_DISABLE_STEPPERS _UxGT("关闭步进电机") //"Disable steppers"
-#define MSG_DEBUG_MENU _UxGT("调试菜单") // "Debug Menu"
-#define MSG_PROGRESS_BAR_TEST _UxGT("进度条测试") // "Progress Bar Test"
-#define MSG_AUTO_HOME _UxGT("回原点") //"Auto home"
-#define MSG_AUTO_HOME_X _UxGT("回X原位") //"Home X"
-#define MSG_AUTO_HOME_Y _UxGT("回Y原位") //"Home Y"
-#define MSG_AUTO_HOME_Z _UxGT("回Z原位") //"Home Z"
-#define MSG_LEVEL_BED_HOMING _UxGT("平台调平XYZ归原位") //"Homing XYZ"
-#define MSG_LEVEL_BED_WAITING _UxGT("单击开始热床调平") //"Click to Begin"
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("下个热床调平点") //"Next Point"
-#define MSG_LEVEL_BED_DONE _UxGT("完成热床调平") //"Leveling Done!"
-#define MSG_Z_FADE_HEIGHT _UxGT("淡出高度") // "Fade Height"
-#define MSG_SET_HOME_OFFSETS _UxGT("设置原点偏移") //"Set home offsets"
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("偏移已启用") //"Offsets applied"
-#define MSG_SET_ORIGIN _UxGT("设置原点") //"Set origin"
-#define MSG_PREHEAT_1 _UxGT("预热" PREHEAT_1_LABEL) //"Preheat PREHEAT_2_LABEL"
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ") //MSG_PREHEAT_1 " "
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" 全部") //MSG_PREHEAT_1 " All"
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" 热床") //MSG_PREHEAT_1 " Bed"
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" 设置") //MSG_PREHEAT_1 " conf"
-#define MSG_PREHEAT_2 _UxGT("预热" PREHEAT_2_LABEL) //"Preheat PREHEAT_2_LABEL"
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ") //MSG_PREHEAT_2 " "
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" 全部") //MSG_PREHEAT_2 " All"
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" 热床") //MSG_PREHEAT_2 " Bed"
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" 设置") //MSG_PREHEAT_2 " conf"
-#define MSG_COOLDOWN _UxGT("降温") //"Cooldown"
-#define MSG_SWITCH_PS_ON _UxGT("电源打开") //"Switch power on"
-#define MSG_SWITCH_PS_OFF _UxGT("电源关闭") //"Switch power off"
-#define MSG_EXTRUDE _UxGT("挤出") //"Extrude"
-#define MSG_RETRACT _UxGT("回抽") //"Retract"
-#define MSG_MOVE_AXIS _UxGT("移动轴") //"Move axis"
-#define MSG_BED_LEVELING _UxGT("调平热床") //"Bed leveling"
-#define MSG_LEVEL_BED _UxGT("调平热床") //"Level bed"
-#define MSG_LEVEL_CORNERS _UxGT("调平边角") // "Level corners"
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT("已就绪."); //" ready."
+ PROGMEM Language_Str MSG_BACK = _UxGT("返回"); // ”Back“
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("存储卡已插入"); //"Card inserted"
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("存储卡被拔出"); //"Card removed"
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("挡块"); //"Endstops" // Max length 8 characters
+ PROGMEM Language_Str MSG_MAIN = _UxGT("主菜单"); //"Main"
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("自动开始"); //"Autostart"
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("关闭步进电机"); //"Disable steppers"
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("调试菜单"); // "Debug Menu"
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("进度条测试"); // "Progress Bar Test"
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("回原点"); //"Auto home"
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("回X原位"); //"Home X"
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("回Y原位"); //"Home Y"
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("回Z原位"); //"Home Z"
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("平台调平XYZ归原位"); //"Homing XYZ"
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("单击开始热床调平"); //"Click to Begin"
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("下个热床调平点"); //"Next Point"
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("完成热床调平"); //"Leveling Done!"
+ PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("淡出高度"); // "Fade Height"
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("设置原点偏移"); //"Set home offsets"
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("偏移已启用"); //"Offsets applied"
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("设置原点"); //"Set origin"
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("预热 ") PREHEAT_1_LABEL; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("预热 ") PREHEAT_1_LABEL " " LCD_STR_N0; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("预热 ") PREHEAT_1_LABEL " " LCD_STR_N1; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("预热 ") PREHEAT_1_LABEL " " LCD_STR_N2; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("预热 ") PREHEAT_1_LABEL " " LCD_STR_N3; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("预热 ") PREHEAT_1_LABEL " " LCD_STR_N4; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("预热 ") PREHEAT_1_LABEL " " LCD_STR_N5; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴"); //MSG_PREHEAT_1 " "
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴 ") LCD_STR_N0; //MSG_PREHEAT_1 " "
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴 ") LCD_STR_N1; //MSG_PREHEAT_1 " "
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴 ") LCD_STR_N2; //MSG_PREHEAT_1 " "
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴 ") LCD_STR_N3; //MSG_PREHEAT_1 " "
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴 ") LCD_STR_N4; //MSG_PREHEAT_1 " "
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴 ") LCD_STR_N5; //MSG_PREHEAT_1 " "
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 全部"); //MSG_PREHEAT_1 " All"
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 热床"); //MSG_PREHEAT_1 " Bed"
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 设置"); //MSG_PREHEAT_1 " conf"
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("预热 ") PREHEAT_2_LABEL; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("预热 ") PREHEAT_2_LABEL " " LCD_STR_N0; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("预热 ") PREHEAT_2_LABEL " " LCD_STR_N1; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("预热 ") PREHEAT_2_LABEL " " LCD_STR_N2; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("预热 ") PREHEAT_2_LABEL " " LCD_STR_N3; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("预热 ") PREHEAT_2_LABEL " " LCD_STR_N4; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("预热 ") PREHEAT_2_LABEL " " LCD_STR_N5; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 喷嘴"); //MSG_PREHEAT_2 " "
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 喷嘴 ") LCD_STR_N0; //MSG_PREHEAT_2 " "
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 喷嘴 ") LCD_STR_N1; //MSG_PREHEAT_2 " "
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 喷嘴 ") LCD_STR_N2; //MSG_PREHEAT_2 " "
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 喷嘴 ") LCD_STR_N3; //MSG_PREHEAT_2 " "
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 喷嘴 ") LCD_STR_N4; //MSG_PREHEAT_2 " "
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 喷嘴 ") LCD_STR_N5; //MSG_PREHEAT_2 " "
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 全部"); //MSG_PREHEAT_2 " All"
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 热床"); //MSG_PREHEAT_2 " Bed"
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("预热 ") PREHEAT_2_LABEL _UxGT(" 设置"); //MSG_PREHEAT_2 " conf"
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("降温"); //"Cooldown"
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("电源打开"); //"Switch power on"
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("电源关闭"); //"Switch power off"
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("挤出"); //"Extrude"
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("回抽"); //"Retract"
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("移动轴"); //"Move axis"
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("调平热床"); //"Bed leveling"
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("调平热床"); //"Level bed"
+ PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("调平边角"); // "Level corners"
-#define MSG_NEXT_CORNER _UxGT("下个边角") // "Next corner"
-#define MSG_EDIT_MESH _UxGT("编辑网格") // "Edit Mesh"
-#define MSG_EDITING_STOPPED _UxGT("网格编辑已停止") // "Mesh Editing Stopped"
-#define MSG_USER_MENU _UxGT("定制命令") // "Custom Commands"
+ PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("下个边角"); // "Next corner"
+ PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("编辑网格"); // "Edit Mesh"
+ PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("网格编辑已停止"); // "Mesh Editing Stopped"
+ PROGMEM Language_Str MSG_USER_MENU = _UxGT("定制命令"); // "Custom Commands"
-#define MSG_UBL_DOING_G29 _UxGT("执行G29") // "Doing G29"
-#define MSG_UBL_TOOLS _UxGT("UBL工具") // "UBL Tools"
-#define MSG_UBL_LEVEL_BED _UxGT("统一热床调平(UBL)") // "Unified Bed Leveling"
-#define MSG_UBL_MANUAL_MESH _UxGT("手工创设网格") // "Manually Build Mesh"
-#define MSG_UBL_BC_INSERT _UxGT("放置垫片并测量") // "Place shim & measure"
-#define MSG_UBL_BC_INSERT2 _UxGT("测量") // "Measure"
-#define MSG_UBL_BC_REMOVE _UxGT("移除并测量热床") // "Remove & measure bed"
-#define MSG_UBL_MOVING_TO_NEXT _UxGT("移动到下一个") // "Moving to next"
-#define MSG_UBL_ACTIVATE_MESH _UxGT("激活UBL") // "Activate UBL"
-#define MSG_UBL_DEACTIVATE_MESH _UxGT("关闭UBL") // "Deactivate UBL"
-#define MSG_UBL_SET_TEMP_BED _UxGT("设置热床温度") // "Bed Temp"
-#define MSG_UBL_SET_TEMP_HOTEND _UxGT("热端温度") // "Hotend Temp"
-#define MSG_UBL_MESH_EDIT _UxGT("网格编辑") // "Mesh Edit"
-#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("编辑客户网格") // "Edit Custom Mesh"
-#define MSG_UBL_FINE_TUNE_MESH _UxGT("细调网格") // "Fine Tuning Mesh"
-#define MSG_UBL_DONE_EDITING_MESH _UxGT("完成编辑网格") // "Done Editing Mesh"
-#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("创设客户网格") // "Build Custom Mesh"
-#define MSG_UBL_BUILD_MESH_MENU _UxGT("创设网格") // "Build Mesh"
-#define MSG_UBL_BUILD_MESH_M1 _UxGT("创设" PREHEAT_1_LABEL "网格") // "Build PREHEAT_1_LABEL Mesh"
-#define MSG_UBL_BUILD_MESH_M2 _UxGT("创设" PREHEAT_2_LABEL "网格") // "Build PREHEAT_2_LABEL Mesh"
-#define MSG_UBL_BUILD_COLD_MESH _UxGT("创设冷网格") // "Build Cold Mesh"
-#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("调整网格高度") // "Adjust Mesh Height"
-#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("高度合计") // "Height Amount"
-#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("批准网格") // "Validate Mesh"
-#define MSG_UBL_VALIDATE_MESH_M1 _UxGT("批准" PREHEAT_1_LABEL "网格") // "Validate PREHEAT_1_LABEL Mesh"
-#define MSG_UBL_VALIDATE_MESH_M2 _UxGT("批准" PREHEAT_2_LABEL "网格") // "Validate PREHEAT_2_LABEL Mesh"
-#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("批准客户网格") // "Validate Custom Mesh"
-#define MSG_UBL_CONTINUE_MESH _UxGT("继续热床网格") // "Continue Bed Mesh"
-#define MSG_UBL_MESH_LEVELING _UxGT("网格调平") // "Mesh Leveling"
-#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("三点调平") // "3-Point Leveling"
-#define MSG_UBL_GRID_MESH_LEVELING _UxGT("格子网格调平") // "Grid Mesh Leveling"
-#define MSG_UBL_MESH_LEVEL _UxGT("调平网格") // "Level Mesh"
-#define MSG_UBL_SIDE_POINTS _UxGT("边点") // "Side Points"
-#define MSG_UBL_MAP_TYPE _UxGT("图类型") // "Map Type"
-#define MSG_UBL_OUTPUT_MAP _UxGT("输出网格图") // "Output Mesh Map"
-#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("输出到主机") // "Output for Host"
-#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("输出到CSV") // "Output for CSV"
-#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("输出到备份") // "Off Printer Backup"
-#define MSG_UBL_INFO_UBL _UxGT("输出UBL信息") // "Output UBL Info"
-#define MSG_UBL_FILLIN_AMOUNT _UxGT("填充合计") // "Fill-in Amount"
-#define MSG_UBL_MANUAL_FILLIN _UxGT("手工填充") // "Manual Fill-in"
-#define MSG_UBL_SMART_FILLIN _UxGT("聪明填充") // "Smart Fill-in"
-#define MSG_UBL_FILLIN_MESH _UxGT("填充网格") // "Fill-in Mesh"
-#define MSG_UBL_INVALIDATE_ALL _UxGT("作废所有的") // "Invalidate All"
-#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("作废最近的") // "Invalidate Closest"
-#define MSG_UBL_FINE_TUNE_ALL _UxGT("细调所有的") // "Fine Tune All"
-#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("细调最近的") // "Fine Tune Closest"
-#define MSG_UBL_STORAGE_MESH_MENU _UxGT("网格存储") // "Mesh Storage"
-#define MSG_UBL_STORAGE_SLOT _UxGT("存储槽") // "Memory Slot"
-#define MSG_UBL_LOAD_MESH _UxGT("装载热床网格") // "Load Bed Mesh"
-#define MSG_UBL_SAVE_MESH _UxGT("保存热床网格") // "Save Bed Mesh"
-#define MSG_MESH_LOADED _UxGT("网格 %i 已装载") // "Mesh %i loaded"
-#define MSG_MESH_SAVED _UxGT("网格 %i 已保存") // "Mesh %i saved"
-#define MSG_UBL_NO_STORAGE _UxGT("没有存储") // "No storage"
-#define MSG_UBL_SAVE_ERROR _UxGT("错误: UBL保存") // "Err: UBL Save"
-#define MSG_UBL_RESTORE_ERROR _UxGT("错误: UBL还原") // "Err: UBL Restore"
-#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Z偏移已停止") // "Z-Offset Stopped"
-#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("一步步UBL") // "Step-By-Step UBL"
+ PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("执行G29"); // "Doing G29"
+ PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL工具"); // "UBL Tools"
+ PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("统一热床调平(UBL)"); // "Unified Bed Leveling"
+ PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("手工创设网格"); // "Manually Build Mesh"
+ PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("放置垫片并测量"); // "Place shim & measure"
+ PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("测量"); // "Measure"
+ PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("移除并测量热床"); // "Remove & measure bed"
+ PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("移动到下一个"); // "Moving to next"
+ PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("激活UBL"); // "Activate UBL"
+ PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("关闭UBL"); // "Deactivate UBL"
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("设置热床温度"); // "Bed Temp"
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("热端温度"); // "Hotend Temp"
+ PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("网格编辑"); // "Mesh Edit"
+ PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("编辑客户网格"); // "Edit Custom Mesh"
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("细调网格"); // "Fine Tuning Mesh"
+ PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("完成编辑网格"); // "Done Editing Mesh"
+ PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("创设客户网格"); // "Build Custom Mesh"
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("创设网格"); // "Build Mesh"
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = _UxGT("创设 ") PREHEAT_1_LABEL _UxGT(" 网格"); // "Build PREHEAT_1_LABEL Mesh"
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("创设 ") PREHEAT_2_LABEL _UxGT(" 网格"); // "Build PREHEAT_2_LABEL Mesh"
+ PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("创设冷网格"); // "Build Cold Mesh"
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("调整网格高度"); // "Adjust Mesh Height"
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("高度合计"); // "Height Amount"
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("批准网格"); // "Validate Mesh"
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("批准 ") PREHEAT_1_LABEL _UxGT(" 网格"); // "Validate PREHEAT_1_LABEL Mesh"
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("批准 ") PREHEAT_2_LABEL _UxGT(" 网格"); // "Validate PREHEAT_2_LABEL Mesh"
+ PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("批准客户网格"); // "Validate Custom Mesh"
+ PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("继续热床网格"); // "Continue Bed Mesh"
+ PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("网格调平"); // "Mesh Leveling"
+ PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("三点调平"); // "3-Point Leveling"
+ PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("格子网格调平"); // "Grid Mesh Leveling"
+ PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("调平网格"); // "Level Mesh"
+ PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("边点"); // "Side Points"
+ PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("图类型"); // "Map Type"
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("输出网格图"); // "Output Mesh Map"
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("输出到主机"); // "Output for Host"
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("输出到CSV"); // "Output for CSV"
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("输出到备份"); // "Off Printer Backup"
+ PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("输出UBL信息"); // "Output UBL Info"
+ PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("填充合计"); // "Fill-in Amount"
+ PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("手工填充"); // "Manual Fill-in"
+ PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("聪明填充"); // "Smart Fill-in"
+ PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("填充网格"); // "Fill-in Mesh"
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("作废所有的"); // "Invalidate All"
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("作废最近的"); // "Invalidate Closest"
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("细调所有的"); // "Fine Tune All"
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("细调最近的"); // "Fine Tune Closest"
+ PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("网格存储"); // "Mesh Storage"
+ PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("存储槽"); // "Memory Slot"
+ PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("装载热床网格"); // "Load Bed Mesh"
+ PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("保存热床网格"); // "Save Bed Mesh"
+ PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("M117 网格 %i 已装载"); // "Mesh %i loaded"
+ PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("M117 网格 %i 已保存"); // "Mesh %i saved"
+ PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("没有存储"); // "No storage"
+ PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("错误: UBL保存"); // "Err: UBL Save"
+ PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("错误: UBL还原"); // "Err: UBL Restore"
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z偏移已停止"); // "Z-Offset Stopped"
+ PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("一步步UBL"); // "Step-By-Step UBL"
+ PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. 创设冷网格");
+ PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2. 聪明填充");
+ PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. 批准网格");
+ PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. 细调所有的");
+ PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. 批准网格");
+ PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. 细调所有的");
+ PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7. 保存热床网格");
-#define MSG_LED_CONTROL _UxGT("灯管控制") // "LED Control")
-#define MSG_LEDS _UxGT("灯") // "Lights")
-#define MSG_LED_PRESETS _UxGT("灯预置") // "Light Presets")
-#define MSG_SET_LEDS_RED _UxGT("红") // "Red")
-#define MSG_SET_LEDS_ORANGE _UxGT("橙") // "Orange")
-#define MSG_SET_LEDS_YELLOW _UxGT("黄") // "Yellow")
-#define MSG_SET_LEDS_GREEN _UxGT("绿") // "Green")
-#define MSG_SET_LEDS_BLUE _UxGT("蓝") // "Blue")
-#define MSG_SET_LEDS_INDIGO _UxGT("青") // "Indigo")
-#define MSG_SET_LEDS_VIOLET _UxGT("紫") // "Violet")
-#define MSG_SET_LEDS_WHITE _UxGT("白") // "White")
-#define MSG_SET_LEDS_DEFAULT _UxGT("缺省") // "Default")
-#define MSG_CUSTOM_LEDS _UxGT("定制灯") // "Custom Lights")
-#define MSG_INTENSITY_R _UxGT("红饱和度") // "Red Intensity")
-#define MSG_INTENSITY_G _UxGT("绿饱和度") // "Green Intensity")
-#define MSG_INTENSITY_B _UxGT("蓝饱和度") // "Blue Intensity")
-#define MSG_INTENSITY_W _UxGT("白饱和度") // "White Intensity")
-#define MSG_LED_BRIGHTNESS _UxGT("亮度") // "Brightness")
+ PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("灯管控制"); // "LED Control")
+ PROGMEM Language_Str MSG_LEDS = _UxGT("灯"); // "Lights")
+ PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("灯预置"); // "Light Presets")
+ PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("红"); // "Red")
+ PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("橙"); // "Orange")
+ PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("黄"); // "Yellow")
+ PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("绿"); // "Green")
+ PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("蓝"); // "Blue")
+ PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("青"); // "Indigo")
+ PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("紫"); // "Violet")
+ PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("白"); // "White")
+ PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("缺省"); // "Default")
+ PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("定制灯"); // "Custom Lights")
+ PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("红饱和度"); // "Red Intensity")
+ PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("绿饱和度"); // "Green Intensity")
+ PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("蓝饱和度"); // "Blue Intensity")
+ PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("白饱和度"); // "White Intensity")
+ PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("亮度"); // "Brightness")
-#define MSG_MOVING _UxGT("移动 ...") // "Moving...")
-#define MSG_FREE_XY _UxGT("释放 XY") // "Free XY")
-#define MSG_MOVE_X _UxGT("移动X") //"Move X"
-#define MSG_MOVE_Y _UxGT("移动Y") //"Move Y"
-#define MSG_MOVE_Z _UxGT("移动Z") //"Move Z"
-#define MSG_MOVE_E _UxGT("挤出机") //"Extruder"
-#define MSG_MOVE_Z_DIST _UxGT("移动 %s mm") //"Move 0.025mm"
-#define MSG_MOVE_01MM _UxGT("移动 0.1 mm") //"Move 0.1mm"
-#define MSG_MOVE_1MM _UxGT("移动 1 mm") //"Move 1mm"
-#define MSG_MOVE_10MM _UxGT("移动 10 mm") //"Move 10mm"
-#define MSG_SPEED _UxGT("速率") //"Speed"
-#define MSG_BED_Z _UxGT("热床Z") //"Bed Z"
-#define MSG_NOZZLE _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 喷嘴") //"Nozzle" 噴嘴
-#define MSG_BED _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 热床") //"Bed"
-#define MSG_FAN_SPEED _UxGT("风扇速率") //"Fan speed"
-#define MSG_EXTRA_FAN_SPEED _UxGT("额外风扇速率") // "Extra fan speed"
-#define MSG_FLOW _UxGT("挤出速率") //"Flow"
-#define MSG_CONTROL _UxGT("控制") //"Control"
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 最小") //" " LCD_STR_THERMOMETER " Min"
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 最大") //" " LCD_STR_THERMOMETER " Max"
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 因数") //" " LCD_STR_THERMOMETER " Fact"
-#define MSG_AUTOTEMP _UxGT("自动控温") //"Autotemp"
-#define MSG_LCD_ON _UxGT("开") //"On"
-#define MSG_LCD_OFF _UxGT("关") //"Off"
-#define MSG_PID_P _UxGT("PID-P") //"PID-P"
-#define MSG_PID_I _UxGT("PID-I") //"PID-I"
-#define MSG_PID_D _UxGT("PID-D") //"PID-D"
-#define MSG_PID_C _UxGT("PID-C") //"PID-C"
-#define MSG_SELECT _UxGT("选择") //"Select"
-#define MSG_ACC _UxGT("加速度") //"Accel" acceleration
-#define MSG_JERK _UxGT("抖动速率") // "Jerk"
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("A轴抖动速率") //"Va-jerk"
- #define MSG_VB_JERK _UxGT("B轴抖动速率") //"Vb-jerk"
- #define MSG_VC_JERK _UxGT("C轴抖动速率") //"Vc-jerk"
-#else
- #define MSG_VA_JERK _UxGT("X轴抖动速率") //"Vx-jerk"
- #define MSG_VB_JERK _UxGT("Y轴抖动速率") //"Vy-jerk"
- #define MSG_VC_JERK _UxGT("Z轴抖动速率") //"Vz-jerk"
-#endif
-#define MSG_VE_JERK _UxGT("挤出机抖动速率") //"Ve-jerk"
-#define MSG_VELOCITY _UxGT("速度") // "Velocity"
-#define MSG_VMAX _UxGT("最大进料速率") //"Vmax " max_feedrate_mm_s
-#define MSG_VMIN _UxGT("最小进料速率") //"Vmin" min_feedrate_mm_s
-#define MSG_VTRAV_MIN _UxGT("最小移动速率") //"VTrav min" min_travel_feedrate_mm_s, (target) speed of the move
-#define MSG_ACCELERATION _UxGT("加速度") // "Acceleration"
-#define MSG_AMAX _UxGT("最大打印加速度") //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
-#define MSG_A_RETRACT _UxGT("收进加速度") //"A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts
-#define MSG_A_TRAVEL _UxGT("非打印移动加速度") //"A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
-#define MSG_STEPS_PER_MM _UxGT("轴步数/mm") //"Steps/mm" axis_steps_per_mm, axis steps-per-unit G92
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("A轴步数/mm") //"Asteps/mm"
- #define MSG_BSTEPS _UxGT("B轴步数/mm") //"Bsteps/mm"
- #define MSG_CSTEPS _UxGT("C轴步数/mm") //"Csteps/mm"
-#else
- #define MSG_ASTEPS _UxGT("X轴步数/mm") //"Xsteps/mm"
- #define MSG_BSTEPS _UxGT("Y轴步数/mm") //"Ysteps/mm"
- #define MSG_CSTEPS _UxGT("Z轴步数/mm") //"Zsteps/mm"
-#endif
-#define MSG_ESTEPS _UxGT("挤出机步数/mm") //"Esteps/mm"
-#define MSG_E1STEPS _UxGT("挤出机1步数/mm") //"E1steps/mm"
-#define MSG_E2STEPS _UxGT("挤出机2步数/mm") //"E2steps/mm"
-#define MSG_E3STEPS _UxGT("挤出机3步数/mm") //"E3steps/mm"
-#define MSG_E4STEPS _UxGT("挤出机4步数/mm") //"E4steps/mm"
-#define MSG_E5STEPS _UxGT("挤出机5步数/mm") //"E5steps/mm"
-#define MSG_E6STEPS _UxGT("挤出机6步数/mm") //"E6steps/mm"
-#define MSG_TEMPERATURE _UxGT("温度") //"Temperature"
-#define MSG_MOTION _UxGT("运动") //"Motion"
-#define MSG_FILAMENT _UxGT("丝料测容") //"Filament" menu_advanced_filament
-#define MSG_VOLUMETRIC_ENABLED _UxGT("测容积mm³") //"E in mm3" volumetric_enabled
-#define MSG_FILAMENT_DIAM _UxGT("丝料直径") //"Fil. Dia."
-#define MSG_FILAMENT_UNLOAD _UxGT("卸载 mm") // "Unload mm"
-#define MSG_FILAMENT_LOAD _UxGT("装载 mm") // "Load mm"
-#define MSG_ADVANCE_K _UxGT("Advance K") // "Advance K"
-#define MSG_CONTRAST _UxGT("LCD对比度") //"LCD contrast"
-#define MSG_STORE_EEPROM _UxGT("保存设置") //"Store memory"
-#define MSG_LOAD_EEPROM _UxGT("装载设置") //"Load memory"
-#define MSG_RESTORE_FAILSAFE _UxGT("恢复安全值") //"Restore failsafe"
-#define MSG_INIT_EEPROM _UxGT("初始化设置") // "Initialize EEPROM"
-#define MSG_REFRESH _UxGT("刷新") //"Refresh"
-#define MSG_WATCH _UxGT("信息屏") //"Info screen"
-#define MSG_PREPARE _UxGT("准备") //"Prepare"
-#define MSG_TUNE _UxGT("调整") //"Tune"
-#define MSG_PAUSE_PRINT _UxGT("暂停打印") //"Pause print"
-#define MSG_RESUME_PRINT _UxGT("恢复打印") //"Resume print"
-#define MSG_STOP_PRINT _UxGT("停止打印") //"Stop print"
-#define MSG_MEDIA_MENU _UxGT("从存储卡上打印") //"Print from SD"
-#define MSG_NO_MEDIA _UxGT("无存储卡") //"No SD card"
-#define MSG_DWELL _UxGT("休眠中 ...") //"Sleep..."
-#define MSG_USERWAIT _UxGT("点击继续 ...") //"Click to resume..."
-#define MSG_PRINT_PAUSED _UxGT("暫停打印") // "Print paused"
-#define MSG_PRINT_ABORTED _UxGT("已取消打印") //"Print aborted"
-#define MSG_NO_MOVE _UxGT("无移动") //"No move."
-#define MSG_KILLED _UxGT("已杀掉") //"KILLED. "
-#define MSG_STOPPED _UxGT("已停止") //"STOPPED. "
-#define MSG_CONTROL_RETRACT _UxGT("回抽长度mm") //"Retract mm" retract_length, retract length (positive mm)
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("换手回抽长度mm") //"Swap Re.mm" swap_retract_length, swap retract length (positive mm), for extruder change
-#define MSG_CONTROL_RETRACTF _UxGT("回抽速率mm/s") //"Retract V" retract_feedrate_mm_s, feedrate for retracting (mm/s)
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Hop mm") //"Hop mm" retract_zraise, retract Z-lift
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("回抽恢复长度mm") //"UnRet +mm" retract_recover_extra, additional recover length (mm, added to retract length when recovering)
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("换手回抽恢复长度mm") //"S UnRet+mm" swap_retract_recover_extra, additional swap recover length (mm, added to retract length when recovering from extruder change)
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("回抽恢复后进料速率mm/s") //"UnRet V" retract_recover_feedrate_mm_s, feedrate for recovering from retraction (mm/s)
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("S UnRet V") // "S UnRet V"
-#define MSG_AUTORETRACT _UxGT("自动抽回") //"AutoRetr." autoretract_enabled,
-#define MSG_FILAMENTCHANGE _UxGT("更换丝料") //"Change filament"
-#define MSG_FILAMENTLOAD _UxGT("装载丝料") // "Load filament"
-#define MSG_FILAMENTUNLOAD _UxGT("卸载丝料") // "Unload filament"
-#define MSG_FILAMENTUNLOAD_ALL _UxGT("卸载全部") // "Unload All"
-#define MSG_INIT_MEDIA _UxGT("初始化存储卡") //"Init. SD card"
-#define MSG_CHANGE_MEDIA _UxGT("更换存储卡") //"Change SD card"
-#define MSG_ZPROBE_OUT _UxGT("Z探针在热床之外") //"Z probe out. bed" Z probe is not within the physical limits
-#define MSG_SKEW_FACTOR _UxGT("偏斜因数") // "Skew Factor"
-#define MSG_BLTOUCH _UxGT("BLTouch") // "BLTouch"
-#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch 自检") // "BLTouch Self-Test"
-#define MSG_BLTOUCH_RESET _UxGT("重置BLTouch") // "Reset BLTouch"
-#define MSG_BLTOUCH_DEPLOY _UxGT("部署BLTouch") // "Deploy BLTouch"
-#define MSG_BLTOUCH_STOW _UxGT("装载BLTouch") // "Stow BLTouch"
-#define MSG_HOME_FIRST _UxGT("归位 %s%s%s 先") //"Home ... first"
-#define MSG_ZPROBE_ZOFFSET _UxGT("Z偏移") //"Z Offset"
-#define MSG_BABYSTEP_X _UxGT("微量调整X轴") //"Babystep X" lcd_babystep_x, Babystepping enables the user to control the axis in tiny amounts
-#define MSG_BABYSTEP_Y _UxGT("微量调整Y轴") //"Babystep Y"
-#define MSG_BABYSTEP_Z _UxGT("微量调整Z轴") //"Babystep Z"
-#define MSG_ENDSTOP_ABORT _UxGT("挡块终止") //"Endstop abort"
-#define MSG_HEATING_FAILED_LCD _UxGT("加热失败") //"Heating failed"
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("错误:REDUNDANT TEMP") //"Err: REDUNDANT TEMP"
-#define MSG_THERMAL_RUNAWAY _UxGT("温控失控") //"THERMAL RUNAWAY"
-#define MSG_ERR_MAXTEMP _UxGT("错误:最高温度") //"Err: MAXTEMP"
-#define MSG_ERR_MINTEMP _UxGT("错误:最低温度") //"Err: MINTEMP"
-#define MSG_ERR_MAXTEMP_BED _UxGT("错误:最高热床温度") //"Err: MAXTEMP BED"
-#define MSG_ERR_MINTEMP_BED _UxGT("错误:最低热床温度") //"Err: MINTEMP BED"
-#define MSG_ERR_Z_HOMING _UxGT("归位 XY 先") // "Home XY First"
-#define MSG_HALTED _UxGT("打印停机") //"PRINTER HALTED"
-#define MSG_PLEASE_RESET _UxGT("请重置") //"Please reset"
-#define MSG_SHORT_DAY _UxGT("天") //"d" // One character only
-#define MSG_SHORT_HOUR _UxGT("时") //"h" // One character only
-#define MSG_SHORT_MINUTE _UxGT("分") //"m" // One character only
-#define MSG_HEATING _UxGT("加热中 ...") //"Heating..."
-#define MSG_BED_HEATING _UxGT("加热热床中 ...") //"Bed Heating..."
-#define MSG_DELTA_CALIBRATE _UxGT("⊿校准") //"Delta Calibration"
-#define MSG_DELTA_CALIBRATE_X _UxGT("⊿校准X") //"Calibrate X"
-#define MSG_DELTA_CALIBRATE_Y _UxGT("⊿校准Y") //"Calibrate Y"
-#define MSG_DELTA_CALIBRATE_Z _UxGT("⊿校准Z") //"Calibrate Z"
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("⊿校准中心") //"Calibrate Center"
-#define MSG_DELTA_SETTINGS _UxGT("⊿设置") // "Delta Settings"
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("⊿自动校准") // "Auto Calibration"
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("设置⊿高度") // "Set Delta Height"
-#define MSG_DELTA_DIAG_ROD _UxGT("⊿斜柱") // "Diag Rod"
-#define MSG_DELTA_HEIGHT _UxGT("⊿高度") // "Height"
-#define MSG_DELTA_RADIUS _UxGT("⊿半径") // "Radius"
-#define MSG_INFO_MENU _UxGT("关于打印机") //"About Printer"
-#define MSG_INFO_PRINTER_MENU _UxGT("打印机信息") //"Printer Info"
-#define MSG_3POINT_LEVELING _UxGT("三点调平") // "3-Point Leveling"
-#define MSG_LINEAR_LEVELING _UxGT("线性调平") // "Linear Leveling"
-#define MSG_BILINEAR_LEVELING _UxGT("双线性调平") // "Bilinear Leveling"
-#define MSG_UBL_LEVELING _UxGT("统一热床调平(UBL)") // "Unified Bed Leveling"
-#define MSG_MESH_LEVELING _UxGT("网格调平") // "Mesh Leveling"
-#define MSG_INFO_STATS_MENU _UxGT("打印机统计") //"Printer Stats"
-#define MSG_INFO_BOARD_MENU _UxGT("主板信息") //"Board Info"
-#define MSG_INFO_THERMISTOR_MENU _UxGT("温度计") //"Thermistors"
-#define MSG_INFO_EXTRUDERS _UxGT("挤出机") //"Extruders"
-#define MSG_INFO_BAUDRATE _UxGT("波特率") //"Baud"
-#define MSG_INFO_PROTOCOL _UxGT("协议") //"Protocol"
-#define MSG_CASE_LIGHT _UxGT("外壳灯") // "Case light"
-#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("灯亮度") // "Light BRIGHTNESS"
+ PROGMEM Language_Str MSG_MOVING = _UxGT("移动 ..."); // "Moving...")
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("释放 XY"); // "Free XY")
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("移动X"); //"Move X"
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("移动Y"); //"Move Y"
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("移动Z"); //"Move Z"
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("挤出机"); //"Extruder"
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("挤出机 ") LCD_STR_E0; //"Extruder"
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("挤出机 ") LCD_STR_E1; //"Extruder"
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("挤出机 ") LCD_STR_E2; //"Extruder"
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("挤出机 ") LCD_STR_E3; //"Extruder"
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("挤出机 ") LCD_STR_E4; //"Extruder"
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("挤出机 ") LCD_STR_E5; //"Extruder"
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("移动 %s mm"); //"Move 0.025mm"
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("移动 0.1 mm"); //"Move 0.1mm"
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("移动 1 mm"); //"Move 1mm"
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("移动 10 mm"); //"Move 10mm"
+ PROGMEM Language_Str MSG_SPEED = _UxGT("速率"); //"Speed"
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("热床Z"); //"Bed Z"
+ PROGMEM Language_Str MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" 喷嘴"); //"Nozzle" 噴嘴
+ PROGMEM Language_Str MSG_NOZZLE_0 = " " LCD_STR_THERMOMETER _UxGT(" 喷嘴 ") LCD_STR_N0; //"Nozzle" 噴嘴
+ PROGMEM Language_Str MSG_NOZZLE_1 = " " LCD_STR_THERMOMETER _UxGT(" 喷嘴 ") LCD_STR_N1; //"Nozzle" 噴嘴
+ PROGMEM Language_Str MSG_NOZZLE_2 = " " LCD_STR_THERMOMETER _UxGT(" 喷嘴 ") LCD_STR_N2; //"Nozzle" 噴嘴
+ PROGMEM Language_Str MSG_NOZZLE_3 = " " LCD_STR_THERMOMETER _UxGT(" 喷嘴 ") LCD_STR_N3; //"Nozzle" 噴嘴
+ PROGMEM Language_Str MSG_NOZZLE_4 = " " LCD_STR_THERMOMETER _UxGT(" 喷嘴 ") LCD_STR_N4; //"Nozzle" 噴嘴
+ PROGMEM Language_Str MSG_NOZZLE_5 = " " LCD_STR_THERMOMETER _UxGT(" 喷嘴 ") LCD_STR_N5; //"Nozzle" 噴嘴
+ PROGMEM Language_Str MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" 热床"); //"Bed"
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("风扇速率"); //"Fan speed"
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("风扇速率 1"); //"Fan speed"
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("风扇速率 2"); //"Fan speed"
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("风扇速率 3"); //"Fan speed"
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("额外风扇速率"); // "Extra fan speed"
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1 = _UxGT("额外风扇速率 1"); // "Extra fan speed"
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2 = _UxGT("额外风扇速率 2"); // "Extra fan speed"
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3 = _UxGT("额外风扇速率 3"); // "Extra fan speed"
+ PROGMEM Language_Str MSG_FLOW = _UxGT("挤出速率"); //"Flow"
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("挤出速率 ") LCD_STR_N0; //"Flow"
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("挤出速率 ") LCD_STR_N1; //"Flow"
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("挤出速率 ") LCD_STR_N2; //"Flow"
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("挤出速率 ") LCD_STR_N3; //"Flow"
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("挤出速率 ") LCD_STR_N4; //"Flow"
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("挤出速率 ") LCD_STR_N5; //"Flow"
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("控制"); //"Control"
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" 最小"); //" " LCD_STR_THERMOMETER " Min"
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" 最大"); //" " LCD_STR_THERMOMETER " Max"
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" 因数"); //" " LCD_STR_THERMOMETER " Fact"
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("自动控温"); //"Autotemp"
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("开"); //"On"
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("关"); //"Off"
+ PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P"); //"PID-P"
+ PROGMEM Language_Str MSG_PID_P_E0 = _UxGT("PID-P ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_P_E1 = _UxGT("PID-P ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_P_E2 = _UxGT("PID-P ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_P_E3 = _UxGT("PID-P ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_P_E4 = _UxGT("PID-P ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_P_E5 = _UxGT("PID-P ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I"); //"PID-I"
+ PROGMEM Language_Str MSG_PID_I_E0 = _UxGT("PID-I ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_I_E1 = _UxGT("PID-I ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_I_E2 = _UxGT("PID-I ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_I_E3 = _UxGT("PID-I ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_I_E4 = _UxGT("PID-I ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_I_E5 = _UxGT("PID-I ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D"); //"PID-D"
+ PROGMEM Language_Str MSG_PID_D_E0 = _UxGT("PID-D ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_D_E1 = _UxGT("PID-D ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_D_E2 = _UxGT("PID-D ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_D_E3 = _UxGT("PID-D ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_D_E4 = _UxGT("PID-D ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_D_E5 = _UxGT("PID-D ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C"); //"PID-C"
+ PROGMEM Language_Str MSG_PID_C_E0 = _UxGT("PID-C ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_C_E1 = _UxGT("PID-C ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_C_E2 = _UxGT("PID-C ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_C_E3 = _UxGT("PID-C ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_C_E4 = _UxGT("PID-C ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_C_E5 = _UxGT("PID-C ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_SELECT = _UxGT("选择"); //"Select"
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("选择 ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("选择 ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("选择 ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("选择 ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("选择 ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("选择 ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("加速度"); //"Accel" acceleration
+ PROGMEM Language_Str MSG_JERK = _UxGT("抖动速率"); // "Jerk"
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("轴抖动速率") LCD_STR_A; //"Va-jerk"
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("轴抖动速率") LCD_STR_B; //"Vb-jerk"
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("轴抖动速率") LCD_STR_C; //"Vc-jerk"
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("挤出机抖动速率"); //"Ve-jerk"
+ PROGMEM Language_Str MSG_VELOCITY = _UxGT("速度"); // "Velocity"
+ PROGMEM Language_Str MSG_VMAX_A = _UxGT("最大进料速率") LCD_STR_A; //"Vmax " max_feedrate_mm_s
+ PROGMEM Language_Str MSG_VMAX_B = _UxGT("最大进料速率") LCD_STR_B; //"Vmax " max_feedrate_mm_s
+ PROGMEM Language_Str MSG_VMAX_C = _UxGT("最大进料速率") LCD_STR_C; //"Vmax " max_feedrate_mm_s
+ PROGMEM Language_Str MSG_VMAX_E = _UxGT("最大进料速率") LCD_STR_E; //"Vmax " max_feedrate_mm_s
+ PROGMEM Language_Str MSG_VMAX_E0 = _UxGT("最大进料速率 ") LCD_STR_E0; //"Vmax " max_feedrate_mm_s
+ PROGMEM Language_Str MSG_VMAX_E1 = _UxGT("最大进料速率 ") LCD_STR_E1; //"Vmax " max_feedrate_mm_s
+ PROGMEM Language_Str MSG_VMAX_E2 = _UxGT("最大进料速率 ") LCD_STR_E2; //"Vmax " max_feedrate_mm_s
+ PROGMEM Language_Str MSG_VMAX_E3 = _UxGT("最大进料速率 ") LCD_STR_E3; //"Vmax " max_feedrate_mm_s
+ PROGMEM Language_Str MSG_VMAX_E4 = _UxGT("最大进料速率 ") LCD_STR_E4; //"Vmax " max_feedrate_mm_s
+ PROGMEM Language_Str MSG_VMAX_E5 = _UxGT("最大进料速率 ") LCD_STR_E5; //"Vmax " max_feedrate_mm_s
+ PROGMEM Language_Str MSG_VMIN = _UxGT("最小进料速率"); //"Vmin" min_feedrate_mm_s
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("最小移动速率"); //"VTrav min" min_travel_feedrate_mm_s, (target) speed of the move
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("加速度"); // "Acceleration"
+ PROGMEM Language_Str MSG_AMAX_A = _UxGT("最大打印加速度") LCD_STR_A; //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+ PROGMEM Language_Str MSG_AMAX_B = _UxGT("最大打印加速度") LCD_STR_B; //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+ PROGMEM Language_Str MSG_AMAX_C = _UxGT("最大打印加速度") LCD_STR_C; //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+ PROGMEM Language_Str MSG_AMAX_E = _UxGT("最大打印加速度") LCD_STR_E; //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+ PROGMEM Language_Str MSG_AMAX_E0 = _UxGT("最大打印加速度 ") LCD_STR_E0; //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+ PROGMEM Language_Str MSG_AMAX_E1 = _UxGT("最大打印加速度 ") LCD_STR_E1; //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+ PROGMEM Language_Str MSG_AMAX_E2 = _UxGT("最大打印加速度 ") LCD_STR_E2; //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+ PROGMEM Language_Str MSG_AMAX_E3 = _UxGT("最大打印加速度 ") LCD_STR_E3; //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+ PROGMEM Language_Str MSG_AMAX_E4 = _UxGT("最大打印加速度 ") LCD_STR_E4; //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+ PROGMEM Language_Str MSG_AMAX_E5 = _UxGT("最大打印加速度 ") LCD_STR_E5; //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("收进加速度"); //"A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("非打印移动加速度"); //"A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("轴步数/mm"); //"Steps/mm" axis_steps_per_mm, axis steps-per-unit G92
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT("轴步数/mm"); //"Asteps/mm"
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT("轴步数/mm"); //"Bsteps/mm"
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT("轴步数/mm"); //"Csteps/mm"
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("挤出机步数/mm"); //"Esteps/mm"
+ PROGMEM Language_Str MSG_E0_STEPS = _UxGT("挤出机") LCD_STR_N0 _UxGT("步数/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = _UxGT("挤出机") LCD_STR_N1 _UxGT("步数/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = _UxGT("挤出机") LCD_STR_N2 _UxGT("步数/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = _UxGT("挤出机") LCD_STR_N3 _UxGT("步数/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = _UxGT("挤出机") LCD_STR_N4 _UxGT("步数/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = _UxGT("挤出机") LCD_STR_N5 _UxGT("步数/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("温度"); //"Temperature"
+ PROGMEM Language_Str MSG_MOTION = _UxGT("运动"); //"Motion"
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("丝料测容"); //"Filament" menu_advanced_filament
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("测容积mm³"); //"E in mm3" volumetric_enabled
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("丝料直径"); //"Fil. Dia."
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("丝料直径 ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("丝料直径 ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("丝料直径 ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("丝料直径 ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("丝料直径 ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("丝料直径 ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("卸载 mm"); // "Unload mm"
+ PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("装载 mm"); // "Load mm"
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD对比度"); //"LCD contrast"
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("保存设置"); //"Store memory"
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("装载设置"); //"Load memory"
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("恢复安全值"); //"Restore failsafe"
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("初始化设置"); // "Initialize EEPROM"
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("刷新"); //"Refresh"
+ PROGMEM Language_Str MSG_WATCH = _UxGT("信息屏"); //"Info screen"
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("准备"); //"Prepare"
+ PROGMEM Language_Str MSG_TUNE = _UxGT("调整"); //"Tune"
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("暂停打印"); //"Pause print"
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("恢复打印"); //"Resume print"
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("停止打印"); //"Stop print"
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("从存储卡上打印"); //"Print from SD"
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("无存储卡"); //"No SD card"
+ PROGMEM Language_Str MSG_DWELL = _UxGT("休眠中 ..."); //"Sleep..."
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("点击继续 ..."); //"Click to resume..."
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("暫停打印"); // "Print paused"
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("已取消打印"); //"Print aborted"
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("无移动"); //"No move."
+ PROGMEM Language_Str MSG_KILLED = _UxGT("已杀掉"); //"KILLED. "
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("已停止"); //"STOPPED. "
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("回抽长度mm"); //"Retract mm" retract_length, retract length (positive mm)
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("换手回抽长度mm"); //"Swap Re.mm" swap_retract_length, swap retract length (positive mm), for extruder change
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("回抽速率mm/s"); //"Retract V" retract_feedrate_mm_s, feedrate for retracting (mm/s)
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm"); //"Hop mm" retract_zraise, retract Z-lift
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("回抽恢复长度mm"); //"UnRet +mm" retract_recover_extra, additional recover length (mm, added to retract length when recovering)
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("换手回抽恢复长度mm"); //"S UnRet+mm" swap_retract_recover_extra, additional swap recover length (mm, added to retract length when recovering from extruder change)
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("回抽恢复后进料速率mm/s"); //"UnRet V" retract_recover_feedrate_mm_s, feedrate for recovering from retraction (mm/s)
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V"); // "S UnRet V"
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("自动抽回"); //"AutoRetr." autoretract_enabled,
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("更换丝料"); //"Change filament"
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("更换丝料 ") LCD_STR_E0; //"Change filament"
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("更换丝料 ") LCD_STR_E1; //"Change filament"
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("更换丝料 ") LCD_STR_E2; //"Change filament"
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("更换丝料 ") LCD_STR_E3; //"Change filament"
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("更换丝料 ") LCD_STR_E4; //"Change filament"
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("更换丝料 ") LCD_STR_E5; //"Change filament"
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E0 = _UxGT("装载丝料 ") LCD_STR_E0; // "Load filament"
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E1 = _UxGT("装载丝料 ") LCD_STR_E1; // "Load filament"
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E2 = _UxGT("装载丝料 ") LCD_STR_E2; // "Load filament"
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E3 = _UxGT("装载丝料 ") LCD_STR_E3; // "Load filament"
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E4 = _UxGT("装载丝料 ") LCD_STR_E4; // "Load filament"
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E5 = _UxGT("装载丝料 ") LCD_STR_E5; // "Load filament"
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0 = _UxGT("卸载丝料 ") LCD_STR_E0; // "Unload filament"
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1 = _UxGT("卸载丝料 ") LCD_STR_E1; // "Unload filament"
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2 = _UxGT("卸载丝料 ") LCD_STR_E2; // "Unload filament"
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3 = _UxGT("卸载丝料 ") LCD_STR_E3; // "Unload filament"
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4 = _UxGT("卸载丝料 ") LCD_STR_E4; // "Unload filament"
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5 = _UxGT("卸载丝料 ") LCD_STR_E5; // "Unload filament"
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("卸载全部"); // "Unload All"
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("初始化存储卡"); //"Init. SD card"
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("更换存储卡"); //"Change SD card"
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z探针在热床之外"); //"Z probe out. bed" Z probe is not within the physical limits
+ PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("偏斜因数"); // "Skew Factor"
+ PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch"); // "BLTouch"
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch 自检"); // "BLTouch Self-Test"
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("重置BLTouch"); // "Reset BLTouch"
+ PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("部署BLTouch"); // "Deploy BLTouch"
+ PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("装载BLTouch"); // "Stow BLTouch"
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("归位 %s%s%s 先"); //"Home ... first"
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Z偏移"); //"Z Offset"
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("微量调整X轴"); //"Babystep X" lcd_babystep_x, Babystepping enables the user to control the axis in tiny amounts
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("微量调整Y轴"); //"Babystep Y"
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("微量调整Z轴"); //"Babystep Z"
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("挡块终止"); //"Endstop abort"
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("加热失败"); //"Heating failed"
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("错误:REDUNDANT TEMP"); //"Err: REDUNDANT TEMP"
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("温控失控"); //"THERMAL RUNAWAY"
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("错误:最高温度"); //"Err: MAXTEMP"
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("错误:最低温度"); //"Err: MINTEMP"
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("错误:最高热床温度"); //"Err: MAXTEMP BED"
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("错误:最低热床温度"); //"Err: MINTEMP BED"
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("归位 XY 先"); // "Home XY First"
+ PROGMEM Language_Str MSG_HALTED = _UxGT("打印停机"); //"PRINTER HALTED"
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("请重置"); //"Please reset"
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("天"); //"d" // One character only
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("时"); //"h" // One character only
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("分"); //"m" // One character only
+ PROGMEM Language_Str MSG_HEATING = _UxGT("加热中 ..."); //"Heating..."
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("加热热床中 ..."); //"Bed Heating..."
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("⊿校准"); //"Delta Calibration"
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("⊿校准X"); //"Calibrate X"
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("⊿校准Y"); //"Calibrate Y"
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("⊿校准Z"); //"Calibrate Z"
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("⊿校准中心"); //"Calibrate Center"
+ PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("⊿设置"); // "Delta Settings"
+ PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("⊿自动校准"); // "Auto Calibration"
+ PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("设置⊿高度"); // "Set Delta Height"
+ PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("⊿斜柱"); // "Diag Rod"
+ PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("⊿高度"); // "Height"
+ PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("⊿半径"); // "Radius"
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("关于打印机"); //"About Printer"
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("打印机信息"); //"Printer Info"
+ PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("三点调平"); // "3-Point Leveling"
+ PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("线性调平"); // "Linear Leveling"
+ PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("双线性调平"); // "Bilinear Leveling"
+ PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("统一热床调平(UBL)"); // "Unified Bed Leveling"
+ PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("网格调平"); // "Mesh Leveling"
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("打印机统计"); //"Printer Stats"
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("主板信息"); //"Board Info"
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("温度计"); //"Thermistors"
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("挤出机"); //"Extruders"
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("波特率"); //"Baud"
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("协议"); //"Protocol"
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("外壳灯"); // "Case light"
+ PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("灯亮度"); // "Light BRIGHTNESS"
-#define MSG_EXPECTED_PRINTER _UxGT("打印机不正确") // "The printer is incorrect"
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("打印机不正确"); // "The printer is incorrect"
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("打印计数") //"Print Count"
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("完成了") //"Completed"
- #define MSG_INFO_PRINT_TIME _UxGT("总打印时间") //"Total print time"
- #define MSG_INFO_PRINT_LONGEST _UxGT("最长工作时间") //"Longest job time"
- #define MSG_INFO_PRINT_FILAMENT _UxGT("总计挤出") //"Extruded total"
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("打印数") //"Prints"
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("完成") //"Completed"
- #define MSG_INFO_PRINT_TIME _UxGT("总共") //"Total"
- #define MSG_INFO_PRINT_LONGEST _UxGT("最长") //"Longest"
- #define MSG_INFO_PRINT_FILAMENT _UxGT("已挤出") //"Extruded"
-#endif
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("打印计数"); //"Print Count"
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("完成了"); //"Completed"
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("总打印时间"); //"Total print time"
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("最长工作时间"); //"Longest job time"
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("总计挤出"); //"Extruded total"
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("打印数"); //"Prints"
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("完成"); //"Completed"
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("总共"); //"Total"
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("最长"); //"Longest"
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("已挤出"); //"Extruded"
+ #endif
-#define MSG_INFO_MIN_TEMP _UxGT("最低温度") //"Min Temp"
-#define MSG_INFO_MAX_TEMP _UxGT("最高温度") //"Max Temp"
-#define MSG_INFO_PSU _UxGT("电源供应") //"Power Supply"
-#define MSG_DRIVE_STRENGTH _UxGT("驱动力度") // "Drive Strength"
-#define MSG_DAC_PERCENT _UxGT("驱动 %") // "Driver %"
-#define MSG_DAC_EEPROM_WRITE _UxGT("保存驱动设置") // "DAC EEPROM Write"
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("打印已暂停") // "PRINT PAUSED"
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("装载丝料") // "LOAD FILAMENT"
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("卸载丝料") // "UNLOAD FILAMENT"
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("恢复选项:") // "RESUME OPTIONS:"
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("清除更多") // "Purge more"
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("恢复打印") //"Resume print"
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" 喷嘴: ") // " Nozzle: "
-#define MSG_ERR_HOMING_FAILED _UxGT("归原位失败") // "Homing failed"
-#define MSG_ERR_PROBING_FAILED _UxGT("探针探测失败") // "Probing failed"
-#define MSG_M600_TOO_COLD _UxGT("M600: 太凉") // "M600: Too cold"
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("最低温度"); //"Min Temp"
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("最高温度"); //"Max Temp"
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("电源供应"); //"Power Supply"
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("驱动力度"); // "Drive Strength"
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("驱动 %"); // "Driver %"
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("保存驱动设置"); // "DAC EEPROM Write"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("打印已暂停"); // "PRINT PAUSED"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("装载丝料"); // "LOAD FILAMENT"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("卸载丝料"); // "UNLOAD FILAMENT"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("恢复选项:"); // "RESUME OPTIONS:"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("清除更多"); // "Purge more"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("恢复打印"); //"Resume print"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" 喷嘴: "); // " Nozzle: "
+ PROGMEM Language_Str MSG_LCD_HOMING_FAILED = _UxGT("归原位失败"); // "Homing failed"
+ PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("探针探测失败"); // "Probing failed"
+ PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: 太凉"); // "M600: Too cold"
-#if LCD_HEIGHT >= 4
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("等待开始") //"Wait for start"
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("丝料") //"of the filament"
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("变更") //"change"
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("等待") //"Wait for"
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("卸下丝料") //"filament unload"
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("插入丝料") //"Insert filament"
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("并按键") //"and press button"
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("来继续 ...") //"to continue..."
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("按下按钮来") // "Press button to"
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("加热喷嘴.") // "heat nozzle."
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("加热喷嘴") // "Heating nozzle"
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("请等待 ...") // "Please wait..."
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("等待") //"Wait for"
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("进料") //"filament load"
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("等待") // "Wait for"
- #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("丝料清除") // "filament purge"
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("等待打印") //"Wait for print"
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("恢复") //"to resume"
-#else // LCD_HEIGHT < 4
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("请等待 ...") //"Please wait..."
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("退出中 ...") //"Ejecting..."
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("插入并单击") //"Insert and Click"
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("加热中 ...") // "Heating..."
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("装载中 ...") //"Loading..."
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("清除中 ...") // "Purging..."
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("恢复中 ...") //"Resuming..."
-#endif // LCD_HEIGHT < 4
+ #if LCD_HEIGHT >= 4
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("等待开始", "丝料", "变更")); // "Wait for start of the filament change"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("等待", "卸下丝料")); // "Wait for filament unload"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("插入丝料", "并按键", "来继续 ...")); // "Insert filament and press button to continue..."
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("按下按钮来", "加热喷嘴.")); // "Press button to heat nozzle."
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("加热喷嘴", "请等待 ...")); // "Heating nozzle Please wait..."
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("等待", "进料")); // "Wait for filament load"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("等待", "丝料清除")); // "Wait for filament purge"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("等待打印", "恢复")); // "Wait for print to resume"
+ #else
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("请等待 ...")); //"Please wait..."
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("退出中 ...")); //"Ejecting..."
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("插入并单击")); //"Insert and Click"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("加热中 ...")); // "Heating..."
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("装载中 ...")); //"Loading..."
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("清除中 ...")); // "Purging..."
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("恢复中 ...")); //"Resuming..."
+ #endif
+}
diff --git a/Marlin/src/lcd/language/language_zh_TW.h b/Marlin/src/lcd/language/language_zh_TW.h
index ce8cda2692dc..051e71ccae71 100644
--- a/Marlin/src/lcd/language/language_zh_TW.h
+++ b/Marlin/src/lcd/language/language_zh_TW.h
@@ -28,357 +28,464 @@
* See also http://marlinfw.org/docs/development/lcd_language.html
*
*/
+namespace Language_zh_TW {
+ using namespace Language_en; // Inherit undefined strings from English
-#define CHARSIZE 3
+ constexpr uint8_t CHARSIZE = 3;
+ PROGMEM Language_Str LANGUAGE = _UxGT("Traditional Chinese");
-#define WELCOME_MSG MACHINE_NAME _UxGT("已就緒.") //" ready."
-#define MSG_BACK _UxGT("返回") // ”Back“
-#define MSG_MEDIA_INSERTED _UxGT("記憶卡已插入") //"Card inserted"
-#define MSG_MEDIA_REMOVED _UxGT("記憶卡被拔出") //"Card removed"
-#define MSG_LCD_ENDSTOPS _UxGT("擋塊") //"Endstops" // Max length 8 characters
-#define MSG_MAIN _UxGT("主選單") //"Main"
-#define MSG_AUTOSTART _UxGT("自動開始") //"Autostart"
-#define MSG_DISABLE_STEPPERS _UxGT("關閉步進馬達") //"Disable steppers"
-#define MSG_DEBUG_MENU _UxGT("除錯選單") // "Debug Menu"
-#define MSG_PROGRESS_BAR_TEST _UxGT("進度條測試") // "Progress Bar Test"
-#define MSG_AUTO_HOME _UxGT("自動回原點") //"Auto home"
-#define MSG_AUTO_HOME_X _UxGT("回X原點") //"Home X"
-#define MSG_AUTO_HOME_Y _UxGT("回Y原點") //"Home Y"
-#define MSG_AUTO_HOME_Z _UxGT("回Z原點") //"Home Z"
-#define MSG_LEVEL_BED_HOMING _UxGT("平台調平XYZ歸原點") //"Homing XYZ"
-#define MSG_LEVEL_BED_WAITING _UxGT("單擊開始熱床調平") //"Click to Begin"
-#define MSG_LEVEL_BED_NEXT_POINT _UxGT("下個熱床調平點") //"Next Point"
-#define MSG_LEVEL_BED_DONE _UxGT("完成熱床調平") //"Leveling Done!"
-#define MSG_Z_FADE_HEIGHT _UxGT("淡出高度") // "Fade Height"
-#define MSG_SET_HOME_OFFSETS _UxGT("設置原點偏移") //"Set home offsets"
-#define MSG_HOME_OFFSETS_APPLIED _UxGT("偏移已啟用") //"Offsets applied"
-#define MSG_SET_ORIGIN _UxGT("設置原點") //"Set origin"
-#define MSG_PREHEAT_1 _UxGT("預熱" PREHEAT_1_LABEL) //"Preheat PREHEAT_1_LABEL"
-#define MSG_PREHEAT_1_N MSG_PREHEAT_1 _UxGT(" ") //MSG_PREHEAT_1 " "
-#define MSG_PREHEAT_1_ALL MSG_PREHEAT_1 _UxGT(" 全部") //MSG_PREHEAT_1 " All"
-#define MSG_PREHEAT_1_BEDONLY MSG_PREHEAT_1 _UxGT(" 熱床") //MSG_PREHEAT_1 " Bed"
-#define MSG_PREHEAT_1_SETTINGS MSG_PREHEAT_1 _UxGT(" 設置") //MSG_PREHEAT_1 " conf"
-#define MSG_PREHEAT_2 _UxGT("預熱" PREHEAT_2_LABEL) //"Preheat PREHEAT_2_LABEL"
-#define MSG_PREHEAT_2_N MSG_PREHEAT_2 _UxGT(" ") //MSG_PREHEAT_2 " "
-#define MSG_PREHEAT_2_ALL MSG_PREHEAT_2 _UxGT(" 全部") //MSG_PREHEAT_2 " All"
-#define MSG_PREHEAT_2_BEDONLY MSG_PREHEAT_2 _UxGT(" 熱床") //MSG_PREHEAT_2 " Bed"
-#define MSG_PREHEAT_2_SETTINGS MSG_PREHEAT_2 _UxGT(" 設置") //MSG_PREHEAT_2 " conf"
-#define MSG_COOLDOWN _UxGT("降溫") //"Cooldown"
-#define MSG_SWITCH_PS_ON _UxGT("電源打開") //"Switch power on"
-#define MSG_SWITCH_PS_OFF _UxGT("電源關閉") //"Switch power off"
-#define MSG_EXTRUDE _UxGT("擠出") //"Extrude"
-#define MSG_RETRACT _UxGT("回縮") //"Retract"
-#define MSG_MOVE_AXIS _UxGT("移動軸") //"Move axis"
-#define MSG_BED_LEVELING _UxGT("調平熱床") //"Bed leveling"
-#define MSG_LEVEL_BED _UxGT("調平熱床") //"Level bed"
-#define MSG_LEVEL_CORNERS _UxGT("調平邊角") // "Level corners"
+ PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT("已就緒."); //" ready."
+ PROGMEM Language_Str MSG_BACK = _UxGT("返回"); // ”Back“
+ PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("記憶卡已插入"); //"Card inserted"
+ PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("記憶卡被拔出"); //"Card removed"
+ PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("擋塊"); //"Endstops" // Max length 8 characters
+ PROGMEM Language_Str MSG_MAIN = _UxGT("主選單"); //"Main"
+ PROGMEM Language_Str MSG_AUTOSTART = _UxGT("自動開始"); //"Autostart"
+ PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("關閉步進馬達"); //"Disable steppers"
+ PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("除錯選單"); // "Debug Menu"
+ PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("進度條測試"); // "Progress Bar Test"
+ PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("自動回原點"); //"Auto home"
+ PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("回X原點"); //"Home X"
+ PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("回Y原點"); //"Home Y"
+ PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("回Z原點"); //"Home Z"
+ PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("平台調平XYZ歸原點"); //"Homing XYZ"
+ PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("單擊開始熱床調平"); //"Click to Begin"
+ PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("下個熱床調平點"); //"Next Point"
+ PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("完成熱床調平"); //"Leveling Done!"
+ PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("淡出高度"); // "Fade Height"
+ PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("設置原點偏移"); //"Set home offsets"
+ PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("偏移已啟用"); //"Offsets applied"
+ PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("設置原點"); //"Set origin"
+ PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("預熱 ") PREHEAT_1_LABEL; //"Preheat PREHEAT_1_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_1_H0 = _UxGT("預熱 ") PREHEAT_1_LABEL " " LCD_STR_N0; //"Preheat PREHEAT_1_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_1_H1 = _UxGT("預熱 ") PREHEAT_1_LABEL " " LCD_STR_N1; //"Preheat PREHEAT_1_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_1_H2 = _UxGT("預熱 ") PREHEAT_1_LABEL " " LCD_STR_N2; //"Preheat PREHEAT_1_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_1_H3 = _UxGT("預熱 ") PREHEAT_1_LABEL " " LCD_STR_N3; //"Preheat PREHEAT_1_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_1_H4 = _UxGT("預熱 ") PREHEAT_1_LABEL " " LCD_STR_N4; //"Preheat PREHEAT_1_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_1_H5 = _UxGT("預熱 ") PREHEAT_1_LABEL " " LCD_STR_N5; //"Preheat PREHEAT_1_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴"); //MSG_PREHEAT_1 " "
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E0 = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴 ") LCD_STR_N0; //MSG_PREHEAT_1 " "
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E1 = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴 ") LCD_STR_N1; //MSG_PREHEAT_1 " "
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E2 = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴 ") LCD_STR_N2; //MSG_PREHEAT_1 " "
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E3 = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴 ") LCD_STR_N3; //MSG_PREHEAT_1 " "
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E4 = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴 ") LCD_STR_N4; //MSG_PREHEAT_1 " "
+ PROGMEM Language_Str MSG_PREHEAT_1_END_E5 = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴 ") LCD_STR_N5; //MSG_PREHEAT_1 " "
+ PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 全部"); //MSG_PREHEAT_1 " All"
+ PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 熱床"); //MSG_PREHEAT_1 " Bed"
+ PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 設置"); //MSG_PREHEAT_1 " conf"
+ PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("預熱 ") PREHEAT_2_LABEL; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_2_H0 = _UxGT("預熱 ") PREHEAT_2_LABEL " " LCD_STR_N0; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_2_H1 = _UxGT("預熱 ") PREHEAT_2_LABEL " " LCD_STR_N1; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_2_H2 = _UxGT("預熱 ") PREHEAT_2_LABEL " " LCD_STR_N2; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_2_H3 = _UxGT("預熱 ") PREHEAT_2_LABEL " " LCD_STR_N3; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_2_H4 = _UxGT("預熱 ") PREHEAT_2_LABEL " " LCD_STR_N4; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_2_H5 = _UxGT("預熱 ") PREHEAT_2_LABEL " " LCD_STR_N5; //"Preheat PREHEAT_2_LABEL"
+ PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 噴嘴"); //MSG_PREHEAT_2 " "
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E0 = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 噴嘴 ") LCD_STR_N0; //MSG_PREHEAT_2 " "
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E1 = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 噴嘴 ") LCD_STR_N1; //MSG_PREHEAT_2 " "
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E2 = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 噴嘴 ") LCD_STR_N2; //MSG_PREHEAT_2 " "
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E3 = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 噴嘴 ") LCD_STR_N3; //MSG_PREHEAT_2 " "
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E4 = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 噴嘴 ") LCD_STR_N4; //MSG_PREHEAT_2 " "
+ PROGMEM Language_Str MSG_PREHEAT_2_END_E5 = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 噴嘴 ") LCD_STR_N5; //MSG_PREHEAT_2 " "
+ PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 全部"); //MSG_PREHEAT_2 " All"
+ PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 熱床"); //MSG_PREHEAT_2 " Bed"
+ PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("預熱 ") PREHEAT_2_LABEL _UxGT(" 設置"); //MSG_PREHEAT_2 " conf"
+ PROGMEM Language_Str MSG_COOLDOWN = _UxGT("降溫"); //"Cooldown"
+ PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("電源打開"); //"Switch power on"
+ PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("電源關閉"); //"Switch power off"
+ PROGMEM Language_Str MSG_EXTRUDE = _UxGT("擠出"); //"Extrude"
+ PROGMEM Language_Str MSG_RETRACT = _UxGT("回縮"); //"Retract"
+ PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("移動軸"); //"Move axis"
+ PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("調平熱床"); //"Bed leveling"
+ PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("調平熱床"); //"Level bed"
+ PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("調平邊角"); // "Level corners"
-#define MSG_NEXT_CORNER _UxGT("下个邊角") // "Next corner"
-#define MSG_EDIT_MESH _UxGT("編輯網格") // "Edit Mesh"
-#define MSG_EDITING_STOPPED _UxGT("網格編輯已停止") // "Mesh Editing Stopped"
-#define MSG_USER_MENU _UxGT("客制命令") // "Custom Commands"
+ PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("下個邊角"); // "Next corner"
+ PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("編輯網格"); // "Edit Mesh"
+ PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("網格編輯已停止"); // "Mesh Editing Stopped"
+ PROGMEM Language_Str MSG_USER_MENU = _UxGT("客制命令"); // "Custom Commands"
-#define MSG_UBL_DOING_G29 _UxGT("执行G29") // "Doing G29"
-#define MSG_UBL_TOOLS _UxGT("UBL工具") // "UBL Tools"
-#define MSG_UBL_LEVEL_BED _UxGT("統一熱床調平(UBL)") // "Unified Bed Leveling"
-#define MSG_UBL_MANUAL_MESH _UxGT("手工建网") // "Manually Build Mesh"
-#define MSG_UBL_BC_INSERT _UxGT("放置墊片並測量") // "Place shim & measure"
-#define MSG_UBL_BC_INSERT2 _UxGT("測量") // "Measure"
-#define MSG_UBL_BC_REMOVE _UxGT("移除並測量熱床") // "Remove & measure bed"
-#define MSG_UBL_MOVING_TO_NEXT _UxGT("移動到下一個") // "Moving to next"
-#define MSG_UBL_ACTIVATE_MESH _UxGT("激活UBL") // "Activate UBL"
-#define MSG_UBL_DEACTIVATE_MESH _UxGT("關閉UBL") // "Deactivate UBL"
-#define MSG_UBL_SET_TEMP_BED _UxGT("設置熱床溫度") // "Bed Temp"
-#define MSG_UBL_SET_TEMP_HOTEND _UxGT("熱端溫度") // "Hotend Temp"
-#define MSG_UBL_MESH_EDIT _UxGT("網格編輯") // "Mesh Edit"
-#define MSG_UBL_EDIT_CUSTOM_MESH _UxGT("編輯客戶網格") // "Edit Custom Mesh"
-#define MSG_UBL_FINE_TUNE_MESH _UxGT("細調網格") // "Fine Tuning Mesh"
-#define MSG_UBL_DONE_EDITING_MESH _UxGT("完成編輯網格") // "Done Editing Mesh"
-#define MSG_UBL_BUILD_CUSTOM_MESH _UxGT("創設客戶網格") // "Build Custom Mesh"
-#define MSG_UBL_BUILD_MESH_MENU _UxGT("創設網格") // "Build Mesh"
-#define MSG_UBL_BUILD_MESH_M1 _UxGT("創設" PREHEAT_1_LABEL "網格") // "Build PREHEAT_1_LABEL Mesh"
-#define MSG_UBL_BUILD_MESH_M2 _UxGT("創設" PREHEAT_2_LABEL "網格") // "Build PREHEAT_2_LABEL Mesh"
-#define MSG_UBL_BUILD_COLD_MESH _UxGT("創設冷網格") // "Build Cold Mesh"
-#define MSG_UBL_MESH_HEIGHT_ADJUST _UxGT("調整網格高度") // "Adjust Mesh Height"
-#define MSG_UBL_MESH_HEIGHT_AMOUNT _UxGT("高度合計") // "Height Amount"
-#define MSG_UBL_VALIDATE_MESH_MENU _UxGT("批准網格") // "Validate Mesh"
-#define MSG_UBL_VALIDATE_MESH_M1 _UxGT("批准" PREHEAT_1_LABEL "網格") // "Validate PREHEAT_1_LABEL Mesh"
-#define MSG_UBL_VALIDATE_MESH_M2 _UxGT("批准" PREHEAT_2_LABEL "網格") // "Validate PREHEAT_2_LABEL Mesh"
-#define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("批准客戶網格") // "Validate Custom Mesh"
-#define MSG_UBL_CONTINUE_MESH _UxGT("繼續熱床網格") // "Continue Bed Mesh"
-#define MSG_UBL_MESH_LEVELING _UxGT("網格調平") // "Mesh Leveling"
-#define MSG_UBL_3POINT_MESH_LEVELING _UxGT("三點調平") // "3-Point Leveling"
-#define MSG_UBL_GRID_MESH_LEVELING _UxGT("格子網格調平") // "Grid Mesh Leveling"
-#define MSG_UBL_MESH_LEVEL _UxGT("調平網格") // "Level Mesh"
-#define MSG_UBL_SIDE_POINTS _UxGT("邊點") // "Side Points"
-#define MSG_UBL_MAP_TYPE _UxGT("圖類型") // "Map Type"
-#define MSG_UBL_OUTPUT_MAP _UxGT("輸出網格圖") // "Output Mesh Map"
-#define MSG_UBL_OUTPUT_MAP_HOST _UxGT("輸出到主機") // "Output for Host"
-#define MSG_UBL_OUTPUT_MAP_CSV _UxGT("輸出到CSV") // "Output for CSV"
-#define MSG_UBL_OUTPUT_MAP_BACKUP _UxGT("輸出到備份") // "Off Printer Backup"
-#define MSG_UBL_INFO_UBL _UxGT("輸出UBL信息") // "Output UBL Info"
-#define MSG_UBL_FILLIN_AMOUNT _UxGT("填充合計") // "Fill-in Amount"
-#define MSG_UBL_MANUAL_FILLIN _UxGT("手工填充") // "Manual Fill-in"
-#define MSG_UBL_SMART_FILLIN _UxGT("聰明填充") // "Smart Fill-in"
-#define MSG_UBL_FILLIN_MESH _UxGT("填充網格") // "Fill-in Mesh"
-#define MSG_UBL_INVALIDATE_ALL _UxGT("作廢所有的") // "Invalidate All"
-#define MSG_UBL_INVALIDATE_CLOSEST _UxGT("作廢最近的") // "Invalidate Closest"
-#define MSG_UBL_FINE_TUNE_ALL _UxGT("細調所有的") // "Fine Tune All"
-#define MSG_UBL_FINE_TUNE_CLOSEST _UxGT("細調最近的") // "Fine Tune Closest"
-#define MSG_UBL_STORAGE_MESH_MENU _UxGT("網格存儲") // "Mesh Storage"
-#define MSG_UBL_STORAGE_SLOT _UxGT("存儲槽") // "Memory Slot"
-#define MSG_UBL_LOAD_MESH _UxGT("裝載熱床網格") // "Load Bed Mesh"
-#define MSG_UBL_SAVE_MESH _UxGT("保存熱床網格") // "Save Bed Mesh"
-#define MSG_MESH_LOADED _UxGT("網格 %i 已裝載") // "Mesh %i loaded"
-#define MSG_MESH_SAVED _UxGT("網格 %i 已保存") // "Mesh %i saved"
-#define MSG_UBL_NO_STORAGE _UxGT("沒有存儲") // "No storage"
-#define MSG_UBL_SAVE_ERROR _UxGT("錯誤: UBL保存") // "Err: UBL Save"
-#define MSG_UBL_RESTORE_ERROR _UxGT("錯誤: UBL還原") // "Err: UBL Restore"
-#define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Z偏移已停止") // "Z-Offset Stopped"
-#define MSG_UBL_STEP_BY_STEP_MENU _UxGT("一步步UBL") // "Step-By-Step UBL"
+ PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("執行G29"); // "Doing G29"
+ PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL工具"); // "UBL Tools"
+ PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("統一熱床調平(UBL)"); // "Unified Bed Leveling"
+ PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("手工建網"); // "Manually Build Mesh"
+ PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("放置墊片並測量"); // "Place shim & measure"
+ PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("測量"); // "Measure"
+ PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("移除並測量熱床"); // "Remove & measure bed"
+ PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("移動到下一個"); // "Moving to next"
+ PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("啟動UBL"); // "Activate UBL"
+ PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("關閉UBL"); // "Deactivate UBL"
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("設置熱床溫度"); // "Bed Temp"
+ PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("熱端溫度"); // "Hotend Temp"
+ PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("網格編輯"); // "Mesh Edit"
+ PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("編輯客戶網格"); // "Edit Custom Mesh"
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("細調網格"); // "Fine Tuning Mesh"
+ PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("完成編輯網格"); // "Done Editing Mesh"
+ PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("創設客戶網格"); // "Build Custom Mesh"
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("創設網格"); // "Build Mesh"
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = _UxGT("創設 ") PREHEAT_1_LABEL _UxGT(" 網格"); // "Build PREHEAT_1_LABEL Mesh"
+ PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("創設 ") PREHEAT_2_LABEL _UxGT(" 網格"); // "Build PREHEAT_2_LABEL Mesh"
+ PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("創設冷網格"); // "Build Cold Mesh"
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("調整網格高度"); // "Adjust Mesh Height"
+ PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("高度合計"); // "Height Amount"
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("批准網格"); // "Validate Mesh"
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("批准 ") PREHEAT_1_LABEL _UxGT(" 網格"); // "Validate PREHEAT_1_LABEL Mesh"
+ PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("批准 ") PREHEAT_2_LABEL _UxGT(" 網格"); // "Validate PREHEAT_2_LABEL Mesh"
+ PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("批准客戶網格"); // "Validate Custom Mesh"
+ PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("繼續熱床網格"); // "Continue Bed Mesh"
+ PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("網格調平"); // "Mesh Leveling"
+ PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("三點調平"); // "3-Point Leveling"
+ PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("格子網格調平"); // "Grid Mesh Leveling"
+ PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("調平網格"); // "Level Mesh"
+ PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("邊點"); // "Side Points"
+ PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("圖類型"); // "Map Type"
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("輸出網格圖"); // "Output Mesh Map"
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("輸出到主機"); // "Output for Host"
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("輸出到CSV"); // "Output for CSV"
+ PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("輸出到備份"); // "Off Printer Backup"
+ PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("輸出UBL信息"); // "Output UBL Info"
+ PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("填充合計"); // "Fill-in Amount"
+ PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("手工填充"); // "Manual Fill-in"
+ PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("聰明填充"); // "Smart Fill-in"
+ PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("填充網格"); // "Fill-in Mesh"
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("作廢所有的"); // "Invalidate All"
+ PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("作廢最近的"); // "Invalidate Closest"
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("細調所有的"); // "Fine Tune All"
+ PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("細調最近的"); // "Fine Tune Closest"
+ PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("網格存儲"); // "Mesh Storage"
+ PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("存儲槽"); // "Memory Slot"
+ PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("裝載熱床網格"); // "Load Bed Mesh"
+ PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("保存熱床網格"); // "Save Bed Mesh"
+ PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("M117 網格 %i 已裝載"); // "Mesh %i loaded"
+ PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("M117 網格 %i 已保存"); // "Mesh %i saved"
+ PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("沒有存儲"); // "No storage"
+ PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("錯誤: UBL保存"); // "Err: UBL Save"
+ PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("錯誤: UBL還原"); // "Err: UBL Restore"
+ PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z偏移已停止"); // "Z-Offset Stopped"
+ PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("一步步UBL"); // "Step-By-Step UBL"
+ PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. 創設冷網格");
+ PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2. 聰明填充");
+ PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. 批准網格");
+ PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. 細調所有的");
+ PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. 批准網格");
+ PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. 細調所有的");
+ PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7. 保存熱床網格");
-#define MSG_LED_CONTROL _UxGT("灯管控制") // "LED Control")
-#define MSG_LEDS _UxGT("灯") // "Lights")
-#define MSG_LED_PRESETS _UxGT("灯预置") // "Light Presets")
-#define MSG_SET_LEDS_RED _UxGT("红") // "Red")
-#define MSG_SET_LEDS_ORANGE _UxGT("橙") // "Orange")
-#define MSG_SET_LEDS_YELLOW _UxGT("黄") // "Yellow")
-#define MSG_SET_LEDS_GREEN _UxGT("绿") // "Green")
-#define MSG_SET_LEDS_BLUE _UxGT("蓝") // "Blue")
-#define MSG_SET_LEDS_INDIGO _UxGT("青") // "Indigo")
-#define MSG_SET_LEDS_VIOLET _UxGT("紫") // "Violet")
-#define MSG_SET_LEDS_WHITE _UxGT("白") // "White")
-#define MSG_SET_LEDS_DEFAULT _UxGT("缺省") // "Default")
-#define MSG_CUSTOM_LEDS _UxGT("定制灯") // "Custom Lights")
-#define MSG_INTENSITY_R _UxGT("红飽和度") // "Red Intensity")
-#define MSG_INTENSITY_G _UxGT("绿飽和度") // "Green Intensity")
-#define MSG_INTENSITY_B _UxGT("蓝飽和度") // "Blue Intensity")
-#define MSG_INTENSITY_W _UxGT("白飽和度") // "White Intensity")
-#define MSG_LED_BRIGHTNESS _UxGT("亮度") // "Brightness")
+ PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("燈管控制"); // "LED Control")
+ PROGMEM Language_Str MSG_LEDS = _UxGT("燈"); // "Lights")
+ PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("燈預置"); // "Light Presets")
+ PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("红"); // "Red")
+ PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("橙"); // "Orange")
+ PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("黃"); // "Yellow")
+ PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("綠"); // "Green")
+ PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("藍"); // "Blue")
+ PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("青"); // "Indigo")
+ PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("紫"); // "Violet")
+ PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("白"); // "White")
+ PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("缺省"); // "Default")
+ PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("定制燈"); // "Custom Lights")
+ PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("紅飽和度"); // "Red Intensity")
+ PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("綠飽和度"); // "Green Intensity")
+ PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("藍飽和度"); // "Blue Intensity")
+ PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("白飽和度"); // "White Intensity")
+ PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("亮度"); // "Brightness")
-#define MSG_MOVING _UxGT("移动 ...") // "Moving...")
-#define MSG_FREE_XY _UxGT("释放 XY") // "Free XY")
-#define MSG_MOVE_X _UxGT("移動X") //"Move X"
-#define MSG_MOVE_Y _UxGT("移動Y") //"Move Y"
-#define MSG_MOVE_Z _UxGT("移動Z") //"Move Z"
-#define MSG_MOVE_E _UxGT("擠出機") //"Extruder"
-#define MSG_MOVE_Z_DIST _UxGT("移動 %s mm") //"Move 0.025mm"
-#define MSG_MOVE_01MM _UxGT("移動 0.1 mm") //"Move 0.1mm"
-#define MSG_MOVE_1MM _UxGT("移動 1 mm") //"Move 1mm"
-#define MSG_MOVE_10MM _UxGT("移動 10 mm") //"Move 10mm"
-#define MSG_SPEED _UxGT("速率") //"Speed"
-#define MSG_BED_Z _UxGT("熱床Z") //"Bed Z"
-#define MSG_NOZZLE _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 噴嘴") //"Nozzle" 噴嘴
-#define MSG_BED _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 熱床") //"Bed"
-#define MSG_FAN_SPEED _UxGT("風扇速率") //"Fan speed"
-#define MSG_EXTRA_FAN_SPEED _UxGT("額外風扇速率") // "Extra fan speed"
-#define MSG_FLOW _UxGT("擠出速率") //"Flow"
-#define MSG_CONTROL _UxGT("控制") //"Control"
-#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 最小") //" " LCD_STR_THERMOMETER " Min"
-#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 最大") //" " LCD_STR_THERMOMETER " Max"
-#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" 系數") //" " LCD_STR_THERMOMETER " Fact"
-#define MSG_AUTOTEMP _UxGT("自動控溫") //"Autotemp"
-#define MSG_LCD_ON _UxGT("開") //"On"
-#define MSG_LCD_OFF _UxGT("關") //"Off"
-#define MSG_PID_P _UxGT("PID-P") //"PID-P"
-#define MSG_PID_I _UxGT("PID-I") //"PID-I"
-#define MSG_PID_D _UxGT("PID-D") //"PID-D"
-#define MSG_PID_C _UxGT("PID-C") //"PID-C"
-#define MSG_SELECT _UxGT("選擇") //"Select"
-#define MSG_ACC _UxGT("加速度") //"Accel" acceleration
-#define MSG_JERK _UxGT("抖動速率") //"Jerk"
-#if IS_KINEMATIC
- #define MSG_VA_JERK _UxGT("A軸抖動速率") //"Va-jerk"
- #define MSG_VB_JERK _UxGT("B軸抖動速率") //"Vb-jerk"
- #define MSG_VC_JERK _UxGT("C軸抖動速率") //"Vc-jerk"
-#else
- #define MSG_VA_JERK _UxGT("X軸抖動速率") //"Vx-jerk"
- #define MSG_VB_JERK _UxGT("Y軸抖動速率") //"Vy-jerk"
- #define MSG_VC_JERK _UxGT("Z軸抖動速率") //"Vz-jerk"
-#endif
-#define MSG_VE_JERK _UxGT("擠出機抖動速率") //"Ve-jerk"
-#define MSG_VELOCITY _UxGT("速度") // "Velocity"
-#define MSG_VMAX _UxGT("最大進料速率") //"Vmax " max_feedrate_mm_s
-#define MSG_VMIN _UxGT("最小進料速率") //"Vmin" min_feedrate_mm_s
-#define MSG_VTRAV_MIN _UxGT("最小移動速率") //"VTrav min" min_travel_feedrate_mm_s, (target) speed of the move
-#define MSG_ACCELERATION _UxGT("加速度") // "Acceleration"
-#define MSG_AMAX _UxGT("最大列印加速度") //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
-#define MSG_A_RETRACT _UxGT("回縮加速度") //"A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts
-#define MSG_A_TRAVEL _UxGT("非列印移動加速度") //"A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
-#define MSG_STEPS_PER_MM _UxGT("軸步數/mm") //"Steps/mm" axis_steps_per_mm, axis steps-per-unit G92
-#if IS_KINEMATIC
- #define MSG_ASTEPS _UxGT("A軸步數/mm") //"Asteps/mm" axis_steps_per_mm, axis steps-per-unit G92
- #define MSG_BSTEPS _UxGT("B軸步數/mm") //"Bsteps/mm"
- #define MSG_CSTEPS _UxGT("C軸步數/mm") //"Csteps/mm"
-#else
- #define MSG_ASTEPS _UxGT("X軸步數/mm") //"Xsteps/mm" axis_steps_per_mm, axis steps-per-unit G92
- #define MSG_BSTEPS _UxGT("Y軸步數/mm") //"Ysteps/mm"
- #define MSG_CSTEPS _UxGT("Z軸步數/mm") //"Zsteps/mm"
-#endif
-#define MSG_ESTEPS _UxGT("擠出機步數/mm") //"Esteps/mm"
-#define MSG_E1STEPS _UxGT("擠出機1步數/mm") //"E1steps/mm"
-#define MSG_E2STEPS _UxGT("擠出機2步數/mm") //"E2steps/mm"
-#define MSG_E3STEPS _UxGT("擠出機3步數/mm") //"E3steps/mm"
-#define MSG_E4STEPS _UxGT("擠出機4步數/mm") //"E4steps/mm"
-#define MSG_E5STEPS _UxGT("擠出機5步數/mm") //"E5steps/mm"
-#define MSG_E6STEPS _UxGT("擠出機6步數/mm") //"E6steps/mm"
-#define MSG_TEMPERATURE _UxGT("溫度") //"Temperature"
-#define MSG_MOTION _UxGT("運作") //"Motion"
-#define MSG_FILAMENT _UxGT("絲料測容") //"Filament" menu_control_volumetric
-#define MSG_VOLUMETRIC_ENABLED _UxGT("測容積mm³") //"E in mm3" volumetric_enabled
-#define MSG_FILAMENT_DIAM _UxGT("絲料直徑") //"Fil. Dia."
-#define MSG_FILAMENT_UNLOAD _UxGT("卸載 mm") // "Unload mm"
-#define MSG_FILAMENT_LOAD _UxGT("装載 mm") // "Load mm"
-#define MSG_ADVANCE_K _UxGT("Advance K") // "Advance K"
-#define MSG_CONTRAST _UxGT("LCD對比度") //"LCD contrast"
-#define MSG_STORE_EEPROM _UxGT("保存設置") //"Store memory"
-#define MSG_LOAD_EEPROM _UxGT("載入設置") //"Load memory"
-#define MSG_RESTORE_FAILSAFE _UxGT("恢復安全值") //"Restore failsafe"
-#define MSG_INIT_EEPROM _UxGT("初始化設置") // "Initialize EEPROM"
-#define MSG_REFRESH _UxGT("刷新") //"Refresh"
-#define MSG_WATCH _UxGT("資訊界面") //"Info screen"
-#define MSG_PREPARE _UxGT("準備") //"Prepare"
-#define MSG_TUNE _UxGT("調整") //"Tune"
-#define MSG_PAUSE_PRINT _UxGT("暫停列印") //"Pause print"
-#define MSG_RESUME_PRINT _UxGT("恢復列印") //"Resume print"
-#define MSG_STOP_PRINT _UxGT("停止列印") //"Stop print"
-#define MSG_MEDIA_MENU _UxGT("從記憶卡上列印") //"Print from SD"
-#define MSG_NO_MEDIA _UxGT("無記憶卡") //"No SD card"
-#define MSG_DWELL _UxGT("休眠 ...") //"Sleep..."
-#define MSG_USERWAIT _UxGT("點擊繼續 ...") //"Click to resume..."
-#define MSG_PRINT_PAUSED _UxGT("列印已暫停") // "Print paused"
-#define MSG_PRINT_ABORTED _UxGT("已取消列印") //"Print aborted"
-#define MSG_NO_MOVE _UxGT("無移動") //"No move."
-#define MSG_KILLED _UxGT("已砍掉") //"KILLED. "
-#define MSG_STOPPED _UxGT("已停止") //"STOPPED. "
-#define MSG_CONTROL_RETRACT _UxGT("回縮長度mm") //"Retract mm" retract_length, retract length (positive mm)
-#define MSG_CONTROL_RETRACT_SWAP _UxGT("換手回抽長度mm") //"Swap Re.mm" swap_retract_length, swap retract length (positive mm), for extruder change
-#define MSG_CONTROL_RETRACTF _UxGT("回縮速率mm/s") //"Retract V" retract_feedrate_mm_s, feedrate for retracting (mm/s)
-#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Hop mm") //"Hop mm" retract_zraise, retract Z-lift
-#define MSG_CONTROL_RETRACT_RECOVER _UxGT("回縮恢復長度mm") //"UnRet +mm" retract_recover_extra, additional recover length (mm, added to retract length when recovering)
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("換手回縮恢復長度mm") //"S UnRet+mm" swap_retract_recover_extra, additional swap recover length (mm, added to retract length when recovering from extruder change)
-#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("回縮恢復後進料速率mm/s") //"UnRet V" retract_recover_feedrate_mm_s, feedrate for recovering from retraction (mm/s)
-#define MSG_CONTROL_RETRACT_RECOVER_SWAPF _UxGT("S UnRet V") // "S UnRet V"
-#define MSG_AUTORETRACT _UxGT("自動回縮") //"AutoRetr." autoretract_enabled,
-#define MSG_FILAMENTCHANGE _UxGT("更換絲料") //"Change filament"
-#define MSG_FILAMENTLOAD _UxGT("裝載絲料") // "Load filament"
-#define MSG_FILAMENTUNLOAD _UxGT("卸載絲料") // "Unload filament"
-#define MSG_FILAMENTUNLOAD_ALL _UxGT("卸載全部") // "Unload All"
-#define MSG_INIT_MEDIA _UxGT("初始化記憶卡") //"Init. SD card"
-#define MSG_CHANGE_MEDIA _UxGT("更換記憶卡") //"Change SD card"
-#define MSG_ZPROBE_OUT _UxGT("Z探針在熱床之外") //"Z probe out. bed" Z probe is not within the physical limits
-#define MSG_SKEW_FACTOR _UxGT("偏斜因數") // "Skew Factor"
-#define MSG_BLTOUCH _UxGT("BLTouch") // "BLTouch"
-#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch 自檢") // "BLTouch Self-Test"
-#define MSG_BLTOUCH_RESET _UxGT("重置BLTouch") // "Reset BLTouch"
-#define MSG_BLTOUCH_DEPLOY _UxGT("部署BLTouch") // "Deploy BLTouch"
-#define MSG_BLTOUCH_STOW _UxGT("裝載BLTouch") // "Stow BLTouch"
-#define MSG_HOME_FIRST _UxGT("歸位 %s%s%s 先") //"Home ... first"
-#define MSG_ZPROBE_ZOFFSET _UxGT("Z偏移") //"Z Offset"
-#define MSG_BABYSTEP_X _UxGT("微量調整X軸") //"Babystep X" lcd_babystep_x, Babystepping enables the user to control the axis in tiny amounts
-#define MSG_BABYSTEP_Y _UxGT("微量調整Y軸") //"Babystep Y"
-#define MSG_BABYSTEP_Z _UxGT("微量調整Z軸") //"Babystep Z"
-#define MSG_ENDSTOP_ABORT _UxGT("擋塊終止") //"Endstop abort"
-#define MSG_HEATING_FAILED_LCD _UxGT("加熱失敗") //"Heating failed"
-#define MSG_ERR_REDUNDANT_TEMP _UxGT("錯誤:REDUNDANT TEMP") //"Err: REDUNDANT TEMP"
-#define MSG_THERMAL_RUNAWAY _UxGT("溫控失控") //"THERMAL RUNAWAY"
-#define MSG_ERR_MAXTEMP _UxGT("錯誤:最高溫度") //"Err: MAXTEMP"
-#define MSG_ERR_MINTEMP _UxGT("錯誤:最低溫度") //"Err: MINTEMP"
-#define MSG_ERR_MAXTEMP_BED _UxGT("錯誤:最高熱床溫度") //"Err: MAXTEMP BED"
-#define MSG_ERR_MINTEMP_BED _UxGT("錯誤:最低熱床溫度") //"Err: MINTEMP BED"
-#define MSG_ERR_Z_HOMING _UxGT("歸位 XY 先") //"Home XY First"
-#define MSG_HALTED _UxGT("印表機停機") //"PRINTER HALTED"
-#define MSG_PLEASE_RESET _UxGT("請重置") //"Please reset"
-#define MSG_SHORT_DAY _UxGT("天") //"d" // One character only
-#define MSG_SHORT_HOUR _UxGT("時") //"h" // One character only
-#define MSG_SHORT_MINUTE _UxGT("分") //"m" // One character only
-#define MSG_HEATING _UxGT("加熱中 ...") //"Heating..."
-#define MSG_BED_HEATING _UxGT("加熱熱床中 ...") //"Bed Heating..."
-#define MSG_DELTA_CALIBRATE _UxGT("⊿校準") //"Delta Calibration"
-#define MSG_DELTA_CALIBRATE_X _UxGT("⊿校準X") //"Calibrate X"
-#define MSG_DELTA_CALIBRATE_Y _UxGT("⊿校準Y") //"Calibrate Y"
-#define MSG_DELTA_CALIBRATE_Z _UxGT("⊿校準Z") //"Calibrate Z"
-#define MSG_DELTA_CALIBRATE_CENTER _UxGT("⊿校準中心") //"Calibrate Center"
-#define MSG_DELTA_SETTINGS _UxGT("⊿設置") // "Delta Settings"
-#define MSG_DELTA_AUTO_CALIBRATE _UxGT("⊿自動校準") // "Auto Calibration"
-#define MSG_DELTA_HEIGHT_CALIBRATE _UxGT("設置⊿高度") // "Set Delta Height"
-#define MSG_DELTA_DIAG_ROD _UxGT("⊿斜柱") // "Diag Rod"
-#define MSG_DELTA_HEIGHT _UxGT("⊿高度") // "Height"
-#define MSG_DELTA_RADIUS _UxGT("⊿半徑") // "Radius"
-#define MSG_INFO_MENU _UxGT("關於印表機") //"About Printer"
-#define MSG_INFO_PRINTER_MENU _UxGT("印表機訊息") //"Printer Info"
-#define MSG_3POINT_LEVELING _UxGT("三點調平") // "3-Point Leveling"
-#define MSG_LINEAR_LEVELING _UxGT("線性調平") // "Linear Leveling"
-#define MSG_BILINEAR_LEVELING _UxGT("雙線性調平") // "Bilinear Leveling"
-#define MSG_UBL_LEVELING _UxGT("統一熱床調平(UBL)") // "Unified Bed Leveling"
-#define MSG_MESH_LEVELING _UxGT("網格調平") // "Mesh Leveling"
-#define MSG_INFO_STATS_MENU _UxGT("印表機統計") //"Printer Stats"
-#define MSG_INFO_BOARD_MENU _UxGT("主板訊息") //"Board Info"
-#define MSG_INFO_THERMISTOR_MENU _UxGT("溫度計") //"Thermistors"
-#define MSG_INFO_EXTRUDERS _UxGT("擠出機") //"Extruders"
-#define MSG_INFO_BAUDRATE _UxGT("傳輸率") //"Baud"
-#define MSG_INFO_PROTOCOL _UxGT("協議") //"Protocol"
-#define MSG_CASE_LIGHT _UxGT("外殼燈") // "Case light"
-#define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("燈亮度") // "Light BRIGHTNESS"
+ PROGMEM Language_Str MSG_MOVING = _UxGT("移動 ..."); // "Moving...")
+ PROGMEM Language_Str MSG_FREE_XY = _UxGT("釋放 XY"); // "Free XY")
+ PROGMEM Language_Str MSG_MOVE_X = _UxGT("移動X"); //"Move X"
+ PROGMEM Language_Str MSG_MOVE_Y = _UxGT("移動Y"); //"Move Y"
+ PROGMEM Language_Str MSG_MOVE_Z = _UxGT("移動Z"); //"Move Z"
+ PROGMEM Language_Str MSG_MOVE_E = _UxGT("擠出機"); //"Extruder"
+ PROGMEM Language_Str MSG_MOVE_E0 = _UxGT("擠出機 ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_MOVE_E1 = _UxGT("擠出機 ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_MOVE_E2 = _UxGT("擠出機 ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_MOVE_E3 = _UxGT("擠出機 ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_MOVE_E4 = _UxGT("擠出機 ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_MOVE_E5 = _UxGT("擠出機 ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_MOVE_Z_DIST = _UxGT("移動 %s mm"); //"Move 0.025mm"
+ PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("移動 0.1 mm"); //"Move 0.1mm"
+ PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("移動 1 mm"); //"Move 1mm"
+ PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("移動 10 mm"); //"Move 10mm"
+ PROGMEM Language_Str MSG_SPEED = _UxGT("速率"); //"Speed"
+ PROGMEM Language_Str MSG_BED_Z = _UxGT("熱床Z"); //"Bed Z"
+ PROGMEM Language_Str MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴"); //"Nozzle" 噴嘴
+ PROGMEM Language_Str MSG_NOZZLE_0 = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ") LCD_STR_N0;
+ PROGMEM Language_Str MSG_NOZZLE_1 = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ") LCD_STR_N1;
+ PROGMEM Language_Str MSG_NOZZLE_2 = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ") LCD_STR_N2;
+ PROGMEM Language_Str MSG_NOZZLE_3 = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ") LCD_STR_N3;
+ PROGMEM Language_Str MSG_NOZZLE_4 = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ") LCD_STR_N4;
+ PROGMEM Language_Str MSG_NOZZLE_5 = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ") LCD_STR_N5;
+ PROGMEM Language_Str MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" 熱床"); //"Bed"
+ PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("風扇速率"); //"Fan speed"
+ PROGMEM Language_Str MSG_FAN_SPEED_1 = _UxGT("風扇速率 1");
+ PROGMEM Language_Str MSG_FAN_SPEED_2 = _UxGT("風扇速率 2");
+ PROGMEM Language_Str MSG_FAN_SPEED_3 = _UxGT("風扇速率 3");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("額外風扇速率"); // "Extra fan speed"
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_1 = _UxGT("額外風扇速率 1");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_2 = _UxGT("額外風扇速率 2");
+ PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_3 = _UxGT("額外風扇速率 3");
+ PROGMEM Language_Str MSG_FLOW = _UxGT("擠出速率");
+ PROGMEM Language_Str MSG_FLOW_0 = _UxGT("擠出速率 ") LCD_STR_N0; //"Flow"
+ PROGMEM Language_Str MSG_FLOW_1 = _UxGT("擠出速率 ") LCD_STR_N1; //"Flow"
+ PROGMEM Language_Str MSG_FLOW_2 = _UxGT("擠出速率 ") LCD_STR_N2; //"Flow"
+ PROGMEM Language_Str MSG_FLOW_3 = _UxGT("擠出速率 ") LCD_STR_N3; //"Flow"
+ PROGMEM Language_Str MSG_FLOW_4 = _UxGT("擠出速率 ") LCD_STR_N4; //"Flow"
+ PROGMEM Language_Str MSG_FLOW_5 = _UxGT("擠出速率 ") LCD_STR_N5; //"Flow"
+ PROGMEM Language_Str MSG_CONTROL = _UxGT("控制"); //"Control"
+ PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" 最小"); //" " LCD_STR_THERMOMETER " Min"
+ PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" 最大"); //" " LCD_STR_THERMOMETER " Max"
+ PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" 系數"); //" " LCD_STR_THERMOMETER " Fact"
+ PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("自動控溫"); //"Autotemp"
+ PROGMEM Language_Str MSG_LCD_ON = _UxGT("開"); //"On"
+ PROGMEM Language_Str MSG_LCD_OFF = _UxGT("關"); //"Off"
+ PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P"); //"PID-P"
+ PROGMEM Language_Str MSG_PID_P_E0 = _UxGT("PID-P ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_P_E1 = _UxGT("PID-P ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_P_E2 = _UxGT("PID-P ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_P_E3 = _UxGT("PID-P ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_P_E4 = _UxGT("PID-P ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_P_E5 = _UxGT("PID-P ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I"); //"PID-I"
+ PROGMEM Language_Str MSG_PID_I_E0 = _UxGT("PID-I ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_I_E1 = _UxGT("PID-I ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_I_E2 = _UxGT("PID-I ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_I_E3 = _UxGT("PID-I ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_I_E4 = _UxGT("PID-I ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_I_E5 = _UxGT("PID-I ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D"); //"PID-D"
+ PROGMEM Language_Str MSG_PID_D_E0 = _UxGT("PID-D ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_D_E1 = _UxGT("PID-D ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_D_E2 = _UxGT("PID-D ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_D_E3 = _UxGT("PID-D ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_D_E4 = _UxGT("PID-D ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_D_E5 = _UxGT("PID-D ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C"); //"PID-C"
+ PROGMEM Language_Str MSG_PID_C_E0 = _UxGT("PID-C ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_PID_C_E1 = _UxGT("PID-C ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_PID_C_E2 = _UxGT("PID-C ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_PID_C_E3 = _UxGT("PID-C ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_PID_C_E4 = _UxGT("PID-C ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_PID_C_E5 = _UxGT("PID-C ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_SELECT = _UxGT("選擇"); //"Select"
+ PROGMEM Language_Str MSG_SELECT_E0 = _UxGT("選擇 ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_SELECT_E1 = _UxGT("選擇 ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_SELECT_E2 = _UxGT("選擇 ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_SELECT_E3 = _UxGT("選擇 ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_SELECT_E4 = _UxGT("選擇 ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_SELECT_E5 = _UxGT("選擇 ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_ACC = _UxGT("加速度"); //"Accel" acceleration
+ PROGMEM Language_Str MSG_JERK = _UxGT("抖動速率"); //"Jerk"
+ PROGMEM Language_Str MSG_VA_JERK = _UxGT("軸抖動速率") LCD_STR_A; //"Va-jerk"
+ PROGMEM Language_Str MSG_VB_JERK = _UxGT("軸抖動速率") LCD_STR_B; //"Vb-jerk"
+ PROGMEM Language_Str MSG_VC_JERK = _UxGT("軸抖動速率") LCD_STR_C; //"Vc-jerk"
+ PROGMEM Language_Str MSG_VE_JERK = _UxGT("擠出機抖動速率"); //"Ve-jerk"
+ PROGMEM Language_Str MSG_VELOCITY = _UxGT("速度"); // "Velocity"
+ PROGMEM Language_Str MSG_VMAX_A = _UxGT("最大進料速率") LCD_STR_A; //"Vmax " max_feedrate_mm_s
+ PROGMEM Language_Str MSG_VMAX_B = _UxGT("最大進料速率") LCD_STR_B;
+ PROGMEM Language_Str MSG_VMAX_C = _UxGT("最大進料速率") LCD_STR_C;
+ PROGMEM Language_Str MSG_VMAX_E = _UxGT("最大進料速率") LCD_STR_E;
+ PROGMEM Language_Str MSG_VMAX_E0 = _UxGT("最大進料速率 ") LCD_STR_E0; //"Vmax " max_feedrate_mm_s
+ PROGMEM Language_Str MSG_VMAX_E1 = _UxGT("最大進料速率 ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_VMAX_E2 = _UxGT("最大進料速率 ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_VMAX_E3 = _UxGT("最大進料速率 ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_VMAX_E4 = _UxGT("最大進料速率 ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_VMAX_E5 = _UxGT("最大進料速率 ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_VMIN = _UxGT("最小進料速率"); //"Vmin" min_feedrate_mm_s
+ PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("最小移動速率"); //"VTrav min" min_travel_feedrate_mm_s, (target) speed of the move
+ PROGMEM Language_Str MSG_ACCELERATION = _UxGT("加速度"); // "Acceleration"
+ PROGMEM Language_Str MSG_AMAX_A = _UxGT("最大列印加速度") LCD_STR_A; //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+ PROGMEM Language_Str MSG_AMAX_B = _UxGT("最大列印加速度") LCD_STR_B;
+ PROGMEM Language_Str MSG_AMAX_C = _UxGT("最大列印加速度") LCD_STR_C;
+ PROGMEM Language_Str MSG_AMAX_E = _UxGT("最大列印加速度") LCD_STR_E;
+ PROGMEM Language_Str MSG_AMAX_E0 = _UxGT("最大列印加速度 ") LCD_STR_E0; //"Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+ PROGMEM Language_Str MSG_AMAX_E1 = _UxGT("最大列印加速度 ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_AMAX_E2 = _UxGT("最大列印加速度 ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_AMAX_E3 = _UxGT("最大列印加速度 ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_AMAX_E4 = _UxGT("最大列印加速度 ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_AMAX_E5 = _UxGT("最大列印加速度 ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_A_RETRACT = _UxGT("回縮加速度"); //"A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts
+ PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("非列印移動加速度"); //"A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
+ PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("軸步數/mm"); //"Steps/mm" axis_steps_per_mm, axis steps-per-unit G92
+ PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT("軸步數/mm"); //"Asteps/mm" axis_steps_per_mm, axis steps-per-unit G92
+ PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT("軸步數/mm");
+ PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT("軸步數/mm");
+ PROGMEM Language_Str MSG_E_STEPS = _UxGT("擠出機步數/mm"); //"Esteps/mm"
+ PROGMEM Language_Str MSG_E0_STEPS = _UxGT("擠出機") LCD_STR_N0 _UxGT("步數/mm");
+ PROGMEM Language_Str MSG_E1_STEPS = _UxGT("擠出機") LCD_STR_N1 _UxGT("步數/mm");
+ PROGMEM Language_Str MSG_E2_STEPS = _UxGT("擠出機") LCD_STR_N2 _UxGT("步數/mm");
+ PROGMEM Language_Str MSG_E3_STEPS = _UxGT("擠出機") LCD_STR_N3 _UxGT("步數/mm");
+ PROGMEM Language_Str MSG_E4_STEPS = _UxGT("擠出機") LCD_STR_N4 _UxGT("步數/mm");
+ PROGMEM Language_Str MSG_E5_STEPS = _UxGT("擠出機") LCD_STR_N5 _UxGT("步數/mm");
+ PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("溫度"); //"Temperature"
+ PROGMEM Language_Str MSG_MOTION = _UxGT("運作"); //"Motion"
+ PROGMEM Language_Str MSG_FILAMENT = _UxGT("絲料測容"); //"Filament" menu_control_volumetric
+ PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("測容積mm³"); //"E in mm3" volumetric_enabled
+ PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("絲料直徑"); //"Fil. Dia."
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E0 = _UxGT("絲料直徑 ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E1 = _UxGT("絲料直徑 ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E2 = _UxGT("絲料直徑 ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E3 = _UxGT("絲料直徑 ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E4 = _UxGT("絲料直徑 ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENT_DIAM_E5 = _UxGT("絲料直徑 ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("卸載 mm"); // "Unload mm"
+ PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("装載 mm"); // "Load mm"
+ PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD對比度"); //"LCD contrast"
+ PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("保存設置"); //"Store memory"
+ PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("載入設置"); //"Load memory"
+ PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("恢復安全值"); //"Restore failsafe"
+ PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("初始化設置"); // "Initialize EEPROM"
+ PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("刷新"); //"Refresh"
+ PROGMEM Language_Str MSG_WATCH = _UxGT("資訊界面"); //"Info screen"
+ PROGMEM Language_Str MSG_PREPARE = _UxGT("準備"); //"Prepare"
+ PROGMEM Language_Str MSG_TUNE = _UxGT("調整"); //"Tune"
+ PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("暫停列印"); //"Pause print"
+ PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("恢復列印"); //"Resume print"
+ PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("停止列印"); //"Stop print"
+ PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("從記憶卡上列印"); //"Print from SD"
+ PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("無記憶卡"); //"No SD card"
+ PROGMEM Language_Str MSG_DWELL = _UxGT("休眠 ..."); //"Sleep..."
+ PROGMEM Language_Str MSG_USERWAIT = _UxGT("點擊繼續 ..."); //"Click to resume..."
+ PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("列印已暫停"); // "Print paused"
+ PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("已取消列印"); //"Print aborted"
+ PROGMEM Language_Str MSG_NO_MOVE = _UxGT("無移動"); //"No move."
+ PROGMEM Language_Str MSG_KILLED = _UxGT("已砍掉"); //"KILLED. "
+ PROGMEM Language_Str MSG_STOPPED = _UxGT("已停止"); //"STOPPED. "
+ PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("回縮長度mm"); //"Retract mm" retract_length, retract length (positive mm)
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("換手回抽長度mm"); //"Swap Re.mm" swap_retract_length, swap retract length (positive mm), for extruder change
+ PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("回縮速率mm/s"); //"Retract V" retract_feedrate_mm_s, feedrate for retracting (mm/s)
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm"); //"Hop mm" retract_zraise, retract Z-lift
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("回縮恢復長度mm"); //"UnRet +mm" retract_recover_extra, additional recover length (mm, added to retract length when recovering)
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("換手回縮恢復長度mm"); //"S UnRet+mm" swap_retract_recover_extra, additional swap recover length (mm, added to retract length when recovering from extruder change)
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("回縮恢復後進料速率mm/s"); //"UnRet V" retract_recover_feedrate_mm_s, feedrate for recovering from retraction (mm/s)
+ PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V"); // "S UnRet V"
+ PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("自動回縮"); //"AutoRetr." autoretract_enabled,
+ PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("更換絲料"); //"Change filament"
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E0 = _UxGT("更換絲料 ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E1 = _UxGT("更換絲料 ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E2 = _UxGT("更換絲料 ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E3 = _UxGT("更換絲料 ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E4 = _UxGT("更換絲料 ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTCHANGE_E5 = _UxGT("更換絲料 ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("裝載絲料"); // "Load filament"
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E0 = _UxGT("裝載絲料 ") LCD_STR_E0;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E1 = _UxGT("裝載絲料 ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E2 = _UxGT("裝載絲料 ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E3 = _UxGT("裝載絲料 ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E4 = _UxGT("裝載絲料 ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTLOAD_E5 = _UxGT("裝載絲料 ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E0 = _UxGT("卸載絲料 ") LCD_STR_E0; // "Unload filament"
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E1 = _UxGT("卸載絲料 ") LCD_STR_E1;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E2 = _UxGT("卸載絲料 ") LCD_STR_E2;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E3 = _UxGT("卸載絲料 ") LCD_STR_E3;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E4 = _UxGT("卸載絲料 ") LCD_STR_E4;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_E5 = _UxGT("卸載絲料 ") LCD_STR_E5;
+ PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("卸載全部"); // "Unload All"
+ PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("初始化記憶卡"); //"Init. SD card"
+ PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("更換記憶卡"); //"Change SD card"
+ PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z探針在熱床之外"); //"Z probe out. bed" Z probe is not within the physical limits
+ PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("偏斜因數"); // "Skew Factor"
+ PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch"); // "BLTouch"
+ PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch 自檢"); // "BLTouch Self-Test"
+ PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("重置BLTouch"); // "Reset BLTouch"
+ PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("部署BLTouch"); // "Deploy BLTouch"
+ PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("裝載BLTouch"); // "Stow BLTouch"
+ PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("歸位 %s%s%s 先"); //"Home ... first"
+ PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Z偏移"); //"Z Offset"
+ PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("微量調整X軸"); //"Babystep X" lcd_babystep_x, Babystepping enables the user to control the axis in tiny amounts
+ PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("微量調整Y軸"); //"Babystep Y"
+ PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("微量調整Z軸"); //"Babystep Z"
+ PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("擋塊終止"); //"Endstop abort"
+ PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("加熱失敗"); //"Heating failed"
+ PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("錯誤:REDUNDANT TEMP"); //"Err: REDUNDANT TEMP"
+ PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("溫控失控"); //"THERMAL RUNAWAY"
+ PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("錯誤:最高溫度"); //"Err: MAXTEMP"
+ PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("錯誤:最低溫度"); //"Err: MINTEMP"
+ PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("錯誤:最高熱床溫度"); //"Err: MAXTEMP BED"
+ PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("錯誤:最低熱床溫度"); //"Err: MINTEMP BED"
+ PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("歸位 XY 先"); //"Home XY First"
+ PROGMEM Language_Str MSG_HALTED = _UxGT("印表機停機"); //"PRINTER HALTED"
+ PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("請重置"); //"Please reset"
+ PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("天"); //"d" // One character only
+ PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("時"); //"h" // One character only
+ PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("分"); //"m" // One character only
+ PROGMEM Language_Str MSG_HEATING = _UxGT("加熱中 ..."); //"Heating..."
+ PROGMEM Language_Str MSG_BED_HEATING = _UxGT("加熱熱床中 ..."); //"Bed Heating..."
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("⊿校準"); //"Delta Calibration"
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("⊿校準X"); //"Calibrate X"
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("⊿校準Y"); //"Calibrate Y"
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("⊿校準Z"); //"Calibrate Z"
+ PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("⊿校準中心"); //"Calibrate Center"
+ PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("⊿設置"); // "Delta Settings"
+ PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("⊿自動校準"); // "Auto Calibration"
+ PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("設置⊿高度"); // "Set Delta Height"
+ PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("⊿斜柱"); // "Diag Rod"
+ PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("⊿高度"); // "Height"
+ PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("⊿半徑"); // "Radius"
+ PROGMEM Language_Str MSG_INFO_MENU = _UxGT("關於印表機"); //"About Printer"
+ PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("印表機訊息"); //"Printer Info"
+ PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("三點調平"); // "3-Point Leveling"
+ PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("線性調平"); // "Linear Leveling"
+ PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("雙線性調平"); // "Bilinear Leveling"
+ PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("統一熱床調平(UBL)"); // "Unified Bed Leveling"
+ PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("網格調平"); // "Mesh Leveling"
+ PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("印表機統計"); //"Printer Stats"
+ PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("主板訊息"); //"Board Info"
+ PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("溫度計"); //"Thermistors"
+ PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("擠出機"); //"Extruders"
+ PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("傳輸率"); //"Baud"
+ PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("協議"); //"Protocol"
+ PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("外殼燈"); // "Case light"
+ PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("燈亮度"); // "Light BRIGHTNESS"
-#define MSG_EXPECTED_PRINTER _UxGT("打印機不正確") // "The printer is incorrect"
+ PROGMEM Language_Str MSG_EXPECTED_PRINTER = _UxGT("打印機不正確"); // "The printer is incorrect"
-#if LCD_WIDTH >= 20
- #define MSG_INFO_PRINT_COUNT _UxGT("列印計數") //"Print Count"
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("已完成") //"Completed"
- #define MSG_INFO_PRINT_TIME _UxGT("總列印時間") //"Total print time"
- #define MSG_INFO_PRINT_LONGEST _UxGT("最長工作時間") //"Longest job time"
- #define MSG_INFO_PRINT_FILAMENT _UxGT("總計擠出") //"Extruded total"
-#else
- #define MSG_INFO_PRINT_COUNT _UxGT("列印數") //"Prints"
- #define MSG_INFO_COMPLETED_PRINTS _UxGT("完成") //"Completed"
- #define MSG_INFO_PRINT_TIME _UxGT("總共") //"Total"
- #define MSG_INFO_PRINT_LONGEST _UxGT("最長") //"Longest"
- #define MSG_INFO_PRINT_FILAMENT _UxGT("已擠出") //"Extruded"
-#endif
+ #if LCD_WIDTH >= 20
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("列印計數"); //"Print Count"
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("已完成"); //"Completed"
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("總列印時間"); //"Total print time"
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("最長工作時間"); //"Longest job time"
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("總計擠出"); //"Extruded total"
+ #else
+ PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("列印數"); //"Prints"
+ PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("完成"); //"Completed"
+ PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("總共"); //"Total"
+ PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("最長"); //"Longest"
+ PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("已擠出"); //"Extruded"
+ #endif
-#define MSG_INFO_MIN_TEMP _UxGT("最低溫度") //"Min Temp"
-#define MSG_INFO_MAX_TEMP _UxGT("最高溫度") //"Max Temp"
-#define MSG_INFO_PSU _UxGT("電源供應") //"Power Supply"
-#define MSG_DRIVE_STRENGTH _UxGT("驅動力度") // "Drive Strength"
-#define MSG_DAC_PERCENT _UxGT("驅動 %") // "Driver %"
-#define MSG_DAC_EEPROM_WRITE _UxGT("保存驅動設置") // "DAC EEPROM Write"
-#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("列印已暫停") // "PRINT PAUSED"
-#define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("裝載絲料") // "LOAD FILAMENT"
-#define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("卸載絲料") // "UNLOAD FILAMENT"
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("恢複選項:") // "RESUME OPTIONS:"
-#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("清除更多") // "Purge more"
-#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("恢復列印") //"Resume print"
-#define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" 噴嘴: ") // " Nozzle: "
-#define MSG_ERR_HOMING_FAILED _UxGT("歸原位失敗") // "Homing failed"
-#define MSG_ERR_PROBING_FAILED _UxGT("探針探測失敗") // "Probing failed"
-#define MSG_M600_TOO_COLD _UxGT("M600: 太涼") // "M600: Too cold"
+ PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("最低溫度"); //"Min Temp"
+ PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("最高溫度"); //"Max Temp"
+ PROGMEM Language_Str MSG_INFO_PSU = _UxGT("電源供應"); //"Power Supply"
+ PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("驅動力度"); // "Drive Strength"
+ PROGMEM Language_Str MSG_DAC_PERCENT = _UxGT("驅動 %"); // "Driver %"
+ PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("保存驅動設置"); // "DAC EEPROM Write"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("列印已暫停"); // "PRINT PAUSED"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("裝載絲料"); // "LOAD FILAMENT"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("卸載絲料"); // "UNLOAD FILAMENT"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("恢複選項:"); // "RESUME OPTIONS:"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("清除更多"); // "Purge more"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("恢復列印"); //"Resume print"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" 噴嘴: "); // " Nozzle: "
+ PROGMEM Language_Str MSG_LCD_HOMING_FAILED = _UxGT("歸原位失敗"); // "Homing failed"
+ PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("探針探測失敗"); // "Probing failed"
+ PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: 太冷"); // "M600: Too cold"
-#if LCD_HEIGHT >= 4
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("等待開始") //"Wait for start"
- #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("絲料") //"of the filament"
- #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("變更") //"change"
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("等待") //"Wait for"
- #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("卸下絲料") //"filament unload"
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("插入絲料") //"Insert filament"
- #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("並按鍵") //"and press button"
- #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("繼續 ...") //"to continue..."
- #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("按下按鈕來") // "Press button to"
- #define MSG_FILAMENT_CHANGE_HEAT_2 _UxGT("加熱噴嘴.") // "heat nozzle."
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("加熱噴嘴") // "Heating nozzle"
- #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("請等待 ...") // "Please wait..."
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("等待") //"Wait for"
- #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("進料") //"filament load"
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("等待") // "Wait for"
- #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("絲料清除") // "filament purge"
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("等待列印") //"Wait for print"
- #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("恢復") //"to resume"
-#else // LCD_HEIGHT < 4
- #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("請等待 ...") //"Please wait..."
- #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("退出中 ...") //"Ejecting..."
- #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("插入並點擊") //"Insert and Click"
- #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("加熱中 ...") // "Heating..."
- #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("載入中 ...") //"Loading..."
- #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("清除中 ...") // "Purging..."
- #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("恢復中 ...") //"Resuming..."
-#endif // LCD_HEIGHT < 4
+ #if LCD_HEIGHT >= 4
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("等待開始", "絲料", "變更")); //"Wait for start of the filament change"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("等待", "卸下絲料")); //"Wait for filament unload"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("插入絲料", "並按鍵", "繼續 ...")); //"Insert filament and press button to continue..."
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("按下按鈕來", "加熱噴嘴.")); // "Press button to heat nozzle."
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("加熱噴嘴", "請等待 ...")); // "Heating nozzle Please wait..."
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("等待", "進料")); //"Wait for filament load"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("等待", "絲料清除")); // "Wait for filament purge"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("等待列印", "恢復")); //"Wait for print to resume"
+ #else // LCD_HEIGHT < 4
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("請等待 ...")); //"Please wait..."
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("退出中 ...")); //"Ejecting..."
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("插入並點擊")); //"Insert and Click"
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("加熱中 ...")); // "Heating..."
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("載入中 ...")); //"Loading..."
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("清除中 ...")); // "Purging..."
+ PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("恢復中 ...")); //"Resuming..."
+ #endif // LCD_HEIGHT < 4
+}
diff --git a/Marlin/src/lcd/menu/menu.cpp b/Marlin/src/lcd/menu/menu.cpp
index 69144fd64c66..60461528d07f 100644
--- a/Marlin/src/lcd/menu/menu.cpp
+++ b/Marlin/src/lcd/menu/menu.cpp
@@ -25,12 +25,11 @@
#if HAS_LCD_MENU
#include "menu.h"
-#include "../ultralcd.h"
#include "../../module/planner.h"
#include "../../module/motion.h"
#include "../../module/printcounter.h"
#include "../../gcode/queue.h"
-#include "../../sd/cardreader.h"
+
#if HAS_BUZZER
#include "../../libs/buzzer.h"
#endif
@@ -68,11 +67,12 @@ uint8_t screen_history_depth = 0;
bool screen_changed;
// Value Editing
-PGM_P MenuItemBase::editLabel;
-void* MenuItemBase::editValue;
-int32_t MenuItemBase::minEditValue, MenuItemBase::maxEditValue;
-screenFunc_t MenuItemBase::callbackFunc;
-bool MenuItemBase::liveEdit;
+chimera_t editable;
+PGM_P MenuEditItemBase::editLabel;
+void* MenuEditItemBase::editValue;
+int32_t MenuEditItemBase::minEditValue, MenuEditItemBase::maxEditValue;
+screenFunc_t MenuEditItemBase::callbackFunc;
+bool MenuEditItemBase::liveEdit;
// Prevent recursion into screen handlers
bool no_reentry = false;
@@ -131,23 +131,24 @@ void MenuItem_gcode::action(PGM_P const, PGM_P const pgcode) { queue.inject_P(pg
*
* bool MenuItem_int3::_edit();
* void MenuItem_int3::edit(); // edit int16_t (interactively)
- * void MenuItem_int3::action_edit(PGM_P const pstr, int16_t * const ptr, const int16_t minValue, const int16_t maxValue, const screenFunc_t callback = null, const bool live = false);
+ * void MenuItem_int3::action(PGM_P const pstr, int16_t * const ptr, const int32_t minValue, const int32_t maxValue, const screenFunc_t callback = null, const bool live = false);
*
* You can then use one of the menu macros to present the edit interface:
- * MENU_ITEM_EDIT(int3, MSG_SPEED, &feedrate_percentage, 10, 999)
+ * EDIT_ITEM(int3, MSG_SPEED, &feedrate_percentage, 10, 999)
*
* This expands into a more primitive menu item:
- * MENU_ITEM_VARIANT(int3, _edit, MSG_SPEED, PSTR(MSG_SPEED), &feedrate_percentage, 10, 999)
+ * _MENU_ITEM_P(int3, false, GET_TEXT(MSG_SPEED), &feedrate_percentage, 10, 999)
*
* ...which calls:
- * MenuItem_int3::action_edit(PSTR(MSG_SPEED), &feedrate_percentage, 10, 999)
+ * MenuItem_int3::action(plabel, &feedrate_percentage, 10, 999)
+ * draw_menu_item_int3(encoderLine == _thisItemNr, _lcdLineNr, plabel, &feedrate_percentage, 10, 999)
*/
-void MenuItemBase::edit(strfunc_t strfunc, loadfunc_t loadfunc) {
+void MenuEditItemBase::edit(strfunc_t strfunc, loadfunc_t loadfunc) {
#if ENABLED(TOUCH_BUTTONS)
ui.repeat_delay = BUTTON_DELAY_EDIT;
#endif
- if (int16_t(ui.encoderPosition) < 0) ui.encoderPosition = 0;
- if (int16_t(ui.encoderPosition) > maxEditValue) ui.encoderPosition = maxEditValue;
+ if (int32_t(ui.encoderPosition) < 0) ui.encoderPosition = 0;
+ if (int32_t(ui.encoderPosition) > maxEditValue) ui.encoderPosition = maxEditValue;
if (ui.should_draw())
draw_edit_screen(editLabel, strfunc(ui.encoderPosition + minEditValue));
if (ui.lcd_clicked || (liveEdit && ui.should_draw())) {
@@ -157,7 +158,7 @@ void MenuItemBase::edit(strfunc_t strfunc, loadfunc_t loadfunc) {
}
}
-void MenuItemBase::init(PGM_P const el, void * const ev, const int32_t minv, const int32_t maxv, const uint16_t ep, const screenFunc_t cs, const screenFunc_t cb, const bool le) {
+void MenuEditItemBase::init(PGM_P const el, void * const ev, const int32_t minv, const int32_t maxv, const uint16_t ep, const screenFunc_t cs, const screenFunc_t cb, const bool le) {
ui.save_previous_screen();
ui.refresh();
editLabel = el;
@@ -170,7 +171,7 @@ void MenuItemBase::init(PGM_P const el, void * const ev, const int32_t minv, con
liveEdit = le;
}
-#define DEFINE_MENU_EDIT_ITEM(NAME) template class TMenuItem
+#define DEFINE_MENU_EDIT_ITEM(NAME) template class TMenuEditItem
DEFINE_MENU_EDIT_ITEM(percent); // 100% right-justified
DEFINE_MENU_EDIT_ITEM(int3); // 123, -12 right-justified
@@ -191,7 +192,7 @@ DEFINE_MENU_EDIT_ITEM(float52sign); // +123.45
DEFINE_MENU_EDIT_ITEM(long5); // 12345 right-justified
DEFINE_MENU_EDIT_ITEM(long5_25); // 12345 right-justified (25 increment)
-void MenuItem_bool::action_edit(PGM_P pstr, bool *ptr, screenFunc_t callback) {
+void MenuItem_bool::action(PGM_P pstr, bool *ptr, screenFunc_t callback) {
UNUSED(pstr); *ptr ^= true; ui.refresh();
if (callback) (*callback)();
}
@@ -200,13 +201,10 @@ void MenuItem_bool::action_edit(PGM_P pstr, bool *ptr, screenFunc_t callback) {
///////////////// Menu Tree ////////////////
////////////////////////////////////////////
-#if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
- float lcd_z_fade_height;
- void _lcd_set_z_fade_height() { set_z_fade_height(lcd_z_fade_height); }
-#endif
+#include "../../Marlin.h"
bool printer_busy() {
- return planner.movesplanned() || IS_SD_PRINTING() || print_job_timer.isRunning();
+ return planner.movesplanned() || printingIsActive();
}
/**
@@ -219,11 +217,6 @@ void MarlinUI::goto_screen(screenFunc_t screen, const uint16_t encoder/*=0*/, co
repeat_delay = BUTTON_DELAY_MENU;
#endif
- #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
- // Shadow for editing the fade height
- lcd_z_fade_height = planner.z_fade_height;
- #endif
-
#if ENABLED(LCD_SET_PROGRESS_MANUALLY)
progress_reset();
#endif
@@ -330,8 +323,7 @@ void MarlinUI::_synchronize() {
// Display the synchronize screen with a custom message
// ** This blocks the command queue! **
void MarlinUI::synchronize(PGM_P const msg/*=nullptr*/) {
- static const char moving[] PROGMEM = MSG_MOVING;
- sync_message = msg ? msg : moving;
+ sync_message = msg ?: GET_TEXT(MSG_MOVING);
_synchronize();
}
@@ -348,7 +340,7 @@ void MarlinUI::synchronize(PGM_P const msg/*=nullptr*/) {
void scroll_screen(const uint8_t limit, const bool is_menu) {
ui.encoder_direction_menus();
ENCODER_RATE_MULTIPLY(false);
- if (ui.encoderPosition > 0x8000) ui.encoderPosition = 0;
+ if (int32_t(ui.encoderPosition) < 0) ui.encoderPosition = 0;
if (ui.first_page) {
encoderLine = ui.encoderPosition / (ENCODER_STEPS_PER_MENU_ITEM);
screen_changed = false;
@@ -398,7 +390,7 @@ void scroll_screen(const uint8_t limit, const bool is_menu) {
constexpr bool do_probe = true;
#endif
if (ui.encoderPosition) {
- const int16_t babystep_increment = int16_t(ui.encoderPosition) * (BABYSTEP_MULTIPLICATOR);
+ const int16_t babystep_increment = int16_t(ui.encoderPosition) * (BABYSTEP_MULTIPLICATOR_Z);
ui.encoderPosition = 0;
const float diff = planner.steps_to_mm[Z_AXIS] * babystep_increment,
@@ -425,10 +417,10 @@ void scroll_screen(const uint8_t limit, const bool is_menu) {
if (ui.should_draw()) {
#if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
if (!do_probe)
- draw_edit_screen(PSTR(MSG_Z_OFFSET), ftostr43sign(hotend_offset[active_extruder].z));
+ draw_edit_screen(GET_TEXT(MSG_Z_OFFSET), ftostr43sign(hotend_offset[active_extruder].z));
else
#endif
- draw_edit_screen(PSTR(MSG_ZPROBE_ZOFFSET), ftostr43sign(probe_offset.z));
+ draw_edit_screen(GET_TEXT(MSG_ZPROBE_ZOFFSET), ftostr43sign(probe_offset.z));
#if ENABLED(BABYSTEP_ZPROBE_GFX_OVERLAY)
if (do_probe) _lcd_zoffset_overlay_gfx(probe_offset.z);
@@ -473,7 +465,7 @@ void scroll_screen(const uint8_t limit, const bool is_menu) {
void _lcd_draw_homing() {
constexpr uint8_t line = (LCD_HEIGHT - 1) / 2;
- if (ui.should_draw()) draw_menu_item_static(line, PSTR(MSG_LEVEL_BED_HOMING));
+ if (ui.should_draw()) draw_menu_item_static(line, GET_TEXT(MSG_LEVEL_BED_HOMING));
ui.refresh(LCDVIEW_CALL_NO_REDRAW);
}
diff --git a/Marlin/src/lcd/menu/menu.h b/Marlin/src/lcd/menu/menu.h
index 2d7680e10e15..268ca05d330e 100644
--- a/Marlin/src/lcd/menu/menu.h
+++ b/Marlin/src/lcd/menu/menu.h
@@ -42,10 +42,10 @@ bool printer_busy();
////////////////////////////////////////////
#define DECLARE_MENU_EDIT_TYPE(TYPE, NAME, STRFUNC, SCALE) \
- struct MenuItemInfo_##NAME { \
+ struct MenuEditItemInfo_##NAME { \
typedef TYPE type_t; \
static constexpr float scale = SCALE; \
- static inline char* strfunc(const float value) { return STRFUNC((TYPE) value); } \
+ static inline const char* strfunc(const float value) { return STRFUNC((TYPE) value); } \
};
DECLARE_MENU_EDIT_TYPE(uint8_t, percent, ui8tostr4pct, 100.0/255); // 100% right-justified
@@ -75,16 +75,17 @@ typedef void (*selectFunc_t)();
void draw_select_screen(PGM_P const yes, PGM_P const no, const bool yesno, PGM_P const pref, const char * const string, PGM_P const suff);
void do_select_screen(PGM_P const yes, PGM_P const no, selectFunc_t yesFunc, selectFunc_t noFunc, PGM_P const pref, const char * const string=nullptr, PGM_P const suff=nullptr);
inline void do_select_screen_yn(selectFunc_t yesFunc, selectFunc_t noFunc, PGM_P const pref, const char * const string=nullptr, PGM_P const suff=nullptr) {
- do_select_screen(PSTR(MSG_YES), PSTR(MSG_NO), yesFunc, noFunc, pref, string, suff);
+ do_select_screen(GET_TEXT(MSG_YES), GET_TEXT(MSG_NO), yesFunc, noFunc, pref, string, suff);
}
-#define SS_LEFT 0x00
-#define SS_CENTER 0x01
-#define SS_INVERT 0x02
+#define SS_LEFT 0x00
+#define SS_CENTER 0x01
+#define SS_INVERT 0x02
+#define SS_DEFAULT SS_CENTER
void draw_edit_screen(PGM_P const pstr, const char* const value=nullptr);
void draw_menu_item(const bool sel, const uint8_t row, PGM_P const pstr, const char pre_char, const char post_char);
-void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const uint8_t style=SS_CENTER, const char * const valstr=nullptr);
+void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const uint8_t style=SS_DEFAULT, const char * const valstr=nullptr);
void _draw_menu_item_edit(const bool sel, const uint8_t row, PGM_P const pstr, const char* const data, const bool pgm);
FORCE_INLINE void draw_menu_item_back(const bool sel, const uint8_t row, PGM_P const pstr) { draw_menu_item(sel, row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0]); }
FORCE_INLINE void draw_menu_item_edit(const bool sel, const uint8_t row, PGM_P const pstr, const char* const data) { _draw_menu_item_edit(sel, row, pstr, data, false); }
@@ -93,7 +94,7 @@ FORCE_INLINE void draw_menu_item_edit_P(const bool sel, const uint8_t row, PGM_P
#define draw_menu_item_gcode(sel, row, pstr, gcode) draw_menu_item(sel, row, pstr, '>', ' ')
#define draw_menu_item_function(sel, row, pstr, data) draw_menu_item(sel, row, pstr, '>', ' ')
#define DRAW_MENU_ITEM_SETTING_EDIT_GENERIC(VAL) draw_menu_item_edit(sel, row, pstr, VAL)
-#define DRAW_BOOL_SETTING(sel, row, pstr, data) draw_menu_item_edit_P(sel, row, pstr, (*(data))?PSTR(MSG_LCD_ON):PSTR(MSG_LCD_OFF))
+#define DRAW_BOOL_SETTING(sel, row, pstr, data) draw_menu_item_edit_P(sel, row, pstr, (*(data))?GET_TEXT(MSG_LCD_ON):GET_TEXT(MSG_LCD_OFF))
#if ENABLED(SDSUPPORT)
class CardReader;
@@ -111,14 +112,14 @@ FORCE_INLINE void draw_menu_item_edit_P(const bool sel, const uint8_t row, PGM_P
////////////////////////////////////////////
#define _DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(TYPE, NAME, STRFUNC) \
- FORCE_INLINE void draw_menu_item_edit_##NAME (const bool sel, const uint8_t row, PGM_P const pstr, TYPE * const data, ...) { \
+ FORCE_INLINE void draw_menu_item_##NAME (const bool sel, const uint8_t row, PGM_P const pstr, TYPE * const data, ...) { \
DRAW_MENU_ITEM_SETTING_EDIT_GENERIC(STRFUNC(*(data))); \
} \
- FORCE_INLINE void draw_menu_item_edit_accessor_##NAME (const bool sel, const uint8_t row, PGM_P const pstr, PGM_P const, TYPE (*pget)(), void (*)(TYPE), ...) { \
+ FORCE_INLINE void draw_menu_item_accessor_##NAME (const bool sel, const uint8_t row, PGM_P const pstr, PGM_P const, TYPE (*pget)(), void (*)(TYPE), ...) { \
DRAW_MENU_ITEM_SETTING_EDIT_GENERIC(STRFUNC(pget())); \
} \
typedef void NAME##_void
-#define DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(NAME) _DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(MenuItemInfo_##NAME::type_t, NAME, MenuItemInfo_##NAME::strfunc)
+#define DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(NAME) _DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(MenuEditItemInfo_##NAME::type_t, NAME, MenuEditItemInfo_##NAME::strfunc)
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(percent); // 100% right-justified
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(int3); // 123, -12 right-justified
@@ -139,8 +140,8 @@ DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float52sign); // +123.45
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(long5); // 12345 right-justified
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(long5_25); // 12345 right-justified (25 increment)
-#define draw_menu_item_edit_bool(sel, row, pstr, data, ...) DRAW_BOOL_SETTING(sel, row, pstr, data)
-#define draw_menu_item_edit_accessor_bool(sel, row, pstr, pget, pset) DRAW_BOOL_SETTING(sel, row, pstr, data)
+#define draw_menu_item_bool(sel, row, pstr, data, ...) DRAW_BOOL_SETTING(sel, row, pstr, data)
+#define draw_menu_item_accessor_bool(sel, row, pstr, pget, pset) DRAW_BOOL_SETTING(sel, row, pstr, data)
////////////////////////////////////////////
/////////////// Menu Actions ///////////////
@@ -176,39 +177,65 @@ class MenuItem_function {
/////////// Menu Editing Actions ///////////
////////////////////////////////////////////
-class MenuItemBase {
+//
+// The Menu Edit shadow value
+// Only one edit value is needed at a time
+//
+
+typedef union {
+ bool state;
+ float decimal;
+ int8_t int8;
+ int16_t int16;
+ int32_t int32;
+ uint8_t uint8;
+ uint16_t uint16;
+ uint32_t uint32;
+} chimera_t;
+
+extern chimera_t editable;
+
+// Edit items use long integer encoder units
+class MenuEditItemBase {
private:
static PGM_P editLabel;
static void *editValue;
- static int32_t minEditValue, maxEditValue;
+ static int32_t minEditValue, maxEditValue; // Encoder value range
static screenFunc_t callbackFunc;
static bool liveEdit;
protected:
- typedef char* (*strfunc_t)(const int32_t);
+ typedef const char* (*strfunc_t)(const int32_t);
typedef void (*loadfunc_t)(void *, const int32_t);
static void init(PGM_P const el, void * const ev, const int32_t minv, const int32_t maxv, const uint16_t ep, const screenFunc_t cs, const screenFunc_t cb, const bool le);
static void edit(strfunc_t, loadfunc_t);
};
template
-class TMenuItem : MenuItemBase {
+class TMenuEditItem : MenuEditItemBase {
private:
typedef typename NAME::type_t type_t;
static inline float unscale(const float value) { return value * (1.0f / NAME::scale); }
static inline float scale(const float value) { return value * NAME::scale; }
static void load(void *ptr, const int32_t value) { *((type_t*)ptr) = unscale(value); }
- static char* to_string(const int32_t value) { return NAME::strfunc(unscale(value)); }
+ static const char* to_string(const int32_t value) { return NAME::strfunc(unscale(value)); }
public:
- static void action_edit(PGM_P const pstr, type_t * const ptr, const type_t minValue, const type_t maxValue, const screenFunc_t callback=nullptr, const bool live=false) {
- // Make sure minv and maxv fit within int16_t
- const int32_t minv = _MAX(scale(minValue), INT16_MIN),
- maxv = _MIN(scale(maxValue), INT16_MAX);
+ static void action(
+ PGM_P const pstr, // Edit label
+ type_t * const ptr, // Value pointer
+ const type_t minValue, // Value range
+ const type_t maxValue,
+ const screenFunc_t callback=nullptr, // Value update callback
+ const bool live=false // Callback during editing
+ ) {
+ // Make sure minv and maxv fit within int32_t
+ const int32_t minv = _MAX(scale(minValue), INT32_MIN),
+ maxv = _MIN(scale(maxValue), INT32_MAX);
init(pstr, ptr, minv, maxv - minv, scale(*ptr) - minv, edit, callback, live);
}
- static void edit() { MenuItemBase::edit(to_string, load); }
+ static void edit() { MenuEditItemBase::edit(to_string, load); }
};
-#define DECLARE_MENU_EDIT_ITEM(NAME) typedef TMenuItem MenuItem_##NAME;
+#define DECLARE_MENU_EDIT_ITEM(NAME) typedef TMenuEditItem MenuItem_##NAME;
DECLARE_MENU_EDIT_ITEM(percent);
DECLARE_MENU_EDIT_ITEM(int3);
@@ -231,7 +258,7 @@ DECLARE_MENU_EDIT_ITEM(long5_25);
class MenuItem_bool {
public:
- static void action_edit(PGM_P const pstr, bool* ptr, const screenFunc_t callbackFunc=nullptr);
+ static void action(PGM_P const pstr, bool* ptr, const screenFunc_t callbackFunc=nullptr);
};
////////////////////////////////////////////
@@ -272,10 +299,7 @@ class MenuItem_bool {
} \
screen_items = _thisItemNr
-#define END_MENU() \
- } \
- screen_items = _thisItemNr; \
- UNUSED(_skipStatic)
+#define END_MENU() END_SCREEN(); UNUSED(_skipStatic)
#if ENABLED(ENCODER_RATE_MULTIPLIER)
#define ENCODER_RATE_MULTIPLY(F) (ui.encoderRateMultiplierEnabled = F)
@@ -289,36 +313,36 @@ class MenuItem_bool {
/**
* MENU_ITEM generates draw & handler code for a menu item, potentially calling:
*
- * draw_menu_item_[_variant](sel, row, label, arg3...)
- * MenuItem_::action[_variant](arg3...)
+ * draw_menu_item_(sel, row, label, arg3...)
+ * MenuItem_::action(arg3...)
*
* Examples:
- * MENU_ITEM(back, MSG_WATCH, 0 [dummy parameter] )
- * or
- * MENU_BACK(MSG_WATCH)
- * draw_menu_item_back(sel, row, PSTR(MSG_WATCH))
+ * BACK_ITEM(MSG_WATCH)
+ * MENU_ITEM(back, MSG_WATCH)
+ * draw_menu_item_back(sel, row, GET_TEXT(MSG_WATCH))
* MenuItem_back::action()
*
+ * ACTION_ITEM(MSG_PAUSE_PRINT, lcd_sdcard_pause)
* MENU_ITEM(function, MSG_PAUSE_PRINT, lcd_sdcard_pause)
- * draw_menu_item_function(sel, row, PSTR(MSG_PAUSE_PRINT), lcd_sdcard_pause)
+ * draw_menu_item_function(sel, row, GET_TEXT(MSG_PAUSE_PRINT), lcd_sdcard_pause)
* MenuItem_function::action(lcd_sdcard_pause)
*
- * MENU_ITEM_EDIT(int3, MSG_SPEED, &feedrate_percentage, 10, 999)
- * draw_menu_item_edit_int3(sel, row, PSTR(MSG_SPEED), &feedrate_percentage, 10, 999)
- * MenuItem_int3::action_edit(PSTR(MSG_SPEED), &feedrate_percentage, 10, 999)
+ * EDIT_ITEM(int3, MSG_SPEED, &feedrate_percentage, 10, 999)
+ * draw_menu_item_int3(sel, row, GET_TEXT(MSG_SPEED), &feedrate_percentage, 10, 999)
+ * MenuItem_int3::action(GET_TEXT(MSG_SPEED), &feedrate_percentage, 10, 999)
*
*/
-#define _MENU_ITEM_VARIANT_P(TYPE, VARIANT, USE_MULTIPLIER, PLABEL, V...) do { \
+#define _MENU_ITEM_P(TYPE, USE_MULTIPLIER, PLABEL, V...) do { \
_skipStatic = false; \
if (_menuLineNr == _thisItemNr) { \
PGM_P const plabel = PLABEL; \
if (encoderLine == _thisItemNr && ui.use_click()) { \
_MENU_ITEM_MULTIPLIER_CHECK(USE_MULTIPLIER); \
- MenuItem_##TYPE ::action ## VARIANT(plabel, ##V); \
+ MenuItem_##TYPE ::action(plabel, ##V); \
if (screen_changed) return; \
} \
if (ui.should_draw()) \
- draw_menu_item ## VARIANT ## _ ## TYPE \
+ draw_menu_item_ ## TYPE \
(encoderLine == _thisItemNr, _lcdLineNr, plabel, ##V); \
} \
++_thisItemNr; \
@@ -338,22 +362,28 @@ class MenuItem_bool {
++_thisItemNr; \
} while(0)
-#define MENU_ITEM_ADDON_START(X) do{ \
- if (ui.should_draw() && _menuLineNr == _thisItemNr - 1) { \
- SETCURSOR(X, _lcdLineNr)
+#define STATIC_ITEM(LABEL, V...) STATIC_ITEM_P(GET_TEXT(LABEL), ##V)
+
+#define MENU_ITEM_P(TYPE, PLABEL, V...) _MENU_ITEM_P(TYPE, false, PLABEL, ##V)
+#define MENU_ITEM(TYPE, LABEL, V...) MENU_ITEM_P(TYPE, GET_TEXT(LABEL), ##V)
+
+#define EDIT_ITEM_P(TYPE, PLABEL, V...) MENU_ITEM_P(TYPE, PLABEL, ##V)
+#define EDIT_ITEM(TYPE, LABEL, V...) EDIT_ITEM_P(TYPE, GET_TEXT(LABEL), ##V)
-#define MENU_ITEM_ADDON_END() } }while(0)
+#define EDIT_ITEM_FAST_P(TYPE, PLABEL, V...) _MENU_ITEM_P(TYPE, true, PLABEL, ##V)
+#define EDIT_ITEM_FAST(TYPE, LABEL, V...) EDIT_ITEM_FAST_P(TYPE, GET_TEXT(LABEL), ##V)
-#define STATIC_ITEM(LABEL, V...) STATIC_ITEM_P(PSTR(LABEL), ##V)
+#define ACTION_ITEM_P(PLABEL, ACTION) MENU_ITEM_P(function, PLABEL, ACTION)
+#define ACTION_ITEM(LABEL, ACTION) ACTION_ITEM_P(GET_TEXT(LABEL), ACTION)
-#define MENU_BACK(LABEL) MENU_ITEM(back, LABEL)
-#define MENU_ITEM_DUMMY() do { _thisItemNr++; }while(0)
-#define MENU_ITEM_P(TYPE, PLABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, , false, PLABEL, ##V)
-#define MENU_ITEM(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, , false, PSTR(LABEL), ##V)
-#define MENU_ITEM_EDIT(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, _edit, false, PSTR(LABEL), ##V)
-#define MENU_ITEM_EDIT_CALLBACK(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, _edit, false, PSTR(LABEL), ##V)
-#define MENU_MULTIPLIER_ITEM_EDIT(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, _edit, true, PSTR(LABEL), ##V)
-#define MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, _edit, true, PSTR(LABEL), ##V)
+#define GCODES_ITEM_P(PLABEL, GCODES) MENU_ITEM_P(gcode, PLABEL, GCODES)
+#define GCODES_ITEM(LABEL, GCODES) GCODES_ITEM_P(GET_TEXT(LABEL), GCODES)
+
+#define SUBMENU_P(PLABEL, DEST) MENU_ITEM_P(submenu, PLABEL, DEST)
+#define SUBMENU(LABEL, DEST) SUBMENU_P(GET_TEXT(LABEL), DEST)
+
+#define BACK_ITEM(LABEL) MENU_ITEM(back, LABEL)
+#define SKIP_ITEM() (_thisItemNr++)
////////////////////////////////////////////
/////////////// Menu Screens ///////////////
@@ -393,13 +423,12 @@ void _lcd_draw_homing();
void lcd_enqueue_one_now_P(PGM_P const cmd);
#endif
-#if ENABLED(LEVEL_BED_CORNERS)
- void _lcd_level_bed_corners();
+#if HAS_GRAPHICAL_LCD && EITHER(BABYSTEP_ZPROBE_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
+ void _lcd_zoffset_overlay_gfx(const float zvalue);
#endif
-#if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
- extern float lcd_z_fade_height;
- void _lcd_set_z_fade_height();
+#if ENABLED(LEVEL_BED_CORNERS)
+ void _lcd_level_bed_corners();
#endif
#if ENABLED(LCD_BED_LEVELING) || (HAS_LEVELING && DISABLED(SLIM_LCD_MENUS))
diff --git a/Marlin/src/lcd/menu/menu_addon.h b/Marlin/src/lcd/menu/menu_addon.h
new file mode 100644
index 000000000000..e7553293a143
--- /dev/null
+++ b/Marlin/src/lcd/menu/menu_addon.h
@@ -0,0 +1,33 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#include "../lcdprint.h"
+#if HAS_GRAPHICAL_LCD
+ #include "../dogm/ultralcd_DOGM.h"
+#endif
+
+#define MENU_ITEM_ADDON_START(X) do{ \
+ if (ui.should_draw() && _menuLineNr == _thisItemNr - 1) { \
+ SETCURSOR(X, _lcdLineNr)
+
+#define MENU_ITEM_ADDON_END() } }while(0)
diff --git a/Marlin/src/lcd/menu/menu_advanced.cpp b/Marlin/src/lcd/menu/menu_advanced.cpp
index 1d5f728c19ff..2f4e37d12504 100644
--- a/Marlin/src/lcd/menu/menu_advanced.cpp
+++ b/Marlin/src/lcd/menu/menu_advanced.cpp
@@ -50,25 +50,23 @@
void menu_tmc();
void menu_backlash();
+void menu_cancelobject();
#if ENABLED(DAC_STEPPER_CURRENT)
#include "../../feature/dac/stepper_dac.h"
- xyze_uint8_t driverPercent;
- inline void dac_driver_getValues() { LOOP_XYZE(i) driverPercent[i] = dac_current_get_percent((AxisEnum)i); }
- static void dac_driver_commit() { dac_current_set_percents(driverPercent); }
-
void menu_dac() {
- dac_driver_getValues();
+ static xyze_uint8_t driverPercent;
+ LOOP_XYZE(i) driverPercent[i] = dac_current_get_percent((AxisEnum)i);
START_MENU();
- MENU_BACK(MSG_ADVANCED_SETTINGS);
- #define EDIT_DAC_PERCENT(N) MENU_ITEM_EDIT_CALLBACK(uint8, MSG_##N " " MSG_DAC_PERCENT, &driverPercent[_AXIS(N)], 0, 100, dac_driver_commit)
+ BACK_ITEM(MSG_ADVANCED_SETTINGS);
+ #define EDIT_DAC_PERCENT(A) EDIT_ITEM(uint8, MSG_##A " " MSG_DAC_PERCENT, &driverPercent[_AXIS(A)], 0, 100, [](){ dac_current_set_percents(driverPercent); })
EDIT_DAC_PERCENT(X);
EDIT_DAC_PERCENT(Y);
EDIT_DAC_PERCENT(Z);
EDIT_DAC_PERCENT(E);
- MENU_ITEM(function, MSG_DAC_EEPROM_WRITE, dac_commit_eeprom);
+ ACTION_ITEM(MSG_DAC_EEPROM_WRITE, dac_commit_eeprom);
END_MENU();
}
@@ -80,8 +78,8 @@ void menu_backlash();
void menu_pwm() {
START_MENU();
- MENU_BACK(MSG_ADVANCED_SETTINGS);
- #define EDIT_CURRENT_PWM(LABEL,I) MENU_ITEM_EDIT_CALLBACK(long5, LABEL, &stepper.motor_current_setting[I], 100, 2000, stepper.refresh_motor_power)
+ BACK_ITEM(MSG_ADVANCED_SETTINGS);
+ #define EDIT_CURRENT_PWM(LABEL,I) EDIT_ITEM_P(long5, PSTR(LABEL), &stepper.motor_current_setting[I], 100, 2000, stepper.refresh_motor_power)
#if PIN_EXISTS(MOTOR_CURRENT_PWM_XY)
EDIT_CURRENT_PWM(MSG_X MSG_Y, 0);
#endif
@@ -96,16 +94,6 @@ void menu_backlash();
#endif
-#if HAS_M206_COMMAND
- //
- // Set the home offset based on the current_position
- //
- void _lcd_set_home_offsets() {
- queue.inject_P(PSTR("M428"));
- ui.return_to_status();
- }
-#endif
-
#if ENABLED(SD_FIRMWARE_UPDATE)
#include "../../module/configuration_store.h"
#endif
@@ -116,23 +104,23 @@ void menu_backlash();
//
void menu_advanced_filament() {
START_MENU();
- MENU_BACK(MSG_ADVANCED_SETTINGS);
+ BACK_ITEM(MSG_ADVANCED_SETTINGS);
#if ENABLED(LIN_ADVANCE)
#if EXTRUDERS == 1
- MENU_ITEM_EDIT(float52, MSG_ADVANCE_K, &planner.extruder_advance_K[0], 0, 999);
+ EDIT_ITEM(float52, MSG_ADVANCE_K, &planner.extruder_advance_K[0], 0, 999);
#elif EXTRUDERS > 1
- #define EDIT_ADVANCE_K(N) MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E##N, &planner.extruder_advance_K[N-1], 0, 999)
+ #define EDIT_ADVANCE_K(N) EDIT_ITEM(float52, MSG_ADVANCE_K_E##N, &planner.extruder_advance_K[N], 0, 999)
+ EDIT_ADVANCE_K(0);
EDIT_ADVANCE_K(1);
- EDIT_ADVANCE_K(2);
#if EXTRUDERS > 2
- EDIT_ADVANCE_K(3);
+ EDIT_ADVANCE_K(2);
#if EXTRUDERS > 3
- EDIT_ADVANCE_K(4);
+ EDIT_ADVANCE_K(3);
#if EXTRUDERS > 4
- EDIT_ADVANCE_K(5);
+ EDIT_ADVANCE_K(4);
#if EXTRUDERS > 5
- EDIT_ADVANCE_K(6);
+ EDIT_ADVANCE_K(5);
#endif // EXTRUDERS > 5
#endif // EXTRUDERS > 4
#endif // EXTRUDERS > 3
@@ -141,24 +129,24 @@ void menu_backlash();
#endif
#if DISABLED(NO_VOLUMETRICS)
- MENU_ITEM_EDIT_CALLBACK(bool, MSG_VOLUMETRIC_ENABLED, &parser.volumetric_enabled, planner.calculate_volumetric_multipliers);
+ EDIT_ITEM(bool, MSG_VOLUMETRIC_ENABLED, &parser.volumetric_enabled, planner.calculate_volumetric_multipliers);
if (parser.volumetric_enabled) {
#if EXTRUDERS == 1
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM, &planner.filament_size[0], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
+ EDIT_ITEM_FAST(float43, MSG_FILAMENT_DIAM, &planner.filament_size[0], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
#else // EXTRUDERS > 1
- #define EDIT_FIL_DIAM(N) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E##N, &planner.filament_size[N-1], 1.5f, 3.25f, planner.calculate_volumetric_multipliers)
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM, &planner.filament_size[active_extruder], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
+ #define EDIT_FIL_DIAM(N) EDIT_ITEM_FAST(float43, MSG_FILAMENT_DIAM_E##N, &planner.filament_size[N], 1.5f, 3.25f, planner.calculate_volumetric_multipliers)
+ EDIT_ITEM_FAST(float43, MSG_FILAMENT_DIAM, &planner.filament_size[active_extruder], 1.5f, 3.25f, planner.calculate_volumetric_multipliers);
+ EDIT_FIL_DIAM(0);
EDIT_FIL_DIAM(1);
- EDIT_FIL_DIAM(2);
#if EXTRUDERS > 2
- EDIT_FIL_DIAM(3);
+ EDIT_FIL_DIAM(2);
#if EXTRUDERS > 3
- EDIT_FIL_DIAM(4);
+ EDIT_FIL_DIAM(3);
#if EXTRUDERS > 4
- EDIT_FIL_DIAM(5);
+ EDIT_FIL_DIAM(4);
#if EXTRUDERS > 5
- EDIT_FIL_DIAM(6);
+ EDIT_FIL_DIAM(5);
#endif // EXTRUDERS > 5
#endif // EXTRUDERS > 4
#endif // EXTRUDERS > 3
@@ -177,20 +165,20 @@ void menu_backlash();
;
#if EXTRUDERS == 1
- MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD, &fc_settings[0].unload_length, 0, extrude_maxlength);
+ EDIT_ITEM_FAST(float3, MSG_FILAMENT_UNLOAD, &fc_settings[0].unload_length, 0, extrude_maxlength);
#elif EXTRUDERS > 1
- #define EDIT_FIL_UNLOAD(N) MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E##N, &fc_settings[N-1].unload_length, 0, extrude_maxlength)
- MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD, &fc_settings[active_extruder].unload_length, 0, extrude_maxlength);
+ #define EDIT_FIL_UNLOAD(N) EDIT_ITEM_FAST(float3, MSG_FILAMENTUNLOAD_E##N, &fc_settings[N].unload_length, 0, extrude_maxlength)
+ EDIT_ITEM_FAST(float3, MSG_FILAMENT_UNLOAD, &fc_settings[active_extruder].unload_length, 0, extrude_maxlength);
+ EDIT_FIL_UNLOAD(0);
EDIT_FIL_UNLOAD(1);
- EDIT_FIL_UNLOAD(2);
#if EXTRUDERS > 2
- EDIT_FIL_UNLOAD(3);
+ EDIT_FIL_UNLOAD(2);
#if EXTRUDERS > 3
- EDIT_FIL_UNLOAD(4);
+ EDIT_FIL_UNLOAD(3);
#if EXTRUDERS > 4
- EDIT_FIL_UNLOAD(5);
+ EDIT_FIL_UNLOAD(4);
#if EXTRUDERS > 5
- EDIT_FIL_UNLOAD(6);
+ EDIT_FIL_UNLOAD(5);
#endif // EXTRUDERS > 5
#endif // EXTRUDERS > 4
#endif // EXTRUDERS > 3
@@ -198,20 +186,20 @@ void menu_backlash();
#endif // EXTRUDERS > 1
#if EXTRUDERS == 1
- MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD, &fc_settings[0].load_length, 0, extrude_maxlength);
+ EDIT_ITEM_FAST(float3, MSG_FILAMENT_LOAD, &fc_settings[0].load_length, 0, extrude_maxlength);
#elif EXTRUDERS > 1
- #define EDIT_FIL_LOAD(N) MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E##N, &fc_settings[N-1].load_length, 0, extrude_maxlength)
- MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD, &fc_settings[active_extruder].load_length, 0, extrude_maxlength);
+ #define EDIT_FIL_LOAD(N) EDIT_ITEM_FAST(float3, MSG_FILAMENTLOAD_E##N, &fc_settings[N].load_length, 0, extrude_maxlength)
+ EDIT_ITEM_FAST(float3, MSG_FILAMENT_LOAD, &fc_settings[active_extruder].load_length, 0, extrude_maxlength);
+ EDIT_FIL_LOAD(0);
EDIT_FIL_LOAD(1);
- EDIT_FIL_LOAD(2);
#if EXTRUDERS > 2
- EDIT_FIL_LOAD(3);
+ EDIT_FIL_LOAD(2);
#if EXTRUDERS > 3
- EDIT_FIL_LOAD(4);
+ EDIT_FIL_LOAD(3);
#if EXTRUDERS > 4
- EDIT_FIL_LOAD(5);
+ EDIT_FIL_LOAD(4);
#if EXTRUDERS > 5
- EDIT_FIL_LOAD(6);
+ EDIT_FIL_LOAD(5);
#endif // EXTRUDERS > 5
#endif // EXTRUDERS > 4
#endif // EXTRUDERS > 3
@@ -220,7 +208,7 @@ void menu_backlash();
#endif
#if ENABLED(FILAMENT_RUNOUT_SENSOR) && FILAMENT_RUNOUT_DISTANCE_MM
- MENU_ITEM_EDIT_CALLBACK(float3, MSG_RUNOUT_DISTANCE_MM, &lcd_runout_distance_mm, 1, 30, []{
+ EDIT_ITEM(float3, MSG_RUNOUT_DISTANCE_MM, &lcd_runout_distance_mm, 1, 30, []{
runout.set_runout_distance(lcd_runout_distance_mm);
});
#endif
@@ -280,9 +268,10 @@ void menu_backlash();
PID_PARAM(Kd, e) = scalePID_d(raw_Kd);
thermalManager.updatePID();
}
+
#define _DEFINE_PIDTEMP_BASE_FUNCS(N) \
- void copy_and_scalePID_i_E ## N() { copy_and_scalePID_i(N); } \
- void copy_and_scalePID_d_E ## N() { copy_and_scalePID_d(N); }
+ void copy_and_scalePID_i_E##N() { copy_and_scalePID_i(N); } \
+ void copy_and_scalePID_d_E##N() { copy_and_scalePID_d(N); }
#else
@@ -293,30 +282,28 @@ void menu_backlash();
#if ENABLED(PID_AUTOTUNE_MENU)
#define DEFINE_PIDTEMP_FUNCS(N) \
_DEFINE_PIDTEMP_BASE_FUNCS(N); \
- void lcd_autotune_callback_E ## N() { _lcd_autotune(N); } //
+ void lcd_autotune_callback_E##N() { _lcd_autotune(N); } //
#else
#define DEFINE_PIDTEMP_FUNCS(N) _DEFINE_PIDTEMP_BASE_FUNCS(N); //
#endif
#if HOTENDS
DEFINE_PIDTEMP_FUNCS(0);
- #if ENABLED(PID_PARAMS_PER_HOTEND)
- #if HOTENDS > 1
- DEFINE_PIDTEMP_FUNCS(1);
- #if HOTENDS > 2
- DEFINE_PIDTEMP_FUNCS(2);
- #if HOTENDS > 3
- DEFINE_PIDTEMP_FUNCS(3);
- #if HOTENDS > 4
- DEFINE_PIDTEMP_FUNCS(4);
- #if HOTENDS > 5
- DEFINE_PIDTEMP_FUNCS(5);
- #endif // HOTENDS > 5
- #endif // HOTENDS > 4
- #endif // HOTENDS > 3
- #endif // HOTENDS > 2
- #endif // HOTENDS > 1
- #endif // PID_PARAMS_PER_HOTEND
+ #if HOTENDS > 1 && ENABLED(PID_PARAMS_PER_HOTEND)
+ DEFINE_PIDTEMP_FUNCS(1);
+ #if HOTENDS > 2
+ DEFINE_PIDTEMP_FUNCS(2);
+ #if HOTENDS > 3
+ DEFINE_PIDTEMP_FUNCS(3);
+ #if HOTENDS > 4
+ DEFINE_PIDTEMP_FUNCS(4);
+ #if HOTENDS > 5
+ DEFINE_PIDTEMP_FUNCS(5);
+ #endif // HOTENDS > 5
+ #endif // HOTENDS > 4
+ #endif // HOTENDS > 3
+ #endif // HOTENDS > 2
+ #endif // HOTENDS > 1 && PID_PARAMS_PER_HOTEND
#endif // HOTENDS
#define SHOW_MENU_ADVANCED_TEMPERATURE ((ENABLED(AUTOTEMP) && HAS_TEMP_HOTEND) || EITHER(PID_AUTOTUNE_MENU, PID_EDIT_MENU))
@@ -328,15 +315,15 @@ void menu_backlash();
void menu_advanced_temperature() {
START_MENU();
- MENU_BACK(MSG_ADVANCED_SETTINGS);
+ BACK_ITEM(MSG_ADVANCED_SETTINGS);
//
// Autotemp, Min, Max, Fact
//
#if ENABLED(AUTOTEMP) && HAS_TEMP_HOTEND
- MENU_ITEM_EDIT(bool, MSG_AUTOTEMP, &planner.autotemp_enabled);
- MENU_ITEM_EDIT(float3, MSG_MIN, &planner.autotemp_min, 0, float(HEATER_0_MAXTEMP) - 15);
- MENU_ITEM_EDIT(float3, MSG_MAX, &planner.autotemp_max, 0, float(HEATER_0_MAXTEMP) - 15);
- MENU_ITEM_EDIT(float52, MSG_FACTOR, &planner.autotemp_factor, 0, 10);
+ EDIT_ITEM(bool, MSG_AUTOTEMP, &planner.autotemp_enabled);
+ EDIT_ITEM(float3, MSG_MIN, &planner.autotemp_min, 0, float(HEATER_0_MAXTEMP) - 15);
+ EDIT_ITEM(float3, MSG_MAX, &planner.autotemp_max, 0, float(HEATER_0_MAXTEMP) - 15);
+ EDIT_ITEM(float52, MSG_FACTOR, &planner.autotemp_factor, 0, 10);
#endif
//
@@ -347,55 +334,61 @@ void menu_backlash();
// PID-P E4, PID-I E4, PID-D E4, PID-C E4, PID Autotune E4
// PID-P E5, PID-I E5, PID-D E5, PID-C E5, PID Autotune E5
//
- #if ENABLED(PID_EDIT_MENU)
- #define _PID_BASE_MENU_ITEMS(ELABEL, eindex) \
- raw_Ki = unscalePID_i(PID_PARAM(Ki, eindex)); \
- raw_Kd = unscalePID_d(PID_PARAM(Kd, eindex)); \
- MENU_ITEM_EDIT(float52sign, MSG_PID_P ELABEL, &PID_PARAM(Kp, eindex), 1, 9990); \
- MENU_ITEM_EDIT_CALLBACK(float52sign, MSG_PID_I ELABEL, &raw_Ki, 0.01f, 9990, copy_and_scalePID_i_E ## eindex); \
- MENU_ITEM_EDIT_CALLBACK(float52sign, MSG_PID_D ELABEL, &raw_Kd, 1, 9990, copy_and_scalePID_d_E ## eindex)
+ #if EITHER(PID_EDIT_MENU, PID_AUTOTUNE_MENU)
+ #if HOTENDS > 1 && ENABLED(PID_PARAMS_PER_HOTEND)
+ #define PID_LABEL(MSG,N) MSG##_E##N
+ #else
+ #define PID_LABEL(MSG,N) MSG
+ #endif
+ #endif
+
+ #if ENABLED(PID_EDIT_MENU)
+ #define _PID_BASE_MENU_ITEMS(N) \
+ raw_Ki = unscalePID_i(PID_PARAM(Ki, N)); \
+ raw_Kd = unscalePID_d(PID_PARAM(Kd, N)); \
+ EDIT_ITEM(float52sign, PID_LABEL(MSG_PID_P,N), &PID_PARAM(Kp, N), 1, 9990); \
+ EDIT_ITEM(float52sign, PID_LABEL(MSG_PID_I,N), &raw_Ki, 0.01f, 9990, [](){ copy_and_scalePID_i(N); }); \
+ EDIT_ITEM(float52sign, PID_LABEL(MSG_PID_D,N), &raw_Kd, 1, 9990, [](){ copy_and_scalePID_d(N); })
#if ENABLED(PID_EXTRUSION_SCALING)
- #define _PID_EDIT_MENU_ITEMS(ELABEL, eindex) \
- _PID_BASE_MENU_ITEMS(ELABEL, eindex); \
- MENU_ITEM_EDIT(float3, MSG_PID_C ELABEL, &PID_PARAM(Kc, eindex), 1, 9990)
+ #define _PID_EDIT_MENU_ITEMS(N) \
+ _PID_BASE_MENU_ITEMS(N); \
+ EDIT_ITEM(float3, PID_LABEL(MSG_PID_C,N), &PID_PARAM(Kc, N), 1, 9990)
#else
- #define _PID_EDIT_MENU_ITEMS(ELABEL, eindex) _PID_BASE_MENU_ITEMS(ELABEL, eindex)
+ #define _PID_EDIT_MENU_ITEMS(N) _PID_BASE_MENU_ITEMS(N)
#endif
#else
- #define _PID_EDIT_MENU_ITEMS(ELABEL, eindex) NOOP
+ #define _PID_EDIT_MENU_ITEMS(N) NOOP
#endif
#if ENABLED(PID_AUTOTUNE_MENU)
- #define PID_EDIT_MENU_ITEMS(ELABEL, eindex) \
- _PID_EDIT_MENU_ITEMS(ELABEL, eindex); \
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_PID_AUTOTUNE ELABEL, &autotune_temp[eindex], 150, heater_maxtemp[eindex] - 15, lcd_autotune_callback_E ## eindex)
+ #define PID_EDIT_MENU_ITEMS(N) \
+ _PID_EDIT_MENU_ITEMS(N); \
+ EDIT_ITEM_FAST(int3, PID_LABEL(MSG_AUTOTUNE_PID,N), &autotune_temp[N], 150, heater_maxtemp[N] - 15, [](){ _lcd_autotune(N); })
#else
- #define PID_EDIT_MENU_ITEMS(ELABEL, eindex) _PID_EDIT_MENU_ITEMS(ELABEL, eindex)
+ #define PID_EDIT_MENU_ITEMS(N) _PID_EDIT_MENU_ITEMS(N)
#endif
- #if ENABLED(PID_PARAMS_PER_HOTEND) && HOTENDS > 1
- PID_EDIT_MENU_ITEMS(" " MSG_E1, 0);
- PID_EDIT_MENU_ITEMS(" " MSG_E2, 1);
+ PID_EDIT_MENU_ITEMS(0);
+ #if HOTENDS > 1 && ENABLED(PID_PARAMS_PER_HOTEND)
+ PID_EDIT_MENU_ITEMS(1);
#if HOTENDS > 2
- PID_EDIT_MENU_ITEMS(" " MSG_E3, 2);
+ PID_EDIT_MENU_ITEMS(2);
#if HOTENDS > 3
- PID_EDIT_MENU_ITEMS(" " MSG_E4, 3);
+ PID_EDIT_MENU_ITEMS(3);
#if HOTENDS > 4
- PID_EDIT_MENU_ITEMS(" " MSG_E5, 4);
+ PID_EDIT_MENU_ITEMS(4);
#if HOTENDS > 5
- PID_EDIT_MENU_ITEMS(" " MSG_E6, 5);
+ PID_EDIT_MENU_ITEMS(5);
#endif // HOTENDS > 5
#endif // HOTENDS > 4
#endif // HOTENDS > 3
#endif // HOTENDS > 2
- #else // !PID_PARAMS_PER_HOTEND || HOTENDS == 1
- PID_EDIT_MENU_ITEMS("", 0);
- #endif // !PID_PARAMS_PER_HOTEND || HOTENDS == 1
+ #endif // HOTENDS > 1 && PID_PARAMS_PER_HOTEND
END_MENU();
}
@@ -404,86 +397,67 @@ void menu_backlash();
#if DISABLED(SLIM_LCD_MENUS)
- void _reset_acceleration_rates() { planner.reset_acceleration_rates(); }
- #if ENABLED(DISTINCT_E_FACTORS)
- void _reset_e_acceleration_rate(const uint8_t e) { if (e == active_extruder) _reset_acceleration_rates(); }
- void _reset_e0_acceleration_rate() { _reset_e_acceleration_rate(0); }
- void _reset_e1_acceleration_rate() { _reset_e_acceleration_rate(1); }
- #if E_STEPPERS > 2
- void _reset_e2_acceleration_rate() { _reset_e_acceleration_rate(2); }
- #if E_STEPPERS > 3
- void _reset_e3_acceleration_rate() { _reset_e_acceleration_rate(3); }
- #if E_STEPPERS > 4
- void _reset_e4_acceleration_rate() { _reset_e_acceleration_rate(4); }
- #if E_STEPPERS > 5
- void _reset_e5_acceleration_rate() { _reset_e_acceleration_rate(5); }
- #endif // E_STEPPERS > 5
- #endif // E_STEPPERS > 4
- #endif // E_STEPPERS > 3
- #endif // E_STEPPERS > 2
- #endif
-
- void _planner_refresh_positioning() { planner.refresh_positioning(); }
#if ENABLED(DISTINCT_E_FACTORS)
- void _planner_refresh_e_positioning(const uint8_t e) {
+ inline void _reset_e_acceleration_rate(const uint8_t e) { if (e == active_extruder) planner.reset_acceleration_rates(); }
+ inline void _planner_refresh_e_positioning(const uint8_t e) {
if (e == active_extruder)
- _planner_refresh_positioning();
+ planner.refresh_positioning();
else
planner.steps_to_mm[E_AXIS_N(e)] = 1.0f / planner.settings.axis_steps_per_mm[E_AXIS_N(e)];
}
- void _planner_refresh_e0_positioning() { _planner_refresh_e_positioning(0); }
- void _planner_refresh_e1_positioning() { _planner_refresh_e_positioning(1); }
- #if E_STEPPERS > 2
- void _planner_refresh_e2_positioning() { _planner_refresh_e_positioning(2); }
- #if E_STEPPERS > 3
- void _planner_refresh_e3_positioning() { _planner_refresh_e_positioning(3); }
- #if E_STEPPERS > 4
- void _planner_refresh_e4_positioning() { _planner_refresh_e_positioning(4); }
- #if E_STEPPERS > 5
- void _planner_refresh_e5_positioning() { _planner_refresh_e_positioning(5); }
- #endif // E_STEPPERS > 5
- #endif // E_STEPPERS > 4
- #endif // E_STEPPERS > 3
- #endif // E_STEPPERS > 2
#endif
// M203 / M205 Velocity options
void menu_advanced_velocity() {
START_MENU();
- MENU_BACK(MSG_ADVANCED_SETTINGS);
+ BACK_ITEM(MSG_ADVANCED_SETTINGS);
// M203 Max Feedrate
- #define EDIT_VMAX(N) MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_##N, &planner.settings.max_feedrate_mm_s[_AXIS(N)], 1, 999)
+ constexpr xyze_feedrate_t max_fr_edit =
+ #ifdef MAX_FEEDRATE_EDIT_VALUES
+ MAX_FEEDRATE_EDIT_VALUES
+ #elif ENABLED(LIMITED_MAX_FR_EDITING)
+ DEFAULT_MAX_FEEDRATE
+ #else
+ { 999, 999, 999, 999 }
+ #endif
+ ;
+ #if ENABLED(LIMITED_MAX_FR_EDITING) && !defined(MAX_FEEDRATE_EDIT_VALUES)
+ const xyze_feedrate_t max_fr_edit_scaled = max_fr_edit * 2;
+ #else
+ const xyze_feedrate_t &max_fr_edit_scaled = max_fr_edit;
+ #endif
+ #define EDIT_VMAX(N) EDIT_ITEM_FAST(float3, MSG_VMAX_##N, &planner.settings.max_feedrate_mm_s[_AXIS(N)], 1, max_fr_edit_scaled[_AXIS(N)])
EDIT_VMAX(A);
EDIT_VMAX(B);
EDIT_VMAX(C);
#if ENABLED(DISTINCT_E_FACTORS)
- #define EDIT_VMAX_E(N) MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E##N, &planner.settings.max_feedrate_mm_s[E_AXIS_N(N-1)], 1, 999)
- MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E, &planner.settings.max_feedrate_mm_s[E_AXIS_N(active_extruder)], 1, 999);
+ #define EDIT_VMAX_E(N) EDIT_ITEM_FAST(float3, MSG_VMAX_E##N, &planner.settings.max_feedrate_mm_s[E_AXIS_N(N)], 1, max_fr_edit_scaled.e)
+ EDIT_ITEM_FAST(float3, MSG_VMAX_E, &planner.settings.max_feedrate_mm_s[E_AXIS_N(active_extruder)], 1, max_fr_edit_scaled.e);
+ EDIT_VMAX_E(0);
EDIT_VMAX_E(1);
- EDIT_VMAX_E(2);
#if E_STEPPERS > 2
- EDIT_VMAX_E(3);
+ EDIT_VMAX_E(2);
#if E_STEPPERS > 3
- EDIT_VMAX_E(4);
+ EDIT_VMAX_E(3);
#if E_STEPPERS > 4
- EDIT_VMAX_E(5);
+ EDIT_VMAX_E(4);
#if E_STEPPERS > 5
- EDIT_VMAX_E(6);
+ EDIT_VMAX_E(5);
#endif // E_STEPPERS > 5
#endif // E_STEPPERS > 4
#endif // E_STEPPERS > 3
#endif // E_STEPPERS > 2
#elif E_STEPPERS
- MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E, &planner.settings.max_feedrate_mm_s[E_AXIS], 1, 999);
+ EDIT_ITEM_FAST(float3, MSG_VMAX_E, &planner.settings.max_feedrate_mm_s[E_AXIS], 1, max_fr_edit_scaled.e);
#endif
// M205 S Min Feedrate
- MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMIN, &planner.settings.min_feedrate_mm_s, 0, 999);
+ EDIT_ITEM_FAST(float3, MSG_VMIN, &planner.settings.min_feedrate_mm_s, 0, 999);
// M205 T Min Travel Feedrate
- MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VTRAV_MIN, &planner.settings.min_travel_feedrate_mm_s, 0, 999);
+ EDIT_ITEM_FAST(float3, MSG_VTRAV_MIN, &planner.settings.min_travel_feedrate_mm_s, 0, 999);
END_MENU();
}
@@ -491,43 +465,59 @@ void menu_backlash();
// M201 / M204 Accelerations
void menu_advanced_acceleration() {
START_MENU();
- MENU_BACK(MSG_ADVANCED_SETTINGS);
+ BACK_ITEM(MSG_ADVANCED_SETTINGS);
+ static float max_accel = _MAX(planner.settings.max_acceleration_mm_per_s2[A_AXIS], planner.settings.max_acceleration_mm_per_s2[B_AXIS], planner.settings.max_acceleration_mm_per_s2[C_AXIS]);
// M204 P Acceleration
- MENU_MULTIPLIER_ITEM_EDIT(float5_25, MSG_ACC, &planner.settings.acceleration, 25, 99000);
+ EDIT_ITEM_FAST(float5_25, MSG_ACC, &planner.settings.acceleration, 25, max_accel);
// M204 R Retract Acceleration
- MENU_MULTIPLIER_ITEM_EDIT(float5, MSG_A_RETRACT, &planner.settings.retract_acceleration, 100, 99000);
+ EDIT_ITEM_FAST(float5, MSG_A_RETRACT, &planner.settings.retract_acceleration, 100, max_accel);
// M204 T Travel Acceleration
- MENU_MULTIPLIER_ITEM_EDIT(float5_25, MSG_A_TRAVEL, &planner.settings.travel_acceleration, 25, 99000);
+ EDIT_ITEM_FAST(float5_25, MSG_A_TRAVEL, &planner.settings.travel_acceleration, 25, max_accel);
// M201 settings
- #define EDIT_AMAX(Q,L) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(long5_25, MSG_AMAX MSG_##Q, &planner.settings.max_acceleration_mm_per_s2[_AXIS(Q)], L, 99000, _reset_acceleration_rates)
+ constexpr xyze_ulong_t max_accel_edit =
+ #ifdef MAX_ACCEL_EDIT_VALUES
+ MAX_ACCEL_EDIT_VALUES
+ #elif ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ DEFAULT_MAX_ACCELERATION
+ #else
+ { 99000, 99000, 99000, 99000 }
+ #endif
+ ;
+ #if ENABLED(LIMITED_MAX_ACCEL_EDITING) && !defined(MAX_ACCEL_EDIT_VALUES)
+ const xyze_ulong_t max_accel_edit_scaled = max_accel_edit * 2;
+ #else
+ const xyze_ulong_t &max_accel_edit_scaled = max_accel_edit;
+ #endif
+
+ #define EDIT_AMAX(Q,L) EDIT_ITEM_FAST(long5_25, MSG_AMAX_##Q, &planner.settings.max_acceleration_mm_per_s2[_AXIS(Q)], L, max_accel_edit_scaled[_AXIS(Q)], [](){ planner.reset_acceleration_rates(); })
EDIT_AMAX(A,100);
EDIT_AMAX(B,100);
EDIT_AMAX(C, 10);
#if ENABLED(DISTINCT_E_FACTORS)
- #define EDIT_AMAX_E(N,E) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_E##N, &planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(E)], 100, 99000, _reset_e##E##_acceleration_rate)
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_E, &planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(active_extruder)], 100, 99000, _reset_acceleration_rates);
- EDIT_AMAX_E(1,0);
- EDIT_AMAX_E(2,1);
+ #define EDIT_AMAX_E(N) EDIT_ITEM_FAST(long5_25, MSG_AMAX_E##N, &planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(N)], 100, max_accel_edit_scaled.e, [](){ _reset_e_acceleration_rate(N); })
+ EDIT_ITEM_FAST(long5_25, MSG_AMAX_E, &planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(active_extruder)], 100, max_accel_edit_scaled.e, [](){ planner.reset_acceleration_rates(); });
+ EDIT_AMAX_E(0);
+ EDIT_AMAX_E(1);
#if E_STEPPERS > 2
- EDIT_AMAX_E(3,2);
+ EDIT_AMAX_E(2);
#if E_STEPPERS > 3
- EDIT_AMAX_E(4,3);
+ EDIT_AMAX_E(3);
#if E_STEPPERS > 4
- EDIT_AMAX_E(5,4);
+ EDIT_AMAX_E(4);
#if E_STEPPERS > 5
- EDIT_AMAX_E(6,5);
+ EDIT_AMAX_E(5);
#endif // E_STEPPERS > 5
#endif // E_STEPPERS > 4
#endif // E_STEPPERS > 3
#endif // E_STEPPERS > 2
#elif E_STEPPERS
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_E, &planner.settings.max_acceleration_mm_per_s2[E_AXIS], 100, 99000, _reset_acceleration_rates);
+ EDIT_ITEM_FAST(long5_25, MSG_AMAX_E, &planner.settings.max_acceleration_mm_per_s2[E_AXIS], 100, max_accel_edit_scaled.e, [](){ planner.reset_acceleration_rates(); });
#endif
END_MENU();
@@ -536,26 +526,35 @@ void menu_backlash();
// M205 Jerk
void menu_advanced_jerk() {
START_MENU();
- MENU_BACK(MSG_ADVANCED_SETTINGS);
+ BACK_ITEM(MSG_ADVANCED_SETTINGS);
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
#if ENABLED(LIN_ADVANCE)
- MENU_ITEM_EDIT_CALLBACK(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.01f, 0.3f, planner.recalculate_max_e_jerk);
+ EDIT_ITEM(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.001f, 0.3f, planner.recalculate_max_e_jerk);
#else
- MENU_ITEM_EDIT(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.01f, 0.3f);
+ EDIT_ITEM(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.001f, 0.5f);
#endif
#endif
#if HAS_CLASSIC_JERK
- #define EDIT_JERK(N) MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_V##N##_JERK, &planner.max_jerk[_AXIS(N)], 1, 990)
+ constexpr xyze_float_t max_jerk_edit =
+ #ifdef MAX_ACCEL_EDIT_VALUES
+ MAX_JERK_EDIT_VALUES
+ #elif ENABLED(LIMITED_JERK_EDITING)
+ { (DEFAULT_XJERK) * 2, (DEFAULT_YJERK) * 2, (DEFAULT_ZJERK) * 2, (DEFAULT_EJERK) * 2 }
+ #else
+ { 990, 990, 990, 990 }
+ #endif
+ ;
+ #define EDIT_JERK(N) EDIT_ITEM_FAST(float3, MSG_V##N##_JERK, &planner.max_jerk[_AXIS(N)], 1, max_jerk_edit[_AXIS(N)])
EDIT_JERK(A);
EDIT_JERK(B);
#if ENABLED(DELTA)
EDIT_JERK(C);
#else
- MENU_MULTIPLIER_ITEM_EDIT(float52sign, MSG_VC_JERK, &planner.max_jerk.c, 0.1f, 990);
+ EDIT_ITEM_FAST(float52sign, MSG_VC_JERK, &planner.max_jerk.c, 0.1f, max_jerk_edit.c);
#endif
- #if !BOTH(JUNCTION_DEVIATION, LIN_ADVANCE)
- EDIT_JERK(E);
+ #if HAS_CLASSIC_E_JERK
+ EDIT_ITEM_FAST(float52sign, MSG_VE_JERK, &planner.max_jerk.e, 0.1f, max_jerk_edit.e);
#endif
#endif
@@ -565,32 +564,32 @@ void menu_backlash();
// M92 Steps-per-mm
void menu_advanced_steps_per_mm() {
START_MENU();
- MENU_BACK(MSG_ADVANCED_SETTINGS);
+ BACK_ITEM(MSG_ADVANCED_SETTINGS);
- #define EDIT_QSTEPS(Q) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float51, MSG_##Q##STEPS, &planner.settings.axis_steps_per_mm[_AXIS(Q)], 5, 9999, _planner_refresh_positioning)
+ #define EDIT_QSTEPS(Q) EDIT_ITEM_FAST(float51, MSG_##Q##_STEPS, &planner.settings.axis_steps_per_mm[_AXIS(Q)], 5, 9999, [](){ planner.refresh_positioning(); })
EDIT_QSTEPS(A);
EDIT_QSTEPS(B);
EDIT_QSTEPS(C);
#if ENABLED(DISTINCT_E_FACTORS)
- #define EDIT_ESTEPS(N,E) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float51, MSG_E##N##STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(E)], 5, 9999, _planner_refresh_e##E##_positioning)
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float51, MSG_ESTEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(active_extruder)], 5, 9999, _planner_refresh_positioning);
- EDIT_ESTEPS(1,0);
- EDIT_ESTEPS(2,1);
+ #define EDIT_ESTEPS(N) EDIT_ITEM_FAST(float51, MSG_E##N##_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(N)], 5, 9999, [](){ _planner_refresh_e_positioning(N); })
+ EDIT_ITEM_FAST(float51, MSG_E_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(active_extruder)], 5, 9999, [](){ planner.refresh_positioning(); });
+ EDIT_ESTEPS(0);
+ EDIT_ESTEPS(1);
#if E_STEPPERS > 2
- EDIT_ESTEPS(3,2);
+ EDIT_ESTEPS(2);
#if E_STEPPERS > 3
- EDIT_ESTEPS(4,3);
+ EDIT_ESTEPS(3);
#if E_STEPPERS > 4
- EDIT_ESTEPS(5,4);
+ EDIT_ESTEPS(4);
#if E_STEPPERS > 5
- EDIT_ESTEPS(6,5);
+ EDIT_ESTEPS(5);
#endif // E_STEPPERS > 5
#endif // E_STEPPERS > 4
#endif // E_STEPPERS > 3
#endif // E_STEPPERS > 2
#elif E_STEPPERS
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float51, MSG_ESTEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, _planner_refresh_positioning);
+ EDIT_ITEM_FAST(float51, MSG_E_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, [](){ planner.refresh_positioning(); });
#endif
END_MENU();
@@ -602,7 +601,7 @@ void menu_backlash();
static void lcd_init_eeprom_confirm() {
do_select_screen(
- PSTR(MSG_BUTTON_INIT), PSTR(MSG_BUTTON_CANCEL),
+ GET_TEXT(MSG_BUTTON_INIT), GET_TEXT(MSG_BUTTON_CANCEL),
[]{
const bool inited = settings.init_eeprom();
#if HAS_BUZZER
@@ -611,7 +610,7 @@ void menu_backlash();
UNUSED(inited);
},
ui.goto_previous_screen,
- PSTR(MSG_INIT_EEPROM), nullptr, PSTR("?")
+ GET_TEXT(MSG_INIT_EEPROM), nullptr, PSTR("?")
);
}
@@ -624,7 +623,7 @@ void menu_advanced_settings() {
lcd_runout_distance_mm = runout.runout_distance();
#endif
START_MENU();
- MENU_BACK(MSG_CONFIGURATION);
+ BACK_ITEM(MSG_CONFIGURATION);
#if DISABLED(SLIM_LCD_MENUS)
@@ -632,60 +631,64 @@ void menu_advanced_settings() {
//
// Set Home Offsets
//
- MENU_ITEM(function, MSG_SET_HOME_OFFSETS, _lcd_set_home_offsets);
+ ACTION_ITEM(MSG_SET_HOME_OFFSETS, [](){ queue.inject_P(PSTR("M428")); ui.return_to_status(); });
#endif
// M203 / M205 - Feedrate items
- MENU_ITEM(submenu, MSG_VELOCITY, menu_advanced_velocity);
+ SUBMENU(MSG_VELOCITY, menu_advanced_velocity);
// M201 - Acceleration items
- MENU_ITEM(submenu, MSG_ACCELERATION, menu_advanced_acceleration);
+ SUBMENU(MSG_ACCELERATION, menu_advanced_acceleration);
// M205 - Max Jerk
- MENU_ITEM(submenu, MSG_JERK, menu_advanced_jerk);
+ SUBMENU(MSG_JERK, menu_advanced_jerk);
if (!printer_busy()) {
// M92 - Steps Per mm
- MENU_ITEM(submenu, MSG_STEPS_PER_MM, menu_advanced_steps_per_mm);
+ SUBMENU(MSG_STEPS_PER_MM, menu_advanced_steps_per_mm);
}
#endif // !SLIM_LCD_MENUS
#if ENABLED(BACKLASH_GCODE)
- MENU_ITEM(submenu, MSG_BACKLASH, menu_backlash);
+ SUBMENU(MSG_BACKLASH, menu_backlash);
+ #endif
+
+ #if ENABLED(CANCEL_OBJECTS)
+ SUBMENU(MSG_CANCEL_OBJECT, [](){ editable.int8 = -1; ui.goto_screen(menu_cancelobject); });
#endif
#if ENABLED(DAC_STEPPER_CURRENT)
- MENU_ITEM(submenu, MSG_DRIVE_STRENGTH, menu_dac);
+ SUBMENU(MSG_DRIVE_STRENGTH, menu_dac);
#endif
#if HAS_MOTOR_CURRENT_PWM
- MENU_ITEM(submenu, MSG_DRIVE_STRENGTH, menu_pwm);
+ SUBMENU(MSG_DRIVE_STRENGTH, menu_pwm);
#endif
#if HAS_TRINAMIC
- MENU_ITEM(submenu, MSG_TMC_DRIVERS, menu_tmc);
+ SUBMENU(MSG_TMC_DRIVERS, menu_tmc);
#endif
#if SHOW_MENU_ADVANCED_TEMPERATURE
- MENU_ITEM(submenu, MSG_TEMPERATURE, menu_advanced_temperature);
+ SUBMENU(MSG_TEMPERATURE, menu_advanced_temperature);
#endif
#if DISABLED(NO_VOLUMETRICS) || ENABLED(ADVANCED_PAUSE_FEATURE)
- MENU_ITEM(submenu, MSG_FILAMENT, menu_advanced_filament);
+ SUBMENU(MSG_FILAMENT, menu_advanced_filament);
#elif ENABLED(LIN_ADVANCE)
#if EXTRUDERS == 1
- MENU_ITEM_EDIT(float52, MSG_ADVANCE_K, &planner.extruder_advance_K[0], 0, 999);
+ EDIT_ITEM(float52, MSG_ADVANCE_K, &planner.extruder_advance_K[0], 0, 999);
#elif EXTRUDERS > 1
- #define EDIT_ADVANCE_K(N) MENU_ITEM_EDIT(float52, MSG_ADVANCE_K MSG_E##N, &planner.extruder_advance_K[N-1], 0, 999)
+ #define EDIT_ADVANCE_K(N) EDIT_ITEM(float52, MSG_ADVANCE_K_E##N, &planner.extruder_advance_K[N], 0, 999)
+ EDIT_ADVANCE_K(0);
EDIT_ADVANCE_K(1);
- EDIT_ADVANCE_K(2);
#if EXTRUDERS > 2
- EDIT_ADVANCE_K(3);
+ EDIT_ADVANCE_K(2);
#if EXTRUDERS > 3
- EDIT_ADVANCE_K(4);
+ EDIT_ADVANCE_K(3);
#if EXTRUDERS > 4
- EDIT_ADVANCE_K(5);
+ EDIT_ADVANCE_K(4);
#if EXTRUDERS > 5
- EDIT_ADVANCE_K(6);
+ EDIT_ADVANCE_K(5);
#endif // EXTRUDERS > 5
#endif // EXTRUDERS > 4
#endif // EXTRUDERS > 3
@@ -695,12 +698,12 @@ void menu_advanced_settings() {
// M540 S - Abort on endstop hit when SD printing
#if ENABLED(SD_ABORT_ON_ENDSTOP_HIT)
- MENU_ITEM_EDIT(bool, MSG_ENDSTOP_ABORT, &planner.abort_on_endstop_hit);
+ EDIT_ITEM(bool, MSG_ENDSTOP_ABORT, &planner.abort_on_endstop_hit);
#endif
#if ENABLED(SD_FIRMWARE_UPDATE)
bool sd_update_state = settings.sd_update_status();
- MENU_ITEM_EDIT_CALLBACK(bool, MSG_MEDIA_UPDATE, &sd_update_state, []{
+ EDIT_ITEM(bool, MSG_MEDIA_UPDATE, &sd_update_state, []{
//
// Toggle the SD Firmware Update state in EEPROM
//
@@ -715,7 +718,7 @@ void menu_advanced_settings() {
#endif
#if ENABLED(EEPROM_SETTINGS) && DISABLED(SLIM_LCD_MENUS)
- MENU_ITEM(submenu, MSG_INIT_EEPROM, lcd_init_eeprom_confirm);
+ SUBMENU(MSG_INIT_EEPROM, lcd_init_eeprom_confirm);
#endif
END_MENU();
diff --git a/Marlin/src/lcd/menu/menu_backlash.cpp b/Marlin/src/lcd/menu/menu_backlash.cpp
index 147c593901f9..cc0b3a2c9925 100644
--- a/Marlin/src/lcd/menu/menu_backlash.cpp
+++ b/Marlin/src/lcd/menu/menu_backlash.cpp
@@ -34,17 +34,17 @@
void menu_backlash() {
START_MENU();
- MENU_BACK(MSG_MAIN);
+ BACK_ITEM(MSG_MAIN);
- MENU_MULTIPLIER_ITEM_EDIT(percent, MSG_BACKLASH_CORRECTION, &backlash.correction, all_off, all_on);
+ EDIT_ITEM_FAST(percent, MSG_BACKLASH_CORRECTION, &backlash.correction, all_off, all_on);
- #define EDIT_BACKLASH_DISTANCE(N) MENU_MULTIPLIER_ITEM_EDIT(float43, MSG_##N, &backlash.distance_mm[_AXIS(N)], 0.0f, 9.9f);
+ #define EDIT_BACKLASH_DISTANCE(N) EDIT_ITEM_FAST(float43, MSG_BACKLASH_##N, &backlash.distance_mm[_AXIS(N)], 0.0f, 9.9f);
EDIT_BACKLASH_DISTANCE(A);
EDIT_BACKLASH_DISTANCE(B);
EDIT_BACKLASH_DISTANCE(C);
#ifdef BACKLASH_SMOOTHING_MM
- MENU_MULTIPLIER_ITEM_EDIT(float43, MSG_BACKLASH_SMOOTHING, &backlash.smoothing_mm, 0.0f, 9.9f);
+ EDIT_ITEM_FAST(float43, MSG_BACKLASH_SMOOTHING, &backlash.smoothing_mm, 0.0f, 9.9f);
#endif
END_MENU();
diff --git a/Marlin/src/lcd/menu/menu_bed_corners.cpp b/Marlin/src/lcd/menu/menu_bed_corners.cpp
index 13441e6f3d36..ac2a68fb362a 100644
--- a/Marlin/src/lcd/menu/menu_bed_corners.cpp
+++ b/Marlin/src/lcd/menu/menu_bed_corners.cpp
@@ -86,7 +86,7 @@ static inline void _lcd_goto_next_corner() {
static inline void menu_level_bed_corners() {
do_select_screen(
- PSTR(MSG_BUTTON_NEXT), PSTR(MSG_BUTTON_DONE),
+ GET_TEXT(MSG_BUTTON_NEXT), GET_TEXT(MSG_BUTTON_DONE),
_lcd_goto_next_corner,
[]{
#if HAS_LEVELING
@@ -94,7 +94,7 @@ static inline void menu_level_bed_corners() {
#endif
ui.goto_previous_screen_no_defer();
},
- PSTR(
+ GET_TEXT(
#if ENABLED(LEVEL_CENTER_TOO)
MSG_LEVEL_BED_NEXT_POINT
#else
diff --git a/Marlin/src/lcd/menu/menu_bed_leveling.cpp b/Marlin/src/lcd/menu/menu_bed_leveling.cpp
index 3155a3418cd3..603338a43399 100644
--- a/Marlin/src/lcd/menu/menu_bed_leveling.cpp
+++ b/Marlin/src/lcd/menu/menu_bed_leveling.cpp
@@ -74,14 +74,14 @@
#if MANUAL_PROBE_HEIGHT > 0 && DISABLED(MESH_BED_LEVELING)
// Display "Done" screen and wait for moves to complete
line_to_z(MANUAL_PROBE_HEIGHT);
- ui.synchronize(PSTR(MSG_LEVEL_BED_DONE));
+ ui.synchronize(GET_TEXT(MSG_LEVEL_BED_DONE));
#endif
ui.goto_previous_screen_no_defer();
#if HAS_BUZZER
ui.completion_feedback();
#endif
}
- if (ui.should_draw()) draw_menu_item_static(LCD_HEIGHT >= 4 ? 1 : 0, PSTR(MSG_LEVEL_BED_DONE));
+ if (ui.should_draw()) draw_menu_item_static(LCD_HEIGHT >= 4 ? 1 : 0, GET_TEXT(MSG_LEVEL_BED_DONE));
ui.refresh(LCDVIEW_CALL_REDRAW_NEXT);
}
@@ -121,7 +121,7 @@
// Encoder knob or keypad buttons adjust the Z position
//
if (ui.encoderPosition) {
- const float z = current_position.z + float(int16_t(ui.encoderPosition)) * (MESH_EDIT_Z_STEP);
+ const float z = current_position.z + float(int32_t(ui.encoderPosition)) * (MESH_EDIT_Z_STEP);
line_to_z(constrain(z, -(LCD_PROBE_Z_RANGE) * 0.5f, (LCD_PROBE_Z_RANGE) * 0.5f));
ui.refresh(LCDVIEW_CALL_REDRAW_NEXT);
ui.encoderPosition = 0;
@@ -132,7 +132,7 @@
//
if (ui.should_draw()) {
const float v = current_position.z;
- draw_edit_screen(PSTR(MSG_MOVE_Z), ftostr43sign(v + (v < 0 ? -0.0001f : 0.0001f), '+'));
+ draw_edit_screen(GET_TEXT(MSG_MOVE_Z), ftostr43sign(v + (v < 0 ? -0.0001f : 0.0001f), '+'));
}
}
@@ -142,8 +142,8 @@
void _lcd_level_bed_moving() {
if (ui.should_draw()) {
char msg[10];
- sprintf_P(msg, PSTR("%i / %u"), (int)(manual_probe_index + 1), total_probe_points);
- draw_edit_screen(PSTR(MSG_LEVEL_BED_NEXT_POINT), msg);
+ sprintf_P(msg, PSTR("%i / %u"), int(manual_probe_index + 1), total_probe_points);
+ draw_edit_screen(GET_TEXT(MSG_LEVEL_BED_NEXT_POINT), msg);
}
ui.refresh(LCDVIEW_CALL_NO_REDRAW);
if (!ui.wait_for_bl_move) ui.goto_screen(_lcd_level_bed_get_z);
@@ -169,7 +169,7 @@
// Move to the first probe position
//
void _lcd_level_bed_homing_done() {
- if (ui.should_draw()) draw_edit_screen(PSTR(MSG_LEVEL_BED_WAITING));
+ if (ui.should_draw()) draw_edit_screen(GET_TEXT(MSG_LEVEL_BED_WAITING));
if (ui.use_click()) {
manual_probe_index = 0;
_lcd_level_goto_next_point();
@@ -210,10 +210,10 @@
void menu_edit_mesh() {
static uint8_t xind, yind; // =0
START_MENU();
- MENU_BACK(MSG_BED_LEVELING);
- MENU_ITEM_EDIT(uint8, MSG_MESH_X, &xind, 0, GRID_MAX_POINTS_X - 1);
- MENU_ITEM_EDIT(uint8, MSG_MESH_Y, &yind, 0, GRID_MAX_POINTS_Y - 1);
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_MESH_EDIT_Z, &Z_VALUES(xind, yind), -(LCD_PROBE_Z_RANGE) * 0.5, (LCD_PROBE_Z_RANGE) * 0.5, refresh_planner);
+ BACK_ITEM(MSG_BED_LEVELING);
+ EDIT_ITEM(uint8, MSG_MESH_X, &xind, 0, GRID_MAX_POINTS_X - 1);
+ EDIT_ITEM(uint8, MSG_MESH_Y, &yind, 0, GRID_MAX_POINTS_Y - 1);
+ EDIT_ITEM_FAST(float43, MSG_MESH_EDIT_Z, &Z_VALUES(xind, yind), -(LCD_PROBE_Z_RANGE) * 0.5, (LCD_PROBE_Z_RANGE) * 0.5, refresh_planner);
END_MENU();
}
@@ -235,60 +235,62 @@
*/
void menu_bed_leveling() {
START_MENU();
- MENU_BACK(MSG_MOTION);
+ BACK_ITEM(MSG_MOTION);
const bool is_homed = all_axes_known();
// Auto Home if not using manual probing
#if NONE(PROBE_MANUALLY, MESH_BED_LEVELING)
- if (!is_homed) MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28"));
+ if (!is_homed) GCODES_ITEM(MSG_AUTO_HOME, PSTR("G28"));
#endif
// Level Bed
#if EITHER(PROBE_MANUALLY, MESH_BED_LEVELING)
// Manual leveling uses a guided procedure
- MENU_ITEM(submenu, MSG_LEVEL_BED, _lcd_level_bed_continue);
+ SUBMENU(MSG_LEVEL_BED, _lcd_level_bed_continue);
#else
// Automatic leveling can just run the G-code
- MENU_ITEM(gcode, MSG_LEVEL_BED, is_homed ? PSTR("G29") : PSTR("G28\nG29"));
+ GCODES_ITEM(MSG_LEVEL_BED, is_homed ? PSTR("G29") : PSTR("G28\nG29"));
#endif
#if ENABLED(MESH_EDIT_MENU)
if (leveling_is_valid())
- MENU_ITEM(submenu, MSG_EDIT_MESH, menu_edit_mesh);
+ SUBMENU(MSG_EDIT_MESH, menu_edit_mesh);
#endif
// Homed and leveling is valid? Then leveling can be toggled.
if (is_homed && leveling_is_valid()) {
- bool new_level_state = planner.leveling_active;
- MENU_ITEM_EDIT_CALLBACK(bool, MSG_BED_LEVELING, &new_level_state, _lcd_toggle_bed_leveling);
+ bool show_state = planner.leveling_active;
+ EDIT_ITEM(bool, MSG_BED_LEVELING, &show_state, _lcd_toggle_bed_leveling);
}
// Z Fade Height
#if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float3, MSG_Z_FADE_HEIGHT, &lcd_z_fade_height, 0, 100, _lcd_set_z_fade_height);
+ // Shadow for editing the fade height
+ editable.decimal = planner.z_fade_height;
+ EDIT_ITEM_FAST(float3, MSG_Z_FADE_HEIGHT, &editable.decimal, 0, 100, [](){ set_z_fade_height(editable.decimal); });
#endif
//
// Mesh Bed Leveling Z-Offset
//
#if ENABLED(MESH_BED_LEVELING)
- MENU_ITEM_EDIT(float43, MSG_BED_Z, &mbl.z_offset, -1, 1);
+ EDIT_ITEM(float43, MSG_BED_Z, &mbl.z_offset, -1, 1);
#endif
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
- MENU_ITEM(submenu, MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset);
+ SUBMENU(MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset);
#elif HAS_BED_PROBE
- MENU_ITEM_EDIT(float52, MSG_ZPROBE_ZOFFSET, &probe_offset.z, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
+ EDIT_ITEM(float52, MSG_ZPROBE_ZOFFSET, &probe_offset.z, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
#endif
#if ENABLED(LEVEL_BED_CORNERS)
- MENU_ITEM(submenu, MSG_LEVEL_CORNERS, _lcd_level_bed_corners);
+ SUBMENU(MSG_LEVEL_CORNERS, _lcd_level_bed_corners);
#endif
#if ENABLED(EEPROM_SETTINGS)
- MENU_ITEM(function, MSG_LOAD_EEPROM, lcd_load_settings);
- MENU_ITEM(function, MSG_STORE_EEPROM, lcd_store_settings);
+ ACTION_ITEM(MSG_LOAD_EEPROM, lcd_load_settings);
+ ACTION_ITEM(MSG_STORE_EEPROM, lcd_store_settings);
#endif
END_MENU();
}
diff --git a/Marlin/src/lcd/menu/menu_cancelobject.cpp b/Marlin/src/lcd/menu/menu_cancelobject.cpp
new file mode 100644
index 000000000000..ccb0e294887b
--- /dev/null
+++ b/Marlin/src/lcd/menu/menu_cancelobject.cpp
@@ -0,0 +1,78 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+//
+// Cancel Object Menu
+//
+
+#include "../../inc/MarlinConfigPre.h"
+
+#if HAS_LCD_MENU && ENABLED(CANCEL_OBJECTS)
+
+#include "menu.h"
+#include "menu_addon.h"
+
+#include "../../feature/cancel_object.h"
+
+static void lcd_cancel_object_confirm() {
+ const int8_t v = editable.int8;
+ const char item_num[] = {
+ ' ',
+ char((v > 9) ? '0' + (v / 10) : ' '),
+ char('0' + (v % 10)),
+ '\0'
+ };
+ do_select_screen_yn(
+ []{
+ cancelable.cancel_object(editable.int8 - 1);
+ #if HAS_BUZZER
+ ui.completion_feedback();
+ #endif
+ },
+ ui.goto_previous_screen,
+ GET_TEXT(MSG_CANCEL_OBJECT), item_num, PSTR("?")
+ );
+}
+
+void menu_cancelobject() {
+ START_MENU();
+ BACK_ITEM(MSG_MAIN);
+
+ // Draw cancelable items in a loop
+ int8_t a = cancelable.active_object;
+ for (int8_t i = -1; i < cancelable.object_count; i++) {
+ if (i == a) continue;
+ int8_t j = i < 0 ? a : i;
+ if (!cancelable.is_canceled(j)) {
+ editable.int8 = j + 1;
+ SUBMENU(MSG_CANCEL_OBJECT, lcd_cancel_object_confirm);
+ MENU_ITEM_ADDON_START(LCD_WIDTH - 2 - (j >= 9));
+ lcd_put_int(editable.int8);
+ MENU_ITEM_ADDON_END();
+ }
+ if (i < 0) SKIP_ITEM();
+ }
+
+ END_MENU();
+}
+
+#endif // HAS_LCD_MENU && CANCEL_OBJECTS
diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp
index 596ab682dca7..62f6f45ce5d0 100644
--- a/Marlin/src/lcd/menu/menu_configuration.cpp
+++ b/Marlin/src/lcd/menu/menu_configuration.cpp
@@ -54,13 +54,6 @@ void menu_advanced_settings();
void menu_delta_calibrate();
#endif
-static void lcd_factory_settings() {
- settings.reset();
- #if HAS_BUZZER
- ui.completion_feedback();
- #endif
-}
-
#if ENABLED(LCD_PROGRESS_BAR_TEST)
#include "../lcdprint.h"
@@ -75,7 +68,7 @@ static void lcd_factory_settings() {
bar_percent += (int8_t)ui.encoderPosition;
LIMIT(bar_percent, 0, 100);
ui.encoderPosition = 0;
- draw_menu_item_static(0, PSTR(MSG_PROGRESS_BAR_TEST), SS_CENTER|SS_INVERT);
+ draw_menu_item_static(0, GET_TEXT(MSG_PROGRESS_BAR_TEST), SS_CENTER|SS_INVERT);
lcd_put_int((LCD_WIDTH) / 2 - 2, LCD_HEIGHT - 2, bar_percent); lcd_put_wchar('%');
lcd_moveto(0, LCD_HEIGHT - 1); ui.draw_progress_bar(bar_percent);
}
@@ -92,10 +85,10 @@ static void lcd_factory_settings() {
void menu_debug() {
START_MENU();
- MENU_BACK(MSG_CONFIGURATION);
+ BACK_ITEM(MSG_CONFIGURATION);
#if ENABLED(LCD_PROGRESS_BAR_TEST)
- MENU_ITEM(submenu, MSG_PROGRESS_BAR_TEST, _progress_bar_test);
+ SUBMENU(MSG_PROGRESS_BAR_TEST, _progress_bar_test);
#endif
END_MENU();
@@ -109,7 +102,7 @@ static void lcd_factory_settings() {
void menu_tool_change() {
START_MENU();
- MENU_BACK(MSG_CONFIGURATION);
+ BACK_ITEM(MSG_CONFIGURATION);
#if ENABLED(TOOLCHANGE_FILAMENT_SWAP)
static constexpr float max_extrude =
#if ENABLED(PREVENT_LENGTHY_EXTRUDE)
@@ -118,12 +111,12 @@ static void lcd_factory_settings() {
500
#endif
;
- MENU_ITEM_EDIT(float3, MSG_FILAMENT_SWAP_LENGTH, &toolchange_settings.swap_length, 0, max_extrude);
- MENU_ITEM_EDIT(float3, MSG_FILAMENT_PURGE_LENGTH, &toolchange_settings.extra_prime, 0, max_extrude);
- MENU_MULTIPLIER_ITEM_EDIT(int4, MSG_SINGLENOZZLE_RETRACT_SPD, &toolchange_settings.retract_speed, 10, 5400);
- MENU_MULTIPLIER_ITEM_EDIT(int4, MSG_SINGLENOZZLE_PRIME_SPD, &toolchange_settings.prime_speed, 10, 5400);
+ EDIT_ITEM(float3, MSG_FILAMENT_SWAP_LENGTH, &toolchange_settings.swap_length, 0, max_extrude);
+ EDIT_ITEM(float3, MSG_FILAMENT_PURGE_LENGTH, &toolchange_settings.extra_prime, 0, max_extrude);
+ EDIT_ITEM_FAST(int4, MSG_SINGLENOZZLE_RETRACT_SPD, &toolchange_settings.retract_speed, 10, 5400);
+ EDIT_ITEM_FAST(int4, MSG_SINGLENOZZLE_PRIME_SPD, &toolchange_settings.prime_speed, 10, 5400);
#endif
- MENU_ITEM_EDIT(float3, MSG_TOOL_CHANGE_ZLIFT, &toolchange_settings.z_raise, 0, 10);
+ EDIT_ITEM(float3, MSG_TOOL_CHANGE_ZLIFT, &toolchange_settings.z_raise, 0, 10);
END_MENU();
}
@@ -143,16 +136,16 @@ static void lcd_factory_settings() {
};
START_MENU();
- MENU_BACK(MSG_CONFIGURATION);
+ BACK_ITEM(MSG_CONFIGURATION);
#if ENABLED(DUAL_X_CARRIAGE)
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float51, MSG_X_OFFSET, &hotend_offset[1].x, float(X2_HOME_POS - 25), float(X2_HOME_POS + 25), _recalc_offsets);
+ EDIT_ITEM_FAST(float51, MSG_X_OFFSET, &hotend_offset[1].x, float(X2_HOME_POS - 25), float(X2_HOME_POS + 25), _recalc_offsets);
#else
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52sign, MSG_X_OFFSET, &hotend_offset[1].x, -99.0, 99.0, _recalc_offsets);
+ EDIT_ITEM_FAST(float52sign, MSG_X_OFFSET, &hotend_offset[1].x, -99.0, 99.0, _recalc_offsets);
#endif
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52sign, MSG_Y_OFFSET, &hotend_offset[1].y, -99.0, 99.0, _recalc_offsets);
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52sign, MSG_Z_OFFSET, &hotend_offset[1].z, Z_PROBE_LOW_POINT, 10.0, _recalc_offsets);
+ EDIT_ITEM_FAST(float52sign, MSG_Y_OFFSET, &hotend_offset[1].y, -99.0, 99.0, _recalc_offsets);
+ EDIT_ITEM_FAST(float52sign, MSG_Z_OFFSET, &hotend_offset[1].z, Z_PROBE_LOW_POINT, 10.0, _recalc_offsets);
#if ENABLED(EEPROM_SETTINGS)
- MENU_ITEM(function, MSG_STORE_EEPROM, lcd_store_settings);
+ ACTION_ITEM(MSG_STORE_EEPROM, lcd_store_settings);
#endif
END_MENU();
}
@@ -162,19 +155,19 @@ static void lcd_factory_settings() {
void menu_idex() {
START_MENU();
- MENU_BACK(MSG_CONFIGURATION);
+ BACK_ITEM(MSG_CONFIGURATION);
- MENU_ITEM(gcode, MSG_IDEX_MODE_AUTOPARK, PSTR("M605 S1\nG28 X\nG1 X100"));
+ GCODES_ITEM(MSG_IDEX_MODE_AUTOPARK, PSTR("M605 S1\nG28 X\nG1 X100"));
const bool need_g28 = !(TEST(axis_known_position, Y_AXIS) && TEST(axis_known_position, Z_AXIS));
- MENU_ITEM(gcode, MSG_IDEX_MODE_DUPLICATE, need_g28
+ GCODES_ITEM(MSG_IDEX_MODE_DUPLICATE, need_g28
? PSTR("M605 S1\nT0\nG28\nM605 S2 X200\nG28 X\nG1 X100") // If Y or Z is not homed, do a full G28 first
: PSTR("M605 S1\nT0\nM605 S2 X200\nG28 X\nG1 X100")
);
- MENU_ITEM(gcode, MSG_IDEX_MODE_MIRRORED_COPY, need_g28
+ GCODES_ITEM(MSG_IDEX_MODE_MIRRORED_COPY, need_g28
? PSTR("M605 S1\nT0\nG28\nM605 S2 X200\nG28 X\nG1 X100\nM605 S3 X200") // If Y or Z is not homed, do a full G28 first
: PSTR("M605 S1\nT0\nM605 S2 X200\nG28 X\nG1 X100\nM605 S3 X200")
);
- MENU_ITEM(gcode, MSG_IDEX_MODE_FULL_CTRL, PSTR("M605 S0\nG28 X"));
+ GCODES_ITEM(MSG_IDEX_MODE_FULL_CTRL, PSTR("M605 S0\nG28 X"));
END_MENU();
}
@@ -202,27 +195,27 @@ static void lcd_factory_settings() {
void menu_bltouch() {
START_MENU();
- MENU_BACK(MSG_CONFIGURATION);
- MENU_ITEM(function, MSG_BLTOUCH_RESET, bltouch._reset);
- MENU_ITEM(function, MSG_BLTOUCH_SELFTEST, bltouch._selftest);
- MENU_ITEM(function, MSG_BLTOUCH_DEPLOY, bltouch._deploy);
- MENU_ITEM(function, MSG_BLTOUCH_STOW, bltouch._stow);
- MENU_ITEM(function, MSG_BLTOUCH_SW_MODE, bltouch._set_SW_mode);
+ BACK_ITEM(MSG_CONFIGURATION);
+ ACTION_ITEM(MSG_BLTOUCH_RESET, bltouch._reset);
+ ACTION_ITEM(MSG_BLTOUCH_SELFTEST, bltouch._selftest);
+ ACTION_ITEM(MSG_BLTOUCH_DEPLOY, bltouch._deploy);
+ ACTION_ITEM(MSG_BLTOUCH_STOW, bltouch._stow);
+ ACTION_ITEM(MSG_BLTOUCH_SW_MODE, bltouch._set_SW_mode);
#if ENABLED(BLTOUCH_LCD_VOLTAGE_MENU)
- MENU_ITEM(submenu, MSG_BLTOUCH_5V_MODE, []{
- do_select_screen(PSTR(MSG_BLTOUCH_5V_MODE), PSTR(MSG_BUTTON_CANCEL), bltouch._set_5V_mode, ui.goto_previous_screen, PSTR(MSG_BLTOUCH_MODE_CHANGE));
+ SUBMENU(MSG_BLTOUCH_5V_MODE, []{
+ do_select_screen(GET_TEXT(MSG_BLTOUCH_5V_MODE), GET_TEXT(MSG_BUTTON_CANCEL), bltouch._set_5V_mode, ui.goto_previous_screen, GET_TEXT(MSG_BLTOUCH_MODE_CHANGE));
});
- MENU_ITEM(submenu, MSG_BLTOUCH_OD_MODE, []{
- do_select_screen(PSTR(MSG_BLTOUCH_OD_MODE), PSTR(MSG_BUTTON_CANCEL), bltouch._set_OD_mode, ui.goto_previous_screen, PSTR(MSG_BLTOUCH_MODE_CHANGE));
+ SUBMENU(MSG_BLTOUCH_OD_MODE, []{
+ do_select_screen(GET_TEXT(MSG_BLTOUCH_OD_MODE), GET_TEXT(MSG_BUTTON_CANCEL), bltouch._set_OD_mode, ui.goto_previous_screen, GET_TEXT(MSG_BLTOUCH_MODE_CHANGE));
});
- MENU_ITEM(function, MSG_BLTOUCH_MODE_STORE, bltouch._mode_store);
- MENU_ITEM(submenu, MSG_BLTOUCH_MODE_STORE_5V, []{
- do_select_screen(PSTR(MSG_BLTOUCH_MODE_STORE_5V), PSTR(MSG_BUTTON_CANCEL), bltouch.mode_conv_5V, ui.goto_previous_screen, PSTR(MSG_BLTOUCH_MODE_CHANGE));
+ ACTION_ITEM(MSG_BLTOUCH_MODE_STORE, bltouch._mode_store);
+ SUBMENU(MSG_BLTOUCH_MODE_STORE_5V, []{
+ do_select_screen(GET_TEXT(MSG_BLTOUCH_MODE_STORE_5V), GET_TEXT(MSG_BUTTON_CANCEL), bltouch.mode_conv_5V, ui.goto_previous_screen, GET_TEXT(MSG_BLTOUCH_MODE_CHANGE));
});
- MENU_ITEM(submenu, MSG_BLTOUCH_MODE_STORE_OD, []{
- do_select_screen(PSTR(MSG_BLTOUCH_MODE_STORE_OD), PSTR(MSG_BUTTON_CANCEL), bltouch.mode_conv_OD, ui.goto_previous_screen, PSTR(MSG_BLTOUCH_MODE_CHANGE));
+ SUBMENU(MSG_BLTOUCH_MODE_STORE_OD, []{
+ do_select_screen(GET_TEXT(MSG_BLTOUCH_MODE_STORE_OD), GET_TEXT(MSG_BUTTON_CANCEL), bltouch.mode_conv_OD, ui.goto_previous_screen, GET_TEXT(MSG_BLTOUCH_MODE_CHANGE));
});
- MENU_ITEM(function, MSG_BLTOUCH_MODE_ECHO, bltouch_report);
+ ACTION_ITEM(MSG_BLTOUCH_MODE_ECHO, bltouch_report);
#endif
END_MENU();
}
@@ -233,11 +226,11 @@ static void lcd_factory_settings() {
void menu_touchmi() {
START_MENU();
ui.defer_status_screen();
- MENU_BACK(MSG_CONFIGURATION);
- MENU_ITEM(gcode, MSG_TOUCHMI_INIT, PSTR("M851 Z0\nG28\nG1 F200 Z0"));
- MENU_ITEM(submenu, MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset);
- MENU_ITEM(gcode, MSG_TOUCHMI_SAVE, PSTR("M500\nG1 F200 Z10"));
- MENU_ITEM(gcode, MSG_TOUCHMI_ZTEST, PSTR("G28\nG1 F200 Z0"));
+ BACK_ITEM(MSG_CONFIGURATION);
+ GCODES_ITEM(MSG_TOUCHMI_INIT, PSTR("M851 Z0\nG28\nG1 F200 Z0"));
+ SUBMENU(MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset);
+ GCODES_ITEM(MSG_TOUCHMI_SAVE, PSTR("M500\nG1 F200 Z10"));
+ GCODES_ITEM(MSG_TOUCHMI_ZTEST, PSTR("G28\nG1 F200 Z0"));
END_MENU();
}
#endif
@@ -250,9 +243,9 @@ static void lcd_factory_settings() {
void menu_case_light() {
START_MENU();
- MENU_BACK(MSG_CONFIGURATION);
- MENU_ITEM_EDIT_CALLBACK(uint8, MSG_CASE_LIGHT_BRIGHTNESS, &case_light_brightness, 0, 255, update_case_light, true);
- MENU_ITEM_EDIT_CALLBACK(bool, MSG_CASE_LIGHT, (bool*)&case_light_on, update_case_light);
+ BACK_ITEM(MSG_CONFIGURATION);
+ EDIT_ITEM(percent, MSG_CASE_LIGHT_BRIGHTNESS, &case_light_brightness, 0, 255, update_case_light, true);
+ EDIT_ITEM(bool, MSG_CASE_LIGHT, (bool*)&case_light_on, update_case_light);
END_MENU();
}
@@ -266,23 +259,23 @@ static void lcd_factory_settings() {
void menu_config_retract() {
START_MENU();
- MENU_BACK(MSG_CONFIGURATION);
+ BACK_ITEM(MSG_CONFIGURATION);
#if ENABLED(FWRETRACT_AUTORETRACT)
- MENU_ITEM_EDIT_CALLBACK(bool, MSG_AUTORETRACT, &fwretract.autoretract_enabled, fwretract.refresh_autoretract);
+ EDIT_ITEM(bool, MSG_AUTORETRACT, &fwretract.autoretract_enabled, fwretract.refresh_autoretract);
#endif
- MENU_ITEM_EDIT(float52sign, MSG_CONTROL_RETRACT, &fwretract.settings.retract_length, 0, 100);
+ EDIT_ITEM(float52sign, MSG_CONTROL_RETRACT, &fwretract.settings.retract_length, 0, 100);
#if EXTRUDERS > 1
- MENU_ITEM_EDIT(float52sign, MSG_CONTROL_RETRACT_SWAP, &fwretract.settings.swap_retract_length, 0, 100);
+ EDIT_ITEM(float52sign, MSG_CONTROL_RETRACT_SWAP, &fwretract.settings.swap_retract_length, 0, 100);
#endif
- MENU_ITEM_EDIT(float3, MSG_CONTROL_RETRACTF, &fwretract.settings.retract_feedrate_mm_s, 1, 999);
- MENU_ITEM_EDIT(float52sign, MSG_CONTROL_RETRACT_ZHOP, &fwretract.settings.retract_zraise, 0, 999);
- MENU_ITEM_EDIT(float52sign, MSG_CONTROL_RETRACT_RECOVER, &fwretract.settings.retract_recover_extra, -100, 100);
+ EDIT_ITEM(float3, MSG_CONTROL_RETRACTF, &fwretract.settings.retract_feedrate_mm_s, 1, 999);
+ EDIT_ITEM(float52sign, MSG_CONTROL_RETRACT_ZHOP, &fwretract.settings.retract_zraise, 0, 999);
+ EDIT_ITEM(float52sign, MSG_CONTROL_RETRACT_RECOVER, &fwretract.settings.retract_recover_extra, -100, 100);
#if EXTRUDERS > 1
- MENU_ITEM_EDIT(float52sign, MSG_CONTROL_RETRACT_RECOVER_SWAP, &fwretract.settings.swap_retract_recover_extra, -100, 100);
+ EDIT_ITEM(float52sign, MSG_CONTROL_RETRACT_RECOVER_SWAP, &fwretract.settings.swap_retract_recover_extra, -100, 100);
#endif
- MENU_ITEM_EDIT(float3, MSG_CONTROL_RETRACT_RECOVERF, &fwretract.settings.retract_recover_feedrate_mm_s, 1, 999);
+ EDIT_ITEM(float3, MSG_CONTROL_RETRACT_RECOVERF, &fwretract.settings.retract_recover_feedrate_mm_s, 1, 999);
#if EXTRUDERS > 1
- MENU_ITEM_EDIT(float3, MSG_CONTROL_RETRACT_RECOVER_SWAPF, &fwretract.settings.swap_retract_recover_feedrate_mm_s, 1, 999);
+ EDIT_ITEM(float3, MSG_CONTROL_RETRACT_RECOVER_SWAPF, &fwretract.settings.swap_retract_recover_feedrate_mm_s, 1, 999);
#endif
END_MENU();
}
@@ -292,36 +285,19 @@ static void lcd_factory_settings() {
#if DISABLED(SLIM_LCD_MENUS)
void _menu_configuration_preheat_settings(const uint8_t material) {
- #if HOTENDS > 5
- #define MINTEMP_ALL _MIN(HEATER_0_MINTEMP, HEATER_1_MINTEMP, HEATER_2_MINTEMP, HEATER_3_MINTEMP, HEATER_4_MINTEMP, HEATER_5_MINTEMP)
- #define MAXTEMP_ALL _MAX(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP)
- #elif HOTENDS > 4
- #define MINTEMP_ALL _MIN(HEATER_0_MINTEMP, HEATER_1_MINTEMP, HEATER_2_MINTEMP, HEATER_3_MINTEMP, HEATER_4_MINTEMP)
- #define MAXTEMP_ALL _MAX(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP)
- #elif HOTENDS > 3
- #define MINTEMP_ALL _MIN(HEATER_0_MINTEMP, HEATER_1_MINTEMP, HEATER_2_MINTEMP, HEATER_3_MINTEMP)
- #define MAXTEMP_ALL _MAX(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP)
- #elif HOTENDS > 2
- #define MINTEMP_ALL _MIN(HEATER_0_MINTEMP, HEATER_1_MINTEMP, HEATER_2_MINTEMP)
- #define MAXTEMP_ALL _MAX(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP)
- #elif HOTENDS > 1
- #define MINTEMP_ALL _MIN(HEATER_0_MINTEMP, HEATER_1_MINTEMP)
- #define MAXTEMP_ALL _MAX(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP)
- #else
- #define MINTEMP_ALL HEATER_0_MINTEMP
- #define MAXTEMP_ALL HEATER_0_MAXTEMP
- #endif
+ #define MINTEMP_ALL _MIN(LIST_N(HOTENDS, HEATER_0_MINTEMP, HEATER_1_MINTEMP, HEATER_2_MINTEMP, HEATER_3_MINTEMP, HEATER_4_MINTEMP, HEATER_5_MINTEMP), 999)
+ #define MAXTEMP_ALL _MAX(LIST_N(HOTENDS, HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP), 0)
START_MENU();
- MENU_BACK(MSG_CONFIGURATION);
- MENU_ITEM_EDIT(percent, MSG_FAN_SPEED, &ui.preheat_fan_speed[material], 0, 255);
+ BACK_ITEM(MSG_CONFIGURATION);
+ EDIT_ITEM(percent, MSG_FAN_SPEED, &ui.preheat_fan_speed[material], 0, 255);
#if HAS_TEMP_HOTEND
- MENU_ITEM_EDIT(int3, MSG_NOZZLE, &ui.preheat_hotend_temp[material], MINTEMP_ALL, MAXTEMP_ALL - 15);
+ EDIT_ITEM(int3, MSG_NOZZLE, &ui.preheat_hotend_temp[material], MINTEMP_ALL, MAXTEMP_ALL - 15);
#endif
#if HAS_HEATED_BED
- MENU_ITEM_EDIT(int3, MSG_BED, &ui.preheat_bed_temp[material], BED_MINTEMP, BED_MAXTEMP - 10);
+ EDIT_ITEM(int3, MSG_BED, &ui.preheat_bed_temp[material], BED_MINTEMP, BED_MAXTEMP - 10);
#endif
#if ENABLED(EEPROM_SETTINGS)
- MENU_ITEM(function, MSG_STORE_EEPROM, lcd_store_settings);
+ ACTION_ITEM(MSG_STORE_EEPROM, lcd_store_settings);
#endif
END_MENU();
}
@@ -333,21 +309,21 @@ static void lcd_factory_settings() {
void menu_configuration() {
START_MENU();
- MENU_BACK(MSG_MAIN);
+ BACK_ITEM(MSG_MAIN);
//
// Debug Menu when certain options are enabled
//
#if HAS_DEBUG_MENU
- MENU_ITEM(submenu, MSG_DEBUG_MENU, menu_debug);
+ SUBMENU(MSG_DEBUG_MENU, menu_debug);
#endif
- MENU_ITEM(submenu, MSG_ADVANCED_SETTINGS, menu_advanced_settings);
+ SUBMENU(MSG_ADVANCED_SETTINGS, menu_advanced_settings);
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
- MENU_ITEM(submenu, MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset);
+ SUBMENU(MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset);
#elif HAS_BED_PROBE
- MENU_ITEM_EDIT(float52, MSG_ZPROBE_ZOFFSET, &probe_offset.z, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
+ EDIT_ITEM(float52, MSG_ZPROBE_ZOFFSET, &probe_offset.z, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
#endif
const bool busy = printer_busy();
@@ -356,23 +332,23 @@ void menu_configuration() {
// Delta Calibration
//
#if EITHER(DELTA_CALIBRATION_MENU, DELTA_AUTO_CALIBRATION)
- MENU_ITEM(submenu, MSG_DELTA_CALIBRATE, menu_delta_calibrate);
+ SUBMENU(MSG_DELTA_CALIBRATE, menu_delta_calibrate);
#endif
#if HAS_HOTEND_OFFSET
- MENU_ITEM(submenu, MSG_OFFSETS_MENU, menu_tool_offsets);
+ SUBMENU(MSG_OFFSETS_MENU, menu_tool_offsets);
#endif
#if ENABLED(DUAL_X_CARRIAGE)
- MENU_ITEM(submenu, MSG_IDEX_MENU, menu_idex);
+ SUBMENU(MSG_IDEX_MENU, menu_idex);
#endif
#if ENABLED(BLTOUCH)
- MENU_ITEM(submenu, MSG_BLTOUCH, menu_bltouch);
+ SUBMENU(MSG_BLTOUCH, menu_bltouch);
#endif
#if ENABLED(TOUCH_MI_PROBE)
- MENU_ITEM(submenu, MSG_TOUCHMI_PROBE, menu_touchmi);
+ SUBMENU(MSG_TOUCHMI_PROBE, menu_touchmi);
#endif
}
@@ -380,7 +356,7 @@ void menu_configuration() {
// Set single nozzle filament retract and prime length
//
#if EXTRUDERS > 1
- MENU_ITEM(submenu, MSG_TOOL_CHANGE, menu_tool_change);
+ SUBMENU(MSG_TOOL_CHANGE, menu_tool_change);
#endif
//
@@ -389,41 +365,46 @@ void menu_configuration() {
#if ENABLED(CASE_LIGHT_MENU)
#if DISABLED(CASE_LIGHT_NO_BRIGHTNESS)
if (PWM_PIN(CASE_LIGHT_PIN))
- MENU_ITEM(submenu, MSG_CASE_LIGHT, menu_case_light);
+ SUBMENU(MSG_CASE_LIGHT, menu_case_light);
else
#endif
- MENU_ITEM_EDIT_CALLBACK(bool, MSG_CASE_LIGHT, (bool*)&case_light_on, update_case_light);
+ EDIT_ITEM(bool, MSG_CASE_LIGHT, (bool*)&case_light_on, update_case_light);
#endif
#if HAS_LCD_CONTRAST
- MENU_ITEM_EDIT_CALLBACK(int3, MSG_CONTRAST, &ui.contrast, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX, ui.refresh_contrast, true);
+ EDIT_ITEM(int3, MSG_CONTRAST, &ui.contrast, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX, ui.refresh_contrast, true);
#endif
#if ENABLED(FWRETRACT)
- MENU_ITEM(submenu, MSG_RETRACT, menu_config_retract);
+ SUBMENU(MSG_RETRACT, menu_config_retract);
#endif
#if HAS_FILAMENT_SENSOR
- MENU_ITEM_EDIT_CALLBACK(bool, MSG_RUNOUT_SENSOR, &runout.enabled, runout.reset);
+ EDIT_ITEM(bool, MSG_RUNOUT_SENSOR, &runout.enabled, runout.reset);
#endif
#if ENABLED(POWER_LOSS_RECOVERY)
- MENU_ITEM_EDIT_CALLBACK(bool, MSG_OUTAGE_RECOVERY, &recovery.enabled, recovery.changed);
+ EDIT_ITEM(bool, MSG_OUTAGE_RECOVERY, &recovery.enabled, recovery.changed);
#endif
#if DISABLED(SLIM_LCD_MENUS)
// Preheat configurations
- MENU_ITEM(submenu, MSG_PREHEAT_1_SETTINGS, menu_preheat_material1_settings);
- MENU_ITEM(submenu, MSG_PREHEAT_2_SETTINGS, menu_preheat_material2_settings);
+ SUBMENU(MSG_PREHEAT_1_SETTINGS, menu_preheat_material1_settings);
+ SUBMENU(MSG_PREHEAT_2_SETTINGS, menu_preheat_material2_settings);
#endif
#if ENABLED(EEPROM_SETTINGS)
- MENU_ITEM(function, MSG_STORE_EEPROM, lcd_store_settings);
+ ACTION_ITEM(MSG_STORE_EEPROM, lcd_store_settings);
if (!busy)
- MENU_ITEM(function, MSG_LOAD_EEPROM, lcd_load_settings);
+ ACTION_ITEM(MSG_LOAD_EEPROM, lcd_load_settings);
#endif
if (!busy)
- MENU_ITEM(function, MSG_RESTORE_FAILSAFE, lcd_factory_settings);
+ ACTION_ITEM(MSG_RESTORE_FAILSAFE, [](){
+ settings.reset();
+ #if HAS_BUZZER
+ ui.completion_feedback();
+ #endif
+ });
END_MENU();
}
diff --git a/Marlin/src/lcd/menu/menu_custom.cpp b/Marlin/src/lcd/menu/menu_custom.cpp
index ad346e71df72..81b324114aad 100644
--- a/Marlin/src/lcd/menu/menu_custom.cpp
+++ b/Marlin/src/lcd/menu/menu_custom.cpp
@@ -47,39 +47,23 @@ void _lcd_user_gcode(PGM_P const cmd) {
#endif
}
-#if defined(USER_DESC_1) && defined(USER_GCODE_1)
- void lcd_user_gcode_1() { _lcd_user_gcode(PSTR(USER_GCODE_1 _DONE_SCRIPT)); }
-#endif
-#if defined(USER_DESC_2) && defined(USER_GCODE_2)
- void lcd_user_gcode_2() { _lcd_user_gcode(PSTR(USER_GCODE_2 _DONE_SCRIPT)); }
-#endif
-#if defined(USER_DESC_3) && defined(USER_GCODE_3)
- void lcd_user_gcode_3() { _lcd_user_gcode(PSTR(USER_GCODE_3 _DONE_SCRIPT)); }
-#endif
-#if defined(USER_DESC_4) && defined(USER_GCODE_4)
- void lcd_user_gcode_4() { _lcd_user_gcode(PSTR(USER_GCODE_4 _DONE_SCRIPT)); }
-#endif
-#if defined(USER_DESC_5) && defined(USER_GCODE_5)
- void lcd_user_gcode_5() { _lcd_user_gcode(PSTR(USER_GCODE_5 _DONE_SCRIPT)); }
-#endif
-
void menu_user() {
START_MENU();
- MENU_BACK(MSG_MAIN);
+ BACK_ITEM(MSG_MAIN);
#if defined(USER_DESC_1) && defined(USER_GCODE_1)
- MENU_ITEM(function, USER_DESC_1, lcd_user_gcode_1);
+ ACTION_ITEM_P(PSTR(USER_DESC_1), [](){ _lcd_user_gcode(PSTR(USER_GCODE_1 _DONE_SCRIPT)); });
#endif
#if defined(USER_DESC_2) && defined(USER_GCODE_2)
- MENU_ITEM(function, USER_DESC_2, lcd_user_gcode_2);
+ ACTION_ITEM_P(PSTR(USER_DESC_2), [](){ _lcd_user_gcode(PSTR(USER_GCODE_2 _DONE_SCRIPT)); });
#endif
#if defined(USER_DESC_3) && defined(USER_GCODE_3)
- MENU_ITEM(function, USER_DESC_3, lcd_user_gcode_3);
+ ACTION_ITEM_P(PSTR(USER_DESC_3), [](){ _lcd_user_gcode(PSTR(USER_GCODE_3 _DONE_SCRIPT)); });
#endif
#if defined(USER_DESC_4) && defined(USER_GCODE_4)
- MENU_ITEM(function, USER_DESC_4, lcd_user_gcode_4);
+ ACTION_ITEM_P(PSTR(USER_DESC_4), [](){ _lcd_user_gcode(PSTR(USER_GCODE_4 _DONE_SCRIPT)); });
#endif
#if defined(USER_DESC_5) && defined(USER_GCODE_5)
- MENU_ITEM(function, USER_DESC_5, lcd_user_gcode_5);
+ ACTION_ITEM_P(PSTR(USER_DESC_5), [](){ _lcd_user_gcode(PSTR(USER_GCODE_5 _DONE_SCRIPT)); });
#endif
END_MENU();
}
diff --git a/Marlin/src/lcd/menu/menu_delta_calibrate.cpp b/Marlin/src/lcd/menu/menu_delta_calibrate.cpp
index b42c9a9a76be..38e94c09081c 100644
--- a/Marlin/src/lcd/menu/menu_delta_calibrate.cpp
+++ b/Marlin/src/lcd/menu/menu_delta_calibrate.cpp
@@ -41,7 +41,7 @@
#endif
void _man_probe_pt(const xy_pos_t &xy) {
- do_blocking_move_to(xy, Z_CLEARANCE_BETWEEN_PROBES);
+ do_blocking_move_to_xy_z(xy, Z_CLEARANCE_BETWEEN_PROBES);
ui.synchronize();
move_menu_scale = _MAX(PROBE_MANUALLY_STEP, MIN_STEPS_PER_SEGMENT / float(DEFAULT_XYZ_STEPS_PER_UNIT));
ui.goto_screen(lcd_move_z);
@@ -60,7 +60,7 @@ void _man_probe_pt(const xy_pos_t &xy) {
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Delta Calibration in progress"), PSTR("Continue"));
#endif
#if ENABLED(EXTENSIBLE_UI)
- ExtUI::onUserConfirmRequired(PSTR("Delta Calibration in progress"));
+ ExtUI::onUserConfirmRequired_P(PSTR("Delta Calibration in progress"));
#endif
while (wait_for_user) idle();
ui.goto_previous_screen_no_defer();
@@ -94,51 +94,50 @@ void _man_probe_pt(const xy_pos_t &xy) {
#endif
-void _recalc_delta_settings() {
- #if HAS_LEVELING
- reset_bed_level(); // After changing kinematics bed-level data is no longer valid
- #endif
- recalc_delta_settings();
-}
-
void lcd_delta_settings() {
+ auto _recalc_delta_settings = []() {
+ #if HAS_LEVELING
+ reset_bed_level(); // After changing kinematics bed-level data is no longer valid
+ #endif
+ recalc_delta_settings();
+ };
START_MENU();
- MENU_BACK(MSG_DELTA_CALIBRATE);
- MENU_ITEM_EDIT_CALLBACK(float52sign, MSG_DELTA_HEIGHT, &delta_height, delta_height - 10, delta_height + 10, _recalc_delta_settings);
- #define EDIT_ENDSTOP_ADJ(LABEL,N) MENU_ITEM_EDIT_CALLBACK(float43, LABEL, &delta_endstop_adj.N, -5, 5, _recalc_delta_settings)
+ BACK_ITEM(MSG_DELTA_CALIBRATE);
+ EDIT_ITEM(float52sign, MSG_DELTA_HEIGHT, &delta_height, delta_height - 10, delta_height + 10, _recalc_delta_settings);
+ #define EDIT_ENDSTOP_ADJ(LABEL,N) EDIT_ITEM_P(float43, PSTR(LABEL), &delta_endstop_adj.N, -5, 5, _recalc_delta_settings)
EDIT_ENDSTOP_ADJ("Ex",a);
EDIT_ENDSTOP_ADJ("Ey",b);
EDIT_ENDSTOP_ADJ("Ez",c);
- MENU_ITEM_EDIT_CALLBACK(float52sign, MSG_DELTA_RADIUS, &delta_radius, delta_radius - 5, delta_radius + 5, _recalc_delta_settings);
- #define EDIT_ANGLE_TRIM(LABEL,N) MENU_ITEM_EDIT_CALLBACK(float43, LABEL, &delta_tower_angle_trim.N, -5, 5, _recalc_delta_settings)
+ EDIT_ITEM(float52sign, MSG_DELTA_RADIUS, &delta_radius, delta_radius - 5, delta_radius + 5, _recalc_delta_settings);
+ #define EDIT_ANGLE_TRIM(LABEL,N) EDIT_ITEM_P(float43, PSTR(LABEL), &delta_tower_angle_trim.N, -5, 5, _recalc_delta_settings)
EDIT_ANGLE_TRIM("Tx",a);
EDIT_ANGLE_TRIM("Ty",b);
EDIT_ANGLE_TRIM("Tz",c);
- MENU_ITEM_EDIT_CALLBACK(float52sign, MSG_DELTA_DIAG_ROD, &delta_diagonal_rod, delta_diagonal_rod - 5, delta_diagonal_rod + 5, _recalc_delta_settings);
+ EDIT_ITEM(float52sign, MSG_DELTA_DIAG_ROD, &delta_diagonal_rod, delta_diagonal_rod - 5, delta_diagonal_rod + 5, _recalc_delta_settings);
END_MENU();
}
void menu_delta_calibrate() {
START_MENU();
- MENU_BACK(MSG_MAIN);
+ BACK_ITEM(MSG_MAIN);
#if ENABLED(DELTA_AUTO_CALIBRATION)
- MENU_ITEM(gcode, MSG_DELTA_AUTO_CALIBRATE, PSTR("G33"));
+ GCODES_ITEM(MSG_DELTA_AUTO_CALIBRATE, PSTR("G33"));
#if ENABLED(EEPROM_SETTINGS)
- MENU_ITEM(function, MSG_STORE_EEPROM, lcd_store_settings);
- MENU_ITEM(function, MSG_LOAD_EEPROM, lcd_load_settings);
+ ACTION_ITEM(MSG_STORE_EEPROM, lcd_store_settings);
+ ACTION_ITEM(MSG_LOAD_EEPROM, lcd_load_settings);
#endif
#endif
- MENU_ITEM(submenu, MSG_DELTA_SETTINGS, lcd_delta_settings);
+ SUBMENU(MSG_DELTA_SETTINGS, lcd_delta_settings);
#if ENABLED(DELTA_CALIBRATION_MENU)
- MENU_ITEM(submenu, MSG_AUTO_HOME, _lcd_delta_calibrate_home);
+ SUBMENU(MSG_AUTO_HOME, _lcd_delta_calibrate_home);
if (all_axes_homed()) {
- MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_X, _goto_tower_x);
- MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_Y, _goto_tower_y);
- MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_Z, _goto_tower_z);
- MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_CENTER, _goto_center);
+ SUBMENU(MSG_DELTA_CALIBRATE_X, _goto_tower_x);
+ SUBMENU(MSG_DELTA_CALIBRATE_Y, _goto_tower_y);
+ SUBMENU(MSG_DELTA_CALIBRATE_Z, _goto_tower_z);
+ SUBMENU(MSG_DELTA_CALIBRATE_CENTER, _goto_center);
}
#endif
diff --git a/Marlin/src/lcd/menu/menu_filament.cpp b/Marlin/src/lcd/menu/menu_filament.cpp
index 474e326667cd..e32e93d23cff 100644
--- a/Marlin/src/lcd/menu/menu_filament.cpp
+++ b/Marlin/src/lcd/menu/menu_filament.cpp
@@ -47,32 +47,35 @@ inline PGM_P _change_filament_temp_command() {
return PSTR("M701 T%d");
case PAUSE_MODE_UNLOAD_FILAMENT:
return _change_filament_temp_extruder >= 0 ? PSTR("M702 T%d") : PSTR("M702 ;%d");
+ case PAUSE_MODE_CHANGE_FILAMENT:
case PAUSE_MODE_PAUSE_PRINT:
default:
return PSTR("M600 B0 T%d");
}
- return PSTR(MSG_FILAMENTCHANGE);
+ return GET_TEXT(MSG_FILAMENTCHANGE);
}
+// Initiate Filament Load/Unload/Change at the specified temperature
static void _change_filament_temp(const uint16_t temperature) {
char cmd[11];
sprintf_P(cmd, _change_filament_temp_command(), _change_filament_temp_extruder);
thermalManager.setTargetHotend(temperature, _change_filament_temp_extruder);
lcd_enqueue_one_now(cmd);
}
-inline void _lcd_change_filament_temp_1_func() { _change_filament_temp(ui.preheat_hotend_temp[0]); }
-inline void _lcd_change_filament_temp_2_func() { _change_filament_temp(ui.preheat_hotend_temp[1]); }
-inline void _lcd_change_filament_temp_custom_cb() { _change_filament_temp(thermalManager.temp_hotend[_change_filament_temp_extruder].target); }
-static PGM_P change_filament_header(const PauseMode mode) {
+//
+// Menu to choose the temperature and start Filament Change
+//
+
+inline PGM_P change_filament_header(const PauseMode mode) {
switch (mode) {
case PAUSE_MODE_LOAD_FILAMENT:
- return PSTR(MSG_FILAMENTLOAD);
+ return GET_TEXT(MSG_FILAMENTLOAD);
case PAUSE_MODE_UNLOAD_FILAMENT:
- return PSTR(MSG_FILAMENTUNLOAD);
+ return GET_TEXT(MSG_FILAMENTUNLOAD);
default: break;
}
- return PSTR(MSG_FILAMENTCHANGE);
+ return GET_TEXT(MSG_FILAMENTCHANGE);
}
void _menu_temp_filament_op(const PauseMode mode, const int8_t extruder) {
@@ -80,59 +83,14 @@ void _menu_temp_filament_op(const PauseMode mode, const int8_t extruder) {
_change_filament_temp_extruder = extruder;
START_MENU();
if (LCD_HEIGHT >= 4) STATIC_ITEM_P(change_filament_header(mode), SS_CENTER|SS_INVERT);
- MENU_BACK(MSG_BACK);
- MENU_ITEM(function, MSG_PREHEAT_1, _lcd_change_filament_temp_1_func);
- MENU_ITEM(function, MSG_PREHEAT_2, _lcd_change_filament_temp_2_func);
- uint16_t max_temp;
- switch (extruder) {
- default: max_temp = HEATER_0_MAXTEMP;
- #if HOTENDS > 1
- case 1: max_temp = HEATER_1_MAXTEMP; break;
- #if HOTENDS > 2
- case 2: max_temp = HEATER_2_MAXTEMP; break;
- #if HOTENDS > 3
- case 3: max_temp = HEATER_3_MAXTEMP; break;
- #if HOTENDS > 4
- case 4: max_temp = HEATER_4_MAXTEMP; break;
- #if HOTENDS > 5
- case 5: max_temp = HEATER_5_MAXTEMP; break;
- #endif
- #endif
- #endif
- #endif
- #endif
- }
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_PREHEAT_CUSTOM, &thermalManager.temp_hotend[_change_filament_temp_extruder].target, EXTRUDE_MINTEMP, max_temp - 15, _lcd_change_filament_temp_custom_cb);
+ BACK_ITEM(MSG_BACK);
+ ACTION_ITEM(MSG_PREHEAT_1, [](){ _change_filament_temp(ui.preheat_hotend_temp[0]); });
+ ACTION_ITEM(MSG_PREHEAT_2, [](){ _change_filament_temp(ui.preheat_hotend_temp[1]); });
+ EDIT_ITEM_FAST(int3, MSG_PREHEAT_CUSTOM, &thermalManager.temp_hotend[_change_filament_temp_extruder].target, EXTRUDE_MINTEMP, heater_maxtemp[extruder] - 15, [](){
+ _change_filament_temp(thermalManager.temp_hotend[_change_filament_temp_extruder].target);
+ });
END_MENU();
}
-#if E_STEPPERS
- void menu_temp_e0_filament_change() { _menu_temp_filament_op(PAUSE_MODE_PAUSE_PRINT, 0); }
- void menu_temp_e0_filament_load() { _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 0); }
- void menu_temp_e0_filament_unload() { _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 0); }
- #if E_STEPPERS > 1
- void menu_temp_e1_filament_change() { _menu_temp_filament_op(PAUSE_MODE_PAUSE_PRINT, 1); }
- void menu_temp_e1_filament_load() { _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 1); }
- void menu_temp_e1_filament_unload() { _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 1); }
- #if ENABLED(FILAMENT_UNLOAD_ALL_EXTRUDERS)
- void menu_unload_filament_all_temp() { _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, -1); }
- #endif
- #if E_STEPPERS > 2
- void menu_temp_e2_filament_change() { _menu_temp_filament_op(PAUSE_MODE_PAUSE_PRINT, 2); }
- void menu_temp_e2_filament_load() { _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 2); }
- void menu_temp_e2_filament_unload() { _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 2); }
- #if E_STEPPERS > 3
- void menu_temp_e3_filament_change() { _menu_temp_filament_op(PAUSE_MODE_PAUSE_PRINT, 3); }
- void menu_temp_e3_filament_load() { _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 3); }
- void menu_temp_e3_filament_unload() { _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 3); }
- #if E_STEPPERS > 4
- void menu_temp_e4_filament_change() { _menu_temp_filament_op(PAUSE_MODE_PAUSE_PRINT, 4); }
- void menu_temp_e4_filament_load() { _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 4); }
- void menu_temp_e4_filament_unload() { _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 4); }
- #endif // E_STEPPERS > 4
- #endif // E_STEPPERS > 3
- #endif // E_STEPPERS > 2
- #endif // E_STEPPERS > 1
-#endif // E_STEPPERS
/**
*
@@ -142,48 +100,51 @@ void _menu_temp_filament_op(const PauseMode mode, const int8_t extruder) {
#if E_STEPPERS > 1 || ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
void menu_change_filament() {
START_MENU();
- MENU_BACK(MSG_MAIN);
+ BACK_ITEM(MSG_MAIN);
+
+ // Say "filament change" when no print is active
+ editable.int8 = printingIsPaused() ? PAUSE_MODE_PAUSE_PRINT : PAUSE_MODE_CHANGE_FILAMENT;
// Change filament
#if E_STEPPERS == 1
- PGM_P msg0 = PSTR(MSG_FILAMENTCHANGE);
+ PGM_P const msg0 = GET_TEXT(MSG_FILAMENTCHANGE);
if (thermalManager.targetTooColdToExtrude(active_extruder))
- MENU_ITEM_P(submenu, msg0, menu_temp_e0_filament_change);
+ MENU_ITEM_P(submenu, msg0, [](){ _menu_temp_filament_op(PauseMode(editable.int8), 0); });
else
MENU_ITEM_P(gcode, msg0, PSTR("M600 B0"));
#else
- PGM_P msg0 = PSTR(MSG_FILAMENTCHANGE " " MSG_E1);
- PGM_P msg1 = PSTR(MSG_FILAMENTCHANGE " " MSG_E2);
+ PGM_P const msg0 = GET_TEXT(MSG_FILAMENTCHANGE_E0);
+ PGM_P const msg1 = GET_TEXT(MSG_FILAMENTCHANGE_E1);
if (thermalManager.targetTooColdToExtrude(0))
- MENU_ITEM_P(submenu, msg0, menu_temp_e0_filament_change);
+ MENU_ITEM_P(submenu, msg0, [](){ _menu_temp_filament_op(PauseMode(editable.int8), 0); });
else
MENU_ITEM_P(gcode, msg0, PSTR("M600 B0 T0"));
if (thermalManager.targetTooColdToExtrude(1))
- MENU_ITEM_P(submenu, msg1, menu_temp_e1_filament_change);
+ MENU_ITEM_P(submenu, msg1, [](){ _menu_temp_filament_op(PauseMode(editable.int8), 1); });
else
MENU_ITEM_P(gcode, msg1, PSTR("M600 B0 T1"));
#if E_STEPPERS > 2
- PGM_P msg2 = PSTR(MSG_FILAMENTCHANGE " " MSG_E3);
+ PGM_P const msg2 = GET_TEXT(MSG_FILAMENTCHANGE_E2);
if (thermalManager.targetTooColdToExtrude(2))
- MENU_ITEM_P(submenu, msg2, menu_temp_e2_filament_change);
+ MENU_ITEM_P(submenu, msg2, [](){ _menu_temp_filament_op(PauseMode(editable.int8), 2); });
else
MENU_ITEM_P(gcode, msg2, PSTR("M600 B0 T2"));
#if E_STEPPERS > 3
- PGM_P msg3 = PSTR(MSG_FILAMENTCHANGE " " MSG_E4);
+ PGM_P const msg3 = GET_TEXT(MSG_FILAMENTCHANGE_E3);
if (thermalManager.targetTooColdToExtrude(3))
- MENU_ITEM_P(submenu, msg3, menu_temp_e3_filament_change);
+ MENU_ITEM_P(submenu, msg3, [](){ _menu_temp_filament_op(PauseMode(editable.int8), 3); });
else
MENU_ITEM_P(gcode, msg3, PSTR("M600 B0 T3"));
#if E_STEPPERS > 4
- PGM_P msg4 = PSTR(MSG_FILAMENTCHANGE " " MSG_E5);
+ PGM_P const msg4 = GET_TEXT(MSG_FILAMENTCHANGE_E4);
if (thermalManager.targetTooColdToExtrude(4))
- MENU_ITEM_P(submenu, msg4, menu_temp_e4_filament_change);
+ MENU_ITEM_P(submenu, msg4, [](){ _menu_temp_filament_op(PauseMode(editable.int8), 4); });
else
MENU_ITEM_P(gcode, msg4, PSTR("M600 B0 T4"));
#if E_STEPPERS > 5
- PGM_P msg5 = PSTR(MSG_FILAMENTCHANGE " " MSG_E6);
+ PGM_P const msg5 = GET_TEXT(MSG_FILAMENTCHANGE_E5);
if (thermalManager.targetTooColdToExtrude(5))
- MENU_ITEM_P(submenu, msg5, menu_temp_e5_filament_change);
+ MENU_ITEM_P(submenu, msg5, [](){ _menu_temp_filament_op(PauseMode(editable.int8), 5); });
else
MENU_ITEM_P(gcode, msg5, PSTR("M600 B0 T5"));
#endif // E_STEPPERS > 5
@@ -196,44 +157,44 @@ void _menu_temp_filament_op(const PauseMode mode, const int8_t extruder) {
if (!printer_busy()) {
// Load filament
#if E_STEPPERS == 1
- PGM_P msg0 = PSTR(MSG_FILAMENTLOAD);
+ PGM_P const msg0 = GET_TEXT(MSG_FILAMENTLOAD);
if (thermalManager.targetTooColdToExtrude(active_extruder))
- MENU_ITEM_P(submenu, msg0, menu_temp_e0_filament_load);
+ MENU_ITEM_P(submenu, msg0, [](){ _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 0); });
else
MENU_ITEM_P(gcode, msg0, PSTR("M701"));
#else
- PGM_P msg0 = PSTR(MSG_FILAMENTLOAD " " MSG_E1);
- PGM_P msg1 = PSTR(MSG_FILAMENTLOAD " " MSG_E2);
+ PGM_P const msg0 = GET_TEXT(MSG_FILAMENTLOAD_E0);
+ PGM_P const msg1 = GET_TEXT(MSG_FILAMENTLOAD_E1);
if (thermalManager.targetTooColdToExtrude(0))
- MENU_ITEM_P(submenu, msg0, menu_temp_e0_filament_load);
+ MENU_ITEM_P(submenu, msg0, [](){ _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 0); });
else
MENU_ITEM_P(gcode, msg0, PSTR("M701 T0"));
if (thermalManager.targetTooColdToExtrude(1))
- MENU_ITEM_P(submenu, msg1, menu_temp_e1_filament_load);
+ MENU_ITEM_P(submenu, msg1, [](){ _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 1); });
else
MENU_ITEM_P(gcode, msg1, PSTR("M701 T1"));
#if E_STEPPERS > 2
- PGM_P msg2 = PSTR(MSG_FILAMENTLOAD " " MSG_E3);
+ PGM_P const msg2 = GET_TEXT(MSG_FILAMENTLOAD_E2);
if (thermalManager.targetTooColdToExtrude(2))
- MENU_ITEM_P(submenu, msg2, menu_temp_e2_filament_load);
+ MENU_ITEM_P(submenu, msg2, [](){ _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 2); });
else
MENU_ITEM_P(gcode, msg2, PSTR("M701 T2"));
#if E_STEPPERS > 3
- PGM_P msg3 = PSTR(MSG_FILAMENTLOAD " " MSG_E4);
+ PGM_P const msg3 = GET_TEXT(MSG_FILAMENTLOAD_E3);
if (thermalManager.targetTooColdToExtrude(3))
- MENU_ITEM_P(submenu, msg3, menu_temp_e3_filament_load);
+ MENU_ITEM_P(submenu, msg3, [](){ _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 3); });
else
MENU_ITEM_P(gcode, msg3, PSTR("M701 T3"));
#if E_STEPPERS > 4
- PGM_P msg4 = PSTR(MSG_FILAMENTLOAD " " MSG_E5);
+ PGM_P const msg4 = GET_TEXT(MSG_FILAMENTLOAD_E4);
if (thermalManager.targetTooColdToExtrude(4))
- MENU_ITEM_P(submenu, msg4, menu_temp_e4_filament_load);
+ MENU_ITEM_P(submenu, msg4, [](){ _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 4); });
else
MENU_ITEM_P(gcode, msg4, PSTR("M701 T4"));
#if E_STEPPERS > 5
- PGM_P msg5 = PSTR(MSG_FILAMENTLOAD " " MSG_E6);
+ PGM_P const msg5 = GET_TEXT(MSG_FILAMENTLOAD_E5);
if (thermalManager.targetTooColdToExtrude(5))
- MENU_ITEM_P(submenu, msg5, menu_temp_e5_filament_load);
+ MENU_ITEM_P(submenu, msg5, [](){ _menu_temp_filament_op(PAUSE_MODE_LOAD_FILAMENT, 5); });
else
MENU_ITEM_P(gcode, msg5, PSTR("M701 T5"));
#endif // E_STEPPERS > 5
@@ -245,60 +206,50 @@ void _menu_temp_filament_op(const PauseMode mode, const int8_t extruder) {
// Unload filament
#if E_STEPPERS == 1
if (thermalManager.targetHotEnoughToExtrude(active_extruder))
- MENU_ITEM(gcode, MSG_FILAMENTUNLOAD, PSTR("M702"));
+ GCODES_ITEM(MSG_FILAMENTUNLOAD, PSTR("M702"));
else
- MENU_ITEM(submenu, MSG_FILAMENTUNLOAD, menu_temp_e0_filament_unload);
+ SUBMENU(MSG_FILAMENTUNLOAD, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 0); });
#else
#if ENABLED(FILAMENT_UNLOAD_ALL_EXTRUDERS)
- if (thermalManager.targetHotEnoughToExtrude(0)
- #if E_STEPPERS > 1
- && thermalManager.targetHotEnoughToExtrude(1)
- #if E_STEPPERS > 2
- && thermalManager.targetHotEnoughToExtrude(2)
- #if E_STEPPERS > 3
- && thermalManager.targetHotEnoughToExtrude(3)
- #if E_STEPPERS > 4
- && thermalManager.targetHotEnoughToExtrude(4)
- #if E_STEPPERS > 5
- && thermalManager.targetHotEnoughToExtrude(5)
- #endif // E_STEPPERS > 5
- #endif // E_STEPPERS > 4
- #endif // E_STEPPERS > 3
- #endif // E_STEPPERS > 2
- #endif // E_STEPPERS > 1
- )
- MENU_ITEM(gcode, MSG_FILAMENTUNLOAD_ALL, PSTR("M702"));
+ if (JOIN_N(E_STEPPERS, &&,
+ thermalManager.targetHotEnoughToExtrude(0),
+ thermalManager.targetHotEnoughToExtrude(1),
+ thermalManager.targetHotEnoughToExtrude(2),
+ thermalManager.targetHotEnoughToExtrude(3),
+ thermalManager.targetHotEnoughToExtrude(4),
+ thermalManager.targetHotEnoughToExtrude(5))
+ ) GCODES_ITEM(MSG_FILAMENTUNLOAD_ALL, PSTR("M702"));
else
- MENU_ITEM(submenu, MSG_FILAMENTUNLOAD_ALL, menu_unload_filament_all_temp);
+ SUBMENU(MSG_FILAMENTUNLOAD_ALL, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, -1); });
#endif
if (thermalManager.targetHotEnoughToExtrude(0))
- MENU_ITEM(gcode, MSG_FILAMENTUNLOAD " " MSG_E1, PSTR("M702 T0"));
+ GCODES_ITEM(MSG_FILAMENTUNLOAD_E0, PSTR("M702 T0"));
else
- MENU_ITEM(submenu, MSG_FILAMENTUNLOAD " " MSG_E1, menu_temp_e0_filament_unload);
+ SUBMENU(MSG_FILAMENTUNLOAD_E0, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 0); });
if (thermalManager.targetHotEnoughToExtrude(1))
- MENU_ITEM(gcode, MSG_FILAMENTUNLOAD " " MSG_E2, PSTR("M702 T1"));
+ GCODES_ITEM(MSG_FILAMENTUNLOAD_E1, PSTR("M702 T1"));
else
- MENU_ITEM(submenu, MSG_FILAMENTUNLOAD " " MSG_E2, menu_temp_e1_filament_unload);
+ SUBMENU(MSG_FILAMENTUNLOAD_E1, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 1); });
#if E_STEPPERS > 2
if (thermalManager.targetHotEnoughToExtrude(2))
- MENU_ITEM(gcode, MSG_FILAMENTUNLOAD " " MSG_E3, PSTR("M702 T2"));
+ GCODES_ITEM(MSG_FILAMENTUNLOAD_E2, PSTR("M702 T2"));
else
- MENU_ITEM(submenu, MSG_FILAMENTUNLOAD " " MSG_E3, menu_temp_e2_filament_unload);
+ SUBMENU(MSG_FILAMENTUNLOAD_E2, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 2); });
#if E_STEPPERS > 3
if (thermalManager.targetHotEnoughToExtrude(3))
- MENU_ITEM(gcode, MSG_FILAMENTUNLOAD " " MSG_E4, PSTR("M702 T3"));
+ GCODES_ITEM(MSG_FILAMENTUNLOAD_E3, PSTR("M702 T3"));
else
- MENU_ITEM(submenu, MSG_FILAMENTUNLOAD " " MSG_E4, menu_temp_e3_filament_unload);
+ SUBMENU(MSG_FILAMENTUNLOAD_E3, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 3); });
#if E_STEPPERS > 4
if (thermalManager.targetHotEnoughToExtrude(4))
- MENU_ITEM(gcode, MSG_FILAMENTUNLOAD " " MSG_E5, PSTR("M702 T4"));
+ GCODES_ITEM(MSG_FILAMENTUNLOAD_E4, PSTR("M702 T4"));
else
- MENU_ITEM(submenu, MSG_FILAMENTUNLOAD " " MSG_E5, menu_temp_e4_filament_unload);
+ SUBMENU(MSG_FILAMENTUNLOAD_E4, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 4); });
#if E_STEPPERS > 5
if (thermalManager.targetHotEnoughToExtrude(5))
- MENU_ITEM(gcode, MSG_FILAMENTUNLOAD " " MSG_E6, PSTR("M702 T5"));
+ GCODES_ITEM(MSG_FILAMENTUNLOAD_E5, PSTR("M702 T5"));
else
- MENU_ITEM(submenu, MSG_FILAMENTUNLOAD " " MSG_E6, menu_temp_e5_filament_unload);
+ SUBMENU(MSG_FILAMENTUNLOAD_E5, [](){ _menu_temp_filament_op(PAUSE_MODE_UNLOAD_FILAMENT, 5); });
#endif // E_STEPPERS > 5
#endif // E_STEPPERS > 4
#endif // E_STEPPERS > 3
@@ -315,20 +266,22 @@ static uint8_t hotend_status_extruder = 0;
static PGM_P pause_header() {
switch (pause_mode) {
+ case PAUSE_MODE_CHANGE_FILAMENT:
+ return GET_TEXT(MSG_FILAMENT_CHANGE_HEADER);
case PAUSE_MODE_LOAD_FILAMENT:
- return PSTR(MSG_FILAMENT_CHANGE_HEADER_LOAD);
+ return GET_TEXT(MSG_FILAMENT_CHANGE_HEADER_LOAD);
case PAUSE_MODE_UNLOAD_FILAMENT:
- return PSTR(MSG_FILAMENT_CHANGE_HEADER_UNLOAD);
+ return GET_TEXT(MSG_FILAMENT_CHANGE_HEADER_UNLOAD);
default: break;
}
- return PSTR(MSG_FILAMENT_CHANGE_HEADER_PAUSE);
+ return GET_TEXT(MSG_FILAMENT_CHANGE_HEADER_PAUSE);
}
// Portions from STATIC_ITEM...
#define HOTEND_STATUS_ITEM() do { \
if (_menuLineNr == _thisItemNr) { \
if (ui.should_draw()) { \
- draw_menu_item_static(_lcdLineNr, PSTR(MSG_FILAMENT_CHANGE_NOZZLE), SS_INVERT); \
+ draw_menu_item_static(_lcdLineNr, GET_TEXT(MSG_FILAMENT_CHANGE_NOZZLE), SS_INVERT); \
ui.draw_hotend_status(_lcdLineNr, hotend_status_extruder); \
} \
if (_skipStatic && encoderLine <= _thisItemNr) { \
@@ -340,163 +293,60 @@ static PGM_P pause_header() {
++_thisItemNr; \
}while(0)
-void lcd_pause_resume_print() {
- pause_menu_response = PAUSE_RESPONSE_RESUME_PRINT;
-}
-
-void lcd_pause_extrude_more() {
- pause_menu_response = PAUSE_RESPONSE_EXTRUDE_MORE;
-}
-
void menu_pause_option() {
START_MENU();
#if LCD_HEIGHT > 2
STATIC_ITEM(MSG_FILAMENT_CHANGE_OPTION_HEADER);
#endif
- MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_PURGE, lcd_pause_extrude_more);
+ ACTION_ITEM(MSG_FILAMENT_CHANGE_OPTION_PURGE, [](){ pause_menu_response = PAUSE_RESPONSE_EXTRUDE_MORE; });
#if HAS_FILAMENT_SENSOR
if (runout.filament_ran_out)
- MENU_ITEM_EDIT_CALLBACK(bool, MSG_RUNOUT_SENSOR, &runout.enabled, runout.reset);
+ EDIT_ITEM(bool, MSG_RUNOUT_SENSOR, &runout.enabled, runout.reset);
else
#endif
- MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_RESUME, lcd_pause_resume_print);
+ ACTION_ITEM(MSG_FILAMENT_CHANGE_OPTION_RESUME, [](){ pause_menu_response = PAUSE_RESPONSE_RESUME_PRINT; });
END_MENU();
}
//
// ADVANCED_PAUSE_FEATURE message screens
//
+// Warning: msg must have three null bytes to delimit lines!
+//
+void _lcd_pause_message(PGM_P const msg) {
+ PGM_P const msg1 = msg;
+ PGM_P const msg2 = msg1 + strlen_P(msg1) + 1;
+ PGM_P const msg3 = msg2 + strlen_P(msg2) + 1;
+ const bool has2 = msg2[0], has3 = msg3[0],
+ skip1 = !has2 && (LCD_HEIGHT) >= 5;
-void _lcd_pause_message(PGM_P const msg1, PGM_P const msg2=nullptr, PGM_P const msg3=nullptr) {
START_SCREEN();
- STATIC_ITEM_P(pause_header(), SS_CENTER|SS_INVERT);
- STATIC_ITEM_P(msg1);
- if (msg2) STATIC_ITEM_P(msg2);
- if (msg3 && (LCD_HEIGHT) >= 5) STATIC_ITEM_P(msg3);
- if ((!!msg2) + (!!msg3) + 2 < (LCD_HEIGHT) - 1) STATIC_ITEM(" ");
- HOTEND_STATUS_ITEM();
+ STATIC_ITEM_P(pause_header(), SS_CENTER|SS_INVERT); // 1: Header
+ if (skip1) SKIP_ITEM(); // Move a single-line message down
+ STATIC_ITEM_P(msg1); // 2: Message Line 1
+ if (has2) STATIC_ITEM_P(msg2); // 3: Message Line 2
+ if (has3 && (LCD_HEIGHT) >= 5) STATIC_ITEM_P(msg3); // 4: Message Line 3 (if LCD has 5 lines)
+ if (skip1 + 1 + has2 + has3 < (LCD_HEIGHT) - 2) SKIP_ITEM(); // Push Hotend Status down, if needed
+ HOTEND_STATUS_ITEM(); // 5: Hotend Status
END_SCREEN();
}
-void lcd_pause_pausing_message() {
- _lcd_pause_message(PSTR(MSG_PAUSE_PRINT_INIT_1)
- #ifdef MSG_PAUSE_PRINT_INIT_2
- , PSTR(MSG_PAUSE_PRINT_INIT_2)
- #ifdef MSG_PAUSE_PRINT_INIT_3
- , PSTR(MSG_PAUSE_PRINT_INIT_3)
- #endif
- #endif
- );
-}
-
-void lcd_pause_changing_message() {
- _lcd_pause_message(PSTR(MSG_FILAMENT_CHANGE_INIT_1)
- #ifdef MSG_FILAMENT_CHANGE_INIT_2
- , PSTR(MSG_FILAMENT_CHANGE_INIT_2)
- #ifdef MSG_FILAMENT_CHANGE_INIT_3
- , PSTR(MSG_FILAMENT_CHANGE_INIT_3)
- #endif
- #endif
- );
-}
-
-void lcd_pause_unload_message() {
- _lcd_pause_message(PSTR(MSG_FILAMENT_CHANGE_UNLOAD_1)
- #ifdef MSG_FILAMENT_CHANGE_UNLOAD_2
- , PSTR(MSG_FILAMENT_CHANGE_UNLOAD_2)
- #ifdef MSG_FILAMENT_CHANGE_UNLOAD_3
- , PSTR(MSG_FILAMENT_CHANGE_UNLOAD_3)
- #endif
- #endif
- );
-}
-
-void lcd_pause_heating_message() {
- _lcd_pause_message(PSTR(MSG_FILAMENT_CHANGE_HEATING_1)
- #ifdef MSG_FILAMENT_CHANGE_HEATING_2
- , PSTR(MSG_FILAMENT_CHANGE_HEATING_2)
- #ifdef MSG_FILAMENT_CHANGE_HEATING_3
- , PSTR(MSG_FILAMENT_CHANGE_HEATING_3)
- #endif
- #endif
- );
-}
-
-void lcd_pause_heat_message() {
- _lcd_pause_message(PSTR(MSG_FILAMENT_CHANGE_HEAT_1)
- #ifdef MSG_FILAMENT_CHANGE_HEAT_2
- , PSTR(MSG_FILAMENT_CHANGE_HEAT_2)
- #ifdef MSG_FILAMENT_CHANGE_HEAT_3
- , PSTR(MSG_FILAMENT_CHANGE_HEAT_3)
- #endif
- #endif
- );
-}
-
-void lcd_pause_insert_message() {
- _lcd_pause_message(PSTR(MSG_FILAMENT_CHANGE_INSERT_1)
- #ifdef MSG_FILAMENT_CHANGE_INSERT_2
- , PSTR(MSG_FILAMENT_CHANGE_INSERT_2)
- #ifdef MSG_FILAMENT_CHANGE_INSERT_3
- , PSTR(MSG_FILAMENT_CHANGE_INSERT_3)
- #endif
- #endif
- );
-}
-
-void lcd_pause_load_message() {
- _lcd_pause_message(PSTR(MSG_FILAMENT_CHANGE_LOAD_1)
- #ifdef MSG_FILAMENT_CHANGE_LOAD_2
- , PSTR(MSG_FILAMENT_CHANGE_LOAD_2)
- #ifdef MSG_FILAMENT_CHANGE_LOAD_3
- , PSTR(MSG_FILAMENT_CHANGE_LOAD_3)
- #endif
- #endif
- );
-}
-
-void lcd_pause_waiting_message() {
- _lcd_pause_message(PSTR(MSG_ADVANCED_PAUSE_WAITING_1)
- #ifdef MSG_ADVANCED_PAUSE_WAITING_2
- , PSTR(MSG_ADVANCED_PAUSE_WAITING_2)
- #ifdef MSG_ADVANCED_PAUSE_WAITING_3
- , PSTR(MSG_ADVANCED_PAUSE_WAITING_3)
- #endif
- #endif
- );
-}
-
-void lcd_pause_resume_message() {
- _lcd_pause_message(PSTR(MSG_FILAMENT_CHANGE_RESUME_1)
- #ifdef MSG_FILAMENT_CHANGE_RESUME_2
- , PSTR(MSG_FILAMENT_CHANGE_RESUME_2)
- #ifdef MSG_FILAMENT_CHANGE_RESUME_3
- , PSTR(MSG_FILAMENT_CHANGE_RESUME_3)
- #endif
- #endif
- );
-}
+void lcd_pause_pausing_message() { _lcd_pause_message(GET_TEXT(MSG_PAUSE_PRINT_INIT)); }
+void lcd_pause_changing_message() { _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_INIT)); }
+void lcd_pause_unload_message() { _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_UNLOAD)); }
+void lcd_pause_heating_message() { _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_HEATING)); }
+void lcd_pause_heat_message() { _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_HEAT)); }
+void lcd_pause_insert_message() { _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_INSERT)); }
+void lcd_pause_load_message() { _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_LOAD)); }
+void lcd_pause_waiting_message() { _lcd_pause_message(GET_TEXT(MSG_ADVANCED_PAUSE_WAITING)); }
+void lcd_pause_resume_message() { _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_RESUME)); }
void lcd_pause_purge_message() {
- _lcd_pause_message(
- #if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
- PSTR(MSG_FILAMENT_CHANGE_CONT_PURGE_1)
- #ifdef MSG_FILAMENT_CHANGE_CONT_PURGE_2
- , PSTR(MSG_FILAMENT_CHANGE_CONT_PURGE_2)
- #ifdef MSG_FILAMENT_CHANGE_CONT_PURGE_3
- , PSTR(MSG_FILAMENT_CHANGE_CONT_PURGE_3)
- #endif
- #endif
- #else
- PSTR(MSG_FILAMENT_CHANGE_PURGE_1)
- #ifdef MSG_FILAMENT_CHANGE_PURGE_2
- , PSTR(MSG_FILAMENT_CHANGE_PURGE_2)
- #ifdef MSG_FILAMENT_CHANGE_PURGE_3
- , PSTR(MSG_FILAMENT_CHANGE_PURGE_3)
- #endif
- #endif
- #endif
- );
+ #if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
+ _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_CONT_PURGE));
+ #else
+ _lcd_pause_message(GET_TEXT(MSG_FILAMENT_CHANGE_PURGE));
+ #endif
}
FORCE_INLINE screenFunc_t ap_message_screen(const PauseMessage message) {
diff --git a/Marlin/src/lcd/menu/menu_game.cpp b/Marlin/src/lcd/menu/menu_game.cpp
index 36b7f18314de..4f9748dc126d 100644
--- a/Marlin/src/lcd/menu/menu_game.cpp
+++ b/Marlin/src/lcd/menu/menu_game.cpp
@@ -29,18 +29,18 @@
void menu_game() {
START_MENU();
- MENU_BACK(MSG_MAIN);
+ BACK_ITEM(MSG_MAIN);
#if ENABLED(MARLIN_BRICKOUT)
- MENU_ITEM(submenu, MSG_BRICKOUT, brickout.enter_game);
+ SUBMENU(MSG_BRICKOUT, brickout.enter_game);
#endif
#if ENABLED(MARLIN_INVADERS)
- MENU_ITEM(submenu, MSG_INVADERS, invaders.enter_game);
+ SUBMENU(MSG_INVADERS, invaders.enter_game);
#endif
#if ENABLED(MARLIN_SNAKE)
- MENU_ITEM(submenu, MSG_SNAKE, snake.enter_game);
+ SUBMENU(MSG_SNAKE, snake.enter_game);
#endif
#if ENABLED(MARLIN_MAZE)
- MENU_ITEM(submenu, MSG_MAZE, maze.enter_game);
+ SUBMENU(MSG_MAZE, maze.enter_game);
#endif
END_MENU();
}
diff --git a/Marlin/src/lcd/menu/menu_info.cpp b/Marlin/src/lcd/menu/menu_info.cpp
index ac3e720281a3..5ef6bbfc4656 100644
--- a/Marlin/src/lcd/menu/menu_info.cpp
+++ b/Marlin/src/lcd/menu/menu_info.cpp
@@ -34,8 +34,8 @@
#include "game/game.h"
#endif
-#define STATIC_PAIR(MSG, VALUE, STYL) do{ strcpy_P(buffer, PSTR(": ")); strcpy(buffer + 2, VALUE); STATIC_ITEM(MSG, STYL, buffer); }while(0)
-#define STATIC_PAIR_P(MSG, PVALUE, STYL) do{ strcpy_P(buffer, PSTR(": ")); strcpy_P(buffer + 2, PSTR(PVALUE)); STATIC_ITEM(MSG, STYL, buffer); }while(0)
+#define VALUE_ITEM(MSG, VALUE, STYL) do{ strcpy_P(buffer, PSTR(": ")); strcpy(buffer + 2, VALUE); STATIC_ITEM(MSG, STYL, buffer); }while(0)
+#define VALUE_ITEM_P(MSG, PVALUE, STYL) do{ strcpy_P(buffer, PSTR(": ")); strcpy_P(buffer + 2, PSTR(PVALUE)); STATIC_ITEM(MSG, STYL, buffer); }while(0)
#if ENABLED(PRINTCOUNTER)
@@ -51,37 +51,41 @@
#endif
);
- char buffer[21]; // for STATIC_PAIR_P
+ char buffer[21]; // For macro usage
printStatistics stats = print_job_timer.getStats();
START_SCREEN(); // 12345678901234567890
- STATIC_PAIR(MSG_INFO_PRINT_COUNT, i16tostr3left(stats.totalPrints), SS_LEFT); // Print Count: 999
- STATIC_PAIR(MSG_INFO_COMPLETED_PRINTS, i16tostr3left(stats.finishedPrints), SS_LEFT); // Completed : 666
+ VALUE_ITEM(MSG_INFO_PRINT_COUNT, i16tostr3left(stats.totalPrints), SS_LEFT); // Print Count: 999
+ VALUE_ITEM(MSG_INFO_COMPLETED_PRINTS, i16tostr3left(stats.finishedPrints), SS_LEFT); // Completed : 666
- STATIC_PAIR_P(MSG_INFO_PRINT_TIME, "", SS_LEFT); // Total print Time:
- STATIC_ITEM("> ", SS_LEFT, duration_t(stats.printTime).toString(buffer)); // > 99y 364d 23h 59m 59s
+ STATIC_ITEM(MSG_INFO_PRINT_TIME, SS_LEFT); // Total print Time:
+ STATIC_ITEM_P(PSTR("> "), SS_LEFT, duration_t(stats.printTime).toString(buffer)); // > 99y 364d 23h 59m 59s
- STATIC_PAIR_P(MSG_INFO_PRINT_LONGEST, "", SS_LEFT); // Longest job time:
- STATIC_ITEM("> ", SS_LEFT, duration_t(stats.longestPrint).toString(buffer)); // > 99y 364d 23h 59m 59s
+ STATIC_ITEM(MSG_INFO_PRINT_LONGEST, SS_LEFT); // Longest job time:
+ STATIC_ITEM_P(PSTR("> "), SS_LEFT, duration_t(stats.longestPrint).toString(buffer)); // > 99y 364d 23h 59m 59s
- STATIC_PAIR_P(MSG_INFO_PRINT_FILAMENT, "", SS_LEFT); // Extruded total:
+ STATIC_ITEM(MSG_INFO_PRINT_FILAMENT, SS_LEFT); // Extruded total:
sprintf_P(buffer, PSTR("%ld.%im"), long(stats.filamentUsed / 1000), int16_t(stats.filamentUsed / 100) % 10);
- STATIC_ITEM("> ", SS_LEFT, buffer); // > 125m
+ STATIC_ITEM_P(PSTR("> "), SS_LEFT, buffer); // > 125m
+
+ #if SERVICE_INTERVAL_1 > 0 || SERVICE_INTERVAL_2 > 0 || SERVICE_INTERVAL_3 > 0
+ strcpy_P(buffer, GET_TEXT(MSG_SERVICE_IN));
+ #endif
#if SERVICE_INTERVAL_1 > 0
- STATIC_ITEM(SERVICE_NAME_1 MSG_SERVICE_IN, SS_LEFT); // Service X in:
- STATIC_ITEM("> ", SS_LEFT, duration_t(stats.nextService1).toString(buffer)); // > 7d 12h 11m 10s
+ STATIC_ITEM_P(PSTR(SERVICE_NAME_1 " "), SS_LEFT, buffer); // Service X in:
+ STATIC_ITEM_P(PSTR("> "), SS_LEFT, duration_t(stats.nextService1).toString(buffer)); // > 7d 12h 11m 10s
#endif
#if SERVICE_INTERVAL_2 > 0
- STATIC_ITEM(SERVICE_NAME_2 MSG_SERVICE_IN, SS_LEFT);
- STATIC_ITEM("> ", SS_LEFT, duration_t(stats.nextService2).toString(buffer));
+ STATIC_ITEM_P(PSTR(SERVICE_NAME_2 " "), SS_LEFT, buffer);
+ STATIC_ITEM_P(PSTR("> "), SS_LEFT, duration_t(stats.nextService2).toString(buffer));
#endif
#if SERVICE_INTERVAL_3 > 0
- STATIC_ITEM(SERVICE_NAME_3 MSG_SERVICE_IN, SS_LEFT);
- STATIC_ITEM("> ", SS_LEFT, duration_t(stats.nextService3).toString(buffer));
+ STATIC_ITEM_P(PSTR(SERVICE_NAME_3 " "), SS_LEFT, buffer);
+ STATIC_ITEM_P(PSTR("> "), SS_LEFT, duration_t(stats.nextService3).toString(buffer));
#endif
END_SCREEN();
@@ -99,61 +103,61 @@ void menu_info_thermistors() {
#endif
);
- char buffer[21]; // for STATIC_PAIR_P
+ char buffer[21]; // For macro usage
START_SCREEN();
#if EXTRUDERS
#define THERMISTOR_ID TEMP_SENSOR_0
#include "../thermistornames.h"
- STATIC_ITEM("T0: " THERMISTOR_NAME, SS_INVERT);
- STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_0_MINTEMP), SS_LEFT);
- STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_0_MAXTEMP), SS_LEFT);
+ STATIC_ITEM_P(PSTR(LCD_STR_E0 ": " THERMISTOR_NAME), SS_INVERT);
+ VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_0_MINTEMP), SS_LEFT);
+ VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_0_MAXTEMP), SS_LEFT);
#endif
#if TEMP_SENSOR_1 != 0
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_1
#include "../thermistornames.h"
- STATIC_ITEM("T1: " THERMISTOR_NAME, SS_INVERT);
- STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_1_MINTEMP), SS_LEFT);
- STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_1_MAXTEMP), SS_LEFT);
+ STATIC_ITEM_P(PSTR(LCD_STR_E1 ": " THERMISTOR_NAME), SS_INVERT);
+ VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_1_MINTEMP), SS_LEFT);
+ VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_1_MAXTEMP), SS_LEFT);
#endif
#if TEMP_SENSOR_2 != 0
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_2
#include "../thermistornames.h"
- STATIC_ITEM("T2: " THERMISTOR_NAME, SS_INVERT);
- STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_2_MINTEMP), SS_LEFT);
- STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_2_MAXTEMP), SS_LEFT);
+ STATIC_ITEM_P(PSTR(LCD_STR_E2 ": " THERMISTOR_NAME), SS_INVERT);
+ VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_2_MINTEMP), SS_LEFT);
+ VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_2_MAXTEMP), SS_LEFT);
#endif
#if TEMP_SENSOR_3 != 0
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_3
#include "../thermistornames.h"
- STATIC_ITEM("T3: " THERMISTOR_NAME, SS_INVERT);
- STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_3_MINTEMP), SS_LEFT);
- STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_3_MAXTEMP), SS_LEFT);
+ STATIC_ITEM_P(PSTR(LCD_STR_E3 ": " THERMISTOR_NAME), SS_INVERT);
+ VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_3_MINTEMP), SS_LEFT);
+ VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_3_MAXTEMP), SS_LEFT);
#endif
#if TEMP_SENSOR_4 != 0
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_4
#include "../thermistornames.h"
- STATIC_ITEM("T4: " THERMISTOR_NAME, SS_INVERT);
- STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_4_MINTEMP), SS_LEFT);
- STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_4_MAXTEMP), SS_LEFT);
+ STATIC_ITEM_P(PSTR(LCD_STR_E4 ": " THERMISTOR_NAME), SS_INVERT);
+ VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_4_MINTEMP), SS_LEFT);
+ VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_4_MAXTEMP), SS_LEFT);
#endif
#if TEMP_SENSOR_5 != 0
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_5
#include "../thermistornames.h"
- STATIC_ITEM("T5: " THERMISTOR_NAME, SS_INVERT);
- STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_5_MINTEMP), SS_LEFT);
- STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_5_MAXTEMP), SS_LEFT);
+ STATIC_ITEM_P(PSTR(LCD_STR_E5 ": " THERMISTOR_NAME), SS_INVERT);
+ VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_5_MINTEMP), SS_LEFT);
+ VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_5_MAXTEMP), SS_LEFT);
#endif
#if EXTRUDERS
@@ -174,9 +178,9 @@ void menu_info_thermistors() {
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_BED
#include "../thermistornames.h"
- STATIC_ITEM("TBed:" THERMISTOR_NAME, SS_INVERT);
- STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(BED_MINTEMP), SS_LEFT);
- STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(BED_MAXTEMP), SS_LEFT);
+ STATIC_ITEM_P(PSTR("BED:" THERMISTOR_NAME), SS_INVERT);
+ VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(BED_MINTEMP), SS_LEFT);
+ VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(BED_MAXTEMP), SS_LEFT);
STATIC_ITEM(
#if WATCH_BED
MSG_INFO_RUNAWAY_ON
@@ -193,9 +197,9 @@ void menu_info_thermistors() {
#undef THERMISTOR_ID
#define THERMISTOR_ID TEMP_SENSOR_CHAMBER
#include "../thermistornames.h"
- STATIC_ITEM("TCham:" THERMISTOR_NAME, SS_INVERT);
- STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(CHAMBER_MINTEMP), SS_LEFT);
- STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(CHAMBER_MAXTEMP), SS_LEFT);
+ STATIC_ITEM_P(PSTR("CHAM:" THERMISTOR_NAME), SS_INVERT);
+ VALUE_ITEM_P(MSG_INFO_MIN_TEMP, STRINGIFY(CHAMBER_MINTEMP), SS_LEFT);
+ VALUE_ITEM_P(MSG_INFO_MAX_TEMP, STRINGIFY(CHAMBER_MAXTEMP), SS_LEFT);
STATIC_ITEM(
#if WATCH_CHAMBER
MSG_INFO_RUNAWAY_ON
@@ -220,16 +224,16 @@ void menu_info_board() {
#endif
);
- char buffer[21]; // for STATIC_PAIR_P
+ char buffer[21]; // For macro usage
START_SCREEN();
- STATIC_ITEM(BOARD_INFO_NAME, SS_CENTER|SS_INVERT); // MyPrinterController
+ STATIC_ITEM_P(PSTR(BOARD_INFO_NAME), SS_CENTER|SS_INVERT); // MyPrinterController
#ifdef BOARD_WEBSITE_URL
- STATIC_ITEM(BOARD_WEBSITE_URL, SS_LEFT); // www.my3dprinter.com
+ STATIC_ITEM_P(PSTR(BOARD_WEBSITE_URL), SS_LEFT); // www.my3dprinter.com
#endif
- STATIC_PAIR_P(MSG_INFO_BAUDRATE, STRINGIFY(BAUDRATE), SS_CENTER); // Baud: 250000
- STATIC_PAIR_P(MSG_INFO_PROTOCOL, PROTOCOL_VERSION, SS_CENTER); // Protocol: 1.0
- STATIC_PAIR_P(MSG_INFO_PSU, PSU_NAME, SS_CENTER);
+ VALUE_ITEM_P(MSG_INFO_BAUDRATE, STRINGIFY(BAUDRATE), SS_CENTER); // Baud: 250000
+ VALUE_ITEM_P(MSG_INFO_PROTOCOL, PROTOCOL_VERSION, SS_CENTER); // Protocol: 1.0
+ VALUE_ITEM_P(MSG_INFO_PSU, PSU_NAME, SS_CENTER);
END_SCREEN();
}
@@ -259,12 +263,13 @@ void menu_info_board() {
#endif
);
START_SCREEN();
- STATIC_ITEM(MSG_MARLIN, SS_CENTER|SS_INVERT); // Marlin
- STATIC_ITEM(SHORT_BUILD_VERSION); // x.x.x-Branch
- STATIC_ITEM(STRING_DISTRIBUTION_DATE); // YYYY-MM-DD HH:MM
- STATIC_ITEM(MACHINE_NAME); // My3DPrinter
- STATIC_ITEM(WEBSITE_URL); // www.my3dprinter.com
- STATIC_ITEM(MSG_INFO_EXTRUDERS ": " STRINGIFY(EXTRUDERS)); // Extruders: 2
+ STATIC_ITEM_P(PSTR(MSG_MARLIN), SS_CENTER|SS_INVERT); // Marlin
+ STATIC_ITEM_P(PSTR(SHORT_BUILD_VERSION)); // x.x.x-Branch
+ STATIC_ITEM_P(PSTR(STRING_DISTRIBUTION_DATE)); // YYYY-MM-DD HH:MM
+ STATIC_ITEM_P(PSTR(MACHINE_NAME)); // My3DPrinter
+ STATIC_ITEM_P(PSTR(WEBSITE_URL)); // www.my3dprinter.com
+ char buffer[21];
+ VALUE_ITEM_P(MSG_INFO_EXTRUDERS, STRINGIFY(EXTRUDERS), SS_CENTER); // Extruders: 2
#if ENABLED(AUTO_BED_LEVELING_3POINT)
STATIC_ITEM(MSG_3POINT_LEVELING); // 3-Point Leveling
#elif ENABLED(AUTO_BED_LEVELING_LINEAR)
@@ -286,9 +291,9 @@ void menu_info_board() {
//
void menu_info() {
START_MENU();
- MENU_BACK(MSG_MAIN);
+ BACK_ITEM(MSG_MAIN);
#if ENABLED(LCD_PRINTER_INFO_IS_BOOTSCREEN)
- MENU_ITEM(submenu, MSG_INFO_PRINTER_MENU, (
+ SUBMENU(MSG_INFO_PRINTER_MENU, (
#if ENABLED(SHOW_CUSTOM_BOOTSCREEN)
menu_show_custom_bootscreen
#else
@@ -296,24 +301,24 @@ void menu_info() {
#endif
));
#else
- MENU_ITEM(submenu, MSG_INFO_PRINTER_MENU, menu_info_printer); // Printer Info >
- MENU_ITEM(submenu, MSG_INFO_BOARD_MENU, menu_info_board); // Board Info >
+ SUBMENU(MSG_INFO_PRINTER_MENU, menu_info_printer); // Printer Info >
+ SUBMENU(MSG_INFO_BOARD_MENU, menu_info_board); // Board Info >
#if EXTRUDERS
- MENU_ITEM(submenu, MSG_INFO_THERMISTOR_MENU, menu_info_thermistors); // Thermistors >
+ SUBMENU(MSG_INFO_THERMISTOR_MENU, menu_info_thermistors); // Thermistors >
#endif
#endif
#if ENABLED(PRINTCOUNTER)
- MENU_ITEM(submenu, MSG_INFO_STATS_MENU, menu_info_stats); // Printer Stats >
+ SUBMENU(MSG_INFO_STATS_MENU, menu_info_stats); // Printer Stats >
#endif
#if HAS_GAMES
#if ENABLED(GAMES_EASTER_EGG)
- MENU_ITEM_DUMMY();
- MENU_ITEM_DUMMY();
- MENU_ITEM_DUMMY();
+ SKIP_ITEM();
+ SKIP_ITEM();
+ SKIP_ITEM();
#endif
- MENU_ITEM(submenu, MSG_GAMES, (
+ SUBMENU(MSG_GAMES, (
#if HAS_GAME_MENU
menu_game
#elif ENABLED(MARLIN_BRICKOUT)
diff --git a/Marlin/src/lcd/menu/menu_job_recovery.cpp b/Marlin/src/lcd/menu/menu_job_recovery.cpp
index 449251d9b24a..0b0b0409219e 100644
--- a/Marlin/src/lcd/menu/menu_job_recovery.cpp
+++ b/Marlin/src/lcd/menu/menu_job_recovery.cpp
@@ -50,8 +50,8 @@ void menu_job_recovery() {
ui.defer_status_screen();
START_MENU();
STATIC_ITEM(MSG_OUTAGE_RECOVERY);
- MENU_ITEM(function, MSG_RESUME_PRINT, lcd_power_loss_recovery_resume);
- MENU_ITEM(function, MSG_STOP_PRINT, lcd_power_loss_recovery_cancel);
+ ACTION_ITEM(MSG_RESUME_PRINT, lcd_power_loss_recovery_resume);
+ ACTION_ITEM(MSG_STOP_PRINT, lcd_power_loss_recovery_cancel);
END_MENU();
}
diff --git a/Marlin/src/lcd/menu/menu_led.cpp b/Marlin/src/lcd/menu/menu_led.cpp
index 5ccac8a0ee0a..e6644c6852fd 100644
--- a/Marlin/src/lcd/menu/menu_led.cpp
+++ b/Marlin/src/lcd/menu/menu_led.cpp
@@ -38,15 +38,15 @@
#if LCD_HEIGHT > 2
STATIC_ITEM(MSG_LED_PRESETS, SS_CENTER|SS_INVERT);
#endif
- MENU_BACK(MSG_LED_CONTROL);
- MENU_ITEM(function, MSG_SET_LEDS_WHITE, leds.set_white);
- MENU_ITEM(function, MSG_SET_LEDS_RED, leds.set_red);
- MENU_ITEM(function, MSG_SET_LEDS_ORANGE, leds.set_orange);
- MENU_ITEM(function, MSG_SET_LEDS_YELLOW,leds.set_yellow);
- MENU_ITEM(function, MSG_SET_LEDS_GREEN, leds.set_green);
- MENU_ITEM(function, MSG_SET_LEDS_BLUE, leds.set_blue);
- MENU_ITEM(function, MSG_SET_LEDS_INDIGO, leds.set_indigo);
- MENU_ITEM(function, MSG_SET_LEDS_VIOLET, leds.set_violet);
+ BACK_ITEM(MSG_LED_CONTROL);
+ ACTION_ITEM(MSG_SET_LEDS_WHITE, leds.set_white);
+ ACTION_ITEM(MSG_SET_LEDS_RED, leds.set_red);
+ ACTION_ITEM(MSG_SET_LEDS_ORANGE, leds.set_orange);
+ ACTION_ITEM(MSG_SET_LEDS_YELLOW,leds.set_yellow);
+ ACTION_ITEM(MSG_SET_LEDS_GREEN, leds.set_green);
+ ACTION_ITEM(MSG_SET_LEDS_BLUE, leds.set_blue);
+ ACTION_ITEM(MSG_SET_LEDS_INDIGO, leds.set_indigo);
+ ACTION_ITEM(MSG_SET_LEDS_VIOLET, leds.set_violet);
END_MENU();
}
@@ -54,14 +54,14 @@
void menu_led_custom() {
START_MENU();
- MENU_BACK(MSG_LED_CONTROL);
- MENU_ITEM_EDIT_CALLBACK(uint8, MSG_INTENSITY_R, &leds.color.r, 0, 255, leds.update, true);
- MENU_ITEM_EDIT_CALLBACK(uint8, MSG_INTENSITY_G, &leds.color.g, 0, 255, leds.update, true);
- MENU_ITEM_EDIT_CALLBACK(uint8, MSG_INTENSITY_B, &leds.color.b, 0, 255, leds.update, true);
+ BACK_ITEM(MSG_LED_CONTROL);
+ EDIT_ITEM(uint8, MSG_INTENSITY_R, &leds.color.r, 0, 255, leds.update, true);
+ EDIT_ITEM(uint8, MSG_INTENSITY_G, &leds.color.g, 0, 255, leds.update, true);
+ EDIT_ITEM(uint8, MSG_INTENSITY_B, &leds.color.b, 0, 255, leds.update, true);
#if EITHER(RGBW_LED, NEOPIXEL_LED)
- MENU_ITEM_EDIT_CALLBACK(uint8, MSG_INTENSITY_W, &leds.color.w, 0, 255, leds.update, true);
+ EDIT_ITEM(uint8, MSG_INTENSITY_W, &leds.color.w, 0, 255, leds.update, true);
#if ENABLED(NEOPIXEL_LED)
- MENU_ITEM_EDIT_CALLBACK(uint8, MSG_LED_BRIGHTNESS, &leds.color.i, 0, 255, leds.update, true);
+ EDIT_ITEM(uint8, MSG_LED_BRIGHTNESS, &leds.color.i, 0, 255, leds.update, true);
#endif
#endif
END_MENU();
@@ -69,14 +69,14 @@ void menu_led_custom() {
void menu_led() {
START_MENU();
- MENU_BACK(MSG_MAIN);
+ BACK_ITEM(MSG_MAIN);
bool led_on = leds.lights_on;
- MENU_ITEM_EDIT_CALLBACK(bool, MSG_LEDS, &led_on, leds.toggle);
- MENU_ITEM(function, MSG_SET_LEDS_DEFAULT, leds.set_default);
+ EDIT_ITEM(bool, MSG_LEDS, &led_on, leds.toggle);
+ ACTION_ITEM(MSG_SET_LEDS_DEFAULT, leds.set_default);
#if ENABLED(LED_COLOR_PRESETS)
- MENU_ITEM(submenu, MSG_LED_PRESETS, menu_led_presets);
+ SUBMENU(MSG_LED_PRESETS, menu_led_presets);
#endif
- MENU_ITEM(submenu, MSG_CUSTOM_LEDS, menu_led_custom);
+ SUBMENU(MSG_CUSTOM_LEDS, menu_led_custom);
END_MENU();
}
diff --git a/Marlin/src/lcd/menu/menu_main.cpp b/Marlin/src/lcd/menu/menu_main.cpp
index df43a09c72eb..0d0a6cdc5ee6 100644
--- a/Marlin/src/lcd/menu/menu_main.cpp
+++ b/Marlin/src/lcd/menu/menu_main.cpp
@@ -44,7 +44,7 @@
#if MACHINE_CAN_STOP
void menu_abort_confirm() {
- do_select_screen(PSTR(MSG_BUTTON_STOP), PSTR(MSG_BACK), ui.abort_print, ui.goto_previous_screen, PSTR(MSG_STOP_PRINT), nullptr, PSTR("?"));
+ do_select_screen(GET_TEXT(MSG_BUTTON_STOP), GET_TEXT(MSG_BACK), ui.abort_print, ui.goto_previous_screen, GET_TEXT(MSG_STOP_PRINT), nullptr, PSTR("?"));
}
#endif // MACHINE_CAN_STOP
@@ -62,7 +62,7 @@ void menu_configuration();
#endif
#if ENABLED(ADVANCED_PAUSE_FEATURE)
- void menu_temp_e0_filament_change();
+ void _menu_temp_filament_op(const PauseMode, const int8_t);
void menu_change_filament();
#endif
@@ -97,9 +97,9 @@ void menu_configuration();
void menu_main() {
START_MENU();
- MENU_BACK(MSG_WATCH);
+ BACK_ITEM(MSG_WATCH);
- const bool busy = IS_SD_PRINTING() || print_job_timer.isRunning()
+ const bool busy = printingIsActive()
#if ENABLED(SDSUPPORT)
, card_detected = card.isMounted()
, card_open = card_detected && card.isFileOpen()
@@ -108,12 +108,12 @@ void menu_main() {
if (busy) {
#if MACHINE_CAN_PAUSE
- MENU_ITEM(function, MSG_PAUSE_PRINT, ui.pause_print);
+ ACTION_ITEM(MSG_PAUSE_PRINT, ui.pause_print);
#endif
#if MACHINE_CAN_STOP
- MENU_ITEM(submenu, MSG_STOP_PRINT, menu_abort_confirm);
+ SUBMENU(MSG_STOP_PRINT, menu_abort_confirm);
#endif
- MENU_ITEM(submenu, MSG_TUNE, menu_tune);
+ SUBMENU(MSG_TUNE, menu_tune);
}
else {
#if !HAS_ENCODER_WHEEL && ENABLED(SDSUPPORT)
@@ -121,12 +121,12 @@ void menu_main() {
// Autostart
//
#if ENABLED(MENU_ADDAUTOSTART)
- if (!busy) MENU_ITEM(function, MSG_AUTOSTART, card.beginautostart);
+ if (!busy) ACTION_ITEM(MSG_AUTOSTART, card.beginautostart);
#endif
if (card_detected) {
if (!card_open) {
- MENU_ITEM(submenu, MSG_MEDIA_MENU, menu_media);
+ SUBMENU(MSG_MEDIA_MENU, menu_media);
MENU_ITEM(gcode,
#if PIN_EXISTS(SD_DETECT)
MSG_CHANGE_MEDIA, PSTR("M21")
@@ -138,73 +138,72 @@ void menu_main() {
}
else {
#if PIN_EXISTS(SD_DETECT)
- MENU_ITEM(function, MSG_NO_MEDIA, nullptr);
+ ACTION_ITEM(MSG_NO_MEDIA, nullptr);
#else
- MENU_ITEM(gcode, MSG_INIT_MEDIA, PSTR("M21"));
- MENU_ITEM(function, MSG_MEDIA_RELEASED, nullptr);
+ GCODES_ITEM(MSG_INIT_MEDIA, PSTR("M21"));
+ ACTION_ITEM(MSG_MEDIA_RELEASED, nullptr);
#endif
}
#endif // !HAS_ENCODER_WHEEL && SDSUPPORT
#if MACHINE_CAN_PAUSE
- const bool paused = (print_job_timer.isPaused()
- #if ENABLED(SDSUPPORT)
- || card.isPaused()
- #endif
- );
- if (paused) MENU_ITEM(function, MSG_RESUME_PRINT, ui.resume_print);
+ if (printingIsPaused()) ACTION_ITEM(MSG_RESUME_PRINT, ui.resume_print);
#endif
- MENU_ITEM(submenu, MSG_MOTION, menu_motion);
+ SUBMENU(MSG_MOTION, menu_motion);
}
#if HAS_CUTTER
- MENU_ITEM(submenu, MSG_CUTTER(MENU), menu_spindle_laser);
+ SUBMENU(MSG_CUTTER(MENU), menu_spindle_laser);
#endif
- MENU_ITEM(submenu, MSG_TEMPERATURE, menu_temperature);
+ SUBMENU(MSG_TEMPERATURE, menu_temperature);
#if ENABLED(MIXING_EXTRUDER)
- MENU_ITEM(submenu, MSG_MIXER, menu_mixer);
+ SUBMENU(MSG_MIXER, menu_mixer);
#endif
#if ENABLED(MMU2_MENUS)
- if (!busy) MENU_ITEM(submenu, MSG_MMU2_MENU, menu_mmu2);
+ if (!busy) SUBMENU(MSG_MMU2_MENU, menu_mmu2);
#endif
- MENU_ITEM(submenu, MSG_CONFIGURATION, menu_configuration);
+ SUBMENU(MSG_CONFIGURATION, menu_configuration);
#if ENABLED(CUSTOM_USER_MENUS)
- MENU_ITEM(submenu, MSG_USER_MENU, menu_user);
+ #ifdef CUSTOM_USER_MENU_TITLE
+ SUBMENU_P(PSTR(CUSTOM_USER_MENU_TITLE), menu_user);
+ #else
+ SUBMENU(MSG_USER_MENU, menu_user);
+ #endif
#endif
#if ENABLED(ADVANCED_PAUSE_FEATURE)
#if E_STEPPERS == 1 && DISABLED(FILAMENT_LOAD_UNLOAD_GCODES)
if (thermalManager.targetHotEnoughToExtrude(active_extruder))
- MENU_ITEM(gcode, MSG_FILAMENTCHANGE, PSTR("M600 B0"));
+ GCODES_ITEM(MSG_FILAMENTCHANGE, PSTR("M600 B0"));
else
- MENU_ITEM(submenu, MSG_FILAMENTCHANGE, menu_temp_e0_filament_change);
+ SUBMENU(MSG_FILAMENTCHANGE, [](){ _menu_temp_filament_op(PAUSE_MODE_CHANGE_FILAMENT, 0); });
#else
- MENU_ITEM(submenu, MSG_FILAMENTCHANGE, menu_change_filament);
+ SUBMENU(MSG_FILAMENTCHANGE, menu_change_filament);
#endif
#endif
#if ENABLED(LCD_INFO_MENU)
- MENU_ITEM(submenu, MSG_INFO_MENU, menu_info);
+ SUBMENU(MSG_INFO_MENU, menu_info);
#endif
#if ENABLED(LED_CONTROL_MENU)
- MENU_ITEM(submenu, MSG_LED_CONTROL, menu_led);
+ SUBMENU(MSG_LED_CONTROL, menu_led);
#endif
//
// Switch power on/off
//
- #if HAS_POWER_SWITCH
+ #if ENABLED(PSU_CONTROL)
if (powersupply_on)
- MENU_ITEM(gcode, MSG_SWITCH_PS_OFF, PSTR("M81"));
+ GCODES_ITEM(MSG_SWITCH_PS_OFF, PSTR("M81"));
else
- MENU_ITEM(gcode, MSG_SWITCH_PS_ON, PSTR("M80"));
+ GCODES_ITEM(MSG_SWITCH_PS_ON, PSTR("M80"));
#endif
#if HAS_ENCODER_WHEEL && ENABLED(SDSUPPORT)
@@ -212,7 +211,7 @@ void menu_main() {
// Autostart
//
#if ENABLED(MENU_ADDAUTOSTART)
- if (!busy) MENU_ITEM(function, MSG_AUTOSTART, card.beginautostart);
+ if (!busy) ACTION_ITEM(MSG_AUTOSTART, card.beginautostart);
#endif
if (card_detected) {
@@ -224,37 +223,37 @@ void menu_main() {
MSG_RELEASE_MEDIA, PSTR("M22")
#endif
);
- MENU_ITEM(submenu, MSG_MEDIA_MENU, menu_media);
+ SUBMENU(MSG_MEDIA_MENU, menu_media);
}
}
else {
#if PIN_EXISTS(SD_DETECT)
- MENU_ITEM(function, MSG_NO_MEDIA, nullptr);
+ ACTION_ITEM(MSG_NO_MEDIA, nullptr);
#else
- MENU_ITEM(gcode, MSG_INIT_MEDIA, PSTR("M21"));
- MENU_ITEM(function, MSG_MEDIA_RELEASED, nullptr);
+ GCODES_ITEM(MSG_INIT_MEDIA, PSTR("M21"));
+ ACTION_ITEM(MSG_MEDIA_RELEASED, nullptr);
#endif
}
#endif // HAS_ENCODER_WHEEL && SDSUPPORT
#if HAS_SERVICE_INTERVALS
#if SERVICE_INTERVAL_1 > 0
- MENU_ITEM(submenu, SERVICE_NAME_1, menu_service1);
+ SUBMENU_P(PSTR(SERVICE_NAME_1), menu_service1);
#endif
#if SERVICE_INTERVAL_2 > 0
- MENU_ITEM(submenu, SERVICE_NAME_2, menu_service2);
+ SUBMENU_P(PSTR(SERVICE_NAME_2), menu_service2);
#endif
#if SERVICE_INTERVAL_3 > 0
- MENU_ITEM(submenu, SERVICE_NAME_3, menu_service3);
+ SUBMENU_P(PSTR(SERVICE_NAME_3), menu_service3);
#endif
#endif
#if HAS_GAMES && DISABLED(LCD_INFO_MENU)
#if ENABLED(GAMES_EASTER_EGG)
- MENU_ITEM_DUMMY();
- MENU_ITEM_DUMMY();
+ SKIP_ITEM();
+ SKIP_ITEM();
#endif
- MENU_ITEM(submenu, MSG_GAMES, (
+ SUBMENU(MSG_GAMES, (
#if HAS_GAME_MENU
menu_game
#elif ENABLED(MARLIN_BRICKOUT)
diff --git a/Marlin/src/lcd/menu/menu_media.cpp b/Marlin/src/lcd/menu/menu_media.cpp
index ac1631660d2c..11c57da605f8 100644
--- a/Marlin/src/lcd/menu/menu_media.cpp
+++ b/Marlin/src/lcd/menu/menu_media.cpp
@@ -31,13 +31,6 @@
#include "menu.h"
#include "../../sd/cardreader.h"
-#if !PIN_EXISTS(SD_DETECT)
- void lcd_sd_refresh() {
- encoderTopLine = 0;
- card.mount();
- }
-#endif
-
void lcd_sd_updir() {
ui.encoderPosition = card.cdup() ? ENCODER_STEPS_PER_MENU_ITEM : 0;
encoderTopLine = 0;
@@ -87,9 +80,9 @@ inline void sdcard_start_selected_file() {
buffer[0] = ' ';
strcpy(buffer + 1, longest);
do_select_screen(
- PSTR(MSG_BUTTON_PRINT), PSTR(MSG_BUTTON_CANCEL),
+ GET_TEXT(MSG_BUTTON_PRINT), GET_TEXT(MSG_BUTTON_CANCEL),
sdcard_start_selected_file, ui.goto_previous_screen,
- PSTR(MSG_START_PRINT), buffer, PSTR("?")
+ GET_TEXT(MSG_START_PRINT), buffer, PSTR("?")
);
}
@@ -138,14 +131,14 @@ void menu_media() {
#endif
START_MENU();
- MENU_BACK(MSG_MAIN);
+ BACK_ITEM(MSG_MAIN);
if (card.flag.workDirIsRoot) {
#if !PIN_EXISTS(SD_DETECT)
- MENU_ITEM(function, LCD_STR_REFRESH MSG_REFRESH, lcd_sd_refresh);
+ ACTION_ITEM(MSG_REFRESH, [](){ encoderTopLine = 0; card.mount(); });
#endif
}
else if (card.isMounted())
- MENU_ITEM(function, LCD_STR_FOLDER "..", lcd_sd_updir);
+ ACTION_ITEM_P(PSTR(LCD_STR_FOLDER ".."), lcd_sd_updir);
if (ui.should_draw()) for (uint16_t i = 0; i < fileCnt; i++) {
if (_menuLineNr == _thisItemNr) {
@@ -163,7 +156,7 @@ void menu_media() {
MENU_ITEM(sdfile, MSG_MEDIA_MENU, card);
}
else {
- MENU_ITEM_DUMMY();
+ SKIP_ITEM();
}
}
END_MENU();
diff --git a/Marlin/src/lcd/menu/menu_mixer.cpp b/Marlin/src/lcd/menu/menu_mixer.cpp
index cd23282044ee..c8484edc9444 100644
--- a/Marlin/src/lcd/menu/menu_mixer.cpp
+++ b/Marlin/src/lcd/menu/menu_mixer.cpp
@@ -29,11 +29,9 @@
#if HAS_LCD_MENU && ENABLED(MIXING_EXTRUDER)
#include "menu.h"
-#include "../../feature/mixing.h"
+#include "menu_addon.h"
-#include "../dogm/ultralcd_DOGM.h"
-#include "../ultralcd.h"
-#include "../lcdprint.h"
+#include "../../feature/mixing.h"
#define CHANNEL_MIX_EDITING !DUAL_MIXING_EXTRUDER
@@ -43,16 +41,17 @@
ui.defer_status_screen();
ENCODER_RATE_MULTIPLY(true);
if (ui.encoderPosition != 0) {
- mixer.gradient.start_z += float(int16_t(ui.encoderPosition)) * 0.1;
+ mixer.gradient.start_z += float(int32_t(ui.encoderPosition)) * 0.1;
ui.encoderPosition = 0;
NOLESS(mixer.gradient.start_z, 0);
NOMORE(mixer.gradient.start_z, Z_MAX_POS);
}
if (ui.should_draw()) {
char tmp[21];
- sprintf_P(tmp, PSTR(MSG_START_Z ": %4d.%d mm"), int(mixer.gradient.start_z), int(mixer.gradient.start_z * 10) % 10);
+ strcpy_P(tmp, GET_TEXT(MSG_START_Z));
+ sprintf_P(tmp + strlen(tmp), PSTR(": %4d.%d mm"), int(mixer.gradient.start_z), int(mixer.gradient.start_z * 10) % 10);
SETCURSOR(2, (LCD_HEIGHT - 1) / 2);
- LCDPRINT(tmp);
+ lcd_put_u8str(tmp);
}
if (ui.lcd_clicked) {
@@ -67,7 +66,7 @@
ui.defer_status_screen();
ENCODER_RATE_MULTIPLY(true);
if (ui.encoderPosition != 0) {
- mixer.gradient.end_z += float(int16_t(ui.encoderPosition)) * 0.1;
+ mixer.gradient.end_z += float(int32_t(ui.encoderPosition)) * 0.1;
ui.encoderPosition = 0;
NOLESS(mixer.gradient.end_z, 0);
NOMORE(mixer.gradient.end_z, Z_MAX_POS);
@@ -75,9 +74,10 @@
if (ui.should_draw()) {
char tmp[21];
- sprintf_P(tmp, PSTR(MSG_END_Z ": %4d.%d mm"), int(mixer.gradient.end_z), int(mixer.gradient.end_z * 10) % 10);
+ strcpy_P(tmp, GET_TEXT(MSG_END_Z));
+ sprintf_P(tmp + strlen(tmp), PSTR(": %4d.%d mm"), int(mixer.gradient.end_z), int(mixer.gradient.end_z * 10) % 10);
SETCURSOR(2, (LCD_HEIGHT - 1) / 2);
- LCDPRINT(tmp);
+ lcd_put_u8str(tmp);
}
if (ui.lcd_clicked) {
@@ -90,27 +90,27 @@
void lcd_mixer_edit_gradient_menu() {
START_MENU();
- MENU_BACK(MSG_MIXER);
+ BACK_ITEM(MSG_MIXER);
- MENU_ITEM_EDIT_CALLBACK(int8, MSG_START_VTOOL, &mixer.gradient.start_vtool, 0, MIXING_VIRTUAL_TOOLS - 1, mixer.refresh_gradient);
- MENU_ITEM_EDIT_CALLBACK(int8, MSG_END_VTOOL, &mixer.gradient.end_vtool, 0, MIXING_VIRTUAL_TOOLS - 1, mixer.refresh_gradient);
+ EDIT_ITEM(int8, MSG_START_VTOOL, &mixer.gradient.start_vtool, 0, MIXING_VIRTUAL_TOOLS - 1, mixer.refresh_gradient);
+ EDIT_ITEM(int8, MSG_END_VTOOL, &mixer.gradient.end_vtool, 0, MIXING_VIRTUAL_TOOLS - 1, mixer.refresh_gradient);
#if ENABLED(GRADIENT_VTOOL)
- MENU_ITEM_EDIT_CALLBACK(int8, MSG_GRADIENT_ALIAS, &mixer.gradient.vtool_index, 0, MIXING_VIRTUAL_TOOLS - 1, mixer.refresh_gradient);
+ EDIT_ITEM(int8, MSG_GRADIENT_ALIAS, &mixer.gradient.vtool_index, 0, MIXING_VIRTUAL_TOOLS - 1, mixer.refresh_gradient);
#endif
char tmp[18];
- MENU_ITEM(submenu, MSG_START_Z ":", lcd_mixer_gradient_z_start_edit);
+ SUBMENU(MSG_START_Z, lcd_mixer_gradient_z_start_edit);
MENU_ITEM_ADDON_START(9);
sprintf_P(tmp, PSTR("%4d.%d mm"), int(mixer.gradient.start_z), int(mixer.gradient.start_z * 10) % 10);
- LCDPRINT(tmp);
+ lcd_put_u8str(tmp);
MENU_ITEM_ADDON_END();
- MENU_ITEM(submenu, MSG_END_Z ":", lcd_mixer_gradient_z_end_edit);
+ SUBMENU(MSG_END_Z, lcd_mixer_gradient_z_end_edit);
MENU_ITEM_ADDON_START(9);
sprintf_P(tmp, PSTR("%4d.%d mm"), int(mixer.gradient.end_z), int(mixer.gradient.end_z * 10) % 10);
- LCDPRINT(tmp);
+ lcd_put_u8str(tmp);
MENU_ITEM_ADDON_END();
END_MENU();
@@ -122,10 +122,10 @@ static uint8_t v_index;
#if DUAL_MIXING_EXTRUDER
void _lcd_draw_mix(const uint8_t y) {
- char tmp[21];
- sprintf_P(tmp, PSTR(MSG_MIX ": %3d%% %3d%%"), int(mixer.mix[0]), int(mixer.mix[1]));
- SETCURSOR(2, y);
- LCDPRINT(tmp);
+ char tmp[20]; // "100%_100%"
+ sprintf_P(tmp, PSTR("%3d%% %3d%%"), int(mixer.mix[0]), int(mixer.mix[1]));
+ SETCURSOR(2, y); lcd_put_u8str_P(GET_TEXT(MSG_MIX));
+ SETCURSOR_RJ(9, y); lcd_put_u8str(tmp);
}
#endif
@@ -158,10 +158,10 @@ void lcd_mixer_mix_edit() {
#if CHANNEL_MIX_EDITING
- #define EDIT_COLOR(N) MENU_MULTIPLIER_ITEM_EDIT(float52, MSG_MIX_COMPONENT " " STRINGIFY(N), &mixer.collector[N-1], 0, 10);
+ #define EDIT_COLOR(N) EDIT_ITEM_FAST(float52, MSG_MIX_COMPONENT_##N, &mixer.collector[N-1], 0, 10);
START_MENU();
- MENU_BACK(MSG_MIXER);
+ BACK_ITEM(MSG_MIXER);
EDIT_COLOR(1);
EDIT_COLOR(2);
#if MIXING_STEPPERS > 2
@@ -176,14 +176,14 @@ void lcd_mixer_mix_edit() {
#endif
#endif
#endif
- MENU_ITEM(function, MSG_CYCLE_MIX, _lcd_mixer_cycle_mix);
- MENU_ITEM(function, MSG_COMMIT_VTOOL, _lcd_mixer_commit_vtool);
+ ACTION_ITEM(MSG_CYCLE_MIX, _lcd_mixer_cycle_mix);
+ ACTION_ITEM(MSG_COMMIT_VTOOL, _lcd_mixer_commit_vtool);
END_MENU();
#elif DUAL_MIXING_EXTRUDER
if (ui.encoderPosition != 0) {
- mixer.mix[0] += int16_t(ui.encoderPosition);
+ mixer.mix[0] += int32_t(ui.encoderPosition);
ui.encoderPosition = 0;
if (mixer.mix[0] < 0) mixer.mix[0] += 101;
if (mixer.mix[0] > 100) mixer.mix[0] -= 101;
@@ -199,7 +199,7 @@ void lcd_mixer_mix_edit() {
#else
START_MENU();
- MENU_BACK(MSG_MIXER);
+ BACK_ITEM(MSG_MIXER);
END_MENU();
#endif
@@ -250,23 +250,23 @@ void lcd_mixer_mix_edit() {
//
void menu_mixer_vtools_reset_confirm() {
do_select_screen(
- PSTR(MSG_BUTTON_RESET), PSTR(MSG_BUTTON_CANCEL),
+ GET_TEXT(MSG_BUTTON_RESET), GET_TEXT(MSG_BUTTON_CANCEL),
[]{
mixer.reset_vtools();
LCD_MESSAGEPGM(MSG_VTOOLS_RESET);
ui.return_to_status();
},
ui.goto_previous_screen,
- PSTR(MSG_RESET_VTOOLS), nullptr, PSTR("?")
+ GET_TEXT(MSG_RESET_VTOOLS), nullptr, PSTR("?")
);
}
void menu_mixer() {
START_MENU();
- MENU_BACK(MSG_MAIN);
+ BACK_ITEM(MSG_MAIN);
v_index = mixer.get_current_vtool();
- MENU_ITEM_EDIT_CALLBACK(uint8, MSG_ACTIVE_VTOOL, &v_index, 0, MIXING_VIRTUAL_TOOLS - 1, _lcd_mixer_select_vtool
+ EDIT_ITEM(uint8, MSG_ACTIVE_VTOOL, &v_index, 0, MIXING_VIRTUAL_TOOLS - 1, _lcd_mixer_select_vtool
#if DUAL_MIXING_EXTRUDER
, true
#endif
@@ -275,29 +275,29 @@ void menu_mixer() {
#if DUAL_MIXING_EXTRUDER
{
char tmp[10];
- MENU_ITEM(submenu, MSG_MIX, lcd_mixer_mix_edit);
+ SUBMENU(MSG_MIX, lcd_mixer_mix_edit);
MENU_ITEM_ADDON_START(10);
mixer.update_mix_from_vtool();
sprintf_P(tmp, PSTR("%3d;%3d%%"), int(mixer.mix[0]), int(mixer.mix[1]));
- LCDPRINT(tmp);
+ lcd_put_u8str(tmp);
MENU_ITEM_ADDON_END();
- MENU_ITEM(function, MSG_TOGGLE_MIX, _lcd_mixer_toggle_mix);
+ ACTION_ITEM(MSG_TOGGLE_MIX, _lcd_mixer_toggle_mix);
}
#else
- MENU_ITEM(submenu, MSG_MIX, _lcd_goto_mix_edit);
+ SUBMENU(MSG_MIX, _lcd_goto_mix_edit);
#endif
- MENU_ITEM(submenu, MSG_RESET_VTOOLS, menu_mixer_vtools_reset_confirm);
+ SUBMENU(MSG_RESET_VTOOLS, menu_mixer_vtools_reset_confirm);
#if ENABLED(GRADIENT_MIX)
{
char tmp[13];
- MENU_ITEM(submenu, MSG_GRADIENT, lcd_mixer_edit_gradient_menu);
+ SUBMENU(MSG_GRADIENT, lcd_mixer_edit_gradient_menu);
MENU_ITEM_ADDON_START(10);
sprintf_P(tmp, PSTR("T%i->T%i"), mixer.gradient.start_vtool, mixer.gradient.end_vtool);
- LCDPRINT(tmp);
+ lcd_put_u8str(tmp);
MENU_ITEM_ADDON_END();
- MENU_ITEM(function, MSG_REVERSE_GRADIENT, _lcd_mixer_reverse_gradient);
+ ACTION_ITEM(MSG_REVERSE_GRADIENT, _lcd_mixer_reverse_gradient);
}
#endif
diff --git a/Marlin/src/lcd/menu/menu_mmu2.cpp b/Marlin/src/lcd/menu/menu_mmu2.cpp
index 9a0908961e05..aa6eb27ea14d 100644
--- a/Marlin/src/lcd/menu/menu_mmu2.cpp
+++ b/Marlin/src/lcd/menu/menu_mmu2.cpp
@@ -38,23 +38,18 @@ bool mmuMenuWait;
void _mmu2_load_filamentToNozzle(uint8_t index) {
ui.reset_status();
ui.return_to_status();
- ui.status_printf_P(0, PSTR(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
+ ui.status_printf_P(0, GET_TEXT(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
if (mmu2.load_filament_to_nozzle(index)) ui.reset_status();
}
-inline void action_mmu2_load_filament_to_nozzl_e(const uint8_t tool) {
+inline void action_mmu2_load_filament_to_nozzle(const uint8_t tool) {
_mmu2_load_filamentToNozzle(tool);
ui.return_to_status();
}
-inline void action_mmu2_load_filament_to_nozzle_0() { action_mmu2_load_filament_to_nozzl_e(0); }
-inline void action_mmu2_load_filament_to_nozzle_1() { action_mmu2_load_filament_to_nozzl_e(1); }
-inline void action_mmu2_load_filament_to_nozzle_2() { action_mmu2_load_filament_to_nozzl_e(2); }
-inline void action_mmu2_load_filament_to_nozzle_3() { action_mmu2_load_filament_to_nozzl_e(3); }
-inline void action_mmu2_load_filament_to_nozzle_4() { action_mmu2_load_filament_to_nozzl_e(4); }
void _mmu2_load_filament(uint8_t index) {
ui.return_to_status();
- ui.status_printf_P(0, PSTR(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
+ ui.status_printf_P(0, GET_TEXT(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
mmu2.load_filament(index);
ui.reset_status();
}
@@ -63,32 +58,27 @@ void action_mmu2_load_all() {
_mmu2_load_filament(i);
ui.return_to_status();
}
-inline void action_mmu2_load_filament_0() { _mmu2_load_filament(0); }
-inline void action_mmu2_load_filament_1() { _mmu2_load_filament(1); }
-inline void action_mmu2_load_filament_2() { _mmu2_load_filament(2); }
-inline void action_mmu2_load_filament_3() { _mmu2_load_filament(3); }
-inline void action_mmu2_load_filament_4() { _mmu2_load_filament(4); }
void menu_mmu2_load_filament() {
START_MENU();
- MENU_BACK(MSG_MMU2_MENU);
- MENU_ITEM(function, MSG_MMU2_ALL, action_mmu2_load_all);
- MENU_ITEM(function, MSG_MMU2_FILAMENT0, action_mmu2_load_filament_0);
- MENU_ITEM(function, MSG_MMU2_FILAMENT1, action_mmu2_load_filament_1);
- MENU_ITEM(function, MSG_MMU2_FILAMENT2, action_mmu2_load_filament_2);
- MENU_ITEM(function, MSG_MMU2_FILAMENT3, action_mmu2_load_filament_3);
- MENU_ITEM(function, MSG_MMU2_FILAMENT4, action_mmu2_load_filament_4);
+ BACK_ITEM(MSG_MMU2_MENU);
+ ACTION_ITEM(MSG_MMU2_ALL, action_mmu2_load_all);
+ ACTION_ITEM(MSG_MMU2_FILAMENT0, [](){ _mmu2_load_filament(0); });
+ ACTION_ITEM(MSG_MMU2_FILAMENT1, [](){ _mmu2_load_filament(1); });
+ ACTION_ITEM(MSG_MMU2_FILAMENT2, [](){ _mmu2_load_filament(2); });
+ ACTION_ITEM(MSG_MMU2_FILAMENT3, [](){ _mmu2_load_filament(3); });
+ ACTION_ITEM(MSG_MMU2_FILAMENT4, [](){ _mmu2_load_filament(4); });
END_MENU();
}
void menu_mmu2_load_to_nozzle() {
START_MENU();
- MENU_BACK(MSG_MMU2_MENU);
- MENU_ITEM(function, MSG_MMU2_FILAMENT0, action_mmu2_load_filament_to_nozzle_0);
- MENU_ITEM(function, MSG_MMU2_FILAMENT1, action_mmu2_load_filament_to_nozzle_1);
- MENU_ITEM(function, MSG_MMU2_FILAMENT2, action_mmu2_load_filament_to_nozzle_2);
- MENU_ITEM(function, MSG_MMU2_FILAMENT3, action_mmu2_load_filament_to_nozzle_3);
- MENU_ITEM(function, MSG_MMU2_FILAMENT4, action_mmu2_load_filament_to_nozzle_4);
+ BACK_ITEM(MSG_MMU2_MENU);
+ ACTION_ITEM(MSG_MMU2_FILAMENT0, [](){ action_mmu2_load_filament_to_nozzle(0); });
+ ACTION_ITEM(MSG_MMU2_FILAMENT1, [](){ action_mmu2_load_filament_to_nozzle(1); });
+ ACTION_ITEM(MSG_MMU2_FILAMENT2, [](){ action_mmu2_load_filament_to_nozzle(2); });
+ ACTION_ITEM(MSG_MMU2_FILAMENT3, [](){ action_mmu2_load_filament_to_nozzle(3); });
+ ACTION_ITEM(MSG_MMU2_FILAMENT4, [](){ action_mmu2_load_filament_to_nozzle(4); });
END_MENU();
}
@@ -99,14 +89,9 @@ void menu_mmu2_load_to_nozzle() {
void _mmu2_eject_filament(uint8_t index) {
ui.reset_status();
ui.return_to_status();
- ui.status_printf_P(0, PSTR(MSG_MMU2_EJECTING_FILAMENT), int(index + 1));
+ ui.status_printf_P(0, GET_TEXT(MSG_MMU2_EJECTING_FILAMENT), int(index + 1));
if (mmu2.eject_filament(index, true)) ui.reset_status();
}
-inline void action_mmu2_eject_filament_0() { _mmu2_eject_filament(0); }
-inline void action_mmu2_eject_filament_1() { _mmu2_eject_filament(1); }
-inline void action_mmu2_eject_filament_2() { _mmu2_eject_filament(2); }
-inline void action_mmu2_eject_filament_3() { _mmu2_eject_filament(3); }
-inline void action_mmu2_eject_filament_4() { _mmu2_eject_filament(4); }
void action_mmu2_unload_filament() {
ui.reset_status();
@@ -118,12 +103,12 @@ void action_mmu2_unload_filament() {
void menu_mmu2_eject_filament() {
START_MENU();
- MENU_BACK(MSG_MMU2_MENU);
- MENU_ITEM(function, MSG_MMU2_FILAMENT0, action_mmu2_eject_filament_0);
- MENU_ITEM(function, MSG_MMU2_FILAMENT1, action_mmu2_eject_filament_1);
- MENU_ITEM(function, MSG_MMU2_FILAMENT2, action_mmu2_eject_filament_2);
- MENU_ITEM(function, MSG_MMU2_FILAMENT3, action_mmu2_eject_filament_3);
- MENU_ITEM(function, MSG_MMU2_FILAMENT4, action_mmu2_eject_filament_4);
+ BACK_ITEM(MSG_MMU2_MENU);
+ ACTION_ITEM(MSG_MMU2_FILAMENT0, [](){ _mmu2_eject_filament(0); });
+ ACTION_ITEM(MSG_MMU2_FILAMENT1, [](){ _mmu2_eject_filament(1); });
+ ACTION_ITEM(MSG_MMU2_FILAMENT2, [](){ _mmu2_eject_filament(2); });
+ ACTION_ITEM(MSG_MMU2_FILAMENT3, [](){ _mmu2_eject_filament(3); });
+ ACTION_ITEM(MSG_MMU2_FILAMENT4, [](){ _mmu2_eject_filament(4); });
END_MENU();
}
@@ -138,12 +123,12 @@ void action_mmu2_reset() {
void menu_mmu2() {
START_MENU();
- MENU_BACK(MSG_MAIN);
- MENU_ITEM(submenu, MSG_MMU2_LOAD_FILAMENT, menu_mmu2_load_filament);
- MENU_ITEM(submenu, MSG_MMU2_LOAD_TO_NOZZLE, menu_mmu2_load_to_nozzle);
- MENU_ITEM(submenu, MSG_MMU2_EJECT_FILAMENT, menu_mmu2_eject_filament);
- MENU_ITEM(function, MSG_MMU2_UNLOAD_FILAMENT, action_mmu2_unload_filament);
- MENU_ITEM(function, MSG_MMU2_RESET, action_mmu2_reset);
+ BACK_ITEM(MSG_MAIN);
+ SUBMENU(MSG_MMU2_LOAD_FILAMENT, menu_mmu2_load_filament);
+ SUBMENU(MSG_MMU2_LOAD_TO_NOZZLE, menu_mmu2_load_to_nozzle);
+ SUBMENU(MSG_MMU2_EJECT_FILAMENT, menu_mmu2_eject_filament);
+ ACTION_ITEM(MSG_MMU2_UNLOAD_FILAMENT, action_mmu2_unload_filament);
+ ACTION_ITEM(MSG_MMU2_RESET, action_mmu2_reset);
END_MENU();
}
@@ -155,22 +140,17 @@ inline void action_mmu2_choose(const uint8_t tool) {
currentTool = tool;
mmuMenuWait = false;
}
-inline void action_mmu2_choose0() { action_mmu2_choose(0); }
-inline void action_mmu2_choose1() { action_mmu2_choose(1); }
-inline void action_mmu2_choose2() { action_mmu2_choose(2); }
-inline void action_mmu2_choose3() { action_mmu2_choose(3); }
-inline void action_mmu2_choose4() { action_mmu2_choose(4); }
void menu_mmu2_choose_filament() {
START_MENU();
#if LCD_HEIGHT > 2
STATIC_ITEM(MSG_MMU2_CHOOSE_FILAMENT_HEADER, SS_CENTER|SS_INVERT);
#endif
- MENU_ITEM(function, MSG_MMU2_FILAMENT0, action_mmu2_choose0);
- MENU_ITEM(function, MSG_MMU2_FILAMENT1, action_mmu2_choose1);
- MENU_ITEM(function, MSG_MMU2_FILAMENT2, action_mmu2_choose2);
- MENU_ITEM(function, MSG_MMU2_FILAMENT3, action_mmu2_choose3);
- MENU_ITEM(function, MSG_MMU2_FILAMENT4, action_mmu2_choose4);
+ ACTION_ITEM(MSG_MMU2_FILAMENT0, [](){ action_mmu2_choose(0); });
+ ACTION_ITEM(MSG_MMU2_FILAMENT1, [](){ action_mmu2_choose(1); });
+ ACTION_ITEM(MSG_MMU2_FILAMENT2, [](){ action_mmu2_choose(2); });
+ ACTION_ITEM(MSG_MMU2_FILAMENT3, [](){ action_mmu2_choose(3); });
+ ACTION_ITEM(MSG_MMU2_FILAMENT4, [](){ action_mmu2_choose(4); });
END_MENU();
}
@@ -178,21 +158,16 @@ void menu_mmu2_choose_filament() {
// MMU2 Filament Runout
//
-inline void action_mmu2_M600_load_current_filament() { mmu2.load_filament(currentTool); }
-inline void action_mmu2_M600_load_current_filament_to_nozzle() { mmu2.load_filament_to_nozzle(currentTool); }
-inline void action_mmu2_M600_unload_filament() { mmu2.unload(); }
-inline void action_mmu2_M600_resume() { mmuMenuWait = false; }
-
void menu_mmu2_pause() {
currentTool = mmu2.get_current_tool();
START_MENU();
#if LCD_HEIGHT > 2
- STATIC_ITEM(MSG_MMU2_FILAMENT_CHANGE_HEADER, SS_CENTER|SS_INVERT);
+ STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, SS_CENTER|SS_INVERT);
#endif
- MENU_ITEM(function, MSG_MMU2_RESUME, action_mmu2_M600_resume);
- MENU_ITEM(function, MSG_MMU2_UNLOAD_FILAMENT, action_mmu2_M600_unload_filament);
- MENU_ITEM(function, MSG_MMU2_LOAD_FILAMENT, action_mmu2_M600_load_current_filament);
- MENU_ITEM(function, MSG_MMU2_LOAD_TO_NOZZLE, action_mmu2_M600_load_current_filament_to_nozzle);
+ ACTION_ITEM(MSG_MMU2_RESUME, [](){ mmuMenuWait = false; });
+ ACTION_ITEM(MSG_MMU2_UNLOAD_FILAMENT, [](){ mmu2.unload(); });
+ ACTION_ITEM(MSG_MMU2_LOAD_FILAMENT, [](){ mmu2.load_filament(currentTool); });
+ ACTION_ITEM(MSG_MMU2_LOAD_TO_NOZZLE, [](){ mmu2.load_filament_to_nozzle(currentTool); });
END_MENU();
}
diff --git a/Marlin/src/lcd/menu/menu_motion.cpp b/Marlin/src/lcd/menu/menu_motion.cpp
index da8c33225ccf..4f44a1143ea1 100644
--- a/Marlin/src/lcd/menu/menu_motion.cpp
+++ b/Marlin/src/lcd/menu/menu_motion.cpp
@@ -29,12 +29,7 @@
#if HAS_LCD_MENU
#include "menu.h"
-
-#include "../lcdprint.h"
-
-#if HAS_GRAPHICAL_LCD
- #include "../dogm/ultralcd_DOGM.h"
-#endif
+#include "menu_addon.h"
#include "../../module/motion.h"
@@ -127,16 +122,16 @@ static void _lcd_move_xyz(PGM_P name, AxisEnum axis) {
#endif
// Get the new position
- const float diff = float(int16_t(ui.encoderPosition)) * move_menu_scale;
+ const float diff = float(int32_t(ui.encoderPosition)) * move_menu_scale;
#if IS_KINEMATIC
manual_move_offset += diff;
- if (int16_t(ui.encoderPosition) < 0)
+ if (int32_t(ui.encoderPosition) < 0)
NOLESS(manual_move_offset, min - current_position[axis]);
else
NOMORE(manual_move_offset, max - current_position[axis]);
#else
current_position[axis] += diff;
- if (int16_t(ui.encoderPosition) < 0)
+ if (int32_t(ui.encoderPosition) < 0)
NOLESS(current_position[axis], min);
else
NOMORE(current_position[axis], max);
@@ -155,13 +150,13 @@ static void _lcd_move_xyz(PGM_P name, AxisEnum axis) {
draw_edit_screen(name, move_menu_scale >= 0.1f ? ftostr41sign(pos) : ftostr43sign(pos));
}
}
-void lcd_move_x() { _lcd_move_xyz(PSTR(MSG_MOVE_X), X_AXIS); }
-void lcd_move_y() { _lcd_move_xyz(PSTR(MSG_MOVE_Y), Y_AXIS); }
-void lcd_move_z() { _lcd_move_xyz(PSTR(MSG_MOVE_Z), Z_AXIS); }
+void lcd_move_x() { _lcd_move_xyz(GET_TEXT(MSG_MOVE_X), X_AXIS); }
+void lcd_move_y() { _lcd_move_xyz(GET_TEXT(MSG_MOVE_Y), Y_AXIS); }
+void lcd_move_z() { _lcd_move_xyz(GET_TEXT(MSG_MOVE_Z), Z_AXIS); }
#if E_MANUAL
- static void _lcd_move_e(
+ static void lcd_move_e(
#if E_MANUAL > 1
const int8_t eindex=-1
#endif
@@ -169,7 +164,7 @@ void lcd_move_z() { _lcd_move_xyz(PSTR(MSG_MOVE_Z), Z_AXIS); }
if (ui.use_click()) return ui.goto_previous_screen_no_defer();
if (ui.encoderPosition) {
if (!ui.processing_manual_move) {
- const float diff = float(int16_t(ui.encoderPosition)) * move_menu_scale;
+ const float diff = float(int32_t(ui.encoderPosition)) * move_menu_scale;
#if IS_KINEMATIC
manual_move_offset += diff;
#else
@@ -185,21 +180,19 @@ void lcd_move_z() { _lcd_move_xyz(PSTR(MSG_MOVE_Z), Z_AXIS); }
ui.encoderPosition = 0;
}
if (ui.should_draw()) {
- PGM_P pos_label;
- #if E_MANUAL == 1
- pos_label = PSTR(MSG_MOVE_E);
- #else
+ PGM_P pos_label = GET_TEXT(MSG_MOVE_E);
+ #if E_MANUAL > 1
switch (eindex) {
- default: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E1); break;
- case 1: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E2); break;
+ default: pos_label = GET_TEXT(MSG_MOVE_E0); break;
+ case 1: pos_label = GET_TEXT(MSG_MOVE_E1); break;
#if E_MANUAL > 2
- case 2: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E3); break;
+ case 2: pos_label = GET_TEXT(MSG_MOVE_E2); break;
#if E_MANUAL > 3
- case 3: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E4); break;
+ case 3: pos_label = GET_TEXT(MSG_MOVE_E3); break;
#if E_MANUAL > 4
- case 4: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E5); break;
+ case 4: pos_label = GET_TEXT(MSG_MOVE_E4); break;
#if E_MANUAL > 5
- case 5: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E6); break;
+ case 5: pos_label = GET_TEXT(MSG_MOVE_E5); break;
#endif // E_MANUAL > 5
#endif // E_MANUAL > 4
#endif // E_MANUAL > 3
@@ -218,24 +211,6 @@ void lcd_move_z() { _lcd_move_xyz(PSTR(MSG_MOVE_Z), Z_AXIS); }
}
}
- inline void lcd_move_e() { _lcd_move_e(); }
- #if E_MANUAL > 1
- inline void lcd_move_e0() { _lcd_move_e(0); }
- inline void lcd_move_e1() { _lcd_move_e(1); }
- #if E_MANUAL > 2
- inline void lcd_move_e2() { _lcd_move_e(2); }
- #if E_MANUAL > 3
- inline void lcd_move_e3() { _lcd_move_e(3); }
- #if E_MANUAL > 4
- inline void lcd_move_e4() { _lcd_move_e(4); }
- #if E_MANUAL > 5
- inline void lcd_move_e5() { _lcd_move_e(5); }
- #endif // E_MANUAL > 5
- #endif // E_MANUAL > 4
- #endif // E_MANUAL > 3
- #endif // E_MANUAL > 2
- #endif // E_MANUAL > 1
-
#endif // E_MANUAL
//
@@ -253,9 +228,6 @@ void _goto_manual_move(const float scale) {
move_menu_scale = scale;
ui.goto_screen(_manual_move_func_ptr);
}
-void menu_move_10mm() { _goto_manual_move(10); }
-void menu_move_1mm() { _goto_manual_move( 1); }
-void menu_move_01mm() { _goto_manual_move( 0.1f); }
void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int8_t eindex=-1) {
_manual_move_func_ptr = func;
@@ -275,65 +247,35 @@ void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int
}
#if ENABLED(PREVENT_COLD_EXTRUSION)
if (axis == E_AXIS && thermalManager.tooColdToExtrude(eindex >= 0 ? eindex : active_extruder))
- MENU_BACK(MSG_HOTEND_TOO_COLD);
+ BACK_ITEM(MSG_HOTEND_TOO_COLD);
else
#endif
{
- MENU_BACK(MSG_MOVE_AXIS);
- MENU_ITEM(submenu, MSG_MOVE_10MM, menu_move_10mm);
- MENU_ITEM(submenu, MSG_MOVE_1MM, menu_move_1mm);
- MENU_ITEM(submenu, MSG_MOVE_01MM, menu_move_01mm);
+ BACK_ITEM(MSG_MOVE_AXIS);
+ SUBMENU(MSG_MOVE_10MM, [](){ _goto_manual_move(10); });
+ SUBMENU(MSG_MOVE_1MM, [](){ _goto_manual_move( 1); });
+ SUBMENU(MSG_MOVE_01MM, [](){ _goto_manual_move( 0.1f); });
if (axis == Z_AXIS && (SHORT_MANUAL_Z_MOVE) > 0.0f && (SHORT_MANUAL_Z_MOVE) < 0.1f) {
- MENU_ITEM(submenu, "", []{ _goto_manual_move(float(SHORT_MANUAL_Z_MOVE)); });
- MENU_ITEM_ADDON_START(1);
+ SUBMENU_P(PSTR(""), []{ _goto_manual_move(float(SHORT_MANUAL_Z_MOVE)); });
+ MENU_ITEM_ADDON_START(0);
char tmp[20], numstr[10];
// Determine digits needed right of decimal
const uint8_t digs = !UNEAR_ZERO((SHORT_MANUAL_Z_MOVE) * 1000 - int((SHORT_MANUAL_Z_MOVE) * 1000)) ? 4 :
!UNEAR_ZERO((SHORT_MANUAL_Z_MOVE) * 100 - int((SHORT_MANUAL_Z_MOVE) * 100)) ? 3 : 2;
- sprintf_P(tmp, PSTR(MSG_MOVE_Z_DIST), dtostrf(SHORT_MANUAL_Z_MOVE, 1, digs, numstr));
- LCDPRINT(tmp);
+ sprintf_P(tmp, GET_TEXT(MSG_MOVE_Z_DIST), dtostrf(SHORT_MANUAL_Z_MOVE, 1, digs, numstr));
+ lcd_put_u8str(tmp);
MENU_ITEM_ADDON_END();
}
}
END_MENU();
}
-void lcd_move_get_x_amount() { _menu_move_distance(X_AXIS, lcd_move_x); }
-void lcd_move_get_y_amount() { _menu_move_distance(Y_AXIS, lcd_move_y); }
-void lcd_move_get_z_amount() { _menu_move_distance(Z_AXIS, lcd_move_z); }
-
-#if E_MANUAL
- void lcd_move_get_e_amount() { _menu_move_distance(E_AXIS, lcd_move_e, -1); }
- #if E_MANUAL > 1
- void lcd_move_get_e0_amount() { _menu_move_distance(E_AXIS, lcd_move_e0, 0); }
- void lcd_move_get_e1_amount() { _menu_move_distance(E_AXIS, lcd_move_e1, 1); }
- #if E_MANUAL > 2
- void lcd_move_get_e2_amount() { _menu_move_distance(E_AXIS, lcd_move_e2, 2); }
- #if E_MANUAL > 3
- void lcd_move_get_e3_amount() { _menu_move_distance(E_AXIS, lcd_move_e3, 3); }
- #if E_MANUAL > 4
- void lcd_move_get_e4_amount() { _menu_move_distance(E_AXIS, lcd_move_e4, 4); }
- #if E_MANUAL > 5
- void lcd_move_get_e5_amount() { _menu_move_distance(E_AXIS, lcd_move_e5, 5); }
- #endif // E_MANUAL > 5
- #endif // E_MANUAL > 4
- #endif // E_MANUAL > 3
- #endif // E_MANUAL > 2
- #endif // E_MANUAL > 1
-#endif // E_MANUAL
-
-#if ENABLED(DELTA)
- void lcd_lower_z_to_clip_height() {
- line_to_z(delta_clip_start_height);
- ui.synchronize();
- }
-#endif
void menu_move() {
START_MENU();
- MENU_BACK(MSG_MOTION);
+ BACK_ITEM(MSG_MOTION);
#if HAS_SOFTWARE_ENDSTOPS && ENABLED(SOFT_ENDSTOPS_MENU_ITEM)
- MENU_ITEM_EDIT(bool, MSG_LCD_SOFT_ENDSTOPS, &soft_endstops_enabled);
+ EDIT_ITEM(bool, MSG_LCD_SOFT_ENDSTOPS, &soft_endstops_enabled);
#endif
if (
@@ -350,88 +292,85 @@ void menu_move() {
true
#endif
) {
- MENU_ITEM(submenu, MSG_MOVE_X, lcd_move_get_x_amount);
- MENU_ITEM(submenu, MSG_MOVE_Y, lcd_move_get_y_amount);
+ SUBMENU(MSG_MOVE_X, [](){ _menu_move_distance(X_AXIS, lcd_move_x); });
+ SUBMENU(MSG_MOVE_Y, [](){ _menu_move_distance(Y_AXIS, lcd_move_y); });
}
#if ENABLED(DELTA)
else
- MENU_ITEM(function, MSG_FREE_XY, lcd_lower_z_to_clip_height);
+ ACTION_ITEM(MSG_FREE_XY, [](){ line_to_z(delta_clip_start_height); ui.synchronize(); });
#endif
- MENU_ITEM(submenu, MSG_MOVE_Z, lcd_move_get_z_amount);
+ SUBMENU(MSG_MOVE_Z, [](){ _menu_move_distance(Z_AXIS, lcd_move_z); });
}
else
- MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28"));
+ GCODES_ITEM(MSG_AUTO_HOME, PSTR("G28"));
#if ANY(SWITCHING_EXTRUDER, SWITCHING_NOZZLE, MAGNETIC_SWITCHING_TOOLHEAD)
- #if EXTRUDERS == 6
+ #if EXTRUDERS >= 4
switch (active_extruder) {
- case 0: MENU_ITEM(gcode, MSG_SELECT " " MSG_E2, PSTR("T1")); break;
- case 1: MENU_ITEM(gcode, MSG_SELECT " " MSG_E1, PSTR("T0")); break;
- case 2: MENU_ITEM(gcode, MSG_SELECT " " MSG_E4, PSTR("T3")); break;
- case 3: MENU_ITEM(gcode, MSG_SELECT " " MSG_E3, PSTR("T2")); break;
- case 4: MENU_ITEM(gcode, MSG_SELECT " " MSG_E6, PSTR("T5")); break;
- case 5: MENU_ITEM(gcode, MSG_SELECT " " MSG_E5, PSTR("T4")); break;
- }
- #elif EXTRUDERS == 5 || EXTRUDERS == 4
- switch (active_extruder) {
- case 0: MENU_ITEM(gcode, MSG_SELECT " " MSG_E2, PSTR("T1")); break;
- case 1: MENU_ITEM(gcode, MSG_SELECT " " MSG_E1, PSTR("T0")); break;
- case 2: MENU_ITEM(gcode, MSG_SELECT " " MSG_E4, PSTR("T3")); break;
- case 3: MENU_ITEM(gcode, MSG_SELECT " " MSG_E3, PSTR("T2")); break;
+ case 0: GCODES_ITEM(MSG_SELECT_E1, PSTR("T1")); break;
+ case 1: GCODES_ITEM(MSG_SELECT_E0, PSTR("T0")); break;
+ case 2: GCODES_ITEM(MSG_SELECT_E3, PSTR("T3")); break;
+ case 3: GCODES_ITEM(MSG_SELECT_E2, PSTR("T2")); break;
+ #if EXTRUDERS == 6
+ case 4: GCODES_ITEM(MSG_SELECT_E5, PSTR("T5")); break;
+ case 5: GCODES_ITEM(MSG_SELECT_E4, PSTR("T4")); break;
+ #endif
}
#elif EXTRUDERS == 3
if (active_extruder < 2) {
if (active_extruder)
- MENU_ITEM(gcode, MSG_SELECT " " MSG_E1, PSTR("T0"));
+ GCODES_ITEM(MSG_SELECT_E0, PSTR("T0"));
else
- MENU_ITEM(gcode, MSG_SELECT " " MSG_E2, PSTR("T1"));
+ GCODES_ITEM(MSG_SELECT_E1, PSTR("T1"));
}
#else
if (active_extruder)
- MENU_ITEM(gcode, MSG_SELECT " " MSG_E1, PSTR("T0"));
+ GCODES_ITEM(MSG_SELECT_E0, PSTR("T0"));
else
- MENU_ITEM(gcode, MSG_SELECT " " MSG_E2, PSTR("T1"));
+ GCODES_ITEM(MSG_SELECT_E1, PSTR("T1"));
#endif
#elif ENABLED(DUAL_X_CARRIAGE)
if (active_extruder)
- MENU_ITEM(gcode, MSG_SELECT " " MSG_E1, PSTR("T0"));
+ GCODES_ITEM(MSG_SELECT_E0, PSTR("T0"));
else
- MENU_ITEM(gcode, MSG_SELECT " " MSG_E2, PSTR("T1"));
+ GCODES_ITEM(MSG_SELECT_E1, PSTR("T1"));
#endif
#if E_MANUAL
+ // The current extruder
+ SUBMENU(MSG_MOVE_E, [](){ _menu_move_distance(E_AXIS, [](){ lcd_move_e(); }, -1); });
+
+ #define SUBMENU_MOVE_E(N) SUBMENU(MSG_MOVE_E##N, [](){ _menu_move_distance(E_AXIS, [](){ lcd_move_e(N); }, N); });
+
#if EITHER(SWITCHING_EXTRUDER, SWITCHING_NOZZLE)
- // Only the current...
- MENU_ITEM(submenu, MSG_MOVE_E, lcd_move_get_e_amount);
// ...and the non-switching
#if E_MANUAL == 5
- MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E5, lcd_move_get_e4_amount);
+ SUBMENU_MOVE_E(4);
#elif E_MANUAL == 3
- MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E3, lcd_move_get_e2_amount);
+ SUBMENU_MOVE_E(2);
#endif
#else
// Independent extruders with one E-stepper per hotend
- MENU_ITEM(submenu, MSG_MOVE_E, lcd_move_get_e_amount);
#if E_MANUAL > 1
- MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E1, lcd_move_get_e0_amount);
- MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E2, lcd_move_get_e1_amount);
+ SUBMENU_MOVE_E(0);
+ SUBMENU_MOVE_E(1);
#if E_MANUAL > 2
- MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E3, lcd_move_get_e2_amount);
+ SUBMENU_MOVE_E(2);
#if E_MANUAL > 3
- MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E4, lcd_move_get_e3_amount);
+ SUBMENU_MOVE_E(3);
#if E_MANUAL > 4
- MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E5, lcd_move_get_e4_amount);
+ SUBMENU_MOVE_E(4);
#if E_MANUAL > 5
- MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E6, lcd_move_get_e5_amount);
+ SUBMENU_MOVE_E(5);
#endif // E_MANUAL > 5
#endif // E_MANUAL > 4
#endif // E_MANUAL > 3
@@ -457,7 +396,7 @@ void menu_motion() {
//
// ^ Main
//
- MENU_BACK(MSG_MAIN);
+ BACK_ITEM(MSG_MAIN);
//
// Move Axis
@@ -465,23 +404,23 @@ void menu_motion() {
#if ENABLED(DELTA)
if (all_axes_homed())
#endif
- MENU_ITEM(submenu, MSG_MOVE_AXIS, menu_move);
+ SUBMENU(MSG_MOVE_AXIS, menu_move);
//
// Auto Home
//
- MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28"));
+ GCODES_ITEM(MSG_AUTO_HOME, PSTR("G28"));
#if ENABLED(INDIVIDUAL_AXIS_HOMING_MENU)
- MENU_ITEM(gcode, MSG_AUTO_HOME_X, PSTR("G28 X"));
- MENU_ITEM(gcode, MSG_AUTO_HOME_Y, PSTR("G28 Y"));
- MENU_ITEM(gcode, MSG_AUTO_HOME_Z, PSTR("G28 Z"));
+ GCODES_ITEM(MSG_AUTO_HOME_X, PSTR("G28 X"));
+ GCODES_ITEM(MSG_AUTO_HOME_Y, PSTR("G28 Y"));
+ GCODES_ITEM(MSG_AUTO_HOME_Z, PSTR("G28 Z"));
#endif
//
// Auto Z-Align
//
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
- MENU_ITEM(gcode, MSG_AUTO_Z_ALIGN, PSTR("G34"));
+ GCODES_ITEM(MSG_AUTO_Z_ALIGN, PSTR("G34"));
#endif
//
@@ -489,39 +428,40 @@ void menu_motion() {
//
#if ENABLED(AUTO_BED_LEVELING_UBL)
- MENU_ITEM(submenu, MSG_UBL_LEVEL_BED, _lcd_ubl_level_bed);
+ SUBMENU(MSG_UBL_LEVEL_BED, _lcd_ubl_level_bed);
#elif ENABLED(LCD_BED_LEVELING)
- if (!g29_in_progress) MENU_ITEM(submenu, MSG_BED_LEVELING, menu_bed_leveling);
+ if (!g29_in_progress) SUBMENU(MSG_BED_LEVELING, menu_bed_leveling);
#elif HAS_LEVELING && DISABLED(SLIM_LCD_MENUS)
#if DISABLED(PROBE_MANUALLY)
- MENU_ITEM(gcode, MSG_LEVEL_BED, PSTR("G28\nG29"));
+ GCODES_ITEM(MSG_LEVEL_BED, PSTR("G28\nG29"));
#endif
if (all_axes_homed() && leveling_is_valid()) {
- bool new_level_state = planner.leveling_active;
- MENU_ITEM_EDIT_CALLBACK(bool, MSG_BED_LEVELING, &new_level_state, _lcd_toggle_bed_leveling);
+ bool show_state = planner.leveling_active;
+ EDIT_ITEM(bool, MSG_BED_LEVELING, &show_state, _lcd_toggle_bed_leveling);
}
#if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float3, MSG_Z_FADE_HEIGHT, &lcd_z_fade_height, 0, 100, _lcd_set_z_fade_height);
+ editable.decimal = planner.z_fade_height;
+ EDIT_ITEM_FAST(float3, MSG_Z_FADE_HEIGHT, &editable.decimal, 0, 100, [](){ set_z_fade_height(editable.decimal); });
#endif
#endif
#if ENABLED(LEVEL_BED_CORNERS) && DISABLED(LCD_BED_LEVELING)
- MENU_ITEM(function, MSG_LEVEL_CORNERS, _lcd_level_bed_corners);
+ ACTION_ITEM(MSG_LEVEL_CORNERS, _lcd_level_bed_corners);
#endif
#if ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST)
- MENU_ITEM(gcode, MSG_M48_TEST, PSTR("G28\nM48 P10"));
+ GCODES_ITEM(MSG_M48_TEST, PSTR("G28\nM48 P10"));
#endif
//
// Disable Steppers
//
- MENU_ITEM(gcode, MSG_DISABLE_STEPPERS, PSTR("M84"));
+ GCODES_ITEM(MSG_DISABLE_STEPPERS, PSTR("M84"));
END_MENU();
}
diff --git a/Marlin/src/lcd/menu/menu_service.cpp b/Marlin/src/lcd/menu/menu_service.cpp
index fb7f05c90567..0d305d0281e1 100644
--- a/Marlin/src/lcd/menu/menu_service.cpp
+++ b/Marlin/src/lcd/menu/menu_service.cpp
@@ -45,10 +45,10 @@ inline void _service_reset(const int index) {
char sram[30];
strncpy_P(sram, PSTR(SERVICE_NAME_1), 29);
do_select_screen(
- PSTR(MSG_BUTTON_RESET), PSTR(MSG_BUTTON_CANCEL),
+ GET_TEXT(MSG_BUTTON_RESET), GET_TEXT(MSG_BUTTON_CANCEL),
[]{ _service_reset(1); },
ui.goto_previous_screen,
- PSTR(MSG_SERVICE_RESET), sram, PSTR("?")
+ GET_TEXT(MSG_SERVICE_RESET), sram, PSTR("?")
);
}
#endif
@@ -58,10 +58,10 @@ inline void _service_reset(const int index) {
char sram[30];
strncpy_P(sram, PSTR(SERVICE_NAME_2), 29);
do_select_screen(
- PSTR(MSG_BUTTON_RESET), PSTR(MSG_BUTTON_CANCEL),
+ GET_TEXT(MSG_BUTTON_RESET), GET_TEXT(MSG_BUTTON_CANCEL),
[]{ _service_reset(2); },
ui.goto_previous_screen,
- PSTR(MSG_SERVICE_RESET), sram, PSTR("?")
+ GET_TEXT(MSG_SERVICE_RESET), sram, PSTR("?")
);
}
#endif
@@ -71,10 +71,10 @@ inline void _service_reset(const int index) {
char sram[30];
strncpy_P(sram, PSTR(SERVICE_NAME_3), 29);
do_select_screen(
- PSTR(MSG_BUTTON_RESET), PSTR(MSG_BUTTON_CANCEL),
+ GET_TEXT(MSG_BUTTON_RESET), GET_TEXT(MSG_BUTTON_CANCEL),
[]{ _service_reset(3); },
ui.goto_previous_screen,
- PSTR(MSG_SERVICE_RESET), sram, PSTR("?")
+ GET_TEXT(MSG_SERVICE_RESET), sram, PSTR("?")
);
}
#endif
diff --git a/Marlin/src/lcd/menu/menu_spindle_laser.cpp b/Marlin/src/lcd/menu/menu_spindle_laser.cpp
index e3fda1dc378f..1c480577f17c 100644
--- a/Marlin/src/lcd/menu/menu_spindle_laser.cpp
+++ b/Marlin/src/lcd/menu/menu_spindle_laser.cpp
@@ -35,17 +35,17 @@
void menu_spindle_laser() {
START_MENU();
- MENU_BACK(MSG_MAIN);
+ BACK_ITEM(MSG_MAIN);
if (cutter.enabled()) {
#if ENABLED(SPINDLE_LASER_PWM)
- MENU_ITEM_EDIT_CALLBACK(CUTTER_MENU_TYPE, MSG_CUTTER(POWER), &cutter.power, SPEED_POWER_MIN, SPEED_POWER_MAX, cutter.update_output);
+ EDIT_ITEM(CUTTER_MENU_TYPE, MSG_CUTTER(POWER), &cutter.power, SPEED_POWER_MIN, SPEED_POWER_MAX);
#endif
- MENU_ITEM(function, MSG_CUTTER(OFF), cutter.disable);
+ ACTION_ITEM(MSG_CUTTER(OFF), cutter.disable);
}
else {
- MENU_ITEM(function, MSG_CUTTER(ON), cutter.enable_forward);
+ ACTION_ITEM(MSG_CUTTER(ON), cutter.enable_forward);
#if ENABLED(SPINDLE_CHANGE_DIR)
- MENU_ITEM(function, MSG_SPINDLE_REVERSE, cutter.enable_reverse);
+ ACTION_ITEM(MSG_SPINDLE_REVERSE, cutter.enable_reverse);
#endif
}
END_MENU();
diff --git a/Marlin/src/lcd/menu/menu_temperature.cpp b/Marlin/src/lcd/menu/menu_temperature.cpp
index 24b88e829c9e..f61f93389680 100644
--- a/Marlin/src/lcd/menu/menu_temperature.cpp
+++ b/Marlin/src/lcd/menu/menu_temperature.cpp
@@ -68,235 +68,111 @@ void _lcd_preheat(const int16_t endnum, const int16_t temph, const int16_t tempb
ui.return_to_status();
}
-#if HOTENDS > 1
-
- void lcd_preheat_m1_e1_only() { _lcd_preheat(1, ui.preheat_hotend_temp[0], -1, ui.preheat_fan_speed[0]); }
- void lcd_preheat_m2_e1_only() { _lcd_preheat(1, ui.preheat_hotend_temp[1], -1, ui.preheat_fan_speed[1]); }
- #if HAS_HEATED_BED
- void lcd_preheat_m1_e1() { _lcd_preheat(1, ui.preheat_hotend_temp[0], ui.preheat_bed_temp[0], ui.preheat_fan_speed[0]); }
- void lcd_preheat_m2_e1() { _lcd_preheat(1, ui.preheat_hotend_temp[1], ui.preheat_bed_temp[1], ui.preheat_fan_speed[1]); }
- #endif
- #if HOTENDS > 2
- void lcd_preheat_m1_e2_only() { _lcd_preheat(2, ui.preheat_hotend_temp[0], -1, ui.preheat_fan_speed[0]); }
- void lcd_preheat_m2_e2_only() { _lcd_preheat(2, ui.preheat_hotend_temp[1], -1, ui.preheat_fan_speed[1]); }
- #if HAS_HEATED_BED
- void lcd_preheat_m1_e2() { _lcd_preheat(2, ui.preheat_hotend_temp[0], ui.preheat_bed_temp[0], ui.preheat_fan_speed[0]); }
- void lcd_preheat_m2_e2() { _lcd_preheat(2, ui.preheat_hotend_temp[1], ui.preheat_bed_temp[1], ui.preheat_fan_speed[1]); }
- #endif
- #if HOTENDS > 3
- void lcd_preheat_m1_e3_only() { _lcd_preheat(3, ui.preheat_hotend_temp[0], -1, ui.preheat_fan_speed[0]); }
- void lcd_preheat_m2_e3_only() { _lcd_preheat(3, ui.preheat_hotend_temp[1], -1, ui.preheat_fan_speed[1]); }
- #if HAS_HEATED_BED
- void lcd_preheat_m1_e3() { _lcd_preheat(3, ui.preheat_hotend_temp[0], ui.preheat_bed_temp[0], ui.preheat_fan_speed[0]); }
- void lcd_preheat_m2_e3() { _lcd_preheat(3, ui.preheat_hotend_temp[1], ui.preheat_bed_temp[1], ui.preheat_fan_speed[1]); }
- #endif
- #if HOTENDS > 4
- void lcd_preheat_m1_e4_only() { _lcd_preheat(4, ui.preheat_hotend_temp[0], -1, ui.preheat_fan_speed[0]); }
- void lcd_preheat_m2_e4_only() { _lcd_preheat(4, ui.preheat_hotend_temp[1], -1, ui.preheat_fan_speed[1]); }
- #if HAS_HEATED_BED
- void lcd_preheat_m1_e4() { _lcd_preheat(4, ui.preheat_hotend_temp[0], ui.preheat_bed_temp[0], ui.preheat_fan_speed[0]); }
- void lcd_preheat_m2_e4() { _lcd_preheat(4, ui.preheat_hotend_temp[1], ui.preheat_bed_temp[1], ui.preheat_fan_speed[1]); }
- #endif
- #if HOTENDS > 5
- void lcd_preheat_m1_e5_only() { _lcd_preheat(5, ui.preheat_hotend_temp[0], -1, ui.preheat_fan_speed[0]); }
- void lcd_preheat_m2_e5_only() { _lcd_preheat(5, ui.preheat_hotend_temp[1], -1, ui.preheat_fan_speed[1]); }
- #if HAS_HEATED_BED
- void lcd_preheat_m1_e5() { _lcd_preheat(5, ui.preheat_hotend_temp[0], ui.preheat_bed_temp[0], ui.preheat_fan_speed[0]); }
- void lcd_preheat_m2_e5() { _lcd_preheat(5, ui.preheat_hotend_temp[1], ui.preheat_bed_temp[1], ui.preheat_fan_speed[1]); }
- #endif
- #endif // HOTENDS > 5
- #endif // HOTENDS > 4
- #endif // HOTENDS > 3
- #endif // HOTENDS > 2
-
+#if HAS_TEMP_HOTEND
+ inline void _preheat_end(const uint8_t m, const uint8_t e) {
+ _lcd_preheat(e, ui.preheat_hotend_temp[m], -1, ui.preheat_fan_speed[m]);
+ }
#if HAS_HEATED_BED
- void lcd_preheat_m1_e0();
- void lcd_preheat_m2_e0();
- #else
- void lcd_preheat_m1_e0_only();
- void lcd_preheat_m2_e0_only();
+ inline void _preheat_both(const uint8_t m, const uint8_t e) {
+ _lcd_preheat(e, ui.preheat_hotend_temp[m], ui.preheat_bed_temp[m], ui.preheat_fan_speed[m]);
+ }
#endif
-
- void lcd_preheat_m1_all() {
- #if HOTENDS > 1
- thermalManager.setTargetHotend(ui.preheat_hotend_temp[0], 1);
- #if HOTENDS > 2
- thermalManager.setTargetHotend(ui.preheat_hotend_temp[0], 2);
- #if HOTENDS > 3
- thermalManager.setTargetHotend(ui.preheat_hotend_temp[0], 3);
- #if HOTENDS > 4
- thermalManager.setTargetHotend(ui.preheat_hotend_temp[0], 4);
- #if HOTENDS > 5
- thermalManager.setTargetHotend(ui.preheat_hotend_temp[0], 5);
- #endif // HOTENDS > 5
- #endif // HOTENDS > 4
- #endif // HOTENDS > 3
- #endif // HOTENDS > 2
- #endif // HOTENDS > 1
- #if HAS_HEATED_BED
- lcd_preheat_m1_e0();
- #else
- lcd_preheat_m1_e0_only();
- #endif
- }
-
- void lcd_preheat_m2_all() {
- #if HOTENDS > 1
- thermalManager.setTargetHotend(ui.preheat_hotend_temp[1], 1);
- #if HOTENDS > 2
- thermalManager.setTargetHotend(ui.preheat_hotend_temp[1], 2);
- #if HOTENDS > 3
- thermalManager.setTargetHotend(ui.preheat_hotend_temp[1], 3);
- #if HOTENDS > 4
- thermalManager.setTargetHotend(ui.preheat_hotend_temp[1], 4);
- #if HOTENDS > 5
- thermalManager.setTargetHotend(ui.preheat_hotend_temp[1], 5);
- #endif // HOTENDS > 5
- #endif // HOTENDS > 4
- #endif // HOTENDS > 3
- #endif // HOTENDS > 2
- #endif // HOTENDS > 1
- #if HAS_HEATED_BED
- lcd_preheat_m2_e0();
- #else
- lcd_preheat_m2_e0_only();
- #endif
+#endif
+#if HAS_HEATED_BED
+ inline void _preheat_bed(const uint8_t m) {
+ _lcd_preheat(0, 0, ui.preheat_bed_temp[m], ui.preheat_fan_speed[m]);
}
-
-#endif // HOTENDS > 1
+#endif
#if HAS_TEMP_HOTEND || HAS_HEATED_BED
- #if HOTENDS
- void lcd_preheat_m1_e0_only() { _lcd_preheat(0, ui.preheat_hotend_temp[0], -1, ui.preheat_fan_speed[0]); }
- void lcd_preheat_m2_e0_only() { _lcd_preheat(0, ui.preheat_hotend_temp[1], -1, ui.preheat_fan_speed[1]); }
- #endif
-
+ #define _PREHEAT_ITEMS(M,N) do{ \
+ ACTION_ITEM(MSG_PREHEAT_##M##_H##N, [](){ _preheat_both(M-1, N); }); \
+ ACTION_ITEM(MSG_PREHEAT_##M##_END_E##N, [](){ _preheat_end(M-1, N); }); \
+ }while(0)
#if HAS_HEATED_BED
- #if HOTENDS
- void lcd_preheat_m1_e0() { _lcd_preheat(0, ui.preheat_hotend_temp[0], ui.preheat_bed_temp[0], ui.preheat_fan_speed[0]); }
- void lcd_preheat_m2_e0() { _lcd_preheat(0, ui.preheat_hotend_temp[1], ui.preheat_bed_temp[1], ui.preheat_fan_speed[1]); }
- #endif
- void lcd_preheat_m1_bedonly() { _lcd_preheat(0, 0, ui.preheat_bed_temp[0], ui.preheat_fan_speed[0]); }
- void lcd_preheat_m2_bedonly() { _lcd_preheat(0, 0, ui.preheat_bed_temp[1], ui.preheat_fan_speed[1]); }
+ #define PREHEAT_ITEMS(M,N) _PREHEAT_ITEMS(M,N)
+ #else
+ #define PREHEAT_ITEMS(M,N) \
+ ACTION_ITEM(MSG_PREHEAT_##M##_H##N, [](){ _preheat_end(M-1, N); })
#endif
void menu_preheat_m1() {
START_MENU();
- MENU_BACK(MSG_TEMPERATURE);
+ BACK_ITEM(MSG_TEMPERATURE);
#if HOTENDS == 1
#if HAS_HEATED_BED
- MENU_ITEM(function, MSG_PREHEAT_1, lcd_preheat_m1_e0);
- MENU_ITEM(function, MSG_PREHEAT_1_END, lcd_preheat_m1_e0_only);
+ ACTION_ITEM(MSG_PREHEAT_1, [](){ _preheat_both(0, 0); });
+ ACTION_ITEM(MSG_PREHEAT_1_END, [](){ _preheat_end(0, 0); });
#else
- MENU_ITEM(function, MSG_PREHEAT_1, lcd_preheat_m1_e0_only);
+ ACTION_ITEM(MSG_PREHEAT_1, [](){ _preheat_end(0, 0); });
#endif
#elif HOTENDS > 1
#if HAS_HEATED_BED
- MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H1, lcd_preheat_m1_e0);
- MENU_ITEM(function, MSG_PREHEAT_1_END " " MSG_E1, lcd_preheat_m1_e0_only);
- MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H2, lcd_preheat_m1_e1);
- MENU_ITEM(function, MSG_PREHEAT_1_END " " MSG_E2, lcd_preheat_m1_e1_only);
- #else
- MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H1, lcd_preheat_m1_e0_only);
- MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H2, lcd_preheat_m1_e1_only);
+ _PREHEAT_ITEMS(1,0);
#endif
+ PREHEAT_ITEMS(1,1);
#if HOTENDS > 2
- #if HAS_HEATED_BED
- MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H3, lcd_preheat_m1_e2);
- MENU_ITEM(function, MSG_PREHEAT_1_END " " MSG_E3, lcd_preheat_m1_e2_only);
- #else
- MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H3, lcd_preheat_m1_e2_only);
- #endif
+ PREHEAT_ITEMS(1,2);
#if HOTENDS > 3
- #if HAS_HEATED_BED
- MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H4, lcd_preheat_m1_e3);
- MENU_ITEM(function, MSG_PREHEAT_1_END " " MSG_E4, lcd_preheat_m1_e3_only);
- #else
- MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H4, lcd_preheat_m1_e3_only);
- #endif
+ PREHEAT_ITEMS(1,3);
#if HOTENDS > 4
- #if HAS_HEATED_BED
- MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H5, lcd_preheat_m1_e4);
- MENU_ITEM(function, MSG_PREHEAT_1_END " " MSG_E5, lcd_preheat_m1_e4_only);
- #else
- MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H5, lcd_preheat_m1_e4_only);
- #endif
+ PREHEAT_ITEMS(1,4);
#if HOTENDS > 5
- #if HAS_HEATED_BED
- MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H6, lcd_preheat_m1_e5);
- MENU_ITEM(function, MSG_PREHEAT_1_END " " MSG_E6, lcd_preheat_m1_e5_only);
- #else
- MENU_ITEM(function, MSG_PREHEAT_1_N MSG_H6, lcd_preheat_m1_e5_only);
- #endif
+ PREHEAT_ITEMS(1,5);
#endif // HOTENDS > 5
#endif // HOTENDS > 4
#endif // HOTENDS > 3
#endif // HOTENDS > 2
- MENU_ITEM(function, MSG_PREHEAT_1_ALL, lcd_preheat_m1_all);
+ ACTION_ITEM(MSG_PREHEAT_1_ALL, []() {
+ #if HAS_HEATED_BED
+ _preheat_bed(0);
+ #endif
+ HOTEND_LOOP() thermalManager.setTargetHotend(ui.preheat_hotend_temp[0], e);
+ });
#endif // HOTENDS > 1
#if HAS_HEATED_BED
- MENU_ITEM(function, MSG_PREHEAT_1_BEDONLY, lcd_preheat_m1_bedonly);
+ ACTION_ITEM(MSG_PREHEAT_1_BEDONLY, [](){ _preheat_bed(0); });
#endif
END_MENU();
}
void menu_preheat_m2() {
START_MENU();
- MENU_BACK(MSG_TEMPERATURE);
+ BACK_ITEM(MSG_TEMPERATURE);
#if HOTENDS == 1
#if HAS_HEATED_BED
- MENU_ITEM(function, MSG_PREHEAT_2, lcd_preheat_m2_e0);
- MENU_ITEM(function, MSG_PREHEAT_2_END, lcd_preheat_m2_e0_only);
+ ACTION_ITEM(MSG_PREHEAT_2, [](){ _preheat_both(1, 0); });
+ ACTION_ITEM(MSG_PREHEAT_2_END, [](){ _preheat_end(1, 0); });
#else
- MENU_ITEM(function, MSG_PREHEAT_2, lcd_preheat_m2_e0_only);
+ ACTION_ITEM(MSG_PREHEAT_2, [](){ _preheat_end(1, 0); });
#endif
#elif HOTENDS > 1
#if HAS_HEATED_BED
- MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H1, lcd_preheat_m2_e0);
- MENU_ITEM(function, MSG_PREHEAT_2_END " " MSG_E1, lcd_preheat_m2_e0_only);
- MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H2, lcd_preheat_m2_e1);
- MENU_ITEM(function, MSG_PREHEAT_2_END " " MSG_E2, lcd_preheat_m2_e1_only);
- #else
- MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H1, lcd_preheat_m2_e0_only);
- MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H2, lcd_preheat_m2_e1_only);
+ _PREHEAT_ITEMS(2,0);
#endif
+ PREHEAT_ITEMS(2,1);
#if HOTENDS > 2
- #if HAS_HEATED_BED
- MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H3, lcd_preheat_m2_e2);
- MENU_ITEM(function, MSG_PREHEAT_2_END " " MSG_E3, lcd_preheat_m2_e2_only);
- #else
- MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H3, lcd_preheat_m2_e2_only);
- #endif
+ PREHEAT_ITEMS(2,2);
#if HOTENDS > 3
- #if HAS_HEATED_BED
- MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H4, lcd_preheat_m2_e3);
- MENU_ITEM(function, MSG_PREHEAT_2_END " " MSG_E4, lcd_preheat_m2_e3_only);
- #else
- MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H4, lcd_preheat_m2_e3_only);
- #endif
+ PREHEAT_ITEMS(2,3);
#if HOTENDS > 4
- #if HAS_HEATED_BED
- MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H5, lcd_preheat_m2_e4);
- MENU_ITEM(function, MSG_PREHEAT_2_END " " MSG_E5, lcd_preheat_m2_e4_only);
- #else
- MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H5, lcd_preheat_m2_e4_only);
- #endif
+ PREHEAT_ITEMS(2,4);
#if HOTENDS > 5
- #if HAS_HEATED_BED
- MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H6, lcd_preheat_m2_e5);
- MENU_ITEM(function, MSG_PREHEAT_2_END " " MSG_E6, lcd_preheat_m2_e5_only);
- #else
- MENU_ITEM(function, MSG_PREHEAT_2_N MSG_H6, lcd_preheat_m2_e5_only);
- #endif
+ PREHEAT_ITEMS(2,5);
#endif // HOTENDS > 5
#endif // HOTENDS > 4
#endif // HOTENDS > 3
#endif // HOTENDS > 2
- MENU_ITEM(function, MSG_PREHEAT_2_ALL, lcd_preheat_m2_all);
+ ACTION_ITEM(MSG_PREHEAT_2_ALL, []() {
+ #if HAS_HEATED_BED
+ _preheat_bed(1);
+ #endif
+ HOTEND_LOOP() thermalManager.setTargetHotend(ui.preheat_hotend_temp[1], e);
+ });
#endif // HOTENDS > 1
#if HAS_HEATED_BED
- MENU_ITEM(function, MSG_PREHEAT_2_BEDONLY, lcd_preheat_m2_bedonly);
+ ACTION_ITEM(MSG_PREHEAT_2_BEDONLY, [](){ _preheat_bed(1); });
#endif
END_MENU();
}
@@ -311,16 +187,16 @@ void _lcd_preheat(const int16_t endnum, const int16_t temph, const int16_t tempb
void menu_temperature() {
START_MENU();
- MENU_BACK(MSG_MAIN);
+ BACK_ITEM(MSG_MAIN);
//
// Nozzle:
// Nozzle [1-5]:
//
#if HOTENDS == 1
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE, &thermalManager.temp_hotend[0].target, 0, HEATER_0_MAXTEMP - 15, thermalManager.start_watching_E0);
+ EDIT_ITEM_FAST(int3, MSG_NOZZLE, &thermalManager.temp_hotend[0].target, 0, HEATER_0_MAXTEMP - 15, [](){ thermalManager.start_watching_hotend(0); });
#elif HOTENDS > 1
- #define EDIT_TARGET(N) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_LCD_N##N, &thermalManager.temp_hotend[N].target, 0, HEATER_##N##_MAXTEMP - 15, thermalManager.start_watching_E##N)
+ #define EDIT_TARGET(N) EDIT_ITEM_FAST(int3, MSG_NOZZLE_##N, &thermalManager.temp_hotend[N].target, 0, HEATER_##N##_MAXTEMP - 15, [](){ thermalManager.start_watching_hotend(N); })
EDIT_TARGET(0);
EDIT_TARGET(1);
#if HOTENDS > 2
@@ -338,21 +214,21 @@ void menu_temperature() {
#endif // HOTENDS > 1
#if ENABLED(SINGLENOZZLE)
- MENU_MULTIPLIER_ITEM_EDIT(uint16_3, MSG_NOZZLE_STANDBY, &singlenozzle_temp[active_extruder ? 0 : 1], 0, HEATER_0_MAXTEMP - 15);
+ EDIT_ITEM_FAST(uint16_3, MSG_NOZZLE_STANDBY, &singlenozzle_temp[active_extruder ? 0 : 1], 0, HEATER_0_MAXTEMP - 15);
#endif
//
// Bed:
//
#if HAS_HEATED_BED
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_BED, &thermalManager.temp_bed.target, 0, BED_MAXTEMP - 10, thermalManager.start_watching_bed);
+ EDIT_ITEM_FAST(int3, MSG_BED, &thermalManager.temp_bed.target, 0, BED_MAXTEMP - 10, thermalManager.start_watching_bed);
#endif
//
// Chamber:
//
#if HAS_HEATED_CHAMBER
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_CHAMBER, &thermalManager.temp_chamber.target, 0, CHAMBER_MAXTEMP - 5, thermalManager.start_watching_chamber);
+ EDIT_ITEM_FAST(int3, MSG_CHAMBER, &thermalManager.temp_chamber.target, 0, CHAMBER_MAXTEMP - 5, thermalManager.start_watching_chamber);
#endif
//
@@ -360,21 +236,24 @@ void menu_temperature() {
//
#if FAN_COUNT > 0
#if HAS_FAN0
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(percent, MSG_FAN_SPEED FAN_SPEED_1_SUFFIX, &thermalManager.lcd_tmpfan_speed[0], 0, 255, thermalManager.lcd_setFanSpeed0);
+ editable.uint8 = thermalManager.fan_speed[0];
+ EDIT_ITEM_FAST(percent, MSG_FIRST_FAN_SPEED, &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(0, editable.uint8); });
#if ENABLED(EXTRA_FAN_SPEED)
- MENU_MULTIPLIER_ITEM_EDIT(percent, MSG_EXTRA_FAN_SPEED FAN_SPEED_1_SUFFIX, &thermalManager.new_fan_speed[0], 3, 255);
+ EDIT_ITEM_FAST(percent, MSG_FIRST_EXTRA_FAN_SPEED, &thermalManager.new_fan_speed[0], 3, 255);
#endif
#endif
- #if HAS_FAN1 || (ENABLED(SINGLENOZZLE) && EXTRUDERS > 1)
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(percent, MSG_FAN_SPEED " 2", &thermalManager.lcd_tmpfan_speed[1], 0, 255, thermalManager.lcd_setFanSpeed1);
+ #if HAS_FAN1
+ editable.uint8 = thermalManager.fan_speed[1];
+ EDIT_ITEM_FAST(percent, MSG_FAN_SPEED_2, &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(1, editable.uint8); });
#if ENABLED(EXTRA_FAN_SPEED)
- MENU_MULTIPLIER_ITEM_EDIT(percent, MSG_EXTRA_FAN_SPEED " 2", &thermalManager.new_fan_speed[1], 3, 255);
+ EDIT_ITEM_FAST(percent, MSG_EXTRA_FAN_SPEED_2, &thermalManager.new_fan_speed[1], 3, 255);
#endif
#endif
- #if HAS_FAN2 || (ENABLED(SINGLENOZZLE) && EXTRUDERS > 2)
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(percent, MSG_FAN_SPEED " 3", &thermalManager.lcd_tmpfan_speed[2], 0, 255, thermalManager.lcd_setFanSpeed2);
+ #if HAS_FAN2
+ editable.uint8 = thermalManager.fan_speed[2];
+ EDIT_ITEM_FAST(percent, MSG_FAN_SPEED_3, &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(2, editable.uint8); });
#if ENABLED(EXTRA_FAN_SPEED)
- MENU_MULTIPLIER_ITEM_EDIT(percent, MSG_EXTRA_FAN_SPEED " 3", &thermalManager.new_fan_speed[2], 3, 255);
+ EDIT_ITEM_FAST(percent, MSG_EXTRA_FAN_SPEED_3, &thermalManager.new_fan_speed[2], 3, 255);
#endif
#endif
#endif // FAN_COUNT > 0
@@ -385,11 +264,11 @@ void menu_temperature() {
// Preheat for Material 1 and 2
//
#if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 || TEMP_SENSOR_4 != 0 || TEMP_SENSOR_5 != 0 || HAS_HEATED_BED
- MENU_ITEM(submenu, MSG_PREHEAT_1, menu_preheat_m1);
- MENU_ITEM(submenu, MSG_PREHEAT_2, menu_preheat_m2);
+ SUBMENU(MSG_PREHEAT_1, menu_preheat_m1);
+ SUBMENU(MSG_PREHEAT_2, menu_preheat_m2);
#else
- MENU_ITEM(function, MSG_PREHEAT_1, lcd_preheat_m1_e0_only);
- MENU_ITEM(function, MSG_PREHEAT_2, lcd_preheat_m2_e0_only);
+ ACTION_ITEM(MSG_PREHEAT_1, [](){ _preheat_end(0, 0); });
+ ACTION_ITEM(MSG_PREHEAT_2, [](){ _preheat_end(1, 0); });
#endif
//
@@ -400,7 +279,7 @@ void menu_temperature() {
#if HAS_TEMP_BED
if (thermalManager.temp_bed.target) has_heat = true;
#endif
- if (has_heat) MENU_ITEM(function, MSG_COOLDOWN, lcd_cooldown);
+ if (has_heat) ACTION_ITEM(MSG_COOLDOWN, lcd_cooldown);
#endif // HAS_TEMP_HOTEND
diff --git a/Marlin/src/lcd/menu/menu_tmc.cpp b/Marlin/src/lcd/menu/menu_tmc.cpp
index 917b39ebfad6..ee74b9517140 100644
--- a/Marlin/src/lcd/menu/menu_tmc.cpp
+++ b/Marlin/src/lcd/menu/menu_tmc.cpp
@@ -32,51 +32,11 @@
#include "../../module/stepper/indirection.h"
#include "../../feature/tmc_util.h"
-#define TMC_EDIT_STORED_I_RMS(ST,MSG) MENU_ITEM_EDIT_CALLBACK(uint16_4, MSG, &stepper##ST.val_mA, 100, 3000, refresh_stepper_current_##ST)
-
-#if AXIS_IS_TMC(X)
- void refresh_stepper_current_X() { stepperX.refresh_stepper_current(); }
-#endif
-#if AXIS_IS_TMC(Y)
- void refresh_stepper_current_Y() { stepperY.refresh_stepper_current(); }
-#endif
-#if AXIS_IS_TMC(Z)
- void refresh_stepper_current_Z() { stepperZ.refresh_stepper_current(); }
-#endif
-#if AXIS_IS_TMC(X2)
- void refresh_stepper_current_X2() { stepperX2.refresh_stepper_current(); }
-#endif
-#if AXIS_IS_TMC(Y2)
- void refresh_stepper_current_Y2() { stepperY2.refresh_stepper_current(); }
-#endif
-#if AXIS_IS_TMC(Z2)
- void refresh_stepper_current_Z2() { stepperZ2.refresh_stepper_current(); }
-#endif
-#if AXIS_IS_TMC(Z3)
- void refresh_stepper_current_Z3() { stepperZ3.refresh_stepper_current(); }
-#endif
-#if AXIS_IS_TMC(E0)
- void refresh_stepper_current_E0() { stepperE0.refresh_stepper_current(); }
-#endif
-#if AXIS_IS_TMC(E1)
- void refresh_stepper_current_E1() { stepperE1.refresh_stepper_current(); }
-#endif
-#if AXIS_IS_TMC(E2)
- void refresh_stepper_current_E2() { stepperE2.refresh_stepper_current(); }
-#endif
-#if AXIS_IS_TMC(E3)
- void refresh_stepper_current_E3() { stepperE3.refresh_stepper_current(); }
-#endif
-#if AXIS_IS_TMC(E4)
- void refresh_stepper_current_E4() { stepperE4.refresh_stepper_current(); }
-#endif
-#if AXIS_IS_TMC(E5)
- void refresh_stepper_current_E5() { stepperE5.refresh_stepper_current(); }
-#endif
+#define TMC_EDIT_STORED_I_RMS(ST,MSG) EDIT_ITEM_P(uint16_4, PSTR(MSG), &stepper##ST.val_mA, 100, 3000, [](){ stepper##ST.refresh_stepper_current(); })
void menu_tmc_current() {
START_MENU();
- MENU_BACK(MSG_TMC_DRIVERS);
+ BACK_ITEM(MSG_TMC_DRIVERS);
#if AXIS_IS_TMC(X)
TMC_EDIT_STORED_I_RMS(X, MSG_X);
#endif
@@ -99,73 +59,33 @@ void menu_tmc_current() {
TMC_EDIT_STORED_I_RMS(Z3, MSG_Z3);
#endif
#if AXIS_IS_TMC(E0)
- TMC_EDIT_STORED_I_RMS(E0, MSG_E1);
+ TMC_EDIT_STORED_I_RMS(E0, LCD_STR_E0);
#endif
#if AXIS_IS_TMC(E1)
- TMC_EDIT_STORED_I_RMS(E1, MSG_E2);
+ TMC_EDIT_STORED_I_RMS(E1, LCD_STR_E1);
#endif
#if AXIS_IS_TMC(E2)
- TMC_EDIT_STORED_I_RMS(E2, MSG_E3);
+ TMC_EDIT_STORED_I_RMS(E2, LCD_STR_E2);
#endif
#if AXIS_IS_TMC(E3)
- TMC_EDIT_STORED_I_RMS(E3, MSG_E4);
+ TMC_EDIT_STORED_I_RMS(E3, LCD_STR_E3);
#endif
#if AXIS_IS_TMC(E4)
- TMC_EDIT_STORED_I_RMS(E4, MSG_E5);
+ TMC_EDIT_STORED_I_RMS(E4, LCD_STR_E4);
#endif
#if AXIS_IS_TMC(E5)
- TMC_EDIT_STORED_I_RMS(E5, MSG_E6);
+ TMC_EDIT_STORED_I_RMS(E5, LCD_STR_E5);
#endif
END_MENU();
}
#if ENABLED(HYBRID_THRESHOLD)
- #define TMC_EDIT_STORED_HYBRID_THRS(ST, MSG) MENU_ITEM_EDIT_CALLBACK(uint8, MSG, &stepper##ST.stored.hybrid_thrs, 0, 255, refresh_hybrid_thrs_##ST);
-
- #if AXIS_HAS_STEALTHCHOP(X)
- void refresh_hybrid_thrs_X() { stepperX.refresh_hybrid_thrs(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(Y)
- void refresh_hybrid_thrs_Y() { stepperY.refresh_hybrid_thrs(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(Z)
- void refresh_hybrid_thrs_Z() { stepperZ.refresh_hybrid_thrs(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(X2)
- void refresh_hybrid_thrs_X2() { stepperX2.refresh_hybrid_thrs(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(Y2)
- void refresh_hybrid_thrs_Y2() { stepperY2.refresh_hybrid_thrs(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(Z2)
- void refresh_hybrid_thrs_Z2() { stepperZ2.refresh_hybrid_thrs(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(Z3)
- void refresh_hybrid_thrs_Z3() { stepperZ3.refresh_hybrid_thrs(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(E0)
- void refresh_hybrid_thrs_E0() { stepperE0.refresh_hybrid_thrs(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(E1)
- void refresh_hybrid_thrs_E1() { stepperE1.refresh_hybrid_thrs(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(E2)
- void refresh_hybrid_thrs_E2() { stepperE2.refresh_hybrid_thrs(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(E3)
- void refresh_hybrid_thrs_E3() { stepperE3.refresh_hybrid_thrs(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(E4)
- void refresh_hybrid_thrs_E4() { stepperE4.refresh_hybrid_thrs(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(E5)
- void refresh_hybrid_thrs_E5() { stepperE5.refresh_hybrid_thrs(); }
- #endif
+ #define TMC_EDIT_STORED_HYBRID_THRS(ST, MSG) EDIT_ITEM_P(uint8, PSTR(MSG), &stepper##ST.stored.hybrid_thrs, 0, 255, [](){ stepper##ST.refresh_hybrid_thrs(); });
void menu_tmc_hybrid_thrs() {
START_MENU();
- MENU_BACK(MSG_TMC_DRIVERS);
+ BACK_ITEM(MSG_TMC_DRIVERS);
#if AXIS_HAS_STEALTHCHOP(X)
TMC_EDIT_STORED_HYBRID_THRS(X, MSG_X);
#endif
@@ -188,22 +108,22 @@ void menu_tmc_current() {
TMC_EDIT_STORED_HYBRID_THRS(Z3, MSG_Z3);
#endif
#if AXIS_HAS_STEALTHCHOP(E0)
- TMC_EDIT_STORED_HYBRID_THRS(E0, MSG_E1);
+ TMC_EDIT_STORED_HYBRID_THRS(E0, LCD_STR_E0);
#endif
#if AXIS_HAS_STEALTHCHOP(E1)
- TMC_EDIT_STORED_HYBRID_THRS(E1, MSG_E2);
+ TMC_EDIT_STORED_HYBRID_THRS(E1, LCD_STR_E1);
#endif
#if AXIS_HAS_STEALTHCHOP(E2)
- TMC_EDIT_STORED_HYBRID_THRS(E2, MSG_E3);
+ TMC_EDIT_STORED_HYBRID_THRS(E2, LCD_STR_E2);
#endif
#if AXIS_HAS_STEALTHCHOP(E3)
- TMC_EDIT_STORED_HYBRID_THRS(E3, MSG_E4);
+ TMC_EDIT_STORED_HYBRID_THRS(E3, LCD_STR_E3);
#endif
#if AXIS_HAS_STEALTHCHOP(E4)
- TMC_EDIT_STORED_HYBRID_THRS(E4, MSG_E5);
+ TMC_EDIT_STORED_HYBRID_THRS(E4, LCD_STR_E4);
#endif
#if AXIS_HAS_STEALTHCHOP(E5)
- TMC_EDIT_STORED_HYBRID_THRS(E5, MSG_E6);
+ TMC_EDIT_STORED_HYBRID_THRS(E5, LCD_STR_E5);
#endif
END_MENU();
}
@@ -212,24 +132,11 @@ void menu_tmc_current() {
#if ENABLED(SENSORLESS_HOMING)
- #define TMC_EDIT_STORED_SGT(ST) MENU_ITEM_EDIT_CALLBACK(int4, MSG_##ST, &stepper##ST.stored.homing_thrs, stepper##ST.sgt_min, stepper##ST.sgt_max, refresh_homing_thrs_##ST);
-
- #if X_SENSORLESS
- void refresh_homing_thrs_X() { stepperX.refresh_homing_thrs(); }
- #endif
- #if X2_SENSORLESS
- void refresh_homing_thrs_X2() { stepperX2.refresh_homing_thrs(); }
- #endif
- #if Y_SENSORLESS
- void refresh_homing_thrs_Y() { stepperY.refresh_homing_thrs(); }
- #endif
- #if Z_SENSORLESS
- void refresh_homing_thrs_Z() { stepperZ.refresh_homing_thrs(); }
- #endif
+ #define TMC_EDIT_STORED_SGT(ST) EDIT_ITEM_P(int4, PSTR(MSG_##ST), &stepper##ST.stored.homing_thrs, stepper##ST.sgt_min, stepper##ST.sgt_max, [](){ stepper##ST.refresh_homing_thrs(); });
void menu_tmc_homing_thrs() {
START_MENU();
- MENU_BACK(MSG_TMC_DRIVERS);
+ BACK_ITEM(MSG_TMC_DRIVERS);
#if X_SENSORLESS
TMC_EDIT_STORED_SGT(X);
#endif
@@ -249,52 +156,12 @@ void menu_tmc_current() {
#if HAS_STEALTHCHOP
- #define TMC_EDIT_STEP_MODE(ST, MSG) MENU_ITEM_EDIT_CALLBACK(bool, MSG, &stepper##ST.stored.stealthChop_enabled, refresh_stepping_mode_##ST)
-
- #if AXIS_HAS_STEALTHCHOP(X)
- void refresh_stepping_mode_X() { stepperX.refresh_stepping_mode(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(Y)
- void refresh_stepping_mode_Y() { stepperY.refresh_stepping_mode(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(Z)
- void refresh_stepping_mode_Z() { stepperZ.refresh_stepping_mode(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(X2)
- void refresh_stepping_mode_X2() { stepperX2.refresh_stepping_mode(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(Y2)
- void refresh_stepping_mode_Y2() { stepperY2.refresh_stepping_mode(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(Z2)
- void refresh_stepping_mode_Z2() { stepperZ2.refresh_stepping_mode(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(Z3)
- void refresh_stepping_mode_Z3() { stepperZ3.refresh_stepping_mode(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(E0)
- void refresh_stepping_mode_E0() { stepperE0.refresh_stepping_mode(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(E1)
- void refresh_stepping_mode_E1() { stepperE1.refresh_stepping_mode(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(E2)
- void refresh_stepping_mode_E2() { stepperE2.refresh_stepping_mode(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(E3)
- void refresh_stepping_mode_E3() { stepperE3.refresh_stepping_mode(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(E4)
- void refresh_stepping_mode_E4() { stepperE4.refresh_stepping_mode(); }
- #endif
- #if AXIS_HAS_STEALTHCHOP(E5)
- void refresh_stepping_mode_E5() { stepperE5.refresh_stepping_mode(); }
- #endif
+ #define TMC_EDIT_STEP_MODE(ST, MSG) EDIT_ITEM_P(bool, PSTR(MSG), &stepper##ST.stored.stealthChop_enabled, [](){ stepper##ST.refresh_stepping_mode(); })
void menu_tmc_step_mode() {
START_MENU();
STATIC_ITEM(MSG_TMC_STEALTH_ENABLED);
- MENU_BACK(MSG_TMC_DRIVERS);
+ BACK_ITEM(MSG_TMC_DRIVERS);
#if AXIS_HAS_STEALTHCHOP(X)
TMC_EDIT_STEP_MODE(X, MSG_X);
#endif
@@ -317,22 +184,22 @@ void menu_tmc_current() {
TMC_EDIT_STEP_MODE(Z3, MSG_Z3);
#endif
#if AXIS_HAS_STEALTHCHOP(E0)
- TMC_EDIT_STEP_MODE(E0, MSG_E1);
+ TMC_EDIT_STEP_MODE(E0, LCD_STR_E0);
#endif
#if AXIS_HAS_STEALTHCHOP(E1)
- TMC_EDIT_STEP_MODE(E1, MSG_E2);
+ TMC_EDIT_STEP_MODE(E1, LCD_STR_E1);
#endif
#if AXIS_HAS_STEALTHCHOP(E2)
- TMC_EDIT_STEP_MODE(E2, MSG_E3);
+ TMC_EDIT_STEP_MODE(E2, LCD_STR_E2);
#endif
#if AXIS_HAS_STEALTHCHOP(E3)
- TMC_EDIT_STEP_MODE(E3, MSG_E4);
+ TMC_EDIT_STEP_MODE(E3, LCD_STR_E3);
#endif
#if AXIS_HAS_STEALTHCHOP(E4)
- TMC_EDIT_STEP_MODE(E4, MSG_E5);
+ TMC_EDIT_STEP_MODE(E4, LCD_STR_E4);
#endif
#if AXIS_HAS_STEALTHCHOP(E5)
- TMC_EDIT_STEP_MODE(E5, MSG_E6);
+ TMC_EDIT_STEP_MODE(E5, LCD_STR_E5);
#endif
END_MENU();
}
@@ -341,16 +208,16 @@ void menu_tmc_current() {
void menu_tmc() {
START_MENU();
- MENU_BACK(MSG_CONTROL);
- MENU_ITEM(submenu, MSG_TMC_CURRENT, menu_tmc_current);
+ BACK_ITEM(MSG_CONTROL);
+ SUBMENU(MSG_TMC_CURRENT, menu_tmc_current);
#if ENABLED(HYBRID_THRESHOLD)
- MENU_ITEM(submenu, MSG_TMC_HYBRID_THRS, menu_tmc_hybrid_thrs);
+ SUBMENU(MSG_TMC_HYBRID_THRS, menu_tmc_hybrid_thrs);
#endif
#if ENABLED(SENSORLESS_HOMING)
- MENU_ITEM(submenu, MSG_TMC_HOMING_THRS, menu_tmc_homing_thrs);
+ SUBMENU(MSG_TMC_HOMING_THRS, menu_tmc_homing_thrs);
#endif
#if HAS_STEALTHCHOP
- MENU_ITEM(submenu, MSG_TMC_STEPPING_MODE, menu_tmc_step_mode);
+ SUBMENU(MSG_TMC_STEPPING_MODE, menu_tmc_step_mode);
#endif
END_MENU();
}
diff --git a/Marlin/src/lcd/menu/menu_tune.cpp b/Marlin/src/lcd/menu/menu_tune.cpp
index 3198e6a1b138..6507d824cec6 100644
--- a/Marlin/src/lcd/menu/menu_tune.cpp
+++ b/Marlin/src/lcd/menu/menu_tune.cpp
@@ -42,27 +42,6 @@
#include "../../module/tool_change.h"
#endif
-// Refresh the E factor after changing flow
-#if EXTRUDERS
- void _lcd_refresh_e_factor_0() { planner.refresh_e_factor(0); }
- #if EXTRUDERS > 1
- void _lcd_refresh_e_factor() { planner.refresh_e_factor(active_extruder); }
- void _lcd_refresh_e_factor_1() { planner.refresh_e_factor(1); }
- #if EXTRUDERS > 2
- void _lcd_refresh_e_factor_2() { planner.refresh_e_factor(2); }
- #if EXTRUDERS > 3
- void _lcd_refresh_e_factor_3() { planner.refresh_e_factor(3); }
- #if EXTRUDERS > 4
- void _lcd_refresh_e_factor_4() { planner.refresh_e_factor(4); }
- #if EXTRUDERS > 5
- void _lcd_refresh_e_factor_5() { planner.refresh_e_factor(5); }
- #endif // EXTRUDERS > 5
- #endif // EXTRUDERS > 4
- #endif // EXTRUDERS > 3
- #endif // EXTRUDERS > 2
- #endif // EXTRUDERS > 1
-#endif // EXTRUDERS
-
#if ENABLED(BABYSTEPPING)
#include "../../feature/babystep.h"
@@ -74,7 +53,12 @@
void _lcd_babystep(const AxisEnum axis, PGM_P const msg) {
if (ui.use_click()) return ui.goto_previous_screen_no_defer();
if (ui.encoderPosition) {
- const int16_t steps = int16_t(ui.encoderPosition) * (BABYSTEP_MULTIPLICATOR);
+ const int16_t steps = int16_t(ui.encoderPosition) * (
+ #if ENABLED(BABYSTEP_XY)
+ axis != Z_AXIS ? BABYSTEP_MULTIPLICATOR_XY :
+ #endif
+ BABYSTEP_MULTIPLICATOR_Z
+ );
ui.encoderPosition = 0;
ui.refresh(LCDVIEW_REDRAW_NOW);
babystep.add_steps(axis, steps);
@@ -95,7 +79,8 @@
#else
lcd_moveto(0, LCD_HEIGHT - 1);
#endif
- lcd_put_u8str_P(PSTR(MSG_BABYSTEP_TOTAL ":"));
+ lcd_put_u8str_P(GET_TEXT(MSG_BABYSTEP_TOTAL));
+ lcd_put_wchar(':');
lcd_put_u8str(ftostr54sign(spm * babystep.axis_total[BS_TOTAL_AXIS(axis)]));
}
#endif
@@ -109,33 +94,31 @@
}
#if ENABLED(BABYSTEP_XY)
- void _lcd_babystep_x() { _lcd_babystep(X_AXIS, PSTR(MSG_BABYSTEP_X)); }
- void _lcd_babystep_y() { _lcd_babystep(Y_AXIS, PSTR(MSG_BABYSTEP_Y)); }
- void lcd_babystep_x() { _lcd_babystep_go(_lcd_babystep_x); }
- void lcd_babystep_y() { _lcd_babystep_go(_lcd_babystep_y); }
+ void _lcd_babystep_x() { _lcd_babystep(X_AXIS, GET_TEXT(MSG_BABYSTEP_X)); }
+ void _lcd_babystep_y() { _lcd_babystep(Y_AXIS, GET_TEXT(MSG_BABYSTEP_Y)); }
#endif
#if DISABLED(BABYSTEP_ZPROBE_OFFSET)
- void _lcd_babystep_z() { _lcd_babystep(Z_AXIS, PSTR(MSG_BABYSTEP_Z)); }
- void lcd_babystep_z() { _lcd_babystep_go(_lcd_babystep_z); }
+ void _lcd_babystep_z() { _lcd_babystep(Z_AXIS, GET_TEXT(MSG_BABYSTEP_Z)); }
+ void lcd_babystep_z() { _lcd_babystep_go(_lcd_babystep_z); }
#endif
#endif // BABYSTEPPING
void menu_tune() {
START_MENU();
- MENU_BACK(MSG_MAIN);
+ BACK_ITEM(MSG_MAIN);
//
// Speed:
//
- MENU_ITEM_EDIT(int3, MSG_SPEED, &feedrate_percentage, 10, 999);
+ EDIT_ITEM(int3, MSG_SPEED, &feedrate_percentage, 10, 999);
//
// Manual bed leveling, Bed Z:
//
#if BOTH(MESH_BED_LEVELING, LCD_BED_LEVELING)
- MENU_ITEM_EDIT(float43, MSG_BED_Z, &mbl.z_offset, -1, 1);
+ EDIT_ITEM(float43, MSG_BED_Z, &mbl.z_offset, -1, 1);
#endif
//
@@ -143,9 +126,9 @@ void menu_tune() {
// Nozzle [1-4]:
//
#if HOTENDS == 1
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE, &thermalManager.temp_hotend[0].target, 0, HEATER_0_MAXTEMP - 15, thermalManager.start_watching_E0);
+ EDIT_ITEM_FAST(int3, MSG_NOZZLE, &thermalManager.temp_hotend[0].target, 0, HEATER_0_MAXTEMP - 15, [](){ thermalManager.start_watching_hotend(0); });
#elif HOTENDS > 1
- #define EDIT_NOZZLE(N) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_NOZZLE MSG_LCD_N##N, &thermalManager.temp_hotend[N].target, 0, HEATER_##N##_MAXTEMP - 15, thermalManager.start_watching_E##N)
+ #define EDIT_NOZZLE(N) EDIT_ITEM_FAST(int3, MSG_NOZZLE_##N, &thermalManager.temp_hotend[N].target, 0, HEATER_##N##_MAXTEMP - 15, [](){ thermalManager.start_watching_hotend(N); })
EDIT_NOZZLE(0);
EDIT_NOZZLE(1);
#if HOTENDS > 2
@@ -163,14 +146,14 @@ void menu_tune() {
#endif // HOTENDS > 1
#if ENABLED(SINGLENOZZLE)
- MENU_MULTIPLIER_ITEM_EDIT(uint16_3, MSG_NOZZLE_STANDBY, &singlenozzle_temp[active_extruder ? 0 : 1], 0, HEATER_0_MAXTEMP - 15);
+ EDIT_ITEM_FAST(uint16_3, MSG_NOZZLE_STANDBY, &singlenozzle_temp[active_extruder ? 0 : 1], 0, HEATER_0_MAXTEMP - 15);
#endif
//
// Bed:
//
#if HAS_HEATED_BED
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_BED, &thermalManager.temp_bed.target, 0, BED_MAXTEMP - 10, thermalManager.start_watching_bed);
+ EDIT_ITEM_FAST(int3, MSG_BED, &thermalManager.temp_bed.target, 0, BED_MAXTEMP - 10, thermalManager.start_watching_bed);
#endif
//
@@ -178,21 +161,24 @@ void menu_tune() {
//
#if FAN_COUNT > 0
#if HAS_FAN0
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(uint8, MSG_FAN_SPEED FAN_SPEED_1_SUFFIX, &thermalManager.lcd_tmpfan_speed[0], 0, 255, thermalManager.lcd_setFanSpeed0);
+ editable.uint8 = thermalManager.fan_speed[0];
+ EDIT_ITEM_FAST(percent, MSG_FIRST_FAN_SPEED, &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(0, editable.uint8); });
#if ENABLED(EXTRA_FAN_SPEED)
- MENU_MULTIPLIER_ITEM_EDIT(uint8, MSG_EXTRA_FAN_SPEED FAN_SPEED_1_SUFFIX, &thermalManager.new_fan_speed[0], 3, 255);
+ EDIT_ITEM_FAST(percent, MSG_FIRST_EXTRA_FAN_SPEED, &thermalManager.new_fan_speed[0], 3, 255);
#endif
#endif
- #if HAS_FAN1 || (ENABLED(SINGLENOZZLE) && EXTRUDERS > 1)
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(uint8, MSG_FAN_SPEED " 2", &thermalManager.lcd_tmpfan_speed[1], 0, 255, thermalManager.lcd_setFanSpeed1);
+ #if HAS_FAN1
+ editable.uint8 = thermalManager.fan_speed[1];
+ EDIT_ITEM_FAST(percent, MSG_FAN_SPEED_2, &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(1, editable.uint8); });
#if ENABLED(EXTRA_FAN_SPEED)
- MENU_MULTIPLIER_ITEM_EDIT(uint8, MSG_EXTRA_FAN_SPEED " 2", &thermalManager.new_fan_speed[1], 3, 255);
+ EDIT_ITEM_FAST(percent, MSG_EXTRA_FAN_SPEED_2, &thermalManager.new_fan_speed[1], 3, 255);
#endif
#endif
- #if HAS_FAN2 || (ENABLED(SINGLENOZZLE) && EXTRUDERS > 2)
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(uint8, MSG_FAN_SPEED " 3", &thermalManager.lcd_tmpfan_speed[2], 0, 255, thermalManager.lcd_setFanSpeed2);
+ #if HAS_FAN2
+ editable.uint8 = thermalManager.fan_speed[2];
+ EDIT_ITEM_FAST(percent, MSG_FAN_SPEED_3, &editable.uint8, 0, 255, [](){ thermalManager.set_fan_speed(2, editable.uint8); });
#if ENABLED(EXTRA_FAN_SPEED)
- MENU_MULTIPLIER_ITEM_EDIT(uint8, MSG_EXTRA_FAN_SPEED " 3", &thermalManager.new_fan_speed[2], 3, 255);
+ EDIT_ITEM_FAST(percent, MSG_EXTRA_FAN_SPEED_3, &thermalManager.new_fan_speed[2], 3, 255);
#endif
#endif
#endif // FAN_COUNT > 0
@@ -202,10 +188,10 @@ void menu_tune() {
// Flow [1-5]:
//
#if EXTRUDERS == 1
- MENU_ITEM_EDIT_CALLBACK(int3, MSG_FLOW, &planner.flow_percentage[0], 10, 999, _lcd_refresh_e_factor_0);
+ EDIT_ITEM(int3, MSG_FLOW, &planner.flow_percentage[0], 10, 999, [](){ planner.refresh_e_factor(0); });
#elif EXTRUDERS
- MENU_ITEM_EDIT_CALLBACK(int3, MSG_FLOW, &planner.flow_percentage[active_extruder], 10, 999, _lcd_refresh_e_factor);
- #define EDIT_FLOW(N) MENU_ITEM_EDIT_CALLBACK(int3, MSG_FLOW MSG_LCD_N##N, &planner.flow_percentage[N], 10, 999, _lcd_refresh_e_factor_##N)
+ EDIT_ITEM(int3, MSG_FLOW, &planner.flow_percentage[active_extruder], 10, 999, [](){ planner.refresh_e_factor(active_extruder); });
+ #define EDIT_FLOW(N) EDIT_ITEM(int3, MSG_FLOW_##N, &planner.flow_percentage[N], 10, 999, [](){ planner.refresh_e_factor(N); })
EDIT_FLOW(0);
EDIT_FLOW(1);
#if EXTRUDERS > 2
@@ -229,13 +215,13 @@ void menu_tune() {
//
#if ENABLED(BABYSTEPPING)
#if ENABLED(BABYSTEP_XY)
- MENU_ITEM(submenu, MSG_BABYSTEP_X, lcd_babystep_x);
- MENU_ITEM(submenu, MSG_BABYSTEP_Y, lcd_babystep_y);
+ SUBMENU(MSG_BABYSTEP_X, [](){ _lcd_babystep_go(_lcd_babystep_x); });
+ SUBMENU(MSG_BABYSTEP_Y, [](){ _lcd_babystep_go(_lcd_babystep_y); });
#endif
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
- MENU_ITEM(submenu, MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset);
+ SUBMENU(MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset);
#else
- MENU_ITEM(submenu, MSG_BABYSTEP_Z, lcd_babystep_z);
+ SUBMENU(MSG_BABYSTEP_Z, lcd_babystep_z);
#endif
#endif
diff --git a/Marlin/src/lcd/menu/menu_ubl.cpp b/Marlin/src/lcd/menu/menu_ubl.cpp
index 4065d530943d..b514353bfb83 100644
--- a/Marlin/src/lcd/menu/menu_ubl.cpp
+++ b/Marlin/src/lcd/menu/menu_ubl.cpp
@@ -79,7 +79,7 @@ void _lcd_mesh_edit_NOP() {
float lcd_mesh_edit() {
ui.goto_screen(_lcd_mesh_edit_NOP);
ui.refresh(LCDVIEW_CALL_REDRAW_NEXT);
- _lcd_mesh_fine_tune(PSTR(MSG_MESH_EDITOR));
+ _lcd_mesh_fine_tune(GET_TEXT(MSG_MESH_EDITOR));
return mesh_edit_value;
}
@@ -89,7 +89,7 @@ void lcd_mesh_edit_setup(const float &initial) {
}
void _lcd_z_offset_edit() {
- _lcd_mesh_fine_tune(PSTR(MSG_UBL_Z_OFFSET));
+ _lcd_mesh_fine_tune(GET_TEXT(MSG_UBL_Z_OFFSET));
}
float lcd_z_offset_edit() {
@@ -127,12 +127,12 @@ void _lcd_ubl_build_custom_mesh() {
*/
void _lcd_ubl_custom_mesh() {
START_MENU();
- MENU_BACK(MSG_UBL_BUILD_MESH_MENU);
- MENU_ITEM_EDIT(int3, MSG_UBL_HOTEND_TEMP_CUSTOM, &custom_hotend_temp, EXTRUDE_MINTEMP, (HEATER_0_MAXTEMP - 10));
+ BACK_ITEM(MSG_UBL_BUILD_MESH_MENU);
+ EDIT_ITEM(int3, MSG_UBL_HOTEND_TEMP_CUSTOM, &custom_hotend_temp, EXTRUDE_MINTEMP, (HEATER_0_MAXTEMP - 10));
#if HAS_HEATED_BED
- MENU_ITEM_EDIT(int3, MSG_UBL_BED_TEMP_CUSTOM, &custom_bed_temp, BED_MINTEMP, (BED_MAXTEMP - 10));
+ EDIT_ITEM(int3, MSG_UBL_BED_TEMP_CUSTOM, &custom_bed_temp, BED_MINTEMP, (BED_MAXTEMP - 10));
#endif
- MENU_ITEM(function, MSG_UBL_BUILD_CUSTOM_MESH, _lcd_ubl_build_custom_mesh);
+ ACTION_ITEM(MSG_UBL_BUILD_CUSTOM_MESH, _lcd_ubl_build_custom_mesh);
END_MENU();
}
@@ -157,9 +157,9 @@ void _lcd_ubl_adjust_height_cmd() {
*/
void _menu_ubl_height_adjust() {
START_MENU();
- MENU_BACK(MSG_EDIT_MESH);
- MENU_ITEM_EDIT_CALLBACK(int3, MSG_UBL_MESH_HEIGHT_AMOUNT, &ubl_height_amount, -9, 9, _lcd_ubl_adjust_height_cmd);
- MENU_ITEM(function, MSG_WATCH, ui.return_to_status);
+ BACK_ITEM(MSG_EDIT_MESH);
+ EDIT_ITEM(int3, MSG_UBL_MESH_HEIGHT_AMOUNT, &ubl_height_amount, -9, 9, _lcd_ubl_adjust_height_cmd);
+ ACTION_ITEM(MSG_WATCH, ui.return_to_status);
END_MENU();
}
@@ -174,11 +174,11 @@ void _menu_ubl_height_adjust() {
*/
void _lcd_ubl_edit_mesh() {
START_MENU();
- MENU_BACK(MSG_UBL_TOOLS);
- MENU_ITEM(gcode, MSG_UBL_FINE_TUNE_ALL, PSTR("G29 P4 R999 T"));
- MENU_ITEM(gcode, MSG_UBL_FINE_TUNE_CLOSEST, PSTR("G29 P4 T"));
- MENU_ITEM(submenu, MSG_UBL_MESH_HEIGHT_ADJUST, _menu_ubl_height_adjust);
- MENU_ITEM(function, MSG_WATCH, ui.return_to_status);
+ BACK_ITEM(MSG_UBL_TOOLS);
+ GCODES_ITEM(MSG_UBL_FINE_TUNE_ALL, PSTR("G29 P4 R999 T"));
+ GCODES_ITEM(MSG_UBL_FINE_TUNE_CLOSEST, PSTR("G29 P4 T"));
+ SUBMENU(MSG_UBL_MESH_HEIGHT_ADJUST, _menu_ubl_height_adjust);
+ ACTION_ITEM(MSG_WATCH, ui.return_to_status);
END_MENU();
}
@@ -210,28 +210,19 @@ void _lcd_ubl_validate_custom_mesh() {
*/
void _lcd_ubl_validate_mesh() {
START_MENU();
- MENU_BACK(MSG_UBL_TOOLS);
+ BACK_ITEM(MSG_UBL_TOOLS);
#if HAS_HEATED_BED
- MENU_ITEM(gcode, MSG_UBL_VALIDATE_MESH_M1, PSTR("G28\nG26 C B" STRINGIFY(PREHEAT_1_TEMP_BED) " H" STRINGIFY(PREHEAT_1_TEMP_HOTEND) " P"));
- MENU_ITEM(gcode, MSG_UBL_VALIDATE_MESH_M2, PSTR("G28\nG26 C B" STRINGIFY(PREHEAT_2_TEMP_BED) " H" STRINGIFY(PREHEAT_2_TEMP_HOTEND) " P"));
+ GCODES_ITEM(MSG_UBL_VALIDATE_MESH_M1, PSTR("G28\nG26 C B" STRINGIFY(PREHEAT_1_TEMP_BED) " H" STRINGIFY(PREHEAT_1_TEMP_HOTEND) " P"));
+ GCODES_ITEM(MSG_UBL_VALIDATE_MESH_M2, PSTR("G28\nG26 C B" STRINGIFY(PREHEAT_2_TEMP_BED) " H" STRINGIFY(PREHEAT_2_TEMP_HOTEND) " P"));
#else
- MENU_ITEM(gcode, MSG_UBL_VALIDATE_MESH_M1, PSTR("G28\nG26 C B0 H" STRINGIFY(PREHEAT_1_TEMP_HOTEND) " P"));
- MENU_ITEM(gcode, MSG_UBL_VALIDATE_MESH_M2, PSTR("G28\nG26 C B0 H" STRINGIFY(PREHEAT_2_TEMP_HOTEND) " P"));
+ GCODES_ITEM(MSG_UBL_VALIDATE_MESH_M1, PSTR("G28\nG26 C B0 H" STRINGIFY(PREHEAT_1_TEMP_HOTEND) " P"));
+ GCODES_ITEM(MSG_UBL_VALIDATE_MESH_M2, PSTR("G28\nG26 C B0 H" STRINGIFY(PREHEAT_2_TEMP_HOTEND) " P"));
#endif
- MENU_ITEM(function, MSG_UBL_VALIDATE_CUSTOM_MESH, _lcd_ubl_validate_custom_mesh);
- MENU_ITEM(function, MSG_WATCH, ui.return_to_status);
+ ACTION_ITEM(MSG_UBL_VALIDATE_CUSTOM_MESH, _lcd_ubl_validate_custom_mesh);
+ ACTION_ITEM(MSG_WATCH, ui.return_to_status);
END_MENU();
}
-/**
- * UBL Grid Leveling Command
- */
-void _lcd_ubl_grid_level_cmd() {
- char ubl_lcd_gcode[12];
- sprintf_P(ubl_lcd_gcode, PSTR("G29 J%i"), side_points);
- lcd_enqueue_one_now(ubl_lcd_gcode);
-}
-
/**
* UBL Grid Leveling submenu
*
@@ -241,9 +232,13 @@ void _lcd_ubl_grid_level_cmd() {
*/
void _lcd_ubl_grid_level() {
START_MENU();
- MENU_BACK(MSG_UBL_TOOLS);
- MENU_ITEM_EDIT(int3, MSG_UBL_SIDE_POINTS, &side_points, 2, 6);
- MENU_ITEM(function, MSG_UBL_MESH_LEVEL, _lcd_ubl_grid_level_cmd);
+ BACK_ITEM(MSG_UBL_TOOLS);
+ EDIT_ITEM(int3, MSG_UBL_SIDE_POINTS, &side_points, 2, 6);
+ ACTION_ITEM(MSG_UBL_MESH_LEVEL, [](){
+ char ubl_lcd_gcode[12];
+ sprintf_P(ubl_lcd_gcode, PSTR("G29 J%i"), side_points);
+ lcd_enqueue_one_now(ubl_lcd_gcode);
+ });
END_MENU();
}
@@ -257,10 +252,10 @@ void _lcd_ubl_grid_level() {
*/
void _lcd_ubl_mesh_leveling() {
START_MENU();
- MENU_BACK(MSG_UBL_TOOLS);
- MENU_ITEM(gcode, MSG_UBL_3POINT_MESH_LEVELING, PSTR("G29 J0"));
- MENU_ITEM(submenu, MSG_UBL_GRID_MESH_LEVELING, _lcd_ubl_grid_level);
- MENU_ITEM(function, MSG_WATCH, ui.return_to_status);
+ BACK_ITEM(MSG_UBL_TOOLS);
+ GCODES_ITEM(MSG_UBL_3POINT_MESH_LEVELING, PSTR("G29 J0"));
+ SUBMENU(MSG_UBL_GRID_MESH_LEVELING, _lcd_ubl_grid_level);
+ ACTION_ITEM(MSG_WATCH, ui.return_to_status);
END_MENU();
}
@@ -285,11 +280,11 @@ void _lcd_ubl_fillin_amount_cmd() {
*/
void _menu_ubl_fillin() {
START_MENU();
- MENU_BACK(MSG_UBL_BUILD_MESH_MENU);
- MENU_ITEM_EDIT_CALLBACK(int3, MSG_UBL_FILLIN_AMOUNT, &ubl_fillin_amount, 0, 9, _lcd_ubl_fillin_amount_cmd);
- MENU_ITEM(gcode, MSG_UBL_SMART_FILLIN, PSTR("G29 P3 T0"));
- MENU_ITEM(gcode, MSG_UBL_MANUAL_FILLIN, PSTR("G29 P2 B T0"));
- MENU_ITEM(function, MSG_WATCH, ui.return_to_status);
+ BACK_ITEM(MSG_UBL_BUILD_MESH_MENU);
+ EDIT_ITEM(int3, MSG_UBL_FILLIN_AMOUNT, &ubl_fillin_amount, 0, 9, _lcd_ubl_fillin_amount_cmd);
+ GCODES_ITEM(MSG_UBL_SMART_FILLIN, PSTR("G29 P3 T0"));
+ GCODES_ITEM(MSG_UBL_MANUAL_FILLIN, PSTR("G29 P2 B T0"));
+ ACTION_ITEM(MSG_WATCH, ui.return_to_status);
END_MENU();
}
@@ -314,9 +309,9 @@ void _lcd_ubl_invalidate() {
*/
void _lcd_ubl_build_mesh() {
START_MENU();
- MENU_BACK(MSG_UBL_TOOLS);
+ BACK_ITEM(MSG_UBL_TOOLS);
#if HAS_HEATED_BED
- MENU_ITEM(gcode, MSG_UBL_BUILD_MESH_M1, PSTR(
+ GCODES_ITEM(MSG_UBL_BUILD_MESH_M1, PSTR(
"G28\n"
"M190 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\n"
"M109 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND) "\n"
@@ -324,7 +319,7 @@ void _lcd_ubl_build_mesh() {
"M104 S0\n"
"M140 S0"
));
- MENU_ITEM(gcode, MSG_UBL_BUILD_MESH_M2, PSTR(
+ GCODES_ITEM(MSG_UBL_BUILD_MESH_M2, PSTR(
"G28\n"
"M190 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\n"
"M109 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND) "\n"
@@ -333,26 +328,26 @@ void _lcd_ubl_build_mesh() {
"M140 S0"
));
#else
- MENU_ITEM(gcode, MSG_UBL_BUILD_MESH_M1, PSTR(
+ GCODES_ITEM(MSG_UBL_BUILD_MESH_M1, PSTR(
"G28\n"
"M109 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND) "\n"
"G29 P1\n"
"M104 S0"
));
- MENU_ITEM(gcode, MSG_UBL_BUILD_MESH_M2, PSTR(
+ GCODES_ITEM(MSG_UBL_BUILD_MESH_M2, PSTR(
"G28\n"
"M109 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND) "\n"
"G29 P1\n"
"M104 S0"
));
#endif
- MENU_ITEM(submenu, MSG_UBL_BUILD_CUSTOM_MESH, _lcd_ubl_custom_mesh);
- MENU_ITEM(gcode, MSG_UBL_BUILD_COLD_MESH, PSTR("G28\nG29 P1"));
- MENU_ITEM(submenu, MSG_UBL_FILLIN_MESH, _menu_ubl_fillin);
- MENU_ITEM(gcode, MSG_UBL_CONTINUE_MESH, PSTR("G29 P1 C"));
- MENU_ITEM(function, MSG_UBL_INVALIDATE_ALL, _lcd_ubl_invalidate);
- MENU_ITEM(gcode, MSG_UBL_INVALIDATE_CLOSEST, PSTR("G29 I"));
- MENU_ITEM(function, MSG_WATCH, ui.return_to_status);
+ SUBMENU(MSG_UBL_BUILD_CUSTOM_MESH, _lcd_ubl_custom_mesh);
+ GCODES_ITEM(MSG_UBL_BUILD_COLD_MESH, PSTR("G28\nG29 P1"));
+ SUBMENU(MSG_UBL_FILLIN_MESH, _menu_ubl_fillin);
+ GCODES_ITEM(MSG_UBL_CONTINUE_MESH, PSTR("G29 P1 C"));
+ ACTION_ITEM(MSG_UBL_INVALIDATE_ALL, _lcd_ubl_invalidate);
+ GCODES_ITEM(MSG_UBL_INVALIDATE_CLOSEST, PSTR("G29 I"));
+ ACTION_ITEM(MSG_WATCH, ui.return_to_status);
END_MENU();
}
@@ -363,7 +358,7 @@ void _lcd_ubl_load_mesh_cmd() {
char ubl_lcd_gcode[25];
sprintf_P(ubl_lcd_gcode, PSTR("G29 L%i"), ubl_storage_slot);
lcd_enqueue_one_now(ubl_lcd_gcode);
- sprintf_P(ubl_lcd_gcode, PSTR("M117 " MSG_MESH_LOADED), ubl_storage_slot);
+ sprintf_P(ubl_lcd_gcode, GET_TEXT(MSG_MESH_LOADED), ubl_storage_slot);
lcd_enqueue_one_now(ubl_lcd_gcode);
}
@@ -374,7 +369,7 @@ void _lcd_ubl_save_mesh_cmd() {
char ubl_lcd_gcode[25];
sprintf_P(ubl_lcd_gcode, PSTR("G29 S%i"), ubl_storage_slot);
lcd_enqueue_one_now(ubl_lcd_gcode);
- sprintf_P(ubl_lcd_gcode, PSTR("M117 " MSG_MESH_SAVED), ubl_storage_slot);
+ sprintf_P(ubl_lcd_gcode, GET_TEXT(MSG_MESH_SAVED), ubl_storage_slot);
lcd_enqueue_one_now(ubl_lcd_gcode);
}
@@ -389,14 +384,14 @@ void _lcd_ubl_save_mesh_cmd() {
void _lcd_ubl_storage_mesh() {
int16_t a = settings.calc_num_meshes();
START_MENU();
- MENU_BACK(MSG_UBL_LEVEL_BED);
+ BACK_ITEM(MSG_UBL_LEVEL_BED);
if (!WITHIN(ubl_storage_slot, 0, a - 1)) {
STATIC_ITEM(MSG_UBL_NO_STORAGE);
}
else {
- MENU_ITEM_EDIT(int3, MSG_UBL_STORAGE_SLOT, &ubl_storage_slot, 0, a - 1);
- MENU_ITEM(function, MSG_UBL_LOAD_MESH, _lcd_ubl_load_mesh_cmd);
- MENU_ITEM(function, MSG_UBL_SAVE_MESH, _lcd_ubl_save_mesh_cmd);
+ EDIT_ITEM(int3, MSG_UBL_STORAGE_SLOT, &ubl_storage_slot, 0, a - 1);
+ ACTION_ITEM(MSG_UBL_LOAD_MESH, _lcd_ubl_load_mesh_cmd);
+ ACTION_ITEM(MSG_UBL_SAVE_MESH, _lcd_ubl_save_mesh_cmd);
}
END_MENU();
}
@@ -467,7 +462,7 @@ void _lcd_ubl_output_map_lcd() {
if (ui.use_click()) return _lcd_ubl_map_lcd_edit_cmd();
if (ui.encoderPosition) {
- step_scaler += int16_t(ui.encoderPosition);
+ step_scaler += int32_t(ui.encoderPosition);
x_plot += step_scaler / (ENCODER_STEPS_PER_MENU_ITEM);
ui.encoderPosition = 0;
ui.refresh(LCDVIEW_REDRAW_NOW);
@@ -540,11 +535,11 @@ void _lcd_ubl_output_map_lcd_cmd() {
*/
void _lcd_ubl_output_map() {
START_MENU();
- MENU_BACK(MSG_UBL_LEVEL_BED);
- MENU_ITEM(gcode, MSG_UBL_OUTPUT_MAP_HOST, PSTR("G29 T0"));
- MENU_ITEM(gcode, MSG_UBL_OUTPUT_MAP_CSV, PSTR("G29 T1"));
- MENU_ITEM(gcode, MSG_UBL_OUTPUT_MAP_BACKUP, PSTR("G29 S-1"));
- MENU_ITEM(function, MSG_UBL_OUTPUT_MAP, _lcd_ubl_output_map_lcd_cmd);
+ BACK_ITEM(MSG_UBL_LEVEL_BED);
+ GCODES_ITEM(MSG_UBL_OUTPUT_MAP_HOST, PSTR("G29 T0"));
+ GCODES_ITEM(MSG_UBL_OUTPUT_MAP_CSV, PSTR("G29 T1"));
+ GCODES_ITEM(MSG_UBL_OUTPUT_MAP_BACKUP, PSTR("G29 S-1"));
+ ACTION_ITEM(MSG_UBL_OUTPUT_MAP, _lcd_ubl_output_map_lcd_cmd);
END_MENU();
}
@@ -559,12 +554,12 @@ void _lcd_ubl_output_map() {
*/
void _menu_ubl_tools() {
START_MENU();
- MENU_BACK(MSG_UBL_LEVEL_BED);
- MENU_ITEM(submenu, MSG_UBL_BUILD_MESH_MENU, _lcd_ubl_build_mesh);
- MENU_ITEM(gcode, MSG_UBL_MANUAL_MESH, PSTR("G29 I999\nG29 P2 B T0"));
- MENU_ITEM(submenu, MSG_UBL_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
- MENU_ITEM(submenu, MSG_EDIT_MESH, _lcd_ubl_edit_mesh);
- MENU_ITEM(submenu, MSG_UBL_MESH_LEVELING, _lcd_ubl_mesh_leveling);
+ BACK_ITEM(MSG_UBL_LEVEL_BED);
+ SUBMENU(MSG_UBL_BUILD_MESH_MENU, _lcd_ubl_build_mesh);
+ GCODES_ITEM(MSG_UBL_MANUAL_MESH, PSTR("G29 I999\nG29 P2 B T0"));
+ SUBMENU(MSG_UBL_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
+ SUBMENU(MSG_EDIT_MESH, _lcd_ubl_edit_mesh);
+ SUBMENU(MSG_UBL_MESH_LEVELING, _lcd_ubl_mesh_leveling);
END_MENU();
}
@@ -582,14 +577,14 @@ void _menu_ubl_tools() {
*/
void _lcd_ubl_step_by_step() {
START_MENU();
- MENU_BACK(MSG_UBL_LEVEL_BED);
- MENU_ITEM(gcode, "1 " MSG_UBL_BUILD_COLD_MESH, PSTR("G28\nG29 P1"));
- MENU_ITEM(gcode, "2 " MSG_UBL_SMART_FILLIN, PSTR("G29 P3 T0"));
- MENU_ITEM(submenu, "3 " MSG_UBL_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
- MENU_ITEM(gcode, "4 " MSG_UBL_FINE_TUNE_ALL, PSTR("G29 P4 R999 T"));
- MENU_ITEM(submenu, "5 " MSG_UBL_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
- MENU_ITEM(gcode, "6 " MSG_UBL_FINE_TUNE_ALL, PSTR("G29 P4 R999 T"));
- MENU_ITEM(function, "7 " MSG_UBL_SAVE_MESH, _lcd_ubl_save_mesh_cmd);
+ BACK_ITEM(MSG_UBL_LEVEL_BED);
+ GCODES_ITEM(MSG_UBL_1_BUILD_COLD_MESH, PSTR("G28\nG29 P1"));
+ GCODES_ITEM(MSG_UBL_2_SMART_FILLIN, PSTR("G29 P3 T0"));
+ SUBMENU(MSG_UBL_3_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
+ GCODES_ITEM(MSG_UBL_4_FINE_TUNE_ALL, PSTR("G29 P4 R999 T"));
+ SUBMENU(MSG_UBL_5_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
+ GCODES_ITEM(MSG_UBL_6_FINE_TUNE_ALL, PSTR("G29 P4 R999 T"));
+ ACTION_ITEM(MSG_UBL_7_SAVE_MESH, _lcd_ubl_save_mesh_cmd);
END_MENU();
}
@@ -609,19 +604,20 @@ void _lcd_ubl_step_by_step() {
void _lcd_ubl_level_bed() {
START_MENU();
- MENU_BACK(MSG_MOTION);
+ BACK_ITEM(MSG_MOTION);
if (planner.leveling_active)
- MENU_ITEM(gcode, MSG_UBL_DEACTIVATE_MESH, PSTR("G29 D"));
+ GCODES_ITEM(MSG_UBL_DEACTIVATE_MESH, PSTR("G29 D"));
else
- MENU_ITEM(gcode, MSG_UBL_ACTIVATE_MESH, PSTR("G29 A"));
- MENU_ITEM(submenu, MSG_UBL_STEP_BY_STEP_MENU, _lcd_ubl_step_by_step);
- MENU_ITEM(function, MSG_UBL_MESH_EDIT, _lcd_ubl_output_map_lcd_cmd);
- MENU_ITEM(submenu, MSG_UBL_STORAGE_MESH_MENU, _lcd_ubl_storage_mesh);
- MENU_ITEM(submenu, MSG_UBL_OUTPUT_MAP, _lcd_ubl_output_map);
- MENU_ITEM(submenu, MSG_UBL_TOOLS, _menu_ubl_tools);
- MENU_ITEM(gcode, MSG_UBL_INFO_UBL, PSTR("G29 W"));
+ GCODES_ITEM(MSG_UBL_ACTIVATE_MESH, PSTR("G29 A"));
+ SUBMENU(MSG_UBL_STEP_BY_STEP_MENU, _lcd_ubl_step_by_step);
+ ACTION_ITEM(MSG_UBL_MESH_EDIT, _lcd_ubl_output_map_lcd_cmd);
+ SUBMENU(MSG_UBL_STORAGE_MESH_MENU, _lcd_ubl_storage_mesh);
+ SUBMENU(MSG_UBL_OUTPUT_MAP, _lcd_ubl_output_map);
+ SUBMENU(MSG_UBL_TOOLS, _menu_ubl_tools);
+ GCODES_ITEM(MSG_UBL_INFO_UBL, PSTR("G29 W"));
#if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
- MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float3, MSG_Z_FADE_HEIGHT, &lcd_z_fade_height, 0, 100, _lcd_set_z_fade_height);
+ editable.decimal = planner.z_fade_height;
+ EDIT_ITEM_FAST(float3, MSG_Z_FADE_HEIGHT, &editable.decimal, 0, 100, [](){ set_z_fade_height(editable.decimal); });
#endif
END_MENU();
}
diff --git a/Marlin/src/lcd/ultralcd.cpp b/Marlin/src/lcd/ultralcd.cpp
index 63d1629f8e76..54d13c29c14d 100644
--- a/Marlin/src/lcd/ultralcd.cpp
+++ b/Marlin/src/lcd/ultralcd.cpp
@@ -28,6 +28,7 @@
// All displays share the MarlinUI class
#if HAS_DISPLAY
+ #include "../gcode/queue.h"
#include "ultralcd.h"
#include "fontutils.h"
MarlinUI ui;
@@ -43,25 +44,21 @@
#if HAS_SPI_LCD
#if ENABLED(STATUS_MESSAGE_SCROLLING)
uint8_t MarlinUI::status_scroll_offset; // = 0
- #if LONG_FILENAME_LENGTH > CHARSIZE * 2 * (LCD_WIDTH)
- #define MAX_MESSAGE_LENGTH LONG_FILENAME_LENGTH
- #else
- #define MAX_MESSAGE_LENGTH CHARSIZE * 2 * (LCD_WIDTH)
- #endif
+ constexpr uint8_t MAX_MESSAGE_LENGTH = _MAX(LONG_FILENAME_LENGTH, MAX_LANG_CHARSIZE * 2 * (LCD_WIDTH));
#else
- #define MAX_MESSAGE_LENGTH CHARSIZE * (LCD_WIDTH)
+ constexpr uint8_t MAX_MESSAGE_LENGTH = MAX_LANG_CHARSIZE * (LCD_WIDTH);
#endif
#elif ENABLED(EXTENSIBLE_UI)
- #define MAX_MESSAGE_LENGTH 63
+ constexpr uint8_t MAX_MESSAGE_LENGTH = 63;
#endif
-#ifdef MAX_MESSAGE_LENGTH
+#if HAS_SPI_LCD || ENABLED(EXTENSIBLE_UI)
uint8_t MarlinUI::alert_level; // = 0
char MarlinUI::status_message[MAX_MESSAGE_LENGTH + 1];
#endif
#if ENABLED(LCD_SET_PROGRESS_MANUALLY)
- uint8_t MarlinUI::progress_bar_percent; // = 0
+ MarlinUI::progress_t MarlinUI::progress_override; // = 0
#endif
#if HAS_BUZZER
@@ -93,7 +90,6 @@
#include "../module/planner.h"
#include "../module/printcounter.h"
#include "../module/motion.h"
-#include "../gcode/queue.h"
#include "../Marlin.h"
@@ -141,7 +137,7 @@ millis_t MarlinUI::next_button_update_ms; // = 0
// Encoder Handling
#if HAS_ENCODER_ACTION
- uint16_t MarlinUI::encoderPosition;
+ uint32_t MarlinUI::encoderPosition;
volatile int8_t encoderDiff; // Updated in update_buttons, added to encoderPosition every LCD update
#endif
@@ -299,6 +295,10 @@ void MarlinUI::init() {
SET_INPUT_PULLUP(BTN_ENC);
#endif
+ #if BUTTON_EXISTS(BACK)
+ SET_INPUT_PULLUP(BTN_BACK);
+ #endif
+
#if BUTTON_EXISTS(UP)
SET_INPUT(BTN_UP);
#endif
@@ -519,7 +519,7 @@ void MarlinUI::status_screen() {
if (expire_status_ms > 0) {
// Expire the message if a job is active and the bar has ticks
- if (get_progress() > 2 && !print_job_timer.isPaused()) {
+ if (get_progress_percent() > 2 && !print_job_timer.isPaused()) {
if (ELAPSED(ms, expire_status_ms)) {
status_message[0] = '\0';
expire_status_ms = 0;
@@ -590,9 +590,12 @@ void MarlinUI::status_screen() {
draw_status_screen();
}
-void MarlinUI::kill_screen(PGM_P lcd_msg) {
+void MarlinUI::kill_screen(PGM_P lcd_error, PGM_P lcd_component) {
init();
- set_alert_status_P(lcd_msg);
+ status_printf_P(1, PSTR(S_FMT ": " S_FMT), lcd_error, lcd_component);
+ #if HAS_LCD_MENU
+ return_to_status();
+ #endif
// RED ALERT. RED ALERT.
#ifdef LED_BACKLIGHT_TIMEOUT
@@ -843,13 +846,13 @@ void MarlinUI::update() {
if (old_sd_status == 2)
card.beginautostart(); // Initial boot
else
- set_status_P(PSTR(MSG_MEDIA_INSERTED));
+ set_status_P(GET_TEXT(MSG_MEDIA_INSERTED));
}
#if PIN_EXISTS(SD_DETECT)
else {
card.release();
if (old_sd_status != 2) {
- set_status_P(PSTR(MSG_MEDIA_REMOVED));
+ set_status_P(GET_TEXT(MSG_MEDIA_REMOVED));
#if HAS_LCD_MENU
return_to_status();
#endif
@@ -1349,8 +1352,6 @@ void MarlinUI::update() {
#if ENABLED(EXTENSIBLE_UI)
ExtUI::onStatusChanged(status_message);
#endif
-
- refresh();
}
bool MarlinUI::has_status() { return (status_message[0] != '\0'); }
@@ -1425,15 +1426,17 @@ void MarlinUI::update() {
#endif
}
+ #include "../Marlin.h"
#include "../module/printcounter.h"
+ PGM_P print_paused = GET_TEXT(MSG_PRINT_PAUSED);
+
/**
* Reset the status message
*/
void MarlinUI::reset_status() {
- static const char paused[] PROGMEM = MSG_PRINT_PAUSED;
- static const char printing[] PROGMEM = MSG_PRINTING;
- static const char welcome[] PROGMEM = WELCOME_MSG;
+ PGM_P printing = GET_TEXT(MSG_PRINTING);
+ PGM_P welcome = GET_TEXT(WELCOME_MSG);
#if SERVICE_INTERVAL_1 > 0
static const char service1[] PROGMEM = { "> " SERVICE_NAME_1 "!" };
#endif
@@ -1444,8 +1447,8 @@ void MarlinUI::update() {
static const char service3[] PROGMEM = { "> " SERVICE_NAME_3 "!" };
#endif
PGM_P msg;
- if (!IS_SD_PRINTING() && print_job_timer.isPaused())
- msg = paused;
+ if (printingIsPaused())
+ msg = print_paused;
#if ENABLED(SDSUPPORT)
else if (IS_SD_PRINTING())
return set_status(card.longest_filename(), true);
@@ -1485,7 +1488,7 @@ void MarlinUI::update() {
host_prompt_open(PROMPT_INFO, PSTR("UI Aborted"), PSTR("Dismiss"));
#endif
print_job_timer.stop();
- set_status_P(PSTR(MSG_PRINT_ABORTED));
+ set_status_P(GET_TEXT(MSG_PRINT_ABORTED));
#if HAS_LCD_MENU
return_to_status();
#endif
@@ -1497,7 +1500,7 @@ void MarlinUI::update() {
void MarlinUI::pause_print() {
#if HAS_LCD_MENU
- synchronize(PSTR(MSG_PAUSE_PRINT));
+ synchronize(GET_TEXT(MSG_PAUSE_PRINT));
#endif
#if ENABLED(POWER_LOSS_RECOVERY)
@@ -1508,7 +1511,7 @@ void MarlinUI::update() {
host_prompt_open(PROMPT_PAUSE_RESUME, PSTR("UI Pause"), PSTR("Resume"));
#endif
- set_status_P(PSTR(MSG_PRINT_PAUSED));
+ set_status_P(print_paused);
#if ENABLED(PARK_HEAD_ON_PAUSE)
#if HAS_SPI_LCD
@@ -1527,9 +1530,7 @@ void MarlinUI::update() {
#if ENABLED(PARK_HEAD_ON_PAUSE)
wait_for_heatup = wait_for_user = false;
#endif
- #if ENABLED(SDSUPPORT)
- if (card.isPaused()) queue.inject_P(PSTR("M24"));
- #endif
+ if (IS_SD_PAUSED()) queue.inject_P(PSTR("M24"));
#ifdef ACTION_ON_RESUME
host_action_resume();
#endif
@@ -1537,19 +1538,24 @@ void MarlinUI::update() {
}
#if HAS_PRINT_PROGRESS
- uint8_t MarlinUI::get_progress() {
+
+ MarlinUI::progress_t MarlinUI::_get_progress() {
#if ENABLED(LCD_SET_PROGRESS_MANUALLY)
- uint8_t &progress = progress_bar_percent;
- #define _PLIMIT(P) ((P) & 0x7F)
+ const progress_t p = progress_override & PROGRESS_MASK;
#else
- #define _PLIMIT(P) P
- uint8_t progress = 0;
- #endif
- #if ENABLED(SDSUPPORT)
- if (IS_SD_PRINTING()) progress = card.percentDone();
+ constexpr progress_t p = 0;
#endif
- return _PLIMIT(progress);
+ return (p
+ #if ENABLED(SDSUPPORT)
+ #if HAS_PRINT_PROGRESS_PERMYRIAD
+ ?: card.permyriadDone()
+ #else
+ ?: card.percentDone()
+ #endif
+ #endif
+ );
}
+
#endif
#endif // HAS_DISPLAY
diff --git a/Marlin/src/lcd/ultralcd.h b/Marlin/src/lcd/ultralcd.h
index c33337df8ce0..27212835f137 100644
--- a/Marlin/src/lcd/ultralcd.h
+++ b/Marlin/src/lcd/ultralcd.h
@@ -67,13 +67,9 @@
#if HAS_GRAPHICAL_LCD
#define SETCURSOR(col, row) lcd_moveto(col * (MENU_FONT_WIDTH), (row + 1) * (MENU_FONT_HEIGHT))
#define SETCURSOR_RJ(len, row) lcd_moveto(LCD_PIXEL_WIDTH - (len) * (MENU_FONT_WIDTH), (row + 1) * (MENU_FONT_HEIGHT))
- #define LCDPRINT(p) u8g.print(p)
- #define LCDWRITE(c) u8g.print(c)
#else
#define SETCURSOR(col, row) lcd_moveto(col, row)
#define SETCURSOR_RJ(len, row) lcd_moveto(LCD_WIDTH - (len), row)
- #define LCDPRINT(p) lcd_put_u8str(p)
- #define LCDWRITE(c) lcd_put_wchar(c)
#endif
#include "lcdprint.h"
@@ -292,15 +288,28 @@ class MarlinUI {
static void resume_print();
#if HAS_PRINT_PROGRESS
+ #if HAS_PRINT_PROGRESS_PERMYRIAD
+ typedef uint16_t progress_t;
+ #define PROGRESS_SCALE 100U
+ #define PROGRESS_MASK 0x7FFF
+ #else
+ typedef uint8_t progress_t;
+ #define PROGRESS_SCALE 1U
+ #define PROGRESS_MASK 0x7F
+ #endif
#if ENABLED(LCD_SET_PROGRESS_MANUALLY)
- static uint8_t progress_bar_percent;
- static void set_progress(const uint8_t progress) { progress_bar_percent = _MIN(progress, 100); }
- static void set_progress_done() { set_progress(0x80 + 100); }
- static void progress_reset() { if (progress_bar_percent & 0x80) set_progress(0); }
+ static progress_t progress_override;
+ static void set_progress(const progress_t p) { progress_override = _MIN(p, 100U * (PROGRESS_SCALE)); }
+ static void set_progress_done() { progress_override = (PROGRESS_MASK + 1U) + 100U * (PROGRESS_SCALE); }
+ static void progress_reset() { if (progress_override & (PROGRESS_MASK + 1U)) set_progress(0); }
#endif
- static uint8_t get_progress();
+ static progress_t _get_progress();
+ #if HAS_PRINT_PROGRESS_PERMYRIAD
+ static uint16_t get_progress_permyriad() { return _get_progress(); }
+ #endif
+ static uint8_t get_progress_percent() { return uint8_t(_get_progress() / (PROGRESS_SCALE)); }
#else
- static constexpr uint8_t get_progress() { return 0; }
+ static constexpr uint8_t get_progress_percent() { return 0; }
#endif
#if HAS_SPI_LCD
@@ -380,7 +389,7 @@ class MarlinUI {
#endif
static bool get_blink();
- static void kill_screen(PGM_P const lcd_msg);
+ static void kill_screen(PGM_P const lcd_error, PGM_P const lcd_component);
static void draw_kill_screen();
static void set_status(const char* const message, const bool persist=false);
static void set_status_P(PGM_P const message, const int8_t level=0);
@@ -543,7 +552,7 @@ class MarlinUI {
static void wait_for_release();
#endif
- static uint16_t encoderPosition;
+ static uint32_t encoderPosition;
#if ENABLED(REVERSE_ENCODER_DIRECTION)
#define ENCODERBASE -1
@@ -598,5 +607,8 @@ class MarlinUI {
extern MarlinUI ui;
-#define LCD_MESSAGEPGM(x) ui.set_status_P(PSTR(x))
-#define LCD_ALERTMESSAGEPGM(x) ui.set_alert_status_P(PSTR(x))
+#define LCD_MESSAGEPGM_P(x) ui.set_status_P(x)
+#define LCD_ALERTMESSAGEPGM_P(x) ui.set_alert_status_P(x)
+
+#define LCD_MESSAGEPGM(x) LCD_MESSAGEPGM_P(GET_TEXT(x))
+#define LCD_ALERTMESSAGEPGM(x) LCD_ALERTMESSAGEPGM_P(GET_TEXT(x))
diff --git a/Marlin/src/libs/duration_t.h b/Marlin/src/libs/duration_t.h
index 2015c17436f9..0df3659b1bdf 100644
--- a/Marlin/src/libs/duration_t.h
+++ b/Marlin/src/libs/duration_t.h
@@ -151,15 +151,15 @@ struct duration_t {
m = uint16_t(this->minute() % 60UL);
if (with_days) {
uint16_t d = this->day();
- sprintf_P(buffer, PSTR("%ud %02u:%02u"), d, h % 24, m);
+ sprintf_P(buffer, PSTR("%hud %02hu:%02hu"), d, h % 24, m);
return d >= 10 ? 9 : 8;
}
else if (h < 100) {
- sprintf_P(buffer, PSTR("%02u:%02u"), h, m);
+ sprintf_P(buffer, PSTR("%02hu:%02hu"), h, m);
return 5;
}
else {
- sprintf_P(buffer, PSTR("%u:%02u"), h, m);
+ sprintf_P(buffer, PSTR("%hu:%02hu"), h, m);
return 6;
}
}
diff --git a/Marlin/src/libs/least_squares_fit.cpp b/Marlin/src/libs/least_squares_fit.cpp
index e7ef43614607..135329679454 100644
--- a/Marlin/src/libs/least_squares_fit.cpp
+++ b/Marlin/src/libs/least_squares_fit.cpp
@@ -34,7 +34,7 @@
#include "../inc/MarlinConfig.h"
-#if EITHER(AUTO_BED_LEVELING_UBL, AUTO_BED_LEVELING_LINEAR)
+#if ANY(AUTO_BED_LEVELING_UBL, AUTO_BED_LEVELING_LINEAR, Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
#include "least_squares_fit.h"
diff --git a/Marlin/src/libs/numtostr.cpp b/Marlin/src/libs/numtostr.cpp
index 6be9da7afb63..6054f877e54f 100644
--- a/Marlin/src/libs/numtostr.cpp
+++ b/Marlin/src/libs/numtostr.cpp
@@ -33,7 +33,7 @@ char conv[8] = { 0 };
#define MINUSOR(n, alt) (n >= 0 ? (alt) : (n = -n, '-'))
// Convert a full-range unsigned 8bit int to a percentage
-char* ui8tostr4pct(const uint8_t i) {
+const char* ui8tostr4pct(const uint8_t i) {
const uint8_t n = ui8_to_percent(i);
conv[3] = RJDIGIT(n, 100);
conv[4] = RJDIGIT(n, 10);
@@ -43,7 +43,7 @@ char* ui8tostr4pct(const uint8_t i) {
}
// Convert unsigned 8bit int to string 123 format
-char* ui8tostr3(const uint8_t i) {
+const char* ui8tostr3(const uint8_t i) {
conv[4] = RJDIGIT(i, 100);
conv[5] = RJDIGIT(i, 10);
conv[6] = DIGIMOD(i, 1);
@@ -51,7 +51,7 @@ char* ui8tostr3(const uint8_t i) {
}
// Convert signed 8bit int to rj string with 123 or -12 format
-char* i8tostr3(const int8_t x) {
+const char* i8tostr3(const int8_t x) {
int xx = x;
conv[4] = MINUSOR(xx, RJDIGIT(xx, 100));
conv[5] = RJDIGIT(xx, 10);
@@ -59,8 +59,36 @@ char* i8tostr3(const int8_t x) {
return &conv[4];
}
+#if HAS_PRINT_PROGRESS_PERMYRIAD
+ // Convert unsigned 16-bit permyriad to percent with 100 / 23 / 23.4 / 3.45 format
+ const char* permyriadtostr4(const uint16_t xx) {
+ if (xx >= 10000)
+ return "100";
+ else if (xx >= 1000) {
+ conv[3] = DIGIMOD(xx, 1000);
+ conv[4] = DIGIMOD(xx, 100);
+ conv[5] = '.';
+ conv[6] = DIGIMOD(xx, 10);
+ return &conv[3];
+ }
+ else if (xx % 100 == 0) {
+ conv[4] = ' ';
+ conv[5] = RJDIGIT(xx, 1000);
+ conv[6] = DIGIMOD(xx, 100);
+ return &conv[4];
+ }
+ else {
+ conv[3] = DIGIMOD(xx, 100);
+ conv[4] = '.';
+ conv[5] = DIGIMOD(xx, 10);
+ conv[6] = RJDIGIT(xx, 1);
+ return &conv[3];
+ }
+ }
+#endif
+
// Convert unsigned 16bit int to string 12345 format
-char* ui16tostr5(const uint16_t xx) {
+const char* ui16tostr5(const uint16_t xx) {
conv[2] = RJDIGIT(xx, 10000);
conv[3] = RJDIGIT(xx, 1000);
conv[4] = RJDIGIT(xx, 100);
@@ -70,7 +98,7 @@ char* ui16tostr5(const uint16_t xx) {
}
// Convert unsigned 16bit int to string 1234 format
-char* ui16tostr4(const uint16_t xx) {
+const char* ui16tostr4(const uint16_t xx) {
conv[3] = RJDIGIT(xx, 1000);
conv[4] = RJDIGIT(xx, 100);
conv[5] = RJDIGIT(xx, 10);
@@ -79,7 +107,7 @@ char* ui16tostr4(const uint16_t xx) {
}
// Convert unsigned 16bit int to string 123 format
-char* ui16tostr3(const uint16_t xx) {
+const char* ui16tostr3(const uint16_t xx) {
conv[4] = RJDIGIT(xx, 100);
conv[5] = RJDIGIT(xx, 10);
conv[6] = DIGIMOD(xx, 1);
@@ -87,7 +115,7 @@ char* ui16tostr3(const uint16_t xx) {
}
// Convert signed 16bit int to rj string with 123 or -12 format
-char* i16tostr3(const int16_t x) {
+const char* i16tostr3(const int16_t x) {
int xx = x;
conv[4] = MINUSOR(xx, RJDIGIT(xx, 100));
conv[5] = RJDIGIT(xx, 10);
@@ -96,7 +124,7 @@ char* i16tostr3(const int16_t x) {
}
// Convert unsigned 16bit int to lj string with 123 format
-char* i16tostr3left(const int16_t i) {
+const char* i16tostr3left(const int16_t i) {
char *str = &conv[6];
*str = DIGIMOD(i, 1);
if (i >= 10) {
@@ -108,7 +136,7 @@ char* i16tostr3left(const int16_t i) {
}
// Convert signed 16bit int to rj string with 1234, _123, -123, _-12, or __-1 format
-char* i16tostr4sign(const int16_t i) {
+const char* i16tostr4sign(const int16_t i) {
const bool neg = i < 0;
const int ii = neg ? -i : i;
if (i >= 1000) {
@@ -137,7 +165,7 @@ char* i16tostr4sign(const int16_t i) {
}
// Convert unsigned float to string with 1.23 format
-char* ftostr12ns(const float &f) {
+const char* ftostr12ns(const float &f) {
const long i = ((f < 0 ? -f : f) * 1000 + 5) / 10;
conv[3] = DIGIMOD(i, 100);
conv[4] = '.';
@@ -147,7 +175,7 @@ char* ftostr12ns(const float &f) {
}
// Convert signed float to fixed-length string with 12.34 / -2.34 format or 123.45 / -23.45 format
-char* ftostr42_52(const float &f) {
+const char* ftostr42_52(const float &f) {
if (f <= -10 || f >= 100) return ftostr52(f); // need more digits
long i = (f * 1000 + (f < 0 ? -5: 5)) / 10;
conv[2] = (f >= 0 && f < 10) ? ' ' : MINUSOR(i, DIGIMOD(i, 1000));
@@ -159,7 +187,7 @@ char* ftostr42_52(const float &f) {
}
// Convert signed float to fixed-length string with 023.45 / -23.45 format
-char* ftostr52(const float &f) {
+const char* ftostr52(const float &f) {
long i = (f * 1000 + (f < 0 ? -5: 5)) / 10;
conv[1] = MINUSOR(i, DIGIMOD(i, 10000));
conv[2] = DIGIMOD(i, 1000);
@@ -173,7 +201,7 @@ char* ftostr52(const float &f) {
#if ENABLED(LCD_DECIMAL_SMALL_XY)
// Convert float to rj string with 1234, _123, -123, _-12, 12.3, _1.2, or -1.2 format
- char* ftostr4sign(const float &f) {
+ const char* ftostr4sign(const float &f) {
const int i = (f * 100 + (f < 0 ? -5: 5)) / 10;
if (!WITHIN(i, -99, 999)) return i16tostr4sign((int)f);
const bool neg = i < 0;
@@ -188,7 +216,7 @@ char* ftostr52(const float &f) {
#endif
// Convert float to fixed-length string with +123.4 / -123.4 format
-char* ftostr41sign(const float &f) {
+const char* ftostr41sign(const float &f) {
int i = (f * 100 + (f < 0 ? -5: 5)) / 10;
conv[1] = MINUSOR(i, '+');
conv[2] = DIGIMOD(i, 1000);
@@ -200,7 +228,7 @@ char* ftostr41sign(const float &f) {
}
// Convert signed float to string (6 digit) with -1.234 / _0.000 / +1.234 format
-char* ftostr43sign(const float &f, char plus/*=' '*/) {
+const char* ftostr43sign(const float &f, char plus/*=' '*/) {
long i = (f * 10000 + (f < 0 ? -5: 5)) / 10;
conv[1] = i ? MINUSOR(i, plus) : ' ';
conv[2] = DIGIMOD(i, 1000);
@@ -212,7 +240,7 @@ char* ftostr43sign(const float &f, char plus/*=' '*/) {
}
// Convert signed float to string (5 digit) with -1.2345 / _0.0000 / +1.2345 format
-char* ftostr54sign(const float &f, char plus/*=' '*/) {
+const char* ftostr54sign(const float &f, char plus/*=' '*/) {
long i = (f * 100000 + (f < 0 ? -5: 5)) / 10;
conv[0] = i ? MINUSOR(i, plus) : ' ';
conv[1] = DIGIMOD(i, 10000);
@@ -225,13 +253,13 @@ char* ftostr54sign(const float &f, char plus/*=' '*/) {
}
// Convert unsigned float to rj string with 12345 format
-char* ftostr5rj(const float &f) {
+const char* ftostr5rj(const float &f) {
const long i = ((f < 0 ? -f : f) * 10 + 5) / 10;
return ui16tostr5(i);
}
// Convert signed float to string with +1234.5 format
-char* ftostr51sign(const float &f) {
+const char* ftostr51sign(const float &f) {
long i = (f * 100 + (f < 0 ? -5: 5)) / 10;
conv[0] = MINUSOR(i, '+');
conv[1] = DIGIMOD(i, 10000);
@@ -244,7 +272,7 @@ char* ftostr51sign(const float &f) {
}
// Convert signed float to string with +123.45 format
-char* ftostr52sign(const float &f) {
+const char* ftostr52sign(const float &f) {
long i = (f * 1000 + (f < 0 ? -5: 5)) / 10;
conv[0] = MINUSOR(i, '+');
conv[1] = DIGIMOD(i, 10000);
@@ -257,7 +285,7 @@ char* ftostr52sign(const float &f) {
}
// Convert unsigned float to string with 1234.5 format omitting trailing zeros
-char* ftostr51rj(const float &f) {
+const char* ftostr51rj(const float &f) {
const long i = ((f < 0 ? -f : f) * 100 + 5) / 10;
conv[0] = ' ';
conv[1] = RJDIGIT(i, 10000);
@@ -270,7 +298,7 @@ char* ftostr51rj(const float &f) {
}
// Convert signed float to space-padded string with -_23.4_ format
-char* ftostr52sp(const float &f) {
+const char* ftostr52sp(const float &f) {
long i = (f * 1000 + (f < 0 ? -5: 5)) / 10;
uint8_t dig;
conv[0] = MINUSOR(i, ' ');
diff --git a/Marlin/src/libs/numtostr.h b/Marlin/src/libs/numtostr.h
index 6af2ac48696f..f18df094a3eb 100644
--- a/Marlin/src/libs/numtostr.h
+++ b/Marlin/src/libs/numtostr.h
@@ -24,76 +24,81 @@
#include
// Convert a full-range unsigned 8bit int to a percentage
-char* ui8tostr4pct(const uint8_t i);
+const char* ui8tostr4pct(const uint8_t i);
// Convert uint8_t to string with 123 format
-char* ui8tostr3(const uint8_t i);
+const char* ui8tostr3(const uint8_t i);
// Convert int8_t to string with 123 format
-char* i8tostr3(const int8_t x);
+const char* i8tostr3(const int8_t x);
+
+#if HAS_PRINT_PROGRESS_PERMYRIAD
+ // Convert 16-bit unsigned permyriad value to percent: 100 / 23 / 23.4 / 3.45
+ const char* permyriadtostr4(const uint16_t xx);
+#endif
// Convert uint16_t to string with 12345 format
-char* ui16tostr5(const uint16_t x);
+const char* ui16tostr5(const uint16_t x);
// Convert uint16_t to string with 1234 format
-char* ui16tostr4(const uint16_t x);
+const char* ui16tostr4(const uint16_t x);
// Convert uint16_t to string with 123 format
-char* ui16tostr3(const uint16_t x);
+const char* ui16tostr3(const uint16_t x);
// Convert int16_t to string with 123 format
-char* i16tostr3(const int16_t x);
+const char* i16tostr3(const int16_t x);
// Convert unsigned int to lj string with 123 format
-char* i16tostr3left(const int16_t xx);
+const char* i16tostr3left(const int16_t xx);
// Convert signed int to rj string with _123, -123, _-12, or __-1 format
-char* i16tostr4sign(const int16_t x);
+const char* i16tostr4sign(const int16_t x);
// Convert unsigned float to string with 1.23 format
-char* ftostr12ns(const float &x);
+const char* ftostr12ns(const float &x);
// Convert signed float to fixed-length string with 12.34 / -2.34 or 023.45 / -23.45 format
-char* ftostr42_52(const float &x);
+const char* ftostr42_52(const float &x);
// Convert signed float to fixed-length string with 023.45 / -23.45 format
-char* ftostr52(const float &x);
+const char* ftostr52(const float &x);
// Convert float to fixed-length string with +123.4 / -123.4 format
-char* ftostr41sign(const float &x);
+const char* ftostr41sign(const float &x);
// Convert signed float to string (6 digit) with -1.234 / _0.000 / +1.234 format
-char* ftostr43sign(const float &x, char plus=' ');
+const char* ftostr43sign(const float &x, char plus=' ');
// Convert signed float to string (5 digit) with -1.2345 / _0.0000 / +1.2345 format
-char* ftostr54sign(const float &x, char plus=' ');
+const char* ftostr54sign(const float &x, char plus=' ');
// Convert unsigned float to rj string with 12345 format
-char* ftostr5rj(const float &x);
+const char* ftostr5rj(const float &x);
// Convert signed float to string with +1234.5 format
-char* ftostr51sign(const float &x);
+const char* ftostr51sign(const float &x);
// Convert signed float to space-padded string with -_23.4_ format
-char* ftostr52sp(const float &x);
+const char* ftostr52sp(const float &x);
// Convert signed float to string with +123.45 format
-char* ftostr52sign(const float &x);
+const char* ftostr52sign(const float &x);
// Convert unsigned float to string with 1234.5 format omitting trailing zeros
-char* ftostr51rj(const float &x);
+const char* ftostr51rj(const float &x);
#include "../core/macros.h"
// Convert float to rj string with 123 or -12 format
-FORCE_INLINE char* ftostr3(const float &x) { return i16tostr3(int16_t(x + (x < 0 ? -0.5f : 0.5f))); }
+FORCE_INLINE const char* ftostr3(const float &x) { return i16tostr3(int16_t(x + (x < 0 ? -0.5f : 0.5f))); }
#include "../inc/MarlinConfigPre.h"
#if ENABLED(LCD_DECIMAL_SMALL_XY)
// Convert float to rj string with 1234, _123, 12.3, _1.2, -123, _-12, or -1.2 format
- char* ftostr4sign(const float &fx);
+ const char* ftostr4sign(const float &fx);
#else
// Convert float to rj string with 1234, _123, -123, __12, _-12, ___1, or __-1 format
- FORCE_INLINE char* ftostr4sign(const float &x) { return i16tostr4sign(int16_t(x + (x < 0 ? -0.5f : 0.5f))); }
+ FORCE_INLINE const char* ftostr4sign(const float &x) { return i16tostr4sign(int16_t(x + (x < 0 ? -0.5f : 0.5f))); }
#endif
diff --git a/Marlin/src/libs/vector_3.cpp b/Marlin/src/libs/vector_3.cpp
index 0363318e534d..f50fde5ed52a 100644
--- a/Marlin/src/libs/vector_3.cpp
+++ b/Marlin/src/libs/vector_3.cpp
@@ -71,7 +71,9 @@ void vector_3::normalize() {
// Apply a rotation to the matrix
void vector_3::apply_rotation(const matrix_3x3 &matrix) {
const float _x = x, _y = y, _z = z;
- *this = matrix.vectors[0] * _x + matrix.vectors[1] * _y + matrix.vectors[2] * _z;
+ *this = { matrix.vectors[0][0] * _x + matrix.vectors[1][0] * _y + matrix.vectors[2][0] * _z,
+ matrix.vectors[0][1] * _x + matrix.vectors[1][1] * _y + matrix.vectors[2][1] * _z,
+ matrix.vectors[0][2] * _x + matrix.vectors[1][2] * _y + matrix.vectors[2][2] * _z };
}
void vector_3::debug(PGM_P const title) {
diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp
index f00eb98e4adb..3d2d78875b5a 100644
--- a/Marlin/src/module/configuration_store.cpp
+++ b/Marlin/src/module/configuration_store.cpp
@@ -398,7 +398,7 @@ void MarlinSettings::postprocess() {
fwretract.refresh_autoretract();
#endif
- #if BOTH(JUNCTION_DEVIATION, LIN_ADVANCE)
+ #if HAS_LINEAR_E_JERK
planner.recalculate_max_e_jerk();
#endif
@@ -516,7 +516,7 @@ void MarlinSettings::postprocess() {
#if HAS_CLASSIC_JERK
EEPROM_WRITE(planner.max_jerk);
- #if BOTH(JUNCTION_DEVIATION, LIN_ADVANCE)
+ #if HAS_LINEAR_E_JERK
dummy = float(DEFAULT_EJERK);
EEPROM_WRITE(dummy);
#endif
@@ -525,7 +525,7 @@ void MarlinSettings::postprocess() {
EEPROM_WRITE(planner_max_jerk);
#endif
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
EEPROM_WRITE(planner.junction_deviation_mm);
#else
dummy = 0.02f;
@@ -1316,14 +1316,14 @@ void MarlinSettings::postprocess() {
#if HAS_CLASSIC_JERK
EEPROM_READ(planner.max_jerk);
- #if BOTH(JUNCTION_DEVIATION, LIN_ADVANCE)
+ #if HAS_LINEAR_E_JERK
EEPROM_READ(dummy);
#endif
#else
for (uint8_t q = 4; q--;) EEPROM_READ(dummy);
#endif
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
EEPROM_READ(planner.junction_deviation_mm);
#else
EEPROM_READ(dummy);
@@ -2230,12 +2230,12 @@ void MarlinSettings::reset() {
#define DEFAULT_ZJERK 0
#endif
planner.max_jerk.set(DEFAULT_XJERK, DEFAULT_YJERK, DEFAULT_ZJERK);
- #if !BOTH(JUNCTION_DEVIATION, LIN_ADVANCE)
+ #if HAS_CLASSIC_E_JERK
planner.max_jerk.e = DEFAULT_EJERK;
#endif
#endif
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
planner.junction_deviation_mm = float(JUNCTION_DEVIATION_MM);
#endif
@@ -2744,12 +2744,12 @@ void MarlinSettings::reset() {
if (!forReplay) {
CONFIG_ECHO_START();
SERIAL_ECHOPGM("Advanced: B S T");
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
SERIAL_ECHOPGM(" J");
#endif
#if HAS_CLASSIC_JERK
SERIAL_ECHOPGM(" X Y Z");
- #if !BOTH(JUNCTION_DEVIATION, LIN_ADVANCE)
+ #if HAS_CLASSIC_E_JERK
SERIAL_ECHOPGM(" E");
#endif
#endif
@@ -2760,14 +2760,14 @@ void MarlinSettings::reset() {
" M205 B", LINEAR_UNIT(planner.settings.min_segment_time_us)
, " S", LINEAR_UNIT(planner.settings.min_feedrate_mm_s)
, " T", LINEAR_UNIT(planner.settings.min_travel_feedrate_mm_s)
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
, " J", LINEAR_UNIT(planner.junction_deviation_mm)
#endif
#if HAS_CLASSIC_JERK
, " X", LINEAR_UNIT(planner.max_jerk.x)
, " Y", LINEAR_UNIT(planner.max_jerk.y)
, " Z", LINEAR_UNIT(planner.max_jerk.z)
- #if !BOTH(JUNCTION_DEVIATION, LIN_ADVANCE)
+ #if HAS_CLASSIC_E_JERK
, " E", LINEAR_UNIT(planner.max_jerk.e)
#endif
#endif
@@ -2964,38 +2964,23 @@ void MarlinSettings::reset() {
#if HAS_PID_HEATING
CONFIG_ECHO_HEADING("PID settings:");
+
#if ENABLED(PIDTEMP)
- #if HOTENDS > 1
- if (forReplay) {
- HOTEND_LOOP() {
- CONFIG_ECHO_START();
- SERIAL_ECHOPAIR(
- " M301 E", e
- , " P", PID_PARAM(Kp, e)
- , " I", unscalePID_i(PID_PARAM(Ki, e))
- , " D", unscalePID_d(PID_PARAM(Kd, e))
- );
- #if ENABLED(PID_EXTRUSION_SCALING)
- SERIAL_ECHOPAIR(" C", PID_PARAM(Kc, e));
- if (e == 0) SERIAL_ECHOPAIR(" L", thermalManager.lpq_len);
- #endif
- SERIAL_EOL();
- }
- }
- else
- #endif // HOTENDS > 1
- // !forReplay || HOTENDS == 1
- {
+ HOTEND_LOOP() {
CONFIG_ECHO_START();
- SERIAL_ECHOLNPAIR(
- " M301 P", PID_PARAM(Kp, 0) // for compatibility with hosts, only echo values for E0
- , " I", unscalePID_i(PID_PARAM(Ki, 0))
- , " D", unscalePID_d(PID_PARAM(Kd, 0))
- #if ENABLED(PID_EXTRUSION_SCALING)
- , " C", PID_PARAM(Kc, 0)
- , " L", thermalManager.lpq_len
+ SERIAL_ECHOPAIR(" M301"
+ #if HOTENDS > 1 && ENABLED(PID_PARAMS_PER_HOTEND)
+ " E", e,
#endif
+ " P", PID_PARAM(Kp, e)
+ , " I", unscalePID_i(PID_PARAM(Ki, e))
+ , " D", unscalePID_d(PID_PARAM(Kd, e))
);
+ #if ENABLED(PID_EXTRUSION_SCALING)
+ SERIAL_ECHOPAIR(" C", PID_PARAM(Kc, e));
+ if (e == 0) SERIAL_ECHOPAIR(" L", thermalManager.lpq_len);
+ #endif
+ SERIAL_EOL();
}
#endif // PIDTEMP
diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp
index 6970a051b305..cbe274a6921a 100644
--- a/Marlin/src/module/endstops.cpp
+++ b/Marlin/src/module/endstops.cpp
@@ -243,7 +243,7 @@ void Endstops::init() {
#endif
#endif
- #if USES_Z_MIN_PROBE_ENDSTOP
+ #if HAS_CUSTOM_PROBE_PIN
#if ENABLED(ENDSTOPPULLUP_ZMIN_PROBE)
SET_INPUT_PULLUP(Z_MIN_PROBE_PIN);
#elif ENABLED(ENDSTOPPULLDOWN_ZMIN_PROBE)
@@ -302,7 +302,7 @@ void Endstops::not_homing() {
// If the last move failed to trigger an endstop, call kill
void Endstops::validate_homing_move() {
if (trigger_state()) hit_on_purpose();
- else kill(PSTR(MSG_ERR_HOMING_FAILED));
+ else kill(GET_TEXT(MSG_LCD_HOMING_FAILED));
}
#endif
@@ -340,7 +340,9 @@ void Endstops::resync() {
void Endstops::event_handler() {
static uint8_t prev_hit_state; // = 0
- if (hit_state && hit_state != prev_hit_state) {
+ if (hit_state == prev_hit_state) return;
+ prev_hit_state = hit_state;
+ if (hit_state) {
#if HAS_SPI_LCD
char chrX = ' ', chrY = ' ', chrZ = ' ', chrP = ' ';
#define _SET_STOP_CHAR(A,C) (chr## A = C)
@@ -366,14 +368,14 @@ void Endstops::event_handler() {
ENDSTOP_HIT_TEST_Y();
ENDSTOP_HIT_TEST_Z();
- #if USES_Z_MIN_PROBE_ENDSTOP
+ #if HAS_CUSTOM_PROBE_PIN
#define P_AXIS Z_AXIS
if (TEST(hit_state, Z_MIN_PROBE)) _ENDSTOP_HIT_ECHO(P, 'P');
#endif
SERIAL_EOL();
#if HAS_SPI_LCD
- ui.status_printf_P(0, PSTR(S_FMT " %c %c %c %c"), PSTR(MSG_LCD_ENDSTOPS), chrX, chrY, chrZ, chrP);
+ ui.status_printf_P(0, PSTR(S_FMT " %c %c %c %c"), GET_TEXT(MSG_LCD_ENDSTOPS), chrX, chrY, chrZ, chrP);
#endif
#if BOTH(SD_ABORT_ON_ENDSTOP_HIT, SDSUPPORT)
@@ -385,7 +387,6 @@ void Endstops::event_handler() {
}
#endif
}
- prev_hit_state = hit_state;
}
static void print_es_state(const bool is_hit, PGM_P const label=nullptr) {
@@ -395,7 +396,7 @@ static void print_es_state(const bool is_hit, PGM_P const label=nullptr) {
SERIAL_EOL();
}
-void _O2 Endstops::M119() {
+void _O2 Endstops::report_states() {
#if ENABLED(BLTOUCH)
bltouch._set_SW_mode();
#endif
@@ -443,7 +444,7 @@ void _O2 Endstops::M119() {
#if HAS_Z3_MAX
ES_REPORT(Z3_MAX);
#endif
- #if USES_Z_MIN_PROBE_ENDSTOP
+ #if HAS_CUSTOM_PROBE_PIN
print_es_state(READ(Z_MIN_PROBE_PIN) != Z_MIN_PROBE_ENDSTOP_INVERTING, PSTR(MSG_Z_PROBE));
#endif
#if HAS_FILAMENT_SENSOR
@@ -483,7 +484,7 @@ void _O2 Endstops::M119() {
joystick.report();
#endif
-} // Endstops::M119
+} // Endstops::report_states
// The following routines are called from an ISR context. It could be the temperature ISR, the
// endstop ISR or the Stepper ISR.
@@ -537,61 +538,53 @@ void Endstops::update() {
/**
* Check and update endstops
*/
- #if HAS_X_MIN
+ #if HAS_X_MIN && !X_SPI_SENSORLESS
+ UPDATE_ENDSTOP_BIT(X, MIN);
#if ENABLED(X_DUAL_ENDSTOPS)
- UPDATE_ENDSTOP_BIT(X, MIN);
#if HAS_X2_MIN
UPDATE_ENDSTOP_BIT(X2, MIN);
#else
COPY_LIVE_STATE(X_MIN, X2_MIN);
#endif
- #else
- UPDATE_ENDSTOP_BIT(X, MIN);
#endif
#endif
- #if HAS_X_MAX
+ #if HAS_X_MAX && !X_SPI_SENSORLESS
+ UPDATE_ENDSTOP_BIT(X, MAX);
#if ENABLED(X_DUAL_ENDSTOPS)
- UPDATE_ENDSTOP_BIT(X, MAX);
#if HAS_X2_MAX
UPDATE_ENDSTOP_BIT(X2, MAX);
#else
COPY_LIVE_STATE(X_MAX, X2_MAX);
#endif
- #else
- UPDATE_ENDSTOP_BIT(X, MAX);
#endif
#endif
- #if HAS_Y_MIN
+ #if HAS_Y_MIN && !Y_SPI_SENSORLESS
+ UPDATE_ENDSTOP_BIT(Y, MIN);
#if ENABLED(Y_DUAL_ENDSTOPS)
- UPDATE_ENDSTOP_BIT(Y, MIN);
#if HAS_Y2_MIN
UPDATE_ENDSTOP_BIT(Y2, MIN);
#else
COPY_LIVE_STATE(Y_MIN, Y2_MIN);
#endif
- #else
- UPDATE_ENDSTOP_BIT(Y, MIN);
#endif
#endif
- #if HAS_Y_MAX
+ #if HAS_Y_MAX && !Y_SPI_SENSORLESS
+ UPDATE_ENDSTOP_BIT(Y, MAX);
#if ENABLED(Y_DUAL_ENDSTOPS)
- UPDATE_ENDSTOP_BIT(Y, MAX);
#if HAS_Y2_MAX
UPDATE_ENDSTOP_BIT(Y2, MAX);
#else
COPY_LIVE_STATE(Y_MAX, Y2_MAX);
#endif
- #else
- UPDATE_ENDSTOP_BIT(Y, MAX);
#endif
#endif
- #if HAS_Z_MIN
+ #if HAS_Z_MIN && !Z_SPI_SENSORLESS
+ UPDATE_ENDSTOP_BIT(Z, MIN);
#if Z_MULTI_ENDSTOPS
- UPDATE_ENDSTOP_BIT(Z, MIN);
#if HAS_Z2_MIN
UPDATE_ENDSTOP_BIT(Z2, MIN);
#else
@@ -604,19 +597,15 @@ void Endstops::update() {
COPY_LIVE_STATE(Z_MIN, Z3_MIN);
#endif
#endif
- #elif ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
- UPDATE_ENDSTOP_BIT(Z, MIN);
- #elif Z_HOME_DIR < 0
- UPDATE_ENDSTOP_BIT(Z, MIN);
#endif
#endif
// When closing the gap check the enabled probe
- #if USES_Z_MIN_PROBE_ENDSTOP
+ #if HAS_CUSTOM_PROBE_PIN
UPDATE_ENDSTOP_BIT(Z, MIN_PROBE);
#endif
- #if HAS_Z_MAX
+ #if HAS_Z_MAX && !Z_SPI_SENSORLESS
// Check both Z dual endstops
#if Z_MULTI_ENDSTOPS
UPDATE_ENDSTOP_BIT(Z, MAX);
@@ -632,7 +621,7 @@ void Endstops::update() {
COPY_LIVE_STATE(Z_MAX, Z3_MAX);
#endif
#endif
- #elif !USES_Z_MIN_PROBE_ENDSTOP || Z_MAX_PIN != Z_MIN_PROBE_PIN
+ #elif !HAS_CUSTOM_PROBE_PIN || Z_MAX_PIN != Z_MIN_PROBE_PIN
// If this pin isn't the bed probe it's the Z endstop
UPDATE_ENDSTOP_BIT(Z, MAX);
#endif
@@ -765,7 +754,7 @@ void Endstops::update() {
#else
#if ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
if (z_probe_enabled) PROCESS_ENDSTOP(Z, MIN);
- #elif USES_Z_MIN_PROBE_ENDSTOP
+ #elif HAS_CUSTOM_PROBE_PIN
if (!z_probe_enabled) PROCESS_ENDSTOP(Z, MIN);
#else
PROCESS_ENDSTOP(Z, MIN);
@@ -774,7 +763,7 @@ void Endstops::update() {
#endif
// When closing the gap check the enabled probe
- #if USES_Z_MIN_PROBE_ENDSTOP
+ #if HAS_CUSTOM_PROBE_PIN
if (z_probe_enabled) PROCESS_ENDSTOP(Z, MIN_PROBE);
#endif
}
@@ -784,7 +773,7 @@ void Endstops::update() {
PROCESS_TRIPLE_ENDSTOP(Z, Z2, Z3, MAX);
#elif ENABLED(Z_DUAL_ENDSTOPS)
PROCESS_DUAL_ENDSTOP(Z, Z2, MAX);
- #elif !USES_Z_MIN_PROBE_ENDSTOP || Z_MAX_PIN != Z_MIN_PROBE_PIN
+ #elif !HAS_CUSTOM_PROBE_PIN || Z_MAX_PIN != Z_MIN_PROBE_PIN
// If this pin is not hijacked for the bed probe
// then it belongs to the Z endstop
PROCESS_ENDSTOP(Z, MAX);
diff --git a/Marlin/src/module/endstops.h b/Marlin/src/module/endstops.h
index 43893e3b8ad2..151c428edca9 100644
--- a/Marlin/src/module/endstops.h
+++ b/Marlin/src/module/endstops.h
@@ -124,9 +124,9 @@ class Endstops {
static void event_handler();
/**
- * Report endstop positions in response to M119
+ * Report endstop states in response to M119
*/
- static void M119();
+ static void report_states();
// Enable / disable endstop checking globally
static void enable_globally(const bool onoff=true);
diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp
index 95b99d8d3bdf..484d6a077a1d 100644
--- a/Marlin/src/module/motion.cpp
+++ b/Marlin/src/module/motion.cpp
@@ -114,6 +114,10 @@ xyze_pos_t destination; // {0}
uint8_t active_extruder; // = 0
#endif
+#if ENABLED(LCD_SHOW_E_TOTAL)
+ float e_move_accumulator; // = 0
+#endif
+
// Extruder offsets
#if HAS_HOTEND_OFFSET
xyz_pos_t hotend_offset[HOTENDS]; // Initialized by settings.load()
@@ -344,8 +348,8 @@ void _internal_move_to_destination(const feedRate_t &fr_mm_s/*=0.0f*/
void do_blocking_move_to(const float rx, const float ry, const float rz, const feedRate_t &fr_mm_s/*=0.0*/) {
if (DEBUGGING(LEVELING)) DEBUG_XYZ(">>> do_blocking_move_to", rx, ry, rz);
- const feedRate_t z_feedrate = fr_mm_s ? fr_mm_s : homing_feedrate(Z_AXIS),
- xy_feedrate = fr_mm_s ? fr_mm_s : feedRate_t(XY_PROBE_FEEDRATE_MM_S);
+ const feedRate_t z_feedrate = fr_mm_s ?: homing_feedrate(Z_AXIS),
+ xy_feedrate = fr_mm_s ?: feedRate_t(XY_PROBE_FEEDRATE_MM_S);
#if ENABLED(DELTA)
@@ -430,6 +434,17 @@ void do_blocking_move_to(const float rx, const float ry, const float rz, const f
planner.synchronize();
}
+
+void do_blocking_move_to(const xy_pos_t &raw, const feedRate_t &fr_mm_s/*=0.0f*/) {
+ do_blocking_move_to(raw.x, raw.y, current_position.z, fr_mm_s);
+}
+void do_blocking_move_to(const xyz_pos_t &raw, const feedRate_t &fr_mm_s/*=0.0f*/) {
+ do_blocking_move_to(raw.x, raw.y, raw.z, fr_mm_s);
+}
+void do_blocking_move_to(const xyze_pos_t &raw, const feedRate_t &fr_mm_s/*=0.0f*/) {
+ do_blocking_move_to(raw.x, raw.y, raw.z, fr_mm_s);
+}
+
void do_blocking_move_to_x(const float &rx, const feedRate_t &fr_mm_s/*=0.0*/) {
do_blocking_move_to(rx, current_position.y, current_position.z, fr_mm_s);
}
@@ -437,11 +452,19 @@ void do_blocking_move_to_y(const float &ry, const feedRate_t &fr_mm_s/*=0.0*/) {
do_blocking_move_to(current_position.x, ry, current_position.z, fr_mm_s);
}
void do_blocking_move_to_z(const float &rz, const feedRate_t &fr_mm_s/*=0.0*/) {
- do_blocking_move_to(current_position.x, current_position.y, rz, fr_mm_s);
+ do_blocking_move_to_xy_z(current_position, rz, fr_mm_s);
}
+
void do_blocking_move_to_xy(const float &rx, const float &ry, const feedRate_t &fr_mm_s/*=0.0*/) {
do_blocking_move_to(rx, ry, current_position.z, fr_mm_s);
}
+void do_blocking_move_to_xy(const xy_pos_t &raw, const feedRate_t &fr_mm_s/*=0.0f*/) {
+ do_blocking_move_to_xy(raw.x, raw.y, fr_mm_s);
+}
+
+void do_blocking_move_to_xy_z(const xy_pos_t &raw, const float &z, const feedRate_t &fr_mm_s/*=0.0f*/) {
+ do_blocking_move_to(raw.x, raw.y, z, fr_mm_s);
+}
//
// Prepare to do endstop or probe moves with custom feedrates.
@@ -967,32 +990,37 @@ void prepare_move_to_destination() {
#if EITHER(PREVENT_COLD_EXTRUSION, PREVENT_LENGTHY_EXTRUDE)
- if (!DEBUGGING(DRYRUN)) {
- if (destination.e != current_position.e) {
- #if ENABLED(PREVENT_COLD_EXTRUSION)
- if (thermalManager.tooColdToExtrude(active_extruder)) {
- current_position.e = destination.e; // Behave as if the move really took place, but ignore E part
- SERIAL_ECHO_MSG(MSG_ERR_COLD_EXTRUDE_STOP);
- }
- #endif // PREVENT_COLD_EXTRUSION
- #if ENABLED(PREVENT_LENGTHY_EXTRUDE)
- const float e_delta = ABS(destination.e - current_position.e) * planner.e_factor[active_extruder];
- if (e_delta > (EXTRUDE_MAXLENGTH)) {
- #if ENABLED(MIXING_EXTRUDER)
- bool ignore_e = false;
- float collector[MIXING_STEPPERS];
- mixer.refresh_collector(1.0, mixer.get_current_vtool(), collector);
- MIXER_STEPPER_LOOP(e)
- if (e_delta * collector[e] > (EXTRUDE_MAXLENGTH)) { ignore_e = true; break; }
- #else
- constexpr bool ignore_e = true;
- #endif
- if (ignore_e) {
- current_position.e = destination.e; // Behave as if the move really took place, but ignore E part
- SERIAL_ECHO_MSG(MSG_ERR_LONG_EXTRUDE_STOP);
+ if (!DEBUGGING(DRYRUN) && destination.e != current_position.e) {
+ bool ignore_e = false;
+
+ #if ENABLED(PREVENT_COLD_EXTRUSION)
+ ignore_e = thermalManager.tooColdToExtrude(active_extruder);
+ if (ignore_e) SERIAL_ECHO_MSG(MSG_ERR_COLD_EXTRUDE_STOP);
+ #endif
+
+ #if ENABLED(PREVENT_LENGTHY_EXTRUDE)
+ const float e_delta = ABS(destination.e - current_position.e) * planner.e_factor[active_extruder];
+ if (e_delta > (EXTRUDE_MAXLENGTH)) {
+ #if ENABLED(MIXING_EXTRUDER)
+ float collector[MIXING_STEPPERS];
+ mixer.refresh_collector(1.0, mixer.get_current_vtool(), collector);
+ MIXER_STEPPER_LOOP(e) {
+ if (e_delta * collector[e] > (EXTRUDE_MAXLENGTH)) {
+ ignore_e = true;
+ SERIAL_ECHO_MSG(MSG_ERR_LONG_EXTRUDE_STOP);
+ break;
+ }
}
- }
- #endif // PREVENT_LENGTHY_EXTRUDE
+ #else
+ ignore_e = true;
+ SERIAL_ECHO_MSG(MSG_ERR_LONG_EXTRUDE_STOP);
+ #endif
+ }
+ #endif
+
+ if (ignore_e) {
+ current_position.e = destination.e; // Behave as if the E move really took place
+ planner.set_e_position_mm(destination.e); // Prevent the planner from complaining too
}
}
@@ -1034,8 +1062,8 @@ uint8_t axes_need_homing(uint8_t axis_bits/*=0x07*/) {
bool axis_unhomed_error(uint8_t axis_bits/*=0x07*/) {
if ((axis_bits = axes_need_homing(axis_bits))) {
- static const char home_first[] PROGMEM = MSG_HOME_FIRST;
- char msg[sizeof(home_first)];
+ PGM_P home_first = GET_TEXT(MSG_HOME_FIRST);
+ char msg[strlen_P(home_first)+1];
sprintf_P(msg, home_first,
TEST(axis_bits, X_AXIS) ? "X" : "",
TEST(axis_bits, Y_AXIS) ? "Y" : "",
@@ -1255,7 +1283,7 @@ void do_homing_move(const AxisEnum axis, const float distance, const feedRate_t
#endif
}
- const feedRate_t real_fr_mm_s = fr_mm_s ? fr_mm_s : homing_feedrate(axis);
+ const feedRate_t real_fr_mm_s = fr_mm_s ?: homing_feedrate(axis);
#if IS_SCARA
// Tell the planner the axis is at 0
current_position[axis] = 0;
@@ -1268,13 +1296,13 @@ void do_homing_move(const AxisEnum axis, const float distance, const feedRate_t
planner.set_machine_position_mm(target);
target[axis] = distance;
- #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION)
+ #if IS_KINEMATIC && DISABLED(CLASSIC_JERK)
const xyze_float_t delta_mm_cart{0};
#endif
// Set delta/cartesian axes directly
planner.buffer_segment(target
- #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION)
+ #if IS_KINEMATIC && DISABLED(CLASSIC_JERK)
, delta_mm_cart
#endif
, real_fr_mm_s, active_extruder
@@ -1370,6 +1398,11 @@ void set_axis_is_at_home(const AxisEnum axis) {
babystep.reset_total(axis);
#endif
+ #if HAS_POSITION_SHIFT
+ position_shift[axis] = 0;
+ update_workspace_offset(axis);
+ #endif
+
if (DEBUGGING(LEVELING)) {
#if HAS_HOME_OFFSET
DEBUG_ECHOLNPAIR("> home_offset[", axis_codes[axis], "] = ", home_offset[axis]);
diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h
index ba37bebd4690..971e85e3b61d 100644
--- a/Marlin/src/module/motion.h
+++ b/Marlin/src/module/motion.h
@@ -107,13 +107,16 @@ extern int16_t feedrate_percentage;
constexpr uint8_t active_extruder = 0;
#endif
+#if ENABLED(LCD_SHOW_E_TOTAL)
+ extern float e_move_accumulator;
+#endif
+
FORCE_INLINE float pgm_read_any(const float *p) { return pgm_read_float(p); }
FORCE_INLINE signed char pgm_read_any(const signed char *p) { return pgm_read_byte(p); }
#define XYZ_DEFS(T, NAME, OPT) \
extern const XYZval NAME##_P; \
- FORCE_INLINE T NAME(AxisEnum axis) { return pgm_read_any(&NAME##_P[axis]); } \
- typedef void __void_##OPT##__ /* for semicolon */
+ FORCE_INLINE T NAME(AxisEnum axis) { return pgm_read_any(&NAME##_P[axis]); }
XYZ_DEFS(float, base_min_pos, MIN_POS);
XYZ_DEFS(float, base_max_pos, MAX_POS);
@@ -200,33 +203,23 @@ inline void prepare_internal_move_to_destination(const feedRate_t &fr_mm_s=0.0f)
* Blocking movement and shorthand functions
*/
void do_blocking_move_to(const float rx, const float ry, const float rz, const feedRate_t &fr_mm_s=0.0f);
-
-FORCE_INLINE void do_blocking_move_to(const xy_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) {
- do_blocking_move_to(raw.x, raw.y, current_position.z, fr_mm_s);
-}
-FORCE_INLINE void do_blocking_move_to(const xyz_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) {
- do_blocking_move_to(raw.x, raw.y, raw.z, fr_mm_s);
-}
-FORCE_INLINE void do_blocking_move_to(const xyze_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) {
- do_blocking_move_to(raw.x, raw.y, raw.z, fr_mm_s);
-}
-
-void do_blocking_move_to_xy(const float &rx, const float &ry, const feedRate_t &fr_mm_s=0.0f);
-
-FORCE_INLINE void do_blocking_move_to_xy(const xy_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) {
- do_blocking_move_to_xy(raw.x, raw.y, fr_mm_s);
-}
-FORCE_INLINE void do_blocking_move_to_xy(const xyz_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) {
- do_blocking_move_to_xy(raw.x, raw.y, fr_mm_s);
-}
-FORCE_INLINE void do_blocking_move_to_xy(const xyze_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) {
- do_blocking_move_to_xy(raw.x, raw.y, fr_mm_s);
-}
+void do_blocking_move_to(const xy_pos_t &raw, const feedRate_t &fr_mm_s=0.0f);
+void do_blocking_move_to(const xyz_pos_t &raw, const feedRate_t &fr_mm_s=0.0f);
+void do_blocking_move_to(const xyze_pos_t &raw, const feedRate_t &fr_mm_s=0.0f);
void do_blocking_move_to_x(const float &rx, const feedRate_t &fr_mm_s=0.0f);
void do_blocking_move_to_y(const float &ry, const feedRate_t &fr_mm_s=0.0f);
void do_blocking_move_to_z(const float &rz, const feedRate_t &fr_mm_s=0.0f);
+void do_blocking_move_to_xy(const float &rx, const float &ry, const feedRate_t &fr_mm_s=0.0f);
+void do_blocking_move_to_xy(const xy_pos_t &raw, const feedRate_t &fr_mm_s=0.0f);
+FORCE_INLINE void do_blocking_move_to_xy(const xyz_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) { do_blocking_move_to_xy(xy_pos_t(raw), fr_mm_s); }
+FORCE_INLINE void do_blocking_move_to_xy(const xyze_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) { do_blocking_move_to_xy(xy_pos_t(raw), fr_mm_s); }
+
+void do_blocking_move_to_xy_z(const xy_pos_t &raw, const float &z, const feedRate_t &fr_mm_s=0.0f);
+FORCE_INLINE void do_blocking_move_to_xy_z(const xyz_pos_t &raw, const float &z, const feedRate_t &fr_mm_s=0.0f) { do_blocking_move_to_xy_z(xy_pos_t(raw), z, fr_mm_s); }
+FORCE_INLINE void do_blocking_move_to_xy_z(const xyze_pos_t &raw, const float &z, const feedRate_t &fr_mm_s=0.0f) { do_blocking_move_to_xy_z(xy_pos_t(raw), z, fr_mm_s); }
+
void remember_feedrate_and_scaling();
void remember_feedrate_scaling_off();
void restore_feedrate_and_scaling();
diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp
index 8d488e1f9857..14319826ef33 100644
--- a/Marlin/src/module/planner.cpp
+++ b/Marlin/src/module/planner.cpp
@@ -96,10 +96,18 @@
#include "../feature/backlash.h"
#endif
+#if ENABLED(CANCEL_OBJECTS)
+ #include "../feature/cancel_object.h"
+#endif
+
#if ENABLED(POWER_LOSS_RECOVERY)
#include "../feature/power_loss_recovery.h"
#endif
+#if HAS_CUTTER
+ #include "../feature/spindle_laser.h"
+#endif
+
// Delay for delivery of first block to the stepper ISR, if the queue contains 2 or
// fewer movements. The delay is measured in milliseconds, and must be less than 250ms
#define BLOCK_DELAY_FOR_1ST_MOVE 100
@@ -125,7 +133,7 @@ uint32_t Planner::max_acceleration_steps_per_s2[XYZE_N]; // (steps/s^2) Derived
float Planner::steps_to_mm[XYZE_N]; // (mm) Millimeters per step
-#if ENABLED(JUNCTION_DEVIATION)
+#if DISABLED(CLASSIC_JERK)
float Planner::junction_deviation_mm; // (mm) M205 J
#if ENABLED(LIN_ADVANCE)
#if ENABLED(DISTINCT_E_FACTORS)
@@ -136,7 +144,7 @@ float Planner::steps_to_mm[XYZE_N]; // (mm) Millimeters per step
#endif
#endif
#if HAS_CLASSIC_JERK
- #if BOTH(JUNCTION_DEVIATION, LIN_ADVANCE)
+ #if HAS_LINEAR_E_JERK
xyz_pos_t Planner::max_jerk; // (mm/s^2) M205 XYZ - The largest speed change requiring no acceleration.
#else
xyze_pos_t Planner::max_jerk; // (mm/s^2) M205 XYZE - The largest speed change requiring no acceleration.
@@ -1220,6 +1228,11 @@ void Planner::check_axes_activity() {
#endif
}
else {
+
+ #if HAS_CUTTER
+ cutter.refresh();
+ #endif
+
#if FAN_COUNT > 0
FANS_LOOP(i)
tail_fan_speed[i] = thermalManager.scaledFanSpeed(i);
@@ -1235,6 +1248,9 @@ void Planner::check_axes_activity() {
#endif
}
+ //
+ // Disable inactive axes
+ //
#if ENABLED(DISABLE_X)
if (!axis_active.x) disable_X();
#endif
@@ -1248,6 +1264,9 @@ void Planner::check_axes_activity() {
if (!axis_active.e) disable_e_steppers();
#endif
+ //
+ // Update Fan speeds
+ //
#if FAN_COUNT > 0
#if FAN_KICKSTART_TIME > 0
@@ -1350,6 +1369,15 @@ void Planner::check_axes_activity() {
#endif
#if HAS_LEVELING
+
+ constexpr xy_pos_t level_fulcrum = {
+ #if ENABLED(Z_SAFE_HOMING)
+ Z_SAFE_HOMING_X_POINT, Z_SAFE_HOMING_Y_POINT
+ #else
+ X_HOME_POS, Y_HOME_POS
+ #endif
+ };
+
/**
* rx, ry, rz - Cartesian positions in mm
* Leveled XYZ on completion
@@ -1555,7 +1583,7 @@ bool Planner::_buffer_steps(const xyze_long_t &target
#if HAS_POSITION_FLOAT
, const xyze_pos_t &target_float
#endif
- #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION)
+ #if IS_KINEMATIC && DISABLED(CLASSIC_JERK)
, const xyze_float_t &delta_mm_cart
#endif
, feedRate_t fr_mm_s, const uint8_t extruder, const float &millimeters
@@ -1573,7 +1601,7 @@ bool Planner::_buffer_steps(const xyze_long_t &target
#if HAS_POSITION_FLOAT
, target_float
#endif
- #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION)
+ #if IS_KINEMATIC && DISABLED(CLASSIC_JERK)
, delta_mm_cart
#endif
, fr_mm_s, extruder, millimeters
@@ -1619,7 +1647,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
#if HAS_POSITION_FLOAT
, const xyze_pos_t &target_float
#endif
- #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION)
+ #if IS_KINEMATIC && DISABLED(CLASSIC_JERK)
, const xyze_float_t &delta_mm_cart
#endif
, feedRate_t fr_mm_s, const uint8_t extruder, const float &millimeters/*=0.0*/
@@ -1782,6 +1810,10 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
delta_mm.e = esteps_float * steps_to_mm[E_AXIS_N(extruder)];
#endif
+ #if ENABLED(LCD_SHOW_E_TOTAL)
+ e_move_accumulator += delta_mm.e;
+ #endif
+
if (block->steps.a < MIN_STEPS_PER_SEGMENT && block->steps.b < MIN_STEPS_PER_SEGMENT && block->steps.c < MIN_STEPS_PER_SEGMENT) {
block->millimeters = (0
#if EXTRUDERS
@@ -1832,6 +1864,10 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
MIXER_POPULATE_BLOCK();
#endif
+ #if HAS_CUTTER
+ block->cutter_power = cutter.power;
+ #endif
+
#if FAN_COUNT > 0
FANS_LOOP(i) block->fan_speed[i] = thermalManager.fan_speed[i];
#endif
@@ -2155,7 +2191,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
#if ENABLED(LIN_ADVANCE)
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
#if ENABLED(DISTINCT_E_FACTORS)
#define MAX_E_JERK max_e_jerk[extruder]
#else
@@ -2243,7 +2279,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
float vmax_junction_sqr; // Initial limit on the segment entry velocity (mm/s)^2
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
/**
* Compute maximum allowable entry speed at junction by centripetal acceleration approximation.
* Let a circle be tangent to both previous and current path line segments, where the junction
@@ -2282,7 +2318,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
static xyze_float_t prev_unit_vec;
xyze_float_t unit_vec =
- #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION)
+ #if IS_KINEMATIC && DISABLED(CLASSIC_JERK)
delta_mm_cart
#else
{ delta_mm.x, delta_mm.y, delta_mm.z, delta_mm.e }
@@ -2290,7 +2326,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
;
unit_vec *= inverse_millimeters;
- #if IS_CORE && ENABLED(JUNCTION_DEVIATION)
+ #if IS_CORE && DISABLED(CLASSIC_JERK)
/**
* On CoreXY the length of the vector [A,B] is SQRT(2) times the length of the head movement vector [X,Y].
* So taking Z and E into account, we cannot scale to a unit vector with "inverse_millimeters".
@@ -2345,13 +2381,21 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
#endif
+ #ifdef USE_CACHED_SQRT
+ #define CACHED_SQRT(N, V) \
+ static float saved_V, N; \
+ if (V != saved_V) { N = SQRT(V); saved_V = V; }
+ #else
+ #define CACHED_SQRT(N, V) const float N = SQRT(V)
+ #endif
+
#if HAS_CLASSIC_JERK
/**
* Adapted from Průša MKS firmware
* https://github.com/prusa3d/Prusa-Firmware
*/
- const float nominal_speed = SQRT(block->nominal_speed_sqr);
+ CACHED_SQRT(nominal_speed, block->nominal_speed_sqr);
// Exit speed limited by a jerk to full halt of a previous last segment
static float previous_safe_speed;
@@ -2360,7 +2404,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
float safe_speed = nominal_speed;
uint8_t limited = 0;
- #if BOTH(JUNCTION_DEVIATION, LIN_ADVANCE)
+ #if HAS_LINEAR_E_JERK
LOOP_XYZ(i)
#else
LOOP_XYZE(i)
@@ -2392,12 +2436,13 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
// The junction velocity will be shared between successive segments. Limit the junction velocity to their minimum.
// Pick the smaller of the nominal speeds. Higher speed shall not be achieved at the junction during coasting.
- const float previous_nominal_speed = SQRT(previous_nominal_speed_sqr);
+ CACHED_SQRT(previous_nominal_speed, previous_nominal_speed_sqr);
+
vmax_junction = _MIN(nominal_speed, previous_nominal_speed);
// Now limit the jerk in all axes.
const float smaller_speed_factor = vmax_junction / previous_nominal_speed;
- #if BOTH(JUNCTION_DEVIATION, LIN_ADVANCE)
+ #if HAS_LINEAR_E_JERK
LOOP_XYZ(axis)
#else
LOOP_XYZE(axis)
@@ -2435,7 +2480,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
previous_safe_speed = safe_speed;
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
vmax_junction_sqr = _MIN(vmax_junction_sqr, sq(vmax_junction));
#else
vmax_junction_sqr = sq(vmax_junction);
@@ -2529,7 +2574,7 @@ void Planner::buffer_sync_block() {
* millimeters - the length of the movement, if known
*/
bool Planner::buffer_segment(const float &a, const float &b, const float &c, const float &e
- #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION)
+ #if IS_KINEMATIC && DISABLED(CLASSIC_JERK)
, const xyze_float_t &delta_mm_cart
#endif
, const feedRate_t &fr_mm_s, const uint8_t extruder, const float &millimeters/*=0.0*/
@@ -2560,7 +2605,11 @@ bool Planner::buffer_segment(const float &a, const float &b, const float &c, con
#endif
// DRYRUN prevents E moves from taking place
- if (DEBUGGING(DRYRUN)) {
+ if (DEBUGGING(DRYRUN)
+ #if ENABLED(CANCEL_OBJECTS)
+ || cancelable.skipping
+ #endif
+ ) {
position.e = target.e;
#if HAS_POSITION_FLOAT
position_float.e = e;
@@ -2601,7 +2650,7 @@ bool Planner::buffer_segment(const float &a, const float &b, const float &c, con
#if HAS_POSITION_FLOAT
, target_float
#endif
- #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION)
+ #if IS_KINEMATIC && DISABLED(CLASSIC_JERK)
, delta_mm_cart
#endif
, fr_mm_s, extruder, millimeters
@@ -2635,7 +2684,7 @@ bool Planner::buffer_line(const float &rx, const float &ry, const float &rz, con
#if IS_KINEMATIC
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
const xyze_pos_t delta_mm_cart = {
rx - position_cart.x, ry - position_cart.y,
rz - position_cart.z, e - position_cart.e
@@ -2653,13 +2702,13 @@ bool Planner::buffer_line(const float &rx, const float &ry, const float &rz, con
#if ENABLED(SCARA_FEEDRATE_SCALING)
// For SCARA scale the feed rate from mm/s to degrees/s
// i.e., Complete the angular vector in the given time.
- const float duration_recip = inv_duration ? inv_duration : fr_mm_s / mm;
+ const float duration_recip = inv_duration ?: fr_mm_s / mm;
const feedRate_t feedrate = HYPOT(delta.a - position_float.a, delta.b - position_float.b) * duration_recip;
#else
const feedRate_t feedrate = fr_mm_s;
#endif
if (buffer_segment(delta.a, delta.b, delta.c, machine.e
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
, delta_mm_cart
#endif
, feedrate, extruder, mm
@@ -2760,7 +2809,7 @@ void Planner::reset_acceleration_rates() {
if (AXIS_CONDITION) NOLESS(highest_rate, max_acceleration_steps_per_s2[i]);
}
cutoff_long = 4294967295UL / highest_rate; // 0xFFFFFFFFUL
- #if BOTH(JUNCTION_DEVIATION, LIN_ADVANCE)
+ #if HAS_LINEAR_E_JERK
recalculate_max_e_jerk();
#endif
}
@@ -2772,6 +2821,68 @@ void Planner::refresh_positioning() {
reset_acceleration_rates();
}
+inline void limit_and_warn(float &val, const uint8_t axis, PGM_P const setting_name, const xyze_float_t &max_limit) {
+ const uint8_t lim_axis = axis > E_AXIS ? E_AXIS : axis;
+ const float before = val;
+ LIMIT(val, 1, max_limit[lim_axis]);
+ if (before != val) {
+ SERIAL_CHAR(axis_codes[lim_axis]);
+ SERIAL_ECHOPGM(" Max ");
+ serialprintPGM(setting_name);
+ SERIAL_ECHOLNPAIR(" limited to ", val);
+ }
+}
+
+void Planner::set_max_acceleration(const uint8_t axis, float targetValue) {
+ #if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #ifdef MAX_ACCEL_EDIT_VALUES
+ constexpr xyze_float_t max_accel_edit = MAX_ACCEL_EDIT_VALUES;
+ const xyze_float_t &max_acc_edit_scaled = max_accel_edit;
+ #else
+ constexpr xyze_float_t max_accel_edit = DEFAULT_MAX_ACCELERATION,
+ max_acc_edit_scaled = max_accel_edit * 2;
+ #endif
+ limit_and_warn(targetValue, axis, PSTR("Acceleration"), max_acc_edit_scaled);
+ #endif
+ settings.max_acceleration_mm_per_s2[axis] = targetValue;
+
+ // Update steps per s2 to agree with the units per s2 (since they are used in the planner)
+ reset_acceleration_rates();
+}
+
+void Planner::set_max_feedrate(const uint8_t axis, float targetValue) {
+ #if ENABLED(LIMITED_MAX_FR_EDITING)
+ #ifdef MAX_FEEDRATE_EDIT_VALUES
+ constexpr xyze_float_t max_fr_edit = MAX_FEEDRATE_EDIT_VALUES;
+ const xyze_float_t &max_fr_edit_scaled = max_fr_edit;
+ #else
+ constexpr xyze_float_t max_fr_edit = DEFAULT_MAX_FEEDRATE,
+ max_fr_edit_scaled = max_fr_edit * 2;
+ #endif
+ limit_and_warn(targetValue, axis, PSTR("Feedrate"), max_fr_edit_scaled);
+ #endif
+ settings.max_feedrate_mm_s[axis] = targetValue;
+}
+
+void Planner::set_max_jerk(const AxisEnum axis, float targetValue) {
+ #if HAS_CLASSIC_JERK
+ #if ENABLED(LIMITED_JERK_EDITING)
+ constexpr xyze_float_t max_jerk_edit =
+ #ifdef MAX_JERK_EDIT_VALUES
+ MAX_JERK_EDIT_VALUES
+ #else
+ { (DEFAULT_XJERK) * 2, (DEFAULT_YJERK) * 2,
+ (DEFAULT_ZJERK) * 2, (DEFAULT_EJERK) * 2 }
+ #endif
+ ;
+ limit_and_warn(targetValue, axis, PSTR("Jerk"), max_jerk_edit);
+ #endif
+ max_jerk[axis] = targetValue;
+ #else
+ UNUSED(axis); UNUSED(targetValue);
+ #endif
+}
+
#if ENABLED(AUTOTEMP)
void Planner::autotemp_M104_M109() {
diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h
index 55ccae85a3ed..a79c5bfd38e4 100644
--- a/Marlin/src/module/planner.h
+++ b/Marlin/src/module/planner.h
@@ -51,6 +51,10 @@
#include "../feature/mixing.h"
#endif
+#if HAS_CUTTER
+ #include "../feature/spindle_laser.h"
+#endif
+
// Feedrate for manual moves
#ifdef MANUAL_FEEDRATE
constexpr xyze_feedrate_t manual_feedrate_mm_m = MANUAL_FEEDRATE;
@@ -145,6 +149,10 @@ typedef struct block_t {
final_rate, // The minimal rate at exit
acceleration_steps_per_s2; // acceleration steps/sec^2
+ #if HAS_CUTTER
+ cutter_power_t cutter_power; // Power level for Spindle, Laser, etc.
+ #endif
+
#if FAN_COUNT > 0
uint8_t fan_speed[FAN_COUNT];
#endif
@@ -163,7 +171,7 @@ typedef struct block_t {
} block_t;
-#define HAS_POSITION_FLOAT ANY(LIN_ADVANCE, SCARA_FEEDRATE_SCALING, GRADIENT_MIX)
+#define HAS_POSITION_FLOAT ANY(LIN_ADVANCE, SCARA_FEEDRATE_SCALING, GRADIENT_MIX, LCD_SHOW_E_TOTAL)
#define BLOCK_MOD(n) ((n)&(BLOCK_BUFFER_SIZE-1))
@@ -245,7 +253,7 @@ class Planner {
static uint32_t max_acceleration_steps_per_s2[XYZE_N]; // (steps/s^2) Derived from mm_per_s2
static float steps_to_mm[XYZE_N]; // Millimeters per step
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
static float junction_deviation_mm; // (mm) M205 J
#if ENABLED(LIN_ADVANCE)
static float max_e_jerk // Calculated from junction_deviation_mm
@@ -257,7 +265,7 @@ class Planner {
#endif
#if HAS_CLASSIC_JERK
- #if BOTH(JUNCTION_DEVIATION, LIN_ADVANCE)
+ #if HAS_LINEAR_E_JERK
static xyz_pos_t max_jerk; // (mm/s^2) M205 XYZ - The largest speed change requiring no acceleration.
#else
static xyze_pos_t max_jerk; // (mm/s^2) M205 XYZE - The largest speed change requiring no acceleration.
@@ -268,7 +276,6 @@ class Planner {
static bool leveling_active; // Flag that bed leveling is enabled
#if ABL_PLANAR
static matrix_3x3 bed_level_matrix; // Transform to compensate for bed level
- static constexpr xy_pos_t level_fulcrum = { X_TILT_FULCRUM, Y_TILT_FULCRUM };
#endif
#if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
static float z_fade_height, inverse_z_fade_height;
@@ -358,6 +365,10 @@ class Planner {
static void reset_acceleration_rates();
static void refresh_positioning();
+ static void set_max_acceleration(const uint8_t axis, float targetValue);
+ static void set_max_feedrate(const uint8_t axis, float targetValue);
+ static void set_max_jerk(const AxisEnum axis, float targetValue);
+
#if EXTRUDERS
FORCE_INLINE static void refresh_e_factor(const uint8_t e) {
@@ -576,7 +587,7 @@ class Planner {
#if HAS_POSITION_FLOAT
, const xyze_pos_t &target_float
#endif
- #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION)
+ #if IS_KINEMATIC && DISABLED(CLASSIC_JERK)
, const xyze_float_t &delta_mm_cart
#endif
, feedRate_t fr_mm_s, const uint8_t extruder, const float &millimeters=0.0
@@ -599,7 +610,7 @@ class Planner {
#if HAS_POSITION_FLOAT
, const xyze_pos_t &target_float
#endif
- #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION)
+ #if IS_KINEMATIC && DISABLED(CLASSIC_JERK)
, const xyze_float_t &delta_mm_cart
#endif
, feedRate_t fr_mm_s, const uint8_t extruder, const float &millimeters=0.0
@@ -631,20 +642,20 @@ class Planner {
* millimeters - the length of the movement, if known
*/
static bool buffer_segment(const float &a, const float &b, const float &c, const float &e
- #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION)
+ #if IS_KINEMATIC && DISABLED(CLASSIC_JERK)
, const xyze_float_t &delta_mm_cart
#endif
, const feedRate_t &fr_mm_s, const uint8_t extruder, const float &millimeters=0.0
);
FORCE_INLINE static bool buffer_segment(abce_pos_t &abce
- #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION)
+ #if IS_KINEMATIC && DISABLED(CLASSIC_JERK)
, const xyze_float_t &delta_mm_cart
#endif
, const feedRate_t &fr_mm_s, const uint8_t extruder, const float &millimeters=0.0
) {
return buffer_segment(abce.a, abce.b, abce.c, abce.e
- #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION)
+ #if IS_KINEMATIC && DISABLED(CLASSIC_JERK)
, delta_mm_cart
#endif
, fr_mm_s, extruder, millimeters);
@@ -862,7 +873,7 @@ class Planner {
static void autotemp_M104_M109();
#endif
- #if BOTH(JUNCTION_DEVIATION, LIN_ADVANCE)
+ #if HAS_LINEAR_E_JERK
FORCE_INLINE static void recalculate_max_e_jerk() {
#define GET_MAX_E_JERK(N) SQRT(SQRT(0.5) * junction_deviation_mm * (N) * RECIPROCAL(1.0 - SQRT(0.5)))
#if ENABLED(DISTINCT_E_FACTORS)
@@ -934,7 +945,7 @@ class Planner {
static void recalculate();
- #if ENABLED(JUNCTION_DEVIATION)
+ #if DISABLED(CLASSIC_JERK)
FORCE_INLINE static void normalize_junction_vector(xyze_float_t &vector) {
float magnitude_sq = 0;
@@ -949,7 +960,7 @@ class Planner {
return limit_value;
}
- #endif // JUNCTION_DEVIATION
+ #endif // !CLASSIC_JERK
};
#define PLANNER_XY_FEEDRATE() (_MIN(planner.settings.max_feedrate_mm_s[X_AXIS], planner.settings.max_feedrate_mm_s[Y_AXIS]))
diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp
index 0217a2fd59f8..cbe6035af7db 100644
--- a/Marlin/src/module/probe.cpp
+++ b/Marlin/src/module/probe.cpp
@@ -281,7 +281,7 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
BUZZ(100, 659);
BUZZ(100, 698);
- PGM_P const ds_str = deploy ? PSTR(MSG_MANUAL_DEPLOY) : PSTR(MSG_MANUAL_STOW);
+ PGM_P const ds_str = deploy ? GET_TEXT(MSG_MANUAL_DEPLOY) : GET_TEXT(MSG_MANUAL_STOW);
ui.return_to_status(); // To display the new status message
ui.set_status_P(ds_str, 99);
serialprintPGM(ds_str);
@@ -293,7 +293,7 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Stow Probe"), PSTR("Continue"));
#endif
#if ENABLED(EXTENSIBLE_UI)
- ExtUI::onUserConfirmRequired(PSTR("Stow Probe"));
+ ExtUI::onUserConfirmRequired_P(PSTR("Stow Probe"));
#endif
while (wait_for_user) idle();
ui.reset_status();
@@ -387,7 +387,7 @@ bool set_probe_deployed(const bool deploy) {
const xy_pos_t old_xy = current_position;
#if ENABLED(PROBE_TRIGGERED_WHEN_STOWED_TEST)
- #if USES_Z_MIN_PROBE_ENDSTOP
+ #if HAS_CUSTOM_PROBE_PIN
#define PROBE_STOWED() (READ(Z_MIN_PROBE_PIN) != Z_MIN_PROBE_ENDSTOP_INVERTING)
#else
#define PROBE_STOWED() (READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING)
@@ -406,7 +406,7 @@ bool set_probe_deployed(const bool deploy) {
if (PROBE_STOWED() == deploy) { // Unchanged after deploy/stow action?
if (IsRunning()) {
SERIAL_ERROR_MSG("Z-Probe failed");
- LCD_ALERTMESSAGEPGM("Err: ZPROBE");
+ LCD_ALERTMESSAGEPGM_P(PSTR("Err: ZPROBE"));
}
stop();
return true;
@@ -736,7 +736,7 @@ float probe_at_point(const float &rx, const float &ry, const ProbePtRaise raise_
if (isnan(measured_z)) {
STOW_PROBE();
- LCD_MESSAGEPGM(MSG_ERR_PROBING_FAILED);
+ LCD_MESSAGEPGM(MSG_LCD_PROBING_FAILED);
SERIAL_ERROR_MSG(MSG_ERR_PROBING_FAILED);
}
diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h
index ab546b9be853..64363ea9e0f9 100644
--- a/Marlin/src/module/probe.h
+++ b/Marlin/src/module/probe.h
@@ -62,7 +62,7 @@
#endif
-#if HAS_LEVELING && HAS_BED_PROBE
+#if HAS_LEVELING && (HAS_BED_PROBE || ENABLED(PROBE_MANUALLY))
inline float probe_min_x() {
return _MAX(
#if IS_KINEMATIC
diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp
index 12d5820d0972..19060b9b23a9 100644
--- a/Marlin/src/module/stepper.cpp
+++ b/Marlin/src/module/stepper.cpp
@@ -1667,6 +1667,10 @@ uint32_t Stepper::stepper_block_phase_isr() {
return interval; // No more queued movements!
}
+ #if HAS_CUTTER
+ cutter.apply_power(current_block->cutter_power);
+ #endif
+
#if ENABLED(POWER_LOSS_RECOVERY)
recovery.info.sdpos = current_block->sdpos;
#endif
@@ -2225,7 +2229,7 @@ int32_t Stepper::position(const AxisEnum axis) {
// be very careful here. If the interrupt being preempted was the
// Stepper ISR (this CAN happen with the endstop limits ISR) then
// when the stepper ISR resumes, we must be very sure that the movement
-// is properly cancelled
+// is properly canceled
void Stepper::endstop_triggered(const AxisEnum axis) {
const bool was_enabled = STEPPER_ISR_ENABLED();
diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp
index eb37325da2bb..6f62854e8388 100644
--- a/Marlin/src/module/temperature.cpp
+++ b/Marlin/src/module/temperature.cpp
@@ -94,17 +94,17 @@ Temperature thermalManager;
*/
#if HAS_HEATED_BED
- #define _BED_PSTR(M,E) (E) == H_BED ? PSTR(M) :
+ #define _BED_PSTR(h) (h) == H_BED ? GET_TEXT(MSG_BED) :
#else
- #define _BED_PSTR(M,E)
+ #define _BED_PSTR(h)
#endif
#if HAS_HEATED_CHAMBER
- #define _CHAMBER_PSTR(M,E) (E) == H_CHAMBER ? PSTR(M) :
+ #define _CHAMBER_PSTR(h) (h) == H_CHAMBER ? GET_TEXT(MSG_CHAMBER) :
#else
- #define _CHAMBER_PSTR(M,E)
+ #define _CHAMBER_PSTR(h)
#endif
-#define _E_PSTR(M,E,N) ((HOTENDS) >= (N) && (E) == (N)-1) ? PSTR(MSG_E##N " " M) :
-#define TEMP_ERR_PSTR(M,E) _BED_PSTR(M##_BED,E) _CHAMBER_PSTR(M##_CHAMBER,E) _E_PSTR(M,E,2) _E_PSTR(M,E,3) _E_PSTR(M,E,4) _E_PSTR(M,E,5) _E_PSTR(M,E,6) PSTR(MSG_E1 " " M)
+#define _E_PSTR(h,N) ((HOTENDS) > N && (h) == N) ? PSTR(LCD_STR_E##N) :
+#define HEATER_PSTR(h) _BED_PSTR(h) _CHAMBER_PSTR(h) _E_PSTR(h,1) _E_PSTR(h,2) _E_PSTR(h,3) _E_PSTR(h,4) _E_PSTR(h,5) PSTR(LCD_STR_E0)
// public:
@@ -157,18 +157,6 @@ Temperature thermalManager;
uint8_t Temperature::fan_speed_scaler[FAN_COUNT] = ARRAY_N(FAN_COUNT, 128, 128, 128, 128, 128, 128);
#endif
- #if HAS_LCD_MENU
-
- uint8_t Temperature::lcd_tmpfan_speed[
- #if ENABLED(SINGLENOZZLE)
- _MAX(EXTRUDERS, FAN_COUNT)
- #else
- FAN_COUNT
- #endif
- ]; // = { 0 }
-
- #endif
-
/**
* Set the print fan speed for a target extruder
*/
@@ -187,9 +175,6 @@ Temperature thermalManager;
if (target >= FAN_COUNT) return;
fan_speed[target] = speed;
- #if HAS_LCD_MENU
- lcd_tmpfan_speed[target] = speed;
- #endif
}
#if EITHER(PROBING_FANS_OFF, ADVANCED_PAUSE_FANS_PAUSE)
@@ -389,7 +374,7 @@ volatile bool Temperature::temp_meas_ready = false;
next_auto_fan_check_ms = next_temp_ms + 2500UL;
#endif
- if (target > GHV(BED_MAXTEMP, temp_range[heater].maxtemp) - 15) {
+ if (target > GHV(BED_MAXTEMP - 10, temp_range[heater].maxtemp - 15)) {
SERIAL_ECHOLNPGM(MSG_PID_TEMP_TOO_HIGH);
return;
}
@@ -533,10 +518,10 @@ volatile bool Temperature::temp_meas_ready = false;
if (current_temp > watch_temp_target) heated = true; // - Flag if target temperature reached
}
else if (ELAPSED(ms, temp_change_ms)) // Watch timer expired
- _temp_error(heater, PSTR(MSG_T_HEATING_FAILED), TEMP_ERR_PSTR(MSG_HEATING_FAILED_LCD, heater));
+ _temp_error(heater, PSTR(MSG_T_HEATING_FAILED), GET_TEXT(MSG_HEATING_FAILED_LCD));
}
else if (current_temp < target - (MAX_OVERSHOOT_PID_AUTOTUNE)) // Heated, then temperature fell too far?
- _temp_error(heater, PSTR(MSG_T_THERMAL_RUNAWAY), TEMP_ERR_PSTR(MSG_THERMAL_RUNAWAY, heater));
+ _temp_error(heater, PSTR(MSG_T_THERMAL_RUNAWAY), GET_TEXT(MSG_THERMAL_RUNAWAY));
}
#endif
} // every 2 seconds
@@ -636,45 +621,34 @@ int16_t Temperature::getHeaterPower(const heater_ind_t heater_id) {
}
}
+#define _EFANOVERLAP(A,B) _FANOVERLAP(E##A,B)
+
#if HAS_AUTO_FAN
- #define AUTO_1_IS_0 (E1_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
- #define AUTO_2_IS_0 (E2_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
- #define AUTO_2_IS_1 (E2_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
- #define AUTO_3_IS_0 (E3_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
- #define AUTO_3_IS_1 (E3_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
- #define AUTO_3_IS_2 (E3_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
- #define AUTO_4_IS_0 (E4_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
- #define AUTO_4_IS_1 (E4_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
- #define AUTO_4_IS_2 (E4_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
- #define AUTO_4_IS_3 (E4_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
- #define AUTO_5_IS_0 (E5_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
- #define AUTO_5_IS_1 (E5_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
- #define AUTO_5_IS_2 (E5_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
- #define AUTO_5_IS_3 (E5_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
- #define AUTO_5_IS_4 (E5_AUTO_FAN_PIN == E4_AUTO_FAN_PIN)
#define CHAMBER_FAN_INDEX HOTENDS
void Temperature::checkExtruderAutoFans() {
+ #define _EFAN(A,B) _EFANOVERLAP(A,B) ? B :
static const uint8_t fanBit[] PROGMEM = {
0
#if HOTENDS > 1
- , AUTO_1_IS_0 ? 0 : 1
+ , _EFAN(1,0) 1
#endif
#if HOTENDS > 2
- , AUTO_2_IS_0 ? 0 : AUTO_2_IS_1 ? 1 : 2
+ , _EFAN(2,0) _EFAN(2,1) 2
#endif
#if HOTENDS > 3
- , AUTO_3_IS_0 ? 0 : AUTO_3_IS_1 ? 1 : AUTO_3_IS_2 ? 2 : 3
+ , _EFAN(3,0) _EFAN(3,1) _EFAN(3,2) 3
#endif
#if HOTENDS > 4
- , AUTO_4_IS_0 ? 0 : AUTO_4_IS_1 ? 1 : AUTO_4_IS_2 ? 2 : AUTO_4_IS_3 ? 3 : 4
+ , _EFAN(4,0) _EFAN(4,1) _EFAN(4,2) _EFAN(4,3) 4
#endif
#if HOTENDS > 5
- , AUTO_5_IS_0 ? 0 : AUTO_5_IS_1 ? 1 : AUTO_5_IS_2 ? 2 : AUTO_5_IS_3 ? 3 : AUTO_5_IS_4 ? 4 : 5
+ , _EFAN(5,0) _EFAN(5,1) _EFAN(5,2) _EFAN(5,3) _EFAN(5,4) 5
#endif
#if HAS_AUTO_CHAMBER_FAN
- , AUTO_CHAMBER_IS_0 ? 0 : AUTO_CHAMBER_IS_1 ? 1 : AUTO_CHAMBER_IS_2 ? 2 : AUTO_CHAMBER_IS_3 ? 3 : AUTO_CHAMBER_IS_4 ? 4 : AUTO_CHAMBER_IS_5 ? 5 : 6
+ #define _CFAN(B) _FANOVERLAP(CHAMBER,B) ? B :
+ , _CFAN(0) _CFAN(1) _CFAN(2) _CFAN(3) _CFAN(4) _CFAN(5) 6
#endif
};
uint8_t fanState = 0;
@@ -746,7 +720,7 @@ int16_t Temperature::getHeaterPower(const heater_ind_t heater_id) {
// Temperature Error Handlers
//
-inline void loud_kill(PGM_P const lcd_msg) {
+inline void loud_kill(PGM_P const lcd_msg, const heater_ind_t heater) {
Running = false;
#if USE_BEEPER
for (uint8_t i = 20; i--;) {
@@ -755,7 +729,7 @@ inline void loud_kill(PGM_P const lcd_msg) {
}
WRITE(BEEPER_PIN, HIGH);
#endif
- kill(lcd_msg);
+ kill(lcd_msg, HEATER_PSTR(heater));
}
void Temperature::_temp_error(const heater_ind_t heater, PGM_P const serial_msg, PGM_P const lcd_msg) {
@@ -792,23 +766,23 @@ void Temperature::_temp_error(const heater_ind_t heater, PGM_P const serial_msg,
if (ELAPSED(ms, expire_ms)) ++killed;
break;
case 2:
- loud_kill(lcd_msg);
+ loud_kill(lcd_msg, heater);
++killed;
break;
}
#elif defined(BOGUS_TEMPERATURE_GRACE_PERIOD)
UNUSED(killed);
#else
- if (!killed) { killed = 1; loud_kill(lcd_msg); }
+ if (!killed) { killed = 1; loud_kill(lcd_msg, heater); }
#endif
}
void Temperature::max_temp_error(const heater_ind_t heater) {
- _temp_error(heater, PSTR(MSG_T_MAXTEMP), TEMP_ERR_PSTR(MSG_ERR_MAXTEMP, heater));
+ _temp_error(heater, PSTR(MSG_T_MAXTEMP), GET_TEXT(MSG_ERR_MAXTEMP));
}
void Temperature::min_temp_error(const heater_ind_t heater) {
- _temp_error(heater, PSTR(MSG_T_MINTEMP), TEMP_ERR_PSTR(MSG_ERR_MINTEMP, heater));
+ _temp_error(heater, PSTR(MSG_T_MINTEMP), GET_TEXT(MSG_ERR_MINTEMP));
}
#if HOTENDS
@@ -857,7 +831,7 @@ void Temperature::min_temp_error(const heater_ind_t heater) {
#if HOTENDS == 1
constexpr bool this_hotend = true;
#else
- const bool this_hotend = (e == active_extruder);
+ const bool this_hotend = (ee == active_extruder);
#endif
work_pid[ee].Kc = 0;
if (this_hotend) {
@@ -886,7 +860,7 @@ void Temperature::min_temp_error(const heater_ind_t heater) {
#endif // PID_OPENLOOP
#if ENABLED(PID_DEBUG)
- if (e == active_extruder) {
+ if (ee == active_extruder) {
SERIAL_ECHO_START();
SERIAL_ECHOPAIR(
MSG_PID_DEBUG, ee,
@@ -1034,7 +1008,7 @@ void Temperature::manage_heater() {
HOTEND_LOOP() {
#if ENABLED(THERMAL_PROTECTION_HOTENDS)
if (degHotend(e) > temp_range[e].maxtemp)
- _temp_error((heater_ind_t)e, PSTR(MSG_T_THERMAL_RUNAWAY), TEMP_ERR_PSTR(MSG_THERMAL_RUNAWAY, e));
+ _temp_error((heater_ind_t)e, PSTR(MSG_T_THERMAL_RUNAWAY), GET_TEXT(MSG_THERMAL_RUNAWAY));
#endif
#if HEATER_IDLE_HANDLER
@@ -1052,7 +1026,7 @@ void Temperature::manage_heater() {
// Make sure temperature is increasing
if (watch_hotend[e].next_ms && ELAPSED(ms, watch_hotend[e].next_ms)) { // Time to check this extruder?
if (degHotend(e) < watch_hotend[e].target) // Failed to increase enough?
- _temp_error((heater_ind_t)e, PSTR(MSG_T_HEATING_FAILED), TEMP_ERR_PSTR(MSG_HEATING_FAILED_LCD, e));
+ _temp_error((heater_ind_t)e, PSTR(MSG_T_HEATING_FAILED), GET_TEXT(MSG_HEATING_FAILED_LCD));
else // Start again if the target is still far off
start_watching_hotend(e);
}
@@ -1061,7 +1035,7 @@ void Temperature::manage_heater() {
#if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
// Make sure measured temperatures are close together
if (ABS(temp_hotend[0].celsius - redundant_temperature) > MAX_REDUNDANT_TEMP_SENSOR_DIFF)
- _temp_error(H_E0, PSTR(MSG_REDUNDANCY), PSTR(MSG_ERR_REDUNDANT_TEMP));
+ _temp_error(H_E0, PSTR(MSG_REDUNDANCY), GET_TEXT(MSG_ERR_REDUNDANT_TEMP));
#endif
} // HOTEND_LOOP
@@ -1087,14 +1061,14 @@ void Temperature::manage_heater() {
#if ENABLED(THERMAL_PROTECTION_BED)
if (degBed() > BED_MAXTEMP)
- _temp_error(H_BED, PSTR(MSG_T_THERMAL_RUNAWAY), TEMP_ERR_PSTR(MSG_THERMAL_RUNAWAY, H_BED));
+ _temp_error(H_BED, PSTR(MSG_T_THERMAL_RUNAWAY), GET_TEXT(MSG_THERMAL_RUNAWAY));
#endif
#if WATCH_BED
// Make sure temperature is increasing
if (watch_bed.elapsed(ms)) { // Time to check the bed?
if (degBed() < watch_bed.target) // Failed to increase enough?
- _temp_error(H_BED, PSTR(MSG_T_HEATING_FAILED), TEMP_ERR_PSTR(MSG_HEATING_FAILED_LCD, H_BED));
+ _temp_error(H_BED, PSTR(MSG_T_HEATING_FAILED), GET_TEXT(MSG_HEATING_FAILED_LCD));
else // Start again if the target is still far off
start_watching_bed();
}
@@ -1165,14 +1139,14 @@ void Temperature::manage_heater() {
#if ENABLED(THERMAL_PROTECTION_CHAMBER)
if (degChamber() > CHAMBER_MAXTEMP)
- _temp_error(H_CHAMBER, PSTR(MSG_T_THERMAL_RUNAWAY), TEMP_ERR_PSTR(MSG_THERMAL_RUNAWAY, H_CHAMBER));
+ _temp_error(H_CHAMBER, PSTR(MSG_T_THERMAL_RUNAWAY), GET_TEXT(MSG_THERMAL_RUNAWAY));
#endif
#if WATCH_CHAMBER
// Make sure temperature is increasing
if (watch_chamber.elapsed(ms)) { // Time to check the chamber?
if (degChamber() < watch_chamber.target) // Failed to increase enough?
- _temp_error(H_CHAMBER, PSTR(MSG_T_HEATING_FAILED), TEMP_ERR_PSTR(MSG_HEATING_FAILED_LCD, H_CHAMBER));
+ _temp_error(H_CHAMBER, PSTR(MSG_T_HEATING_FAILED), GET_TEXT(MSG_HEATING_FAILED_LCD));
else
start_watching_chamber(); // Start again if the target is still far off
}
@@ -1700,19 +1674,19 @@ void Temperature::init() {
#if HAS_AUTO_FAN_0
INIT_E_AUTO_FAN_PIN(E0_AUTO_FAN_PIN);
#endif
- #if HAS_AUTO_FAN_1 && !AUTO_1_IS_0
+ #if HAS_AUTO_FAN_1 && !_EFANOVERLAP(1,0)
INIT_E_AUTO_FAN_PIN(E1_AUTO_FAN_PIN);
#endif
- #if HAS_AUTO_FAN_2 && !(AUTO_2_IS_0 || AUTO_2_IS_1)
+ #if HAS_AUTO_FAN_2 && !(_EFANOVERLAP(2,0) || _EFANOVERLAP(2,1))
INIT_E_AUTO_FAN_PIN(E2_AUTO_FAN_PIN);
#endif
- #if HAS_AUTO_FAN_3 && !(AUTO_3_IS_0 || AUTO_3_IS_1 || AUTO_3_IS_2)
+ #if HAS_AUTO_FAN_3 && !(_EFANOVERLAP(3,0) || _EFANOVERLAP(3,1) || _EFANOVERLAP(3,2))
INIT_E_AUTO_FAN_PIN(E3_AUTO_FAN_PIN);
#endif
- #if HAS_AUTO_FAN_4 && !(AUTO_4_IS_0 || AUTO_4_IS_1 || AUTO_4_IS_2 || AUTO_4_IS_3)
+ #if HAS_AUTO_FAN_4 && !(_EFANOVERLAP(4,0) || _EFANOVERLAP(4,1) || _EFANOVERLAP(4,2) || _EFANOVERLAP(4,3))
INIT_E_AUTO_FAN_PIN(E4_AUTO_FAN_PIN);
#endif
- #if HAS_AUTO_FAN_5 && !(AUTO_5_IS_0 || AUTO_5_IS_1 || AUTO_5_IS_2 || AUTO_5_IS_3 || AUTO_5_IS_4)
+ #if HAS_AUTO_FAN_5 && !(_EFANOVERLAP(5,0) || _EFANOVERLAP(5,1) || _EFANOVERLAP(5,2) || _EFANOVERLAP(5,3) || _EFANOVERLAP(5,4))
INIT_E_AUTO_FAN_PIN(E5_AUTO_FAN_PIN);
#endif
#if HAS_AUTO_CHAMBER_FAN && !AUTO_CHAMBER_IS_E
@@ -1943,7 +1917,7 @@ void Temperature::init() {
sm.state = TRRunaway;
case TRRunaway:
- _temp_error(heater_id, PSTR(MSG_T_THERMAL_RUNAWAY), TEMP_ERR_PSTR(MSG_THERMAL_RUNAWAY, heater_id));
+ _temp_error(heater_id, PSTR(MSG_T_THERMAL_RUNAWAY), GET_TEXT(MSG_THERMAL_RUNAWAY));
}
}
@@ -2938,7 +2912,7 @@ void Temperature::isr() {
#else
PSTR("E " S_FMT)
#endif
- , heating ? PSTR(MSG_HEATING) : PSTR(MSG_COOLING)
+ , heating ? GET_TEXT(MSG_HEATING) : GET_TEXT(MSG_COOLING)
);
}
#endif
@@ -3186,7 +3160,7 @@ void Temperature::isr() {
#endif // HAS_HEATED_BED
- #if 0 && HAS_HEATED_CHAMBER
+ #if HAS_HEATED_CHAMBER
#ifndef MIN_COOLING_SLOPE_DEG_CHAMBER
#define MIN_COOLING_SLOPE_DEG_CHAMBER 1.50
diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h
index e75eae4f85d6..c294325d9bdf 100644
--- a/Marlin/src/module/temperature.h
+++ b/Marlin/src/module/temperature.h
@@ -476,12 +476,16 @@ class Temperature {
#if ENABLED(ADAPTIVE_FAN_SLOWING)
static uint8_t fan_speed_scaler[FAN_COUNT];
- #else
- static constexpr uint8_t fan_speed_scaler[FAN_COUNT] = ARRAY_N(FAN_COUNT, 128, 128, 128, 128, 128, 128);
#endif
static inline uint8_t scaledFanSpeed(const uint8_t target, const uint8_t fs) {
- return (fs * uint16_t(fan_speed_scaler[target])) >> 7;
+ return (fs * uint16_t(
+ #if ENABLED(ADAPTIVE_FAN_SLOWING)
+ fan_speed_scaler[target]
+ #else
+ 128
+ #endif
+ )) >> 7;
}
static inline uint8_t scaledFanSpeed(const uint8_t target) {
@@ -493,30 +497,6 @@ class Temperature {
static void set_temp_fan_speed(const uint8_t fan, const uint16_t tmp_temp);
#endif
- #if HAS_LCD_MENU
-
- static uint8_t lcd_tmpfan_speed[
- #if ENABLED(SINGLENOZZLE)
- _MAX(EXTRUDERS, FAN_COUNT)
- #else
- FAN_COUNT
- #endif
- ];
-
- static inline void lcd_setFanSpeed(const uint8_t target) { set_fan_speed(target, lcd_tmpfan_speed[target]); }
-
- #if HAS_FAN0
- FORCE_INLINE static void lcd_setFanSpeed0() { lcd_setFanSpeed(0); }
- #endif
- #if HAS_FAN1 || (ENABLED(SINGLENOZZLE) && EXTRUDERS > 1)
- FORCE_INLINE static void lcd_setFanSpeed1() { lcd_setFanSpeed(1); }
- #endif
- #if HAS_FAN2 || (ENABLED(SINGLENOZZLE) && EXTRUDERS > 2)
- FORCE_INLINE static void lcd_setFanSpeed2() { lcd_setFanSpeed(2); }
- #endif
-
- #endif // HAS_LCD_MENU
-
#if EITHER(PROBING_FANS_OFF, ADVANCED_PAUSE_FANS_PAUSE)
void set_fans_paused(const bool p);
#endif
@@ -595,15 +575,6 @@ class Temperature {
#if HOTENDS
- #if HAS_LCD_MENU
- static inline void start_watching_E0() { start_watching_hotend(0); }
- static inline void start_watching_E1() { start_watching_hotend(1); }
- static inline void start_watching_E2() { start_watching_hotend(2); }
- static inline void start_watching_E3() { start_watching_hotend(3); }
- static inline void start_watching_E4() { start_watching_hotend(4); }
- static inline void start_watching_E5() { start_watching_hotend(5); }
- #endif
-
static void setTargetHotend(const int16_t celsius, const uint8_t E_NAME) {
const uint8_t ee = HOTEND_INDEX;
#ifdef MILLISECONDS_PREHEAT_TIME
diff --git a/Marlin/src/module/thermistor/thermistor_99.h b/Marlin/src/module/thermistor/thermistor_99.h
new file mode 100644
index 000000000000..9d868619bbef
--- /dev/null
+++ b/Marlin/src/module/thermistor/thermistor_99.h
@@ -0,0 +1,64 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+#pragma once
+
+// 100k bed thermistor with a 10K pull-up resistor - made by $ buildroot/share/scripts/createTemperatureLookupMarlin.py --rp=10000
+
+const short temptable_99[][2] PROGMEM = {
+ { OV( 5.81), 350 }, // v=0.028 r=57.081 res=13.433 degC/count
+ { OV( 6.54), 340 }, // v=0.032 r=64.248 res=11.711 degC/count
+ { OV( 7.38), 330 }, // v=0.036 r=72.588 res=10.161 degC/count
+ { OV( 8.36), 320 }, // v=0.041 r=82.336 res=8.772 degC/count
+ { OV( 9.51), 310 }, // v=0.046 r=93.780 res=7.535 degC/count
+ { OV( 10.87), 300 }, // v=0.053 r=107.281 res=6.439 degC/count
+ { OV( 12.47), 290 }, // v=0.061 r=123.286 res=5.473 degC/count
+ { OV( 14.37), 280 }, // v=0.070 r=142.360 res=4.627 degC/count
+ { OV( 16.64), 270 }, // v=0.081 r=165.215 res=3.891 degC/count
+ { OV( 19.37), 260 }, // v=0.095 r=192.758 res=3.253 degC/count
+ { OV( 22.65), 250 }, // v=0.111 r=226.150 res=2.705 degC/count
+ { OV( 26.62), 240 }, // v=0.130 r=266.891 res=2.236 degC/count
+ { OV( 31.46), 230 }, // v=0.154 r=316.931 res=1.839 degC/count
+ { OV( 37.38), 220 }, // v=0.182 r=378.822 res=1.504 degC/count
+ { OV( 44.65), 210 }, // v=0.218 r=455.939 res=1.224 degC/count
+ { OV( 53.64), 200 }, // v=0.262 r=552.778 res=0.991 degC/count
+ { OV( 64.78), 190 }, // v=0.316 r=675.386 res=0.799 degC/count
+ { OV( 78.65), 180 }, // v=0.384 r=831.973 res=0.643 degC/count
+ { OV( 95.94), 170 }, // v=0.468 r=1033.801 res=0.516 degC/count
+ { OV(117.52), 160 }, // v=0.574 r=1296.481 res=0.414 degC/count
+ { OV(144.42), 150 }, // v=0.705 r=1641.900 res=0.333 degC/count
+ { OV(177.80), 140 }, // v=0.868 r=2101.110 res=0.269 degC/count
+ { OV(218.89), 130 }, // v=1.069 r=2718.725 res=0.220 degC/count
+ { OV(268.82), 120 }, // v=1.313 r=3559.702 res=0.183 degC/count
+ { OV(328.35), 110 }, // v=1.603 r=4719.968 res=0.155 degC/count
+ { OV(397.44), 100 }, // v=1.941 r=6343.323 res=0.136 degC/count
+ { OV(474.90), 90 }, // v=2.319 r=8648.807 res=0.124 degC/count
+ { OV(558.03), 80 }, // v=2.725 r=11975.779 res=0.118 degC/count
+ { OV(642.76), 70 }, // v=3.138 r=16859.622 res=0.119 degC/count
+ { OV(724.25), 60 }, // v=3.536 r=24161.472 res=0.128 degC/count
+ { OV(797.93), 50 }, // v=3.896 r=35295.361 res=0.146 degC/count
+ { OV(860.51), 40 }, // v=4.202 r=52635.209 res=0.178 degC/count
+ { OV(910.55), 30 }, // v=4.446 r=80262.251 res=0.229 degC/count
+ { OV(948.36), 20 }, // v=4.631 r=125374.433 res=0.313 degC/count
+ { OV(975.47), 10 }, // v=4.763 r=201020.458 res=0.449 degC/count
+ { OV(994.02), 0 } // v=4.854 r=331567.870 res=0.676 degC/count
+};
diff --git a/Marlin/src/module/thermistor/thermistors.h b/Marlin/src/module/thermistor/thermistors.h
index f42f647e8514..74272b97a9be 100644
--- a/Marlin/src/module/thermistor/thermistors.h
+++ b/Marlin/src/module/thermistor/thermistors.h
@@ -122,6 +122,9 @@
#if ANY_THERMISTOR_IS(75) // beta25 = 4100 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "MGB18-104F39050L32 thermistor"
#include "thermistor_75.h"
#endif
+#if ANY_THERMISTOR_IS(99) // 100k bed thermistor with a 10K pull-up resistor (on some Wanhao i3 models)
+ #include "thermistor_99.h"
+#endif
#if ANY_THERMISTOR_IS(110) // Pt100 with 1k0 pullup
#include "thermistor_110.h"
#endif
diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp
index cd6d21bae7b5..b392e751d5d1 100644
--- a/Marlin/src/module/tool_change.cpp
+++ b/Marlin/src/module/tool_change.cpp
@@ -906,7 +906,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
#endif
#if HAS_HOTEND_OFFSET
- xyz_pos_t diff = hotend_offset[new_tool];
+ xyz_pos_t diff = hotend_offset[new_tool] - hotend_offset[old_tool];
#if ENABLED(DUAL_X_CARRIAGE)
diff.x = 0;
#endif
@@ -929,7 +929,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
#elif ENABLED(SWITCHING_NOZZLE) && !SWITCHING_NOZZLE_TWO_SERVOS // Switching Nozzle (single servo)
// Raise by a configured distance to avoid workpiece, except with
// SWITCHING_NOZZLE_TWO_SERVOS, as both nozzles will lift instead.
- current_position.z += _MAX(-zdiff, 0.0) + toolchange_settings.z_raise;
+ current_position.z += _MAX(-diff.z, 0.0) + toolchange_settings.z_raise;
#if HAS_SOFTWARE_ENDSTOPS
NOMORE(current_position.z, soft_endstop.max.z);
#endif
diff --git a/Marlin/src/pins/lpc1768/pins_BIGTREE_SKR_V1.3.h b/Marlin/src/pins/lpc1768/pins_BIGTREE_SKR_V1.3.h
index 1febedf2fa5f..e0e9570c62c8 100644
--- a/Marlin/src/pins/lpc1768/pins_BIGTREE_SKR_V1.3.h
+++ b/Marlin/src/pins/lpc1768/pins_BIGTREE_SKR_V1.3.h
@@ -33,7 +33,9 @@
//
// Servos
//
-#define SERVO0_PIN P2_00
+#ifndef SERVO0_PIN
+ #define SERVO0_PIN P2_00
+#endif
//
// Limit Switches
@@ -165,14 +167,24 @@
//
// Heaters / Fans
//
-#define HEATER_0_PIN P2_07
+#ifndef HEATER_0_PIN
+ #define HEATER_0_PIN P2_07
+#endif
#if HOTENDS == 1
- #define FAN1_PIN P2_04
+ #ifndef FAN1_PIN
+ #define FAN1_PIN P2_04
+ #endif
#else
- #define HEATER_1_PIN P2_04
+ #ifndef HEATER_1_PIN
+ #define HEATER_1_PIN P2_04
+ #endif
+#endif
+#ifndef FAN_PIN
+ #define FAN_PIN P2_03
+#endif
+#ifndef HEATER_BED_PIN
+ #define HEATER_BED_PIN P2_05
#endif
-#define FAN_PIN P2_03
-#define HEATER_BED_PIN P2_05
/**
* _____ _____
diff --git a/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h b/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h
index bc8037da0791..92dbf7b4b214 100644
--- a/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h
+++ b/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h
@@ -241,9 +241,9 @@
//
#define LED_PIN P4_28 // (13)
-// define digital pin 4 for the filament runout sensor. Use the RAMPS 1.4 digital input 4 on the servos connector
+// define digital pin 5 for the filament runout sensor. Use the RAMPS 1.4 digital input 5 on the servos connector
#ifndef FIL_RUNOUT_PIN
- #define FIL_RUNOUT_PIN P1_18 // (4)
+ #define FIL_RUNOUT_PIN P1_19 // (5)
#endif
#define PS_ON_PIN P2_12 // (12)
diff --git a/Marlin/src/pins/mega/pins_MEGATRONICS_3.h b/Marlin/src/pins/mega/pins_MEGATRONICS_3.h
index 7a6465471cdd..23fbe7636c45 100644
--- a/Marlin/src/pins/mega/pins_MEGATRONICS_3.h
+++ b/Marlin/src/pins/mega/pins_MEGATRONICS_3.h
@@ -164,7 +164,7 @@
#define SHIFT_OUT 34
#define SHIFT_EN 44
- #if MB(MEGATRONICS_31) || MB(MEGATRONICS_32)
+ #if MB(MEGATRONICS_31, MEGATRONICS_32)
#define SD_DETECT_PIN 56
#endif
diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h
index 19bdc5a741f8..e263f546d68f 100644
--- a/Marlin/src/pins/pins.h
+++ b/Marlin/src/pins/pins.h
@@ -21,6 +21,8 @@
*/
#pragma once
+#include "../core/boards.h"
+
/**
* Include pins definitions
*
@@ -35,15 +37,15 @@
#define MAX_EXTRUDERS 6
-#if MB(RAMPS_13_EFB) || MB(RAMPS_14_EFB) || MB(RAMPS_PLUS_EFB) || MB(RAMPS_14_RE_ARM_EFB) || MB(RAMPS_SMART_EFB) || MB(RAMPS_DUO_EFB) || MB(RAMPS4DUE_EFB)
+#if MB(RAMPS_13_EFB, RAMPS_14_EFB, RAMPS_PLUS_EFB, RAMPS_14_RE_ARM_EFB, RAMPS_SMART_EFB, RAMPS_DUO_EFB, RAMPS4DUE_EFB)
#define IS_RAMPS_EFB
-#elif MB(RAMPS_13_EEB) || MB(RAMPS_14_EEB) || MB(RAMPS_PLUS_EEB) || MB(RAMPS_14_RE_ARM_EEB) || MB(RAMPS_SMART_EEB) || MB(RAMPS_DUO_EEB) || MB(RAMPS4DUE_EEB)
+#elif MB(RAMPS_13_EEB, RAMPS_14_EEB, RAMPS_PLUS_EEB, RAMPS_14_RE_ARM_EEB, RAMPS_SMART_EEB, RAMPS_DUO_EEB, RAMPS4DUE_EEB)
#define IS_RAMPS_EEB
-#elif MB(RAMPS_13_EFF) || MB(RAMPS_14_EFF) || MB(RAMPS_PLUS_EFF) || MB(RAMPS_14_RE_ARM_EFF) || MB(RAMPS_SMART_EFF) || MB(RAMPS_DUO_EFF) || MB(RAMPS4DUE_EFF)
+#elif MB(RAMPS_13_EFF, RAMPS_14_EFF, RAMPS_PLUS_EFF, RAMPS_14_RE_ARM_EFF, RAMPS_SMART_EFF, RAMPS_DUO_EFF, RAMPS4DUE_EFF)
#define IS_RAMPS_EFF
-#elif MB(RAMPS_13_EEF) || MB(RAMPS_14_EEF) || MB(RAMPS_PLUS_EEF) || MB(RAMPS_14_RE_ARM_EEF) || MB(RAMPS_SMART_EEF) || MB(RAMPS_DUO_EEF) || MB(RAMPS4DUE_EEF)
+#elif MB(RAMPS_13_EEF, RAMPS_14_EEF, RAMPS_PLUS_EEF, RAMPS_14_RE_ARM_EEF, RAMPS_SMART_EEF, RAMPS_DUO_EEF, RAMPS4DUE_EEF)
#define IS_RAMPS_EEF
-#elif MB(RAMPS_13_SF) || MB(RAMPS_14_SF) || MB(RAMPS_PLUS_SF) || MB(RAMPS_14_RE_ARM_SF) || MB(RAMPS_SMART_SF) || MB(RAMPS_DUO_SF) || MB(RAMPS4DUE_SF)
+#elif MB(RAMPS_13_SF, RAMPS_14_SF, RAMPS_PLUS_SF, RAMPS_14_RE_ARM_SF, RAMPS_SMART_SF, RAMPS_DUO_SF, RAMPS4DUE_SF)
#define IS_RAMPS_SF
#endif
@@ -178,6 +180,8 @@
#include "ramps/pins_Z_BOLT_X_SERIES.h" // ATmega2560 env:megaatmega2560
#elif MB(TT_OSCAR)
#include "ramps/pins_TT_OSCAR.h" // ATmega2560 env:megaatmega2560
+#elif MB(TANGO)
+ #include "ramps/pins_TANGO.h" // ATmega2560 env:megaatmega2560
//
// RAMBo and derivatives
@@ -185,7 +189,7 @@
#elif MB(RAMBO)
#include "rambo/pins_RAMBO.h" // ATmega2560 env:rambo
-#elif MB(MINIRAMBO) || MB(MINIRAMBO_10A)
+#elif MB(MINIRAMBO, MINIRAMBO_10A)
#include "rambo/pins_MINIRAMBO.h" // ATmega2560 env:rambo
#elif MB(EINSY_RAMBO)
#include "rambo/pins_EINSY_RAMBO.h" // ATmega2560 env:rambo
@@ -214,7 +218,7 @@
#include "mega/pins_MEGATRONICS.h" // ATmega2560 env:megaatmega2560
#elif MB(MEGATRONICS_2)
#include "mega/pins_MEGATRONICS_2.h" // ATmega2560 env:megaatmega2560
-#elif MB(MEGATRONICS_3) || MB(MEGATRONICS_31) || MB(MEGATRONICS_32)
+#elif MB(MEGATRONICS_3, MEGATRONICS_31, MEGATRONICS_32)
#include "mega/pins_MEGATRONICS_3.h" // ATmega2560 env:megaatmega2560
#elif MB(ELEFU_3)
#include "mega/pins_ELEFU_3.h" // ATmega2560 env:megaatmega2560
@@ -464,6 +468,8 @@
#include "stm32/pins_MKS_ROBIN_LITE.h" // STM32F1 env:mks_robin_lite
#elif MB(BIGTREE_SKR_MINI_V1_1)
#include "stm32/pins_BIGTREE_SKR_MINI_V1_1.h" // STM32F1 env:STM32F103RC_bigtree
+#elif MB(BTT_SKR_MINI_E3_V1_2)
+ #include "stm32/pins_BTT_SKR_MINI_E3_V1_2.h" // STM32F1 env:STM32F103RC_bigtree
#elif MB(BIGTREE_SKR_MINI_E3)
#include "stm32/pins_BIGTREE_SKR_MINI_E3.h" // STM32F1 env:STM32F103RC_bigtree
#elif MB(BIGTREE_SKR_E3_DIP)
@@ -494,8 +500,8 @@
#elif MB(BEAST)
#include "stm32/pins_BEAST.h" // STM32F4 env:STM32F4
-#elif MB(STM32F4)
- #include "stm32/pins_STM32F4.h" // STM32F4 env:STM32F4
+#elif MB(GENERIC_STM32F4)
+ #include "stm32/pins_GENERIC_STM32F4.h" // STM32F4 env:STM32F4
#elif MB(ARMED)
#include "stm32/pins_ARMED.h" // STM32F4 env:ARMED
#elif MB(RUMBA32)
@@ -526,7 +532,8 @@
// Espressif ESP32
//
-#elif MB(ESP32)
+#elif MB(ESPRESSIF_ESP32)
+
#include "esp32/pins_ESP32.h" // ESP32 env:esp32
//
@@ -796,6 +803,9 @@
#ifndef SUICIDE_PIN
#define SUICIDE_PIN -1
#endif
+#ifndef SUICIDE_PIN_INVERTING
+ #define SUICIDE_PIN_INVERTING false
+#endif
#ifndef NUM_SERVO_PLUGS
#define NUM_SERVO_PLUGS 4
@@ -902,7 +912,7 @@
//
// Disable unused endstop / probe pins
//
-#if !USES_Z_MIN_PROBE_ENDSTOP
+#if !HAS_CUSTOM_PROBE_PIN
#undef Z_MIN_PROBE_PIN
#define Z_MIN_PROBE_PIN -1
#endif
@@ -999,6 +1009,19 @@
#define Y2_E_INDEX E_STEPPERS
#endif
+#ifndef X2_CS_PIN
+ #define X2_CS_PIN -1
+#endif
+#ifndef X2_MS1_PIN
+ #define X2_MS1_PIN -1
+#endif
+#ifndef X2_MS2_PIN
+ #define X2_MS2_PIN -1
+#endif
+#ifndef X2_MS3_PIN
+ #define X2_MS3_PIN -1
+#endif
+
// The Y2 axis, if any, should be the next open extruder port
#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
#ifndef Y2_STEP_PIN
@@ -1034,6 +1057,19 @@
#define Z2_E_INDEX Y2_E_INDEX
#endif
+#ifndef Y2_CS_PIN
+ #define Y2_CS_PIN -1
+#endif
+#ifndef Y2_MS1_PIN
+ #define Y2_MS1_PIN -1
+#endif
+#ifndef Y2_MS2_PIN
+ #define Y2_MS2_PIN -1
+#endif
+#ifndef Y2_MS3_PIN
+ #define Y2_MS3_PIN -1
+#endif
+
// The Z2 axis, if any, should be the next open extruder port
#if Z_MULTI_STEPPER_DRIVERS
#ifndef Z2_STEP_PIN
@@ -1069,6 +1105,19 @@
#define Z3_E_INDEX Z2_E_INDEX
#endif
+#ifndef Z2_CS_PIN
+ #define Z2_CS_PIN -1
+#endif
+#ifndef Z2_MS1_PIN
+ #define Z2_MS1_PIN -1
+#endif
+#ifndef Z2_MS2_PIN
+ #define Z2_MS2_PIN -1
+#endif
+#ifndef Z2_MS3_PIN
+ #define Z2_MS3_PIN -1
+#endif
+
#if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
#ifndef Z3_STEP_PIN
#define Z3_STEP_PIN _EPIN(Z3_E_INDEX, STEP)
@@ -1100,4 +1149,17 @@
#endif
#endif
+#ifndef Z3_CS_PIN
+ #define Z3_CS_PIN -1
+#endif
+#ifndef Z3_MS1_PIN
+ #define Z3_MS1_PIN -1
+#endif
+#ifndef Z3_MS2_PIN
+ #define Z3_MS2_PIN -1
+#endif
+#ifndef Z3_MS3_PIN
+ #define Z3_MS3_PIN -1
+#endif
+
#undef HAS_FREE_AUX2_PINS
diff --git a/Marlin/src/pins/ramps/pins_RAMPS.h b/Marlin/src/pins/ramps/pins_RAMPS.h
index 0c407096256d..be2fb2a848e0 100644
--- a/Marlin/src/pins/ramps/pins_RAMPS.h
+++ b/Marlin/src/pins/ramps/pins_RAMPS.h
@@ -552,7 +552,7 @@
#define BTN_EN2 7
#define BTN_ENC 39
- #define SD_DETECT_PIN -1 // Pin 49 for display sd interface, 72 for easy adapter board
+ #define SD_DETECT_PIN -1 // Pin 49 for display SD interface, 72 for easy adapter board
#define KILL_PIN 31
#elif ENABLED(ELB_FULL_GRAPHIC_CONTROLLER)
diff --git a/Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h b/Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h
index 379d2b4716ab..1328354b7dcd 100644
--- a/Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h
+++ b/Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h
@@ -36,15 +36,27 @@
#define FIL_RUNOUT_PIN 2
#if NUM_RUNOUT_SENSORS > 1
- #define FIL_RUNOUT2_PIN 15 // Creality CR-X can use dual runout sensors
+ #define FIL_RUNOUT2_PIN 15 // Creality CR-X can use dual runout sensors
#endif
-#define SD_DETECT_PIN 49 // Always define onboard SD detect
-#define BEEPER_PIN 37 // Always define beeper pin so Play Tone works with ExtUI
+#define SD_DETECT_PIN 49 // Always define onboard SD detect
+
+#define PS_ON_PIN 40 // Used by CR2020 Industrial series
+
+#if ENABLED(CASE_LIGHT_ENABLE) && !defined(CASE_LIGHT_PIN)
+ #define CASE_LIGHT_PIN 65
+#endif
#include "pins_RAMPS.h"
-#define EXP1_PIN 65 // A11
-#define EXP2_PIN 66 // A12
-#define EXP3_PIN 11 // SERVO0_PIN
-#define EXP4_PIN 12 // PS_ON_PIN
+#ifndef BEEPER_PIN
+ #define BEEPER_PIN 37 // Always define beeper pin so Play Tone works with ExtUI
+#endif
+
+#define EXP1_PIN 65 // A11 - Used by CR2020 Industrial series for case
+#define EXP2_PIN 66 // A12
+#define EXP3_PIN 11 // SERVO0_PIN
+#define EXP4_PIN 12 // PS_ON_PIN
+
+#define SUICIDE_PIN 12 // Used by CR2020 Industrial series
+#define SUICIDE_PIN_INVERTING true // Used by CR2020 Industrial series
diff --git a/Marlin/src/pins/ramps/pins_RUMBA.h b/Marlin/src/pins/ramps/pins_RUMBA.h
index a4add5d40b89..cf3bfe226c49 100644
--- a/Marlin/src/pins/ramps/pins_RUMBA.h
+++ b/Marlin/src/pins/ramps/pins_RUMBA.h
@@ -143,7 +143,9 @@
#ifndef FAN_PIN
#define FAN_PIN 7
#endif
-#define FAN1_PIN 8
+#ifndef FAN1_PIN
+ #define FAN1_PIN 8
+#endif
//
// Misc. Functions
@@ -160,7 +162,7 @@
#define SPINDLE_LASER_PWM_PIN 4 // Hardware PWM. Pin 4 interrupts OC0* and OC1* always in use?
#endif
#ifndef SPINDLE_LASER_ENA_PIN
- #define SPINDLE_LASER_ENA_PIN 14 // Pullup!
+ #define SPINDLE_LASER_ENA_PIN 14 // Pullup!
#endif
#ifndef SPINDLE_DIR_PIN
#define SPINDLE_DIR_PIN 15
diff --git a/Marlin/src/pins/ramps/pins_TANGO.h b/Marlin/src/pins/ramps/pins_TANGO.h
new file mode 100644
index 000000000000..2cc8565db2a7
--- /dev/null
+++ b/Marlin/src/pins/ramps/pins_TANGO.h
@@ -0,0 +1,51 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * BIQU Tango pin assignments
+ */
+
+#define BOARD_INFO_NAME "Tango"
+
+#define FAN_PIN 8
+#define FAN1_PIN -1
+
+#define ORIG_E0_AUTO_FAN_PIN 7
+
+#ifndef TEMP_0_PIN
+ #if TEMP_SENSOR_0 == -1
+ #define TEMP_0_PIN 10 // Analog Input (connector *K1* on Tango thermocouple ADD ON is used)
+ #else
+ #define TEMP_0_PIN 15 // Analog Input (default connector for thermistor *T0* on rumba board is used)
+ #endif
+#endif
+
+#ifndef TEMP_1_PIN
+ #if TEMP_SENSOR_1 == -1
+ #define TEMP_1_PIN 9 // Analog Input (connector *K2* on Tango thermocouple ADD ON is used)
+ #else
+ #define TEMP_1_PIN 14 // Analog Input (default connector for thermistor *T1* on rumba board is used)
+ #endif
+#endif
+
+#include "pins_RUMBA.h"
diff --git a/Marlin/src/pins/sam/pins_ARCHIM1.h b/Marlin/src/pins/sam/pins_ARCHIM1.h
index 990c8fc1f156..83a68e776fd4 100644
--- a/Marlin/src/pins/sam/pins_ARCHIM1.h
+++ b/Marlin/src/pins/sam/pins_ARCHIM1.h
@@ -43,6 +43,12 @@
#define BOARD_INFO_NAME "Archim 1.0"
+//
+// Timers
+//
+#define STEP_TIMER_NUM 3
+#define HAL_STEP_TIMER_ISR() void TC3_Handler()
+
//
// Items marked * have been altered from Archim v1.0
//
diff --git a/Marlin/src/pins/sam/pins_RURAMPS4D_11.h b/Marlin/src/pins/sam/pins_RURAMPS4D_11.h
index b457c7852cb8..45540e8dad5a 100644
--- a/Marlin/src/pins/sam/pins_RURAMPS4D_11.h
+++ b/Marlin/src/pins/sam/pins_RURAMPS4D_11.h
@@ -118,7 +118,7 @@
//#define E3_MS2_PIN ?
//#define E3_MS3_PIN ?
-#if USES_Z_MIN_PROBE_ENDSTOP
+#if HAS_CUSTOM_PROBE_PIN
#define Z_MIN_PROBE_PIN 49
#endif
diff --git a/Marlin/src/pins/sam/pins_RURAMPS4D_13.h b/Marlin/src/pins/sam/pins_RURAMPS4D_13.h
index 6931654a7ae1..c8ff71673bf3 100644
--- a/Marlin/src/pins/sam/pins_RURAMPS4D_13.h
+++ b/Marlin/src/pins/sam/pins_RURAMPS4D_13.h
@@ -106,7 +106,7 @@
#define E2_CS_PIN 61
#endif
-#if USES_Z_MIN_PROBE_ENDSTOP
+#if HAS_CUSTOM_PROBE_PIN
#define Z_MIN_PROBE_PIN 49
#endif
diff --git a/Marlin/src/pins/sanguino/pins_MELZI.h b/Marlin/src/pins/sanguino/pins_MELZI.h
index 1ccf5ac064ae..ad0a58509b4f 100644
--- a/Marlin/src/pins/sanguino/pins_MELZI.h
+++ b/Marlin/src/pins/sanguino/pins_MELZI.h
@@ -29,5 +29,4 @@
#define BOARD_INFO_NAME "Melzi"
#endif
-#define IS_MELZI
#include "pins_SANGUINOLOLU_12.h"
diff --git a/Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h b/Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h
index 0b119a422ccf..e4fdf6906518 100644
--- a/Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h
+++ b/Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h
@@ -115,7 +115,7 @@
#endif
-#if !defined(FAN_PIN) && (MB(AZTEEG_X1) || MB(STB_11) || ENABLED(IS_MELZI))
+#if !defined(FAN_PIN) && (MB(AZTEEG_X1, STB_11) || IS_MELZI)
#define FAN_PIN 4 // Works for Panelolu2 too
#endif
@@ -132,7 +132,7 @@
//#define SDSS 24
#define SDSS 31
-#if ENABLED(IS_MELZI)
+#if IS_MELZI
#define LED_PIN 27
#elif MB(STB_11)
#define LCD_BACKLIGHT_PIN 17 // LCD backlight LED
@@ -160,7 +160,7 @@
#if ENABLED(U8GLIB_ST7920) // SPI GLCD 12864 ST7920 ( like [www.digole.com] ) For Melzi V2.0
- #if ENABLED(IS_MELZI)
+ #if IS_MELZI
#define LCD_PINS_RS 30 // CS chip select /SS chip slave select
#define LCD_PINS_ENABLE 29 // SID (MOSI)
#define LCD_PINS_D4 17 // SCK (CLK) clock
@@ -187,7 +187,7 @@
#define DOGLCD_CS 17
#define LCD_BACKLIGHT_PIN 28 // PA3
- #elif ENABLED(IS_MELZI)
+ #elif IS_MELZI
#define BEEPER_PIN 27
#define DOGLCD_CS 28
@@ -219,7 +219,7 @@
#if ENABLED(LCD_I2C_PANELOLU2)
- #if ENABLED(IS_MELZI)
+ #if IS_MELZI
#define BTN_ENC 29
#define LCD_SDSS 30 // Panelolu2 SD card reader rather than the Melzi
#else
diff --git a/Marlin/src/pins/stm32/pins_BIGTREE_SKR_PRO_V1.1.h b/Marlin/src/pins/stm32/pins_BIGTREE_SKR_PRO_V1.1.h
index 807b366dad42..45e1e5dae240 100644
--- a/Marlin/src/pins/stm32/pins_BIGTREE_SKR_PRO_V1.1.h
+++ b/Marlin/src/pins/stm32/pins_BIGTREE_SKR_PRO_V1.1.h
@@ -207,6 +207,13 @@
#define LCD_PINS_ENABLE PG7
#define LCD_PINS_D4 PG3
+ // CR10_Stock Display needs a different delay setting on SKR PRO v1.1, so undef it here.
+ // It will be defined again at the #HAS_GRAPHICAL_LCD section below.
+ #undef ST7920_DELAY_1
+ #undef ST7920_DELAY_2
+ #undef ST7920_DELAY_3
+
+
#else
#define LCD_PINS_RS PD10
diff --git a/Marlin/src/pins/stm32/pins_BTT_SKR_MINI_E3_V1_2.h b/Marlin/src/pins/stm32/pins_BTT_SKR_MINI_E3_V1_2.h
new file mode 100644
index 000000000000..70aee574495f
--- /dev/null
+++ b/Marlin/src/pins/stm32/pins_BTT_SKR_MINI_E3_V1_2.h
@@ -0,0 +1,167 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#ifndef TARGET_STM32F1
+ #error "Oops! Select an STM32F1 board in 'Tools > Board.'"
+#endif
+
+#define BOARD_INFO_NAME "BIGTREE SKR Mini E3 V1.2"
+
+// Release PB3/PB4 (E0 STP/DIR) from JTAG pins
+#define DISABLE_JTAG
+
+// Ignore temp readings during development.
+//#define BOGUS_TEMPERATURE_GRACE_PERIOD 2000
+
+#define FLASH_EEPROM_EMULATION
+#define EEPROM_PAGE_SIZE uint16(0x800) // 2KB
+#define EEPROM_START_ADDRESS uint32(0x8000000 + 256 * 1024 - 2 * EEPROM_PAGE_SIZE)
+#undef E2END
+#define E2END (EEPROM_PAGE_SIZE - 1) // 2KB
+
+//
+// Servos
+//
+#define SERVO0_PIN PA1
+
+//
+// Limit Switches
+//
+#define X_STOP_PIN PC0
+#define Y_STOP_PIN PC1
+#define Z_STOP_PIN PC2
+
+//
+// Z Probe must be this pins
+//
+#define Z_MIN_PROBE_PIN PC14
+
+//
+// Filament Runout Sensor
+//
+#ifndef FIL_RUNOUT_PIN
+ #define FIL_RUNOUT_PIN PC12
+#endif
+
+//
+// Steppers
+//
+#define X_ENABLE_PIN PB14
+#define X_STEP_PIN PB13
+#define X_DIR_PIN PB12
+
+#define Y_ENABLE_PIN PB11
+#define Y_STEP_PIN PB10
+#define Y_DIR_PIN PB2
+
+#define Z_ENABLE_PIN PB1
+#define Z_STEP_PIN PB0
+#define Z_DIR_PIN PC5
+
+#define E0_ENABLE_PIN PD2
+#define E0_STEP_PIN PB3
+#define E0_DIR_PIN PB4
+
+#if HAS_TMC220x
+ /**
+ * TMC2208/TMC2209 stepper drivers
+ */
+ //
+ // Software serial
+ //
+ #define X_SERIAL_TX_PIN PB15
+ #define X_SERIAL_RX_PIN PB15
+
+ #define Y_SERIAL_TX_PIN PC6
+ #define Y_SERIAL_RX_PIN PC6
+
+ #define Z_SERIAL_TX_PIN PC10
+ #define Z_SERIAL_RX_PIN PC10
+
+ #define E0_SERIAL_TX_PIN PC11
+ #define E0_SERIAL_RX_PIN PC11
+#endif
+
+//
+// Temperature Sensors
+//
+#define TEMP_0_PIN PA0 // Analog Input
+#define TEMP_BED_PIN PC3 // Analog Input
+
+//
+// Heaters / Fans
+//
+#define HEATER_0_PIN PC8 // EXTRUDER
+#define HEATER_BED_PIN PC9 // BED
+#define FAN_PIN PA8
+
+//
+// USB connect control
+//
+#define USB_CONNECT_PIN PC13
+#define USB_CONNECT_INVERTING false
+
+#define NEOPIXEL_PIN PC7 // LED driving pin
+
+#define SD_DETECT_PIN PC4
+
+/**
+ * _____
+ * 5V | · · | GND
+ * (LCD_EN) PB7 | · · | PB8 (LCD_RS)
+ * (LCD_D4) PB9 | · · | PA10 (BTN_EN2)
+ * RESET | · · | PA9 (BTN_EN1)
+ * (BTN_ENC) PB6 | · · | PB5 (BEEPER)
+ * -----
+ * EXP1
+ */
+#if HAS_SPI_LCD
+ #define BEEPER_PIN PB5
+ #define BTN_ENC PB6
+
+ #if ENABLED(CR10_STOCKDISPLAY)
+ #define LCD_PINS_RS PB8
+
+ #define BTN_EN1 PA9
+ #define BTN_EN2 PA10
+
+ #define LCD_PINS_ENABLE PB7
+ #define LCD_PINS_D4 PB9
+
+ #else
+ #error "Only CR10_STOCKDISPLAY is currently supported on the BIGTREE_SKR_MINI_E3 V1.2."
+ #endif
+
+#endif // HAS_SPI_LCD
+
+//
+// SD Support
+//
+#define HAS_ONBOARD_SD
+
+#ifndef SDCARD_CONNECTION
+ #define SDCARD_CONNECTION ONBOARD
+#endif
+
+#define ON_BOARD_SPI_DEVICE 1 //SPI1
+#define ONBOARD_SD_CS_PIN PA4 // Chip select for "System" SD card
diff --git a/Marlin/src/pins/stm32/pins_STM32F4.h b/Marlin/src/pins/stm32/pins_GENERIC_STM32F4.h
similarity index 100%
rename from Marlin/src/pins/stm32/pins_STM32F4.h
rename to Marlin/src/pins/stm32/pins_GENERIC_STM32F4.h
diff --git a/Marlin/src/pins/stm32/pins_MALYAN_M200.h b/Marlin/src/pins/stm32/pins_MALYAN_M200.h
index 302df62a452a..87337c72b6f7 100644
--- a/Marlin/src/pins/stm32/pins_MALYAN_M200.h
+++ b/Marlin/src/pins/stm32/pins_MALYAN_M200.h
@@ -42,6 +42,8 @@
// On STM32F103:
// PB3, PB6, PB7, and PB8 can be used with pwm, which rules out TIM2 and TIM4.
// On STM32F070, 16 and 17 are in use, but 1 and 3 are available.
+#undef STEP_TIMER
+#undef TEMP_TIMER
#define STEP_TIMER 1
#define TEMP_TIMER 3
@@ -84,15 +86,7 @@
#define HEATER_0_PIN PB6 // HOTEND0 MOSFET
#define HEATER_BED_PIN PB7 // BED MOSFET
-// FAN_PIN is commented out here because the M200 example
-// Configuration_adv.h does NOT override E0_AUTO_FAN_PIN.
-#ifndef FAN_PIN
- //#define FAN_PIN PB8 // FAN1 header on board - PRINT FAN
-#endif
-#define FAN1_PIN PB3 // FAN2 header on board - CONTROLLER FAN
-#define FAN2_PIN -1 // FAN3 header on board - EXTRUDER0 FAN
+#define MALYAN_FAN1_PIN PB8 // FAN1 header on board - PRINT FAN
+#define MALYAN_FAN2_PIN PB3 // FAN2 header on board - CONTROLLER FAN
-// This board has only the controller fan and the extruder fan
-// If someone hacks to put a direct power fan on the controller, PB3 could
-// be used as a separate print cooling fan.
-#define ORIG_E0_AUTO_FAN_PIN PB8
+#define FAN1_PIN MALYAN_FAN2_PIN
diff --git a/Marlin/src/pins/stm32/pins_MKS_ROBIN.h b/Marlin/src/pins/stm32/pins_MKS_ROBIN.h
index 7623f3fe234e..2273da994fe2 100644
--- a/Marlin/src/pins/stm32/pins_MKS_ROBIN.h
+++ b/Marlin/src/pins/stm32/pins_MKS_ROBIN.h
@@ -23,6 +23,8 @@
/**
* MKS Robin (STM32F130ZET6) board pin assignments
+ *
+ * https://github.com/makerbase-mks/MKS-Robin/tree/master/MKS%20Robin/Hardware
*/
#ifndef __STM32F1__
@@ -36,7 +38,7 @@
//
// Release PB4 (Y_ENABLE_PIN) from JTAG NRST role
//
-#define DISABLE_DEBUG
+#define DISABLE_JTAG
//
// Servos
@@ -109,9 +111,9 @@
#define LED_PIN PB2
/**
- * Note: MKS Robin TFT screens use various TFT controllers. Supported screens
- * are based on the ILI9342, ILI9328 and ST7798V. Define init sequences for
- * other screens in u8g_dev_tft_320x240_upscale_from_128x64.cpp
+ * Note: MKS Robin TFT screens use various TFT controllers
+ * Supported screens are based on the ILI9341 and ST7789V (320x240), ILI9328 and 9488 are not.
+ * Define init sequences for other screens in u8g_dev_tft_320x240_upscale_from_128x64.cpp
*
* If the screen stays white, disable 'LCD_RESET_PIN'
* to let the bootloader init the screen.
@@ -124,18 +126,33 @@
#define FSMC_CS_PIN PG12 // NE4
#define FSMC_RS_PIN PF0 // A0
-//
-// Custom SPI pins
-//
-#define SCK_PIN PC12
-#define MISO_PIN PC8
-#define MOSI_PIN PD2
-#define SS_PIN -1
+#define LCD_USE_DMA_FSMC // Use DMA transfers to send data to the TFT
+#define FSMC_DMA_DEV DMA2
+#define FSMC_DMA_CHANNEL DMA_CH5
-//
-// Onboard SD Card
-//
-#define ONBOARD_SD_CS PC11
-#define SDSS PD2
+#if ENABLED(TOUCH_BUTTONS)
+ #define TOUCH_CS_PIN PB1 // SPI2_NSS
+ #define TOUCH_SCK_PIN PB13 // SPI2_SCK
+ #define TOUCH_MISO_PIN PB14 // SPI2_MISO
+ #define TOUCH_MOSI_PIN PB15 // SPI2_MOSI
+#endif
-#define SD_DETECT_PIN -1 // PF12
+// SPI1(PA7) & SPI3(PB5) not available
+#define ENABLE_SPI2
+
+#if ENABLED(SDIO_SUPPORT)
+ #define SCK_PIN PB13 // SPI2
+ #define MISO_PIN PB14 // SPI2
+ #define MOSI_PIN PB15 // SPI2
+ #define SS_PIN -1 // PB12 is X-
+ #define SD_DETECT_PIN PF12 // SD_CD
+#else
+ // SD as custom software SPI (SDIO pins)
+ #define SCK_PIN PC12
+ #define MISO_PIN PC8
+ #define MOSI_PIN PD2
+ #define SS_PIN -1
+ #define ONBOARD_SD_CS_PIN PC11
+ #define SDSS PD2
+ #define SD_DETECT_PIN -1
+#endif
diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp
index 15ed4bda58e2..69d63dff1cc6 100644
--- a/Marlin/src/sd/cardreader.cpp
+++ b/Marlin/src/sd/cardreader.cpp
@@ -357,10 +357,6 @@ void CardReader::mount() {
flag.mounted = false;
if (root.isOpen()) root.close();
- #ifndef SPI_SPEED
- #define SPI_SPEED SPI_FULL_SPEED
- #endif
-
if (!sd2card.init(SPI_SPEED, SDSS)
#if defined(LCD_SDSS) && (LCD_SDSS != SDSS)
&& !sd2card.init(SPI_SPEED, LCD_SDSS)
diff --git a/Marlin/src/sd/cardreader.h b/Marlin/src/sd/cardreader.h
index e089f86f9e40..8ef8dbeae31a 100644
--- a/Marlin/src/sd/cardreader.h
+++ b/Marlin/src/sd/cardreader.h
@@ -118,6 +118,9 @@ class CardReader {
static inline void pauseSDPrint() { flag.sdprinting = false; }
static inline bool isPaused() { return isFileOpen() && !flag.sdprinting; }
static inline bool isPrinting() { return flag.sdprinting; }
+ #if HAS_PRINT_PROGRESS_PERMYRIAD
+ static inline uint16_t permyriadDone() { return (isFileOpen() && filesize) ? sdpos / ((filesize + 9999) / 10000) : 0; }
+ #endif
static inline uint8_t percentDone() { return (isFileOpen() && filesize) ? sdpos / ((filesize + 99) / 100) : 0; }
// Helper for open and remove
@@ -282,6 +285,7 @@ class CardReader {
#endif
#define IS_SD_PRINTING() card.flag.sdprinting
+#define IS_SD_PAUSED() card.isPaused()
#define IS_SD_FILE_OPEN() card.isFileOpen()
extern CardReader card;
@@ -289,6 +293,9 @@ extern CardReader card;
#else // !SDSUPPORT
#define IS_SD_PRINTING() false
+#define IS_SD_PAUSED() false
#define IS_SD_FILE_OPEN() false
+#define LONG_FILENAME_LENGTH 0
+
#endif // !SDSUPPORT
diff --git a/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_BULK_STORAGE/UHS_SCSI.h b/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_BULK_STORAGE/UHS_SCSI.h
index 9ebefab5d10f..1050d70c74e2 100644
--- a/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_BULK_STORAGE/UHS_SCSI.h
+++ b/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_BULK_STORAGE/UHS_SCSI.h
@@ -25,7 +25,7 @@ e-mail : support@circuitsathome.com
*/
#ifndef UHS_SCSI_H
-#define UHS_SCSI_H
+#define UHS_SCSI_H
/*
* Reference documents from T10 (http://www.t10.org)
@@ -35,21 +35,21 @@ e-mail : support@circuitsathome.com
*/
/* Group 1 commands (CDB's here are should all be 6-bytes) */
-#define SCSI_CMD_TEST_UNIT_READY 0x00U
-#define SCSI_CMD_REQUEST_SENSE 0x03U
-#define SCSI_CMD_FORMAT_UNIT 0x04U
-#define SCSI_CMD_READ_6 0x08U
-#define SCSI_CMD_WRITE_6 0x0AU
-#define SCSI_CMD_INQUIRY 0x12U
+#define SCSI_CMD_TEST_UNIT_READY 0x00U
+#define SCSI_CMD_REQUEST_SENSE 0x03U
+#define SCSI_CMD_FORMAT_UNIT 0x04U
+#define SCSI_CMD_READ_6 0x08U
+#define SCSI_CMD_WRITE_6 0x0AU
+#define SCSI_CMD_INQUIRY 0x12U
#define SCSI_CMD_MODE_SELECT_6 0x15U
-#define SCSI_CMD_MODE_SENSE_6 0x1AU
-#define SCSI_CMD_START_STOP_UNIT 0x1BU
+#define SCSI_CMD_MODE_SENSE_6 0x1AU
+#define SCSI_CMD_START_STOP_UNIT 0x1BU
#define SCSI_CMD_PREVENT_REMOVAL 0x1EU
/* Group 2 Commands (CDB's here are 10-bytes) */
#define SCSI_CMD_READ_FORMAT_CAPACITIES 0x23U
-#define SCSI_CMD_READ_CAPACITY_10 0x25U
-#define SCSI_CMD_READ_10 0x28U
-#define SCSI_CMD_WRITE_10 0x2AU
+#define SCSI_CMD_READ_CAPACITY_10 0x25U
+#define SCSI_CMD_READ_10 0x28U
+#define SCSI_CMD_WRITE_10 0x2AU
#define SCSI_CMD_SEEK_10 0x2BU
#define SCSI_CMD_ERASE_10 0x2CU
#define SCSI_CMD_WRITE_AND_VERIFY_10 0x2EU
@@ -107,10 +107,10 @@ e-mail : support@circuitsathome.com
#define SCSI_CMD_READ_ALL_SUBCODES 0xDFU /* Vendor unique */
/* SCSI error codes */
-#define SCSI_S_NOT_READY 0x02U
-#define SCSI_S_MEDIUM_ERROR 0x03U
-#define SCSI_S_ILLEGAL_REQUEST 0x05U
-#define SCSI_S_UNIT_ATTENTION 0x06U
+#define SCSI_S_NOT_READY 0x02U
+#define SCSI_S_MEDIUM_ERROR 0x03U
+#define SCSI_S_ILLEGAL_REQUEST 0x05U
+#define SCSI_S_UNIT_ATTENTION 0x06U
#define SCSI_ASC_LBA_OUT_OF_RANGE 0x21U
#define SCSI_ASC_MEDIA_CHANGED 0x28U
#define SCSI_ASC_MEDIUM_NOT_PRESENT 0x3AU
@@ -324,4 +324,4 @@ struct SCSI_Request_Sense_Response {
uint8_t SenseKeySpecific[3];
} __attribute__((packed));
-#endif /* UHS_SCSI_H */
+#endif /* UHS_SCSI_H */
diff --git a/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_printf_HELPER.h b/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_printf_HELPER.h
index 87f156db5cb3..4b8d387d270f 100644
--- a/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_printf_HELPER.h
+++ b/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_printf_HELPER.h
@@ -25,7 +25,7 @@ e-mail : support@circuitsathome.com
*/
#ifndef UHS_PRINTF_HELPER_H
-#define UHS_PRINTF_HELPER_H
+#define UHS_PRINTF_HELPER_H
#ifdef LOAD_UHS_PRINTF_HELPER
#include
@@ -197,4 +197,4 @@ void UHS_AVR_printf_HELPER_init() {
#ifndef UHS_printf_HELPER_init
#define UHS_printf_HELPER_init() (void(0))
#endif
-#endif /* UHS_PRINTF_HELPER_H */
+#endif /* UHS_PRINTF_HELPER_H */
diff --git a/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/macro_logic.h b/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/macro_logic.h
index f368604a9ad5..114064044d17 100644
--- a/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/macro_logic.h
+++ b/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/macro_logic.h
@@ -10,7 +10,7 @@
*/
#ifndef MACRO_LOGIC_H
-#define MACRO_LOGIC_H
+#define MACRO_LOGIC_H
#define AJK_CAT(a, ...) AJK_PRIMITIVE_CAT(a, __VA_ARGS__)
#define AJK_PRIMITIVE_CAT(a, ...) a ## __VA_ARGS__
@@ -150,4 +150,4 @@ Make 3 bogus function bodies
AJK_MAKE_FUNS(unsigned Cfunc,(arg1, arg2),3,BODY)
#endif
-#endif /* MACRO_LOGIC_H */
+#endif /* MACRO_LOGIC_H */
diff --git a/Marlin/src/sd/usb_flashdrive/lib-uhs3/dyn_SWI/SWI_INLINE.h b/Marlin/src/sd/usb_flashdrive/lib-uhs3/dyn_SWI/SWI_INLINE.h
index f23d281e2885..5408a94ade70 100644
--- a/Marlin/src/sd/usb_flashdrive/lib-uhs3/dyn_SWI/SWI_INLINE.h
+++ b/Marlin/src/sd/usb_flashdrive/lib-uhs3/dyn_SWI/SWI_INLINE.h
@@ -23,7 +23,7 @@
*/
#ifdef DYN_SWI_H
#ifndef SWI_INLINE_H
-#define SWI_INLINE_H
+#define SWI_INLINE_H
#ifndef SWI_MAXIMUM_ALLOWED
#define SWI_MAXIMUM_ALLOWED 4
@@ -240,7 +240,7 @@ int exec_SWI(const dyn_SWI* klass) {
}
#endif /* defined(__arm__) */
-#endif /* SWI_INLINE_H */
+#endif /* SWI_INLINE_H */
#else
#error "Never include SWI_INLINE.h directly, include dyn_SWI.h instead"
#endif
diff --git a/Marlin/src/sd/usb_flashdrive/lib-uhs3/dyn_SWI/dyn_SWI.h b/Marlin/src/sd/usb_flashdrive/lib-uhs3/dyn_SWI/dyn_SWI.h
index 2738c8c6ff5b..0fdb3ee3db95 100644
--- a/Marlin/src/sd/usb_flashdrive/lib-uhs3/dyn_SWI/dyn_SWI.h
+++ b/Marlin/src/sd/usb_flashdrive/lib-uhs3/dyn_SWI/dyn_SWI.h
@@ -20,7 +20,7 @@
*/
#ifndef DYN_SWI_H
-#define DYN_SWI_H
+#define DYN_SWI_H
#if defined(__arm__) || defined(ARDUINO_ARCH_PIC32)
@@ -109,10 +109,10 @@ extern "C"
#elif defined(CORE_TEENSY)
#ifndef NVIC_GET_ACTIVE
-#define NVIC_GET_ACTIVE(n) (*((volatile uint32_t *)0xE000E300 + ((n) >> 5)) & (1 << ((n) & 31)))
+#define NVIC_GET_ACTIVE(n) (*((volatile uint32_t *)0xE000E300 + ((n) >> 5)) & (1 << ((n) & 31)))
#endif
#ifndef NVIC_GET_PENDING
-#define NVIC_GET_PENDING(n) (*((volatile uint32_t *)0xE000E200 + ((n) >> 5)) & (1 << ((n) & 31)))
+#define NVIC_GET_PENDING(n) (*((volatile uint32_t *)0xE000E200 + ((n) >> 5)) & (1 << ((n) & 31)))
#ifndef SWI_IRQ_NUM
#ifdef __MK20DX256__
#define SWI_IRQ_NUM 17
@@ -169,4 +169,4 @@ extern int exec_SWI(const dyn_SWI* klass);
#define DDSB() (void(0))
#endif
#endif
-#endif /* DYN_SWI_H */
+#endif /* DYN_SWI_H */
diff --git a/README.md b/README.md
index 19cc7adb8e97..b0c93bb01a96 100644
--- a/README.md
+++ b/README.md
@@ -49,7 +49,7 @@ Marlin 2.0 introduces a layer of abstraction so that all the existing high-level
----|---------|-----|-----|----|-----|---
[STEVAL-3DP001V1](http://www.st.com/en/evaluation-tools/steval-3dp001v1.html)|[STM32F401VE Arm-Cortex M4](http://www.st.com/en/microcontrollers/stm32f401ve.html)|84MHz|512k|64+32k|3.3-5V|yes
[Smoothieboard](http://reprap.org/wiki/Smoothieboard)|LPC1769 ARM-Cortex M3|120MHz|512k|64k|3.3-5V|no
- [Adafruit Grand Central M4](https://www.adafruit.com/product/4064)|ARM-Cortex M4|120MHz|1M|256k|3.3V|yes
+ [Adafruit Grand Central M4](https://www.adafruit.com/product/4064)|[SAMD51P20A ARM-Cortex M4](https://www.microchip.com/wwwproducts/en/ATSAMD51P20A)|120MHz|1M|256k|3.3V|yes
## Submitting Patches
diff --git a/buildroot/bin/generate_version b/buildroot/bin/generate_version
index 5a07ef5b1142..c2bcbdc758a4 100755
--- a/buildroot/bin/generate_version
+++ b/buildroot/bin/generate_version
@@ -2,10 +2,10 @@
#
# generate_version
#
-# Make a _Version.h file
+# Make a Version.h file to accompany CUSTOM_VERSION_FILE
#
-DIR=${1:-"Marlin/src/inc"}
+DIR=${1:-"Marlin"}
# MRCC3=$( git merge-base HEAD upstream/bugfix-2.0.x 2>/dev/null )
# MRCC2=$( git merge-base HEAD upstream/bugfix-1.1.x 2>/dev/null )
@@ -44,7 +44,30 @@ SOURCE_CODE_URL=$(awk -F'"' \
WEBSITE_URL=$(awk -F'"' \
'/#define WEBSITE_URL/{ print $2 }' < "${DIR}/Version.h")
-cat > "${DIR}/_Version.h" < "${DIR}/Version.h" <.
+ *
+ */
+#pragma once
+
/**
* THIS FILE IS AUTOMATICALLY GENERATED DO NOT MANUALLY EDIT IT.
* IT DOES NOT GET COMMITTED TO THE REPOSITORY.
@@ -53,15 +76,69 @@ cat > "${DIR}/_Version.h" <> ip
+
+ # load a byte into IP
+ ip = r0[loop_counter]
+
+ # XOR the seed with r7
+ xor_seed = xor_seed ^ r7
+
+ # and then with IP
+ xor_seed = xor_seed ^ ip
+
+ #Now store the byte back
+ r1[loop_counter] = xor_seed & 0xFF
+
+ #increment the loop_counter
+ loop_counter = loop_counter + 1
+
+
+def encrypt_file(input, output_file, file_length):
+ input_file = bytearray(input.read())
+ block_size = 0x800
+ key_length = 0x18
+ file_key = 0xDAB27F94
+
+ xor_crc = 0xef3d4323;
+
+ # the input file is exepcted to be in chunks of 0x800
+ # so round the size
+ while len(input_file) % block_size != 0:
+ input_file.extend(b'0x0')
+
+ # write the file header
+ output_file.write(struct.pack(">I", 0x443D2D3F))
+ # encrypt the contents using a known file header key
+
+ # write the file_key
+ output_file.write(struct.pack(">I", 0x947FB2DA))
+
+ #TODO - how to enforce that the firmware aligns to block boundaries?
+ block_count = int(len(input_file) / block_size)
+ print "Block Count is ", block_count
+ for block_number in range(0, block_count):
+ block_offset = (block_number * block_size)
+ block_end = block_offset + block_size
+ block_array = bytearray(input_file[block_offset: block_end])
+ xor_block(block_array, block_array, block_number, block_size, file_key)
+ for n in range (0, block_size):
+ input_file[block_offset + n] = block_array[n]
+
+ # update the expected CRC value.
+ xor_crc = calculate_crc(block_array, xor_crc)
+
+ # write CRC
+ output_file.write(struct.pack("= 320 and position < 31040:
byte = chr(ord(byte) ^ key[position & 31])
+ if sys.version_info[0] > 2:
+ byte = bytes(byte, 'latin1')
robin.write(byte)
position += 1
finally:
diff --git a/buildroot/share/PlatformIO/scripts/mks_robin_lite.py b/buildroot/share/PlatformIO/scripts/mks_robin_lite.py
index c11bbb37f674..95cb2a53ea49 100644
--- a/buildroot/share/PlatformIO/scripts/mks_robin_lite.py
+++ b/buildroot/share/PlatformIO/scripts/mks_robin_lite.py
@@ -10,6 +10,7 @@
# Encrypt ${PROGNAME}.bin and save it as 'mksLite.bin'
def encrypt(source, target, env):
import os
+ import sys
key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
@@ -22,6 +23,8 @@ def encrypt(source, target, env):
byte = firmware.read(1)
if position >= 320 and position < 31040:
byte = chr(ord(byte) ^ key[position & 31])
+ if sys.version_info[0] > 2:
+ byte = bytes(byte, 'latin1')
robin.write(byte)
position += 1
finally:
diff --git a/buildroot/share/PlatformIO/scripts/mks_robin_mini.py b/buildroot/share/PlatformIO/scripts/mks_robin_mini.py
index 2b3ba6f90d45..62b2091dd5b2 100755
--- a/buildroot/share/PlatformIO/scripts/mks_robin_mini.py
+++ b/buildroot/share/PlatformIO/scripts/mks_robin_mini.py
@@ -10,6 +10,7 @@
# Encrypt ${PROGNAME}.bin and save it as 'Robin_mini.bin'
def encrypt(source, target, env):
import os
+ import sys
key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
@@ -22,6 +23,8 @@ def encrypt(source, target, env):
byte = firmware.read(1)
if position >= 320 and position < 31040:
byte = chr(ord(byte) ^ key[position & 31])
+ if sys.version_info[0] > 2:
+ byte = bytes(byte, 'latin1')
robin.write(byte)
position += 1
finally:
diff --git a/buildroot/share/PlatformIO/scripts/mks_robin_nano.py b/buildroot/share/PlatformIO/scripts/mks_robin_nano.py
index 4bfe93a23524..6a195fa089ea 100755
--- a/buildroot/share/PlatformIO/scripts/mks_robin_nano.py
+++ b/buildroot/share/PlatformIO/scripts/mks_robin_nano.py
@@ -10,6 +10,7 @@
# Encrypt ${PROGNAME}.bin and save it as 'Robin_nano.bin'
def encrypt(source, target, env):
import os
+ import sys
key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
@@ -22,9 +23,9 @@ def encrypt(source, target, env):
byte = firmware.read(1)
if position >= 320 and position < 31040:
byte = chr(ord(byte) ^ key[position & 31])
- robin.write(byte.encode('charmap'))
- else:
- robin.write(byte)
+ if sys.version_info[0] > 2:
+ byte = bytes(byte, 'latin1')
+ robin.write(byte)
position += 1
finally:
firmware.close()
diff --git a/buildroot/share/fonts/genallfont.sh b/buildroot/share/fonts/genallfont.sh
index 5c01303a3892..d95d203b5a64 100755
--- a/buildroot/share/fonts/genallfont.sh
+++ b/buildroot/share/fonts/genallfont.sh
@@ -62,7 +62,7 @@ OLDWD=`pwd`
#
# By default loop through all languages
#
-LANGS_DEFAULT="an bg ca cz da de el el-gr en es eu fi fr gl hr it jp-kana ko_KR nl pl pt pt-br ru sk tr uk vi zh_CN zh_TW test"
+LANGS_DEFAULT="an bg ca cz da de el el_gr en es eu fi fr gl hr it jp_kana ko_KR nl pl pt pt_br ru sk tr uk vi zh_CN zh_TW test"
#
# Generate data for language list MARLIN_LANGS or all if not provided
diff --git a/buildroot/share/fonts/marlin-6x12-3.bdf b/buildroot/share/fonts/marlin-6x12-3.bdf
index b55e1a9a903f..ef90656eba1b 100644
--- a/buildroot/share/fonts/marlin-6x12-3.bdf
+++ b/buildroot/share/fonts/marlin-6x12-3.bdf
@@ -1,7 +1,7 @@
STARTFONT 2.1
FONT -Marlin6x12-Fixed-Medium-R-SemiCondensed--12-90-100-100-C-111-ISO10646-1
SIZE 12 75 75
-FONTBOUNDINGBOX 12 13 0 -2
+FONTBOUNDINGBOX 12 15 0 -2
COMMENT "Generated by fontforge, http://fontforge.sourceforge.net"
COMMENT "Marlin 6x12 Fixed, for menu display"
COMMENT "This font is based on the X Windows' 6x12 '-Misc-Fixed-Medium-R-SemiCondensed--12-110-75-75-C-60-ISO10646-1'. Marlin symbols added at position 1-9. Added jp-kana data. Other missing char data from wqy-bitmapsong-bdf-1.0.0-RC1. Some chars tweaked for LCD display, such as ',;c69' etc."
@@ -73075,8 +73075,8 @@ ENDCHAR
STARTCHAR U_3099
ENCODING 12441
SWIDTH 1000 0
-DWIDTH 12 0
-BBX 4 3 0 7
+DWIDTH 6 0
+BBX 4 3 0 5
BITMAP
20
90
@@ -73085,8 +73085,8 @@ ENDCHAR
STARTCHAR U_309B
ENCODING 12443
SWIDTH 1000 0
-DWIDTH 12 0
-BBX 4 3 0 6
+DWIDTH 6 0
+BBX 4 3 0 5
BITMAP
20
90
@@ -73095,8 +73095,8 @@ ENDCHAR
STARTCHAR U_309C
ENCODING 12444
SWIDTH 1000 0
-DWIDTH 12 0
-BBX 3 3 0 6
+DWIDTH 6 0
+BBX 3 3 0 5
BITMAP
40
A0
@@ -73106,7 +73106,7 @@ STARTCHAR u30A0
ENCODING 12448
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 3 0 1
+BBX 5 3 0 3
BITMAP
F8
00
@@ -73116,43 +73116,47 @@ STARTCHAR u30A1
ENCODING 12449
SWIDTH 545 0
DWIDTH 6 0
-BBX 4 4 0 0
+BBX 4 5 0 0
BITMAP
F0
10
60
40
+80
ENDCHAR
STARTCHAR u30A2
ENCODING 12450
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 5 7 0 0
BITMAP
F8
08
28
30
20
+20
40
ENDCHAR
STARTCHAR u30A3
ENCODING 12451
SWIDTH 545 0
DWIDTH 6 0
-BBX 3 4 1 0
+BBX 4 5 0 0
BITMAP
+10
+20
+60
+A0
20
-40
-C0
-40
ENDCHAR
STARTCHAR u30A4
ENCODING 12452
SWIDTH 545 0
DWIDTH 6 0
-BBX 4 6 0 0
+BBX 5 7 0 0
BITMAP
+08
10
20
60
@@ -73164,31 +73168,33 @@ STARTCHAR u30A5
ENCODING 12453
SWIDTH 545 0
DWIDTH 6 0
-BBX 4 4 0 0
+BBX 4 5 0 0
BITMAP
20
F0
90
+10
20
ENDCHAR
STARTCHAR u30A6
ENCODING 12454
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 5 7 0 0
BITMAP
20
F8
88
+88
08
10
-20
+60
ENDCHAR
STARTCHAR u30A7
ENCODING 12455
SWIDTH 545 0
DWIDTH 6 0
-BBX 3 4 1 0
+BBX 3 4 0 0
BITMAP
E0
40
@@ -73199,22 +73205,24 @@ STARTCHAR u30A8
ENCODING 12456
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
F8
20
20
20
+20
F8
ENDCHAR
STARTCHAR u30A9
ENCODING 12457
SWIDTH 545 0
DWIDTH 6 0
-BBX 4 4 0 0
+BBX 4 5 0 0
BITMAP
20
F0
+20
60
A0
ENDCHAR
@@ -73222,10 +73230,11 @@ STARTCHAR u30AA
ENCODING 12458
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 5 7 0 0
BITMAP
10
F8
+10
30
50
90
@@ -73235,92 +73244,101 @@ STARTCHAR u30AB
ENCODING 12459
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 5 7 0 0
BITMAP
40
F8
48
48
48
-90
+48
+98
ENDCHAR
STARTCHAR u30AC
ENCODING 12460
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 8 0 0
+BBX 5 9 0 0
BITMAP
28
-00
+08
40
F8
48
48
48
-90
+48
+98
ENDCHAR
STARTCHAR u30AD
ENCODING 12461
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 5 7 0 0
BITMAP
20
F8
20
-F8
-20
20
+F8
+10
+10
ENDCHAR
STARTCHAR u30AE
ENCODING 12462
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 8 0 0
+BBX 5 9 0 0
BITMAP
28
-00
-20
-F8
+08
20
F8
20
20
+F8
+10
+10
ENDCHAR
STARTCHAR u30AF
ENCODING 12463
SWIDTH 545 0
DWIDTH 6 0
-BBX 4 5 0 0
+BBX 5 7 0 0
BITMAP
-70
-90
+40
+78
+48
+88
+08
10
-20
-C0
+60
ENDCHAR
STARTCHAR u30B0
ENCODING 12464
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 7 0 0
+BBX 5 9 0 0
BITMAP
28
-00
-70
-90
+08
+40
+78
+48
+88
+08
10
-20
-C0
+60
ENDCHAR
STARTCHAR u30B1
ENCODING 12465
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 5 7 0 0
BITMAP
-40
-78
+80
+F8
+90
90
10
10
@@ -73330,12 +73348,13 @@ STARTCHAR u30B2
ENCODING 12466
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 8 0 0
+BBX 5 9 0 0
BITMAP
28
-00
-40
-78
+28
+80
+F8
+90
90
10
10
@@ -73345,65 +73364,71 @@ STARTCHAR u30BB3
ENCODING 12467
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
F8
08
08
08
+08
F8
ENDCHAR
STARTCHAR u30B4
ENCODING 12468
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 7 0 0
+BBX 5 9 0 0
BITMAP
28
+28
00
F8
08
08
08
+08
F8
ENDCHAR
STARTCHAR u30BB5
ENCODING 12469
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 5 7 0 0
BITMAP
50
F8
50
+50
+50
10
20
-40
ENDCHAR
STARTCHAR u30B6
ENCODING 12470
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 8 0 0
+BBX 5 9 0 0
BITMAP
28
-00
+08
50
F8
50
+50
+50
10
20
-40
ENDCHAR
STARTCHAR u30B7
ENCODING 12471
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
C0
08
C8
+08
10
E0
ENDCHAR
@@ -73411,13 +73436,19 @@ STARTCHAR u30B8
ENCODING 12472
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 7 0 0
+BBX 7 13 0 0
BITMAP
+02
+00
+00
+00
+28
28
00
C0
08
C8
+08
10
E0
ENDCHAR
@@ -73425,9 +73456,10 @@ STARTCHAR u30B9
ENCODING 12473
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
-F8
+70
+10
10
20
50
@@ -73437,11 +73469,13 @@ STARTCHAR u30BA
ENCODING 12474
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 7 0 0
+BBX 5 9 0 0
BITMAP
28
+28
00
-F8
+70
+10
10
20
50
@@ -73451,9 +73485,10 @@ STARTCHAR u30BB
ENCODING 12475
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 5 7 0 0
BITMAP
40
+40
F8
48
50
@@ -73464,10 +73499,11 @@ STARTCHAR u30BC
ENCODING 12476
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 8 0 0
+BBX 5 9 0 0
BITMAP
28
-00
+08
+40
40
F8
48
@@ -73479,37 +73515,42 @@ STARTCHAR u30BD
ENCODING 12477
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
88
-88
+48
48
10
-60
+10
+20
ENDCHAR
STARTCHAR u30BE
ENCODING 12478
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 7 0 0
+BBX 5 9 0 0
BITMAP
28
+28
00
88
-88
+48
48
10
-60
+10
+20
ENDCHAR
STARTCHAR u30BF
ENCODING 12479
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 7 0 0
BITMAP
+40
78
48
A8
+18
10
60
ENDCHAR
@@ -73517,13 +73558,15 @@ STARTCHAR u30C0
ENCODING 12480
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 7 0 0
+BBX 5 9 0 0
BITMAP
28
-00
+08
+40
78
48
A8
+18
10
60
ENDCHAR
@@ -73531,28 +73574,30 @@ STARTCHAR u30C1
ENCODING 12481
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 5 7 0 0
BITMAP
10
-E0
+60
20
F8
20
+20
40
ENDCHAR
STARTCHAR u30C2
ENCODING 12482
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 8 0 0
+BBX 5 9 0 0
BITMAP
28
-00
+08
10
-E0
+60
20
F8
20
+20
40
ENDCHAR
STARTCHAR u30C3
@@ -73570,66 +73615,72 @@ STARTCHAR u30C4
ENCODING 12484
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
A8
A8
+A8
08
10
-20
+60
ENDCHAR
STARTCHAR u30C5
ENCODING 12485
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 7 0 0
+BBX 5 9 0 0
BITMAP
28
+28
00
A8
A8
+A8
08
10
-20
+60
ENDCHAR
STARTCHAR u30C6
ENCODING 12486
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 5 7 0 0
BITMAP
70
00
F8
20
20
+20
40
ENDCHAR
STARTCHAR u30C7
ENCODING 12487
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 8 0 0
+BBX 5 9 0 0
BITMAP
28
-00
+08
70
00
F8
20
20
+20
40
ENDCHAR
STARTCHAR u30C8
ENCODING 12488
SWIDTH 545 0
DWIDTH 6 0
-BBX 3 6 1 0
+BBX 4 7 1 0
BITMAP
80
80
C0
A0
+90
80
80
ENDCHAR
@@ -73637,14 +73688,15 @@ STARTCHAR u30C9
ENCODING 12489
SWIDTH 545 0
DWIDTH 6 0
-BBX 4 8 1 0
+BBX 4 9 1 0
BITMAP
50
-00
+10
80
80
C0
A0
+90
80
80
ENDCHAR
@@ -73652,9 +73704,10 @@ STARTCHAR u30CA
ENCODING 12490
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 5 7 0 0
BITMAP
20
+20
F8
20
20
@@ -73665,38 +73718,41 @@ STARTCHAR u30CB
ENCODING 12491
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
70
00
00
00
+00
F8
ENDCHAR
STARTCHAR u30CC
ENCODING 12492
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
-F8
+78
08
-50
-20
-D0
+28
+10
+28
+C0
ENDCHAR
STARTCHAR u30CD
ENCODING 12493
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 5 7 0 0
BITMAP
20
-F8
+70
10
20
70
A8
+20
ENDCHAR
STARTCHAR u30CE
ENCODING 12494
@@ -73707,7 +73763,7 @@ BITMAP
20
20
20
-20
+40
40
80
ENDCHAR
@@ -73715,11 +73771,12 @@ STARTCHAR u30CF
ENCODING 12495
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
10
-88
-88
+50
+50
+48
88
88
ENDCHAR
@@ -73727,13 +73784,15 @@ STARTCHAR u30D0
ENCODING 12496
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 7 0 0
+BBX 5 9 0 0
BITMAP
28
+28
00
10
-88
-88
+50
+50
+48
88
88
ENDCHAR
@@ -73741,14 +73800,15 @@ STARTCHAR u30D1
ENCODING 12497
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 8 0 0
+BBX 5 9 0 0
BITMAP
18
18
00
10
-88
-88
+50
+50
+48
88
88
ENDCHAR
@@ -73756,52 +73816,57 @@ STARTCHAR u30D2
ENCODING 12498
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 4 6 0 0
BITMAP
80
-80
-F8
+90
+E0
80
80
-78
+70
ENDCHAR
STARTCHAR u30D3
ENCODING 12499
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 7 0 0
+BBX 5 9 0 0
BITMAP
28
+28
+00
80
-80
-F8
+90
+E0
80
80
-78
+70
ENDCHAR
STARTCHAR u30D4
ENCODING 12500
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 7 0 0
+BBX 5 9 0 0
BITMAP
18
-98
+18
+00
80
-F8
+90
+E0
80
80
-78
+70
ENDCHAR
STARTCHAR u30D5
ENCODING 12501
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
F8
08
08
+08
10
60
ENDCHAR
@@ -73809,13 +73874,15 @@ STARTCHAR u30D6
ENCODING 12502
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 7 0 0
+BBX 5 9 0 0
BITMAP
28
+28
00
F8
08
08
+08
10
60
ENDCHAR
@@ -73823,7 +73890,7 @@ STARTCHAR u30D7
ENCODING 12503
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 8 0 0
+BBX 5 9 0 0
BITMAP
18
18
@@ -73831,6 +73898,7 @@ BITMAP
F8
08
08
+08
10
60
ENDCHAR
@@ -73838,72 +73906,79 @@ STARTCHAR u30D8
ENCODING 12504
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 4 0 1
+BBX 5 5 0 1
BITMAP
-40
+60
A0
10
+10
08
ENDCHAR
STARTCHAR u30D9
ENCODING 12505
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 1
+BBX 5 8 0 1
BITMAP
28
+28
00
-40
+60
A0
10
+10
08
ENDCHAR
STARTCHAR u30DA
ENCODING 12506
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 1
+BBX 5 8 0 1
BITMAP
18
18
-40
+00
+60
A0
10
+10
08
ENDCHAR
STARTCHAR u30DB
ENCODING 12507
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 5 7 0 0
BITMAP
20
F8
20
A8
A8
+A8
20
ENDCHAR
STARTCHAR u30DC
ENCODING 12508
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 8 0 0
+BBX 5 9 0 0
BITMAP
28
-00
+08
20
F8
20
A8
A8
+A8
20
ENDCHAR
STARTCHAR u30DD
ENCODING 12509
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 8 0 0
+BBX 5 9 0 0
BITMAP
18
18
@@ -73912,16 +73987,18 @@ F8
20
A8
A8
+A8
20
ENDCHAR
STARTCHAR u30DE
ENCODING 12510
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
F8
08
+08
50
20
10
@@ -73930,23 +74007,26 @@ STARTCHAR u30DF
ENCODING 12511
SWIDTH 545 0
DWIDTH 6 0
-BBX 4 5 1 0
+BBX 4 6 1 0
BITMAP
E0
00
E0
00
-F0
+C0
+30
ENDCHAR
STARTCHAR u30E0
ENCODING 12512
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 7 0 0
BITMAP
20
+20
+20
40
-88
+48
F8
08
ENDCHAR
@@ -73954,10 +74034,11 @@ STARTCHAR u30E1
ENCODING 12513
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
08
-28
+48
+30
10
28
C0
@@ -73966,22 +74047,24 @@ STARTCHAR u30E2
ENCODING 12514
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
-F8
+F0
40
F8
40
+40
38
ENDCHAR
STARTCHAR u30E3
ENCODING 12515
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 4 0 0
+BBX 5 5 0 0
BITMAP
40
F8
+48
50
40
ENDCHAR
@@ -73989,9 +74072,10 @@ STARTCHAR u30E4
ENCODING 12516
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 5 7 0 0
BITMAP
40
+40
F8
48
50
@@ -74002,23 +74086,25 @@ STARTCHAR u30E5
ENCODING 12517
SWIDTH 545 0
DWIDTH 6 0
-BBX 4 4 0 0
+BBX 4 5 0 0
BITMAP
60
20
20
+20
F0
ENDCHAR
STARTCHAR u30E6
ENCODING 12518
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
70
10
10
10
+10
F8
ENDCHAR
STARTCHAR u30E7
@@ -74037,47 +74123,52 @@ STARTCHAR u30E8
ENCODING 12520
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
F8
08
F8
08
+08
F8
ENDCHAR
STARTCHAR u30E9
ENCODING 12521
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 5 7 0 0
BITMAP
70
00
F8
08
+08
10
-20
+60
ENDCHAR
STARTCHAR u30EA
ENCODING 12522
SWIDTH 545 0
DWIDTH 6 0
-BBX 4 6 0 0
+BBX 4 7 0 0
BITMAP
+10
90
90
90
90
10
-20
+60
ENDCHAR
STARTCHAR u30EB
ENCODING 12523
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 7 0 0
BITMAP
20
+20
+A0
A0
A8
A8
@@ -74087,54 +74178,58 @@ STARTCHAR u30EC
ENCODING 12524
SWIDTH 545 0
DWIDTH 6 0
-BBX 4 5 0 0
+BBX 5 6 0 0
BITMAP
80
80
-90
-A0
+80
+88
+B0
C0
ENDCHAR
STARTCHAR u30ED
ENCODING 12525
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
F8
88
88
88
+88
F8
ENDCHAR
STARTCHAR u30EE
ENCODING 12526
SWIDTH 545 0
DWIDTH 6 0
-BBX 4 4 0 0
+BBX 4 5 0 0
BITMAP
F0
90
10
-20
+10
+60
ENDCHAR
STARTCHAR u30EF
ENCODING 12527
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
F8
88
+88
08
10
-20
+60
ENDCHAR
STARTCHAR u30F0
ENCODING 12528
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 6 0 0
+BBX 5 7 0 0
BITMAP
10
F8
@@ -74142,16 +74237,18 @@ F8
50
F8
10
+10
ENDCHAR
STARTCHAR u30F1
ENCODING 12529
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
-F8
-08
-30
+70
+10
+20
+20
20
F8
ENDCHAR
@@ -74159,23 +74256,25 @@ STARTCHAR u30F2
ENCODING 12530
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
F8
08
F8
08
-30
+10
+60
ENDCHAR
STARTCHAR u30F3
ENCODING 12531
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 0
+BBX 5 6 0 0
BITMAP
C0
08
08
+08
10
E0
ENDCHAR
@@ -74183,36 +74282,39 @@ STARTCHAR u30F4
ENCODING 12532
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 8 0 0
+BBX 5 9 0 0
BITMAP
28
-00
+08
20
F8
88
+88
08
10
-20
+60
ENDCHAR
STARTCHAR u30F5
ENCODING 12533
SWIDTH 545 0
DWIDTH 6 0
-BBX 4 4 0 0
+BBX 4 5 0 0
BITMAP
40
F0
50
-A0
+50
+B0
ENDCHAR
STARTCHAR u30F6
ENCODING 12534
SWIDTH 545 0
DWIDTH 6 0
-BBX 4 4 0 0
+BBX 4 5 0 0
BITMAP
-40
+80
F0
+A0
20
40
ENDCHAR
@@ -74220,12 +74322,14 @@ STARTCHAR u30F7
ENCODING 12535
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 7 0 0
+BBX 5 9 0 0
BITMAP
28
+28
00
F8
88
+88
08
10
60
@@ -74234,28 +74338,31 @@ STARTCHAR u30F8
ENCODING 12536
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 8 0 0
+BBX 5 9 0 0
BITMAP
28
-00
+08
10
F8
50
50
F8
10
+10
ENDCHAR
STARTCHAR u30F9
ENCODING 12537
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 7 0 0
+BBX 5 9 0 0
BITMAP
28
+28
00
-F8
-08
-30
+70
+10
+20
+20
20
F8
ENDCHAR
@@ -74263,21 +74370,23 @@ STARTCHAR u30FA
ENCODING 12538
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 7 0 0
+BBX 5 9 0 0
BITMAP
28
+28
00
F8
08
F8
08
-30
+10
+60
ENDCHAR
STARTCHAR u30FB
ENCODING 12539
SWIDTH 545 0
DWIDTH 6 0
-BBX 2 2 2 2
+BBX 2 2 2 3
BITMAP
C0
C0
@@ -74286,15 +74395,16 @@ STARTCHAR u30FC
ENCODING 12540
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 1 0 2
+BBX 5 2 0 3
BITMAP
-F8
+80
+78
ENDCHAR
STARTCHAR u30FD
ENCODING 12541
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 4 0 1
+BBX 5 4 0 2
BITMAP
80
60
@@ -74305,9 +74415,11 @@ STARTCHAR u30FE
ENCODING 12542
SWIDTH 545 0
DWIDTH 6 0
-BBX 5 5 0 1
+BBX 5 7 0 2
BITMAP
28
+28
+00
80
60
10
diff --git a/buildroot/share/git/firstpush b/buildroot/share/git/firstpush
index 443166088c5c..132795b617d6 100755
--- a/buildroot/share/git/firstpush
+++ b/buildroot/share/git/firstpush
@@ -16,13 +16,15 @@ BRANCH=${INFO[5]}
git push --set-upstream origin $BRANCH
-TOOL=$(which gnome-open xdg-open open | awk '{ print $1 }')
+which xdg-open >/dev/null && TOOL=xdg-open
+which gnome-open >/dev/null && TOOL=gnome-open
+which open >/dev/null && TOOL=open
URL="https://github.com/$FORK/$REPO/commits/$BRANCH"
-if [ -z "$TOOL" ]; then
+if [ -z "$OPEN" ]; then
echo "Can't find a tool to open the URL:"
echo $URL
else
echo "Viewing commits on $BRANCH..."
- "$TOOL" "$URL"
+ "$OPEN" "$URL"
fi
diff --git a/buildroot/share/git/mfdoc b/buildroot/share/git/mfdoc
index eba599c612c5..f2a2b08204b6 100755
--- a/buildroot/share/git/mfdoc
+++ b/buildroot/share/git/mfdoc
@@ -16,14 +16,16 @@ BRANCH=${INFO[5]}
[[ $ORG == "MarlinFirmware" && $REPO == "MarlinDocumentation" ]] || { echo "Wrong repository." 1>&2; exit 1; }
opensite() {
- TOOL=$(which gnome-open xdg-open open | awk '{ print $1 }')
+ which xdg-open >/dev/null && TOOL=xdg-open
+ which gnome-open >/dev/null && TOOL=gnome-open
+ which open >/dev/null && TOOL=open
URL="http://127.0.0.1:4000/"
- if [ -z "$TOOL" ]; then
+ if [ -z "$OPEN" ]; then
echo "Can't find a tool to open the URL:"
echo $URL
else
echo "Opening preview site in the browser..."
- "$TOOL" "$URL"
+ "$OPEN" "$URL"
fi
}
diff --git a/buildroot/share/git/mfpr b/buildroot/share/git/mfpr
index 73af049ab1b3..0220c0aa8e16 100755
--- a/buildroot/share/git/mfpr
+++ b/buildroot/share/git/mfpr
@@ -23,15 +23,17 @@ OLDBRANCH=${INFO[5]}
# See if it's been pushed yet
if [ -z "$(git branch -vv | grep ^\* | grep \\[origin)" ]; then firstpush; fi
-TOOL=$(which gnome-open xdg-open open | awk '{ print $1 }')
+which xdg-open >/dev/null && TOOL=xdg-open
+which gnome-open >/dev/null && TOOL=gnome-open
+which open >/dev/null && TOOL=open
URL="https://github.com/$ORG/$REPO/compare/$TARG...$FORK:$BRANCH?expand=1"
-if [ -z "$TOOL" ]; then
+if [ -z "$OPEN" ]; then
echo "Can't find a tool to open the URL:"
echo $URL
else
echo "Opening a New PR Form..."
- "$TOOL" "$URL"
+ "$OPEN" "$URL"
fi
[[ $BRANCH != $OLDBRANCH ]] && git checkout $OLDBRANCH
diff --git a/buildroot/share/git/mfpub b/buildroot/share/git/mfpub
index 29eb0543d7e1..f77b9236566d 100755
--- a/buildroot/share/git/mfpub
+++ b/buildroot/share/git/mfpub
@@ -77,15 +77,17 @@ else
git push -f origin
fi
- TOOL=$(which gnome-open xdg-open open | awk '{ print $1 }')
+ which xdg-open >/dev/null && TOOL=xdg-open
+ which gnome-open >/dev/null && TOOL=gnome-open
+ which open >/dev/null && TOOL=open
URL="https://github.com/$ORG/$REPO/compare/$TARG...$FORK:$BRANCH?expand=1"
- if [ -z "$TOOL" ]; then
+ if [ -z "$OPEN" ]; then
echo "Can't find a tool to open the URL:"
echo $URL
else
echo "Opening a New PR Form..."
- "$TOOL" "$URL"
+ "$OPEN" "$URL"
fi
fi
@@ -116,14 +118,16 @@ git checkout gh-pages || { echo "Something went wrong!"; exit 1; }
rsync -av ${TMPFOLDER}/ ./
opensite() {
- TOOL=$(which gnome-open xdg-open open | awk '{ print $1 }')
+ which xdg-open >/dev/null && TOOL=xdg-open
+ which gnome-open >/dev/null && TOOL=gnome-open
+ which open >/dev/null && TOOL=open
URL="http://marlinfw.org/"
- if [ -z "$TOOL" ]; then
+ if [ -z "$OPEN" ]; then
echo "Can't find a tool to open the URL:"
echo $URL
else
echo "Opening the site in the browser..."
- "$TOOL" "$URL"
+ "$OPEN" "$URL"
fi
}
diff --git a/buildroot/share/git/mftest b/buildroot/share/git/mftest
index 3ee78c49a08e..a83a309bd91b 100755
--- a/buildroot/share/git/mftest
+++ b/buildroot/share/git/mftest
@@ -11,11 +11,13 @@ MFINFO=$(mfinfo) || exit 1
[[ -d Marlin/src ]] || { echo "Please 'cd' up to repo root." ; exit 1 ; }
TESTPATH=buildroot/share/tests
+STATE_FILE=$( echo ./.pio/.mftestrc )
shopt -s extglob nocasematch
-# Get test
+# Get the environment and test number from the command
TESTENV=${1:-'-'}
+CHOICE=${2:-0}
# Allow shorthand for test name
case $TESTENV in
@@ -37,6 +39,15 @@ case $TESTENV in
t32) TESTENV='teensy31' ;;
t35) TESTENV='teensy35' ;;
t36) TESTENV='teensy35' ;;
+ # Build with the last-built env
+ -r) [[ -f "$STATE_FILE" ]] || { echo "No previous (-r) build state found." ; exit 1 ; }
+ read TESTENV <"$STATE_FILE"
+ platformio run --project-dir . -e $TESTENV
+ exit
+ ;;
+ # A -y may come first
+ -y) TESTENV=${2:-'-'} ; CHOICE=${3:-0} ;;
+ -[a-z]) echo "Unknown flag $TESTENV" ; exit 1 ;;
-) ;;
esac
@@ -77,9 +88,6 @@ OUT=$( cat $TESTPATH/$TESTENV-tests 2>/dev/null ) || { echo "Can't find test '$T
# TODO: List test descriptions with numbers
TESTCOUNT=$( awk "/$ISEXEC/{a++}END{print a}" <<<"$OUT" )
-# Get the entered or interactive test index
-CHOICE=${2:-0}
-
# User entered a number?
(( CHOICE && CHOICE > TESTCOUNT )) && { echo "Invalid test index '$CHOICE' (1-$TESTCOUNT)." ; exit 1 ; }
@@ -135,6 +143,16 @@ echo "$OUT" | {
done
}
+# Get a -y parameter the lazy way
+[[ "$2" == "-y" || "$3" == "-y" ]] && BUILD_YES='Y'
+
# Build the test too?
-echo ; read -p "Build $TESTENV test #$CHOICE (y/N) ? " BUILD_YES
-[[ $BUILD_YES == 'Y' || $BUILD_YES == 'Yes' ]] && platformio run --project-dir . -e $TESTENV
+if [[ $BUILD_YES != 'Y' ]]; then
+ echo
+ read -p "Build $TESTENV test #$CHOICE (y/N) ? " BUILD_YES
+fi
+
+[[ $BUILD_YES == 'Y' || $BUILD_YES == 'Yes' ]] && {
+ platformio run --project-dir . -e $TESTENV
+ echo "$TESTENV" >"$STATE_FILE"
+}
diff --git a/buildroot/share/pin_interrupt_test/pin_interrupt_test.ino b/buildroot/share/pin_interrupt_test/pin_interrupt_test.ino
index 39545aa7cbbc..43833ed902f5 100644
--- a/buildroot/share/pin_interrupt_test/pin_interrupt_test.ino
+++ b/buildroot/share/pin_interrupt_test/pin_interrupt_test.ino
@@ -2,17 +2,16 @@
// Compile with the same build settings you'd use for Marlin.
#if defined(ARDUINO_AVR_MEGA2560) || defined(ARDUINO_AVR_MEGA)
- #undef digitalPinToPCICR
- #define digitalPinToPCICR(p) ( ((p) >= 10 && (p) <= 15) || \
- ((p) >= 50 && (p) <= 53) || \
- ((p) >= 62 && (p) <= 69) ? &PCICR : nullptr)
+ #define moreDigitalPinToPCICR(p) digitalPinToPCICR(WITHIN(p, 13, 14) ? 10 : p)
+#else
+ #define moreDigitalPinToPCICR(p) digitalPinToPCICR(p)
#endif
void setup() {
Serial.begin(9600);
Serial.println("PINs causing interrupts are:");
for (int i = 2; i < NUM_DIGITAL_PINS; i++) {
- if (digitalPinToPCICR(i) || (int)digitalPinToInterrupt(i) != -1) {
+ if (moreDigitalPinToPCICR(i) || (int)digitalPinToInterrupt(i) != -1) {
for (int j = 0; j < NUM_ANALOG_INPUTS; j++) {
if (analogInputToDigitalPin(j) == i) {
Serial.print('A');
diff --git a/buildroot/share/tests/DUE-tests b/buildroot/share/tests/DUE-tests
index 609790b5b8d2..80fb0b3148b6 100755
--- a/buildroot/share/tests/DUE-tests
+++ b/buildroot/share/tests/DUE-tests
@@ -9,6 +9,7 @@ set -e
backup_ramps # pins_set is used below...
restore_configs
+opt_set LCD_LANGUAGE bg
opt_set MOTHERBOARD BOARD_RAMPS4DUE_EFB
opt_set TEMP_SENSOR_0 -2
opt_set TEMP_SENSOR_BED 2
@@ -23,7 +24,7 @@ opt_enable S_CURVE_ACCELERATION EEPROM_SETTINGS GCODE_MACROS \
AUTO_BED_LEVELING_BILINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \
SKEW_CORRECTION SKEW_CORRECTION_FOR_Z SKEW_CORRECTION_GCODE CALIBRATION_GCODE \
BACKLASH_COMPENSATION BACKLASH_GCODE BAUD_RATE_GCODE BEZIER_CURVE_SUPPORT \
- FWRETRACT ARC_P_CIRCLES CNC_WORKSPACE_PLANES CNC_COORDINATE_SYSTEMS \
+ FWRETRACT ARC_SUPPORT ARC_P_CIRCLES CNC_WORKSPACE_PLANES CNC_COORDINATE_SYSTEMS \
PSU_CONTROL AUTO_POWER_CONTROL \
SLOW_PWM_HEATERS THERMAL_PROTECTION_CHAMBER \
PINS_DEBUGGING MAX7219_DEBUG M114_DETAIL \
@@ -37,8 +38,10 @@ exec_test $1 $2 "RAMPS4DUE_EFB with ABL (Bilinear), EXTENSIBLE_UI, S-Curve, many
restore_configs
opt_set MOTHERBOARD BOARD_RADDS
-opt_enable USE_XMAX_PLUG USE_YMAX_PLUG BLTOUCH AUTO_BED_LEVELING_BILINEAR \
- Z_TRIPLE_STEPPER_DRIVERS Z_TRIPLE_ENDSTOPS Z_STEPPER_AUTO_ALIGN ENDSTOPPULLUPS
+opt_enable USE_XMAX_PLUG USE_YMAX_PLUG ENDSTOPPULLUPS BLTOUCH AUTO_BED_LEVELING_BILINEAR \
+ Z_TRIPLE_STEPPER_DRIVERS Z_TRIPLE_ENDSTOPS Z_STEPPER_AUTO_ALIGN \
+ Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #LULZBOT_TOUCH_UI LCD_ALEPHOBJECTS_CLCD_UI OTHER_PIN_LAYOUT
opt_add Z2_MAX_ENDSTOP_INVERTING false
opt_add Z3_MAX_ENDSTOP_INVERTING false
pins_set ramps/RAMPS X_MAX_PIN -1
@@ -51,6 +54,7 @@ exec_test $1 $2 "RADDS with ABL (Bilinear), Z_TRIPLE_STEPPER_DRIVERS and Z_STEPP
# Test SWITCHING_EXTRUDER
#
restore_configs
+opt_set LCD_LANGUAGE fi
opt_set MOTHERBOARD BOARD_RAMPS4DUE_EEF
opt_set EXTRUDERS 2
opt_set NUM_SERVOS 1
diff --git a/buildroot/share/tests/LPC1769-tests b/buildroot/share/tests/LPC1769-tests
index 8e23551dd4cb..641c50f3e326 100755
--- a/buildroot/share/tests/LPC1769-tests
+++ b/buildroot/share/tests/LPC1769-tests
@@ -50,7 +50,7 @@ opt_set Z_DRIVER_TYPE TMC2130
opt_enable AUTO_BED_LEVELING_BILINEAR EEPROM_SETTINGS EEPROM_CHITCHAT BAUD_RATE_GCODE \
TMC_USE_SW_SPI MONITOR_DRIVER_STATUS STEALTHCHOP_XY STEALTHCHOP_Z HYBRID_THRESHOLD \
SENSORLESS_PROBING X_STALL_SENSITIVITY Y_STALL_SENSITIVITY Z_STALL_SENSITIVITY TMC_DEBUG
-opt_disable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
+opt_disable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN PSU_CONTROL
exec_test $1 $2 "Cohesion3D Remix DELTA + ABL Bilinear + EEPROM + SENSORLESS_PROBING"
# clean up
diff --git a/buildroot/share/tests/STM32F103RC_bigtree_USB-tests b/buildroot/share/tests/STM32F103RC_bigtree_USB-tests
index 50c37e36de83..8c83c029e63c 100644
--- a/buildroot/share/tests/STM32F103RC_bigtree_USB-tests
+++ b/buildroot/share/tests/STM32F103RC_bigtree_USB-tests
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
#
-# Build tests for STM32F103RC Bigtreetech (SKR Mini v1.1)
+# Build tests for STM32F103RC Bigtreetech (SKR Mini E3)
#
# exit on first failure
@@ -10,10 +10,10 @@ set -e
# Build with the default configurations
#
restore_configs
-opt_set MOTHERBOARD BOARD_BIGTREE_SKR_MINI_V1_1
+opt_set MOTHERBOARD BOARD_BIGTREE_SKR_MINI_E3
opt_set SERIAL_PORT 1
opt_set SERIAL_PORT_2 -1
-exec_test $1 $2 "Bigtreetech SKR Mini v1.1 - Basic Configuration"
+exec_test $1 $2 "Bigtreetech SKR Mini E3 - Basic Configuration"
# clean up
restore_configs
diff --git a/buildroot/share/tests/esp32-tests b/buildroot/share/tests/esp32-tests
index 361750141bd2..9d44b14343f5 100755
--- a/buildroot/share/tests/esp32-tests
+++ b/buildroot/share/tests/esp32-tests
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
#
-# Build tests for esp32
+# Build tests for ESP32
#
# exit on first failure
@@ -10,7 +10,7 @@ set -e
# Build with the default configurations
#
restore_configs
-opt_set MOTHERBOARD BOARD_ESP32
+opt_set MOTHERBOARD BOARD_ESPRESSIF_ESP32
opt_enable WIFISUPPORT GCODE_MACROS BAUD_RATE_GCODE
opt_set "WIFI_SSID \"ssid\""
opt_set "WIFI_PWD \"password\""
diff --git a/buildroot/share/tests/megaatmega1280-tests b/buildroot/share/tests/megaatmega1280-tests
index c4ab0f4a71ae..05e262f6e73f 100644
--- a/buildroot/share/tests/megaatmega1280-tests
+++ b/buildroot/share/tests/megaatmega1280-tests
@@ -16,6 +16,7 @@ set -e
# Test MESH_BED_LEVELING feature, with LCD
#
restore_configs
+opt_set LCD_LANGUAGE an
opt_enable SPINDLE_FEATURE ULTIMAKERCONTROLLER LCD_BED_LEVELING \
MESH_BED_LEVELING ENABLE_LEVELING_FADE_HEIGHT MESH_G28_REST_ORIGIN \
G26_MESH_VALIDATION MESH_EDIT_MENU
diff --git a/buildroot/share/tests/megaatmega2560-tests b/buildroot/share/tests/megaatmega2560-tests
index bcd3e497f8d5..14ac826cd85b 100755
--- a/buildroot/share/tests/megaatmega2560-tests
+++ b/buildroot/share/tests/megaatmega2560-tests
@@ -31,17 +31,19 @@ opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER LCD_PROGRESS_BAR LCD_PROGRESS_BAR_TE
EEPROM_SETTINGS SDSUPPORT SD_REPRINT_LAST_SELECTED_FILE BINARY_FILE_TRANSFER \
BLINKM PCA9632 RGB_LED RGB_LED_R_PIN RGB_LED_G_PIN RGB_LED_B_PIN LED_CONTROL_MENU \
NEOPIXEL_LED CASE_LIGHT_ENABLE CASE_LIGHT_USE_NEOPIXEL CASE_LIGHT_MENU \
- NOZZLE_PARK_FEATURE ADVANCED_PAUSE_FEATURE FILAMENT_RUNOUT_DISTANCE_MM FILAMENT_RUNOUT_SENSOR \
- AUTO_BED_LEVELING_BILINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \
+ PID_PARAMS_PER_HOTEND PID_AUTOTUNE_MENU PID_EDIT_MENU LCD_SHOW_E_TOTAL \
+ NOZZLE_PARK_FEATURE FILAMENT_RUNOUT_SENSOR FILAMENT_RUNOUT_DISTANCE_MM \
+ ADVANCED_PAUSE_FEATURE FILAMENT_LOAD_UNLOAD_GCODES FILAMENT_UNLOAD_ALL_EXTRUDERS \
+ AUTO_BED_LEVELING_BILINEAR Z_MIN_PROBE_REPEATABILITY_TEST DISTINCT_E_FACTORS \
SKEW_CORRECTION SKEW_CORRECTION_FOR_Z SKEW_CORRECTION_GCODE \
BACKLASH_COMPENSATION BACKLASH_GCODE BAUD_RATE_GCODE BEZIER_CURVE_SUPPORT \
FWRETRACT ARC_P_CIRCLES CNC_WORKSPACE_PLANES CNC_COORDINATE_SYSTEMS \
PSU_CONTROL AUTO_POWER_CONTROL POWER_LOSS_RECOVERY POWER_LOSS_PIN POWER_LOSS_STATE \
- SLOW_PWM_HEATERS THERMAL_PROTECTION_CHAMBER \
+ SLOW_PWM_HEATERS THERMAL_PROTECTION_CHAMBER LIN_ADVANCE \
PINS_DEBUGGING MAX7219_DEBUG M114_DETAIL
opt_set TEMP_SENSOR_CHAMBER 3
opt_set HEATER_CHAMBER_PIN 45
-exec_test $1 $2 "RAMPS with 2 extruders, RepRap LCD, Linear ABL, LEDs, and many options"
+exec_test $1 $2 "RAMPS, 2 extruders, LCD/SD, Probe, ABL-Linear, PLR, LEDs, many options"
#
# Test a probeless build of AUTO_BED_LEVELING_UBL, with lots of extruders
@@ -49,6 +51,7 @@ exec_test $1 $2 "RAMPS with 2 extruders, RepRap LCD, Linear ABL, LEDs, and many
use_example_configs AnimationExample
opt_set SHOW_CUSTOM_BOOTSCREEN
opt_set MOTHERBOARD BOARD_AZTEEG_X3_PRO
+opt_set LCD_LANGUAGE fr
opt_set EXTRUDERS 5
opt_set TEMP_SENSOR_1 1
opt_set TEMP_SENSOR_2 5
@@ -57,9 +60,10 @@ opt_set TEMP_SENSOR_4 1000
opt_set TEMP_SENSOR_BED 1
opt_enable AUTO_BED_LEVELING_UBL RESTORE_LEVELING_AFTER_G28 DEBUG_LEVELING_FEATURE G26_MESH_VALIDATION ENABLE_LEVELING_FADE_HEIGHT SKEW_CORRECTION \
REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER LIGHTWEIGHT_UI STATUS_MESSAGE_SCROLLING BOOT_MARLIN_LOGO_SMALL \
- SDSUPPORT SDCARD_SORT_ALPHA USB_FLASH_DRIVE_SUPPORT SCROLL_LONG_FILENAMES \
+ SDSUPPORT SDCARD_SORT_ALPHA USB_FLASH_DRIVE_SUPPORT SCROLL_LONG_FILENAMES CANCEL_OBJECTS \
EEPROM_SETTINGS EEPROM_CHITCHAT GCODE_MACROS CUSTOM_USER_MENUS \
- MULTI_NOZZLE_DUPLICATION JUNCTION_DEVIATION LIN_ADVANCE QUICK_HOME \
+ MULTI_NOZZLE_DUPLICATION CLASSIC_JERK LIN_ADVANCE QUICK_HOME \
+ LCD_SET_PROGRESS_MANUALLY PRINT_PROGRESS_SHOW_DECIMALS SHOW_REMAINING_TIME \
BABYSTEPPING BABYSTEP_XY NANODLP_Z_SYNC I2C_POSITION_ENCODERS M114_DETAIL
exec_test $1 $2 "Azteeg X3 Pro with 5 extruders, RRDFGSC, probeless UBL, Linear Advance, and more"
@@ -67,7 +71,7 @@ exec_test $1 $2 "Azteeg X3 Pro with 5 extruders, RRDFGSC, probeless UBL, Linear
# Add a Sled Z Probe, use UBL Cartesian moves, use Japanese language
#
opt_enable Z_PROBE_SLED SKEW_CORRECTION SKEW_CORRECTION_FOR_Z SKEW_CORRECTION_GCODE
-opt_set LCD_LANGUAGE jp-kana
+opt_set LCD_LANGUAGE jp_kana
opt_disable SEGMENT_LEVELED_MOVES
opt_enable BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET DOUBLECLICK_FOR_Z_BABYSTEPPING BABYSTEP_HOTEND_Z_OFFSET BABYSTEP_DISPLAY_TOTAL M114_DETAIL
exec_test $1 $2 "... Sled Z Probe, Skew, UBL Cartesian moves, Japanese, and Z probe BABYSTEPPING"
@@ -77,10 +81,11 @@ exec_test $1 $2 "... Sled Z Probe, Skew, UBL Cartesian moves, Japanese, and Z pr
# ...with AUTO_BED_LEVELING_3POINT, DEBUG_LEVELING_FEATURE, EEPROM_SETTINGS, EEPROM_CHITCHAT, EXTENDED_CAPABILITIES_REPORT, and AUTO_REPORT_TEMPERATURES
#
restore_configs
-opt_enable ZONESTAR_LCD Z_PROBE_SERVO_NR Z_SERVO_ANGLES DEACTIVATE_SERVOS_AFTER_MOVE BOOT_MARLIN_LOGO_ANIMATED \
- AUTO_BED_LEVELING_3POINT DEBUG_LEVELING_FEATURE EEPROM_SETTINGS EEPROM_CHITCHAT M114_DETAIL
+opt_set LCD_LANGUAGE zh_CN
opt_set NUM_SERVOS 1
-opt_enable NO_VOLUMETRICS EXTENDED_CAPABILITIES_REPORT AUTO_REPORT_TEMPERATURES AUTOTEMP G38_PROBE_TARGET JOYSTICK
+opt_enable ZONESTAR_LCD Z_PROBE_SERVO_NR Z_SERVO_ANGLES DEACTIVATE_SERVOS_AFTER_MOVE BOOT_MARLIN_LOGO_ANIMATED \
+ AUTO_BED_LEVELING_3POINT DEBUG_LEVELING_FEATURE EEPROM_SETTINGS EEPROM_CHITCHAT M114_DETAIL \
+ NO_VOLUMETRICS EXTENDED_CAPABILITIES_REPORT AUTO_REPORT_TEMPERATURES AUTOTEMP G38_PROBE_TARGET JOYSTICK
exec_test $1 $2 "RAMPS with ZONESTAR_LCD, Servo Probe, 3-Point ABL, DEBUG_LEVELING_FEATURE, EEPROM, G38, and more"
#
@@ -88,6 +93,7 @@ exec_test $1 $2 "RAMPS with ZONESTAR_LCD, Servo Probe, 3-Point ABL, DEBUG_LEVELI
#
restore_configs
opt_set MOTHERBOARD BOARD_MINIRAMBO
+opt_set LCD_LANGUAGE de
opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT \
ULTIMAKERCONTROLLER SDSUPPORT PCA9632 LCD_INFO_MENU \
AUTO_BED_LEVELING_BILINEAR PROBE_MANUALLY LCD_BED_LEVELING G26_MESH_VALIDATION MESH_EDIT_MENU \
@@ -105,6 +111,7 @@ exec_test $1 $2 "MINIRAMBO with M100, PWM_MOTOR_CURRENT, PRINTCOUNTER, etc."
#
restore_configs
opt_set MOTHERBOARD BOARD_AZTEEG_X3_PRO
+opt_set LCD_LANGUAGE el_gr
opt_enable MIXING_EXTRUDER GRADIENT_MIX GRADIENT_VTOOL CR10_STOCKDISPLAY
opt_set MIXING_STEPPERS 5
opt_set LCD_LANGUAGE ru
@@ -115,6 +122,7 @@ exec_test $1 $2 "Mixing Extruder with 5 steppers, Cyrillic"
#
restore_configs
opt_set MOTHERBOARD BOARD_RUMBA
+opt_set LCD_LANGUAGE pt
opt_set EXTRUDERS 2
opt_set TEMP_SENSOR_1 1
opt_enable USE_XMAX_PLUG DUAL_X_CARRIAGE
@@ -141,6 +149,7 @@ exec_test $1 $2 "DUAL_X_CARRIAGE"
#
restore_configs
opt_set MOTHERBOARD BOARD_AZTEEG_X3_PRO
+opt_set LCD_LANGUAGE it
opt_set EXTRUDERS 2
opt_set TEMP_SENSOR_1 -4
opt_set SERVO_DELAY "{ 300, 300, 300 }"
@@ -244,11 +253,11 @@ exec_test $1 $2 "Many less common options"
#
#restore_configs
#opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SDSUPPORT
-#for lang in an bg ca cz da de el el-gr en es eu fi fr gl hr it jp-kana nl pl pt pt-br ru sk tr uk vi zh_CN zh_TW test; do opt_set LCD_LANGUAGE $lang; echo "compile with language $lang ..."; exec_test $1 $2 "Stuff"; done
+#for lang in an bg ca cz da de el el_gr en es eu fi fr gl hr it jp_kana nl pl pt pt_br ru sk tr uk vi zh_CN zh_TW test; do opt_set LCD_LANGUAGE $lang; echo "compile with language $lang ..."; exec_test $1 $2 "Stuff"; done
#
#restore_configs
#opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT
-#for lang in an bg ca cz da de el el-gr en es eu fi fr gl hr it jp-kana nl pl pt pt-br ru sk tr uk vi zh_CN zh_TW test; do opt_set LCD_LANGUAGE $lang; echo "compile with language $lang ..."; exec_test $1 $2 "Stuff"; done
+#for lang in an bg ca cz da de el el_gr en es eu fi fr gl hr it jp_kana nl pl pt pt_br ru sk tr uk vi zh_CN zh_TW test; do opt_set LCD_LANGUAGE $lang; echo "compile with language $lang ..."; exec_test $1 $2 "Stuff"; done
######## Example Configurations ##############
#
@@ -266,6 +275,7 @@ exec_test $1 $2 "Full-featured CR-10S config"
#
# Delta Config (generic) + ABL bilinear + BLTOUCH
use_example_configs delta/generic
+opt_set LCD_LANGUAGE cz
opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER DELTA_CALIBRATION_MENU AUTO_BED_LEVELING_BILINEAR BLTOUCH BLTOUCH_FORCE_5V_MODE
exec_test $1 $2 "Delta Config (generic) + ABL bilinear + BLTOUCH"
@@ -273,6 +283,7 @@ exec_test $1 $2 "Delta Config (generic) + ABL bilinear + BLTOUCH"
# Delta Config (generic) + UBL + ALLEN_KEY + OLED_PANEL_TINYBOY2 + EEPROM_SETTINGS
#
use_example_configs delta/generic
+opt_set LCD_LANGUAGE ko_KR
opt_enable AUTO_BED_LEVELING_UBL RESTORE_LEVELING_AFTER_G28 Z_PROBE_ALLEN_KEY EEPROM_SETTINGS EEPROM_CHITCHAT \
OLED_PANEL_TINYBOY2 MESH_EDIT_GFX_OVERLAY
exec_test $1 $2 "Delta Config (generic) + UBL + ALLEN_KEY + OLED_PANEL_TINYBOY2 + EEPROM_SETTINGS"
@@ -293,6 +304,7 @@ exec_test $1 $2 "Delta Config (FLSUN AC because it's complex)"
# SCARA with TMC2130
#
use_example_configs SCARA
+opt_set LCD_LANGUAGE es
opt_enable USE_ZMIN_PLUG FIX_MOUNTED_PROBE AUTO_BED_LEVELING_BILINEAR PAUSE_BEFORE_DEPLOY_STOW \
EEPROM_SETTINGS EEPROM_CHITCHAT ULTIMAKERCONTROLLER M114_DETAIL \
MONITOR_DRIVER_STATUS STEALTHCHOP_XY STEALTHCHOP_Z STEALTHCHOP_E HYBRID_THRESHOLD SENSORLESS_HOMING SQUARE_WAVE_STEPPING
@@ -307,6 +319,7 @@ exec_test $1 $2 "SCARA with TMC2130, TMC2209, and TMC2660"
# Test mixed TMC config
#
restore_configs
+opt_set LCD_LANGUAGE vi
opt_set X_DRIVER_TYPE TMC2160
opt_set Y_DRIVER_TYPE TMC5160
opt_set Z_DRIVER_TYPE TMC2208
diff --git a/buildroot/share/tests/teensy31-tests b/buildroot/share/tests/teensy31-tests
index a89002257d19..a847d6f57266 100755
--- a/buildroot/share/tests/teensy31-tests
+++ b/buildroot/share/tests/teensy31-tests
@@ -13,14 +13,14 @@ opt_set MOTHERBOARD BOARD_TEENSY31_32
exec_test $1 $2 "Teensy3.1 with default config"
#
-# Test as many features together as possible
+# Test many features together
#
restore_configs
opt_set MOTHERBOARD BOARD_TEENSY31_32
opt_set TEMP_SENSOR_0 1
opt_set TEMP_SENSOR_BED 1
opt_enable EEPROM_SETTINGS FILAMENT_WIDTH_SENSOR CALIBRATION_GCODE BAUD_RATE_GCODE \
- FIX_MOUNTED_PROBE Z_SAFE_HOMING AUTO_BED_LEVELING_BILINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \
+ FIX_MOUNTED_PROBE Z_SAFE_HOMING AUTO_BED_LEVELING_BILINEAR DEBUG_LEVELING_FEATURE Z_MIN_PROBE_REPEATABILITY_TEST \
BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET PRINTCOUNTER SLOW_PWM_HEATERS PIDTEMPBED \
INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT M100_FREE_MEMORY_WATCHER \
NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE PARK_HEAD_ON_PAUSE \
diff --git a/config/default/Configuration.h b/config/default/Configuration.h
index 16f1ca68005c..155605f609fb 100644
--- a/config/default/Configuration.h
+++ b/config/default/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/default/Configuration_adv.h b/config/default/Configuration_adv.h
index 256ecaf0df79..f51231543e29 100644
--- a/config/default/Configuration_adv.h
+++ b/config/default/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/3DFabXYZ/Migbot/Configuration.h b/config/examples/3DFabXYZ/Migbot/Configuration.h
index 02e2735ec095..6b41bba573ee 100644
--- a/config/examples/3DFabXYZ/Migbot/Configuration.h
+++ b/config/examples/3DFabXYZ/Migbot/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "AJMartel" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -731,6 +731,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 225, 225, 3, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -739,6 +744,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1590, 1590, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -752,35 +762,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1590 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 8.0
#define DEFAULT_YJERK 8.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.016 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1589,10 +1602,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h
index 88c265fc5657..587e589227f2 100644
--- a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h
+++ b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON false // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2535,6 +2562,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/ADIMLab/Gantry v1/Configuration.h b/config/examples/ADIMLab/Gantry v1/Configuration.h
index 9456800d83ef..90f102d0a170 100644
--- a/config/examples/ADIMLab/Gantry v1/Configuration.h
+++ b/config/examples/ADIMLab/Gantry v1/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(ETE-Design, Gantry v1)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -746,28 +746,15 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 20.0
#define DEFAULT_YJERK 20.0
#define DEFAULT_ZJERK 0.4
@@ -775,6 +762,17 @@
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.16 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1559,10 +1557,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h
index 7001c47a8bea..d4b2f5ba28f2 100644
--- a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h
+++ b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/ADIMLab/_Bootscreen.h b/config/examples/ADIMLab/Gantry v1/_Bootscreen.h
similarity index 100%
rename from config/examples/ADIMLab/_Bootscreen.h
rename to config/examples/ADIMLab/Gantry v1/_Bootscreen.h
diff --git a/config/examples/ADIMLab/Gantry v2/Configuration.h b/config/examples/ADIMLab/Gantry v2/Configuration.h
index 9be12ff0cad7..dd1afb9240b4 100644
--- a/config/examples/ADIMLab/Gantry v2/Configuration.h
+++ b/config/examples/ADIMLab/Gantry v2/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(ETE-Design, Gantry v2)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1559,10 +1572,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h
index 642dd144515b..82fc8b9452b8 100644
--- a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h
+++ b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/ADIMLab/Gantry v2/_Bootscreen.h b/config/examples/ADIMLab/Gantry v2/_Bootscreen.h
new file mode 100644
index 000000000000..ebb0ad9a81f2
--- /dev/null
+++ b/config/examples/ADIMLab/Gantry v2/_Bootscreen.h
@@ -0,0 +1,86 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * Made with Marlin Bitmap Converter
+ * http://marlinfw.org/tools/u8glib/converter.html
+ */
+#define CUSTOM_BOOTSCREEN_BMPWIDTH 88
+
+const unsigned char custom_start_bmp[] PROGMEM = {
+ B00000000,B00000000,B00000000,B00001111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00111111,B11111000,B00000000,B01000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00011110,B01111111,B11111111,B00000000,B10000100,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00111111,B11111111,B11111111,B11111111,B00000100,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00111111,B11111111,B11111111,B11111110,B00001100,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B01111111,B11111111,B11111111,B11110000,B00001000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00001111,B11111111,B11100000,B00000000,B00011000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B11111111,B11100011,B10000000,B00111000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00010011,B11111111,B11100001,B10000000,B01111000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00011111,B10001111,B11100011,B10000000,B11110000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00011110,B00001111,B11111111,B10000001,B11110000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000110,B00011111,B11111111,B10000111,B11100000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B11111111,B11111110,B00001111,B11100000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000111,B11111111,B11110000,B01111111,B11000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00001111,B11111100,B00000011,B11111111,B10000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00011111,B11000000,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00111110,B00011111,B11111111,B11111110,B00111111,B11000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B01111100,B11111111,B11111111,B11111100,B00001111,B11100000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B11111001,B11111111,B11111111,B11110000,B00001111,B11110000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B11110011,B11111111,B11111111,B11111000,B00011111,B11111000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B11100111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B00000000,
+ B00000000,B00000001,B11101111,B11111111,B11111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000000,
+ B00000000,B00000001,B11101111,B11111110,B00001111,B11111111,B11111111,B11101111,B10000000,B00000000,B00000000,
+ B00000000,B00000001,B11001111,B11110000,B00000001,B11111111,B11111111,B11110011,B11111000,B00000000,B00000000,
+ B00000000,B00000000,B11101111,B11100000,B00000000,B11111111,B11111111,B11111000,B01100000,B00000000,B00000000,
+ B00000000,B00000000,B11101111,B11100000,B00000000,B00111111,B11111111,B11111000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B11101111,B11000000,B00000000,B00011111,B11111111,B11111000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B01100111,B11100100,B00000000,B00001111,B11111111,B11111100,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00110011,B11111100,B00000000,B00000111,B11111111,B11111100,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00011001,B11111100,B00000000,B00000011,B11100000,B11111100,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00001100,B01111000,B00000000,B00000001,B11100000,B00111100,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000111,B00000000,B00000000,B00000000,B01110000,B00011100,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000011,B10000000,B00000000,B00000000,B00000000,B00001110,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000001,B11100000,B00000000,B00000000,B00000000,B00001111,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000001,B11110000,B00000000,B00000000,B00000000,B00000111,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000001,B11111000,B00000000,B00000000,B00000000,B00000111,B10000000,B00000000,B00000000,
+ B00000000,B00000000,B00000001,B11111100,B00000000,B00000000,B00000000,B00000111,B11000000,B00000000,B00000000,
+ B00000000,B00000000,B00000011,B11111100,B00000000,B00000000,B00000000,B00001111,B11000000,B00000000,B00000000,
+ B00000000,B00000000,B00000111,B11111100,B00000000,B00000000,B00000000,B00001111,B11100000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000111,B10000001,B11111111,B10000111,B10011111,B00000111,B10011110,B00000000,B00000000,B00111000,B00000000,
+ B00000111,B10000001,B11111111,B11000011,B10011111,B00000111,B10001110,B00000000,B00000000,B00111000,B00000000,
+ B00000111,B10000001,B11000011,B11100011,B10011111,B00000111,B10001110,B00000000,B00000000,B00111000,B00000000,
+ B00001111,B11000001,B11000000,B11100011,B10011111,B10001111,B10001110,B00000000,B00111100,B00111011,B00000000,
+ B00001111,B11000001,B11000000,B11100011,B10011111,B10001111,B10001110,B00000000,B11111110,B00111111,B10000000,
+ B00011101,B11000001,B11000000,B01110011,B10011111,B10011111,B10001110,B00000000,B11111111,B00111111,B10000000,
+ B00011100,B11100001,B11000000,B01110011,B10011101,B11011011,B10001110,B00000000,B01101111,B00111011,B11000000,
+ B00011100,B11100001,B11000000,B01110011,B10011101,B11111011,B10001110,B00000000,B00111111,B00111011,B11000000,
+ B00111111,B11110001,B11000000,B11100011,B10011100,B11111011,B10001110,B00000000,B11111111,B00111011,B11000000,
+ B00111111,B11110001,B11000000,B11100011,B10011100,B11110011,B10001110,B00000000,B11101111,B00111011,B11000000,
+ B01111000,B01110001,B11000001,B11100011,B10011100,B11110011,B10001110,B00000001,B11101111,B00111011,B11000000,
+ B01110000,B01111001,B11111111,B11000011,B10011100,B01100011,B10001111,B11111111,B11101111,B00111111,B10000000,
+ B01110000,B00111001,B11111111,B10000011,B10011100,B01100011,B10001111,B11111110,B11110111,B00111111,B10000000,
+ B11110000,B01111101,B11111111,B00000111,B10011110,B00000011,B11011111,B11111100,B01100111,B00100111,B00000000
+};
diff --git a/config/examples/AlephObjects/TAZ4/Configuration.h b/config/examples/AlephObjects/TAZ4/Configuration.h
index 777eb8e5ff48..58f26adfaaa5 100644
--- a/config/examples/AlephObjects/TAZ4/Configuration.h
+++ b/config/examples/AlephObjects/TAZ4/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Aleph Objects Inc, TAZ)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 7
#define TEMP_SENSOR_1 0
@@ -745,6 +745,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 800, 800, 8, 50 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -753,6 +758,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 9000, 9000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -766,35 +776,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 8.0
#define DEFAULT_YJERK 8.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 10.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.051 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1578,10 +1591,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/AlephObjects/TAZ4/Configuration_adv.h b/config/examples/AlephObjects/TAZ4/Configuration_adv.h
index d63859d07b2d..291fa6a88408 100644
--- a/config/examples/AlephObjects/TAZ4/Configuration_adv.h
+++ b/config/examples/AlephObjects/TAZ4/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Alfawise/U20-bltouch/Configuration.h b/config/examples/Alfawise/U20-bltouch/Configuration.h
index 00f1ece40f76..2329a1b7a580 100644
--- a/config/examples/Alfawise/U20-bltouch/Configuration.h
+++ b/config/examples/Alfawise/U20-bltouch/Configuration.h
@@ -82,7 +82,7 @@
// Valid platformio.ini submodel values are U20_PLUS U20 U30 LK1 LK2 LK4
-// Valid platformio.ini touchscreens are TS_V11 TS_V12
+// Valid platformio.ini touchscreens are TS_V11 TS_V12 TS_V19
// 2 - Select the screen controller type. Most common is ILI9341 - First option. If your screen remains white,
// Try the alternate setting - this should enable ST7789V or ILI9328. For other LCDs... code is needed
@@ -97,6 +97,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "Hobi, tpruvot" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -136,8 +137,7 @@
*
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
*/
-#define SERIAL_PORT_2 2
-#define NUM_SERIAL 2
+//#define SERIAL_PORT_2 2
/**
* This setting determines the communication speed of the printer.
@@ -360,7 +360,7 @@
* Specify whether the power supply is active HIGH or active LOW.
*/
//#define PSU_CONTROL
-//#define PSU_NAME "Power Supply"
+#define PSU_NAME "360W 24V/15A"
#if ENABLED(PSU_CONTROL)
#define PSU_ACTIVE_HIGH false // Set 'false' for ATX (1), 'true' for X-Box (2)
@@ -422,6 +422,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -439,8 +440,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -789,6 +788,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 200, 200, 100, 25 }
+#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 250, 250, 200, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -797,6 +801,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 200, 200, 100, 3000 }
+#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 600, 600, 400, 6000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -810,35 +819,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 200 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.4
+
+ #define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.10 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1638,10 +1650,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
@@ -2130,19 +2142,27 @@
#if ENABLED(TS_V11)
// Alfawise U20 ILI9341 2.8 TP Ver 1.1 / Green PCB on the back of touchscreen
- #define XPT2046_X_CALIBRATION 11605
- #define XPT2046_Y_CALIBRATION 9091
+ #define XPT2046_X_CALIBRATION 12000
+ #define XPT2046_Y_CALIBRATION 9000
#define XPT2046_X_OFFSET -24
#define XPT2046_Y_OFFSET -17
#endif
#if ENABLED(TS_V12)
// Alfawise U30 ILI9341 2.8 TP Ver 1.2 / Blue PCB on the back of touchscreen
- #define XPT2046_X_CALIBRATION 12316
- #define XPT2046_Y_CALIBRATION -8981
+ #define XPT2046_X_CALIBRATION 12000
+ #define XPT2046_Y_CALIBRATION -9000
#define XPT2046_X_OFFSET -43
#define XPT2046_Y_OFFSET 257
#endif
+
+ #if ENABLED(TS_V19)
+ // Longer LK4/U30 2.8" Ver 2019 / Blue PCB, SID240x320-8PCB-D
+ #define XPT2046_X_CALIBRATION -12000
+ #define XPT2046_Y_CALIBRATION 9000
+ #define XPT2046_X_OFFSET 320
+ #define XPT2046_Y_OFFSET 0
+ #endif
#endif
//
diff --git a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h
index 2567e60a47d6..6495e8e087ec 100644
--- a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h
+++ b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -603,18 +604,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -888,6 +903,15 @@
// Add an 'M73' G-code to set the current percentage
#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1291,7 +1315,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2040,6 +2065,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2538,6 +2565,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Alfawise/U20/Configuration.h b/config/examples/Alfawise/U20/Configuration.h
index 9186d0c843c3..75b760cca1ec 100644
--- a/config/examples/Alfawise/U20/Configuration.h
+++ b/config/examples/Alfawise/U20/Configuration.h
@@ -82,7 +82,7 @@
// Valid platformio.ini submodel values are U20_PLUS U20 U30 LK1 LK2 LK4
-// Valid platformio.ini touchscreens are TS_V11 TS_V12
+// Valid platformio.ini touchscreens are TS_V11 TS_V12 TS_V19
// 2 - Select the screen controller type. Most common is ILI9341 - First option. If your screen remains white,
// Try the alternate setting - this should enable ST7789V or ILI9328. For other LCDs... code is needed
@@ -97,6 +97,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "Hobi, tpruvot" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -136,8 +137,7 @@
*
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
*/
-#define SERIAL_PORT_2 2
-#define NUM_SERIAL 2
+//#define SERIAL_PORT_2 2
/**
* This setting determines the communication speed of the printer.
@@ -360,7 +360,7 @@
* Specify whether the power supply is active HIGH or active LOW.
*/
//#define PSU_CONTROL
-//#define PSU_NAME "Power Supply"
+#define PSU_NAME "360W 24V/15A"
#if ENABLED(PSU_CONTROL)
#define PSU_ACTIVE_HIGH false // Set 'false' for ATX (1), 'true' for X-Box (2)
@@ -422,6 +422,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -439,8 +440,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -789,6 +788,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 200, 200, 100, 25 }
+#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 250, 250, 200, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -797,6 +801,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 200, 200, 100, 3000 }
+#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 600, 600, 400, 6000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -810,35 +819,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 200 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.4
+
+ #define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.10 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1637,10 +1649,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
@@ -2129,19 +2141,27 @@
#if ENABLED(TS_V11)
// Alfawise U20 ILI9341 2.8 TP Ver 1.1 / Green PCB on the back of touchscreen
- #define XPT2046_X_CALIBRATION 11605
- #define XPT2046_Y_CALIBRATION 9091
+ #define XPT2046_X_CALIBRATION 12000
+ #define XPT2046_Y_CALIBRATION 9000
#define XPT2046_X_OFFSET -24
#define XPT2046_Y_OFFSET -17
#endif
#if ENABLED(TS_V12)
// Alfawise U30 ILI9341 2.8 TP Ver 1.2 / Blue PCB on the back of touchscreen
- #define XPT2046_X_CALIBRATION 12316
- #define XPT2046_Y_CALIBRATION -8981
+ #define XPT2046_X_CALIBRATION 12000
+ #define XPT2046_Y_CALIBRATION -9000
#define XPT2046_X_OFFSET -43
#define XPT2046_Y_OFFSET 257
#endif
+
+ #if ENABLED(TS_V19)
+ // Longer LK4/U30 2.8" Ver 2019 / Blue PCB, SID240x320-8PCB-D
+ #define XPT2046_X_CALIBRATION -12000
+ #define XPT2046_Y_CALIBRATION 9000
+ #define XPT2046_X_OFFSET 320
+ #define XPT2046_Y_OFFSET 0
+ #endif
#endif
//
diff --git a/config/examples/Alfawise/U20/Configuration_adv.h b/config/examples/Alfawise/U20/Configuration_adv.h
index 863132ceee22..250f050b88ab 100644
--- a/config/examples/Alfawise/U20/Configuration_adv.h
+++ b/config/examples/Alfawise/U20/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1290,7 +1314,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2039,6 +2064,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2537,6 +2564,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/AliExpress/CL-260/Configuration.h b/config/examples/AliExpress/CL-260/Configuration.h
index 342b6b94ee77..7db163b06731 100644
--- a/config/examples/AliExpress/CL-260/Configuration.h
+++ b/config/examples/AliExpress/CL-260/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, CL-260)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/AliExpress/UM2pExt/Configuration.h b/config/examples/AliExpress/UM2pExt/Configuration.h
index d24c75cdc92a..8415915e80dc 100644
--- a/config/examples/AliExpress/UM2pExt/Configuration.h
+++ b/config/examples/AliExpress/UM2pExt/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 20
#define TEMP_SENSOR_1 20
@@ -736,6 +736,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 40, 45}
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -744,6 +749,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -757,35 +767,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1569,10 +1582,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/AliExpress/UM2pExt/Configuration_adv.h b/config/examples/AliExpress/UM2pExt/Configuration_adv.h
index b2f8a48e6556..e235b2340c22 100644
--- a/config/examples/AliExpress/UM2pExt/Configuration_adv.h
+++ b/config/examples/AliExpress/UM2pExt/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 255 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2037,6 +2062,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2535,6 +2562,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Anet/A2/Configuration.h b/config/examples/Anet/A2/Configuration.h
index 1a6c4b37f014..fb0c02b4ac61 100644
--- a/config/examples/Anet/A2/Configuration.h
+++ b/config/examples/Anet/A2/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Modmike, Anet A2)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Anet/A2/Configuration_adv.h b/config/examples/Anet/A2/Configuration_adv.h
index 06be59794b32..d9a49006b707 100644
--- a/config/examples/Anet/A2/Configuration_adv.h
+++ b/config/examples/Anet/A2/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Anet/A2plus/Configuration.h b/config/examples/Anet/A2plus/Configuration.h
index 8ef0e7b11b25..7f1b05d81771 100644
--- a/config/examples/Anet/A2plus/Configuration.h
+++ b/config/examples/Anet/A2plus/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Modmike, Anet A2 Plus)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Anet/A2plus/Configuration_adv.h b/config/examples/Anet/A2plus/Configuration_adv.h
index 06be59794b32..d9a49006b707 100644
--- a/config/examples/Anet/A2plus/Configuration_adv.h
+++ b/config/examples/Anet/A2plus/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Anet/A6/Configuration.h b/config/examples/Anet/A6/Configuration.h
index 8122d4cd19c7..8291c6f208eb 100644
--- a/config/examples/Anet/A6/Configuration.h
+++ b/config/examples/Anet/A6/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Ralf_E, ANET A6 config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 11
#define TEMP_SENSOR_1 0
@@ -756,6 +756,11 @@
//#define DEFAULT_MAX_FEEDRATE { 400, 400, 20, 50 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -769,6 +774,11 @@
#define DEFAULT_MAX_ACCELERATION { 9000, 5000, 50, 10000 }
//#define DEFAULT_MAX_ACCELERATION { 10000, 10000, 200, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -777,51 +787,48 @@
* M204 R Retract Acceleration
* M204 T Travel Acceleration
*/
-//#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E acceleration for printing moves
-//#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts
-//#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
// ANET A6 Firmware V2.0 defaults:
// Accel: 1000 A-retract: 1000
#define DEFAULT_ACCELERATION 1000 // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION 1000 // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
-//#define DEFAULT_ACCELERATION 2000 // X, Y, Z and E acceleration for printing moves
-//#define DEFAULT_RETRACT_ACCELERATION 2000 // E acceleration for retracts
-//#define DEFAULT_TRAVEL_ACCELERATION 4000 // X, Y, Z acceleration for travel (non printing) moves
-
-/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-// ANET A6 Firmware V2.0 defaults (jerk):
-// Vxy-jerk: 10, Vz-jerk: +000.30, Ve-jerk: 5
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
+ // ANET A6 Firmware V2.0 defaults:
+ // XY: 10, Z: +000.30, E: 5
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.04 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1677,10 +1684,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Anet/A6/Configuration_adv.h b/config/examples/Anet/A6/Configuration_adv.h
index 99bfa5254c42..0def5901436d 100644
--- a/config/examples/Anet/A6/Configuration_adv.h
+++ b/config/examples/Anet/A6/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Anet/A6/_Statusscreen.h b/config/examples/Anet/A6/_Statusscreen.h
new file mode 100755
index 000000000000..4547f3fd4485
--- /dev/null
+++ b/config/examples/Anet/A6/_Statusscreen.h
@@ -0,0 +1,56 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * Custom Status Screen bitmap
+ *
+ * Place this file in the root with your configuration files
+ * and enable CUSTOM_STATUS_SCREEN_IMAGE in Configuration.h.
+ *
+ * Use the Marlin Bitmap Converter to make your own:
+ * http://marlinfw.org/tools/u8glib/converter.html
+ */
+
+//
+// Status Screen Logo bitmap
+//
+#define STATUS_LOGO_Y 10
+#define STATUS_LOGO_WIDTH 40
+
+const unsigned char status_logo_bmp[] PROGMEM = {
+ B01110000,B00000000,B00001000,B00000011,B10001110,
+ B10001000,B00000000,B00001000,B00000100,B01010000,
+ B10001010,B11000111,B00111110,B00000100,B01010000,
+ B11111011,B00101000,B10001000,B00000111,B11001110,
+ B10001010,B00101111,B00001000,B00000100,B01010001,
+ B10001010,B00101000,B00001000,B00000100,B01010001,
+ B10001010,B00100111,B00000110,B00000100,B01001110
+};
+
+//
+// Use default bitmaps
+//
+#define STATUS_HOTEND_ANIM
+#define STATUS_BED_ANIM
+#define STATUS_HEATERS_X 48
+#define STATUS_BED_X 74
diff --git a/config/examples/Anet/A8/Configuration.h b/config/examples/Anet/A8/Configuration.h
index eeae0493e36c..036e42930802 100644
--- a/config/examples/Anet/A8/Configuration.h
+++ b/config/examples/Anet/A8/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Bob Kuhn, Anet config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -384,6 +385,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -401,8 +403,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -738,6 +738,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 400, 400, 8, 50 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -746,6 +751,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -759,35 +769,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.10 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1584,10 +1597,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Anet/A8/Configuration_adv.h b/config/examples/Anet/A8/Configuration_adv.h
index f9591e3fa7a9..788f1e1842a1 100644
--- a/config/examples/Anet/A8/Configuration_adv.h
+++ b/config/examples/Anet/A8/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Anet/A8/_Statusscreen.h b/config/examples/Anet/A8/_Statusscreen.h
new file mode 100755
index 000000000000..ddd62ea53299
--- /dev/null
+++ b/config/examples/Anet/A8/_Statusscreen.h
@@ -0,0 +1,56 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * Custom Status Screen bitmap
+ *
+ * Place this file in the root with your configuration files
+ * and enable CUSTOM_STATUS_SCREEN_IMAGE in Configuration.h.
+ *
+ * Use the Marlin Bitmap Converter to make your own:
+ * http://marlinfw.org/tools/u8glib/converter.html
+ */
+
+//
+// Status Screen Logo bitmap
+//
+#define STATUS_LOGO_Y 10
+#define STATUS_LOGO_WIDTH 40
+
+const unsigned char status_logo_bmp[] PROGMEM = {
+ B01110000,B00000000,B00001000,B00000011,B10001110,
+ B10001000,B00000000,B00001000,B00000100,B01010001,
+ B10001010,B11000111,B00111110,B00000100,B01010001,
+ B11111011,B00101000,B10001000,B00000111,B11001110,
+ B10001010,B00101111,B00001000,B00000100,B01010001,
+ B10001010,B00101000,B00001000,B00000100,B01010001,
+ B10001010,B00100111,B00000110,B00000100,B01001110
+};
+
+//
+// Use default bitmaps
+//
+#define STATUS_HOTEND_ANIM
+#define STATUS_BED_ANIM
+#define STATUS_HEATERS_X 48
+#define STATUS_BED_X 74
diff --git a/config/examples/Anet/A8plus/Configuration.h b/config/examples/Anet/A8plus/Configuration.h
index 06aee7111b2a..6b87ea54422a 100644
--- a/config/examples/Anet/A8plus/Configuration.h
+++ b/config/examples/Anet/A8plus/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Martin Zeman - Zemistr, Anet A8 Plus)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -384,6 +385,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -401,8 +403,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -736,6 +736,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 400, 400, 50, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -744,6 +749,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -757,35 +767,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.10 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1569,10 +1582,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Anet/A8plus/Configuration_adv.h b/config/examples/Anet/A8plus/Configuration_adv.h
index 1018517063e3..4fcb487fa141 100644
--- a/config/examples/Anet/A8plus/Configuration_adv.h
+++ b/config/examples/Anet/A8plus/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Anet/A8plus/_Statusscreen.h b/config/examples/Anet/A8plus/_Statusscreen.h
new file mode 100755
index 000000000000..1235997b7929
--- /dev/null
+++ b/config/examples/Anet/A8plus/_Statusscreen.h
@@ -0,0 +1,66 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * Custom Status Screen bitmap
+ *
+ * Place this file in the root with your configuration files
+ * and enable CUSTOM_STATUS_SCREEN_IMAGE in Configuration.h.
+ *
+ * Use the Marlin Bitmap Converter to make your own:
+ * http://marlinfw.org/tools/u8glib/converter.html
+ */
+
+//
+// Status Screen Logo bitmap
+//
+#define STATUS_LOGO_Y 6
+#define STATUS_LOGO_WIDTH 40
+
+const unsigned char status_logo_bmp[] PROGMEM = {
+ B01110000,B00000000,B00001000,B00000011,B10001110,
+ B10001000,B00000000,B00001000,B00000100,B01010001,
+ B10001010,B11000111,B00111110,B00000100,B01010001,
+ B11111011,B00101000,B10001000,B00000111,B11001110,
+ B10001010,B00101111,B00001000,B00000100,B01010001,
+ B10001010,B00101000,B00001000,B00000100,B01010001,
+ B10001010,B00100111,B00000110,B00000100,B01001110,
+ B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00001110,B01000000,B00000000,B00000000,
+ B00000000,B00010001,B01000000,B00000000,B00000000,
+ B00000000,B00010001,B01010001,B00111000,B00000000,
+ B00000000,B00011110,B01010001,B01000000,B00000000,
+ B00000000,B00010000,B01010001,B00111000,B00000000,
+ B00000000,B00010000,B01010001,B00000100,B00000000,
+ B00000000,B00010000,B01001110,B00111000,B00000000
+};
+
+//
+// Use default bitmaps
+//
+#define STATUS_HOTEND_ANIM
+#define STATUS_BED_ANIM
+#define STATUS_HEATERS_X 48
+#define STATUS_BED_X 74
diff --git a/config/examples/Anet/E16/Configuration.h b/config/examples/Anet/E16/Configuration.h
index 487ab36a57e8..9d069f33a9ac 100644
--- a/config/examples/Anet/E16/Configuration.h
+++ b/config/examples/Anet/E16/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "InsanityAutomation" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -737,6 +737,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 50, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -745,6 +750,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -758,35 +768,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.08 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.04 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1570,10 +1583,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Anet/E16/Configuration_adv.h b/config/examples/Anet/E16/Configuration_adv.h
index f19f1b1c77ac..c79847e85e1e 100644
--- a/config/examples/Anet/E16/Configuration_adv.h
+++ b/config/examples/Anet/E16/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/AnyCubic/i3/Configuration.h b/config/examples/AnyCubic/i3/Configuration.h
index e5f96e0d975b..e182ed83f2bd 100644
--- a/config/examples/AnyCubic/i3/Configuration.h
+++ b/config/examples/AnyCubic/i3/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -735,6 +735,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 6, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -743,6 +748,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1500, 1500, 50, 8000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -756,35 +766,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 5.0
#define DEFAULT_YJERK 2.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 2.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.002 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1568,10 +1581,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/AnyCubic/i3/Configuration_adv.h b/config/examples/AnyCubic/i3/Configuration_adv.h
index 4639ae7e1d8b..37ced96df2c6 100644
--- a/config/examples/AnyCubic/i3/Configuration_adv.h
+++ b/config/examples/AnyCubic/i3/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/ArmEd/Configuration.h b/config/examples/ArmEd/Configuration.h
index 05436cb482de..9cbb3a10750d 100644
--- a/config/examples/ArmEd/Configuration.h
+++ b/config/examples/ArmEd/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -726,6 +726,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 20, 120 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -734,6 +739,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1000, 1000, 1000, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -747,35 +757,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 8.0
#define DEFAULT_YJERK 8.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 1.5 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.026 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1559,10 +1572,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/ArmEd/Configuration_adv.h b/config/examples/ArmEd/Configuration_adv.h
index e59e84cc2786..450e50954637 100644
--- a/config/examples/ArmEd/Configuration_adv.h
+++ b/config/examples/ArmEd/Configuration_adv.h
@@ -383,6 +383,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -606,18 +607,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -891,6 +906,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1290,7 +1314,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2039,6 +2064,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2537,6 +2564,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Azteeg/X5GT/Configuration.h b/config/examples/Azteeg/X5GT/Configuration.h
index 12574f07b883..d558eae52431 100644
--- a/config/examples/Azteeg/X5GT/Configuration.h
+++ b/config/examples/Azteeg/X5GT/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 1
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration.h b/config/examples/BIBO/TouchX/cyclops/Configuration.h
index e9995f707a68..93da7abf511e 100644
--- a/config/examples/BIBO/TouchX/cyclops/Configuration.h
+++ b/config/examples/BIBO/TouchX/cyclops/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 350, 350, 10, 50 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1100, 1100, 300, 2500 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1100 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 7.0
#define DEFAULT_YJERK 7.0
#define DEFAULT_ZJERK 0.65
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.018 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h
index ce47a9e9183d..25db086713df 100644
--- a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h
+++ b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/BIBO/TouchX/default/Configuration.h b/config/examples/BIBO/TouchX/default/Configuration.h
index 3cde043a460d..5546a516c9a1 100644
--- a/config/examples/BIBO/TouchX/default/Configuration.h
+++ b/config/examples/BIBO/TouchX/default/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 5
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 350, 350, 10, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1100, 1100, 300, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1100 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 7.0
#define DEFAULT_YJERK 7.0
#define DEFAULT_ZJERK 0.65
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.018 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/BIBO/TouchX/default/Configuration_adv.h b/config/examples/BIBO/TouchX/default/Configuration_adv.h
index 12f3f1381007..899d91e82aef 100644
--- a/config/examples/BIBO/TouchX/default/Configuration_adv.h
+++ b/config/examples/BIBO/TouchX/default/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/BQ/Hephestos/Configuration.h b/config/examples/BQ/Hephestos/Configuration.h
index 045c0698d512..5e22c32c5a00 100644
--- a/config/examples/BQ/Hephestos/Configuration.h
+++ b/config/examples/BQ/Hephestos/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -713,6 +713,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 200, 200, 3.3, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -721,6 +726,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1100, 1100, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -734,35 +744,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.062 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1546,10 +1559,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/BQ/Hephestos/Configuration_adv.h b/config/examples/BQ/Hephestos/Configuration_adv.h
index 34aaa13d3678..8f68318c1416 100644
--- a/config/examples/BQ/Hephestos/Configuration_adv.h
+++ b/config/examples/BQ/Hephestos/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/BQ/Hephestos_2/Configuration.h b/config/examples/BQ/Hephestos_2/Configuration.h
index ae0d1771e0c7..e528e82d9785 100644
--- a/config/examples/BQ/Hephestos_2/Configuration.h
+++ b/config/examples/BQ/Hephestos_2/Configuration.h
@@ -80,6 +80,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "@jbrazio" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -391,6 +392,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -408,8 +410,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 70
#define TEMP_SENSOR_1 0
@@ -726,6 +726,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 3, 120 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -734,6 +739,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 3000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -747,35 +757,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 5.0
#define DEFAULT_YJERK 5.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 10.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.011 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/BQ/Hephestos_2/Configuration_adv.h b/config/examples/BQ/Hephestos_2/Configuration_adv.h
index 90d096da78dd..4eccb1707deb 100644
--- a/config/examples/BQ/Hephestos_2/Configuration_adv.h
+++ b/config/examples/BQ/Hephestos_2/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -895,6 +910,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1294,7 +1318,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 2 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 2 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 2
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2043,6 +2068,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2541,6 +2568,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/BQ/WITBOX/Configuration.h b/config/examples/BQ/WITBOX/Configuration.h
index 520538fb870e..ffb30cb4fb4e 100644
--- a/config/examples/BQ/WITBOX/Configuration.h
+++ b/config/examples/BQ/WITBOX/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(bq Witbox)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -713,6 +713,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 350, 350, 7.2, 80 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -721,6 +726,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1000, 1000, 10, 1000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -734,35 +744,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1546,10 +1559,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/BQ/WITBOX/Configuration_adv.h b/config/examples/BQ/WITBOX/Configuration_adv.h
index 34aaa13d3678..8f68318c1416 100644
--- a/config/examples/BQ/WITBOX/Configuration_adv.h
+++ b/config/examples/BQ/WITBOX/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Cartesio/Configuration.h b/config/examples/Cartesio/Configuration.h
index 2a059914abb6..e8c4924825cd 100644
--- a/config/examples/Cartesio/Configuration.h
+++ b/config/examples/Cartesio/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(MaukCC, CartesioE)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -384,6 +385,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -401,8 +403,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 -1
#define TEMP_SENSOR_1 -1
@@ -724,6 +724,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 200, 200, 20, 20 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -732,6 +737,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1000, 1000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -745,35 +755,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.08 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1557,10 +1570,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Cartesio/Configuration_adv.h b/config/examples/Cartesio/Configuration_adv.h
index 3f0c9bd5531e..2f7106f83150 100644
--- a/config/examples/Cartesio/Configuration_adv.h
+++ b/config/examples/Cartesio/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Creality/CR-10/Configuration.h b/config/examples/Creality/CR-10/Configuration.h
index f107cfcfbb96..38e1e6273ebb 100644
--- a/config/examples/Creality/CR-10/Configuration.h
+++ b/config/examples/Creality/CR-10/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Creality CR-10)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -735,6 +735,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 15, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -743,6 +748,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -756,35 +766,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 2.7
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.08 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1568,10 +1581,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Creality/CR-10/Configuration_adv.h b/config/examples/Creality/CR-10/Configuration_adv.h
index 4d0520a556ed..30ca38d3e707 100644
--- a/config/examples/Creality/CR-10/Configuration_adv.h
+++ b/config/examples/Creality/CR-10/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,8 +1310,9 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 10 // Babysteps are very small. Increase for faster motion.
-
+ #define BABYSTEP_MULTIPLICATOR_Z 10 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 10
+
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
#define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds.
@@ -1794,7 +1819,7 @@
#define INTERPOLATE true // Interpolate X/Y/Z_MICROSTEPS to 256
#if AXIS_IS_TMC(X)
- #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current.
+ #define X_CURRENT 650 // (mA) RMS current. Multiply by 1.414 for peak current.
#define X_MICROSTEPS 16 // 0..256
#define X_RSENSE 0.11
#define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ...
@@ -1808,7 +1833,7 @@
#endif
#if AXIS_IS_TMC(Y)
- #define Y_CURRENT 800
+ #define Y_CURRENT 650
#define Y_MICROSTEPS 16
#define Y_RSENSE 0.11
#define Y_CHAIN_POS -1
@@ -1822,7 +1847,7 @@
#endif
#if AXIS_IS_TMC(Z)
- #define Z_CURRENT 800
+ #define Z_CURRENT 580
#define Z_MICROSTEPS 16
#define Z_RSENSE 0.11
#define Z_CHAIN_POS -1
@@ -1843,7 +1868,7 @@
#endif
#if AXIS_IS_TMC(E0)
- #define E0_CURRENT 800
+ #define E0_CURRENT 650
#define E0_MICROSTEPS 16
#define E0_RSENSE 0.11
#define E0_CHAIN_POS -1
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2536,6 +2563,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Creality/CR-10S/Configuration.h b/config/examples/Creality/CR-10S/Configuration.h
index 30904e3d1a45..4731c7e7c9bf 100644
--- a/config/examples/Creality/CR-10S/Configuration.h
+++ b/config/examples/Creality/CR-10S/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(printedsolid.com, CR-10S)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 2500, 2500, 100, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 800 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.067 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1559,10 +1572,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Creality/CR-10S/Configuration_adv.h b/config/examples/Creality/CR-10S/Configuration_adv.h
index a0b85603e7f8..c4eb137dea11 100644
--- a/config/examples/Creality/CR-10S/Configuration_adv.h
+++ b/config/examples/Creality/CR-10S/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 5 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 5 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 5
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -1794,7 +1819,7 @@
#define INTERPOLATE true // Interpolate X/Y/Z_MICROSTEPS to 256
#if AXIS_IS_TMC(X)
- #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current.
+ #define X_CURRENT 650 // (mA) RMS current. Multiply by 1.414 for peak current.
#define X_MICROSTEPS 16 // 0..256
#define X_RSENSE 0.11
#define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ...
@@ -1808,7 +1833,7 @@
#endif
#if AXIS_IS_TMC(Y)
- #define Y_CURRENT 800
+ #define Y_CURRENT 650
#define Y_MICROSTEPS 16
#define Y_RSENSE 0.11
#define Y_CHAIN_POS -1
@@ -1822,7 +1847,7 @@
#endif
#if AXIS_IS_TMC(Z)
- #define Z_CURRENT 800
+ #define Z_CURRENT 580
#define Z_MICROSTEPS 16
#define Z_RSENSE 0.11
#define Z_CHAIN_POS -1
@@ -1843,7 +1868,7 @@
#endif
#if AXIS_IS_TMC(E0)
- #define E0_CURRENT 800
+ #define E0_CURRENT 650
#define E0_MICROSTEPS 16
#define E0_RSENSE 0.11
#define E0_CHAIN_POS -1
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Creality/CR-10_5S/Configuration.h b/config/examples/Creality/CR-10_5S/Configuration.h
index 03037f5a8a79..65ae14eef22d 100644
--- a/config/examples/Creality/CR-10_5S/Configuration.h
+++ b/config/examples/Creality/CR-10_5S/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Evgeny-SPB, CR-10 S5)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -726,6 +726,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -734,6 +739,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 300, 300, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -747,35 +757,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 5.0
#define DEFAULT_YJERK 5.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1561,10 +1574,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Creality/CR-10_5S/Configuration_adv.h b/config/examples/Creality/CR-10_5S/Configuration_adv.h
index 0835d9078e88..d8321d6d4d71 100644
--- a/config/examples/Creality/CR-10_5S/Configuration_adv.h
+++ b/config/examples/Creality/CR-10_5S/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 10 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 10 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 10
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Creality/CR-10mini/Configuration.h b/config/examples/Creality/CR-10mini/Configuration.h
index f6124787b00e..1b82e86b43ef 100644
--- a/config/examples/Creality/CR-10mini/Configuration.h
+++ b/config/examples/Creality/CR-10mini/Configuration.h
@@ -81,6 +81,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -392,6 +393,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -409,8 +411,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -744,6 +744,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 15, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -752,6 +757,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -765,35 +775,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.067 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1577,10 +1590,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Creality/CR-10mini/Configuration_adv.h b/config/examples/Creality/CR-10mini/Configuration_adv.h
index ca9b0db986dd..737f8759c8f3 100644
--- a/config/examples/Creality/CR-10mini/Configuration_adv.h
+++ b/config/examples/Creality/CR-10mini/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -1794,7 +1819,7 @@
#define INTERPOLATE true // Interpolate X/Y/Z_MICROSTEPS to 256
#if AXIS_IS_TMC(X)
- #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current.
+ #define X_CURRENT 580 // (mA) RMS current. Multiply by 1.414 for peak current.
#define X_MICROSTEPS 16 // 0..256
#define X_RSENSE 0.11
#define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ...
@@ -1808,7 +1833,7 @@
#endif
#if AXIS_IS_TMC(Y)
- #define Y_CURRENT 800
+ #define Y_CURRENT 580
#define Y_MICROSTEPS 16
#define Y_RSENSE 0.11
#define Y_CHAIN_POS -1
@@ -1822,7 +1847,7 @@
#endif
#if AXIS_IS_TMC(Z)
- #define Z_CURRENT 800
+ #define Z_CURRENT 580
#define Z_MICROSTEPS 16
#define Z_RSENSE 0.11
#define Z_CHAIN_POS -1
@@ -1843,7 +1868,7 @@
#endif
#if AXIS_IS_TMC(E0)
- #define E0_CURRENT 800
+ #define E0_CURRENT 650
#define E0_MICROSTEPS 16
#define E0_RSENSE 0.11
#define E0_CHAIN_POS -1
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Creality/CR-20 Pro/Configuration.h b/config/examples/Creality/CR-20 Pro/Configuration.h
index c7962db10095..65f93c55c691 100644
--- a/config/examples/Creality/CR-20 Pro/Configuration.h
+++ b/config/examples/Creality/CR-20 Pro/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(CR-20 Pro)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -729,6 +729,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -737,6 +742,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -750,35 +760,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.08 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1561,10 +1574,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Creality/CR-20 Pro/Configuration_adv.h b/config/examples/Creality/CR-20 Pro/Configuration_adv.h
index 8ccd36c6dbc7..664b27aff398 100644
--- a/config/examples/Creality/CR-20 Pro/Configuration_adv.h
+++ b/config/examples/Creality/CR-20 Pro/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Creality/CR-20/Configuration.h b/config/examples/Creality/CR-20/Configuration.h
index d1166cb47553..cd9005cabc08 100644
--- a/config/examples/Creality/CR-20/Configuration.h
+++ b/config/examples/Creality/CR-20/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(m0oml)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -729,6 +729,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -737,6 +742,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -750,35 +760,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.08 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1561,10 +1574,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Creality/CR-20/Configuration_adv.h b/config/examples/Creality/CR-20/Configuration_adv.h
index 1d0b0beae998..3d5bd1537d29 100644
--- a/config/examples/Creality/CR-20/Configuration_adv.h
+++ b/config/examples/Creality/CR-20/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Creality/CR-8/Configuration.h b/config/examples/Creality/CR-8/Configuration.h
index 571758dbdeba..73bb71327493 100644
--- a/config/examples/Creality/CR-8/Configuration.h
+++ b/config/examples/Creality/CR-8/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(D-side, CR-8)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -735,6 +735,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -743,6 +748,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -756,35 +766,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.08 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1568,10 +1581,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Creality/CR-8/Configuration_adv.h b/config/examples/Creality/CR-8/Configuration_adv.h
index 542c4ea3a342..7ac86c8402a4 100644
--- a/config/examples/Creality/CR-8/Configuration_adv.h
+++ b/config/examples/Creality/CR-8/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 5 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 5 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 5
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Creality/Ender-2/Configuration.h b/config/examples/Creality/Ender-2/Configuration.h
index 4ffdada6b45c..e9899dd97c28 100644
--- a/config/examples/Creality/Ender-2/Configuration.h
+++ b/config/examples/Creality/Ender-2/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(tommie, Ender 2/4)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -729,6 +729,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -737,6 +742,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -750,35 +760,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.08 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1562,10 +1575,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Creality/Ender-2/Configuration_adv.h b/config/examples/Creality/Ender-2/Configuration_adv.h
index 32589ce3650e..5e5fef850cca 100644
--- a/config/examples/Creality/Ender-2/Configuration_adv.h
+++ b/config/examples/Creality/Ender-2/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Creality/Ender-3/Configuration.h b/config/examples/Creality/Ender-3/Configuration.h
index a0c7888788cf..8d1cc86cba10 100644
--- a/config/examples/Creality/Ender-3/Configuration.h
+++ b/config/examples/Creality/Ender-3/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(thisiskeithb, Ender-3)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -729,6 +729,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -737,6 +742,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -750,35 +760,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.08 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1562,10 +1575,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Creality/Ender-3/Configuration_adv.h b/config/examples/Creality/Ender-3/Configuration_adv.h
index e0e32408cc59..e7645558f8a8 100644
--- a/config/examples/Creality/Ender-3/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Creality/Ender-4/Configuration.h b/config/examples/Creality/Ender-4/Configuration.h
index 3015b746908e..0f63b169cbd5 100644
--- a/config/examples/Creality/Ender-4/Configuration.h
+++ b/config/examples/Creality/Ender-4/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Skorpi, Creality Ender-4, brandstaetter)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -735,6 +735,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 15, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -743,6 +748,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -756,35 +766,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 2.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1568,10 +1581,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Creality/Ender-4/Configuration_adv.h b/config/examples/Creality/Ender-4/Configuration_adv.h
index c287db765ed0..769bce36f381 100644
--- a/config/examples/Creality/Ender-4/Configuration_adv.h
+++ b/config/examples/Creality/Ender-4/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON false // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 5 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 2 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 2
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Creality/Ender-5/Configuration.h b/config/examples/Creality/Ender-5/Configuration.h
index 204be000bfef..66d0dc13bc4c 100644
--- a/config/examples/Creality/Ender-5/Configuration.h
+++ b/config/examples/Creality/Ender-5/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(thisiskeithb, Ender-5)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -729,6 +729,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -737,6 +742,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -750,35 +760,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.08 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1561,10 +1574,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Creality/Ender-5/Configuration_adv.h b/config/examples/Creality/Ender-5/Configuration_adv.h
index 377c3572e203..a81b90feae17 100644
--- a/config/examples/Creality/Ender-5/Configuration_adv.h
+++ b/config/examples/Creality/Ender-5/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -1794,7 +1819,7 @@
#define INTERPOLATE true // Interpolate X/Y/Z_MICROSTEPS to 256
#if AXIS_IS_TMC(X)
- #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current.
+ #define X_CURRENT 580 // (mA) RMS current. Multiply by 1.414 for peak current.
#define X_MICROSTEPS 16 // 0..256
#define X_RSENSE 0.11
#define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ...
@@ -1808,7 +1833,7 @@
#endif
#if AXIS_IS_TMC(Y)
- #define Y_CURRENT 800
+ #define Y_CURRENT 650
#define Y_MICROSTEPS 16
#define Y_RSENSE 0.11
#define Y_CHAIN_POS -1
@@ -1822,7 +1847,7 @@
#endif
#if AXIS_IS_TMC(Z)
- #define Z_CURRENT 800
+ #define Z_CURRENT 580
#define Z_MICROSTEPS 16
#define Z_RSENSE 0.11
#define Z_CHAIN_POS -1
@@ -1843,7 +1868,7 @@
#endif
#if AXIS_IS_TMC(E0)
- #define E0_CURRENT 800
+ #define E0_CURRENT 650
#define E0_MICROSTEPS 16
#define E0_RSENSE 0.11
#define E0_CHAIN_POS -1
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Dagoma/Disco Ultimate/Configuration.h b/config/examples/Dagoma/Disco Ultimate/Configuration.h
index 732cce94c723..271e6d376cad 100644
--- a/config/examples/Dagoma/Disco Ultimate/Configuration.h
+++ b/config/examples/Dagoma/Disco Ultimate/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "InsanityAutomation" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 18
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 4, 170 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 1000, 20, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 20
#define DEFAULT_YJERK 20
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.053 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h
index b4e06b542561..626598926d78 100644
--- a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h
+++ b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration.h b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration.h
old mode 100755
new mode 100644
index e9224face559..efae104594a2
--- a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration.h
+++ b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(thisiskeithb, Sidewinder X1)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -85,7 +86,7 @@
*/
// Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION **
-#define SHOW_BOOTSCREEN
+//#define SHOW_BOOTSCREEN
// Show the bitmap in Marlin/_Bootscreen.h on startup.
//#define SHOW_CUSTOM_BOOTSCREEN
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -730,6 +730,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 50, 40 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -738,6 +743,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -751,35 +761,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 2000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 8.0
#define DEFAULT_YJERK 8.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.032 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1563,10 +1576,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h
index 929e61fcd27f..044ea9453725 100755
--- a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h
+++ b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Einstart-S/Configuration.h b/config/examples/Einstart-S/Configuration.h
index 255b3b620072..430b7fde5cb2 100644
--- a/config/examples/Einstart-S/Configuration.h
+++ b/config/examples/Einstart-S/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "elsie tech corp" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 666
#define TEMP_SENSOR_1 0
@@ -735,6 +735,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -743,6 +748,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -756,35 +766,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 2000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1568,10 +1581,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Einstart-S/Configuration_adv.h b/config/examples/Einstart-S/Configuration_adv.h
index 4798a2ecf250..48b07bdb905d 100644
--- a/config/examples/Einstart-S/Configuration_adv.h
+++ b/config/examples/Einstart-S/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/FYSETC/AIO_II/Configuration.h b/config/examples/FYSETC/AIO_II/Configuration.h
index a9c1d3482919..7c658157f698 100644
--- a/config/examples/FYSETC/AIO_II/Configuration.h
+++ b/config/examples/FYSETC/AIO_II/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -730,6 +730,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -738,6 +743,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -751,35 +761,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1563,10 +1576,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/FYSETC/AIO_II/Configuration_adv.h b/config/examples/FYSETC/AIO_II/Configuration_adv.h
index 1521d93dd51e..e61afcae24d0 100644
--- a/config/examples/FYSETC/AIO_II/Configuration_adv.h
+++ b/config/examples/FYSETC/AIO_II/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration.h b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration.h
index 7bb62ab321f3..d72e5b09c533 100644
--- a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration.h
+++ b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -730,6 +730,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -738,6 +743,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -751,35 +761,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.08 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1563,10 +1576,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h
index d0542385d4b9..e453aed1bde0 100644
--- a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h
+++ b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/FYSETC/Cheetah 1.2/base/Configuration.h b/config/examples/FYSETC/Cheetah 1.2/base/Configuration.h
index be0410520425..9ade0468b4de 100644
--- a/config/examples/FYSETC/Cheetah 1.2/base/Configuration.h
+++ b/config/examples/FYSETC/Cheetah 1.2/base/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -730,6 +730,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -738,6 +743,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -751,35 +761,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.08 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1563,10 +1576,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h
index d0542385d4b9..e453aed1bde0 100644
--- a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h
+++ b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/FYSETC/Cheetah/BLTouch/Configuration.h b/config/examples/FYSETC/Cheetah/BLTouch/Configuration.h
index 39b146d9da17..ccddc2e15391 100644
--- a/config/examples/FYSETC/Cheetah/BLTouch/Configuration.h
+++ b/config/examples/FYSETC/Cheetah/BLTouch/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -730,6 +732,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -738,6 +745,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -751,35 +763,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.08 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1563,10 +1578,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h
index d0542385d4b9..e453aed1bde0 100644
--- a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h
+++ b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/FYSETC/Cheetah/base/Configuration.h b/config/examples/FYSETC/Cheetah/base/Configuration.h
index 67fbd1ed3077..00f490fcbcb6 100644
--- a/config/examples/FYSETC/Cheetah/base/Configuration.h
+++ b/config/examples/FYSETC/Cheetah/base/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -730,6 +730,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -738,6 +743,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -751,35 +761,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.08 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1563,10 +1576,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h
index d0542385d4b9..e453aed1bde0 100644
--- a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h
+++ b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/FYSETC/F6_13/Configuration.h b/config/examples/FYSETC/F6_13/Configuration.h
index 3c0eeaee0ed0..3048dc173288 100644
--- a/config/examples/FYSETC/F6_13/Configuration.h
+++ b/config/examples/FYSETC/F6_13/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -385,6 +386,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -402,8 +404,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -727,6 +727,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -735,6 +740,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -748,35 +758,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1560,10 +1573,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/FYSETC/F6_13/Configuration_adv.h b/config/examples/FYSETC/F6_13/Configuration_adv.h
index 68d76af4a2d7..5b5be57dea5b 100644
--- a/config/examples/FYSETC/F6_13/Configuration_adv.h
+++ b/config/examples/FYSETC/F6_13/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Felix/DUAL/Configuration.h b/config/examples/Felix/DUAL/Configuration.h
index 9adfb27ad24b..be26b9d9e960 100644
--- a/config/examples/Felix/DUAL/Configuration.h
+++ b/config/examples/Felix/DUAL/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, Felix/DUAL)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 1
@@ -707,6 +707,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -715,6 +720,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 5000, 5000, 100, 80000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -728,35 +738,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.023 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1540,10 +1553,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Felix/Configuration_adv.h b/config/examples/Felix/DUAL/Configuration_adv.h
similarity index 98%
rename from config/examples/Felix/Configuration_adv.h
rename to config/examples/Felix/DUAL/Configuration_adv.h
index 5ef7cf106f82..6c13fb00f600 100644
--- a/config/examples/Felix/Configuration_adv.h
+++ b/config/examples/Felix/DUAL/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Felix/README.md b/config/examples/Felix/DUAL/README.md
similarity index 100%
rename from config/examples/Felix/README.md
rename to config/examples/Felix/DUAL/README.md
diff --git a/config/examples/Felix/Configuration.h b/config/examples/Felix/Single/Configuration.h
similarity index 97%
rename from config/examples/Felix/Configuration.h
rename to config/examples/Felix/Single/Configuration.h
index f379d63cff32..159176547ed1 100644
--- a/config/examples/Felix/Configuration.h
+++ b/config/examples/Felix/Single/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, Felix)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -707,6 +707,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -715,6 +720,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 5000, 5000, 100, 80000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -728,35 +738,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.023 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1540,10 +1553,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Felix/Single/Configuration_adv.h b/config/examples/Felix/Single/Configuration_adv.h
new file mode 100644
index 000000000000..6c13fb00f600
--- /dev/null
+++ b/config/examples/Felix/Single/Configuration_adv.h
@@ -0,0 +1,2798 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * Configuration_adv.h
+ *
+ * Advanced settings.
+ * Only change these if you know exactly what you're doing.
+ * Some of these settings can damage your printer if improperly set!
+ *
+ * Basic settings can be found in Configuration.h
+ *
+ */
+#define CONFIGURATION_ADV_H_VERSION 020000
+
+// @section temperature
+
+//===========================================================================
+//=============================Thermal Settings ============================
+//===========================================================================
+
+//
+// Custom Thermistor 1000 parameters
+//
+#if TEMP_SENSOR_0 == 1000
+ #define HOTEND0_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND0_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND0_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_1 == 1000
+ #define HOTEND1_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND1_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND1_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_2 == 1000
+ #define HOTEND2_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND2_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND2_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_3 == 1000
+ #define HOTEND3_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND3_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND3_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_4 == 1000
+ #define HOTEND4_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND4_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND4_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_5 == 1000
+ #define HOTEND5_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND5_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND5_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_BED == 1000
+ #define BED_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define BED_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define BED_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_CHAMBER == 1000
+ #define CHAMBER_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define CHAMBER_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define CHAMBER_BETA 3950 // Beta value
+#endif
+
+//
+// Hephestos 2 24V heated bed upgrade kit.
+// https://store.bq.com/en/heated-bed-kit-hephestos2
+//
+//#define HEPHESTOS2_HEATED_BED_KIT
+#if ENABLED(HEPHESTOS2_HEATED_BED_KIT)
+ #undef TEMP_SENSOR_BED
+ #define TEMP_SENSOR_BED 70
+ #define HEATER_BED_INVERTING true
+#endif
+
+/**
+ * Heated Chamber settings
+ */
+#if TEMP_SENSOR_CHAMBER
+ #define CHAMBER_MINTEMP 5
+ #define CHAMBER_MAXTEMP 60
+ #define TEMP_CHAMBER_HYSTERESIS 1 // (°C) Temperature proximity considered "close enough" to the target
+ //#define CHAMBER_LIMIT_SWITCHING
+ //#define HEATER_CHAMBER_PIN 44 // Chamber heater on/off pin
+ //#define HEATER_CHAMBER_INVERTING false
+#endif
+
+#if DISABLED(PIDTEMPBED)
+ #define BED_CHECK_INTERVAL 5000 // ms between checks in bang-bang control
+ #if ENABLED(BED_LIMIT_SWITCHING)
+ #define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
+ #endif
+#endif
+
+/**
+ * Thermal Protection provides additional protection to your printer from damage
+ * and fire. Marlin always includes safe min and max temperature ranges which
+ * protect against a broken or disconnected thermistor wire.
+ *
+ * The issue: If a thermistor falls out, it will report the much lower
+ * temperature of the air in the room, and the the firmware will keep
+ * the heater on.
+ *
+ * The solution: Once the temperature reaches the target, start observing.
+ * If the temperature stays too far below the target (hysteresis) for too
+ * long (period), the firmware will halt the machine as a safety precaution.
+ *
+ * If you get false positives for "Thermal Runaway", increase
+ * THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD
+ */
+#if ENABLED(THERMAL_PROTECTION_HOTENDS)
+ #define THERMAL_PROTECTION_PERIOD 40 // Seconds
+ #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius
+
+ //#define ADAPTIVE_FAN_SLOWING // Slow part cooling fan if temperature drops
+ #if BOTH(ADAPTIVE_FAN_SLOWING, PIDTEMP)
+ //#define NO_FAN_SLOWING_IN_PID_TUNING // Don't slow fan speed during M303
+ #endif
+
+ /**
+ * Whenever an M104, M109, or M303 increases the target temperature, the
+ * firmware will wait for the WATCH_TEMP_PERIOD to expire. If the temperature
+ * hasn't increased by WATCH_TEMP_INCREASE degrees, the machine is halted and
+ * requires a hard reset. This test restarts with any M104/M109/M303, but only
+ * if the current temperature is far enough below the target for a reliable
+ * test.
+ *
+ * If you get false positives for "Heating failed", increase WATCH_TEMP_PERIOD
+ * and/or decrease WATCH_TEMP_INCREASE. WATCH_TEMP_INCREASE should not be set
+ * below 2.
+ */
+ #define WATCH_TEMP_PERIOD 20 // Seconds
+ #define WATCH_TEMP_INCREASE 2 // Degrees Celsius
+#endif
+
+/**
+ * Thermal Protection parameters for the bed are just as above for hotends.
+ */
+#if ENABLED(THERMAL_PROTECTION_BED)
+ #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
+ #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
+
+ /**
+ * As described above, except for the bed (M140/M190/M303).
+ */
+ #define WATCH_BED_TEMP_PERIOD 60 // Seconds
+ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
+#endif
+
+/**
+ * Thermal Protection parameters for the heated chamber.
+ */
+#if ENABLED(THERMAL_PROTECTION_CHAMBER)
+ #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds
+ #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius
+
+ /**
+ * Heated chamber watch settings (M141/M191).
+ */
+ #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds
+ #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius
+#endif
+
+#if ENABLED(PIDTEMP)
+ // Add an experimental additional term to the heater power, proportional to the extrusion speed.
+ // A well-chosen Kc value should add just enough power to melt the increased material volume.
+ //#define PID_EXTRUSION_SCALING
+ #if ENABLED(PID_EXTRUSION_SCALING)
+ #define DEFAULT_Kc (100) //heating power=Kc*(e_speed)
+ #define LPQ_MAX_LEN 50
+ #endif
+#endif
+
+/**
+ * Automatic Temperature:
+ * The hotend target temperature is calculated by all the buffered lines of gcode.
+ * The maximum buffered steps/sec of the extruder motor is called "se".
+ * Start autotemp mode with M109 S B F
+ * The target temperature is set to mintemp+factor*se[steps/sec] and is limited by
+ * mintemp and maxtemp. Turn this off by executing M109 without F*
+ * Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp.
+ * On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode
+ */
+#define AUTOTEMP
+#if ENABLED(AUTOTEMP)
+ #define AUTOTEMP_OLDWEIGHT 0.98
+#endif
+
+// Show extra position information with 'M114 D'
+//#define M114_DETAIL
+
+// Show Temperature ADC value
+// Enable for M105 to include ADC values read from temperature sensors.
+//#define SHOW_TEMP_ADC_VALUES
+
+/**
+ * High Temperature Thermistor Support
+ *
+ * Thermistors able to support high temperature tend to have a hard time getting
+ * good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP
+ * will probably be caught when the heating element first turns on during the
+ * preheating process, which will trigger a min_temp_error as a safety measure
+ * and force stop everything.
+ * To circumvent this limitation, we allow for a preheat time (during which,
+ * min_temp_error won't be triggered) and add a min_temp buffer to handle
+ * aberrant readings.
+ *
+ * If you want to enable this feature for your hotend thermistor(s)
+ * uncomment and set values > 0 in the constants below
+ */
+
+// The number of consecutive low temperature errors that can occur
+// before a min_temp_error is triggered. (Shouldn't be more than 10.)
+//#define MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED 0
+
+// The number of milliseconds a hotend will preheat before starting to check
+// the temperature. This value should NOT be set to the time it takes the
+// hot end to reach the target temperature, but the time it takes to reach
+// the minimum temperature your thermistor can read. The lower the better/safer.
+// This shouldn't need to be more than 30 seconds (30000)
+//#define MILLISECONDS_PREHEAT_TIME 0
+
+// @section extruder
+
+// Extruder runout prevention.
+// If the machine is idle and the temperature over MINTEMP
+// then extrude some filament every couple of SECONDS.
+//#define EXTRUDER_RUNOUT_PREVENT
+#if ENABLED(EXTRUDER_RUNOUT_PREVENT)
+ #define EXTRUDER_RUNOUT_MINTEMP 190
+ #define EXTRUDER_RUNOUT_SECONDS 30
+ #define EXTRUDER_RUNOUT_SPEED 1500 // (mm/m)
+ #define EXTRUDER_RUNOUT_EXTRUDE 5 // (mm)
+#endif
+
+// @section temperature
+
+// Calibration for AD595 / AD8495 sensor to adjust temperature measurements.
+// The final temperature is calculated as (measuredTemp * GAIN) + OFFSET.
+#define TEMP_SENSOR_AD595_OFFSET 0.0
+#define TEMP_SENSOR_AD595_GAIN 1.0
+#define TEMP_SENSOR_AD8495_OFFSET 0.0
+#define TEMP_SENSOR_AD8495_GAIN 1.0
+
+/**
+ * Controller Fan
+ * To cool down the stepper drivers and MOSFETs.
+ *
+ * The fan will turn on automatically whenever any stepper is enabled
+ * and turn off after a set period after all steppers are turned off.
+ */
+//#define USE_CONTROLLER_FAN
+#if ENABLED(USE_CONTROLLER_FAN)
+ //#define CONTROLLER_FAN_PIN -1 // Set a custom pin for the controller fan
+ #define CONTROLLERFAN_SECS 60 // Duration in seconds for the fan to run after all motors are disabled
+ #define CONTROLLERFAN_SPEED 255 // 255 == full speed
+ //#define CONTROLLERFAN_SPEED_Z_ONLY 127 // Reduce noise on machines that keep Z enabled
+#endif
+
+// When first starting the main fan, run it at full speed for the
+// given number of milliseconds. This gets the fan spinning reliably
+// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
+//#define FAN_KICKSTART_TIME 100
+
+/**
+ * PWM Fan Scaling
+ *
+ * Define the min/max speeds for PWM fans (as set with M106).
+ *
+ * With these options the M106 0-255 value range is scaled to a subset
+ * to ensure that the fan has enough power to spin, or to run lower
+ * current fans with higher current. (e.g., 5V/12V fans with 12V/24V)
+ * Value 0 always turns off the fan.
+ *
+ * Define one or both of these to override the default 0-255 range.
+ */
+//#define FAN_MIN_PWM 50
+//#define FAN_MAX_PWM 128
+
+/**
+ * FAST PWM FAN Settings
+ *
+ * Use to change the FAST FAN PWM frequency (if enabled in Configuration.h)
+ * Combinations of PWM Modes, prescale values and TOP resolutions are used internally to produce a
+ * frequency as close as possible to the desired frequency.
+ *
+ * FAST_PWM_FAN_FREQUENCY [undefined by default]
+ * Set this to your desired frequency.
+ * If left undefined this defaults to F = F_CPU/(2*255*1)
+ * ie F = 31.4 Khz on 16 MHz microcontrollers or F = 39.2 KHz on 20 MHz microcontrollers
+ * These defaults are the same as with the old FAST_PWM_FAN implementation - no migration is required
+ * NOTE: Setting very low frequencies (< 10 Hz) may result in unexpected timer behavior.
+ *
+ * USE_OCR2A_AS_TOP [undefined by default]
+ * Boards that use TIMER2 for PWM have limitations resulting in only a few possible frequencies on TIMER2:
+ * 16MHz MCUs: [62.5KHz, 31.4KHz (default), 7.8KHz, 3.92KHz, 1.95KHz, 977Hz, 488Hz, 244Hz, 60Hz, 122Hz, 30Hz]
+ * 20MHz MCUs: [78.1KHz, 39.2KHz (default), 9.77KHz, 4.9KHz, 2.44KHz, 1.22KHz, 610Hz, 305Hz, 153Hz, 76Hz, 38Hz]
+ * A greater range can be achieved by enabling USE_OCR2A_AS_TOP. But note that this option blocks the use of
+ * PWM on pin OC2A. Only use this option if you don't need PWM on 0C2A. (Check your schematic.)
+ * USE_OCR2A_AS_TOP sacrifices duty cycle control resolution to achieve this broader range of frequencies.
+ */
+#if ENABLED(FAST_PWM_FAN)
+ //#define FAST_PWM_FAN_FREQUENCY 31400
+ //#define USE_OCR2A_AS_TOP
+#endif
+
+// @section extruder
+
+/**
+ * Extruder cooling fans
+ *
+ * Extruder auto fans automatically turn on when their extruders'
+ * temperatures go above EXTRUDER_AUTO_FAN_TEMPERATURE.
+ *
+ * Your board's pins file specifies the recommended pins. Override those here
+ * or set to -1 to disable completely.
+ *
+ * Multiple extruders can be assigned to the same pin in which case
+ * the fan will turn on when any selected extruder is above the threshold.
+ */
+#define E0_AUTO_FAN_PIN -1
+#define E1_AUTO_FAN_PIN -1
+#define E2_AUTO_FAN_PIN -1
+#define E3_AUTO_FAN_PIN -1
+#define E4_AUTO_FAN_PIN -1
+#define E5_AUTO_FAN_PIN -1
+#define CHAMBER_AUTO_FAN_PIN -1
+
+#define EXTRUDER_AUTO_FAN_TEMPERATURE 50
+#define EXTRUDER_AUTO_FAN_SPEED 255 // 255 == full speed
+#define CHAMBER_AUTO_FAN_TEMPERATURE 30
+#define CHAMBER_AUTO_FAN_SPEED 255
+
+/**
+ * Part-Cooling Fan Multiplexer
+ *
+ * This feature allows you to digitally multiplex the fan output.
+ * The multiplexer is automatically switched at tool-change.
+ * Set FANMUX[012]_PINs below for up to 2, 4, or 8 multiplexed fans.
+ */
+#define FANMUX0_PIN -1
+#define FANMUX1_PIN -1
+#define FANMUX2_PIN -1
+
+/**
+ * M355 Case Light on-off / brightness
+ */
+//#define CASE_LIGHT_ENABLE
+#if ENABLED(CASE_LIGHT_ENABLE)
+ //#define CASE_LIGHT_PIN 4 // Override the default pin if needed
+ #define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
+ #define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
+ #define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
+ //#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
+ //#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
+ //#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
+ #if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
+ #define CASE_LIGHT_NEOPIXEL_COLOR { 255, 255, 255, 255 } // { Red, Green, Blue, White }
+ #endif
+#endif
+
+// @section homing
+
+// If you want endstops to stay on (by default) even when not homing
+// enable this option. Override at any time with M120, M121.
+//#define ENDSTOPS_ALWAYS_ON_DEFAULT
+
+// @section extras
+
+//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
+
+// Employ an external closed loop controller. Override pins here if needed.
+//#define EXTERNAL_CLOSED_LOOP_CONTROLLER
+#if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER)
+ //#define CLOSED_LOOP_ENABLE_PIN -1
+ //#define CLOSED_LOOP_MOVE_COMPLETE_PIN -1
+#endif
+
+/**
+ * Dual Steppers / Dual Endstops
+ *
+ * This section will allow you to use extra E drivers to drive a second motor for X, Y, or Z axes.
+ *
+ * For example, set X_DUAL_STEPPER_DRIVERS setting to use a second motor. If the motors need to
+ * spin in opposite directions set INVERT_X2_VS_X_DIR. If the second motor needs its own endstop
+ * set X_DUAL_ENDSTOPS. This can adjust for "racking." Use X2_USE_ENDSTOP to set the endstop plug
+ * that should be used for the second endstop. Extra endstops will appear in the output of 'M119'.
+ *
+ * Use X_DUAL_ENDSTOP_ADJUSTMENT to adjust for mechanical imperfection. After homing both motors
+ * this offset is applied to the X2 motor. To find the offset home the X axis, and measure the error
+ * in X2. Dual endstop offsets can be set at runtime with 'M666 X Y Z'.
+ */
+
+//#define X_DUAL_STEPPER_DRIVERS
+#if ENABLED(X_DUAL_STEPPER_DRIVERS)
+ #define INVERT_X2_VS_X_DIR true // Set 'true' if X motors should rotate in opposite directions
+ //#define X_DUAL_ENDSTOPS
+ #if ENABLED(X_DUAL_ENDSTOPS)
+ #define X2_USE_ENDSTOP _XMAX_
+ #define X_DUAL_ENDSTOPS_ADJUSTMENT 0
+ #endif
+#endif
+
+//#define Y_DUAL_STEPPER_DRIVERS
+#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
+ #define INVERT_Y2_VS_Y_DIR true // Set 'true' if Y motors should rotate in opposite directions
+ //#define Y_DUAL_ENDSTOPS
+ #if ENABLED(Y_DUAL_ENDSTOPS)
+ #define Y2_USE_ENDSTOP _YMAX_
+ #define Y_DUAL_ENDSTOPS_ADJUSTMENT 0
+ #endif
+#endif
+
+//#define Z_DUAL_STEPPER_DRIVERS
+#if ENABLED(Z_DUAL_STEPPER_DRIVERS)
+ //#define Z_DUAL_ENDSTOPS
+ #if ENABLED(Z_DUAL_ENDSTOPS)
+ #define Z2_USE_ENDSTOP _XMAX_
+ #define Z_DUAL_ENDSTOPS_ADJUSTMENT 0
+ #endif
+#endif
+
+//#define Z_TRIPLE_STEPPER_DRIVERS
+#if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
+ //#define Z_TRIPLE_ENDSTOPS
+ #if ENABLED(Z_TRIPLE_ENDSTOPS)
+ #define Z2_USE_ENDSTOP _XMAX_
+ #define Z3_USE_ENDSTOP _YMAX_
+ #define Z_TRIPLE_ENDSTOPS_ADJUSTMENT2 0
+ #define Z_TRIPLE_ENDSTOPS_ADJUSTMENT3 0
+ #endif
+#endif
+
+/**
+ * Dual X Carriage
+ *
+ * This setup has two X carriages that can move independently, each with its own hotend.
+ * The carriages can be used to print an object with two colors or materials, or in
+ * "duplication mode" it can print two identical or X-mirrored objects simultaneously.
+ * The inactive carriage is parked automatically to prevent oozing.
+ * X1 is the left carriage, X2 the right. They park and home at opposite ends of the X axis.
+ * By default the X2 stepper is assigned to the first unused E plug on the board.
+ *
+ * The following Dual X Carriage modes can be selected with M605 S:
+ *
+ * 0 : (FULL_CONTROL) The slicer has full control over both X-carriages and can achieve optimal travel
+ * results as long as it supports dual X-carriages. (M605 S0)
+ *
+ * 1 : (AUTO_PARK) The firmware automatically parks and unparks the X-carriages on tool-change so
+ * that additional slicer support is not required. (M605 S1)
+ *
+ * 2 : (DUPLICATION) The firmware moves the second X-carriage and extruder in synchronization with
+ * the first X-carriage and extruder, to print 2 copies of the same object at the same time.
+ * Set the constant X-offset and temperature differential with M605 S2 X[offs] R[deg] and
+ * follow with M605 S2 to initiate duplicated movement.
+ *
+ * 3 : (MIRRORED) Formbot/Vivedino-inspired mirrored mode in which the second extruder duplicates
+ * the movement of the first except the second extruder is reversed in the X axis.
+ * Set the initial X offset and temperature differential with M605 S2 X[offs] R[deg] and
+ * follow with M605 S3 to initiate mirrored movement.
+ */
+//#define DUAL_X_CARRIAGE
+#if ENABLED(DUAL_X_CARRIAGE)
+ #define X1_MIN_POS X_MIN_POS // Set to X_MIN_POS
+ #define X1_MAX_POS X_BED_SIZE // Set a maximum so the first X-carriage can't hit the parked second X-carriage
+ #define X2_MIN_POS 80 // Set a minimum to ensure the second X-carriage can't hit the parked first X-carriage
+ #define X2_MAX_POS 353 // Set this to the distance between toolheads when both heads are homed
+ #define X2_HOME_DIR 1 // Set to 1. The second X-carriage always homes to the maximum endstop position
+ #define X2_HOME_POS X2_MAX_POS // Default X2 home position. Set to X2_MAX_POS.
+ // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software
+ // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops
+ // without modifying the firmware (through the "M218 T1 X???" command).
+ // Remember: you should set the second extruder x-offset to 0 in your slicer.
+
+ // This is the default power-up mode which can be later using M605.
+ #define DEFAULT_DUAL_X_CARRIAGE_MODE DXC_AUTO_PARK_MODE
+
+ // Default x offset in duplication mode (typically set to half print bed width)
+ #define DEFAULT_DUPLICATION_X_OFFSET 100
+
+#endif // DUAL_X_CARRIAGE
+
+// Activate a solenoid on the active extruder with M380. Disable all with M381.
+// Define SOL0_PIN, SOL1_PIN, etc., for each extruder that has a solenoid.
+//#define EXT_SOLENOID
+
+// @section homing
+
+// Homing hits each endstop, retracts by these distances, then does a slower bump.
+#define X_HOME_BUMP_MM 5
+#define Y_HOME_BUMP_MM 5
+#define Z_HOME_BUMP_MM 3
+#define HOMING_BUMP_DIVISOR { 2, 2, 4 } // Re-Bump Speed Divisor (Divides the Homing Feedrate)
+//#define QUICK_HOME // If homing includes X and Y, do a diagonal move initially
+//#define HOMING_BACKOFF_MM { 2, 2, 2 } // (mm) Move away from the endstops after homing
+
+// When G28 is called, this option will make Y home before X
+//#define HOME_Y_BEFORE_X
+
+// Enable this if X or Y can't home without homing the other axis first.
+//#define CODEPENDENT_XY_HOMING
+
+#if ENABLED(BLTOUCH)
+ /**
+ * Either: Use the defaults (recommended) or: For special purposes, use the following DEFINES
+ * Do not activate settings that the probe might not understand. Clones might misunderstand
+ * advanced commands.
+ *
+ * Note: If the probe is not deploying, check a "Cmd: Reset" and "Cmd: Self-Test" and then
+ * check the wiring of the BROWN, RED and ORANGE wires.
+ *
+ * Note: If the trigger signal of your probe is not being recognized, it has been very often
+ * because the BLACK and WHITE wires needed to be swapped. They are not "interchangeable"
+ * like they would be with a real switch. So please check the wiring first.
+ *
+ * Settings for all BLTouch and clone probes:
+ */
+
+ // Safety: The probe needs time to recognize the command.
+ // Minimum command delay (ms). Enable and increase if needed.
+ //#define BLTOUCH_DELAY 500
+
+ /**
+ * Settings for BLTOUCH Classic 1.2, 1.3 or BLTouch Smart 1.0, 2.0, 2.2, 3.0, 3.1, and most clones:
+ */
+
+ // Feature: Switch into SW mode after a deploy. It makes the output pulse longer. Can be useful
+ // in special cases, like noisy or filtered input configurations.
+ //#define BLTOUCH_FORCE_SW_MODE
+
+ /**
+ * Settings for BLTouch Smart 3.0 and 3.1
+ * Summary:
+ * - Voltage modes: 5V and OD (open drain - "logic voltage free") output modes
+ * - High-Speed mode
+ * - Disable LCD voltage options
+ */
+
+ /**
+ * Danger: Don't activate 5V mode unless attached to a 5V-tolerant controller!
+ * V3.0 or 3.1: Set default mode to 5V mode at Marlin startup.
+ * If disabled, OD mode is the hard-coded default on 3.0
+ * On startup, Marlin will compare its eeprom to this vale. If the selected mode
+ * differs, a mode set eeprom write will be completed at initialization.
+ * Use the option below to force an eeprom write to a V3.1 probe regardless.
+ */
+ //#define BLTOUCH_SET_5V_MODE
+
+ /**
+ * Safety: Activate if connecting a probe with an unknown voltage mode.
+ * V3.0: Set a probe into mode selected above at Marlin startup. Required for 5V mode on 3.0
+ * V3.1: Force a probe with unknown mode into selected mode at Marlin startup ( = Probe EEPROM write )
+ * To preserve the life of the probe, use this once then turn it off and re-flash.
+ */
+ //#define BLTOUCH_FORCE_MODE_SET
+
+ /**
+ * Use "HIGH SPEED" mode for probing.
+ * Danger: Disable if your probe sometimes fails. Only suitable for stable well-adjusted systems.
+ * This feature was designed for Delta's with very fast Z moves however higher speed cartesians may function
+ * If the machine cannot raise the probe fast enough after a trigger, it may enter a fault state.
+ */
+ //#define BLTOUCH_HS_MODE
+
+ // Safety: Enable voltage mode settings in the LCD menu.
+ //#define BLTOUCH_LCD_VOLTAGE_MENU
+
+#endif // BLTOUCH
+
+/**
+ * Z Steppers Auto-Alignment
+ * Add the G34 command to align multiple Z steppers using a bed probe.
+ */
+//#define Z_STEPPER_AUTO_ALIGN
+#if ENABLED(Z_STEPPER_AUTO_ALIGN)
+ // Define probe X and Y positions for Z1, Z2 [, Z3]
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_ITERATIONS 3
+
+ // Enable to restore leveling setup after operation
+ #define RESTORE_LEVELING_AFTER_G34
+
+ // On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
+ #define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
+
+ // Stop criterion. If the accuracy is better than this stop iterating early
+ #define Z_STEPPER_ALIGN_ACC 0.02
+#endif
+
+// @section motion
+
+#define AXIS_RELATIVE_MODES { false, false, false, false }
+
+// Add a Duplicate option for well-separated conjoined nozzles
+//#define MULTI_NOZZLE_DUPLICATION
+
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
+#define INVERT_X_STEP_PIN false
+#define INVERT_Y_STEP_PIN false
+#define INVERT_Z_STEP_PIN false
+#define INVERT_E_STEP_PIN false
+
+// Default stepper release if idle. Set to 0 to deactivate.
+// Steppers will shut down DEFAULT_STEPPER_DEACTIVE_TIME seconds after the last move when DISABLE_INACTIVE_? is true.
+// Time can be set by M18 and M84.
+#define DEFAULT_STEPPER_DEACTIVE_TIME 60
+#define DISABLE_INACTIVE_X true
+#define DISABLE_INACTIVE_Y true
+#define DISABLE_INACTIVE_Z true // Set to false if the nozzle will fall down on your printed part when print has finished.
+#define DISABLE_INACTIVE_E true
+
+#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
+#define DEFAULT_MINTRAVELFEEDRATE 0.0
+
+//#define HOME_AFTER_DEACTIVATE // Require rehoming after steppers are deactivated
+
+// Minimum time that a segment needs to take if the buffer is emptied
+#define DEFAULT_MINSEGMENTTIME 20000 // (ms)
+
+// If defined the movements slow down when the look ahead buffer is only half full
+#define SLOWDOWN
+
+// Frequency limit
+// See nophead's blog for more info
+// Not working O
+//#define XY_FREQUENCY_LIMIT 15
+
+// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
+// of the buffer and all stops. This should not be much greater than zero and should only be changed
+// if unwanted behavior is observed on a user's machine when running at very slow speeds.
+#define MINIMUM_PLANNER_SPEED 0.05 // (mm/s)
+
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
+/**
+ * Automatic backlash, position and hotend offset calibration
+ *
+ * Enable G425 to run automatic calibration using an electrically-
+ * conductive cube, bolt, or washer mounted on the bed.
+ *
+ * G425 uses the probe to touch the top and sides of the calibration object
+ * on the bed and measures and/or correct positional offsets, axis backlash
+ * and hotend offsets.
+ *
+ * Note: HOTEND_OFFSET and CALIBRATION_OBJECT_CENTER must be set to within
+ * ±5mm of true values for G425 to succeed.
+ */
+//#define CALIBRATION_GCODE
+#if ENABLED(CALIBRATION_GCODE)
+
+ #define CALIBRATION_MEASUREMENT_RESOLUTION 0.01 // mm
+
+ #define CALIBRATION_FEEDRATE_SLOW 60 // mm/m
+ #define CALIBRATION_FEEDRATE_FAST 1200 // mm/m
+ #define CALIBRATION_FEEDRATE_TRAVEL 3000 // mm/m
+
+ // The following parameters refer to the conical section of the nozzle tip.
+ #define CALIBRATION_NOZZLE_TIP_HEIGHT 1.0 // mm
+ #define CALIBRATION_NOZZLE_OUTER_DIAMETER 2.0 // mm
+
+ // Uncomment to enable reporting (required for "G425 V", but consumes PROGMEM).
+ //#define CALIBRATION_REPORTING
+
+ // The true location and dimension the cube/bolt/washer on the bed.
+ #define CALIBRATION_OBJECT_CENTER { 264.0, -22.0, -2.0 } // mm
+ #define CALIBRATION_OBJECT_DIMENSIONS { 10.0, 10.0, 10.0 } // mm
+
+ // Comment out any sides which are unreachable by the probe. For best
+ // auto-calibration results, all sides must be reachable.
+ #define CALIBRATION_MEASURE_RIGHT
+ #define CALIBRATION_MEASURE_FRONT
+ #define CALIBRATION_MEASURE_LEFT
+ #define CALIBRATION_MEASURE_BACK
+
+ // Probing at the exact top center only works if the center is flat. If
+ // probing on a screwhead or hollow washer, probe near the edges.
+ //#define CALIBRATION_MEASURE_AT_TOP_EDGES
+
+ // Define pin which is read during calibration
+ #ifndef CALIBRATION_PIN
+ #define CALIBRATION_PIN -1 // Override in pins.h or set to -1 to use your Z endstop
+ #define CALIBRATION_PIN_INVERTING false // Set to true to invert the pin
+ //#define CALIBRATION_PIN_PULLDOWN
+ #define CALIBRATION_PIN_PULLUP
+ #endif
+#endif
+
+/**
+ * Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
+ * below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
+ * vibration and surface artifacts. The algorithm adapts to provide the best possible step smoothing at the
+ * lowest stepping frequencies.
+ */
+//#define ADAPTIVE_STEP_SMOOTHING
+
+/**
+ * Custom Microstepping
+ * Override as-needed for your setup. Up to 3 MS pins are supported.
+ */
+//#define MICROSTEP1 LOW,LOW,LOW
+//#define MICROSTEP2 HIGH,LOW,LOW
+//#define MICROSTEP4 LOW,HIGH,LOW
+//#define MICROSTEP8 HIGH,HIGH,LOW
+//#define MICROSTEP16 LOW,LOW,HIGH
+//#define MICROSTEP32 HIGH,LOW,HIGH
+
+// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU.
+#define MICROSTEP_MODES { 16, 16, 16, 16, 16, 16 } // [1,2,4,8,16]
+
+/**
+ * @section stepper motor current
+ *
+ * Some boards have a means of setting the stepper motor current via firmware.
+ *
+ * The power on motor currents are set by:
+ * PWM_MOTOR_CURRENT - used by MINIRAMBO & ULTIMAIN_2
+ * known compatible chips: A4982
+ * DIGIPOT_MOTOR_CURRENT - used by BQ_ZUM_MEGA_3D, RAMBO & SCOOVO_X9H
+ * known compatible chips: AD5206
+ * DAC_MOTOR_CURRENT_DEFAULT - used by PRINTRBOARD_REVF & RIGIDBOARD_V2
+ * known compatible chips: MCP4728
+ * DIGIPOT_I2C_MOTOR_CURRENTS - used by 5DPRINT, AZTEEG_X3_PRO, AZTEEG_X5_MINI_WIFI, MIGHTYBOARD_REVE
+ * known compatible chips: MCP4451, MCP4018
+ *
+ * Motor currents can also be set by M907 - M910 and by the LCD.
+ * M907 - applies to all.
+ * M908 - BQ_ZUM_MEGA_3D, RAMBO, PRINTRBOARD_REVF, RIGIDBOARD_V2 & SCOOVO_X9H
+ * M909, M910 & LCD - only PRINTRBOARD_REVF & RIGIDBOARD_V2
+ */
+//#define PWM_MOTOR_CURRENT { 1300, 1300, 1250 } // Values in milliamps
+//#define DIGIPOT_MOTOR_CURRENT { 135,135,135,135,135 } // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
+//#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
+
+// Use an I2C based DIGIPOT (e.g., Azteeg X3 Pro)
+//#define DIGIPOT_I2C
+#if ENABLED(DIGIPOT_I2C) && !defined(DIGIPOT_I2C_ADDRESS_A)
+ /**
+ * Common slave addresses:
+ *
+ * A (A shifted) B (B shifted) IC
+ * Smoothie 0x2C (0x58) 0x2D (0x5A) MCP4451
+ * AZTEEG_X3_PRO 0x2C (0x58) 0x2E (0x5C) MCP4451
+ * AZTEEG_X5_MINI 0x2C (0x58) 0x2E (0x5C) MCP4451
+ * AZTEEG_X5_MINI_WIFI 0x58 0x5C MCP4451
+ * MIGHTYBOARD_REVE 0x2F (0x5E) MCP4018
+ */
+ #define DIGIPOT_I2C_ADDRESS_A 0x2C // unshifted slave address for first DIGIPOT
+ #define DIGIPOT_I2C_ADDRESS_B 0x2D // unshifted slave address for second DIGIPOT
+#endif
+
+//#define DIGIPOT_MCP4018 // Requires library from https://github.com/stawel/SlowSoftI2CMaster
+#define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4 AZTEEG_X3_PRO: 8 MKS SBASE: 5
+// Actual motor currents in Amps. The number of entries must match DIGIPOT_I2C_NUM_CHANNELS.
+// These correspond to the physical drivers, so be mindful if the order is changed.
+#define DIGIPOT_I2C_MOTOR_CURRENTS { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 } // AZTEEG_X3_PRO
+
+//===========================================================================
+//=============================Additional Features===========================
+//===========================================================================
+
+// @section lcd
+
+#if EITHER(ULTIPANEL, EXTENSIBLE_UI)
+ #define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 60 } // Feedrates for manual moves along X, Y, Z, E from panel
+ #define SHORT_MANUAL_Z_MOVE 0.025 // (mm) Smallest manual Z move (< 0.1mm)
+ #if ENABLED(ULTIPANEL)
+ #define MANUAL_E_MOVES_RELATIVE // Display extruder move distance rather than "position"
+ #define ULTIPANEL_FEEDMULTIPLY // Encoder sets the feedrate multiplier on the Status Screen
+ #endif
+#endif
+
+// Change values more rapidly when the encoder is rotated faster
+#define ENCODER_RATE_MULTIPLIER
+#if ENABLED(ENCODER_RATE_MULTIPLIER)
+ #define ENCODER_10X_STEPS_PER_SEC 30 // (steps/s) Encoder rate for 10x speed
+ #define ENCODER_100X_STEPS_PER_SEC 80 // (steps/s) Encoder rate for 100x speed
+#endif
+
+// Play a beep when the feedrate is changed from the Status Screen
+//#define BEEP_ON_FEEDRATE_CHANGE
+#if ENABLED(BEEP_ON_FEEDRATE_CHANGE)
+ #define FEEDRATE_CHANGE_BEEP_DURATION 10
+ #define FEEDRATE_CHANGE_BEEP_FREQUENCY 440
+#endif
+
+#if HAS_LCD_MENU
+
+ // Include a page of printer information in the LCD Main Menu
+ //#define LCD_INFO_MENU
+ #if ENABLED(LCD_INFO_MENU)
+ //#define LCD_PRINTER_INFO_IS_BOOTSCREEN // Show bootscreen(s) instead of Printer Info pages
+ #endif
+
+ // BACK menu items keep the highlight at the top
+ //#define TURBO_BACK_MENU_ITEM
+
+ /**
+ * LED Control Menu
+ * Add LED Control to the LCD menu
+ */
+ //#define LED_CONTROL_MENU
+ #if ENABLED(LED_CONTROL_MENU)
+ #define LED_COLOR_PRESETS // Enable the Preset Color menu option
+ #if ENABLED(LED_COLOR_PRESETS)
+ #define LED_USER_PRESET_RED 255 // User defined RED value
+ #define LED_USER_PRESET_GREEN 128 // User defined GREEN value
+ #define LED_USER_PRESET_BLUE 0 // User defined BLUE value
+ #define LED_USER_PRESET_WHITE 255 // User defined WHITE value
+ #define LED_USER_PRESET_BRIGHTNESS 255 // User defined intensity
+ //#define LED_USER_PRESET_STARTUP // Have the printer display the user preset color on startup
+ #endif
+ #endif
+
+#endif // HAS_LCD_MENU
+
+// Scroll a longer status message into view
+//#define STATUS_MESSAGE_SCROLLING
+
+// On the Info Screen, display XY with one decimal place when possible
+//#define LCD_DECIMAL_SMALL_XY
+
+// The timeout (in ms) to return to the status screen from sub-menus
+//#define LCD_TIMEOUT_TO_STATUS 15000
+
+// Add an 'M73' G-code to set the current percentage
+//#define LCD_SET_PROGRESS_MANUALLY
+
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
+#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
+ //#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
+ #if ENABLED(LCD_PROGRESS_BAR)
+ #define PROGRESS_BAR_BAR_TIME 2000 // (ms) Amount of time to show the bar
+ #define PROGRESS_BAR_MSG_TIME 3000 // (ms) Amount of time to show the status message
+ #define PROGRESS_MSG_EXPIRE 0 // (ms) Amount of time to retain the status message (0=forever)
+ //#define PROGRESS_MSG_ONCE // Show the message for MSG_TIME then clear it
+ //#define LCD_PROGRESS_BAR_TEST // Add a menu item to test the progress bar
+ #endif
+#endif
+
+#if ENABLED(SDSUPPORT)
+
+ // Some RAMPS and other boards don't detect when an SD card is inserted. You can work
+ // around this by connecting a push button or single throw switch to the pin defined
+ // as SD_DETECT_PIN in your board's pins definitions.
+ // This setting should be disabled unless you are using a push button, pulling the pin to ground.
+ // Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
+ #define SD_DETECT_INVERTED
+
+ #define SD_FINISHED_STEPPERRELEASE true // Disable steppers when SD Print is finished
+ #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the Z enabled so your bed stays in place.
+
+ // Reverse SD sort to show "more recent" files first, according to the card's FAT.
+ // Since the FAT gets out of order with usage, SDCARD_SORT_ALPHA is recommended.
+ #define SDCARD_RATHERRECENTFIRST
+
+ #define SD_MENU_CONFIRM_START // Confirm the selected SD file before printing
+
+ //#define MENU_ADDAUTOSTART // Add a menu option to run auto#.g files
+
+ #define EVENT_GCODE_SD_STOP "G28XY" // G-code to run on Stop Print (e.g., "G28XY" or "G27")
+
+ /**
+ * Continue after Power-Loss (Creality3D)
+ *
+ * Store the current state to the SD Card at the start of each layer
+ * during SD printing. If the recovery file is found at boot time, present
+ * an option on the LCD screen to continue the print from the last-known
+ * point in the file.
+ */
+ //#define POWER_LOSS_RECOVERY
+ #if ENABLED(POWER_LOSS_RECOVERY)
+ //#define POWER_LOSS_PIN 44 // Pin to detect power loss
+ //#define POWER_LOSS_STATE HIGH // State of pin indicating power loss
+ //#define POWER_LOSS_PULL // Set pullup / pulldown as appropriate
+ //#define POWER_LOSS_PURGE_LEN 20 // (mm) Length of filament to purge on resume
+ //#define POWER_LOSS_RETRACT_LEN 10 // (mm) Length of filament to retract on fail. Requires backup power.
+
+ // Without a POWER_LOSS_PIN the following option helps reduce wear on the SD card,
+ // especially with "vase mode" printing. Set too high and vases cannot be continued.
+ #define POWER_LOSS_MIN_Z_CHANGE 0.05 // (mm) Minimum Z change before saving power-loss data
+ #endif
+
+ /**
+ * Sort SD file listings in alphabetical order.
+ *
+ * With this option enabled, items on SD cards will be sorted
+ * by name for easier navigation.
+ *
+ * By default...
+ *
+ * - Use the slowest -but safest- method for sorting.
+ * - Folders are sorted to the top.
+ * - The sort key is statically allocated.
+ * - No added G-code (M34) support.
+ * - 40 item sorting limit. (Items after the first 40 are unsorted.)
+ *
+ * SD sorting uses static allocation (as set by SDSORT_LIMIT), allowing the
+ * compiler to calculate the worst-case usage and throw an error if the SRAM
+ * limit is exceeded.
+ *
+ * - SDSORT_USES_RAM provides faster sorting via a static directory buffer.
+ * - SDSORT_USES_STACK does the same, but uses a local stack-based buffer.
+ * - SDSORT_CACHE_NAMES will retain the sorted file listing in RAM. (Expensive!)
+ * - SDSORT_DYNAMIC_RAM only uses RAM when the SD menu is visible. (Use with caution!)
+ */
+ //#define SDCARD_SORT_ALPHA
+
+ // SD Card Sorting options
+ #if ENABLED(SDCARD_SORT_ALPHA)
+ #define SDSORT_LIMIT 40 // Maximum number of sorted items (10-256). Costs 27 bytes each.
+ #define FOLDER_SORTING -1 // -1=above 0=none 1=below
+ #define SDSORT_GCODE false // Allow turning sorting on/off with LCD and M34 g-code.
+ #define SDSORT_USES_RAM false // Pre-allocate a static array for faster pre-sorting.
+ #define SDSORT_USES_STACK false // Prefer the stack for pre-sorting to give back some SRAM. (Negated by next 2 options.)
+ #define SDSORT_CACHE_NAMES false // Keep sorted items in RAM longer for speedy performance. Most expensive option.
+ #define SDSORT_DYNAMIC_RAM false // Use dynamic allocation (within SD menus). Least expensive option. Set SDSORT_LIMIT before use!
+ #define SDSORT_CACHE_VFATS 2 // Maximum number of 13-byte VFAT entries to use for sorting.
+ // Note: Only affects SCROLL_LONG_FILENAMES with SDSORT_CACHE_NAMES but not SDSORT_DYNAMIC_RAM.
+ #endif
+
+ // This allows hosts to request long names for files and folders with M33
+ //#define LONG_FILENAME_HOST_SUPPORT
+
+ // Enable this option to scroll long filenames in the SD card menu
+ //#define SCROLL_LONG_FILENAMES
+
+ // Leave the heaters on after Stop Print (not recommended!)
+ //#define SD_ABORT_NO_COOLDOWN
+
+ /**
+ * This option allows you to abort SD printing when any endstop is triggered.
+ * This feature must be enabled with "M540 S1" or from the LCD menu.
+ * To have any effect, endstops must be enabled during SD printing.
+ */
+ //#define SD_ABORT_ON_ENDSTOP_HIT
+
+ /**
+ * This option makes it easier to print the same SD Card file again.
+ * On print completion the LCD Menu will open with the file selected.
+ * You can just click to start the print, or navigate elsewhere.
+ */
+ //#define SD_REPRINT_LAST_SELECTED_FILE
+
+ /**
+ * Auto-report SdCard status with M27 S
+ */
+ //#define AUTO_REPORT_SD_STATUS
+
+ /**
+ * Support for USB thumb drives using an Arduino USB Host Shield or
+ * equivalent MAX3421E breakout board. The USB thumb drive will appear
+ * to Marlin as an SD card.
+ *
+ * The MAX3421E can be assigned the same pins as the SD card reader, with
+ * the following pin mapping:
+ *
+ * SCLK, MOSI, MISO --> SCLK, MOSI, MISO
+ * INT --> SD_DETECT_PIN [1]
+ * SS --> SDSS
+ *
+ * [1] On AVR an interrupt-capable pin is best for UHS3 compatibility.
+ */
+ //#define USB_FLASH_DRIVE_SUPPORT
+ #if ENABLED(USB_FLASH_DRIVE_SUPPORT)
+ #define USB_CS_PIN SDSS
+ #define USB_INTR_PIN SD_DETECT_PIN
+
+ /**
+ * USB Host Shield Library
+ *
+ * - UHS2 uses no interrupts and has been production-tested
+ * on a LulzBot TAZ Pro with a 32-bit Archim board.
+ *
+ * - UHS3 is newer code with better USB compatibility. But it
+ * is less tested and is known to interfere with Servos.
+ * [1] This requires USB_INTR_PIN to be interrupt-capable.
+ */
+ //#define USE_UHS3_USB
+ #endif
+
+ /**
+ * When using a bootloader that supports SD-Firmware-Flashing,
+ * add a menu item to activate SD-FW-Update on the next reboot.
+ *
+ * Requires ATMEGA2560 (Arduino Mega)
+ *
+ * Tested with this bootloader:
+ * https://github.com/FleetProbe/MicroBridge-Arduino-ATMega2560
+ */
+ //#define SD_FIRMWARE_UPDATE
+ #if ENABLED(SD_FIRMWARE_UPDATE)
+ #define SD_FIRMWARE_UPDATE_EEPROM_ADDR 0x1FF
+ #define SD_FIRMWARE_UPDATE_ACTIVE_VALUE 0xF0
+ #define SD_FIRMWARE_UPDATE_INACTIVE_VALUE 0xFF
+ #endif
+
+ // Add an optimized binary file transfer mode, initiated with 'M28 B1'
+ //#define BINARY_FILE_TRANSFER
+
+ #if HAS_SDCARD_CONNECTION
+ /**
+ * Set this option to one of the following (or the board's defaults apply):
+ *
+ * LCD - Use the SD drive in the external LCD controller.
+ * ONBOARD - Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.)
+ * CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file).
+ *
+ * :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ]
+ */
+ //#define SDCARD_CONNECTION LCD
+ #endif
+
+#endif // SDSUPPORT
+
+/**
+ * By default an onboard SD card reader may be shared as a USB mass-
+ * storage device. This option hides the SD card from the host PC.
+ */
+//#define NO_SD_HOST_DRIVE // Disable SD Card access over USB (for security).
+
+/**
+ * Additional options for Graphical Displays
+ *
+ * Use the optimizations here to improve printing performance,
+ * which can be adversely affected by graphical display drawing,
+ * especially when doing several short moves, and when printing
+ * on DELTA and SCARA machines.
+ *
+ * Some of these options may result in the display lagging behind
+ * controller events, as there is a trade-off between reliable
+ * printing performance versus fast display updates.
+ */
+#if HAS_GRAPHICAL_LCD
+ // Show SD percentage next to the progress bar
+ //#define DOGM_SD_PERCENT
+
+ // Enable to save many cycles by drawing a hollow frame on the Info Screen
+ #define XYZ_HOLLOW_FRAME
+
+ // Enable to save many cycles by drawing a hollow frame on Menu Screens
+ #define MENU_HOLLOW_FRAME
+
+ // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
+ // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
+ //#define USE_BIG_EDIT_FONT
+
+ // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
+ // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
+ //#define USE_SMALL_INFOFONT
+
+ // Enable this option and reduce the value to optimize screen updates.
+ // The normal delay is 10µs. Use the lowest value that still gives a reliable display.
+ //#define DOGM_SPI_DELAY_US 5
+
+ // Swap the CW/CCW indicators in the graphics overlay
+ //#define OVERLAY_GFX_REVERSE
+
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
+ #if ENABLED(U8GLIB_ST7920)
+ //#define LIGHTWEIGHT_UI
+ #if ENABLED(LIGHTWEIGHT_UI)
+ #define STATUS_EXPIRE_SECONDS 20
+ #endif
+ #endif
+
+ /**
+ * Status (Info) Screen customizations
+ * These options may affect code size and screen render time.
+ * Custom status screens can forcibly override these settings.
+ */
+ //#define STATUS_COMBINE_HEATERS // Use combined heater images instead of separate ones
+ //#define STATUS_HOTEND_NUMBERLESS // Use plain hotend icons instead of numbered ones (with 2+ hotends)
+ #define STATUS_HOTEND_INVERTED // Show solid nozzle bitmaps when heating (Requires STATUS_HOTEND_ANIM)
+ #define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
+ #define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
+ #define STATUS_CHAMBER_ANIM // Use a second bitmap to indicate chamber heating
+ //#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
+ //#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
+ //#define STATUS_HEAT_PERCENT // Show heating in a progress bar
+ //#define BOOT_MARLIN_LOGO_SMALL // Show a smaller Marlin logo on the Boot Screen (saving 399 bytes of flash)
+ //#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~3260 (or ~940) bytes of PROGMEM.
+
+ // Frivolous Game Options
+ //#define MARLIN_BRICKOUT
+ //#define MARLIN_INVADERS
+ //#define MARLIN_SNAKE
+ //#define GAMES_EASTER_EGG // Add extra blank lines above the "Games" sub-menu
+
+#endif // HAS_GRAPHICAL_LCD
+
+//
+// Lulzbot Touch UI
+//
+#if ENABLED(LULZBOT_TOUCH_UI)
+ // Display board used
+ //#define LCD_FTDI_VM800B35A // FTDI 3.5" with FT800 (320x240)
+ //#define LCD_4DSYSTEMS_4DLCD_FT843 // 4D Systems 4.3" (480x272)
+ //#define LCD_HAOYU_FT800CB // Haoyu with 4.3" or 5" (480x272)
+ //#define LCD_HAOYU_FT810CB // Haoyu with 5" (800x480)
+ //#define LCD_ALEPHOBJECTS_CLCD_UI // Aleph Objects Color LCD UI
+
+ // Correct the resolution if not using the stock TFT panel.
+ //#define TOUCH_UI_320x240
+ //#define TOUCH_UI_480x272
+ //#define TOUCH_UI_800x480
+
+ // Mappings for boards with a standard RepRapDiscount Display connector
+ //#define AO_EXP1_PINMAP // AlephObjects CLCD UI EXP1 mapping
+ //#define AO_EXP2_PINMAP // AlephObjects CLCD UI EXP2 mapping
+ //#define CR10_TFT_PINMAP // Rudolph Riedel's CR10 pin mapping
+ //#define OTHER_PIN_LAYOUT // Define pins manually below
+ #if ENABLED(OTHER_PIN_LAYOUT)
+ // The pins for CS and MOD_RESET (PD) must be chosen.
+ #define CLCD_MOD_RESET 9
+ #define CLCD_SPI_CS 10
+
+ // If using software SPI, specify pins for SCLK, MOSI, MISO
+ //#define CLCD_USE_SOFT_SPI
+ #if ENABLED(CLCD_USE_SOFT_SPI)
+ #define CLCD_SOFT_SPI_MOSI 11
+ #define CLCD_SOFT_SPI_MISO 12
+ #define CLCD_SOFT_SPI_SCLK 13
+ #endif
+ #endif
+
+ // Display Orientation. An inverted (i.e. upside-down) display
+ // is supported on the FT800. The FT810 and beyond also support
+ // portrait and mirrored orientations.
+ //#define TOUCH_UI_INVERTED
+ //#define TOUCH_UI_PORTRAIT
+ //#define TOUCH_UI_MIRRORED
+
+ // UTF8 processing and rendering.
+ // Unsupported characters are shown as '?'.
+ //#define TOUCH_UI_USE_UTF8
+ #if ENABLED(TOUCH_UI_USE_UTF8)
+ // Western accents support. These accented characters use
+ // combined bitmaps and require relatively little storage.
+ #define TOUCH_UI_UTF8_WESTERN_CHARSET
+ #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET)
+ // Additional character groups. These characters require
+ // full bitmaps and take up considerable storage:
+ //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³
+ //#define TOUCH_UI_UTF8_COPYRIGHT // © ®
+ //#define TOUCH_UI_UTF8_GERMANIC // ß
+ //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ
+ //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡
+ //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥
+ //#define TOUCH_UI_UTF8_ORDINALS // º ª
+ //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷
+ //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾
+ //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬
+ #endif
+ #endif
+
+ // Use a smaller font when labels don't fit buttons
+ #define TOUCH_UI_FIT_TEXT
+
+ // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE)
+ //#define LCD_LANGUAGE_1 en
+ //#define LCD_LANGUAGE_2 fr
+ //#define LCD_LANGUAGE_3 de
+ //#define LCD_LANGUAGE_4 es
+ //#define LCD_LANGUAGE_5 it
+
+ // Use a numeric passcode for "Screen lock" keypad.
+ // (recommended for smaller displays)
+ //#define TOUCH_UI_PASSCODE
+
+ // Output extra debug info for Touch UI events
+ //#define TOUCH_UI_DEBUG
+#endif
+
+//
+// FSMC Graphical TFT
+//
+#if ENABLED(FSMC_GRAPHICAL_TFT)
+ //#define TFT_MARLINUI_COLOR 0xFFFF // White
+ //#define TFT_MARLINBG_COLOR 0x0000 // Black
+ //#define TFT_DISABLED_COLOR 0x0003 // Almost black
+ //#define TFT_BTCANCEL_COLOR 0xF800 // Red
+ //#define TFT_BTARROWS_COLOR 0xDEE6 // 11011 110111 00110 Yellow
+ //#define TFT_BTOKMENU_COLOR 0x145F // 00010 100010 11111 Cyan
+#endif
+
+// @section safety
+
+/**
+ * The watchdog hardware timer will do a reset and disable all outputs
+ * if the firmware gets too overloaded to read the temperature sensors.
+ *
+ * If you find that watchdog reboot causes your AVR board to hang forever,
+ * enable WATCHDOG_RESET_MANUAL to use a custom timer instead of WDTO.
+ * NOTE: This method is less reliable as it can only catch hangups while
+ * interrupts are enabled.
+ */
+#define USE_WATCHDOG
+#if ENABLED(USE_WATCHDOG)
+ //#define WATCHDOG_RESET_MANUAL
+#endif
+
+// @section lcd
+
+/**
+ * Babystepping enables movement of the axes by tiny increments without changing
+ * the current position values. This feature is used primarily to adjust the Z
+ * axis in the first layer of a print in real-time.
+ *
+ * Warning: Does not respect endstops!
+ */
+//#define BABYSTEPPING
+#if ENABLED(BABYSTEPPING)
+ //#define BABYSTEP_WITHOUT_HOMING
+ //#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
+ #define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
+
+ //#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
+ #if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
+ #define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds.
+ // Note: Extra time may be added to mitigate controller latency.
+ //#define BABYSTEP_ALWAYS_AVAILABLE // Allow babystepping at all times (not just during movement).
+ //#define MOVE_Z_WHEN_IDLE // Jump to the move Z menu on doubleclick when printer is idle.
+ #if ENABLED(MOVE_Z_WHEN_IDLE)
+ #define MOVE_Z_IDLE_MULTIPLICATOR 1 // Multiply 1mm by this factor for the move step size.
+ #endif
+ #endif
+
+ //#define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28
+
+ //#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping
+ #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
+ //#define BABYSTEP_HOTEND_Z_OFFSET // For multiple hotends, babystep relative Z offsets
+ //#define BABYSTEP_ZPROBE_GFX_OVERLAY // Enable graphical overlay on Z-offset editor
+ #endif
+#endif
+
+// @section extruder
+
+/**
+ * Linear Pressure Control v1.5
+ *
+ * Assumption: advance [steps] = k * (delta velocity [steps/s])
+ * K=0 means advance disabled.
+ *
+ * NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
+ *
+ * Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
+ * Larger K values will be needed for flexible filament and greater distances.
+ * If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
+ * print acceleration will be reduced during the affected moves to keep within the limit.
+ *
+ * See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
+ * Mention @Sebastianv650 on GitHub to alert the author of any issues.
+ */
+//#define LIN_ADVANCE
+#if ENABLED(LIN_ADVANCE)
+ //#define EXTRA_LIN_ADVANCE_K // Enable for second linear advance constants
+ #define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
+ //#define LA_DEBUG // If enabled, this will generate debug information output over USB.
+#endif
+
+// @section leveling
+
+/**
+ * Points to probe for all 3-point Leveling procedures.
+ * Override if the automatically selected points are inadequate.
+ */
+#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL)
+ //#define PROBE_PT_1_X 15
+ //#define PROBE_PT_1_Y 180
+ //#define PROBE_PT_2_X 15
+ //#define PROBE_PT_2_Y 20
+ //#define PROBE_PT_3_X 170
+ //#define PROBE_PT_3_Y 20
+#endif
+
+/**
+ * Override MIN_PROBE_EDGE for each side of the build plate
+ * Useful to get probe points to exact positions on targets or
+ * to allow leveling to avoid plate clamps on only specific
+ * sides of the bed.
+ *
+ * If you are replacing the prior *_PROBE_BED_POSITION options,
+ * LEFT and FRONT values in most cases will map directly over
+ * RIGHT and REAR would be the inverse such as
+ * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION)
+ *
+ * This will allow all positions to match at compilation, however
+ * should the probe position be modified with M851XY then the
+ * probe points will follow. This prevents any change from causing
+ * the probe to be unable to reach any points.
+ */
+#if PROBE_SELECTED && !IS_KINEMATIC
+ //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE
+ //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE
+ //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE
+ //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE
+#endif
+
+#if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL)
+ // Override the mesh area if the automatic (max) area is too large
+ //#define MESH_MIN_X MESH_INSET
+ //#define MESH_MIN_Y MESH_INSET
+ //#define MESH_MAX_X X_BED_SIZE - (MESH_INSET)
+ //#define MESH_MAX_Y Y_BED_SIZE - (MESH_INSET)
+#endif
+
+/**
+ * Repeatedly attempt G29 leveling until it succeeds.
+ * Stop after G29_MAX_RETRIES attempts.
+ */
+//#define G29_RETRY_AND_RECOVER
+#if ENABLED(G29_RETRY_AND_RECOVER)
+ #define G29_MAX_RETRIES 3
+ #define G29_HALT_ON_FAILURE
+ /**
+ * Specify the GCODE commands that will be executed when leveling succeeds,
+ * between attempts, and after the maximum number of retries have been tried.
+ */
+ #define G29_SUCCESS_COMMANDS "M117 Bed leveling done."
+ #define G29_RECOVER_COMMANDS "M117 Probe failed. Rewiping.\nG28\nG12 P0 S12 T0"
+ #define G29_FAILURE_COMMANDS "M117 Bed leveling failed.\nG0 Z10\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nG4 S1"
+
+#endif
+
+// @section extras
+
+//
+// G2/G3 Arc Support
+//
+#define ARC_SUPPORT // Disable this feature to save ~3226 bytes
+#if ENABLED(ARC_SUPPORT)
+ #define MM_PER_ARC_SEGMENT 1 // Length of each arc segment
+ #define MIN_ARC_SEGMENTS 24 // Minimum number of segments in a complete circle
+ #define N_ARC_CORRECTION 25 // Number of interpolated segments between corrections
+ //#define ARC_P_CIRCLES // Enable the 'P' parameter to specify complete circles
+ //#define CNC_WORKSPACE_PLANES // Allow G2/G3 to operate in XY, ZX, or YZ planes
+#endif
+
+// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.
+//#define BEZIER_CURVE_SUPPORT
+
+/**
+ * G38 Probe Target
+ *
+ * This option adds G38.2 and G38.3 (probe towards target)
+ * and optionally G38.4 and G38.5 (probe away from target).
+ * Set MULTIPLE_PROBING for G38 to probe more than once.
+ */
+//#define G38_PROBE_TARGET
+#if ENABLED(G38_PROBE_TARGET)
+ //#define G38_PROBE_AWAY // Include G38.4 and G38.5 to probe away from target
+ #define G38_MINIMUM_MOVE 0.0275 // (mm) Minimum distance that will produce a move.
+#endif
+
+// Moves (or segments) with fewer steps than this will be joined with the next move
+#define MIN_STEPS_PER_SEGMENT 6
+
+/**
+ * Minimum delay before and after setting the stepper DIR (in ns)
+ * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire)
+ * 20 : Minimum for TMC2xxx drivers
+ * 200 : Minimum for A4988 drivers
+ * 400 : Minimum for A5984 drivers
+ * 500 : Minimum for LV8729 drivers (guess, no info in datasheet)
+ * 650 : Minimum for DRV8825 drivers
+ * 1500 : Minimum for TB6600 drivers (guess, no info in datasheet)
+ * 15000 : Minimum for TB6560 drivers (guess, no info in datasheet)
+ *
+ * Override the default value based on the driver type set in Configuration.h.
+ */
+//#define MINIMUM_STEPPER_POST_DIR_DELAY 650
+//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650
+
+/**
+ * Minimum stepper driver pulse width (in µs)
+ * 0 : Smallest possible width the MCU can produce, compatible with TMC2xxx drivers
+ * 0 : Minimum 500ns for LV8729, adjusted in stepper.h
+ * 1 : Minimum for A4988 and A5984 stepper drivers
+ * 2 : Minimum for DRV8825 stepper drivers
+ * 3 : Minimum for TB6600 stepper drivers
+ * 30 : Minimum for TB6560 stepper drivers
+ *
+ * Override the default value based on the driver type set in Configuration.h.
+ */
+//#define MINIMUM_STEPPER_PULSE 2
+
+/**
+ * Maximum stepping rate (in Hz) the stepper driver allows
+ * If undefined, defaults to 1MHz / (2 * MINIMUM_STEPPER_PULSE)
+ * 500000 : Maximum for A4988 stepper driver
+ * 400000 : Maximum for TMC2xxx stepper drivers
+ * 250000 : Maximum for DRV8825 stepper driver
+ * 200000 : Maximum for LV8729 stepper driver
+ * 150000 : Maximum for TB6600 stepper driver
+ * 15000 : Maximum for TB6560 stepper driver
+ *
+ * Override the default value based on the driver type set in Configuration.h.
+ */
+//#define MAXIMUM_STEPPER_RATE 250000
+
+// @section temperature
+
+// Control heater 0 and heater 1 in parallel.
+//#define HEATERS_PARALLEL
+
+//===========================================================================
+//================================= Buffers =================================
+//===========================================================================
+
+// @section hidden
+
+// The number of linear motions that can be in the plan at any give time.
+// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2 (e.g. 8, 16, 32) because shifts and ors are used to do the ring-buffering.
+#if ENABLED(SDSUPPORT)
+ #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
+#else
+ #define BLOCK_BUFFER_SIZE 16 // maximize block buffer
+#endif
+
+// @section serial
+
+// The ASCII buffer for serial input
+#define MAX_CMD_SIZE 96
+#define BUFSIZE 4
+
+// Transmission to Host Buffer Size
+// To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0.
+// To buffer a simple "ok" you need 4 bytes.
+// For ADVANCED_OK (M105) you need 32 bytes.
+// For debug-echo: 128 bytes for the optimal speed.
+// Other output doesn't need to be that speedy.
+// :[0, 2, 4, 8, 16, 32, 64, 128, 256]
+#define TX_BUFFER_SIZE 0
+
+// Host Receive Buffer Size
+// Without XON/XOFF flow control (see SERIAL_XON_XOFF below) 32 bytes should be enough.
+// To use flow control, set this buffer size to at least 1024 bytes.
+// :[0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048]
+//#define RX_BUFFER_SIZE 1024
+
+#if RX_BUFFER_SIZE >= 1024
+ // Enable to have the controller send XON/XOFF control characters to
+ // the host to signal the RX buffer is becoming full.
+ //#define SERIAL_XON_XOFF
+#endif
+
+// Add M575 G-code to change the baud rate
+//#define BAUD_RATE_GCODE
+
+#if ENABLED(SDSUPPORT)
+ // Enable this option to collect and display the maximum
+ // RX queue usage after transferring a file to SD.
+ //#define SERIAL_STATS_MAX_RX_QUEUED
+
+ // Enable this option to collect and display the number
+ // of dropped bytes after a file transfer to SD.
+ //#define SERIAL_STATS_DROPPED_RX
+#endif
+
+// Enable an emergency-command parser to intercept certain commands as they
+// enter the serial receive buffer, so they cannot be blocked.
+// Currently handles M108, M112, M410
+// Does not work on boards using AT90USB (USBCON) processors!
+//#define EMERGENCY_PARSER
+
+// Bad Serial-connections can miss a received command by sending an 'ok'
+// Therefore some clients abort after 30 seconds in a timeout.
+// Some other clients start sending commands while receiving a 'wait'.
+// This "wait" is only sent when the buffer is empty. 1 second is a good value here.
+//#define NO_TIMEOUTS 1000 // Milliseconds
+
+// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary.
+//#define ADVANCED_OK
+
+// Printrun may have trouble receiving long strings all at once.
+// This option inserts short delays between lines of serial output.
+#define SERIAL_OVERRUN_PROTECTION
+
+// @section extras
+
+/**
+ * Extra Fan Speed
+ * Adds a secondary fan speed for each print-cooling fan.
+ * 'M106 P T3-255' : Set a secondary speed for
+ * 'M106 P T2' : Use the set secondary speed
+ * 'M106 P T1' : Restore the previous fan speed
+ */
+//#define EXTRA_FAN_SPEED
+
+/**
+ * Firmware-based and LCD-controlled retract
+ *
+ * Add G10 / G11 commands for automatic firmware-based retract / recover.
+ * Use M207 and M208 to define parameters for retract / recover.
+ *
+ * Use M209 to enable or disable auto-retract.
+ * With auto-retract enabled, all G1 E moves within the set range
+ * will be converted to firmware-based retract/recover moves.
+ *
+ * Be sure to turn off auto-retract during filament change.
+ *
+ * Note that M207 / M208 / M209 settings are saved to EEPROM.
+ *
+ */
+//#define FWRETRACT
+#if ENABLED(FWRETRACT)
+ #define FWRETRACT_AUTORETRACT // Override slicer retractions
+ #if ENABLED(FWRETRACT_AUTORETRACT)
+ #define MIN_AUTORETRACT 0.1 // (mm) Don't convert E moves under this length
+ #define MAX_AUTORETRACT 10.0 // (mm) Don't convert E moves over this length
+ #endif
+ #define RETRACT_LENGTH 3 // (mm) Default retract length (positive value)
+ #define RETRACT_LENGTH_SWAP 13 // (mm) Default swap retract length (positive value)
+ #define RETRACT_FEEDRATE 45 // (mm/s) Default feedrate for retracting
+ #define RETRACT_ZRAISE 0 // (mm) Default retract Z-raise
+ #define RETRACT_RECOVER_LENGTH 0 // (mm) Default additional recover length (added to retract length on recover)
+ #define RETRACT_RECOVER_LENGTH_SWAP 0 // (mm) Default additional swap recover length (added to retract length on recover from toolchange)
+ #define RETRACT_RECOVER_FEEDRATE 8 // (mm/s) Default feedrate for recovering from retraction
+ #define RETRACT_RECOVER_FEEDRATE_SWAP 8 // (mm/s) Default feedrate for recovering from swap retraction
+ #if ENABLED(MIXING_EXTRUDER)
+ //#define RETRACT_SYNC_MIXING // Retract and restore all mixing steppers simultaneously
+ #endif
+#endif
+
+/**
+ * Universal tool change settings.
+ * Applies to all types of extruders except where explicitly noted.
+ */
+#if EXTRUDERS > 1
+ // Z raise distance for tool-change, as needed for some extruders
+ #define TOOLCHANGE_ZRAISE 2 // (mm)
+ //#define TOOLCHANGE_NO_RETURN // Never return to the previous position on tool-change
+
+ // Retract and prime filament on tool-change
+ //#define TOOLCHANGE_FILAMENT_SWAP
+ #if ENABLED(TOOLCHANGE_FILAMENT_SWAP)
+ #define TOOLCHANGE_FIL_SWAP_LENGTH 12 // (mm)
+ #define TOOLCHANGE_FIL_EXTRA_PRIME 2 // (mm)
+ #define TOOLCHANGE_FIL_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ #define TOOLCHANGE_FIL_SWAP_PRIME_SPEED 3600 // (mm/m)
+ #endif
+
+ /**
+ * Position to park head during tool change.
+ * Doesn't apply to SWITCHING_TOOLHEAD, DUAL_X_CARRIAGE, or PARKING_EXTRUDER
+ */
+ //#define TOOLCHANGE_PARK
+ #if ENABLED(TOOLCHANGE_PARK)
+ #define TOOLCHANGE_PARK_XY { X_MIN_POS + 10, Y_MIN_POS + 10 }
+ #define TOOLCHANGE_PARK_XY_FEEDRATE 6000 // (mm/m)
+ #endif
+#endif
+
+/**
+ * Advanced Pause
+ * Experimental feature for filament change support and for parking the nozzle when paused.
+ * Adds the GCode M600 for initiating filament change.
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
+ *
+ * Requires an LCD display.
+ * Requires NOZZLE_PARK_FEATURE.
+ * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
+ */
+//#define ADVANCED_PAUSE_FEATURE
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
+ #define PAUSE_PARK_RETRACT_FEEDRATE 60 // (mm/s) Initial retract feedrate.
+ #define PAUSE_PARK_RETRACT_LENGTH 2 // (mm) Initial retract.
+ // This short retract is done immediately, before parking the nozzle.
+ #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // (mm/s) Unload filament feedrate. This can be pretty fast.
+ #define FILAMENT_CHANGE_UNLOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate.
+ #define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // (mm) The length of filament for a complete unload.
+ // For Bowden, the full length of the tube and nozzle.
+ // For direct drive, the full length of the nozzle.
+ // Set to 0 for manual unloading.
+ #define FILAMENT_CHANGE_SLOW_LOAD_FEEDRATE 6 // (mm/s) Slow move when starting load.
+ #define FILAMENT_CHANGE_SLOW_LOAD_LENGTH 0 // (mm) Slow length, to allow time to insert material.
+ // 0 to disable start loading and skip to fast load only
+ #define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE 6 // (mm/s) Load filament feedrate. This can be pretty fast.
+ #define FILAMENT_CHANGE_FAST_LOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate.
+ #define FILAMENT_CHANGE_FAST_LOAD_LENGTH 0 // (mm) Load length of filament, from extruder gear to nozzle.
+ // For Bowden, the full length of the tube and nozzle.
+ // For direct drive, the full length of the nozzle.
+ //#define ADVANCED_PAUSE_CONTINUOUS_PURGE // Purge continuously up to the purge length until interrupted.
+ #define ADVANCED_PAUSE_PURGE_FEEDRATE 3 // (mm/s) Extrude feedrate (after loading). Should be slower than load feedrate.
+ #define ADVANCED_PAUSE_PURGE_LENGTH 50 // (mm) Length to extrude after loading.
+ // Set to 0 for manual extrusion.
+ // Filament can be extruded repeatedly from the Filament Change menu
+ // until extrusion is consistent, and to purge old filament.
+ #define ADVANCED_PAUSE_RESUME_PRIME 0 // (mm) Extra distance to prime nozzle after returning from park.
+ //#define ADVANCED_PAUSE_FANS_PAUSE // Turn off print-cooling fans while the machine is paused.
+
+ // Filament Unload does a Retract, Delay, and Purge first:
+ #define FILAMENT_UNLOAD_RETRACT_LENGTH 13 // (mm) Unload initial retract length.
+ #define FILAMENT_UNLOAD_DELAY 5000 // (ms) Delay for the filament to cool after retract.
+ #define FILAMENT_UNLOAD_PURGE_LENGTH 8 // (mm) An unretract is done, then this length is purged.
+
+ #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety.
+ #define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed.
+ #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change.
+
+ //#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
+ //#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change
+
+ //#define FILAMENT_LOAD_UNLOAD_GCODES // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu.
+ //#define FILAMENT_UNLOAD_ALL_EXTRUDERS // Allow M702 to unload all extruders above a minimum target temp (as set by M302)
+#endif
+
+// @section tmc
+
+/**
+ * TMC26X Stepper Driver options
+ *
+ * The TMC26XStepper library is required for this stepper driver.
+ * https://github.com/trinamic/TMC26XStepper
+ */
+#if HAS_DRIVER(TMC26X)
+
+ #if AXIS_DRIVER_TYPE_X(TMC26X)
+ #define X_MAX_CURRENT 1000 // (mA)
+ #define X_SENSE_RESISTOR 91 // (mOhms)
+ #define X_MICROSTEPS 16 // Number of microsteps
+ #endif
+
+ #if AXIS_DRIVER_TYPE_X2(TMC26X)
+ #define X2_MAX_CURRENT 1000
+ #define X2_SENSE_RESISTOR 91
+ #define X2_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Y(TMC26X)
+ #define Y_MAX_CURRENT 1000
+ #define Y_SENSE_RESISTOR 91
+ #define Y_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Y2(TMC26X)
+ #define Y2_MAX_CURRENT 1000
+ #define Y2_SENSE_RESISTOR 91
+ #define Y2_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z(TMC26X)
+ #define Z_MAX_CURRENT 1000
+ #define Z_SENSE_RESISTOR 91
+ #define Z_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z2(TMC26X)
+ #define Z2_MAX_CURRENT 1000
+ #define Z2_SENSE_RESISTOR 91
+ #define Z2_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z3(TMC26X)
+ #define Z3_MAX_CURRENT 1000
+ #define Z3_SENSE_RESISTOR 91
+ #define Z3_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E0(TMC26X)
+ #define E0_MAX_CURRENT 1000
+ #define E0_SENSE_RESISTOR 91
+ #define E0_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E1(TMC26X)
+ #define E1_MAX_CURRENT 1000
+ #define E1_SENSE_RESISTOR 91
+ #define E1_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E2(TMC26X)
+ #define E2_MAX_CURRENT 1000
+ #define E2_SENSE_RESISTOR 91
+ #define E2_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E3(TMC26X)
+ #define E3_MAX_CURRENT 1000
+ #define E3_SENSE_RESISTOR 91
+ #define E3_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E4(TMC26X)
+ #define E4_MAX_CURRENT 1000
+ #define E4_SENSE_RESISTOR 91
+ #define E4_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E5(TMC26X)
+ #define E5_MAX_CURRENT 1000
+ #define E5_SENSE_RESISTOR 91
+ #define E5_MICROSTEPS 16
+ #endif
+
+#endif // TMC26X
+
+// @section tmc_smart
+
+/**
+ * To use TMC2130, TMC2160, TMC2660, TMC5130, TMC5160 stepper drivers in SPI mode
+ * connect your SPI pins to the hardware SPI interface on your board and define
+ * the required CS pins in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3
+ * pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
+ * You may also use software SPI if you wish to use general purpose IO pins.
+ *
+ * To use TMC2208 stepper UART-configurable stepper drivers connect #_SERIAL_TX_PIN
+ * to the driver side PDN_UART pin with a 1K resistor.
+ * To use the reading capabilities, also connect #_SERIAL_RX_PIN to PDN_UART without
+ * a resistor.
+ * The drivers can also be used with hardware serial.
+ *
+ * TMCStepper library is required to use TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
+ */
+#if HAS_TRINAMIC
+
+ #define HOLD_MULTIPLIER 0.5 // Scales down the holding current from run current
+ #define INTERPOLATE true // Interpolate X/Y/Z_MICROSTEPS to 256
+
+ #if AXIS_IS_TMC(X)
+ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current.
+ #define X_MICROSTEPS 16 // 0..256
+ #define X_RSENSE 0.11
+ #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ...
+ #endif
+
+ #if AXIS_IS_TMC(X2)
+ #define X2_CURRENT 800
+ #define X2_MICROSTEPS 16
+ #define X2_RSENSE 0.11
+ #define X2_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(Y)
+ #define Y_CURRENT 800
+ #define Y_MICROSTEPS 16
+ #define Y_RSENSE 0.11
+ #define Y_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(Y2)
+ #define Y2_CURRENT 800
+ #define Y2_MICROSTEPS 16
+ #define Y2_RSENSE 0.11
+ #define Y2_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(Z)
+ #define Z_CURRENT 800
+ #define Z_MICROSTEPS 16
+ #define Z_RSENSE 0.11
+ #define Z_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(Z2)
+ #define Z2_CURRENT 800
+ #define Z2_MICROSTEPS 16
+ #define Z2_RSENSE 0.11
+ #define Z2_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(Z3)
+ #define Z3_CURRENT 800
+ #define Z3_MICROSTEPS 16
+ #define Z3_RSENSE 0.11
+ #define Z3_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(E0)
+ #define E0_CURRENT 800
+ #define E0_MICROSTEPS 16
+ #define E0_RSENSE 0.11
+ #define E0_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(E1)
+ #define E1_CURRENT 800
+ #define E1_MICROSTEPS 16
+ #define E1_RSENSE 0.11
+ #define E1_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(E2)
+ #define E2_CURRENT 800
+ #define E2_MICROSTEPS 16
+ #define E2_RSENSE 0.11
+ #define E2_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(E3)
+ #define E3_CURRENT 800
+ #define E3_MICROSTEPS 16
+ #define E3_RSENSE 0.11
+ #define E3_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(E4)
+ #define E4_CURRENT 800
+ #define E4_MICROSTEPS 16
+ #define E4_RSENSE 0.11
+ #define E4_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(E5)
+ #define E5_CURRENT 800
+ #define E5_MICROSTEPS 16
+ #define E5_RSENSE 0.11
+ #define E5_CHAIN_POS -1
+ #endif
+
+ /**
+ * Override default SPI pins for TMC2130, TMC2160, TMC2660, TMC5130 and TMC5160 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
+ /**
+ * Software option for SPI driven drivers (TMC2130, TMC2160, TMC2660, TMC5130 and TMC5160).
+ * The default SW SPI pins are defined the respective pins files,
+ * but you can override or define them here.
+ */
+ //#define TMC_USE_SW_SPI
+ //#define TMC_SW_MOSI -1
+ //#define TMC_SW_MISO -1
+ //#define TMC_SW_SCK -1
+
+ /**
+ * Four TMC2209 drivers can use the same HW/SW serial port with hardware configured addresses.
+ * Set the address using jumpers on pins MS1 and MS2.
+ * Address | MS1 | MS2
+ * 0 | LOW | LOW
+ * 1 | HIGH | LOW
+ * 2 | LOW | HIGH
+ * 3 | HIGH | HIGH
+ *
+ * Set *_SERIAL_TX_PIN and *_SERIAL_RX_PIN to match for all drivers
+ * on the same serial port, either here or in your board's pins file.
+ */
+ #define X_SLAVE_ADDRESS 0
+ #define Y_SLAVE_ADDRESS 0
+ #define Z_SLAVE_ADDRESS 0
+ #define X2_SLAVE_ADDRESS 0
+ #define Y2_SLAVE_ADDRESS 0
+ #define Z2_SLAVE_ADDRESS 0
+ #define Z3_SLAVE_ADDRESS 0
+ #define E0_SLAVE_ADDRESS 0
+ #define E1_SLAVE_ADDRESS 0
+ #define E2_SLAVE_ADDRESS 0
+ #define E3_SLAVE_ADDRESS 0
+ #define E4_SLAVE_ADDRESS 0
+ #define E5_SLAVE_ADDRESS 0
+
+ /**
+ * Software enable
+ *
+ * Use for drivers that do not use a dedicated enable pin, but rather handle the same
+ * function through a communication line such as SPI or UART.
+ */
+ //#define SOFTWARE_DRIVER_ENABLE
+
+ /**
+ * TMC2130, TMC2160, TMC2208, TMC2209, TMC5130 and TMC5160 only
+ * Use Trinamic's ultra quiet stepping mode.
+ * When disabled, Marlin will use spreadCycle stepping mode.
+ */
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Optimize spreadCycle chopper parameters by using predefined parameter sets
+ * or with the help of an example included in the library.
+ * Provided parameter sets are
+ * CHOPPER_DEFAULT_12V
+ * CHOPPER_DEFAULT_19V
+ * CHOPPER_DEFAULT_24V
+ * CHOPPER_DEFAULT_36V
+ * CHOPPER_PRUSAMK3_24V // Imported parameters from the official Prusa firmware for MK3 (24V)
+ * CHOPPER_MARLIN_119 // Old defaults from Marlin v1.1.9
+ *
+ * Define you own with
+ * { , , hysteresis_start[1..8] }
+ */
+ #define CHOPPER_TIMING CHOPPER_DEFAULT_12V
+
+ /**
+ * Monitor Trinamic drivers for error conditions,
+ * like overtemperature and short to ground.
+ * In the case of overtemperature Marlin can decrease the driver current until error condition clears.
+ * Other detected conditions can be used to stop the current print.
+ * Relevant g-codes:
+ * M906 - Set or get motor current in milliamps using axis codes X, Y, Z, E. Report values if no axis codes given.
+ * M911 - Report stepper driver overtemperature pre-warn condition.
+ * M912 - Clear stepper driver overtemperature pre-warn condition flag.
+ * M122 - Report driver parameters (Requires TMC_DEBUG)
+ */
+ //#define MONITOR_DRIVER_STATUS
+
+ #if ENABLED(MONITOR_DRIVER_STATUS)
+ #define CURRENT_STEP_DOWN 50 // [mA]
+ #define REPORT_CURRENT_CHANGE
+ #define STOP_ON_ERROR
+ #endif
+
+ /**
+ * TMC2130, TMC2160, TMC2208, TMC2209, TMC5130 and TMC5160 only
+ * The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
+ * This mode allows for faster movements at the expense of higher noise levels.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
+ * M913 X/Y/Z/E to live tune the setting
+ */
+ //#define HYBRID_THRESHOLD
+
+ #define X_HYBRID_THRESHOLD 100 // [mm/s]
+ #define X2_HYBRID_THRESHOLD 100
+ #define Y_HYBRID_THRESHOLD 100
+ #define Y2_HYBRID_THRESHOLD 100
+ #define Z_HYBRID_THRESHOLD 3
+ #define Z2_HYBRID_THRESHOLD 3
+ #define Z3_HYBRID_THRESHOLD 3
+ #define E0_HYBRID_THRESHOLD 30
+ #define E1_HYBRID_THRESHOLD 30
+ #define E2_HYBRID_THRESHOLD 30
+ #define E3_HYBRID_THRESHOLD 30
+ #define E4_HYBRID_THRESHOLD 30
+ #define E5_HYBRID_THRESHOLD 30
+
+ /**
+ * Use StallGuard2 to home / probe X, Y, Z.
+ *
+ * TMC2130, TMC2160, TMC2209, TMC2660, TMC5130, and TMC5160 only
+ * Connect the stepper driver's DIAG1 pin to the X/Y endstop pin.
+ * X, Y, and Z homing will always be done in spreadCycle mode.
+ *
+ * X/Y/Z_STALL_SENSITIVITY is the default stall threshold.
+ * Use M914 X Y Z to set the stall threshold at runtime:
+ *
+ * Sensitivity TMC2209 Others
+ * HIGHEST 255 -64 (Too sensitive => False positive)
+ * LOWEST 0 63 (Too insensitive => No trigger)
+ *
+ * It is recommended to set [XYZ]_HOME_BUMP_MM to 0.
+ *
+ * SPI_ENDSTOPS *** Beta feature! *** TMC2130 Only ***
+ * Poll the driver through SPI to determine load when homing.
+ * Removes the need for a wire from DIAG1 to an endstop pin.
+ *
+ * IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
+ * homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
+ */
+ //#define SENSORLESS_HOMING // StallGuard capable drivers only
+
+ /**
+ * Use StallGuard2 to probe the bed with the nozzle.
+ *
+ * CAUTION: This could cause damage to machines that use a lead screw or threaded rod
+ * to move the Z axis. Take extreme care when attempting to enable this feature.
+ */
+ //#define SENSORLESS_PROBING // StallGuard capable drivers only
+
+ #if EITHER(SENSORLESS_HOMING, SENSORLESS_PROBING)
+ // TMC2209: 0...255. TMC2130: -64...63
+ #define X_STALL_SENSITIVITY 8
+ #define X2_STALL_SENSITIVITY X_STALL_SENSITIVITY
+ #define Y_STALL_SENSITIVITY 8
+ //#define Z_STALL_SENSITIVITY 8
+ //#define SPI_ENDSTOPS // TMC2130 only
+ //#define IMPROVE_HOMING_RELIABILITY
+ #endif
+
+ /**
+ * Beta feature!
+ * Create a 50/50 square wave step pulse optimal for stepper drivers.
+ */
+ //#define SQUARE_WAVE_STEPPING
+
+ /**
+ * Enable M122 debugging command for TMC stepper drivers.
+ * M122 S0/1 will enable continous reporting.
+ */
+ //#define TMC_DEBUG
+
+ /**
+ * You can set your own advanced settings by filling in predefined functions.
+ * A list of available functions can be found on the library github page
+ * https://github.com/teemuatlut/TMCStepper
+ *
+ * Example:
+ * #define TMC_ADV() { \
+ * stepperX.diag0_temp_prewarn(1); \
+ * stepperY.interpolate(0); \
+ * }
+ */
+ #define TMC_ADV() { }
+
+#endif // HAS_TRINAMIC
+
+// @section L6470
+
+/**
+ * L6470 Stepper Driver options
+ *
+ * Arduino-L6470 library (0.7.0 or higher) is required for this stepper driver.
+ * https://github.com/ameyer/Arduino-L6470
+ *
+ * Requires the following to be defined in your pins_YOUR_BOARD file
+ * L6470_CHAIN_SCK_PIN
+ * L6470_CHAIN_MISO_PIN
+ * L6470_CHAIN_MOSI_PIN
+ * L6470_CHAIN_SS_PIN
+ * L6470_RESET_CHAIN_PIN (optional)
+ */
+#if HAS_DRIVER(L6470)
+
+ //#define L6470_CHITCHAT // Display additional status info
+
+ #if AXIS_DRIVER_TYPE_X(L6470)
+ #define X_MICROSTEPS 128 // Number of microsteps (VALID: 1, 2, 4, 8, 16, 32, 128)
+ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down)
+ #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down)
+ #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper
+ #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI)
+ #endif
+
+ #if AXIS_DRIVER_TYPE_X2(L6470)
+ #define X2_MICROSTEPS 128
+ #define X2_OVERCURRENT 2000
+ #define X2_STALLCURRENT 1500
+ #define X2_MAX_VOLTAGE 127
+ #define X2_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Y(L6470)
+ #define Y_MICROSTEPS 128
+ #define Y_OVERCURRENT 2000
+ #define Y_STALLCURRENT 1500
+ #define Y_MAX_VOLTAGE 127
+ #define Y_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Y2(L6470)
+ #define Y2_MICROSTEPS 128
+ #define Y2_OVERCURRENT 2000
+ #define Y2_STALLCURRENT 1500
+ #define Y2_MAX_VOLTAGE 127
+ #define Y2_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z(L6470)
+ #define Z_MICROSTEPS 128
+ #define Z_OVERCURRENT 2000
+ #define Z_STALLCURRENT 1500
+ #define Z_MAX_VOLTAGE 127
+ #define Z_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z2(L6470)
+ #define Z2_MICROSTEPS 128
+ #define Z2_OVERCURRENT 2000
+ #define Z2_STALLCURRENT 1500
+ #define Z2_MAX_VOLTAGE 127
+ #define Z2_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z3(L6470)
+ #define Z3_MICROSTEPS 128
+ #define Z3_OVERCURRENT 2000
+ #define Z3_STALLCURRENT 1500
+ #define Z3_MAX_VOLTAGE 127
+ #define Z3_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E0(L6470)
+ #define E0_MICROSTEPS 128
+ #define E0_OVERCURRENT 2000
+ #define E0_STALLCURRENT 1500
+ #define E0_MAX_VOLTAGE 127
+ #define E0_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E1(L6470)
+ #define E1_MICROSTEPS 128
+ #define E1_OVERCURRENT 2000
+ #define E1_STALLCURRENT 1500
+ #define E1_MAX_VOLTAGE 127
+ #define E1_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E2(L6470)
+ #define E2_MICROSTEPS 128
+ #define E2_OVERCURRENT 2000
+ #define E2_STALLCURRENT 1500
+ #define E2_MAX_VOLTAGE 127
+ #define E2_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E3(L6470)
+ #define E3_MICROSTEPS 128
+ #define E3_OVERCURRENT 2000
+ #define E3_STALLCURRENT 1500
+ #define E3_MAX_VOLTAGE 127
+ #define E3_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E4(L6470)
+ #define E4_MICROSTEPS 128
+ #define E4_OVERCURRENT 2000
+ #define E4_STALLCURRENT 1500
+ #define E4_MAX_VOLTAGE 127
+ #define E4_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E5(L6470)
+ #define E5_MICROSTEPS 128
+ #define E5_OVERCURRENT 2000
+ #define E5_STALLCURRENT 1500
+ #define E5_MAX_VOLTAGE 127
+ #define E5_CHAIN_POS -1
+ #endif
+
+ /**
+ * Monitor L6470 drivers for error conditions like over temperature and over current.
+ * In the case of over temperature Marlin can decrease the drive until the error condition clears.
+ * Other detected conditions can be used to stop the current print.
+ * Relevant g-codes:
+ * M906 - I1/2/3/4/5 Set or get motor drive level using axis codes X, Y, Z, E. Report values if no axis codes given.
+ * I not present or I0 or I1 - X, Y, Z or E0
+ * I2 - X2, Y2, Z2 or E1
+ * I3 - Z3 or E3
+ * I4 - E4
+ * I5 - E5
+ * M916 - Increase drive level until get thermal warning
+ * M917 - Find minimum current thresholds
+ * M918 - Increase speed until max or error
+ * M122 S0/1 - Report driver parameters
+ */
+ //#define MONITOR_L6470_DRIVER_STATUS
+
+ #if ENABLED(MONITOR_L6470_DRIVER_STATUS)
+ #define KVAL_HOLD_STEP_DOWN 1
+ //#define L6470_STOP_ON_ERROR
+ #endif
+
+#endif // L6470
+
+/**
+ * TWI/I2C BUS
+ *
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
+ * machines. Enabling this will allow you to send and receive I2C data from slave
+ * devices on the bus.
+ *
+ * ; Example #1
+ * ; This macro send the string "Marlin" to the slave device with address 0x63 (99)
+ * ; It uses multiple M260 commands with one B arg
+ * M260 A99 ; Target slave address
+ * M260 B77 ; M
+ * M260 B97 ; a
+ * M260 B114 ; r
+ * M260 B108 ; l
+ * M260 B105 ; i
+ * M260 B110 ; n
+ * M260 S1 ; Send the current buffer
+ *
+ * ; Example #2
+ * ; Request 6 bytes from slave device with address 0x63 (99)
+ * M261 A99 B5
+ *
+ * ; Example #3
+ * ; Example serial output of a M261 request
+ * echo:i2c-reply: from:99 bytes:5 data:hello
+ */
+
+// @section i2cbus
+
+//#define EXPERIMENTAL_I2CBUS
+#define I2C_SLAVE_ADDRESS 0 // Set a value from 8 to 127 to act as a slave
+
+// @section extras
+
+/**
+ * Photo G-code
+ * Add the M240 G-code to take a photo.
+ * The photo can be triggered by a digital pin or a physical movement.
+ */
+//#define PHOTO_GCODE
+#if ENABLED(PHOTO_GCODE)
+ // A position to move to (and raise Z) before taking the photo
+ //#define PHOTO_POSITION { X_MAX_POS - 5, Y_MAX_POS, 0 } // { xpos, ypos, zraise } (M240 X Y Z)
+ //#define PHOTO_DELAY_MS 100 // (ms) Duration to pause before moving back (M240 P)
+ //#define PHOTO_RETRACT_MM 6.5 // (mm) E retract/recover for the photo move (M240 R S)
+
+ // Canon RC-1 or homebrew digital camera trigger
+ // Data from: http://www.doc-diy.net/photo/rc-1_hacked/
+ //#define PHOTOGRAPH_PIN 23
+
+ // Canon Hack Development Kit
+ // http://captain-slow.dk/2014/03/09/3d-printing-timelapses/
+ //#define CHDK_PIN 4
+
+ // Optional second move with delay to trigger the camera shutter
+ //#define PHOTO_SWITCH_POSITION { X_MAX_POS, Y_MAX_POS } // { xpos, ypos } (M240 I J)
+
+ // Duration to hold the switch or keep CHDK_PIN high
+ //#define PHOTO_SWITCH_MS 50 // (ms) (M240 D)
+#endif
+
+/**
+ * Spindle & Laser control
+ *
+ * Add the M3, M4, and M5 commands to turn the spindle/laser on and off, and
+ * to set spindle speed, spindle direction, and laser power.
+ *
+ * SuperPid is a router/spindle speed controller used in the CNC milling community.
+ * Marlin can be used to turn the spindle on and off. It can also be used to set
+ * the spindle speed from 5,000 to 30,000 RPM.
+ *
+ * You'll need to select a pin for the ON/OFF function and optionally choose a 0-5V
+ * hardware PWM pin for the speed control and a pin for the rotation direction.
+ *
+ * See http://marlinfw.org/docs/configuration/laser_spindle.html for more config details.
+ */
+//#define SPINDLE_FEATURE
+//#define LASER_FEATURE
+#if EITHER(SPINDLE_FEATURE, LASER_FEATURE)
+ #define SPINDLE_LASER_ACTIVE_HIGH false // Set to "true" if the on/off function is active HIGH
+ #define SPINDLE_LASER_PWM true // Set to "true" if your controller supports setting the speed/power
+ #define SPINDLE_LASER_PWM_INVERT true // Set to "true" if the speed/power goes up when you want it to go slower
+ #define SPINDLE_LASER_POWERUP_DELAY 5000 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 5000 // (ms) Delay to allow the spindle to stop
+
+ #if ENABLED(SPINDLE_FEATURE)
+ //#define SPINDLE_CHANGE_DIR // Enable if your spindle controller can change spindle direction
+ #define SPINDLE_CHANGE_DIR_STOP // Enable if the spindle should stop before changing spin direction
+ #define SPINDLE_INVERT_DIR false // Set to "true" if the spin direction is reversed
+
+ /**
+ * The M3 & M4 commands use the following equation to convert PWM duty cycle to speed/power
+ *
+ * SPEED/POWER = PWM duty cycle * SPEED_POWER_SLOPE + SPEED_POWER_INTERCEPT
+ * where PWM duty cycle varies from 0 to 255
+ *
+ * set the following for your controller (ALL MUST BE SET)
+ */
+ #define SPEED_POWER_SLOPE 118.4
+ #define SPEED_POWER_INTERCEPT 0
+ #define SPEED_POWER_MIN 5000
+ #define SPEED_POWER_MAX 30000 // SuperPID router controller 0 - 30,000 RPM
+ #else
+ #define SPEED_POWER_SLOPE 0.3922
+ #define SPEED_POWER_INTERCEPT 0
+ #define SPEED_POWER_MIN 10
+ #define SPEED_POWER_MAX 100 // 0-100%
+ #endif
+#endif
+
+/**
+ * Coolant Control
+ *
+ * Add the M7, M8, and M9 commands to turn mist or flood coolant on and off.
+ *
+ * Note: COOLANT_MIST_PIN and/or COOLANT_FLOOD_PIN must also be defined.
+ */
+//#define COOLANT_CONTROL
+#if ENABLED(COOLANT_CONTROL)
+ #define COOLANT_MIST // Enable if mist coolant is present
+ #define COOLANT_FLOOD // Enable if flood coolant is present
+ #define COOLANT_MIST_INVERT false // Set "true" if the on/off function is reversed
+ #define COOLANT_FLOOD_INVERT false // Set "true" if the on/off function is reversed
+#endif
+
+/**
+ * Filament Width Sensor
+ *
+ * Measures the filament width in real-time and adjusts
+ * flow rate to compensate for any irregularities.
+ *
+ * Also allows the measured filament diameter to set the
+ * extrusion rate, so the slicer only has to specify the
+ * volume.
+ *
+ * Only a single extruder is supported at this time.
+ *
+ * 34 RAMPS_14 : Analog input 5 on the AUX2 connector
+ * 81 PRINTRBOARD : Analog input 2 on the Exp1 connector (version B,C,D,E)
+ * 301 RAMBO : Analog input 3
+ *
+ * Note: May require analog pins to be defined for other boards.
+ */
+//#define FILAMENT_WIDTH_SENSOR
+
+#if ENABLED(FILAMENT_WIDTH_SENSOR)
+ #define FILAMENT_SENSOR_EXTRUDER_NUM 0 // Index of the extruder that has the filament sensor. :[0,1,2,3,4]
+ #define MEASUREMENT_DELAY_CM 14 // (cm) The distance from the filament sensor to the melting chamber
+
+ #define FILWIDTH_ERROR_MARGIN 1.0 // (mm) If a measurement differs too much from nominal width ignore it
+ #define MAX_MEASUREMENT_DELAY 20 // (bytes) Buffer size for stored measurements (1 byte per cm). Must be larger than MEASUREMENT_DELAY_CM.
+
+ #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA // Set measured to nominal initially
+
+ // Display filament width on the LCD status line. Status messages will expire after 5 seconds.
+ //#define FILAMENT_LCD_DISPLAY
+#endif
+
+/**
+ * CNC Coordinate Systems
+ *
+ * Enables G53 and G54-G59.3 commands to select coordinate systems
+ * and G92.1 to reset the workspace to native machine space.
+ */
+//#define CNC_COORDINATE_SYSTEMS
+
+/**
+ * Auto-report temperatures with M155 S
+ */
+#define AUTO_REPORT_TEMPERATURES
+
+/**
+ * Include capabilities in M115 output
+ */
+#define EXTENDED_CAPABILITIES_REPORT
+
+/**
+ * Expected Printer Check
+ * Add the M16 G-code to compare a string to the MACHINE_NAME.
+ * M16 with a non-matching string causes the printer to halt.
+ */
+//#define EXPECTED_PRINTER_CHECK
+
+/**
+ * Disable all Volumetric extrusion options
+ */
+//#define NO_VOLUMETRICS
+
+#if DISABLED(NO_VOLUMETRICS)
+ /**
+ * Volumetric extrusion default state
+ * Activate to make volumetric extrusion the default method,
+ * with DEFAULT_NOMINAL_FILAMENT_DIA as the default diameter.
+ *
+ * M200 D0 to disable, M200 Dn to set a new diameter.
+ */
+ //#define VOLUMETRIC_DEFAULT_ON
+#endif
+
+/**
+ * Enable this option for a leaner build of Marlin that removes all
+ * workspace offsets, simplifying coordinate transformations, leveling, etc.
+ *
+ * - M206 and M428 are disabled.
+ * - G92 will revert to its behavior from Marlin 1.0.
+ */
+//#define NO_WORKSPACE_OFFSETS
+
+/**
+ * Set the number of proportional font spaces required to fill up a typical character space.
+ * This can help to better align the output of commands like `G29 O` Mesh Output.
+ *
+ * For clients that use a fixed-width font (like OctoPrint), leave this set to 1.0.
+ * Otherwise, adjust according to your client and font.
+ */
+#define PROPORTIONAL_FONT_RATIO 1.0
+
+/**
+ * Spend 28 bytes of SRAM to optimize the GCode parser
+ */
+#define FASTER_GCODE_PARSER
+
+/**
+ * CNC G-code options
+ * Support CNC-style G-code dialects used by laser cutters, drawing machine cams, etc.
+ * Note that G0 feedrates should be used with care for 3D printing (if used at all).
+ * High feedrates may cause ringing and harm print quality.
+ */
+//#define PAREN_COMMENTS // Support for parentheses-delimited comments
+//#define GCODE_MOTION_MODES // Remember the motion mode (G0 G1 G2 G3 G5 G38.X) and apply for X Y Z E F, etc.
+
+// Enable and set a (default) feedrate for all G0 moves
+//#define G0_FEEDRATE 3000 // (mm/m)
+#ifdef G0_FEEDRATE
+ //#define VARIABLE_G0_FEEDRATE // The G0 feedrate is set by F in G0 motion mode
+#endif
+
+/**
+ * Startup commands
+ *
+ * Execute certain G-code commands immediately after power-on.
+ */
+//#define STARTUP_COMMANDS "M17 Z"
+
+/**
+ * G-code Macros
+ *
+ * Add G-codes M810-M819 to define and run G-code macros.
+ * Macros are not saved to EEPROM.
+ */
+//#define GCODE_MACROS
+#if ENABLED(GCODE_MACROS)
+ #define GCODE_MACROS_SLOTS 5 // Up to 10 may be used
+ #define GCODE_MACROS_SLOT_SIZE 50 // Maximum length of a single macro
+#endif
+
+/**
+ * User-defined menu items that execute custom GCode
+ */
+//#define CUSTOM_USER_MENUS
+#if ENABLED(CUSTOM_USER_MENUS)
+ //#define CUSTOM_USER_MENU_TITLE "Custom Commands"
+ #define USER_SCRIPT_DONE "M117 User Script Done"
+ #define USER_SCRIPT_AUDIBLE_FEEDBACK
+ //#define USER_SCRIPT_RETURN // Return to status screen after a script
+
+ #define USER_DESC_1 "Home & UBL Info"
+ #define USER_GCODE_1 "G28\nG29 W"
+
+ #define USER_DESC_2 "Preheat for " PREHEAT_1_LABEL
+ #define USER_GCODE_2 "M140 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND)
+
+ #define USER_DESC_3 "Preheat for " PREHEAT_2_LABEL
+ #define USER_GCODE_3 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND)
+
+ #define USER_DESC_4 "Heat Bed/Home/Level"
+ #define USER_GCODE_4 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nG28\nG29"
+
+ //#define USER_DESC_5 "Home & Info"
+ //#define USER_GCODE_5 "G28\nM503"
+#endif
+
+/**
+ * Host Action Commands
+ *
+ * Define host streamer action commands in compliance with the standard.
+ *
+ * See https://reprap.org/wiki/G-code#Action_commands
+ * Common commands ........ poweroff, pause, paused, resume, resumed, cancel
+ * G29_RETRY_AND_RECOVER .. probe_rewipe, probe_failed
+ *
+ * Some features add reason codes to extend these commands.
+ *
+ * Host Prompt Support enables Marlin to use the host for user prompts so
+ * filament runout and other processes can be managed from the host side.
+ */
+//#define HOST_ACTION_COMMANDS
+#if ENABLED(HOST_ACTION_COMMANDS)
+ //#define HOST_PROMPT_SUPPORT
+#endif
+
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
+/**
+ * I2C position encoders for closed loop control.
+ * Developed by Chris Barr at Aus3D.
+ *
+ * Wiki: http://wiki.aus3d.com.au/Magnetic_Encoder
+ * Github: https://github.com/Aus3D/MagneticEncoder
+ *
+ * Supplier: http://aus3d.com.au/magnetic-encoder-module
+ * Alternative Supplier: http://reliabuild3d.com/
+ *
+ * Reliabuild encoders have been modified to improve reliability.
+ */
+
+//#define I2C_POSITION_ENCODERS
+#if ENABLED(I2C_POSITION_ENCODERS)
+
+ #define I2CPE_ENCODER_CNT 1 // The number of encoders installed; max of 5
+ // encoders supported currently.
+
+ #define I2CPE_ENC_1_ADDR I2CPE_PRESET_ADDR_X // I2C address of the encoder. 30-200.
+ #define I2CPE_ENC_1_AXIS X_AXIS // Axis the encoder module is installed on. _AXIS.
+ #define I2CPE_ENC_1_TYPE I2CPE_ENC_TYPE_LINEAR // Type of encoder: I2CPE_ENC_TYPE_LINEAR -or-
+ // I2CPE_ENC_TYPE_ROTARY.
+ #define I2CPE_ENC_1_TICKS_UNIT 2048 // 1024 for magnetic strips with 2mm poles; 2048 for
+ // 1mm poles. For linear encoders this is ticks / mm,
+ // for rotary encoders this is ticks / revolution.
+ //#define I2CPE_ENC_1_TICKS_REV (16 * 200) // Only needed for rotary encoders; number of stepper
+ // steps per full revolution (motor steps/rev * microstepping)
+ //#define I2CPE_ENC_1_INVERT // Invert the direction of axis travel.
+ #define I2CPE_ENC_1_EC_METHOD I2CPE_ECM_MICROSTEP // Type of error error correction.
+ #define I2CPE_ENC_1_EC_THRESH 0.10 // Threshold size for error (in mm) above which the
+ // printer will attempt to correct the error; errors
+ // smaller than this are ignored to minimize effects of
+ // measurement noise / latency (filter).
+
+ #define I2CPE_ENC_2_ADDR I2CPE_PRESET_ADDR_Y // Same as above, but for encoder 2.
+ #define I2CPE_ENC_2_AXIS Y_AXIS
+ #define I2CPE_ENC_2_TYPE I2CPE_ENC_TYPE_LINEAR
+ #define I2CPE_ENC_2_TICKS_UNIT 2048
+ //#define I2CPE_ENC_2_TICKS_REV (16 * 200)
+ //#define I2CPE_ENC_2_INVERT
+ #define I2CPE_ENC_2_EC_METHOD I2CPE_ECM_MICROSTEP
+ #define I2CPE_ENC_2_EC_THRESH 0.10
+
+ #define I2CPE_ENC_3_ADDR I2CPE_PRESET_ADDR_Z // Encoder 3. Add additional configuration options
+ #define I2CPE_ENC_3_AXIS Z_AXIS // as above, or use defaults below.
+
+ #define I2CPE_ENC_4_ADDR I2CPE_PRESET_ADDR_E // Encoder 4.
+ #define I2CPE_ENC_4_AXIS E_AXIS
+
+ #define I2CPE_ENC_5_ADDR 34 // Encoder 5.
+ #define I2CPE_ENC_5_AXIS E_AXIS
+
+ // Default settings for encoders which are enabled, but without settings configured above.
+ #define I2CPE_DEF_TYPE I2CPE_ENC_TYPE_LINEAR
+ #define I2CPE_DEF_ENC_TICKS_UNIT 2048
+ #define I2CPE_DEF_TICKS_REV (16 * 200)
+ #define I2CPE_DEF_EC_METHOD I2CPE_ECM_NONE
+ #define I2CPE_DEF_EC_THRESH 0.1
+
+ //#define I2CPE_ERR_THRESH_ABORT 100.0 // Threshold size for error (in mm) error on any given
+ // axis after which the printer will abort. Comment out to
+ // disable abort behavior.
+
+ #define I2CPE_TIME_TRUSTED 10000 // After an encoder fault, there must be no further fault
+ // for this amount of time (in ms) before the encoder
+ // is trusted again.
+
+ /**
+ * Position is checked every time a new command is executed from the buffer but during long moves,
+ * this setting determines the minimum update time between checks. A value of 100 works well with
+ * error rolling average when attempting to correct only for skips and not for vibration.
+ */
+ #define I2CPE_MIN_UPD_TIME_MS 4 // (ms) Minimum time between encoder checks.
+
+ // Use a rolling average to identify persistant errors that indicate skips, as opposed to vibration and noise.
+ #define I2CPE_ERR_ROLLING_AVERAGE
+
+#endif // I2C_POSITION_ENCODERS
+
+/**
+ * Analog Joystick(s)
+ */
+//#define JOYSTICK
+#if ENABLED(JOYSTICK)
+ #define JOY_X_PIN 5 // RAMPS: Suggested pin A5 on AUX2
+ #define JOY_Y_PIN 10 // RAMPS: Suggested pin A10 on AUX2
+ #define JOY_Z_PIN 12 // RAMPS: Suggested pin A12 on AUX2
+ #define JOY_EN_PIN 44 // RAMPS: Suggested pin D44 on AUX2
+
+ // Use M119 to find reasonable values after connecting your hardware:
+ #define JOY_X_LIMITS { 5600, 8190-100, 8190+100, 10800 } // min, deadzone start, deadzone end, max
+ #define JOY_Y_LIMITS { 5600, 8250-100, 8250+100, 11000 }
+ #define JOY_Z_LIMITS { 4800, 8080-100, 8080+100, 11550 }
+#endif
+
+/**
+ * MAX7219 Debug Matrix
+ *
+ * Add support for a low-cost 8x8 LED Matrix based on the Max7219 chip as a realtime status display.
+ * Requires 3 signal wires. Some useful debug options are included to demonstrate its usage.
+ */
+//#define MAX7219_DEBUG
+#if ENABLED(MAX7219_DEBUG)
+ #define MAX7219_CLK_PIN 64
+ #define MAX7219_DIN_PIN 57
+ #define MAX7219_LOAD_PIN 44
+
+ //#define MAX7219_GCODE // Add the M7219 G-code to control the LED matrix
+ #define MAX7219_INIT_TEST 2 // Do a test pattern at initialization (Set to 2 for spiral)
+ #define MAX7219_NUMBER_UNITS 1 // Number of Max7219 units in chain.
+ #define MAX7219_ROTATE 0 // Rotate the display clockwise (in multiples of +/- 90°)
+ // connector at: right=0 bottom=-90 top=90 left=180
+ //#define MAX7219_REVERSE_ORDER // The individual LED matrix units may be in reversed order
+ //#define MAX7219_SIDE_BY_SIDE // Big chip+matrix boards can be chained side-by-side
+
+ /**
+ * Sample debug features
+ * If you add more debug displays, be careful to avoid conflicts!
+ */
+ #define MAX7219_DEBUG_PRINTER_ALIVE // Blink corner LED of 8x8 matrix to show that the firmware is functioning
+ #define MAX7219_DEBUG_PLANNER_HEAD 3 // Show the planner queue head position on this and the next LED matrix row
+ #define MAX7219_DEBUG_PLANNER_TAIL 5 // Show the planner queue tail position on this and the next LED matrix row
+
+ #define MAX7219_DEBUG_PLANNER_QUEUE 0 // Show the current planner queue depth on this and the next LED matrix row
+ // If you experience stuttering, reboots, etc. this option can reveal how
+ // tweaks made to the configuration are affecting the printer in real-time.
+#endif
+
+/**
+ * NanoDLP Sync support
+ *
+ * Add support for Synchronized Z moves when using with NanoDLP. G0/G1 axis moves will output "Z_move_comp"
+ * string to enable synchronization with DLP projector exposure. This change will allow to use
+ * [[WaitForDoneMessage]] instead of populating your gcode with M400 commands
+ */
+//#define NANODLP_Z_SYNC
+#if ENABLED(NANODLP_Z_SYNC)
+ //#define NANODLP_ALL_AXIS // Enables "Z_move_comp" output on any axis move.
+ // Default behavior is limited to Z axis only.
+#endif
+
+/**
+ * WiFi Support (Espressif ESP32 WiFi)
+ */
+//#define WIFISUPPORT
+#if ENABLED(WIFISUPPORT)
+ #define WIFI_SSID "Wifi SSID"
+ #define WIFI_PWD "Wifi Password"
+ //#define WEBSUPPORT // Start a webserver with auto-discovery
+ //#define OTASUPPORT // Support over-the-air firmware updates
+#endif
+
+/**
+ * Prusa Multi-Material Unit v2
+ * Enable in Configuration.h
+ */
+#if ENABLED(PRUSA_MMU2)
+
+ // Serial port used for communication with MMU2.
+ // For AVR enable the UART port used for the MMU. (e.g., internalSerial)
+ // For 32-bit boards check your HAL for available serial ports. (e.g., Serial2)
+ #define INTERNAL_SERIAL_PORT 2
+ #define MMU2_SERIAL internalSerial
+
+ // Use hardware reset for MMU if a pin is defined for it
+ //#define MMU2_RST_PIN 23
+
+ // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
+ //#define MMU2_MODE_12V
+
+ // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
+ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
+
+ // Add an LCD menu for MMU2
+ //#define MMU2_MENUS
+ #if ENABLED(MMU2_MENUS)
+ // Settings for filament load / unload from the LCD menu.
+ // This is for Prusa MK3-style extruders. Customize for your hardware.
+ #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
+ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
+ { 7.2, 562 }, \
+ { 14.4, 871 }, \
+ { 36.0, 1393 }, \
+ { 14.4, 871 }, \
+ { 50.0, 198 }
+
+ #define MMU2_RAMMING_SEQUENCE \
+ { 1.0, 1000 }, \
+ { 1.0, 1500 }, \
+ { 2.0, 2000 }, \
+ { 1.5, 3000 }, \
+ { 2.5, 4000 }, \
+ { -15.0, 5000 }, \
+ { -14.0, 1200 }, \
+ { -6.0, 600 }, \
+ { 10.0, 700 }, \
+ { -10.0, 400 }, \
+ { -50.0, 2000 }
+
+ #endif
+
+ //#define MMU2_DEBUG // Write debug info to serial output
+
+#endif // PRUSA_MMU2
+
+/**
+ * Advanced Print Counter settings
+ */
+#if ENABLED(PRINTCOUNTER)
+ #define SERVICE_WARNING_BUZZES 3
+ // Activate up to 3 service interval watchdogs
+ //#define SERVICE_NAME_1 "Service S"
+ //#define SERVICE_INTERVAL_1 100 // print hours
+ //#define SERVICE_NAME_2 "Service L"
+ //#define SERVICE_INTERVAL_2 200 // print hours
+ //#define SERVICE_NAME_3 "Service 3"
+ //#define SERVICE_INTERVAL_3 1 // print hours
+#endif
+
+// @section develop
+
+/**
+ * M43 - display pin status, watch pins for changes, watch endstops & toggle LED, Z servo probe test, toggle pins
+ */
+//#define PINS_DEBUGGING
+
+// Enable Marlin dev mode which adds some special commands
+//#define MARLIN_DEV_MODE
diff --git a/config/examples/Felix/Single/README.md b/config/examples/Felix/Single/README.md
new file mode 100644
index 000000000000..48fe099151bb
--- /dev/null
+++ b/config/examples/Felix/Single/README.md
@@ -0,0 +1,60 @@
+# Felix 2.0/3.0 Configuration for Marlin Firmware
+
+Bringing silky smooth prints to Felix.
+
+## Build HOWTO
+
+ - Install the latest non-beta Arduino software IDE/toolset: http://www.arduino.cc/en/Main/Software
+ - Download the Marlin firmware
+ - [Latest developement version](https://github.com/MarlinFirmware/Marlin/tree/Development)
+ - [Stable version](https://github.com/MarlinFirmware/Marlin/tree/Development)
+ - In both cases use the "Download Zip" button on the right.
+
+```
+cd Marlin/src
+cp config/examples/Felix/Configuration_adv.h .
+```
+
+The next step depends on your setup:
+
+### Single Extruder Configuration
+
+ cp config/examples/Felix/Configuration.h .
+
+### Dual Extruder Configuration
+
+ cp config/examples/Felix/DUAL/Configuration.h Configuration.h
+
+### Compile Firmware
+
+ - Start the Arduino IDE.
+ - Select Tools -> Board -> Arduino Mega 2560
+ - Select the correct serial port in Tools -> Serial Port (usually /dev/ttyUSB0)
+ - Open Marlin.pde or .ino
+ - Click the Verify/Compile button
+
+### Flash Firmware
+
+#### Connected directly via USB
+
+ - Click the Upload button. If all goes well the firmware is uploading
+
+#### Remote update
+
+Find the latest Arduino build:
+
+ ls -altr /tmp/
+ drwxr-xr-x 5 chrono users 12288 Mar 3 21:41 build6072035599686630843.tmp
+
+Copy the firmware to your printer host:
+
+ scp /tmp/build6072035599686630843.tmp/Marlin.cpp.hex a.b.c.d:/tmp/
+
+Connect to your printer host via ssh, stop Octoprint or any other service that may block your USB device and make sure you have avrdude installed, then run:
+
+ avrdude -C/etc/avrdude.conf -v -v -v -patmega2560 -cwiring -P/dev/ttyUSB0 \
+ -b115200 -D -Uflash:w:/tmp/Marlin.cpp.hex:i
+
+## Acknowledgements
+
+Mashed together and tested on https://apollo.open-resource.org/mission:resources:picoprint based on collaborative teamwork of @andrewsil1 and @thinkyhead.
diff --git a/config/examples/FlashForge/CreatorPro/Configuration.h b/config/examples/FlashForge/CreatorPro/Configuration.h
index d8000b4d4adb..4ca6da676807 100644
--- a/config/examples/FlashForge/CreatorPro/Configuration.h
+++ b/config/examples/FlashForge/CreatorPro/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "M. Baker" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 -2
#define TEMP_SENSOR_1 -2
@@ -717,6 +717,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 250, 250, 20, 100 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -725,6 +730,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1000, 1000, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -738,35 +748,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 20.0
#define DEFAULT_YJERK 20.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 2.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.64 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1549,10 +1562,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/FlashForge/CreatorPro/Configuration_adv.h b/config/examples/FlashForge/CreatorPro/Configuration_adv.h
index d476d2d23407..018cf6132a2d 100644
--- a/config/examples/FlashForge/CreatorPro/Configuration_adv.h
+++ b/config/examples/FlashForge/CreatorPro/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -886,6 +901,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1285,7 +1309,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2034,6 +2059,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2532,6 +2559,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/FolgerTech/i3-2020/Configuration.h b/config/examples/FolgerTech/i3-2020/Configuration.h
index 4960cd50b856..4b2ec2f048b1 100644
--- a/config/examples/FolgerTech/i3-2020/Configuration.h
+++ b/config/examples/FolgerTech/i3-2020/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -731,6 +731,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 250, 250, 2, 17 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -739,6 +744,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1000, 1000, 4, 750 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -752,35 +762,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 400 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 8.5
#define DEFAULT_YJERK 8.5
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 4.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.058 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1577,10 +1590,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/FolgerTech/i3-2020/Configuration_adv.h b/config/examples/FolgerTech/i3-2020/Configuration_adv.h
index 2d2868422ff9..816377405280 100644
--- a/config/examples/FolgerTech/i3-2020/Configuration_adv.h
+++ b/config/examples/FolgerTech/i3-2020/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 2 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 2 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 2
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Formbot/Raptor/Configuration.h b/config/examples/Formbot/Raptor/Configuration.h
index fad911678a9e..7b159f59872e 100644
--- a/config/examples/Formbot/Raptor/Configuration.h
+++ b/config/examples/Formbot/Raptor/Configuration.h
@@ -113,6 +113,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "Tinymachines3D" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -424,6 +425,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -441,8 +443,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -781,6 +781,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 250, 150, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -808,6 +813,11 @@
#endif
#define DEFAULT_MAX_ACCELERATION { X_ACCEL, Y_ACCEL, 400, 4000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -821,28 +831,15 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#if ENABLED(X_SPREADCYCLE) || DISABLED(X_2208)
#define DEFAULT_XJERK 20.0
#else
@@ -854,10 +851,26 @@
#define DEFAULT_YJERK 5.0
#endif
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM (.4 * DEFAULT_YJERK * DEFAULT_YJERK / DEFAULT_ACCELERATION) // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1676,10 +1689,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Formbot/Raptor/Configuration_adv.h b/config/examples/Formbot/Raptor/Configuration_adv.h
index 7c863798db25..9ace858c65ac 100644
--- a/config/examples/Formbot/Raptor/Configuration_adv.h
+++ b/config/examples/Formbot/Raptor/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 255 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 25 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 25 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 25
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2037,6 +2062,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2537,6 +2564,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Formbot/T_Rex_2+/Configuration.h b/config/examples/Formbot/T_Rex_2+/Configuration.h
index 583f6d0336e9..2389f6c98301 100644
--- a/config/examples/Formbot/T_Rex_2+/Configuration.h
+++ b/config/examples/Formbot/T_Rex_2+/Configuration.h
@@ -75,6 +75,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "Formbot-3D" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -392,6 +393,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -409,8 +411,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 1
@@ -754,6 +754,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 200, 100, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -762,6 +767,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1500, 500, 400, 4000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -775,35 +785,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 12.0 // More conservative numbers.
#define DEFAULT_YJERK 8.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.017 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1605,10 +1618,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h
index b8b839b083b2..c7afdd1a1d66 100644
--- a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h
+++ b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h
@@ -383,6 +383,7 @@
#else
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 255 // Set default power-up brightness (0-255, requires PWM pin)
#endif
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -606,18 +607,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -1290,7 +1305,8 @@
#define BABYSTEP_WITHOUT_HOMING
#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 40 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 40 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 40
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2039,6 +2055,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2537,6 +2555,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Formbot/T_Rex_3/Configuration.h b/config/examples/Formbot/T_Rex_3/Configuration.h
index df29a67c067c..f6cefe4904db 100644
--- a/config/examples/Formbot/T_Rex_3/Configuration.h
+++ b/config/examples/Formbot/T_Rex_3/Configuration.h
@@ -76,6 +76,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "Formbot-3D" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -387,6 +388,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -404,8 +406,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 1
@@ -736,6 +736,11 @@
//#define DEFAULT_MAX_FEEDRATE { 250, 150, 5, 25 }
#define DEFAULT_MAX_FEEDRATE { 250, 100, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -744,6 +749,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1500, 500, 400, 4000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -753,44 +763,43 @@
* M204 T Travel Acceleration
*/
-//#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E acceleration for printing moves
-//#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts
-//#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
-
#define DEFAULT_ACCELERATION 1500 // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION 1500 // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION 1500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 12.0 // More conservative numbers.
#define DEFAULT_YJERK 8.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.017 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1596,10 +1605,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Formbot/T_Rex_3/Configuration_adv.h b/config/examples/Formbot/T_Rex_3/Configuration_adv.h
index 18a9058bbda9..9938e9e16d5b 100644
--- a/config/examples/Formbot/T_Rex_3/Configuration_adv.h
+++ b/config/examples/Formbot/T_Rex_3/Configuration_adv.h
@@ -383,6 +383,7 @@
#else
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 255 // Set default power-up brightness (0-255, requires PWM pin)
#endif
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -606,18 +607,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -891,6 +906,15 @@
// Add an 'M73' G-code to set the current percentage
#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1290,7 +1314,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 40 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 40 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 40
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2039,6 +2064,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2532,6 +2559,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Geeetech/A10/Configuration.h b/config/examples/Geeetech/A10/Configuration.h
index 51aaa489a873..8a681622c263 100644
--- a/config/examples/Geeetech/A10/Configuration.h
+++ b/config/examples/Geeetech/A10/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Phr3d13, Geeetech A10 default)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -708,6 +708,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -716,6 +721,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -729,35 +739,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.04 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1543,10 +1556,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Geeetech/A10/Configuration_adv.h b/config/examples/Geeetech/A10/Configuration_adv.h
index dfbcbe1b5137..ee0c82efe039 100644
--- a/config/examples/Geeetech/A10/Configuration_adv.h
+++ b/config/examples/Geeetech/A10/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Geeetech/A10M/Configuration.h b/config/examples/Geeetech/A10M/Configuration.h
index ab3f25782548..625b1b728eaa 100644
--- a/config/examples/Geeetech/A10M/Configuration.h
+++ b/config/examples/Geeetech/A10M/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -708,6 +708,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -716,6 +721,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -729,35 +739,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.04 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1543,10 +1556,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Geeetech/A10M/Configuration_adv.h b/config/examples/Geeetech/A10M/Configuration_adv.h
index abdeb5df1a38..af0aa420cefb 100644
--- a/config/examples/Geeetech/A10M/Configuration_adv.h
+++ b/config/examples/Geeetech/A10M/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Geeetech/A20M/Configuration.h b/config/examples/Geeetech/A20M/Configuration.h
index 1bcec7ac72a5..faa7431d3a70 100644
--- a/config/examples/Geeetech/A20M/Configuration.h
+++ b/config/examples/Geeetech/A20M/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -708,6 +708,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -716,6 +721,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -729,35 +739,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.04 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1542,10 +1555,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Geeetech/A20M/Configuration_adv.h b/config/examples/Geeetech/A20M/Configuration_adv.h
index 51463370c92e..1cbf173d1212 100644
--- a/config/examples/Geeetech/A20M/Configuration_adv.h
+++ b/config/examples/Geeetech/A20M/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Geeetech/GT2560/Configuration.h b/config/examples/Geeetech/GT2560/Configuration.h
index 44f5939b5e0f..6ecc7f639f7f 100644
--- a/config/examples/Geeetech/GT2560/Configuration.h
+++ b/config/examples/Geeetech/GT2560/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -740,6 +740,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 400, 400, 2, 45 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -748,6 +753,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 5000, 5000, 50, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -761,35 +771,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 4.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.04 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1573,10 +1586,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h b/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h
index 7b26ebec7a65..50522cea0dea 100644
--- a/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h
+++ b/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(R. de Weerd, I3 Pro X)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 400, 400, 2, 45 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 4000, 4000, 40, 4000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 5.0
#define DEFAULT_YJERK 5.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 4.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.01 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Geeetech/MeCreator2/Configuration.h b/config/examples/Geeetech/MeCreator2/Configuration.h
index edfd2c9179a9..4a4eaae321fc 100644
--- a/config/examples/Geeetech/MeCreator2/Configuration.h
+++ b/config/examples/Geeetech/MeCreator2/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Phr3d13, MeCreator2)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -732,6 +732,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 250, 250, 400, 45 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -740,6 +745,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -753,35 +763,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 2000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
- #define DEFAULT_XJERK 0
- #define DEFAULT_YJERK 0
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
+ #define DEFAULT_XJERK 2
+ #define DEFAULT_YJERK 2
#define DEFAULT_ZJERK 0.6
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 50.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.001 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1565,10 +1578,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Geeetech/MeCreator2/Configuration_adv.h b/config/examples/Geeetech/MeCreator2/Configuration_adv.h
index 1536179f8f5c..e3cae5932c60 100644
--- a/config/examples/Geeetech/MeCreator2/Configuration_adv.h
+++ b/config/examples/Geeetech/MeCreator2/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2034,6 +2059,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2532,6 +2559,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h
index 02d543fa1bf7..f86078badc6a 100644
--- a/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h
+++ b/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(1138-4EB, Geeetech Prusa i3 Pro B BLTouch config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -745,6 +745,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 400, 400, 2, 45 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -753,6 +758,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 5000, 5000, 75, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -766,35 +776,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.04 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1579,10 +1592,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Geeetech/Prusa i3 Pro B/README.md b/config/examples/Geeetech/Prusa i3 Pro B/bltouch/README.md
similarity index 100%
rename from config/examples/Geeetech/Prusa i3 Pro B/README.md
rename to config/examples/Geeetech/Prusa i3 Pro B/bltouch/README.md
diff --git a/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h
index bae11398aa55..9a3c24ccf7e1 100644
--- a/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h
+++ b/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(1138-4EB, Geeetech Prusa i3 Pro B config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -745,6 +745,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 400, 400, 2, 45 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -753,6 +758,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 5000, 5000, 75, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -766,35 +776,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.04 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1578,10 +1591,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Geeetech/Prusa i3 Pro B/noprobe/README.md b/config/examples/Geeetech/Prusa i3 Pro B/noprobe/README.md
new file mode 100644
index 000000000000..30fcf2e443ce
--- /dev/null
+++ b/config/examples/Geeetech/Prusa i3 Pro B/noprobe/README.md
@@ -0,0 +1,54 @@
+These are example configurations for the low-cost [Acrylic Prusa I3 pro B 3D Printer DIY kit](http://www.geeetech.com/acrylic-geeetech-prusa-i3-pro-b-3d-printer-diy-kit-p-917.html) and the [3DTouch auto bed leveling sensor](http://www.geeetech.com/geeetech-3dtouch-auto-bed-leveling-sensor-for-3d-printer-p-1010.html) based on:
+
+- `../GT2560/`
+- [Marlin 1.1.4 With 3DTouch / BLTouch for i3 Pro B](https://www.geeetech.com/forum/viewtopic.php?t=19846)
+
+The main characteristics of these configurations are:
+
+- The defined motherboard is `BOARD_GT2560_REV_A_PLUS`.
+- Travel limits are adjusted to the printer bed size and position.
+- An example `SKEW_CORRECTION` for a particular printer is enabled. See comments below about how to adjust it to a particular printer.
+- Using the LCD controller for bed leveling is enabled.
+ - `PROBE_MANUALLY` is enabled, which *provides a means to do "Auto" Bed Leveling without a probe*.
+ - The `LEVEL_BED_CORNERS` option for manual bed adjustment is enabled.
+ - Bilinear bed leveling is enabled, the boundaries for probing are adjusted to the glass size, and extrapolation is enabled.
+- `PRINTCOUNTER` is enabled, in order to track statistical data.
+- `INDIVIDUAL_AXIS_HOMING_MENU` is enabled, which adds individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
+- The speaker is enabled for the UI feedback.
+- `bltouch` variant:
+ - `USE_ZMAX_PLUG` is enabled. See comments about connections below.
+ - Heaters and fans are turned off when probing.
+ - Multiple probing is set to 3.
+
+# First-time configuration
+
+## Skew factor
+
+The skew factor must be adjusted for each printer:
+
+- First, uncomment `#define XY_SKEW_FACTOR 0.0`, compile and upload the firmware.
+- Then, print [YACS (Yet Another Calibration Square)](https://www.thingiverse.com/thing:2563185). Hint, scale it considering a margin for brim (if used). The larger, the better to make error measurements.
+- Measure the printed part according to the comments in the example configuration file, and set `XY_DIAG_AC`, `XY_DIAG_BD` and `Y_SIDE_AD`.
+- Last, comment `#define XY_SKEW_FACTOR 0.0` again, compile and upload.
+
+## 3DTouch auto leveling sensor
+
+- Print a suitable mount to attach the sensor to the printer. The example configuration file is adjusted to http://www.geeetech.com/wiki/images/6/61/3DTouch_auto_leveling_sensor-1.zip
+- Unlike suggested in [geeetech.com/wiki/index.php/3DTouch_Auto_Leveling_Sensor](https://www.geeetech.com/wiki/index.php/3DTouch_Auto_Leveling_Sensor), the existing end stop switch is expected to be kept connected to Z_MIN. So, the sensor is to be connected to Z_MAX, according to Marlin's default settings. Furthermore, GT2560-A+ provides a connector for the servo next to thermistor connectors (see [GT2560](https://www.geeetech.com/wiki/images/thumb/4/45/GT2560_wiring.jpg/700px-GT2560_wiring.jpg) and [GT2560-A+](http://i.imgur.com/E0t34VU.png)).
+- Be careful to respect the polarity of the sensor when connecting it to the GT2560-A+. Unlike end stops, reversing the connection will prevent the sensor from working properly.
+- [Test](http://www.geeetech.com/wiki/index.php/3DTouch_Auto_Leveling_Sensor#Testing) and [calibrate](https://www.geeetech.com/wiki/index.php/3DTouch_Auto_Leveling_Sensor#Calibration) the sensor.
+- If using the GT2560-A+ and with the sensor connected to Z_MAX and an endstop connected to Z_MIN use the following calibration routine instead.
+
+## 3DTouch Calibration with Z_MAX
+
+- Home the printer with `G28` command.
+- Disable the Z axis software endstop with `M211 S0 Z0`
+- Reset the probe Z_OFFSET with `M851 Z0`
+- Move to the center of the bed with `G1 X100 Y100`
+- Move Z incrementally until the nozzle is the correct height from the bed using a shim or piece of paper, record this Z movement, for example -0.2.
+- Do a single probe at the current point in the middle of the bed using `G30` and not the returned value, for example 1.9. Invert this value, i.e. -1.9, and add it to the Z offset above, i.e. -0.2 in this example giving -2.1.
+- Update the probe Z_OFFSET to this value using `M851` i.e. `M851 Z-2.1`.
+- Re-enable software end-stops with `M211 S1 Z0`
+- Save this value to the EEPROM with `M500`.
+- Update the start G-Code in your slicer software to insert a `G29` after the last `G28`.
+- Carefully test that the offset is correct in the first print.
diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h
index 3ad7d31902b4..6e90fd0e3986 100644
--- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h
+++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Phr3d13, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 1
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h
index dfbcbe1b5137..ee0c82efe039 100644
--- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h
+++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h
index c7c00987b038..30cf637a8a8f 100644
--- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h
+++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Phr3d13, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h
index dfbcbe1b5137..ee0c82efe039 100644
--- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h
+++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/HMS434/Configuration.h b/config/examples/HMS434/Configuration.h
index 463585eae22e..54b4214e4940 100644
--- a/config/examples/HMS434/Configuration.h
+++ b/config/examples/HMS434/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Scheepers, MaukCC)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 -1
#define TEMP_SENSOR_1 0
@@ -712,6 +712,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 1000, 1000, 40, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -720,6 +725,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -733,35 +743,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.08 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1545,10 +1558,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/HMS434/Configuration_adv.h b/config/examples/HMS434/Configuration_adv.h
index c59c545e89c1..99daf6b1ebcb 100644
--- a/config/examples/HMS434/Configuration_adv.h
+++ b/config/examples/HMS434/Configuration_adv.h
@@ -371,6 +371,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -594,18 +595,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -855,6 +870,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1265,7 +1289,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 16 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 16 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 16
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2014,6 +2039,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2498,6 +2525,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Infitary/i3-M508/Configuration.h b/config/examples/Infitary/i3-M508/Configuration.h
index 9f193679103d..7d648499acfa 100644
--- a/config/examples/Infitary/i3-M508/Configuration.h
+++ b/config/examples/Infitary/i3-M508/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(tjclement, Infitary M508)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -729,6 +729,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 400, 400, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -737,6 +742,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 9000, 9000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -750,35 +760,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1562,10 +1575,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Infitary/i3-M508/Configuration_adv.h b/config/examples/Infitary/i3-M508/Configuration_adv.h
index fba5a2601df4..419a0bfd3690 100644
--- a/config/examples/Infitary/i3-M508/Configuration_adv.h
+++ b/config/examples/Infitary/i3-M508/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/JGAurora/A1/Configuration.h b/config/examples/JGAurora/A1/Configuration.h
index 8445110af11e..ba6510b4a4d2 100644
--- a/config/examples/JGAurora/A1/Configuration.h
+++ b/config/examples/JGAurora/A1/Configuration.h
@@ -77,6 +77,7 @@
// ╚╝╚═╝╩ ╩└─┘┴└─└─┘┴└─┴ ┴╚ └─┘┴└─└─┘┴ ┴o└─┘└─┘┴ ┴
#define STRING_CONFIG_H_AUTHOR "(Roberto Mariani & Samuel Pinches)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -388,6 +389,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -405,8 +407,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -753,28 +753,15 @@
#define DEFAULT_TRAVEL_ACCELERATION 500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 13.0
#define DEFAULT_YJERK 5.0
#define DEFAULT_ZJERK 0.4
@@ -782,6 +769,17 @@
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1565,10 +1563,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/JGAurora/A1/Configuration_adv.h b/config/examples/JGAurora/A1/Configuration_adv.h
index a8f481ff4822..24b356729bfa 100644
--- a/config/examples/JGAurora/A1/Configuration_adv.h
+++ b/config/examples/JGAurora/A1/Configuration_adv.h
@@ -384,6 +384,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -607,18 +608,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -892,6 +907,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1291,20 +1315,21 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 25 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 25 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 25
- #define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
+ #define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
#define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds.
// Note: Extra time may be added to mitigate controller latency.
- #define BABYSTEP_ALWAYS_AVAILABLE // Allow babystepping at all times (not just during movement).
+ #define BABYSTEP_ALWAYS_AVAILABLE // Allow babystepping at all times (not just during movement).
//#define MOVE_Z_WHEN_IDLE // Jump to the move Z menu on doubleclick when printer is idle.
#if ENABLED(MOVE_Z_WHEN_IDLE)
- #define MOVE_Z_IDLE_MULTIPLICATOR 10 // Multiply 1mm by this factor for the move step size.
+ #define MOVE_Z_IDLE_MULTIPLICATOR 10 // Multiply 1mm by this factor for the move step size.
#endif
#endif
- #define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28
+ #define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28
//#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
@@ -2040,6 +2065,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2538,6 +2565,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/JGAurora/A5/Configuration.h b/config/examples/JGAurora/A5/Configuration.h
index 8e2c31a08ef9..7b00e9753ef9 100644
--- a/config/examples/JGAurora/A5/Configuration.h
+++ b/config/examples/JGAurora/A5/Configuration.h
@@ -77,6 +77,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Telli Mantelli, Kris Waclawski, Samuel Pinches & Michael Gilardi, 21 Jan 2018)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -388,6 +389,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -405,8 +407,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 15 // manual calibration of thermistor in JGAurora A5 hotend
#define TEMP_SENSOR_1 0
@@ -737,6 +737,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 15, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -745,6 +750,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1000, 500, 100, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -758,35 +768,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 8.0
#define DEFAULT_YJERK 3.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.005 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1570,10 +1583,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/JGAurora/A5/Configuration_adv.h b/config/examples/JGAurora/A5/Configuration_adv.h
index 65549a58d026..1667f5ae24ae 100644
--- a/config/examples/JGAurora/A5/Configuration_adv.h
+++ b/config/examples/JGAurora/A5/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 5 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 5 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 5
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/JGAurora/A5S/Configuration.h b/config/examples/JGAurora/A5S/Configuration.h
index 09f34afe2cb6..9eff362706aa 100644
--- a/config/examples/JGAurora/A5S/Configuration.h
+++ b/config/examples/JGAurora/A5S/Configuration.h
@@ -77,6 +77,7 @@
// ╚╝╚═╝╩ ╩└─┘┴└─└─┘┴└─┴ ┴╚ └─┘┴└─└─┘┴ ┴o└─┘└─┘┴ ┴
#define STRING_CONFIG_H_AUTHOR "(Roberto Mariani & Samuel Pinches)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -388,6 +389,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -405,8 +407,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -753,28 +753,15 @@
#define DEFAULT_TRAVEL_ACCELERATION 500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 13.0
#define DEFAULT_YJERK 5.0
#define DEFAULT_ZJERK 0.4
@@ -782,6 +769,17 @@
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1565,10 +1563,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/JGAurora/A5S/Configuration_adv.h b/config/examples/JGAurora/A5S/Configuration_adv.h
index a8f481ff4822..24b356729bfa 100644
--- a/config/examples/JGAurora/A5S/Configuration_adv.h
+++ b/config/examples/JGAurora/A5S/Configuration_adv.h
@@ -384,6 +384,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -607,18 +608,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -892,6 +907,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1291,20 +1315,21 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 25 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 25 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 25
- #define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
+ #define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
#define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds.
// Note: Extra time may be added to mitigate controller latency.
- #define BABYSTEP_ALWAYS_AVAILABLE // Allow babystepping at all times (not just during movement).
+ #define BABYSTEP_ALWAYS_AVAILABLE // Allow babystepping at all times (not just during movement).
//#define MOVE_Z_WHEN_IDLE // Jump to the move Z menu on doubleclick when printer is idle.
#if ENABLED(MOVE_Z_WHEN_IDLE)
- #define MOVE_Z_IDLE_MULTIPLICATOR 10 // Multiply 1mm by this factor for the move step size.
+ #define MOVE_Z_IDLE_MULTIPLICATOR 10 // Multiply 1mm by this factor for the move step size.
#endif
#endif
- #define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28
+ #define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28
//#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
@@ -2040,6 +2065,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2538,6 +2565,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/MakerParts/Configuration.h b/config/examples/MakerParts/Configuration.h
index b5ed76af0688..5803b380f1c1 100644
--- a/config/examples/MakerParts/Configuration.h
+++ b/config/examples/MakerParts/Configuration.h
@@ -38,26 +38,6 @@
*/
#define CONFIGURATION_H_VERSION 020000
-//===========================================================================
-//===== Pololus calibration =================================================
-//===========================================================================
-
-// Voltage reference on potentiometer on Green Pololus in millivolts
-#define Vref_mV 800UL
-
-// Rsc value used on PCB of the Green Pololus
-#define Rsc_mOhms 100UL
-
-// Estimated maximum acceleration for X and Y axis
-#define MAX_XYAXIS_ACCEL (3UL * (Vref_mV) * 100UL / (Rsc_mOhms))
-
-// Notes:
-// If we could use 1.65A as motor current, then 3000 mm/s^2 as acceleration
-// if perfectly achievable. Using 1A as motor current, 2400 mm/s^2 acceleration
-// is perfectly possible without losing any steps
-// On A4988 drivers, maximum current can be calculated as I_TripMax= Vref/(8*Rs)
-//
-
//===========================================================================
//============================= Getting Started =============================
//===========================================================================
@@ -92,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "ejtagle" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -403,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -420,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -745,13 +725,23 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 2, 30 } // For 300mm/s printing
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
* Override with M201
* X, Y, Z, E0 [, E1[, E2[, E3[, E4[, E5]]]]]
*/
-#define DEFAULT_MAX_ACCELERATION { MAX_XYAXIS_ACCEL, MAX_XYAXIS_ACCEL, 10, 200 }
+#define DEFAULT_MAX_ACCELERATION { 2400, 2400, 10, 200 }
+
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
/**
* Default Acceleration (change/s) change = mm/s
@@ -761,40 +751,43 @@
* M204 R Retract Acceleration
* M204 T Travel Acceleration
*/
-#define DEFAULT_ACCELERATION MAX_XYAXIS_ACCEL // X, Y, Z and E acceleration for printing moves
+#define DEFAULT_ACCELERATION 2400 // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION 100 // E acceleration for retracts
-#define DEFAULT_TRAVEL_ACCELERATION MAX_XYAXIS_ACCEL // X, Y, Z acceleration for travel (non printing) moves
-
-/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
+#define DEFAULT_TRAVEL_ACCELERATION 2400 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 2.0
#define DEFAULT_YJERK 2.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 8.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.001 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1578,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/MakerParts/Configuration_adv.h b/config/examples/MakerParts/Configuration_adv.h
index 739e9a4dc318..a1c9dd5635f8 100644
--- a/config/examples/MakerParts/Configuration_adv.h
+++ b/config/examples/MakerParts/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2526,6 +2553,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Malyan/M150/Configuration.h b/config/examples/Malyan/M150/Configuration.h
index 25a37e560d3a..62d8a5941006 100644
--- a/config/examples/Malyan/M150/Configuration.h
+++ b/config/examples/Malyan/M150/Configuration.h
@@ -77,6 +77,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Gunther)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -388,6 +389,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -405,8 +407,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -745,6 +745,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -753,6 +758,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 700, 700, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -766,35 +776,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 700 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 8.0
#define DEFAULT_YJERK 8.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.037 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1599,10 +1612,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Malyan/M150/Configuration_adv.h b/config/examples/Malyan/M150/Configuration_adv.h
index eab63e50ad55..0f54d647a8df 100644
--- a/config/examples/Malyan/M150/Configuration_adv.h
+++ b/config/examples/Malyan/M150/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Malyan/M200/Configuration.h b/config/examples/Malyan/M200/Configuration.h
index 179d0cdfa78b..043b32d569db 100644
--- a/config/examples/Malyan/M200/Configuration.h
+++ b/config/examples/Malyan/M200/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(xC0000005, Malyan M200 build)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -146,7 +147,7 @@
#define EXTRUDERS 1
// Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc.
-#define DEFAULT_NOMINAL_FILAMENT_DIA 3.0
+#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 11
#define TEMP_SENSOR_1 0
@@ -474,9 +474,10 @@
// If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
// Ultimaker
- #define DEFAULT_Kp 26.15
- #define DEFAULT_Ki 2.74
- #define DEFAULT_Kd 62.35
+ //#define DEFAULT_Kp 26.15
+ //#define DEFAULT_Ki 2.74
+ //#define DEFAULT_Kd 62.35
+
// MakerGear
//#define DEFAULT_Kp 7.0
//#define DEFAULT_Ki 0.1
@@ -487,6 +488,11 @@
//#define DEFAULT_Ki 2.25
//#define DEFAULT_Kd 440
+ // Malyan M200
+ #define DEFAULT_Kp 20.0
+ #define DEFAULT_Ki 2.02
+ #define DEFAULT_Kd 100.00
+
#endif // PIDTEMP
//===========================================================================
@@ -506,7 +512,7 @@
* heater. If your configuration is significantly different than this and you don't understand
* the issues involved, don't use bed PID until someone else verifies that your hardware works.
*/
-//#define PIDTEMPBED
+#define PIDTEMPBED
//#define BED_LIMIT_SWITCHING
@@ -524,9 +530,9 @@
//120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
- #define DEFAULT_bedKp 231.09
- #define DEFAULT_bedKi 45.21
- #define DEFAULT_bedKd 295.34
+ //#define DEFAULT_bedKp 231.09
+ //#define DEFAULT_bedKi 45.21
+ //#define DEFAULT_bedKd 295.34
//120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
//from pidautotune
@@ -534,6 +540,11 @@
//#define DEFAULT_bedKi 1.41
//#define DEFAULT_bedKd 1675.16
+ // Malyan M200
+ #define DEFAULT_bedKp 14.00
+ #define DEFAULT_bedKi 0.9
+ #define DEFAULT_bedKd 120.4
+
// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
#endif // PIDTEMPBED
@@ -724,6 +735,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -732,6 +748,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -745,35 +766,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1036,8 +1060,8 @@
// @section machine
// The size of the print bed
-#define X_BED_SIZE 200
-#define Y_BED_SIZE 200
+#define X_BED_SIZE 120
+#define Y_BED_SIZE 120
// Travel limits (mm) after homing, corresponding to endstop positions.
#define X_MIN_POS 0
@@ -1045,7 +1069,7 @@
#define Z_MIN_POS 0
#define X_MAX_POS X_BED_SIZE
#define Y_MAX_POS Y_BED_SIZE
-#define Z_MAX_POS 200
+#define Z_MAX_POS 120
/**
* Software Endstops
@@ -1263,7 +1287,7 @@
#endif
// Add a menu item to move between bed corners for manual bed adjustment
-#define LEVEL_BED_CORNERS
+//#define LEVEL_BED_CORNERS
#if ENABLED(LEVEL_BED_CORNERS)
#define LEVEL_CORNERS_INSET 30 // (mm) An inset for corner leveling
@@ -1557,10 +1581,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
@@ -1612,7 +1636,7 @@
*/
//#define SPI_SPEED SPI_HALF_SPEED
//#define SPI_SPEED SPI_QUARTER_SPEED
-#define SPI_SPEED SPI_EIGHTH_SPEED
+//#define SPI_SPEED SPI_EIGHTH_SPEED
/**
* SD CARD: ENABLE CRC
diff --git a/config/examples/Malyan/M200/Configuration_adv.h b/config/examples/Malyan/M200/Configuration_adv.h
index 39aeb44cb925..dc562ed6178e 100644
--- a/config/examples/Malyan/M200/Configuration_adv.h
+++ b/config/examples/Malyan/M200/Configuration_adv.h
@@ -277,9 +277,9 @@
* The fan will turn on automatically whenever any stepper is enabled
* and turn off after a set period after all steppers are turned off.
*/
-//#define USE_CONTROLLER_FAN
+#define USE_CONTROLLER_FAN // Malyan M200: uncomment if you use FAN2 to cool the board (original)
#if ENABLED(USE_CONTROLLER_FAN)
- //#define CONTROLLER_FAN_PIN -1 // Set a custom pin for the controller fan
+ #define CONTROLLER_FAN_PIN MALYAN_FAN2_PIN // Set a custom pin for the controller fan
#define CONTROLLERFAN_SECS 60 // Duration in seconds for the fan to run after all motors are disabled
#define CONTROLLERFAN_SPEED 255 // 255 == full speed
//#define CONTROLLERFAN_SPEED_Z_ONLY 127 // Reduce noise on machines that keep Z enabled
@@ -346,7 +346,9 @@
* Multiple extruders can be assigned to the same pin in which case
* the fan will turn on when any selected extruder is above the threshold.
*/
-//#define E0_AUTO_FAN_PIN -1
+//#define FAN_PIN MALYAN_FAN1_PIN // Malyan M200: uncomment if you use FAN1 to cool the part and FAN2 to cool the extruder
+//#define E0_AUTO_FAN_PIN MALYAN_FAN2_PIN // Malyan M200: uncomment if you use FAN1 to cool the part and FAN2 to cool the extruder
+#define E0_AUTO_FAN_PIN MALYAN_FAN1_PIN // Malyan M200: uncomment if you use FAN1 to cool the extruder and the part (original)
#define E1_AUTO_FAN_PIN -1
#define E2_AUTO_FAN_PIN -1
#define E3_AUTO_FAN_PIN -1
@@ -379,6 +381,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +605,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +904,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1312,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2062,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2562,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Micromake/C1/basic/Configuration.h b/config/examples/Micromake/C1/basic/Configuration.h
index 93489b0516ef..594c79ac33e9 100644
--- a/config/examples/Micromake/C1/basic/Configuration.h
+++ b/config/examples/Micromake/C1/basic/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(MetalSearch, Micromake C1 factory settings)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -729,6 +729,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 30 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -737,6 +742,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 3000, 4000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -750,35 +760,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1562,10 +1575,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Micromake/C1/README.md b/config/examples/Micromake/C1/basic/README.md
similarity index 100%
rename from config/examples/Micromake/C1/README.md
rename to config/examples/Micromake/C1/basic/README.md
diff --git a/config/examples/Micromake/C1/enhanced/Configuration.h b/config/examples/Micromake/C1/enhanced/Configuration.h
index d4dcbb6698f6..7eb2d51166ff 100644
--- a/config/examples/Micromake/C1/enhanced/Configuration.h
+++ b/config/examples/Micromake/C1/enhanced/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(MetalSearch, Micromake C1 enhanced)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -729,6 +729,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 30 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -737,6 +742,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 3000, 4000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -750,35 +760,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1562,10 +1575,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Micromake/C1/enhanced/Configuration_adv.h b/config/examples/Micromake/C1/enhanced/Configuration_adv.h
index da10c309ad59..78b6e46c46fa 100644
--- a/config/examples/Micromake/C1/enhanced/Configuration_adv.h
+++ b/config/examples/Micromake/C1/enhanced/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Micromake/C1/enhanced/README.md b/config/examples/Micromake/C1/enhanced/README.md
new file mode 100644
index 000000000000..0111f6f00a0e
--- /dev/null
+++ b/config/examples/Micromake/C1/enhanced/README.md
@@ -0,0 +1,15 @@
+# Micromake C1
+
+### In the folder "basic"
+Configuration files for Micromake C1 without mods
+ - English LCD 2X16 Characters
+ - Motors 16 STEPS
+ - No heated bed
+ - No probe, etc.
+ - Like a standard C1 as shipped by Micromake.
+
+### In the folder "enhanced"
+Configuration files for Micromake C1 with…
+ - 128 STEPS configured with jumper on the motherboard (all open for 128 Steps).
+ - Capacitive Probe (Adjust offsets at your convenience)
+ - French language with no accents for Japanese LCD.
diff --git a/config/examples/Mks/Robin/Configuration.h b/config/examples/Mks/Robin/Configuration.h
index 07cb10d35946..62b879434d32 100644
--- a/config/examples/Mks/Robin/Configuration.h
+++ b/config/examples/Mks/Robin/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -384,6 +385,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -401,8 +403,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 1
@@ -726,6 +726,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -734,6 +739,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -747,35 +757,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1559,10 +1572,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Mks/Robin/Configuration_adv.h b/config/examples/Mks/Robin/Configuration_adv.h
index 14b13ef25918..d0a05f01617e 100644
--- a/config/examples/Mks/Robin/Configuration_adv.h
+++ b/config/examples/Mks/Robin/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Mks/Sbase/Configuration.h b/config/examples/Mks/Sbase/Configuration.h
index f144b1ddb613..ebccfc97e50f 100644
--- a/config/examples/Mks/Sbase/Configuration.h
+++ b/config/examples/Mks/Sbase/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 9000, 9000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Mks/Sbase/Configuration_adv.h b/config/examples/Mks/Sbase/Configuration_adv.h
index 8275dcec9489..99172043212d 100644
--- a/config/examples/Mks/Sbase/Configuration_adv.h
+++ b/config/examples/Mks/Sbase/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -888,6 +903,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1287,7 +1311,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2036,6 +2061,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2534,6 +2561,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Mks/Sbase/000-README_RepRap_Discount_Full_Graphic_Smart_Controller.txt b/config/examples/Mks/Sbase/README.txt
similarity index 100%
rename from config/examples/Mks/Sbase/000-README_RepRap_Discount_Full_Graphic_Smart_Controller.txt
rename to config/examples/Mks/Sbase/README.txt
diff --git a/config/examples/Printrbot/PrintrboardG2/Configuration.h b/config/examples/Printrbot/PrintrboardG2/Configuration.h
index 5e8166724a8f..7e4eaab494e8 100644
--- a/config/examples/Printrbot/PrintrboardG2/Configuration.h
+++ b/config/examples/Printrbot/PrintrboardG2/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -384,6 +385,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -401,8 +403,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -728,6 +728,11 @@
//#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
#define DEFAULT_MAX_FEEDRATE { 30, 30,30,30 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -737,6 +742,11 @@
//#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
#define DEFAULT_MAX_ACCELERATION { 100, 100, 100, 100 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -745,44 +755,44 @@
* M204 R Retract Acceleration
* M204 T Travel Acceleration
*/
-//#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E acceleration for printing moves
-//#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts
-//#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
#define DEFAULT_ACCELERATION 100 // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION 100 // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION 100 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 1.0
#define DEFAULT_YJERK 1.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.004 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1566,10 +1576,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/RapideLite/RL200/Configuration.h b/config/examples/RapideLite/RL200/Configuration.h
index 91bddbf06f17..4f6f59a63991 100644
--- a/config/examples/RapideLite/RL200/Configuration.h
+++ b/config/examples/RapideLite/RL200/Configuration.h
@@ -72,7 +72,8 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(platon42)" // Who made the changes.
-//
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
+
/**
* *** VENDORS PLEASE READ ***
*
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 9000, 9000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/RapideLite/RL200/Configuration_adv.h b/config/examples/RapideLite/RL200/Configuration_adv.h
index 3e5a9294f66d..b81cf8441852 100644
--- a/config/examples/RapideLite/RL200/Configuration_adv.h
+++ b/config/examples/RapideLite/RL200/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/RepRapPro/Huxley/Configuration.h b/config/examples/RepRapPro/Huxley/Configuration.h
index f250870d2396..c018cce3e7e5 100644
--- a/config/examples/RepRapPro/Huxley/Configuration.h
+++ b/config/examples/RepRapPro/Huxley/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(indazoo, Huxley v1)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -765,6 +765,11 @@ Black rubber belt(MXL), 18 - tooth aluminium pulley : 87.489 step per mm (Huxley
#define DEFAULT_MAX_Z_FEEDRATE 3.3 // older Huxley has problem with speeds > 3.3 mm/s on Z axis
#define DEFAULT_MAX_FEEDRATE { 200, 200, DEFAULT_MAX_Z_FEEDRATE, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -773,6 +778,11 @@ Black rubber belt(MXL), 18 - tooth aluminium pulley : 87.489 step per mm (Huxley
*/
#define DEFAULT_MAX_ACCELERATION { 1000, 1000, 50, 1000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -786,35 +796,38 @@ Black rubber belt(MXL), 18 - tooth aluminium pulley : 87.489 step per mm (Huxley
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.04 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1607,10 +1620,10 @@ Black rubber belt(MXL), 18 - tooth aluminium pulley : 87.489 step per mm (Huxley
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/RepRapWorld/Megatronics/Configuration.h b/config/examples/RepRapWorld/Megatronics/Configuration.h
index 39561c347b46..e9dfd88873f7 100644
--- a/config/examples/RepRapWorld/Megatronics/Configuration.h
+++ b/config/examples/RepRapWorld/Megatronics/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "RepRapWorld.com" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/RigidBot/Configuration.h b/config/examples/RigidBot/Configuration.h
index 3a85d9f86d56..b663e6e32ac4 100644
--- a/config/examples/RigidBot/Configuration.h
+++ b/config/examples/RigidBot/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, RigidBot)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -386,6 +387,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -403,8 +405,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1 // DGlass3D = 5; RigidBot = 1; 3DSv6 = 5
#define TEMP_SENSOR_1 0
@@ -723,6 +723,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -731,6 +736,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 800, 800, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -744,35 +754,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 8.0
#define DEFAULT_YJERK 8.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.043 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1556,10 +1569,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/RigidBot/Configuration_adv.h b/config/examples/RigidBot/Configuration_adv.h
index 61d6b61db7e4..83ad289ad75f 100644
--- a/config/examples/RigidBot/Configuration_adv.h
+++ b/config/examples/RigidBot/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/SCARA/Configuration.h b/config/examples/SCARA/Configuration.h
index 64b219113464..1d79a972ba8a 100644
--- a/config/examples/SCARA/Configuration.h
+++ b/config/examples/SCARA/Configuration.h
@@ -99,6 +99,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -410,6 +411,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -427,8 +429,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -734,6 +734,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 30, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -742,6 +747,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 300, 300, 20, 1000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -755,35 +765,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 400 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 5.0
#define DEFAULT_YJERK 5.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 3.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.025 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1567,10 +1580,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/SCARA/Configuration_adv.h b/config/examples/SCARA/Configuration_adv.h
index 2530b83de334..9e5101366105 100644
--- a/config/examples/SCARA/Configuration_adv.h
+++ b/config/examples/SCARA/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/STM32/Black_STM32F407VET6/Configuration.h b/config/examples/STM32/Black_STM32F407VET6/Configuration.h
index 2f772633dfc7..135fb75d2030 100644
--- a/config/examples/STM32/Black_STM32F407VET6/Configuration.h
+++ b/config/examples/STM32/Black_STM32F407VET6/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 1
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h
index 56ac568f45b4..bdfe3ff22d7c 100644
--- a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h
+++ b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/STM32/STM32F103RE/Configuration.h b/config/examples/STM32/STM32F103RE/Configuration.h
index e80ebe989670..77d23d85010e 100644
--- a/config/examples/STM32/STM32F103RE/Configuration.h
+++ b/config/examples/STM32/STM32F103RE/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "Victor Perez" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#warning temp_sensor set to 998/999 (fake)
#define TEMP_SENSOR_0 999
@@ -727,6 +727,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 400, 400, 2, 45 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -735,6 +740,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1400, 1400, 100, 80000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -748,35 +758,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 13.0
#define DEFAULT_YJERK 13.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.048 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1560,10 +1573,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/STM32/STM32F4/Configuration.h b/config/examples/STM32/STM32F4/Configuration.h
index 2c303616f8de..5759e87eface 100644
--- a/config/examples/STM32/STM32F4/Configuration.h
+++ b/config/examples/STM32/STM32F4/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -129,7 +130,7 @@
// Choose the name from boards.h that matches your setup
#ifndef MOTHERBOARD
- #define MOTHERBOARD BOARD_STM32F4
+ #define MOTHERBOARD BOARD_GENERIC_STM32F4
#endif
// Name displayed in the LCD "Ready" message and Info menu
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/STM32/stm32f103ret6/Configuration.h b/config/examples/STM32/stm32f103ret6/Configuration.h
index 9f3c034af336..3ebb230cc494 100644
--- a/config/examples/STM32/stm32f103ret6/Configuration.h
+++ b/config/examples/STM32/stm32f103ret6/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "Victor Perez" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#warning temp_sensor set to 998/999 (fake)
#define TEMP_SENSOR_0 999
@@ -727,6 +727,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 400, 400, 2, 45 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -735,6 +740,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1400, 1400, 100, 80000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -748,35 +758,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 13.0
#define DEFAULT_YJERK 13.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.048 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1560,10 +1573,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Sanguinololu/Configuration.h b/config/examples/Sanguinololu/Configuration.h
index 64b533ad9dbf..628aa111dbb5 100644
--- a/config/examples/Sanguinololu/Configuration.h
+++ b/config/examples/Sanguinololu/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(thinkyhead, Sanguinololu)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -756,6 +756,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 8, 45 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -764,6 +769,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -777,35 +787,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1589,10 +1602,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Sanguinololu/Configuration_adv.h b/config/examples/Sanguinololu/Configuration_adv.h
index 6fd866513294..c3033cecc102 100644
--- a/config/examples/Sanguinololu/Configuration_adv.h
+++ b/config/examples/Sanguinololu/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Tevo/Michelangelo/Configuration.h b/config/examples/Tevo/Michelangelo/Configuration.h
index 4168fbe0fb35..81b8d3401f16 100644
--- a/config/examples/Tevo/Michelangelo/Configuration.h
+++ b/config/examples/Tevo/Michelangelo/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(thisiskeithb, Tevo Michelangelo)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -730,6 +730,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 60, 55 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -738,6 +743,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 10000, 10000, 400, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -751,35 +761,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 5000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1563,10 +1576,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Tevo/Michelangelo/Configuration_adv.h b/config/examples/Tevo/Michelangelo/Configuration_adv.h
index 3950cb0fe51b..9550b3ba8ff9 100644
--- a/config/examples/Tevo/Michelangelo/Configuration_adv.h
+++ b/config/examples/Tevo/Michelangelo/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Tevo/Tarantula Pro/Configuration.h b/config/examples/Tevo/Tarantula Pro/Configuration.h
index c9876e93772f..4d53d8b8656f 100644
--- a/config/examples/Tevo/Tarantula Pro/Configuration.h
+++ b/config/examples/Tevo/Tarantula Pro/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(thisiskeithb, Tevo Tarantula Pro)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -730,6 +730,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 400, 400, 50, 45 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -738,6 +743,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -751,35 +761,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.04 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1556,10 +1569,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h
index 2d22bd9b7ed0..116d10e3e279 100755
--- a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h
+++ b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,14 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
+
+ // On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
+ #define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
+
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -883,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1282,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2031,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2529,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration.h b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration.h
index 2ae9e405c97c..104cfa0d6212 100644
--- a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration.h
+++ b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(thisiskeithb, Tevo Tornado V1)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -751,28 +751,15 @@
#define DEFAULT_TRAVEL_ACCELERATION 1500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 8.0
#define DEFAULT_YJERK 8.0
#define DEFAULT_ZJERK 0.4
@@ -780,6 +767,17 @@
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.026 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1563,10 +1561,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h
index 4010b594b67a..f2ef530af8b8 100755
--- a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h
+++ b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration.h b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration.h
index 37401fdfdcdb..c38dcf051674 100644
--- a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration.h
+++ b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(thisiskeithb, Tevo Tornado V2)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -751,28 +751,15 @@
#define DEFAULT_TRAVEL_ACCELERATION 1500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 8.0
#define DEFAULT_YJERK 8.0
#define DEFAULT_ZJERK 0.4
@@ -780,6 +767,17 @@
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.026 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1563,10 +1561,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h
index 4010b594b67a..f2ef530af8b8 100755
--- a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h
+++ b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/TheBorg/Configuration.h b/config/examples/TheBorg/Configuration.h
index 4286c6f8a4c8..a9cfc7f6254a 100644
--- a/config/examples/TheBorg/Configuration.h
+++ b/config/examples/TheBorg/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Spawn32, The_Borg)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 9000, 9000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/TheBorg/Configuration_adv.h b/config/examples/TheBorg/Configuration_adv.h
index f9cd4730e856..67b6ad00bb3e 100644
--- a/config/examples/TheBorg/Configuration_adv.h
+++ b/config/examples/TheBorg/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/TinyBoy2/Configuration.h b/config/examples/TinyBoy2/Configuration.h
index 78f5b78be613..cfa19bc6bdd2 100644
--- a/config/examples/TinyBoy2/Configuration.h
+++ b/config/examples/TinyBoy2/Configuration.h
@@ -88,6 +88,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(StefanB, TinyBoy2)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -405,6 +406,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -422,8 +424,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -776,6 +776,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 7, 35 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -784,6 +789,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -797,35 +807,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1614,10 +1627,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/TinyBoy2/Configuration_adv.h b/config/examples/TinyBoy2/Configuration_adv.h
index c9ea7ecf0a9d..d5bd7eb2b3e6 100644
--- a/config/examples/TinyBoy2/Configuration_adv.h
+++ b/config/examples/TinyBoy2/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+#define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Tronxy/X1/Configuration.h b/config/examples/Tronxy/X1/Configuration.h
index 5f3a4ce8238a..e9902c85171d 100644
--- a/config/examples/Tronxy/X1/Configuration.h
+++ b/config/examples/Tronxy/X1/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Claus Naeveke, 0.1)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 11
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 400, 400, 2, 50 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 400, 400, 40, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 20.0
#define DEFAULT_YJERK 20.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.053 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Tronxy/X3A/Configuration.h b/config/examples/Tronxy/X3A/Configuration.h
index 75b15511136a..95c1e1fcc208 100644
--- a/config/examples/Tronxy/X3A/Configuration.h
+++ b/config/examples/Tronxy/X3A/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Schullebernd, Tronxy X3A)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 6
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 400, 400, 4, 50 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1000, 1000, 1500, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 15.0
#define DEFAULT_YJERK 15.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.09 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1562,10 +1575,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Tronxy/X3A/Configuration_adv.h b/config/examples/Tronxy/X3A/Configuration_adv.h
index 32eabd0d4129..bbb33402994b 100644
--- a/config/examples/Tronxy/X3A/Configuration_adv.h
+++ b/config/examples/Tronxy/X3A/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Tronxy/X5S-2E/Configuration.h b/config/examples/Tronxy/X5S-2E/Configuration.h
index ce81d16bd176..ff0ad44962b6 100644
--- a/config/examples/Tronxy/X5S-2E/Configuration.h
+++ b/config/examples/Tronxy/X5S-2E/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Anthony Rich, OEM stock config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -385,6 +386,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -402,8 +404,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -746,6 +746,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -754,6 +759,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1000, 1000, 100, 1000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -767,35 +777,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 20.0
#define DEFAULT_YJERK 20.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.16 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1579,10 +1592,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Tronxy/X5S-2E/Configuration_adv.h b/config/examples/Tronxy/X5S-2E/Configuration_adv.h
index a43af1a0a5b1..e48d26dd02bf 100644
--- a/config/examples/Tronxy/X5S-2E/Configuration_adv.h
+++ b/config/examples/Tronxy/X5S-2E/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Tronxy/X5S/Configuration.h b/config/examples/Tronxy/X5S/Configuration.h
index 0f468a7b4d87..5ab4e8d92878 100644
--- a/config/examples/Tronxy/X5S/Configuration.h
+++ b/config/examples/Tronxy/X5S/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 400, 400, 4, 150 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1000, 1000, 1000, 1000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 18.0
#define DEFAULT_YJERK 18.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.13 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Tronxy/XY100/Configuration.h b/config/examples/Tronxy/XY100/Configuration.h
index 6152d482845c..41373c1a3ff5 100644
--- a/config/examples/Tronxy/XY100/Configuration.h
+++ b/config/examples/Tronxy/XY100/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Rob Griffiths, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -736,6 +736,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 400, 400, 4, 50 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -744,6 +749,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 1000, 5000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -757,35 +767,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 20.0
#define DEFAULT_YJERK 20.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.16 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1569,10 +1582,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/UltiMachine/Archim1/Configuration.h b/config/examples/UltiMachine/Archim1/Configuration.h
index 26b09c64bb39..42a00c4bdef6 100644
--- a/config/examples/UltiMachine/Archim1/Configuration.h
+++ b/config/examples/UltiMachine/Archim1/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/UltiMachine/Archim1/Configuration_adv.h b/config/examples/UltiMachine/Archim1/Configuration_adv.h
index 6d3a61415d49..b0b0dc020d73 100644
--- a/config/examples/UltiMachine/Archim1/Configuration_adv.h
+++ b/config/examples/UltiMachine/Archim1/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/UltiMachine/Archim2/Configuration.h b/config/examples/UltiMachine/Archim2/Configuration.h
index a6baaec3d613..11f5b0686a8d 100644
--- a/config/examples/UltiMachine/Archim2/Configuration.h
+++ b/config/examples/UltiMachine/Archim2/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/UltiMachine/Archim2/Configuration_adv.h b/config/examples/UltiMachine/Archim2/Configuration_adv.h
index a830fa3fbc42..f15a1cdc15f3 100644
--- a/config/examples/UltiMachine/Archim2/Configuration_adv.h
+++ b/config/examples/UltiMachine/Archim2/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/VORONDesign/Configuration.h b/config/examples/VORONDesign/Configuration.h
index 96abead88904..85b2110c8d10 100644
--- a/config/examples/VORONDesign/Configuration.h
+++ b/config/examples/VORONDesign/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 5
@@ -734,6 +734,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 75, 75 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -742,6 +747,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 , 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -755,35 +765,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 20.0
#define DEFAULT_YJERK 15.0
#define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.03 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1567,10 +1580,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/VORONDesign/Configuration_adv.h b/config/examples/VORONDesign/Configuration_adv.h
index 6ccfc1ea2657..dfe5a3210c4c 100644
--- a/config/examples/VORONDesign/Configuration_adv.h
+++ b/config/examples/VORONDesign/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Velleman/K8200/Configuration.h b/config/examples/Velleman/K8200/Configuration.h
index 4537da2122d5..f02c806b7120 100644
--- a/config/examples/Velleman/K8200/Configuration.h
+++ b/config/examples/Velleman/K8200/Configuration.h
@@ -88,6 +88,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(K8200, @CONSULitAS)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -403,6 +404,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -420,8 +422,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -754,6 +754,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -762,6 +767,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 9000, 9000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -775,35 +785,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.04 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1591,10 +1604,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Velleman/K8200/Configuration_adv.h b/config/examples/Velleman/K8200/Configuration_adv.h
index 8dabcb80764d..713418b1d4fe 100644
--- a/config/examples/Velleman/K8200/Configuration_adv.h
+++ b/config/examples/Velleman/K8200/Configuration_adv.h
@@ -392,6 +392,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -615,18 +616,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -900,6 +915,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1299,7 +1323,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2048,6 +2073,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2546,6 +2573,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Velleman/K8400/Dual-head/Configuration.h b/config/examples/Velleman/K8400/Dual-head/Configuration.h
index 6b0ffb799851..a18f843c249d 100644
--- a/config/examples/Velleman/K8400/Dual-head/Configuration.h
+++ b/config/examples/Velleman/K8400/Dual-head/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Anthony Birkett, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 5
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 160, 160, 10, 10000 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 9000, 9000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.007 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Velleman/K8400/Configuration_adv.h b/config/examples/Velleman/K8400/Dual-head/Configuration_adv.h
similarity index 98%
rename from config/examples/Velleman/K8400/Configuration_adv.h
rename to config/examples/Velleman/K8400/Dual-head/Configuration_adv.h
index 6d87bcdae58c..76b9cc292531 100644
--- a/config/examples/Velleman/K8400/Configuration_adv.h
+++ b/config/examples/Velleman/K8400/Dual-head/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Velleman/K8400/README.md b/config/examples/Velleman/K8400/Dual-head/README.md
similarity index 100%
rename from config/examples/Velleman/K8400/README.md
rename to config/examples/Velleman/K8400/Dual-head/README.md
diff --git a/config/examples/Velleman/K8400/Configuration.h b/config/examples/Velleman/K8400/Single-head/Configuration.h
similarity index 97%
rename from config/examples/Velleman/K8400/Configuration.h
rename to config/examples/Velleman/K8400/Single-head/Configuration.h
index 7a16004c5012..0ee10ba03521 100644
--- a/config/examples/Velleman/K8400/Configuration.h
+++ b/config/examples/Velleman/K8400/Single-head/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Anthony Birkett, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 160, 160, 10, 10000 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 9000, 9000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.5
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 20.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.007 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Velleman/K8400/Single-head/Configuration_adv.h b/config/examples/Velleman/K8400/Single-head/Configuration_adv.h
new file mode 100644
index 000000000000..76b9cc292531
--- /dev/null
+++ b/config/examples/Velleman/K8400/Single-head/Configuration_adv.h
@@ -0,0 +1,2798 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * Configuration_adv.h
+ *
+ * Advanced settings.
+ * Only change these if you know exactly what you're doing.
+ * Some of these settings can damage your printer if improperly set!
+ *
+ * Basic settings can be found in Configuration.h
+ *
+ */
+#define CONFIGURATION_ADV_H_VERSION 020000
+
+// @section temperature
+
+//===========================================================================
+//=============================Thermal Settings ============================
+//===========================================================================
+
+//
+// Custom Thermistor 1000 parameters
+//
+#if TEMP_SENSOR_0 == 1000
+ #define HOTEND0_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND0_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND0_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_1 == 1000
+ #define HOTEND1_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND1_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND1_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_2 == 1000
+ #define HOTEND2_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND2_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND2_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_3 == 1000
+ #define HOTEND3_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND3_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND3_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_4 == 1000
+ #define HOTEND4_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND4_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND4_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_5 == 1000
+ #define HOTEND5_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND5_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND5_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_BED == 1000
+ #define BED_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define BED_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define BED_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_CHAMBER == 1000
+ #define CHAMBER_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define CHAMBER_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define CHAMBER_BETA 3950 // Beta value
+#endif
+
+//
+// Hephestos 2 24V heated bed upgrade kit.
+// https://store.bq.com/en/heated-bed-kit-hephestos2
+//
+//#define HEPHESTOS2_HEATED_BED_KIT
+#if ENABLED(HEPHESTOS2_HEATED_BED_KIT)
+ #undef TEMP_SENSOR_BED
+ #define TEMP_SENSOR_BED 70
+ #define HEATER_BED_INVERTING true
+#endif
+
+/**
+ * Heated Chamber settings
+ */
+#if TEMP_SENSOR_CHAMBER
+ #define CHAMBER_MINTEMP 5
+ #define CHAMBER_MAXTEMP 60
+ #define TEMP_CHAMBER_HYSTERESIS 1 // (°C) Temperature proximity considered "close enough" to the target
+ //#define CHAMBER_LIMIT_SWITCHING
+ //#define HEATER_CHAMBER_PIN 44 // Chamber heater on/off pin
+ //#define HEATER_CHAMBER_INVERTING false
+#endif
+
+#if DISABLED(PIDTEMPBED)
+ #define BED_CHECK_INTERVAL 1000 // ms between checks in bang-bang control
+ #if ENABLED(BED_LIMIT_SWITCHING)
+ #define BED_HYSTERESIS 1 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
+ #endif
+#endif
+
+/**
+ * Thermal Protection provides additional protection to your printer from damage
+ * and fire. Marlin always includes safe min and max temperature ranges which
+ * protect against a broken or disconnected thermistor wire.
+ *
+ * The issue: If a thermistor falls out, it will report the much lower
+ * temperature of the air in the room, and the the firmware will keep
+ * the heater on.
+ *
+ * The solution: Once the temperature reaches the target, start observing.
+ * If the temperature stays too far below the target (hysteresis) for too
+ * long (period), the firmware will halt the machine as a safety precaution.
+ *
+ * If you get false positives for "Thermal Runaway", increase
+ * THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD
+ */
+#if ENABLED(THERMAL_PROTECTION_HOTENDS)
+ #define THERMAL_PROTECTION_PERIOD 40 // Seconds
+ #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius
+
+ //#define ADAPTIVE_FAN_SLOWING // Slow part cooling fan if temperature drops
+ #if BOTH(ADAPTIVE_FAN_SLOWING, PIDTEMP)
+ //#define NO_FAN_SLOWING_IN_PID_TUNING // Don't slow fan speed during M303
+ #endif
+
+ /**
+ * Whenever an M104, M109, or M303 increases the target temperature, the
+ * firmware will wait for the WATCH_TEMP_PERIOD to expire. If the temperature
+ * hasn't increased by WATCH_TEMP_INCREASE degrees, the machine is halted and
+ * requires a hard reset. This test restarts with any M104/M109/M303, but only
+ * if the current temperature is far enough below the target for a reliable
+ * test.
+ *
+ * If you get false positives for "Heating failed", increase WATCH_TEMP_PERIOD
+ * and/or decrease WATCH_TEMP_INCREASE. WATCH_TEMP_INCREASE should not be set
+ * below 2.
+ */
+ #define WATCH_TEMP_PERIOD 20 // Seconds
+ #define WATCH_TEMP_INCREASE 2 // Degrees Celsius
+#endif
+
+/**
+ * Thermal Protection parameters for the bed are just as above for hotends.
+ */
+#if ENABLED(THERMAL_PROTECTION_BED)
+ #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
+ #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
+
+ /**
+ * As described above, except for the bed (M140/M190/M303).
+ */
+ #define WATCH_BED_TEMP_PERIOD 60 // Seconds
+ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
+#endif
+
+/**
+ * Thermal Protection parameters for the heated chamber.
+ */
+#if ENABLED(THERMAL_PROTECTION_CHAMBER)
+ #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds
+ #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius
+
+ /**
+ * Heated chamber watch settings (M141/M191).
+ */
+ #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds
+ #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius
+#endif
+
+#if ENABLED(PIDTEMP)
+ // Add an experimental additional term to the heater power, proportional to the extrusion speed.
+ // A well-chosen Kc value should add just enough power to melt the increased material volume.
+ //#define PID_EXTRUSION_SCALING
+ #if ENABLED(PID_EXTRUSION_SCALING)
+ #define DEFAULT_Kc (100) //heating power=Kc*(e_speed)
+ #define LPQ_MAX_LEN 50
+ #endif
+#endif
+
+/**
+ * Automatic Temperature:
+ * The hotend target temperature is calculated by all the buffered lines of gcode.
+ * The maximum buffered steps/sec of the extruder motor is called "se".
+ * Start autotemp mode with M109 S B F
+ * The target temperature is set to mintemp+factor*se[steps/sec] and is limited by
+ * mintemp and maxtemp. Turn this off by executing M109 without F*
+ * Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp.
+ * On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode
+ */
+#define AUTOTEMP
+#if ENABLED(AUTOTEMP)
+ #define AUTOTEMP_OLDWEIGHT 0.98
+#endif
+
+// Show extra position information with 'M114 D'
+//#define M114_DETAIL
+
+// Show Temperature ADC value
+// Enable for M105 to include ADC values read from temperature sensors.
+//#define SHOW_TEMP_ADC_VALUES
+
+/**
+ * High Temperature Thermistor Support
+ *
+ * Thermistors able to support high temperature tend to have a hard time getting
+ * good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP
+ * will probably be caught when the heating element first turns on during the
+ * preheating process, which will trigger a min_temp_error as a safety measure
+ * and force stop everything.
+ * To circumvent this limitation, we allow for a preheat time (during which,
+ * min_temp_error won't be triggered) and add a min_temp buffer to handle
+ * aberrant readings.
+ *
+ * If you want to enable this feature for your hotend thermistor(s)
+ * uncomment and set values > 0 in the constants below
+ */
+
+// The number of consecutive low temperature errors that can occur
+// before a min_temp_error is triggered. (Shouldn't be more than 10.)
+//#define MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED 0
+
+// The number of milliseconds a hotend will preheat before starting to check
+// the temperature. This value should NOT be set to the time it takes the
+// hot end to reach the target temperature, but the time it takes to reach
+// the minimum temperature your thermistor can read. The lower the better/safer.
+// This shouldn't need to be more than 30 seconds (30000)
+//#define MILLISECONDS_PREHEAT_TIME 0
+
+// @section extruder
+
+// Extruder runout prevention.
+// If the machine is idle and the temperature over MINTEMP
+// then extrude some filament every couple of SECONDS.
+//#define EXTRUDER_RUNOUT_PREVENT
+#if ENABLED(EXTRUDER_RUNOUT_PREVENT)
+ #define EXTRUDER_RUNOUT_MINTEMP 190
+ #define EXTRUDER_RUNOUT_SECONDS 30
+ #define EXTRUDER_RUNOUT_SPEED 1500 // (mm/m)
+ #define EXTRUDER_RUNOUT_EXTRUDE 5 // (mm)
+#endif
+
+// @section temperature
+
+// Calibration for AD595 / AD8495 sensor to adjust temperature measurements.
+// The final temperature is calculated as (measuredTemp * GAIN) + OFFSET.
+#define TEMP_SENSOR_AD595_OFFSET 0.0
+#define TEMP_SENSOR_AD595_GAIN 1.0
+#define TEMP_SENSOR_AD8495_OFFSET 0.0
+#define TEMP_SENSOR_AD8495_GAIN 1.0
+
+/**
+ * Controller Fan
+ * To cool down the stepper drivers and MOSFETs.
+ *
+ * The fan will turn on automatically whenever any stepper is enabled
+ * and turn off after a set period after all steppers are turned off.
+ */
+#define USE_CONTROLLER_FAN
+#if ENABLED(USE_CONTROLLER_FAN)
+ #define CONTROLLER_FAN_PIN 2 // Set a custom pin for the controller fan
+ #define CONTROLLERFAN_SECS 60 // Duration in seconds for the fan to run after all motors are disabled
+ #define CONTROLLERFAN_SPEED 255 // 255 == full speed
+ //#define CONTROLLERFAN_SPEED_Z_ONLY 127 // Reduce noise on machines that keep Z enabled
+#endif
+
+// When first starting the main fan, run it at full speed for the
+// given number of milliseconds. This gets the fan spinning reliably
+// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
+//#define FAN_KICKSTART_TIME 100
+
+/**
+ * PWM Fan Scaling
+ *
+ * Define the min/max speeds for PWM fans (as set with M106).
+ *
+ * With these options the M106 0-255 value range is scaled to a subset
+ * to ensure that the fan has enough power to spin, or to run lower
+ * current fans with higher current. (e.g., 5V/12V fans with 12V/24V)
+ * Value 0 always turns off the fan.
+ *
+ * Define one or both of these to override the default 0-255 range.
+ */
+//#define FAN_MIN_PWM 50
+//#define FAN_MAX_PWM 128
+
+/**
+ * FAST PWM FAN Settings
+ *
+ * Use to change the FAST FAN PWM frequency (if enabled in Configuration.h)
+ * Combinations of PWM Modes, prescale values and TOP resolutions are used internally to produce a
+ * frequency as close as possible to the desired frequency.
+ *
+ * FAST_PWM_FAN_FREQUENCY [undefined by default]
+ * Set this to your desired frequency.
+ * If left undefined this defaults to F = F_CPU/(2*255*1)
+ * ie F = 31.4 Khz on 16 MHz microcontrollers or F = 39.2 KHz on 20 MHz microcontrollers
+ * These defaults are the same as with the old FAST_PWM_FAN implementation - no migration is required
+ * NOTE: Setting very low frequencies (< 10 Hz) may result in unexpected timer behavior.
+ *
+ * USE_OCR2A_AS_TOP [undefined by default]
+ * Boards that use TIMER2 for PWM have limitations resulting in only a few possible frequencies on TIMER2:
+ * 16MHz MCUs: [62.5KHz, 31.4KHz (default), 7.8KHz, 3.92KHz, 1.95KHz, 977Hz, 488Hz, 244Hz, 60Hz, 122Hz, 30Hz]
+ * 20MHz MCUs: [78.1KHz, 39.2KHz (default), 9.77KHz, 4.9KHz, 2.44KHz, 1.22KHz, 610Hz, 305Hz, 153Hz, 76Hz, 38Hz]
+ * A greater range can be achieved by enabling USE_OCR2A_AS_TOP. But note that this option blocks the use of
+ * PWM on pin OC2A. Only use this option if you don't need PWM on 0C2A. (Check your schematic.)
+ * USE_OCR2A_AS_TOP sacrifices duty cycle control resolution to achieve this broader range of frequencies.
+ */
+#if ENABLED(FAST_PWM_FAN)
+ //#define FAST_PWM_FAN_FREQUENCY 31400
+ //#define USE_OCR2A_AS_TOP
+#endif
+
+// @section extruder
+
+/**
+ * Extruder cooling fans
+ *
+ * Extruder auto fans automatically turn on when their extruders'
+ * temperatures go above EXTRUDER_AUTO_FAN_TEMPERATURE.
+ *
+ * Your board's pins file specifies the recommended pins. Override those here
+ * or set to -1 to disable completely.
+ *
+ * Multiple extruders can be assigned to the same pin in which case
+ * the fan will turn on when any selected extruder is above the threshold.
+ */
+#define E0_AUTO_FAN_PIN -1
+#define E1_AUTO_FAN_PIN -1
+#define E2_AUTO_FAN_PIN -1
+#define E3_AUTO_FAN_PIN -1
+#define E4_AUTO_FAN_PIN -1
+#define E5_AUTO_FAN_PIN -1
+#define CHAMBER_AUTO_FAN_PIN -1
+
+#define EXTRUDER_AUTO_FAN_TEMPERATURE 50
+#define EXTRUDER_AUTO_FAN_SPEED 255 // 255 == full speed
+#define CHAMBER_AUTO_FAN_TEMPERATURE 30
+#define CHAMBER_AUTO_FAN_SPEED 255
+
+/**
+ * Part-Cooling Fan Multiplexer
+ *
+ * This feature allows you to digitally multiplex the fan output.
+ * The multiplexer is automatically switched at tool-change.
+ * Set FANMUX[012]_PINs below for up to 2, 4, or 8 multiplexed fans.
+ */
+#define FANMUX0_PIN -1
+#define FANMUX1_PIN -1
+#define FANMUX2_PIN -1
+
+/**
+ * M355 Case Light on-off / brightness
+ */
+//#define CASE_LIGHT_ENABLE
+#if ENABLED(CASE_LIGHT_ENABLE)
+ //#define CASE_LIGHT_PIN 4 // Override the default pin if needed
+ #define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
+ #define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
+ #define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
+ //#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
+ //#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
+ //#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
+ #if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
+ #define CASE_LIGHT_NEOPIXEL_COLOR { 255, 255, 255, 255 } // { Red, Green, Blue, White }
+ #endif
+#endif
+
+// @section homing
+
+// If you want endstops to stay on (by default) even when not homing
+// enable this option. Override at any time with M120, M121.
+//#define ENDSTOPS_ALWAYS_ON_DEFAULT
+
+// @section extras
+
+//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
+
+// Employ an external closed loop controller. Override pins here if needed.
+//#define EXTERNAL_CLOSED_LOOP_CONTROLLER
+#if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER)
+ //#define CLOSED_LOOP_ENABLE_PIN -1
+ //#define CLOSED_LOOP_MOVE_COMPLETE_PIN -1
+#endif
+
+/**
+ * Dual Steppers / Dual Endstops
+ *
+ * This section will allow you to use extra E drivers to drive a second motor for X, Y, or Z axes.
+ *
+ * For example, set X_DUAL_STEPPER_DRIVERS setting to use a second motor. If the motors need to
+ * spin in opposite directions set INVERT_X2_VS_X_DIR. If the second motor needs its own endstop
+ * set X_DUAL_ENDSTOPS. This can adjust for "racking." Use X2_USE_ENDSTOP to set the endstop plug
+ * that should be used for the second endstop. Extra endstops will appear in the output of 'M119'.
+ *
+ * Use X_DUAL_ENDSTOP_ADJUSTMENT to adjust for mechanical imperfection. After homing both motors
+ * this offset is applied to the X2 motor. To find the offset home the X axis, and measure the error
+ * in X2. Dual endstop offsets can be set at runtime with 'M666 X Y Z'.
+ */
+
+//#define X_DUAL_STEPPER_DRIVERS
+#if ENABLED(X_DUAL_STEPPER_DRIVERS)
+ #define INVERT_X2_VS_X_DIR true // Set 'true' if X motors should rotate in opposite directions
+ //#define X_DUAL_ENDSTOPS
+ #if ENABLED(X_DUAL_ENDSTOPS)
+ #define X2_USE_ENDSTOP _XMAX_
+ #define X_DUAL_ENDSTOPS_ADJUSTMENT 0
+ #endif
+#endif
+
+//#define Y_DUAL_STEPPER_DRIVERS
+#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
+ #define INVERT_Y2_VS_Y_DIR true // Set 'true' if Y motors should rotate in opposite directions
+ //#define Y_DUAL_ENDSTOPS
+ #if ENABLED(Y_DUAL_ENDSTOPS)
+ #define Y2_USE_ENDSTOP _YMAX_
+ #define Y_DUAL_ENDSTOPS_ADJUSTMENT 0
+ #endif
+#endif
+
+//#define Z_DUAL_STEPPER_DRIVERS
+#if ENABLED(Z_DUAL_STEPPER_DRIVERS)
+ //#define Z_DUAL_ENDSTOPS
+ #if ENABLED(Z_DUAL_ENDSTOPS)
+ #define Z2_USE_ENDSTOP _XMAX_
+ #define Z_DUAL_ENDSTOPS_ADJUSTMENT 0
+ #endif
+#endif
+
+//#define Z_TRIPLE_STEPPER_DRIVERS
+#if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
+ //#define Z_TRIPLE_ENDSTOPS
+ #if ENABLED(Z_TRIPLE_ENDSTOPS)
+ #define Z2_USE_ENDSTOP _XMAX_
+ #define Z3_USE_ENDSTOP _YMAX_
+ #define Z_TRIPLE_ENDSTOPS_ADJUSTMENT2 0
+ #define Z_TRIPLE_ENDSTOPS_ADJUSTMENT3 0
+ #endif
+#endif
+
+/**
+ * Dual X Carriage
+ *
+ * This setup has two X carriages that can move independently, each with its own hotend.
+ * The carriages can be used to print an object with two colors or materials, or in
+ * "duplication mode" it can print two identical or X-mirrored objects simultaneously.
+ * The inactive carriage is parked automatically to prevent oozing.
+ * X1 is the left carriage, X2 the right. They park and home at opposite ends of the X axis.
+ * By default the X2 stepper is assigned to the first unused E plug on the board.
+ *
+ * The following Dual X Carriage modes can be selected with M605 S:
+ *
+ * 0 : (FULL_CONTROL) The slicer has full control over both X-carriages and can achieve optimal travel
+ * results as long as it supports dual X-carriages. (M605 S0)
+ *
+ * 1 : (AUTO_PARK) The firmware automatically parks and unparks the X-carriages on tool-change so
+ * that additional slicer support is not required. (M605 S1)
+ *
+ * 2 : (DUPLICATION) The firmware moves the second X-carriage and extruder in synchronization with
+ * the first X-carriage and extruder, to print 2 copies of the same object at the same time.
+ * Set the constant X-offset and temperature differential with M605 S2 X[offs] R[deg] and
+ * follow with M605 S2 to initiate duplicated movement.
+ *
+ * 3 : (MIRRORED) Formbot/Vivedino-inspired mirrored mode in which the second extruder duplicates
+ * the movement of the first except the second extruder is reversed in the X axis.
+ * Set the initial X offset and temperature differential with M605 S2 X[offs] R[deg] and
+ * follow with M605 S3 to initiate mirrored movement.
+ */
+//#define DUAL_X_CARRIAGE
+#if ENABLED(DUAL_X_CARRIAGE)
+ #define X1_MIN_POS X_MIN_POS // Set to X_MIN_POS
+ #define X1_MAX_POS X_BED_SIZE // Set a maximum so the first X-carriage can't hit the parked second X-carriage
+ #define X2_MIN_POS 80 // Set a minimum to ensure the second X-carriage can't hit the parked first X-carriage
+ #define X2_MAX_POS 353 // Set this to the distance between toolheads when both heads are homed
+ #define X2_HOME_DIR 1 // Set to 1. The second X-carriage always homes to the maximum endstop position
+ #define X2_HOME_POS X2_MAX_POS // Default X2 home position. Set to X2_MAX_POS.
+ // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software
+ // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops
+ // without modifying the firmware (through the "M218 T1 X???" command).
+ // Remember: you should set the second extruder x-offset to 0 in your slicer.
+
+ // This is the default power-up mode which can be later using M605.
+ #define DEFAULT_DUAL_X_CARRIAGE_MODE DXC_AUTO_PARK_MODE
+
+ // Default x offset in duplication mode (typically set to half print bed width)
+ #define DEFAULT_DUPLICATION_X_OFFSET 100
+
+#endif // DUAL_X_CARRIAGE
+
+// Activate a solenoid on the active extruder with M380. Disable all with M381.
+// Define SOL0_PIN, SOL1_PIN, etc., for each extruder that has a solenoid.
+//#define EXT_SOLENOID
+
+// @section homing
+
+// Homing hits each endstop, retracts by these distances, then does a slower bump.
+#define X_HOME_BUMP_MM 10
+#define Y_HOME_BUMP_MM 10
+#define Z_HOME_BUMP_MM 3
+#define HOMING_BUMP_DIVISOR { 2, 2, 4 } // Re-Bump Speed Divisor (Divides the Homing Feedrate)
+#define QUICK_HOME // If homing includes X and Y, do a diagonal move initially
+//#define HOMING_BACKOFF_MM { 2, 2, 2 } // (mm) Move away from the endstops after homing
+
+// When G28 is called, this option will make Y home before X
+//#define HOME_Y_BEFORE_X
+
+// Enable this if X or Y can't home without homing the other axis first.
+//#define CODEPENDENT_XY_HOMING
+
+#if ENABLED(BLTOUCH)
+ /**
+ * Either: Use the defaults (recommended) or: For special purposes, use the following DEFINES
+ * Do not activate settings that the probe might not understand. Clones might misunderstand
+ * advanced commands.
+ *
+ * Note: If the probe is not deploying, check a "Cmd: Reset" and "Cmd: Self-Test" and then
+ * check the wiring of the BROWN, RED and ORANGE wires.
+ *
+ * Note: If the trigger signal of your probe is not being recognized, it has been very often
+ * because the BLACK and WHITE wires needed to be swapped. They are not "interchangeable"
+ * like they would be with a real switch. So please check the wiring first.
+ *
+ * Settings for all BLTouch and clone probes:
+ */
+
+ // Safety: The probe needs time to recognize the command.
+ // Minimum command delay (ms). Enable and increase if needed.
+ //#define BLTOUCH_DELAY 500
+
+ /**
+ * Settings for BLTOUCH Classic 1.2, 1.3 or BLTouch Smart 1.0, 2.0, 2.2, 3.0, 3.1, and most clones:
+ */
+
+ // Feature: Switch into SW mode after a deploy. It makes the output pulse longer. Can be useful
+ // in special cases, like noisy or filtered input configurations.
+ //#define BLTOUCH_FORCE_SW_MODE
+
+ /**
+ * Settings for BLTouch Smart 3.0 and 3.1
+ * Summary:
+ * - Voltage modes: 5V and OD (open drain - "logic voltage free") output modes
+ * - High-Speed mode
+ * - Disable LCD voltage options
+ */
+
+ /**
+ * Danger: Don't activate 5V mode unless attached to a 5V-tolerant controller!
+ * V3.0 or 3.1: Set default mode to 5V mode at Marlin startup.
+ * If disabled, OD mode is the hard-coded default on 3.0
+ * On startup, Marlin will compare its eeprom to this vale. If the selected mode
+ * differs, a mode set eeprom write will be completed at initialization.
+ * Use the option below to force an eeprom write to a V3.1 probe regardless.
+ */
+ //#define BLTOUCH_SET_5V_MODE
+
+ /**
+ * Safety: Activate if connecting a probe with an unknown voltage mode.
+ * V3.0: Set a probe into mode selected above at Marlin startup. Required for 5V mode on 3.0
+ * V3.1: Force a probe with unknown mode into selected mode at Marlin startup ( = Probe EEPROM write )
+ * To preserve the life of the probe, use this once then turn it off and re-flash.
+ */
+ //#define BLTOUCH_FORCE_MODE_SET
+
+ /**
+ * Use "HIGH SPEED" mode for probing.
+ * Danger: Disable if your probe sometimes fails. Only suitable for stable well-adjusted systems.
+ * This feature was designed for Delta's with very fast Z moves however higher speed cartesians may function
+ * If the machine cannot raise the probe fast enough after a trigger, it may enter a fault state.
+ */
+ //#define BLTOUCH_HS_MODE
+
+ // Safety: Enable voltage mode settings in the LCD menu.
+ //#define BLTOUCH_LCD_VOLTAGE_MENU
+
+#endif // BLTOUCH
+
+/**
+ * Z Steppers Auto-Alignment
+ * Add the G34 command to align multiple Z steppers using a bed probe.
+ */
+//#define Z_STEPPER_AUTO_ALIGN
+#if ENABLED(Z_STEPPER_AUTO_ALIGN)
+ // Define probe X and Y positions for Z1, Z2 [, Z3]
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_ITERATIONS 3
+
+ // Enable to restore leveling setup after operation
+ #define RESTORE_LEVELING_AFTER_G34
+
+ // On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
+ #define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
+
+ // Stop criterion. If the accuracy is better than this stop iterating early
+ #define Z_STEPPER_ALIGN_ACC 0.02
+#endif
+
+// @section motion
+
+#define AXIS_RELATIVE_MODES { false, false, false, false }
+
+// Add a Duplicate option for well-separated conjoined nozzles
+//#define MULTI_NOZZLE_DUPLICATION
+
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
+#define INVERT_X_STEP_PIN false
+#define INVERT_Y_STEP_PIN false
+#define INVERT_Z_STEP_PIN false
+#define INVERT_E_STEP_PIN false
+
+// Default stepper release if idle. Set to 0 to deactivate.
+// Steppers will shut down DEFAULT_STEPPER_DEACTIVE_TIME seconds after the last move when DISABLE_INACTIVE_? is true.
+// Time can be set by M18 and M84.
+#define DEFAULT_STEPPER_DEACTIVE_TIME 120
+#define DISABLE_INACTIVE_X true
+#define DISABLE_INACTIVE_Y true
+#define DISABLE_INACTIVE_Z true // Set to false if the nozzle will fall down on your printed part when print has finished.
+#define DISABLE_INACTIVE_E true
+
+#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
+#define DEFAULT_MINTRAVELFEEDRATE 0.0
+
+//#define HOME_AFTER_DEACTIVATE // Require rehoming after steppers are deactivated
+
+// Minimum time that a segment needs to take if the buffer is emptied
+#define DEFAULT_MINSEGMENTTIME 20000 // (ms)
+
+// If defined the movements slow down when the look ahead buffer is only half full
+#define SLOWDOWN
+
+// Frequency limit
+// See nophead's blog for more info
+// Not working O
+//#define XY_FREQUENCY_LIMIT 15
+
+// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
+// of the buffer and all stops. This should not be much greater than zero and should only be changed
+// if unwanted behavior is observed on a user's machine when running at very slow speeds.
+#define MINIMUM_PLANNER_SPEED 0.05 // (mm/s)
+
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
+/**
+ * Automatic backlash, position and hotend offset calibration
+ *
+ * Enable G425 to run automatic calibration using an electrically-
+ * conductive cube, bolt, or washer mounted on the bed.
+ *
+ * G425 uses the probe to touch the top and sides of the calibration object
+ * on the bed and measures and/or correct positional offsets, axis backlash
+ * and hotend offsets.
+ *
+ * Note: HOTEND_OFFSET and CALIBRATION_OBJECT_CENTER must be set to within
+ * ±5mm of true values for G425 to succeed.
+ */
+//#define CALIBRATION_GCODE
+#if ENABLED(CALIBRATION_GCODE)
+
+ #define CALIBRATION_MEASUREMENT_RESOLUTION 0.01 // mm
+
+ #define CALIBRATION_FEEDRATE_SLOW 60 // mm/m
+ #define CALIBRATION_FEEDRATE_FAST 1200 // mm/m
+ #define CALIBRATION_FEEDRATE_TRAVEL 3000 // mm/m
+
+ // The following parameters refer to the conical section of the nozzle tip.
+ #define CALIBRATION_NOZZLE_TIP_HEIGHT 1.0 // mm
+ #define CALIBRATION_NOZZLE_OUTER_DIAMETER 2.0 // mm
+
+ // Uncomment to enable reporting (required for "G425 V", but consumes PROGMEM).
+ //#define CALIBRATION_REPORTING
+
+ // The true location and dimension the cube/bolt/washer on the bed.
+ #define CALIBRATION_OBJECT_CENTER { 264.0, -22.0, -2.0 } // mm
+ #define CALIBRATION_OBJECT_DIMENSIONS { 10.0, 10.0, 10.0 } // mm
+
+ // Comment out any sides which are unreachable by the probe. For best
+ // auto-calibration results, all sides must be reachable.
+ #define CALIBRATION_MEASURE_RIGHT
+ #define CALIBRATION_MEASURE_FRONT
+ #define CALIBRATION_MEASURE_LEFT
+ #define CALIBRATION_MEASURE_BACK
+
+ // Probing at the exact top center only works if the center is flat. If
+ // probing on a screwhead or hollow washer, probe near the edges.
+ //#define CALIBRATION_MEASURE_AT_TOP_EDGES
+
+ // Define pin which is read during calibration
+ #ifndef CALIBRATION_PIN
+ #define CALIBRATION_PIN -1 // Override in pins.h or set to -1 to use your Z endstop
+ #define CALIBRATION_PIN_INVERTING false // Set to true to invert the pin
+ //#define CALIBRATION_PIN_PULLDOWN
+ #define CALIBRATION_PIN_PULLUP
+ #endif
+#endif
+
+/**
+ * Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
+ * below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
+ * vibration and surface artifacts. The algorithm adapts to provide the best possible step smoothing at the
+ * lowest stepping frequencies.
+ */
+//#define ADAPTIVE_STEP_SMOOTHING
+
+/**
+ * Custom Microstepping
+ * Override as-needed for your setup. Up to 3 MS pins are supported.
+ */
+//#define MICROSTEP1 LOW,LOW,LOW
+//#define MICROSTEP2 HIGH,LOW,LOW
+//#define MICROSTEP4 LOW,HIGH,LOW
+//#define MICROSTEP8 HIGH,HIGH,LOW
+//#define MICROSTEP16 LOW,LOW,HIGH
+//#define MICROSTEP32 HIGH,LOW,HIGH
+
+// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU.
+#define MICROSTEP_MODES { 16, 16, 16, 16, 16, 16 } // [1,2,4,8,16]
+
+/**
+ * @section stepper motor current
+ *
+ * Some boards have a means of setting the stepper motor current via firmware.
+ *
+ * The power on motor currents are set by:
+ * PWM_MOTOR_CURRENT - used by MINIRAMBO & ULTIMAIN_2
+ * known compatible chips: A4982
+ * DIGIPOT_MOTOR_CURRENT - used by BQ_ZUM_MEGA_3D, RAMBO & SCOOVO_X9H
+ * known compatible chips: AD5206
+ * DAC_MOTOR_CURRENT_DEFAULT - used by PRINTRBOARD_REVF & RIGIDBOARD_V2
+ * known compatible chips: MCP4728
+ * DIGIPOT_I2C_MOTOR_CURRENTS - used by 5DPRINT, AZTEEG_X3_PRO, AZTEEG_X5_MINI_WIFI, MIGHTYBOARD_REVE
+ * known compatible chips: MCP4451, MCP4018
+ *
+ * Motor currents can also be set by M907 - M910 and by the LCD.
+ * M907 - applies to all.
+ * M908 - BQ_ZUM_MEGA_3D, RAMBO, PRINTRBOARD_REVF, RIGIDBOARD_V2 & SCOOVO_X9H
+ * M909, M910 & LCD - only PRINTRBOARD_REVF & RIGIDBOARD_V2
+ */
+//#define PWM_MOTOR_CURRENT { 1300, 1300, 1250 } // Values in milliamps
+//#define DIGIPOT_MOTOR_CURRENT { 135,135,135,135,135 } // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
+//#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
+
+// Use an I2C based DIGIPOT (e.g., Azteeg X3 Pro)
+//#define DIGIPOT_I2C
+#if ENABLED(DIGIPOT_I2C) && !defined(DIGIPOT_I2C_ADDRESS_A)
+ /**
+ * Common slave addresses:
+ *
+ * A (A shifted) B (B shifted) IC
+ * Smoothie 0x2C (0x58) 0x2D (0x5A) MCP4451
+ * AZTEEG_X3_PRO 0x2C (0x58) 0x2E (0x5C) MCP4451
+ * AZTEEG_X5_MINI 0x2C (0x58) 0x2E (0x5C) MCP4451
+ * AZTEEG_X5_MINI_WIFI 0x58 0x5C MCP4451
+ * MIGHTYBOARD_REVE 0x2F (0x5E) MCP4018
+ */
+ #define DIGIPOT_I2C_ADDRESS_A 0x2C // unshifted slave address for first DIGIPOT
+ #define DIGIPOT_I2C_ADDRESS_B 0x2D // unshifted slave address for second DIGIPOT
+#endif
+
+//#define DIGIPOT_MCP4018 // Requires library from https://github.com/stawel/SlowSoftI2CMaster
+#define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4 AZTEEG_X3_PRO: 8 MKS SBASE: 5
+// Actual motor currents in Amps. The number of entries must match DIGIPOT_I2C_NUM_CHANNELS.
+// These correspond to the physical drivers, so be mindful if the order is changed.
+#define DIGIPOT_I2C_MOTOR_CURRENTS { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 } // AZTEEG_X3_PRO
+
+//===========================================================================
+//=============================Additional Features===========================
+//===========================================================================
+
+// @section lcd
+
+#if EITHER(ULTIPANEL, EXTENSIBLE_UI)
+ #define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 60 } // Feedrates for manual moves along X, Y, Z, E from panel
+ #define SHORT_MANUAL_Z_MOVE 0.025 // (mm) Smallest manual Z move (< 0.1mm)
+ #if ENABLED(ULTIPANEL)
+ #define MANUAL_E_MOVES_RELATIVE // Display extruder move distance rather than "position"
+ #define ULTIPANEL_FEEDMULTIPLY // Encoder sets the feedrate multiplier on the Status Screen
+ #endif
+#endif
+
+// Change values more rapidly when the encoder is rotated faster
+#define ENCODER_RATE_MULTIPLIER
+#if ENABLED(ENCODER_RATE_MULTIPLIER)
+ #define ENCODER_10X_STEPS_PER_SEC 30 // (steps/s) Encoder rate for 10x speed
+ #define ENCODER_100X_STEPS_PER_SEC 80 // (steps/s) Encoder rate for 100x speed
+#endif
+
+// Play a beep when the feedrate is changed from the Status Screen
+//#define BEEP_ON_FEEDRATE_CHANGE
+#if ENABLED(BEEP_ON_FEEDRATE_CHANGE)
+ #define FEEDRATE_CHANGE_BEEP_DURATION 10
+ #define FEEDRATE_CHANGE_BEEP_FREQUENCY 440
+#endif
+
+#if HAS_LCD_MENU
+
+ // Include a page of printer information in the LCD Main Menu
+ //#define LCD_INFO_MENU
+ #if ENABLED(LCD_INFO_MENU)
+ //#define LCD_PRINTER_INFO_IS_BOOTSCREEN // Show bootscreen(s) instead of Printer Info pages
+ #endif
+
+ // BACK menu items keep the highlight at the top
+ //#define TURBO_BACK_MENU_ITEM
+
+ /**
+ * LED Control Menu
+ * Add LED Control to the LCD menu
+ */
+ //#define LED_CONTROL_MENU
+ #if ENABLED(LED_CONTROL_MENU)
+ #define LED_COLOR_PRESETS // Enable the Preset Color menu option
+ #if ENABLED(LED_COLOR_PRESETS)
+ #define LED_USER_PRESET_RED 255 // User defined RED value
+ #define LED_USER_PRESET_GREEN 128 // User defined GREEN value
+ #define LED_USER_PRESET_BLUE 0 // User defined BLUE value
+ #define LED_USER_PRESET_WHITE 255 // User defined WHITE value
+ #define LED_USER_PRESET_BRIGHTNESS 255 // User defined intensity
+ //#define LED_USER_PRESET_STARTUP // Have the printer display the user preset color on startup
+ #endif
+ #endif
+
+#endif // HAS_LCD_MENU
+
+// Scroll a longer status message into view
+//#define STATUS_MESSAGE_SCROLLING
+
+// On the Info Screen, display XY with one decimal place when possible
+//#define LCD_DECIMAL_SMALL_XY
+
+// The timeout (in ms) to return to the status screen from sub-menus
+//#define LCD_TIMEOUT_TO_STATUS 15000
+
+// Add an 'M73' G-code to set the current percentage
+//#define LCD_SET_PROGRESS_MANUALLY
+
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
+#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
+ //#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
+ #if ENABLED(LCD_PROGRESS_BAR)
+ #define PROGRESS_BAR_BAR_TIME 2000 // (ms) Amount of time to show the bar
+ #define PROGRESS_BAR_MSG_TIME 3000 // (ms) Amount of time to show the status message
+ #define PROGRESS_MSG_EXPIRE 0 // (ms) Amount of time to retain the status message (0=forever)
+ //#define PROGRESS_MSG_ONCE // Show the message for MSG_TIME then clear it
+ //#define LCD_PROGRESS_BAR_TEST // Add a menu item to test the progress bar
+ #endif
+#endif
+
+#if ENABLED(SDSUPPORT)
+
+ // Some RAMPS and other boards don't detect when an SD card is inserted. You can work
+ // around this by connecting a push button or single throw switch to the pin defined
+ // as SD_DETECT_PIN in your board's pins definitions.
+ // This setting should be disabled unless you are using a push button, pulling the pin to ground.
+ // Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
+ #define SD_DETECT_INVERTED
+
+ #define SD_FINISHED_STEPPERRELEASE true // Disable steppers when SD Print is finished
+ #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the Z enabled so your bed stays in place.
+
+ // Reverse SD sort to show "more recent" files first, according to the card's FAT.
+ // Since the FAT gets out of order with usage, SDCARD_SORT_ALPHA is recommended.
+ #define SDCARD_RATHERRECENTFIRST
+
+ #define SD_MENU_CONFIRM_START // Confirm the selected SD file before printing
+
+ //#define MENU_ADDAUTOSTART // Add a menu option to run auto#.g files
+
+ #define EVENT_GCODE_SD_STOP "G28XY" // G-code to run on Stop Print (e.g., "G28XY" or "G27")
+
+ /**
+ * Continue after Power-Loss (Creality3D)
+ *
+ * Store the current state to the SD Card at the start of each layer
+ * during SD printing. If the recovery file is found at boot time, present
+ * an option on the LCD screen to continue the print from the last-known
+ * point in the file.
+ */
+ //#define POWER_LOSS_RECOVERY
+ #if ENABLED(POWER_LOSS_RECOVERY)
+ //#define POWER_LOSS_PIN 44 // Pin to detect power loss
+ //#define POWER_LOSS_STATE HIGH // State of pin indicating power loss
+ //#define POWER_LOSS_PULL // Set pullup / pulldown as appropriate
+ //#define POWER_LOSS_PURGE_LEN 20 // (mm) Length of filament to purge on resume
+ //#define POWER_LOSS_RETRACT_LEN 10 // (mm) Length of filament to retract on fail. Requires backup power.
+
+ // Without a POWER_LOSS_PIN the following option helps reduce wear on the SD card,
+ // especially with "vase mode" printing. Set too high and vases cannot be continued.
+ #define POWER_LOSS_MIN_Z_CHANGE 0.05 // (mm) Minimum Z change before saving power-loss data
+ #endif
+
+ /**
+ * Sort SD file listings in alphabetical order.
+ *
+ * With this option enabled, items on SD cards will be sorted
+ * by name for easier navigation.
+ *
+ * By default...
+ *
+ * - Use the slowest -but safest- method for sorting.
+ * - Folders are sorted to the top.
+ * - The sort key is statically allocated.
+ * - No added G-code (M34) support.
+ * - 40 item sorting limit. (Items after the first 40 are unsorted.)
+ *
+ * SD sorting uses static allocation (as set by SDSORT_LIMIT), allowing the
+ * compiler to calculate the worst-case usage and throw an error if the SRAM
+ * limit is exceeded.
+ *
+ * - SDSORT_USES_RAM provides faster sorting via a static directory buffer.
+ * - SDSORT_USES_STACK does the same, but uses a local stack-based buffer.
+ * - SDSORT_CACHE_NAMES will retain the sorted file listing in RAM. (Expensive!)
+ * - SDSORT_DYNAMIC_RAM only uses RAM when the SD menu is visible. (Use with caution!)
+ */
+ //#define SDCARD_SORT_ALPHA
+
+ // SD Card Sorting options
+ #if ENABLED(SDCARD_SORT_ALPHA)
+ #define SDSORT_LIMIT 40 // Maximum number of sorted items (10-256). Costs 27 bytes each.
+ #define FOLDER_SORTING -1 // -1=above 0=none 1=below
+ #define SDSORT_GCODE false // Allow turning sorting on/off with LCD and M34 g-code.
+ #define SDSORT_USES_RAM false // Pre-allocate a static array for faster pre-sorting.
+ #define SDSORT_USES_STACK false // Prefer the stack for pre-sorting to give back some SRAM. (Negated by next 2 options.)
+ #define SDSORT_CACHE_NAMES false // Keep sorted items in RAM longer for speedy performance. Most expensive option.
+ #define SDSORT_DYNAMIC_RAM false // Use dynamic allocation (within SD menus). Least expensive option. Set SDSORT_LIMIT before use!
+ #define SDSORT_CACHE_VFATS 2 // Maximum number of 13-byte VFAT entries to use for sorting.
+ // Note: Only affects SCROLL_LONG_FILENAMES with SDSORT_CACHE_NAMES but not SDSORT_DYNAMIC_RAM.
+ #endif
+
+ // This allows hosts to request long names for files and folders with M33
+ //#define LONG_FILENAME_HOST_SUPPORT
+
+ // Enable this option to scroll long filenames in the SD card menu
+ //#define SCROLL_LONG_FILENAMES
+
+ // Leave the heaters on after Stop Print (not recommended!)
+ //#define SD_ABORT_NO_COOLDOWN
+
+ /**
+ * This option allows you to abort SD printing when any endstop is triggered.
+ * This feature must be enabled with "M540 S1" or from the LCD menu.
+ * To have any effect, endstops must be enabled during SD printing.
+ */
+ //#define SD_ABORT_ON_ENDSTOP_HIT
+
+ /**
+ * This option makes it easier to print the same SD Card file again.
+ * On print completion the LCD Menu will open with the file selected.
+ * You can just click to start the print, or navigate elsewhere.
+ */
+ //#define SD_REPRINT_LAST_SELECTED_FILE
+
+ /**
+ * Auto-report SdCard status with M27 S
+ */
+ //#define AUTO_REPORT_SD_STATUS
+
+ /**
+ * Support for USB thumb drives using an Arduino USB Host Shield or
+ * equivalent MAX3421E breakout board. The USB thumb drive will appear
+ * to Marlin as an SD card.
+ *
+ * The MAX3421E can be assigned the same pins as the SD card reader, with
+ * the following pin mapping:
+ *
+ * SCLK, MOSI, MISO --> SCLK, MOSI, MISO
+ * INT --> SD_DETECT_PIN [1]
+ * SS --> SDSS
+ *
+ * [1] On AVR an interrupt-capable pin is best for UHS3 compatibility.
+ */
+ //#define USB_FLASH_DRIVE_SUPPORT
+ #if ENABLED(USB_FLASH_DRIVE_SUPPORT)
+ #define USB_CS_PIN SDSS
+ #define USB_INTR_PIN SD_DETECT_PIN
+
+ /**
+ * USB Host Shield Library
+ *
+ * - UHS2 uses no interrupts and has been production-tested
+ * on a LulzBot TAZ Pro with a 32-bit Archim board.
+ *
+ * - UHS3 is newer code with better USB compatibility. But it
+ * is less tested and is known to interfere with Servos.
+ * [1] This requires USB_INTR_PIN to be interrupt-capable.
+ */
+ //#define USE_UHS3_USB
+ #endif
+
+ /**
+ * When using a bootloader that supports SD-Firmware-Flashing,
+ * add a menu item to activate SD-FW-Update on the next reboot.
+ *
+ * Requires ATMEGA2560 (Arduino Mega)
+ *
+ * Tested with this bootloader:
+ * https://github.com/FleetProbe/MicroBridge-Arduino-ATMega2560
+ */
+ //#define SD_FIRMWARE_UPDATE
+ #if ENABLED(SD_FIRMWARE_UPDATE)
+ #define SD_FIRMWARE_UPDATE_EEPROM_ADDR 0x1FF
+ #define SD_FIRMWARE_UPDATE_ACTIVE_VALUE 0xF0
+ #define SD_FIRMWARE_UPDATE_INACTIVE_VALUE 0xFF
+ #endif
+
+ // Add an optimized binary file transfer mode, initiated with 'M28 B1'
+ //#define BINARY_FILE_TRANSFER
+
+ #if HAS_SDCARD_CONNECTION
+ /**
+ * Set this option to one of the following (or the board's defaults apply):
+ *
+ * LCD - Use the SD drive in the external LCD controller.
+ * ONBOARD - Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.)
+ * CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file).
+ *
+ * :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ]
+ */
+ //#define SDCARD_CONNECTION LCD
+ #endif
+
+#endif // SDSUPPORT
+
+/**
+ * By default an onboard SD card reader may be shared as a USB mass-
+ * storage device. This option hides the SD card from the host PC.
+ */
+//#define NO_SD_HOST_DRIVE // Disable SD Card access over USB (for security).
+
+/**
+ * Additional options for Graphical Displays
+ *
+ * Use the optimizations here to improve printing performance,
+ * which can be adversely affected by graphical display drawing,
+ * especially when doing several short moves, and when printing
+ * on DELTA and SCARA machines.
+ *
+ * Some of these options may result in the display lagging behind
+ * controller events, as there is a trade-off between reliable
+ * printing performance versus fast display updates.
+ */
+#if HAS_GRAPHICAL_LCD
+ // Show SD percentage next to the progress bar
+ //#define DOGM_SD_PERCENT
+
+ // Enable to save many cycles by drawing a hollow frame on the Info Screen
+ #define XYZ_HOLLOW_FRAME
+
+ // Enable to save many cycles by drawing a hollow frame on Menu Screens
+ #define MENU_HOLLOW_FRAME
+
+ // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
+ // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
+ //#define USE_BIG_EDIT_FONT
+
+ // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
+ // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
+ //#define USE_SMALL_INFOFONT
+
+ // Enable this option and reduce the value to optimize screen updates.
+ // The normal delay is 10µs. Use the lowest value that still gives a reliable display.
+ //#define DOGM_SPI_DELAY_US 5
+
+ // Swap the CW/CCW indicators in the graphics overlay
+ //#define OVERLAY_GFX_REVERSE
+
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
+ #if ENABLED(U8GLIB_ST7920)
+ //#define LIGHTWEIGHT_UI
+ #if ENABLED(LIGHTWEIGHT_UI)
+ #define STATUS_EXPIRE_SECONDS 20
+ #endif
+ #endif
+
+ /**
+ * Status (Info) Screen customizations
+ * These options may affect code size and screen render time.
+ * Custom status screens can forcibly override these settings.
+ */
+ //#define STATUS_COMBINE_HEATERS // Use combined heater images instead of separate ones
+ //#define STATUS_HOTEND_NUMBERLESS // Use plain hotend icons instead of numbered ones (with 2+ hotends)
+ #define STATUS_HOTEND_INVERTED // Show solid nozzle bitmaps when heating (Requires STATUS_HOTEND_ANIM)
+ #define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
+ #define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
+ #define STATUS_CHAMBER_ANIM // Use a second bitmap to indicate chamber heating
+ //#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
+ //#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
+ //#define STATUS_HEAT_PERCENT // Show heating in a progress bar
+ //#define BOOT_MARLIN_LOGO_SMALL // Show a smaller Marlin logo on the Boot Screen (saving 399 bytes of flash)
+ //#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~3260 (or ~940) bytes of PROGMEM.
+
+ // Frivolous Game Options
+ //#define MARLIN_BRICKOUT
+ //#define MARLIN_INVADERS
+ //#define MARLIN_SNAKE
+ //#define GAMES_EASTER_EGG // Add extra blank lines above the "Games" sub-menu
+
+#endif // HAS_GRAPHICAL_LCD
+
+//
+// Lulzbot Touch UI
+//
+#if ENABLED(LULZBOT_TOUCH_UI)
+ // Display board used
+ //#define LCD_FTDI_VM800B35A // FTDI 3.5" with FT800 (320x240)
+ //#define LCD_4DSYSTEMS_4DLCD_FT843 // 4D Systems 4.3" (480x272)
+ //#define LCD_HAOYU_FT800CB // Haoyu with 4.3" or 5" (480x272)
+ //#define LCD_HAOYU_FT810CB // Haoyu with 5" (800x480)
+ //#define LCD_ALEPHOBJECTS_CLCD_UI // Aleph Objects Color LCD UI
+
+ // Correct the resolution if not using the stock TFT panel.
+ //#define TOUCH_UI_320x240
+ //#define TOUCH_UI_480x272
+ //#define TOUCH_UI_800x480
+
+ // Mappings for boards with a standard RepRapDiscount Display connector
+ //#define AO_EXP1_PINMAP // AlephObjects CLCD UI EXP1 mapping
+ //#define AO_EXP2_PINMAP // AlephObjects CLCD UI EXP2 mapping
+ //#define CR10_TFT_PINMAP // Rudolph Riedel's CR10 pin mapping
+ //#define OTHER_PIN_LAYOUT // Define pins manually below
+ #if ENABLED(OTHER_PIN_LAYOUT)
+ // The pins for CS and MOD_RESET (PD) must be chosen.
+ #define CLCD_MOD_RESET 9
+ #define CLCD_SPI_CS 10
+
+ // If using software SPI, specify pins for SCLK, MOSI, MISO
+ //#define CLCD_USE_SOFT_SPI
+ #if ENABLED(CLCD_USE_SOFT_SPI)
+ #define CLCD_SOFT_SPI_MOSI 11
+ #define CLCD_SOFT_SPI_MISO 12
+ #define CLCD_SOFT_SPI_SCLK 13
+ #endif
+ #endif
+
+ // Display Orientation. An inverted (i.e. upside-down) display
+ // is supported on the FT800. The FT810 and beyond also support
+ // portrait and mirrored orientations.
+ //#define TOUCH_UI_INVERTED
+ //#define TOUCH_UI_PORTRAIT
+ //#define TOUCH_UI_MIRRORED
+
+ // UTF8 processing and rendering.
+ // Unsupported characters are shown as '?'.
+ //#define TOUCH_UI_USE_UTF8
+ #if ENABLED(TOUCH_UI_USE_UTF8)
+ // Western accents support. These accented characters use
+ // combined bitmaps and require relatively little storage.
+ #define TOUCH_UI_UTF8_WESTERN_CHARSET
+ #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET)
+ // Additional character groups. These characters require
+ // full bitmaps and take up considerable storage:
+ //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³
+ //#define TOUCH_UI_UTF8_COPYRIGHT // © ®
+ //#define TOUCH_UI_UTF8_GERMANIC // ß
+ //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ
+ //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡
+ //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥
+ //#define TOUCH_UI_UTF8_ORDINALS // º ª
+ //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷
+ //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾
+ //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬
+ #endif
+ #endif
+
+ // Use a smaller font when labels don't fit buttons
+ #define TOUCH_UI_FIT_TEXT
+
+ // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE)
+ //#define LCD_LANGUAGE_1 en
+ //#define LCD_LANGUAGE_2 fr
+ //#define LCD_LANGUAGE_3 de
+ //#define LCD_LANGUAGE_4 es
+ //#define LCD_LANGUAGE_5 it
+
+ // Use a numeric passcode for "Screen lock" keypad.
+ // (recommended for smaller displays)
+ //#define TOUCH_UI_PASSCODE
+
+ // Output extra debug info for Touch UI events
+ //#define TOUCH_UI_DEBUG
+#endif
+
+//
+// FSMC Graphical TFT
+//
+#if ENABLED(FSMC_GRAPHICAL_TFT)
+ //#define TFT_MARLINUI_COLOR 0xFFFF // White
+ //#define TFT_MARLINBG_COLOR 0x0000 // Black
+ //#define TFT_DISABLED_COLOR 0x0003 // Almost black
+ //#define TFT_BTCANCEL_COLOR 0xF800 // Red
+ //#define TFT_BTARROWS_COLOR 0xDEE6 // 11011 110111 00110 Yellow
+ //#define TFT_BTOKMENU_COLOR 0x145F // 00010 100010 11111 Cyan
+#endif
+
+// @section safety
+
+/**
+ * The watchdog hardware timer will do a reset and disable all outputs
+ * if the firmware gets too overloaded to read the temperature sensors.
+ *
+ * If you find that watchdog reboot causes your AVR board to hang forever,
+ * enable WATCHDOG_RESET_MANUAL to use a custom timer instead of WDTO.
+ * NOTE: This method is less reliable as it can only catch hangups while
+ * interrupts are enabled.
+ */
+#define USE_WATCHDOG
+#if ENABLED(USE_WATCHDOG)
+ //#define WATCHDOG_RESET_MANUAL
+#endif
+
+// @section lcd
+
+/**
+ * Babystepping enables movement of the axes by tiny increments without changing
+ * the current position values. This feature is used primarily to adjust the Z
+ * axis in the first layer of a print in real-time.
+ *
+ * Warning: Does not respect endstops!
+ */
+//#define BABYSTEPPING
+#if ENABLED(BABYSTEPPING)
+ //#define BABYSTEP_WITHOUT_HOMING
+ //#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
+ #define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
+
+ //#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
+ #if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
+ #define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds.
+ // Note: Extra time may be added to mitigate controller latency.
+ //#define BABYSTEP_ALWAYS_AVAILABLE // Allow babystepping at all times (not just during movement).
+ //#define MOVE_Z_WHEN_IDLE // Jump to the move Z menu on doubleclick when printer is idle.
+ #if ENABLED(MOVE_Z_WHEN_IDLE)
+ #define MOVE_Z_IDLE_MULTIPLICATOR 1 // Multiply 1mm by this factor for the move step size.
+ #endif
+ #endif
+
+ //#define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28
+
+ //#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping
+ #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
+ //#define BABYSTEP_HOTEND_Z_OFFSET // For multiple hotends, babystep relative Z offsets
+ //#define BABYSTEP_ZPROBE_GFX_OVERLAY // Enable graphical overlay on Z-offset editor
+ #endif
+#endif
+
+// @section extruder
+
+/**
+ * Linear Pressure Control v1.5
+ *
+ * Assumption: advance [steps] = k * (delta velocity [steps/s])
+ * K=0 means advance disabled.
+ *
+ * NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
+ *
+ * Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
+ * Larger K values will be needed for flexible filament and greater distances.
+ * If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
+ * print acceleration will be reduced during the affected moves to keep within the limit.
+ *
+ * See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
+ * Mention @Sebastianv650 on GitHub to alert the author of any issues.
+ */
+//#define LIN_ADVANCE
+#if ENABLED(LIN_ADVANCE)
+ //#define EXTRA_LIN_ADVANCE_K // Enable for second linear advance constants
+ #define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
+ //#define LA_DEBUG // If enabled, this will generate debug information output over USB.
+#endif
+
+// @section leveling
+
+/**
+ * Points to probe for all 3-point Leveling procedures.
+ * Override if the automatically selected points are inadequate.
+ */
+#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL)
+ //#define PROBE_PT_1_X 15
+ //#define PROBE_PT_1_Y 180
+ //#define PROBE_PT_2_X 15
+ //#define PROBE_PT_2_Y 20
+ //#define PROBE_PT_3_X 170
+ //#define PROBE_PT_3_Y 20
+#endif
+
+/**
+ * Override MIN_PROBE_EDGE for each side of the build plate
+ * Useful to get probe points to exact positions on targets or
+ * to allow leveling to avoid plate clamps on only specific
+ * sides of the bed.
+ *
+ * If you are replacing the prior *_PROBE_BED_POSITION options,
+ * LEFT and FRONT values in most cases will map directly over
+ * RIGHT and REAR would be the inverse such as
+ * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION)
+ *
+ * This will allow all positions to match at compilation, however
+ * should the probe position be modified with M851XY then the
+ * probe points will follow. This prevents any change from causing
+ * the probe to be unable to reach any points.
+ */
+#if PROBE_SELECTED && !IS_KINEMATIC
+ //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE
+ //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE
+ //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE
+ //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE
+#endif
+
+#if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL)
+ // Override the mesh area if the automatic (max) area is too large
+ //#define MESH_MIN_X MESH_INSET
+ //#define MESH_MIN_Y MESH_INSET
+ //#define MESH_MAX_X X_BED_SIZE - (MESH_INSET)
+ //#define MESH_MAX_Y Y_BED_SIZE - (MESH_INSET)
+#endif
+
+/**
+ * Repeatedly attempt G29 leveling until it succeeds.
+ * Stop after G29_MAX_RETRIES attempts.
+ */
+//#define G29_RETRY_AND_RECOVER
+#if ENABLED(G29_RETRY_AND_RECOVER)
+ #define G29_MAX_RETRIES 3
+ #define G29_HALT_ON_FAILURE
+ /**
+ * Specify the GCODE commands that will be executed when leveling succeeds,
+ * between attempts, and after the maximum number of retries have been tried.
+ */
+ #define G29_SUCCESS_COMMANDS "M117 Bed leveling done."
+ #define G29_RECOVER_COMMANDS "M117 Probe failed. Rewiping.\nG28\nG12 P0 S12 T0"
+ #define G29_FAILURE_COMMANDS "M117 Bed leveling failed.\nG0 Z10\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nG4 S1"
+
+#endif
+
+// @section extras
+
+//
+// G2/G3 Arc Support
+//
+#define ARC_SUPPORT // Disable this feature to save ~3226 bytes
+#if ENABLED(ARC_SUPPORT)
+ #define MM_PER_ARC_SEGMENT 1 // Length of each arc segment
+ #define MIN_ARC_SEGMENTS 24 // Minimum number of segments in a complete circle
+ #define N_ARC_CORRECTION 25 // Number of interpolated segments between corrections
+ //#define ARC_P_CIRCLES // Enable the 'P' parameter to specify complete circles
+ //#define CNC_WORKSPACE_PLANES // Allow G2/G3 to operate in XY, ZX, or YZ planes
+#endif
+
+// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.
+//#define BEZIER_CURVE_SUPPORT
+
+/**
+ * G38 Probe Target
+ *
+ * This option adds G38.2 and G38.3 (probe towards target)
+ * and optionally G38.4 and G38.5 (probe away from target).
+ * Set MULTIPLE_PROBING for G38 to probe more than once.
+ */
+//#define G38_PROBE_TARGET
+#if ENABLED(G38_PROBE_TARGET)
+ //#define G38_PROBE_AWAY // Include G38.4 and G38.5 to probe away from target
+ #define G38_MINIMUM_MOVE 0.0275 // (mm) Minimum distance that will produce a move.
+#endif
+
+// Moves (or segments) with fewer steps than this will be joined with the next move
+#define MIN_STEPS_PER_SEGMENT 6
+
+/**
+ * Minimum delay before and after setting the stepper DIR (in ns)
+ * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire)
+ * 20 : Minimum for TMC2xxx drivers
+ * 200 : Minimum for A4988 drivers
+ * 400 : Minimum for A5984 drivers
+ * 500 : Minimum for LV8729 drivers (guess, no info in datasheet)
+ * 650 : Minimum for DRV8825 drivers
+ * 1500 : Minimum for TB6600 drivers (guess, no info in datasheet)
+ * 15000 : Minimum for TB6560 drivers (guess, no info in datasheet)
+ *
+ * Override the default value based on the driver type set in Configuration.h.
+ */
+//#define MINIMUM_STEPPER_POST_DIR_DELAY 650
+//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650
+
+/**
+ * Minimum stepper driver pulse width (in µs)
+ * 0 : Smallest possible width the MCU can produce, compatible with TMC2xxx drivers
+ * 0 : Minimum 500ns for LV8729, adjusted in stepper.h
+ * 1 : Minimum for A4988 and A5984 stepper drivers
+ * 2 : Minimum for DRV8825 stepper drivers
+ * 3 : Minimum for TB6600 stepper drivers
+ * 30 : Minimum for TB6560 stepper drivers
+ *
+ * Override the default value based on the driver type set in Configuration.h.
+ */
+//#define MINIMUM_STEPPER_PULSE 2
+
+/**
+ * Maximum stepping rate (in Hz) the stepper driver allows
+ * If undefined, defaults to 1MHz / (2 * MINIMUM_STEPPER_PULSE)
+ * 500000 : Maximum for A4988 stepper driver
+ * 400000 : Maximum for TMC2xxx stepper drivers
+ * 250000 : Maximum for DRV8825 stepper driver
+ * 200000 : Maximum for LV8729 stepper driver
+ * 150000 : Maximum for TB6600 stepper driver
+ * 15000 : Maximum for TB6560 stepper driver
+ *
+ * Override the default value based on the driver type set in Configuration.h.
+ */
+//#define MAXIMUM_STEPPER_RATE 250000
+
+// @section temperature
+
+// Control heater 0 and heater 1 in parallel.
+//#define HEATERS_PARALLEL
+
+//===========================================================================
+//================================= Buffers =================================
+//===========================================================================
+
+// @section hidden
+
+// The number of linear motions that can be in the plan at any give time.
+// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2 (e.g. 8, 16, 32) because shifts and ors are used to do the ring-buffering.
+#if ENABLED(SDSUPPORT)
+ #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
+#else
+ #define BLOCK_BUFFER_SIZE 16 // maximize block buffer
+#endif
+
+// @section serial
+
+// The ASCII buffer for serial input
+#define MAX_CMD_SIZE 96
+#define BUFSIZE 26
+
+// Transmission to Host Buffer Size
+// To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0.
+// To buffer a simple "ok" you need 4 bytes.
+// For ADVANCED_OK (M105) you need 32 bytes.
+// For debug-echo: 128 bytes for the optimal speed.
+// Other output doesn't need to be that speedy.
+// :[0, 2, 4, 8, 16, 32, 64, 128, 256]
+#define TX_BUFFER_SIZE 0
+
+// Host Receive Buffer Size
+// Without XON/XOFF flow control (see SERIAL_XON_XOFF below) 32 bytes should be enough.
+// To use flow control, set this buffer size to at least 1024 bytes.
+// :[0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048]
+//#define RX_BUFFER_SIZE 1024
+
+#if RX_BUFFER_SIZE >= 1024
+ // Enable to have the controller send XON/XOFF control characters to
+ // the host to signal the RX buffer is becoming full.
+ //#define SERIAL_XON_XOFF
+#endif
+
+// Add M575 G-code to change the baud rate
+//#define BAUD_RATE_GCODE
+
+#if ENABLED(SDSUPPORT)
+ // Enable this option to collect and display the maximum
+ // RX queue usage after transferring a file to SD.
+ //#define SERIAL_STATS_MAX_RX_QUEUED
+
+ // Enable this option to collect and display the number
+ // of dropped bytes after a file transfer to SD.
+ //#define SERIAL_STATS_DROPPED_RX
+#endif
+
+// Enable an emergency-command parser to intercept certain commands as they
+// enter the serial receive buffer, so they cannot be blocked.
+// Currently handles M108, M112, M410
+// Does not work on boards using AT90USB (USBCON) processors!
+//#define EMERGENCY_PARSER
+
+// Bad Serial-connections can miss a received command by sending an 'ok'
+// Therefore some clients abort after 30 seconds in a timeout.
+// Some other clients start sending commands while receiving a 'wait'.
+// This "wait" is only sent when the buffer is empty. 1 second is a good value here.
+//#define NO_TIMEOUTS 1000 // Milliseconds
+
+// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary.
+//#define ADVANCED_OK
+
+// Printrun may have trouble receiving long strings all at once.
+// This option inserts short delays between lines of serial output.
+#define SERIAL_OVERRUN_PROTECTION
+
+// @section extras
+
+/**
+ * Extra Fan Speed
+ * Adds a secondary fan speed for each print-cooling fan.
+ * 'M106 P T3-255' : Set a secondary speed for
+ * 'M106 P T2' : Use the set secondary speed
+ * 'M106 P T1' : Restore the previous fan speed
+ */
+//#define EXTRA_FAN_SPEED
+
+/**
+ * Firmware-based and LCD-controlled retract
+ *
+ * Add G10 / G11 commands for automatic firmware-based retract / recover.
+ * Use M207 and M208 to define parameters for retract / recover.
+ *
+ * Use M209 to enable or disable auto-retract.
+ * With auto-retract enabled, all G1 E moves within the set range
+ * will be converted to firmware-based retract/recover moves.
+ *
+ * Be sure to turn off auto-retract during filament change.
+ *
+ * Note that M207 / M208 / M209 settings are saved to EEPROM.
+ *
+ */
+//#define FWRETRACT
+#if ENABLED(FWRETRACT)
+ #define FWRETRACT_AUTORETRACT // Override slicer retractions
+ #if ENABLED(FWRETRACT_AUTORETRACT)
+ #define MIN_AUTORETRACT 0.1 // (mm) Don't convert E moves under this length
+ #define MAX_AUTORETRACT 10.0 // (mm) Don't convert E moves over this length
+ #endif
+ #define RETRACT_LENGTH 3 // (mm) Default retract length (positive value)
+ #define RETRACT_LENGTH_SWAP 13 // (mm) Default swap retract length (positive value)
+ #define RETRACT_FEEDRATE 45 // (mm/s) Default feedrate for retracting
+ #define RETRACT_ZRAISE 0 // (mm) Default retract Z-raise
+ #define RETRACT_RECOVER_LENGTH 0 // (mm) Default additional recover length (added to retract length on recover)
+ #define RETRACT_RECOVER_LENGTH_SWAP 0 // (mm) Default additional swap recover length (added to retract length on recover from toolchange)
+ #define RETRACT_RECOVER_FEEDRATE 8 // (mm/s) Default feedrate for recovering from retraction
+ #define RETRACT_RECOVER_FEEDRATE_SWAP 8 // (mm/s) Default feedrate for recovering from swap retraction
+ #if ENABLED(MIXING_EXTRUDER)
+ //#define RETRACT_SYNC_MIXING // Retract and restore all mixing steppers simultaneously
+ #endif
+#endif
+
+/**
+ * Universal tool change settings.
+ * Applies to all types of extruders except where explicitly noted.
+ */
+#if EXTRUDERS > 1
+ // Z raise distance for tool-change, as needed for some extruders
+ #define TOOLCHANGE_ZRAISE 2 // (mm)
+ //#define TOOLCHANGE_NO_RETURN // Never return to the previous position on tool-change
+
+ // Retract and prime filament on tool-change
+ //#define TOOLCHANGE_FILAMENT_SWAP
+ #if ENABLED(TOOLCHANGE_FILAMENT_SWAP)
+ #define TOOLCHANGE_FIL_SWAP_LENGTH 12 // (mm)
+ #define TOOLCHANGE_FIL_EXTRA_PRIME 2 // (mm)
+ #define TOOLCHANGE_FIL_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ #define TOOLCHANGE_FIL_SWAP_PRIME_SPEED 3600 // (mm/m)
+ #endif
+
+ /**
+ * Position to park head during tool change.
+ * Doesn't apply to SWITCHING_TOOLHEAD, DUAL_X_CARRIAGE, or PARKING_EXTRUDER
+ */
+ //#define TOOLCHANGE_PARK
+ #if ENABLED(TOOLCHANGE_PARK)
+ #define TOOLCHANGE_PARK_XY { X_MIN_POS + 10, Y_MIN_POS + 10 }
+ #define TOOLCHANGE_PARK_XY_FEEDRATE 6000 // (mm/m)
+ #endif
+#endif
+
+/**
+ * Advanced Pause
+ * Experimental feature for filament change support and for parking the nozzle when paused.
+ * Adds the GCode M600 for initiating filament change.
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
+ *
+ * Requires an LCD display.
+ * Requires NOZZLE_PARK_FEATURE.
+ * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
+ */
+//#define ADVANCED_PAUSE_FEATURE
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
+ #define PAUSE_PARK_RETRACT_FEEDRATE 60 // (mm/s) Initial retract feedrate.
+ #define PAUSE_PARK_RETRACT_LENGTH 5 // (mm) Initial retract.
+ // This short retract is done immediately, before parking the nozzle.
+ #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // (mm/s) Unload filament feedrate. This can be pretty fast.
+ #define FILAMENT_CHANGE_UNLOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate.
+ #define FILAMENT_CHANGE_UNLOAD_LENGTH 600 // (mm) The length of filament for a complete unload.
+ // For Bowden, the full length of the tube and nozzle.
+ // For direct drive, the full length of the nozzle.
+ // Set to 0 for manual unloading.
+ #define FILAMENT_CHANGE_SLOW_LOAD_FEEDRATE 6 // (mm/s) Slow move when starting load.
+ #define FILAMENT_CHANGE_SLOW_LOAD_LENGTH 0 // (mm) Slow length, to allow time to insert material.
+ // 0 to disable start loading and skip to fast load only
+ #define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE 6 // (mm/s) Load filament feedrate. This can be pretty fast.
+ #define FILAMENT_CHANGE_FAST_LOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate.
+ #define FILAMENT_CHANGE_FAST_LOAD_LENGTH 0 // (mm) Load length of filament, from extruder gear to nozzle.
+ // For Bowden, the full length of the tube and nozzle.
+ // For direct drive, the full length of the nozzle.
+ //#define ADVANCED_PAUSE_CONTINUOUS_PURGE // Purge continuously up to the purge length until interrupted.
+ #define ADVANCED_PAUSE_PURGE_FEEDRATE 3 // (mm/s) Extrude feedrate (after loading). Should be slower than load feedrate.
+ #define ADVANCED_PAUSE_PURGE_LENGTH 100 // (mm) Length to extrude after loading.
+ // Set to 0 for manual extrusion.
+ // Filament can be extruded repeatedly from the Filament Change menu
+ // until extrusion is consistent, and to purge old filament.
+ #define ADVANCED_PAUSE_RESUME_PRIME 0 // (mm) Extra distance to prime nozzle after returning from park.
+ //#define ADVANCED_PAUSE_FANS_PAUSE // Turn off print-cooling fans while the machine is paused.
+
+ // Filament Unload does a Retract, Delay, and Purge first:
+ #define FILAMENT_UNLOAD_RETRACT_LENGTH 13 // (mm) Unload initial retract length.
+ #define FILAMENT_UNLOAD_DELAY 5000 // (ms) Delay for the filament to cool after retract.
+ #define FILAMENT_UNLOAD_PURGE_LENGTH 8 // (mm) An unretract is done, then this length is purged.
+
+ #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety.
+ #define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed.
+ #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change.
+
+ //#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
+ //#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change
+
+ //#define FILAMENT_LOAD_UNLOAD_GCODES // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu.
+ //#define FILAMENT_UNLOAD_ALL_EXTRUDERS // Allow M702 to unload all extruders above a minimum target temp (as set by M302)
+#endif
+
+// @section tmc
+
+/**
+ * TMC26X Stepper Driver options
+ *
+ * The TMC26XStepper library is required for this stepper driver.
+ * https://github.com/trinamic/TMC26XStepper
+ */
+#if HAS_DRIVER(TMC26X)
+
+ #if AXIS_DRIVER_TYPE_X(TMC26X)
+ #define X_MAX_CURRENT 1000 // (mA)
+ #define X_SENSE_RESISTOR 91 // (mOhms)
+ #define X_MICROSTEPS 16 // Number of microsteps
+ #endif
+
+ #if AXIS_DRIVER_TYPE_X2(TMC26X)
+ #define X2_MAX_CURRENT 1000
+ #define X2_SENSE_RESISTOR 91
+ #define X2_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Y(TMC26X)
+ #define Y_MAX_CURRENT 1000
+ #define Y_SENSE_RESISTOR 91
+ #define Y_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Y2(TMC26X)
+ #define Y2_MAX_CURRENT 1000
+ #define Y2_SENSE_RESISTOR 91
+ #define Y2_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z(TMC26X)
+ #define Z_MAX_CURRENT 1000
+ #define Z_SENSE_RESISTOR 91
+ #define Z_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z2(TMC26X)
+ #define Z2_MAX_CURRENT 1000
+ #define Z2_SENSE_RESISTOR 91
+ #define Z2_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z3(TMC26X)
+ #define Z3_MAX_CURRENT 1000
+ #define Z3_SENSE_RESISTOR 91
+ #define Z3_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E0(TMC26X)
+ #define E0_MAX_CURRENT 1000
+ #define E0_SENSE_RESISTOR 91
+ #define E0_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E1(TMC26X)
+ #define E1_MAX_CURRENT 1000
+ #define E1_SENSE_RESISTOR 91
+ #define E1_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E2(TMC26X)
+ #define E2_MAX_CURRENT 1000
+ #define E2_SENSE_RESISTOR 91
+ #define E2_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E3(TMC26X)
+ #define E3_MAX_CURRENT 1000
+ #define E3_SENSE_RESISTOR 91
+ #define E3_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E4(TMC26X)
+ #define E4_MAX_CURRENT 1000
+ #define E4_SENSE_RESISTOR 91
+ #define E4_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E5(TMC26X)
+ #define E5_MAX_CURRENT 1000
+ #define E5_SENSE_RESISTOR 91
+ #define E5_MICROSTEPS 16
+ #endif
+
+#endif // TMC26X
+
+// @section tmc_smart
+
+/**
+ * To use TMC2130, TMC2160, TMC2660, TMC5130, TMC5160 stepper drivers in SPI mode
+ * connect your SPI pins to the hardware SPI interface on your board and define
+ * the required CS pins in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3
+ * pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
+ * You may also use software SPI if you wish to use general purpose IO pins.
+ *
+ * To use TMC2208 stepper UART-configurable stepper drivers connect #_SERIAL_TX_PIN
+ * to the driver side PDN_UART pin with a 1K resistor.
+ * To use the reading capabilities, also connect #_SERIAL_RX_PIN to PDN_UART without
+ * a resistor.
+ * The drivers can also be used with hardware serial.
+ *
+ * TMCStepper library is required to use TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
+ */
+#if HAS_TRINAMIC
+
+ #define HOLD_MULTIPLIER 0.5 // Scales down the holding current from run current
+ #define INTERPOLATE true // Interpolate X/Y/Z_MICROSTEPS to 256
+
+ #if AXIS_IS_TMC(X)
+ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current.
+ #define X_MICROSTEPS 16 // 0..256
+ #define X_RSENSE 0.11
+ #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ...
+ #endif
+
+ #if AXIS_IS_TMC(X2)
+ #define X2_CURRENT 800
+ #define X2_MICROSTEPS 16
+ #define X2_RSENSE 0.11
+ #define X2_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(Y)
+ #define Y_CURRENT 800
+ #define Y_MICROSTEPS 16
+ #define Y_RSENSE 0.11
+ #define Y_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(Y2)
+ #define Y2_CURRENT 800
+ #define Y2_MICROSTEPS 16
+ #define Y2_RSENSE 0.11
+ #define Y2_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(Z)
+ #define Z_CURRENT 800
+ #define Z_MICROSTEPS 16
+ #define Z_RSENSE 0.11
+ #define Z_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(Z2)
+ #define Z2_CURRENT 800
+ #define Z2_MICROSTEPS 16
+ #define Z2_RSENSE 0.11
+ #define Z2_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(Z3)
+ #define Z3_CURRENT 800
+ #define Z3_MICROSTEPS 16
+ #define Z3_RSENSE 0.11
+ #define Z3_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(E0)
+ #define E0_CURRENT 800
+ #define E0_MICROSTEPS 16
+ #define E0_RSENSE 0.11
+ #define E0_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(E1)
+ #define E1_CURRENT 800
+ #define E1_MICROSTEPS 16
+ #define E1_RSENSE 0.11
+ #define E1_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(E2)
+ #define E2_CURRENT 800
+ #define E2_MICROSTEPS 16
+ #define E2_RSENSE 0.11
+ #define E2_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(E3)
+ #define E3_CURRENT 800
+ #define E3_MICROSTEPS 16
+ #define E3_RSENSE 0.11
+ #define E3_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(E4)
+ #define E4_CURRENT 800
+ #define E4_MICROSTEPS 16
+ #define E4_RSENSE 0.11
+ #define E4_CHAIN_POS -1
+ #endif
+
+ #if AXIS_IS_TMC(E5)
+ #define E5_CURRENT 800
+ #define E5_MICROSTEPS 16
+ #define E5_RSENSE 0.11
+ #define E5_CHAIN_POS -1
+ #endif
+
+ /**
+ * Override default SPI pins for TMC2130, TMC2160, TMC2660, TMC5130 and TMC5160 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
+ /**
+ * Software option for SPI driven drivers (TMC2130, TMC2160, TMC2660, TMC5130 and TMC5160).
+ * The default SW SPI pins are defined the respective pins files,
+ * but you can override or define them here.
+ */
+ //#define TMC_USE_SW_SPI
+ //#define TMC_SW_MOSI -1
+ //#define TMC_SW_MISO -1
+ //#define TMC_SW_SCK -1
+
+ /**
+ * Four TMC2209 drivers can use the same HW/SW serial port with hardware configured addresses.
+ * Set the address using jumpers on pins MS1 and MS2.
+ * Address | MS1 | MS2
+ * 0 | LOW | LOW
+ * 1 | HIGH | LOW
+ * 2 | LOW | HIGH
+ * 3 | HIGH | HIGH
+ *
+ * Set *_SERIAL_TX_PIN and *_SERIAL_RX_PIN to match for all drivers
+ * on the same serial port, either here or in your board's pins file.
+ */
+ #define X_SLAVE_ADDRESS 0
+ #define Y_SLAVE_ADDRESS 0
+ #define Z_SLAVE_ADDRESS 0
+ #define X2_SLAVE_ADDRESS 0
+ #define Y2_SLAVE_ADDRESS 0
+ #define Z2_SLAVE_ADDRESS 0
+ #define Z3_SLAVE_ADDRESS 0
+ #define E0_SLAVE_ADDRESS 0
+ #define E1_SLAVE_ADDRESS 0
+ #define E2_SLAVE_ADDRESS 0
+ #define E3_SLAVE_ADDRESS 0
+ #define E4_SLAVE_ADDRESS 0
+ #define E5_SLAVE_ADDRESS 0
+
+ /**
+ * Software enable
+ *
+ * Use for drivers that do not use a dedicated enable pin, but rather handle the same
+ * function through a communication line such as SPI or UART.
+ */
+ //#define SOFTWARE_DRIVER_ENABLE
+
+ /**
+ * TMC2130, TMC2160, TMC2208, TMC2209, TMC5130 and TMC5160 only
+ * Use Trinamic's ultra quiet stepping mode.
+ * When disabled, Marlin will use spreadCycle stepping mode.
+ */
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Optimize spreadCycle chopper parameters by using predefined parameter sets
+ * or with the help of an example included in the library.
+ * Provided parameter sets are
+ * CHOPPER_DEFAULT_12V
+ * CHOPPER_DEFAULT_19V
+ * CHOPPER_DEFAULT_24V
+ * CHOPPER_DEFAULT_36V
+ * CHOPPER_PRUSAMK3_24V // Imported parameters from the official Prusa firmware for MK3 (24V)
+ * CHOPPER_MARLIN_119 // Old defaults from Marlin v1.1.9
+ *
+ * Define you own with
+ * { , , hysteresis_start[1..8] }
+ */
+ #define CHOPPER_TIMING CHOPPER_DEFAULT_12V
+
+ /**
+ * Monitor Trinamic drivers for error conditions,
+ * like overtemperature and short to ground.
+ * In the case of overtemperature Marlin can decrease the driver current until error condition clears.
+ * Other detected conditions can be used to stop the current print.
+ * Relevant g-codes:
+ * M906 - Set or get motor current in milliamps using axis codes X, Y, Z, E. Report values if no axis codes given.
+ * M911 - Report stepper driver overtemperature pre-warn condition.
+ * M912 - Clear stepper driver overtemperature pre-warn condition flag.
+ * M122 - Report driver parameters (Requires TMC_DEBUG)
+ */
+ //#define MONITOR_DRIVER_STATUS
+
+ #if ENABLED(MONITOR_DRIVER_STATUS)
+ #define CURRENT_STEP_DOWN 50 // [mA]
+ #define REPORT_CURRENT_CHANGE
+ #define STOP_ON_ERROR
+ #endif
+
+ /**
+ * TMC2130, TMC2160, TMC2208, TMC2209, TMC5130 and TMC5160 only
+ * The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
+ * This mode allows for faster movements at the expense of higher noise levels.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
+ * M913 X/Y/Z/E to live tune the setting
+ */
+ //#define HYBRID_THRESHOLD
+
+ #define X_HYBRID_THRESHOLD 100 // [mm/s]
+ #define X2_HYBRID_THRESHOLD 100
+ #define Y_HYBRID_THRESHOLD 100
+ #define Y2_HYBRID_THRESHOLD 100
+ #define Z_HYBRID_THRESHOLD 3
+ #define Z2_HYBRID_THRESHOLD 3
+ #define Z3_HYBRID_THRESHOLD 3
+ #define E0_HYBRID_THRESHOLD 30
+ #define E1_HYBRID_THRESHOLD 30
+ #define E2_HYBRID_THRESHOLD 30
+ #define E3_HYBRID_THRESHOLD 30
+ #define E4_HYBRID_THRESHOLD 30
+ #define E5_HYBRID_THRESHOLD 30
+
+ /**
+ * Use StallGuard2 to home / probe X, Y, Z.
+ *
+ * TMC2130, TMC2160, TMC2209, TMC2660, TMC5130, and TMC5160 only
+ * Connect the stepper driver's DIAG1 pin to the X/Y endstop pin.
+ * X, Y, and Z homing will always be done in spreadCycle mode.
+ *
+ * X/Y/Z_STALL_SENSITIVITY is the default stall threshold.
+ * Use M914 X Y Z to set the stall threshold at runtime:
+ *
+ * Sensitivity TMC2209 Others
+ * HIGHEST 255 -64 (Too sensitive => False positive)
+ * LOWEST 0 63 (Too insensitive => No trigger)
+ *
+ * It is recommended to set [XYZ]_HOME_BUMP_MM to 0.
+ *
+ * SPI_ENDSTOPS *** Beta feature! *** TMC2130 Only ***
+ * Poll the driver through SPI to determine load when homing.
+ * Removes the need for a wire from DIAG1 to an endstop pin.
+ *
+ * IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
+ * homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
+ */
+ //#define SENSORLESS_HOMING // StallGuard capable drivers only
+
+ /**
+ * Use StallGuard2 to probe the bed with the nozzle.
+ *
+ * CAUTION: This could cause damage to machines that use a lead screw or threaded rod
+ * to move the Z axis. Take extreme care when attempting to enable this feature.
+ */
+ //#define SENSORLESS_PROBING // StallGuard capable drivers only
+
+ #if EITHER(SENSORLESS_HOMING, SENSORLESS_PROBING)
+ // TMC2209: 0...255. TMC2130: -64...63
+ #define X_STALL_SENSITIVITY 8
+ #define X2_STALL_SENSITIVITY X_STALL_SENSITIVITY
+ #define Y_STALL_SENSITIVITY 8
+ //#define Z_STALL_SENSITIVITY 8
+ //#define SPI_ENDSTOPS // TMC2130 only
+ //#define IMPROVE_HOMING_RELIABILITY
+ #endif
+
+ /**
+ * Beta feature!
+ * Create a 50/50 square wave step pulse optimal for stepper drivers.
+ */
+ //#define SQUARE_WAVE_STEPPING
+
+ /**
+ * Enable M122 debugging command for TMC stepper drivers.
+ * M122 S0/1 will enable continous reporting.
+ */
+ //#define TMC_DEBUG
+
+ /**
+ * You can set your own advanced settings by filling in predefined functions.
+ * A list of available functions can be found on the library github page
+ * https://github.com/teemuatlut/TMCStepper
+ *
+ * Example:
+ * #define TMC_ADV() { \
+ * stepperX.diag0_temp_prewarn(1); \
+ * stepperY.interpolate(0); \
+ * }
+ */
+ #define TMC_ADV() { }
+
+#endif // HAS_TRINAMIC
+
+// @section L6470
+
+/**
+ * L6470 Stepper Driver options
+ *
+ * Arduino-L6470 library (0.7.0 or higher) is required for this stepper driver.
+ * https://github.com/ameyer/Arduino-L6470
+ *
+ * Requires the following to be defined in your pins_YOUR_BOARD file
+ * L6470_CHAIN_SCK_PIN
+ * L6470_CHAIN_MISO_PIN
+ * L6470_CHAIN_MOSI_PIN
+ * L6470_CHAIN_SS_PIN
+ * L6470_RESET_CHAIN_PIN (optional)
+ */
+#if HAS_DRIVER(L6470)
+
+ //#define L6470_CHITCHAT // Display additional status info
+
+ #if AXIS_DRIVER_TYPE_X(L6470)
+ #define X_MICROSTEPS 128 // Number of microsteps (VALID: 1, 2, 4, 8, 16, 32, 128)
+ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down)
+ #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down)
+ #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper
+ #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI)
+ #endif
+
+ #if AXIS_DRIVER_TYPE_X2(L6470)
+ #define X2_MICROSTEPS 128
+ #define X2_OVERCURRENT 2000
+ #define X2_STALLCURRENT 1500
+ #define X2_MAX_VOLTAGE 127
+ #define X2_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Y(L6470)
+ #define Y_MICROSTEPS 128
+ #define Y_OVERCURRENT 2000
+ #define Y_STALLCURRENT 1500
+ #define Y_MAX_VOLTAGE 127
+ #define Y_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Y2(L6470)
+ #define Y2_MICROSTEPS 128
+ #define Y2_OVERCURRENT 2000
+ #define Y2_STALLCURRENT 1500
+ #define Y2_MAX_VOLTAGE 127
+ #define Y2_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z(L6470)
+ #define Z_MICROSTEPS 128
+ #define Z_OVERCURRENT 2000
+ #define Z_STALLCURRENT 1500
+ #define Z_MAX_VOLTAGE 127
+ #define Z_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z2(L6470)
+ #define Z2_MICROSTEPS 128
+ #define Z2_OVERCURRENT 2000
+ #define Z2_STALLCURRENT 1500
+ #define Z2_MAX_VOLTAGE 127
+ #define Z2_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z3(L6470)
+ #define Z3_MICROSTEPS 128
+ #define Z3_OVERCURRENT 2000
+ #define Z3_STALLCURRENT 1500
+ #define Z3_MAX_VOLTAGE 127
+ #define Z3_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E0(L6470)
+ #define E0_MICROSTEPS 128
+ #define E0_OVERCURRENT 2000
+ #define E0_STALLCURRENT 1500
+ #define E0_MAX_VOLTAGE 127
+ #define E0_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E1(L6470)
+ #define E1_MICROSTEPS 128
+ #define E1_OVERCURRENT 2000
+ #define E1_STALLCURRENT 1500
+ #define E1_MAX_VOLTAGE 127
+ #define E1_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E2(L6470)
+ #define E2_MICROSTEPS 128
+ #define E2_OVERCURRENT 2000
+ #define E2_STALLCURRENT 1500
+ #define E2_MAX_VOLTAGE 127
+ #define E2_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E3(L6470)
+ #define E3_MICROSTEPS 128
+ #define E3_OVERCURRENT 2000
+ #define E3_STALLCURRENT 1500
+ #define E3_MAX_VOLTAGE 127
+ #define E3_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E4(L6470)
+ #define E4_MICROSTEPS 128
+ #define E4_OVERCURRENT 2000
+ #define E4_STALLCURRENT 1500
+ #define E4_MAX_VOLTAGE 127
+ #define E4_CHAIN_POS -1
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E5(L6470)
+ #define E5_MICROSTEPS 128
+ #define E5_OVERCURRENT 2000
+ #define E5_STALLCURRENT 1500
+ #define E5_MAX_VOLTAGE 127
+ #define E5_CHAIN_POS -1
+ #endif
+
+ /**
+ * Monitor L6470 drivers for error conditions like over temperature and over current.
+ * In the case of over temperature Marlin can decrease the drive until the error condition clears.
+ * Other detected conditions can be used to stop the current print.
+ * Relevant g-codes:
+ * M906 - I1/2/3/4/5 Set or get motor drive level using axis codes X, Y, Z, E. Report values if no axis codes given.
+ * I not present or I0 or I1 - X, Y, Z or E0
+ * I2 - X2, Y2, Z2 or E1
+ * I3 - Z3 or E3
+ * I4 - E4
+ * I5 - E5
+ * M916 - Increase drive level until get thermal warning
+ * M917 - Find minimum current thresholds
+ * M918 - Increase speed until max or error
+ * M122 S0/1 - Report driver parameters
+ */
+ //#define MONITOR_L6470_DRIVER_STATUS
+
+ #if ENABLED(MONITOR_L6470_DRIVER_STATUS)
+ #define KVAL_HOLD_STEP_DOWN 1
+ //#define L6470_STOP_ON_ERROR
+ #endif
+
+#endif // L6470
+
+/**
+ * TWI/I2C BUS
+ *
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
+ * machines. Enabling this will allow you to send and receive I2C data from slave
+ * devices on the bus.
+ *
+ * ; Example #1
+ * ; This macro send the string "Marlin" to the slave device with address 0x63 (99)
+ * ; It uses multiple M260 commands with one B arg
+ * M260 A99 ; Target slave address
+ * M260 B77 ; M
+ * M260 B97 ; a
+ * M260 B114 ; r
+ * M260 B108 ; l
+ * M260 B105 ; i
+ * M260 B110 ; n
+ * M260 S1 ; Send the current buffer
+ *
+ * ; Example #2
+ * ; Request 6 bytes from slave device with address 0x63 (99)
+ * M261 A99 B5
+ *
+ * ; Example #3
+ * ; Example serial output of a M261 request
+ * echo:i2c-reply: from:99 bytes:5 data:hello
+ */
+
+// @section i2cbus
+
+//#define EXPERIMENTAL_I2CBUS
+#define I2C_SLAVE_ADDRESS 0 // Set a value from 8 to 127 to act as a slave
+
+// @section extras
+
+/**
+ * Photo G-code
+ * Add the M240 G-code to take a photo.
+ * The photo can be triggered by a digital pin or a physical movement.
+ */
+//#define PHOTO_GCODE
+#if ENABLED(PHOTO_GCODE)
+ // A position to move to (and raise Z) before taking the photo
+ //#define PHOTO_POSITION { X_MAX_POS - 5, Y_MAX_POS, 0 } // { xpos, ypos, zraise } (M240 X Y Z)
+ //#define PHOTO_DELAY_MS 100 // (ms) Duration to pause before moving back (M240 P)
+ //#define PHOTO_RETRACT_MM 6.5 // (mm) E retract/recover for the photo move (M240 R S)
+
+ // Canon RC-1 or homebrew digital camera trigger
+ // Data from: http://www.doc-diy.net/photo/rc-1_hacked/
+ //#define PHOTOGRAPH_PIN 23
+
+ // Canon Hack Development Kit
+ // http://captain-slow.dk/2014/03/09/3d-printing-timelapses/
+ //#define CHDK_PIN 4
+
+ // Optional second move with delay to trigger the camera shutter
+ //#define PHOTO_SWITCH_POSITION { X_MAX_POS, Y_MAX_POS } // { xpos, ypos } (M240 I J)
+
+ // Duration to hold the switch or keep CHDK_PIN high
+ //#define PHOTO_SWITCH_MS 50 // (ms) (M240 D)
+#endif
+
+/**
+ * Spindle & Laser control
+ *
+ * Add the M3, M4, and M5 commands to turn the spindle/laser on and off, and
+ * to set spindle speed, spindle direction, and laser power.
+ *
+ * SuperPid is a router/spindle speed controller used in the CNC milling community.
+ * Marlin can be used to turn the spindle on and off. It can also be used to set
+ * the spindle speed from 5,000 to 30,000 RPM.
+ *
+ * You'll need to select a pin for the ON/OFF function and optionally choose a 0-5V
+ * hardware PWM pin for the speed control and a pin for the rotation direction.
+ *
+ * See http://marlinfw.org/docs/configuration/laser_spindle.html for more config details.
+ */
+//#define SPINDLE_FEATURE
+//#define LASER_FEATURE
+#if EITHER(SPINDLE_FEATURE, LASER_FEATURE)
+ #define SPINDLE_LASER_ACTIVE_HIGH false // Set to "true" if the on/off function is active HIGH
+ #define SPINDLE_LASER_PWM true // Set to "true" if your controller supports setting the speed/power
+ #define SPINDLE_LASER_PWM_INVERT true // Set to "true" if the speed/power goes up when you want it to go slower
+ #define SPINDLE_LASER_POWERUP_DELAY 5000 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 5000 // (ms) Delay to allow the spindle to stop
+
+ #if ENABLED(SPINDLE_FEATURE)
+ //#define SPINDLE_CHANGE_DIR // Enable if your spindle controller can change spindle direction
+ #define SPINDLE_CHANGE_DIR_STOP // Enable if the spindle should stop before changing spin direction
+ #define SPINDLE_INVERT_DIR false // Set to "true" if the spin direction is reversed
+
+ /**
+ * The M3 & M4 commands use the following equation to convert PWM duty cycle to speed/power
+ *
+ * SPEED/POWER = PWM duty cycle * SPEED_POWER_SLOPE + SPEED_POWER_INTERCEPT
+ * where PWM duty cycle varies from 0 to 255
+ *
+ * set the following for your controller (ALL MUST BE SET)
+ */
+ #define SPEED_POWER_SLOPE 118.4
+ #define SPEED_POWER_INTERCEPT 0
+ #define SPEED_POWER_MIN 5000
+ #define SPEED_POWER_MAX 30000 // SuperPID router controller 0 - 30,000 RPM
+ #else
+ #define SPEED_POWER_SLOPE 0.3922
+ #define SPEED_POWER_INTERCEPT 0
+ #define SPEED_POWER_MIN 10
+ #define SPEED_POWER_MAX 100 // 0-100%
+ #endif
+#endif
+
+/**
+ * Coolant Control
+ *
+ * Add the M7, M8, and M9 commands to turn mist or flood coolant on and off.
+ *
+ * Note: COOLANT_MIST_PIN and/or COOLANT_FLOOD_PIN must also be defined.
+ */
+//#define COOLANT_CONTROL
+#if ENABLED(COOLANT_CONTROL)
+ #define COOLANT_MIST // Enable if mist coolant is present
+ #define COOLANT_FLOOD // Enable if flood coolant is present
+ #define COOLANT_MIST_INVERT false // Set "true" if the on/off function is reversed
+ #define COOLANT_FLOOD_INVERT false // Set "true" if the on/off function is reversed
+#endif
+
+/**
+ * Filament Width Sensor
+ *
+ * Measures the filament width in real-time and adjusts
+ * flow rate to compensate for any irregularities.
+ *
+ * Also allows the measured filament diameter to set the
+ * extrusion rate, so the slicer only has to specify the
+ * volume.
+ *
+ * Only a single extruder is supported at this time.
+ *
+ * 34 RAMPS_14 : Analog input 5 on the AUX2 connector
+ * 81 PRINTRBOARD : Analog input 2 on the Exp1 connector (version B,C,D,E)
+ * 301 RAMBO : Analog input 3
+ *
+ * Note: May require analog pins to be defined for other boards.
+ */
+//#define FILAMENT_WIDTH_SENSOR
+
+#if ENABLED(FILAMENT_WIDTH_SENSOR)
+ #define FILAMENT_SENSOR_EXTRUDER_NUM 0 // Index of the extruder that has the filament sensor. :[0,1,2,3,4]
+ #define MEASUREMENT_DELAY_CM 14 // (cm) The distance from the filament sensor to the melting chamber
+
+ #define FILWIDTH_ERROR_MARGIN 1.0 // (mm) If a measurement differs too much from nominal width ignore it
+ #define MAX_MEASUREMENT_DELAY 20 // (bytes) Buffer size for stored measurements (1 byte per cm). Must be larger than MEASUREMENT_DELAY_CM.
+
+ #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA // Set measured to nominal initially
+
+ // Display filament width on the LCD status line. Status messages will expire after 5 seconds.
+ //#define FILAMENT_LCD_DISPLAY
+#endif
+
+/**
+ * CNC Coordinate Systems
+ *
+ * Enables G53 and G54-G59.3 commands to select coordinate systems
+ * and G92.1 to reset the workspace to native machine space.
+ */
+//#define CNC_COORDINATE_SYSTEMS
+
+/**
+ * Auto-report temperatures with M155 S
+ */
+#define AUTO_REPORT_TEMPERATURES
+
+/**
+ * Include capabilities in M115 output
+ */
+#define EXTENDED_CAPABILITIES_REPORT
+
+/**
+ * Expected Printer Check
+ * Add the M16 G-code to compare a string to the MACHINE_NAME.
+ * M16 with a non-matching string causes the printer to halt.
+ */
+//#define EXPECTED_PRINTER_CHECK
+
+/**
+ * Disable all Volumetric extrusion options
+ */
+//#define NO_VOLUMETRICS
+
+#if DISABLED(NO_VOLUMETRICS)
+ /**
+ * Volumetric extrusion default state
+ * Activate to make volumetric extrusion the default method,
+ * with DEFAULT_NOMINAL_FILAMENT_DIA as the default diameter.
+ *
+ * M200 D0 to disable, M200 Dn to set a new diameter.
+ */
+ //#define VOLUMETRIC_DEFAULT_ON
+#endif
+
+/**
+ * Enable this option for a leaner build of Marlin that removes all
+ * workspace offsets, simplifying coordinate transformations, leveling, etc.
+ *
+ * - M206 and M428 are disabled.
+ * - G92 will revert to its behavior from Marlin 1.0.
+ */
+//#define NO_WORKSPACE_OFFSETS
+
+/**
+ * Set the number of proportional font spaces required to fill up a typical character space.
+ * This can help to better align the output of commands like `G29 O` Mesh Output.
+ *
+ * For clients that use a fixed-width font (like OctoPrint), leave this set to 1.0.
+ * Otherwise, adjust according to your client and font.
+ */
+#define PROPORTIONAL_FONT_RATIO 1.0
+
+/**
+ * Spend 28 bytes of SRAM to optimize the GCode parser
+ */
+#define FASTER_GCODE_PARSER
+
+/**
+ * CNC G-code options
+ * Support CNC-style G-code dialects used by laser cutters, drawing machine cams, etc.
+ * Note that G0 feedrates should be used with care for 3D printing (if used at all).
+ * High feedrates may cause ringing and harm print quality.
+ */
+//#define PAREN_COMMENTS // Support for parentheses-delimited comments
+//#define GCODE_MOTION_MODES // Remember the motion mode (G0 G1 G2 G3 G5 G38.X) and apply for X Y Z E F, etc.
+
+// Enable and set a (default) feedrate for all G0 moves
+//#define G0_FEEDRATE 3000 // (mm/m)
+#ifdef G0_FEEDRATE
+ //#define VARIABLE_G0_FEEDRATE // The G0 feedrate is set by F in G0 motion mode
+#endif
+
+/**
+ * Startup commands
+ *
+ * Execute certain G-code commands immediately after power-on.
+ */
+//#define STARTUP_COMMANDS "M17 Z"
+
+/**
+ * G-code Macros
+ *
+ * Add G-codes M810-M819 to define and run G-code macros.
+ * Macros are not saved to EEPROM.
+ */
+//#define GCODE_MACROS
+#if ENABLED(GCODE_MACROS)
+ #define GCODE_MACROS_SLOTS 5 // Up to 10 may be used
+ #define GCODE_MACROS_SLOT_SIZE 50 // Maximum length of a single macro
+#endif
+
+/**
+ * User-defined menu items that execute custom GCode
+ */
+//#define CUSTOM_USER_MENUS
+#if ENABLED(CUSTOM_USER_MENUS)
+ //#define CUSTOM_USER_MENU_TITLE "Custom Commands"
+ #define USER_SCRIPT_DONE "M117 User Script Done"
+ #define USER_SCRIPT_AUDIBLE_FEEDBACK
+ //#define USER_SCRIPT_RETURN // Return to status screen after a script
+
+ #define USER_DESC_1 "Home & UBL Info"
+ #define USER_GCODE_1 "G28\nG29 W"
+
+ #define USER_DESC_2 "Preheat for " PREHEAT_1_LABEL
+ #define USER_GCODE_2 "M140 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND)
+
+ #define USER_DESC_3 "Preheat for " PREHEAT_2_LABEL
+ #define USER_GCODE_3 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND)
+
+ #define USER_DESC_4 "Heat Bed/Home/Level"
+ #define USER_GCODE_4 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nG28\nG29"
+
+ //#define USER_DESC_5 "Home & Info"
+ //#define USER_GCODE_5 "G28\nM503"
+#endif
+
+/**
+ * Host Action Commands
+ *
+ * Define host streamer action commands in compliance with the standard.
+ *
+ * See https://reprap.org/wiki/G-code#Action_commands
+ * Common commands ........ poweroff, pause, paused, resume, resumed, cancel
+ * G29_RETRY_AND_RECOVER .. probe_rewipe, probe_failed
+ *
+ * Some features add reason codes to extend these commands.
+ *
+ * Host Prompt Support enables Marlin to use the host for user prompts so
+ * filament runout and other processes can be managed from the host side.
+ */
+//#define HOST_ACTION_COMMANDS
+#if ENABLED(HOST_ACTION_COMMANDS)
+ //#define HOST_PROMPT_SUPPORT
+#endif
+
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
+/**
+ * I2C position encoders for closed loop control.
+ * Developed by Chris Barr at Aus3D.
+ *
+ * Wiki: http://wiki.aus3d.com.au/Magnetic_Encoder
+ * Github: https://github.com/Aus3D/MagneticEncoder
+ *
+ * Supplier: http://aus3d.com.au/magnetic-encoder-module
+ * Alternative Supplier: http://reliabuild3d.com/
+ *
+ * Reliabuild encoders have been modified to improve reliability.
+ */
+
+//#define I2C_POSITION_ENCODERS
+#if ENABLED(I2C_POSITION_ENCODERS)
+
+ #define I2CPE_ENCODER_CNT 1 // The number of encoders installed; max of 5
+ // encoders supported currently.
+
+ #define I2CPE_ENC_1_ADDR I2CPE_PRESET_ADDR_X // I2C address of the encoder. 30-200.
+ #define I2CPE_ENC_1_AXIS X_AXIS // Axis the encoder module is installed on. _AXIS.
+ #define I2CPE_ENC_1_TYPE I2CPE_ENC_TYPE_LINEAR // Type of encoder: I2CPE_ENC_TYPE_LINEAR -or-
+ // I2CPE_ENC_TYPE_ROTARY.
+ #define I2CPE_ENC_1_TICKS_UNIT 2048 // 1024 for magnetic strips with 2mm poles; 2048 for
+ // 1mm poles. For linear encoders this is ticks / mm,
+ // for rotary encoders this is ticks / revolution.
+ //#define I2CPE_ENC_1_TICKS_REV (16 * 200) // Only needed for rotary encoders; number of stepper
+ // steps per full revolution (motor steps/rev * microstepping)
+ //#define I2CPE_ENC_1_INVERT // Invert the direction of axis travel.
+ #define I2CPE_ENC_1_EC_METHOD I2CPE_ECM_MICROSTEP // Type of error error correction.
+ #define I2CPE_ENC_1_EC_THRESH 0.10 // Threshold size for error (in mm) above which the
+ // printer will attempt to correct the error; errors
+ // smaller than this are ignored to minimize effects of
+ // measurement noise / latency (filter).
+
+ #define I2CPE_ENC_2_ADDR I2CPE_PRESET_ADDR_Y // Same as above, but for encoder 2.
+ #define I2CPE_ENC_2_AXIS Y_AXIS
+ #define I2CPE_ENC_2_TYPE I2CPE_ENC_TYPE_LINEAR
+ #define I2CPE_ENC_2_TICKS_UNIT 2048
+ //#define I2CPE_ENC_2_TICKS_REV (16 * 200)
+ //#define I2CPE_ENC_2_INVERT
+ #define I2CPE_ENC_2_EC_METHOD I2CPE_ECM_MICROSTEP
+ #define I2CPE_ENC_2_EC_THRESH 0.10
+
+ #define I2CPE_ENC_3_ADDR I2CPE_PRESET_ADDR_Z // Encoder 3. Add additional configuration options
+ #define I2CPE_ENC_3_AXIS Z_AXIS // as above, or use defaults below.
+
+ #define I2CPE_ENC_4_ADDR I2CPE_PRESET_ADDR_E // Encoder 4.
+ #define I2CPE_ENC_4_AXIS E_AXIS
+
+ #define I2CPE_ENC_5_ADDR 34 // Encoder 5.
+ #define I2CPE_ENC_5_AXIS E_AXIS
+
+ // Default settings for encoders which are enabled, but without settings configured above.
+ #define I2CPE_DEF_TYPE I2CPE_ENC_TYPE_LINEAR
+ #define I2CPE_DEF_ENC_TICKS_UNIT 2048
+ #define I2CPE_DEF_TICKS_REV (16 * 200)
+ #define I2CPE_DEF_EC_METHOD I2CPE_ECM_NONE
+ #define I2CPE_DEF_EC_THRESH 0.1
+
+ //#define I2CPE_ERR_THRESH_ABORT 100.0 // Threshold size for error (in mm) error on any given
+ // axis after which the printer will abort. Comment out to
+ // disable abort behavior.
+
+ #define I2CPE_TIME_TRUSTED 10000 // After an encoder fault, there must be no further fault
+ // for this amount of time (in ms) before the encoder
+ // is trusted again.
+
+ /**
+ * Position is checked every time a new command is executed from the buffer but during long moves,
+ * this setting determines the minimum update time between checks. A value of 100 works well with
+ * error rolling average when attempting to correct only for skips and not for vibration.
+ */
+ #define I2CPE_MIN_UPD_TIME_MS 4 // (ms) Minimum time between encoder checks.
+
+ // Use a rolling average to identify persistant errors that indicate skips, as opposed to vibration and noise.
+ #define I2CPE_ERR_ROLLING_AVERAGE
+
+#endif // I2C_POSITION_ENCODERS
+
+/**
+ * Analog Joystick(s)
+ */
+//#define JOYSTICK
+#if ENABLED(JOYSTICK)
+ #define JOY_X_PIN 5 // RAMPS: Suggested pin A5 on AUX2
+ #define JOY_Y_PIN 10 // RAMPS: Suggested pin A10 on AUX2
+ #define JOY_Z_PIN 12 // RAMPS: Suggested pin A12 on AUX2
+ #define JOY_EN_PIN 44 // RAMPS: Suggested pin D44 on AUX2
+
+ // Use M119 to find reasonable values after connecting your hardware:
+ #define JOY_X_LIMITS { 5600, 8190-100, 8190+100, 10800 } // min, deadzone start, deadzone end, max
+ #define JOY_Y_LIMITS { 5600, 8250-100, 8250+100, 11000 }
+ #define JOY_Z_LIMITS { 4800, 8080-100, 8080+100, 11550 }
+#endif
+
+/**
+ * MAX7219 Debug Matrix
+ *
+ * Add support for a low-cost 8x8 LED Matrix based on the Max7219 chip as a realtime status display.
+ * Requires 3 signal wires. Some useful debug options are included to demonstrate its usage.
+ */
+//#define MAX7219_DEBUG
+#if ENABLED(MAX7219_DEBUG)
+ #define MAX7219_CLK_PIN 64
+ #define MAX7219_DIN_PIN 57
+ #define MAX7219_LOAD_PIN 44
+
+ //#define MAX7219_GCODE // Add the M7219 G-code to control the LED matrix
+ #define MAX7219_INIT_TEST 2 // Do a test pattern at initialization (Set to 2 for spiral)
+ #define MAX7219_NUMBER_UNITS 1 // Number of Max7219 units in chain.
+ #define MAX7219_ROTATE 0 // Rotate the display clockwise (in multiples of +/- 90°)
+ // connector at: right=0 bottom=-90 top=90 left=180
+ //#define MAX7219_REVERSE_ORDER // The individual LED matrix units may be in reversed order
+ //#define MAX7219_SIDE_BY_SIDE // Big chip+matrix boards can be chained side-by-side
+
+ /**
+ * Sample debug features
+ * If you add more debug displays, be careful to avoid conflicts!
+ */
+ #define MAX7219_DEBUG_PRINTER_ALIVE // Blink corner LED of 8x8 matrix to show that the firmware is functioning
+ #define MAX7219_DEBUG_PLANNER_HEAD 3 // Show the planner queue head position on this and the next LED matrix row
+ #define MAX7219_DEBUG_PLANNER_TAIL 5 // Show the planner queue tail position on this and the next LED matrix row
+
+ #define MAX7219_DEBUG_PLANNER_QUEUE 0 // Show the current planner queue depth on this and the next LED matrix row
+ // If you experience stuttering, reboots, etc. this option can reveal how
+ // tweaks made to the configuration are affecting the printer in real-time.
+#endif
+
+/**
+ * NanoDLP Sync support
+ *
+ * Add support for Synchronized Z moves when using with NanoDLP. G0/G1 axis moves will output "Z_move_comp"
+ * string to enable synchronization with DLP projector exposure. This change will allow to use
+ * [[WaitForDoneMessage]] instead of populating your gcode with M400 commands
+ */
+//#define NANODLP_Z_SYNC
+#if ENABLED(NANODLP_Z_SYNC)
+ //#define NANODLP_ALL_AXIS // Enables "Z_move_comp" output on any axis move.
+ // Default behavior is limited to Z axis only.
+#endif
+
+/**
+ * WiFi Support (Espressif ESP32 WiFi)
+ */
+//#define WIFISUPPORT
+#if ENABLED(WIFISUPPORT)
+ #define WIFI_SSID "Wifi SSID"
+ #define WIFI_PWD "Wifi Password"
+ //#define WEBSUPPORT // Start a webserver with auto-discovery
+ //#define OTASUPPORT // Support over-the-air firmware updates
+#endif
+
+/**
+ * Prusa Multi-Material Unit v2
+ * Enable in Configuration.h
+ */
+#if ENABLED(PRUSA_MMU2)
+
+ // Serial port used for communication with MMU2.
+ // For AVR enable the UART port used for the MMU. (e.g., internalSerial)
+ // For 32-bit boards check your HAL for available serial ports. (e.g., Serial2)
+ #define INTERNAL_SERIAL_PORT 2
+ #define MMU2_SERIAL internalSerial
+
+ // Use hardware reset for MMU if a pin is defined for it
+ //#define MMU2_RST_PIN 23
+
+ // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
+ //#define MMU2_MODE_12V
+
+ // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
+ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
+
+ // Add an LCD menu for MMU2
+ //#define MMU2_MENUS
+ #if ENABLED(MMU2_MENUS)
+ // Settings for filament load / unload from the LCD menu.
+ // This is for Prusa MK3-style extruders. Customize for your hardware.
+ #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
+ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
+ { 7.2, 562 }, \
+ { 14.4, 871 }, \
+ { 36.0, 1393 }, \
+ { 14.4, 871 }, \
+ { 50.0, 198 }
+
+ #define MMU2_RAMMING_SEQUENCE \
+ { 1.0, 1000 }, \
+ { 1.0, 1500 }, \
+ { 2.0, 2000 }, \
+ { 1.5, 3000 }, \
+ { 2.5, 4000 }, \
+ { -15.0, 5000 }, \
+ { -14.0, 1200 }, \
+ { -6.0, 600 }, \
+ { 10.0, 700 }, \
+ { -10.0, 400 }, \
+ { -50.0, 2000 }
+
+ #endif
+
+ //#define MMU2_DEBUG // Write debug info to serial output
+
+#endif // PRUSA_MMU2
+
+/**
+ * Advanced Print Counter settings
+ */
+#if ENABLED(PRINTCOUNTER)
+ #define SERVICE_WARNING_BUZZES 3
+ // Activate up to 3 service interval watchdogs
+ //#define SERVICE_NAME_1 "Service S"
+ //#define SERVICE_INTERVAL_1 100 // print hours
+ //#define SERVICE_NAME_2 "Service L"
+ //#define SERVICE_INTERVAL_2 200 // print hours
+ //#define SERVICE_NAME_3 "Service 3"
+ //#define SERVICE_INTERVAL_3 1 // print hours
+#endif
+
+// @section develop
+
+/**
+ * M43 - display pin status, watch pins for changes, watch endstops & toggle LED, Z servo probe test, toggle pins
+ */
+//#define PINS_DEBUGGING
+
+// Enable Marlin dev mode which adds some special commands
+//#define MARLIN_DEV_MODE
diff --git a/config/examples/Velleman/K8400/Single-head/README.md b/config/examples/Velleman/K8400/Single-head/README.md
new file mode 100644
index 000000000000..1ebdd16ef214
--- /dev/null
+++ b/config/examples/Velleman/K8400/Single-head/README.md
@@ -0,0 +1,15 @@
+# Configuration for Velleman K8400 Vertex
+http://www.k8400.eu/
+
+Configuration files for the K8400, ported upstream from the official Velleman firmware.
+Like its predecessor, (K8200), the K8400 is a 3Drag clone. There are some minor differences, documented in pins_K8400.h.
+
+Single and dual head configurations provided. Copy the correct Configuration.h and Configuration_adv.h to the /src/config directory.
+
+**NOTE: This configuration includes the community sourced feed rate fix. Use 100% feed rate in Repetier!**
+
+For implementation and updated K8400 firmware, see https://github.com/birkett/Velleman-K8400-Firmware
+
+### Original Sources
+Credit to Velleman for the original 1.0.x based code:
+http://www.vertex3dprinter.eu/downloads/files/vertex/firmware/vertex-m1-v1.4-h2.zip
diff --git a/config/examples/WASP/PowerWASP/Configuration.h b/config/examples/WASP/PowerWASP/Configuration.h
index 8e1e3ba1fb38..a27c67871fd1 100644
--- a/config/examples/WASP/PowerWASP/Configuration.h
+++ b/config/examples/WASP/PowerWASP/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Julian + Jason)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -402,6 +403,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -419,8 +421,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 -1
#define TEMP_SENSOR_1 0
@@ -744,6 +744,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 150, 150, 15, 20 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -752,6 +757,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 10000, 10000, 50, 500 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -765,35 +775,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 15.0
#define DEFAULT_YJERK 15.0
#define DEFAULT_ZJERK 0.5
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 1.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.023 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1577,10 +1590,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/WASP/PowerWASP/Configuration_adv.h b/config/examples/WASP/PowerWASP/Configuration_adv.h
index 73df795dab9c..49d05e622d5d 100644
--- a/config/examples/WASP/PowerWASP/Configuration_adv.h
+++ b/config/examples/WASP/PowerWASP/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 10 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 10 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 10
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Wanhao/Duplicator 6/Configuration.h b/config/examples/Wanhao/Duplicator 6/Configuration.h
index 9bf46181bb01..5af65f167d35 100644
--- a/config/examples/Wanhao/Duplicator 6/Configuration.h
+++ b/config/examples/Wanhao/Duplicator 6/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Rob Mendon, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 20
#define TEMP_SENSOR_1 0
@@ -735,6 +735,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -743,6 +748,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 500 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -756,35 +766,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 1.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.027 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1568,10 +1581,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h
index 55f9ec5bfd2a..ae93c85dc482 100644
--- a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h
+++ b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 255 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -889,6 +904,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1288,7 +1312,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2037,6 +2062,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2535,6 +2562,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/Wanhao/Duplicator i3 2.1/Chippy_Bootscreen.h b/config/examples/Wanhao/Duplicator i3 2.1/Chippy_Bootscreen.h
new file mode 100644
index 000000000000..1407c6f1734d
--- /dev/null
+++ b/config/examples/Wanhao/Duplicator i3 2.1/Chippy_Bootscreen.h
@@ -0,0 +1,74 @@
+/**
+ * Made with Marlin Bitmap Converter
+ * http://marlinfw.org/tools/u8glib/converter.html
+ *
+ * This bitmap from 128x64 pasted image
+ */
+#define CUSTOM_BOOTSCREEN_BMPWIDTH 128
+
+const unsigned char custom_start_bmp[] PROGMEM = {
+ B00100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000100,
+ B01000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000010,
+ B10000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000001,
+ B00000000,B00000000,B00000000,B00000011,B10000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000011,B10000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000001,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000111,B11000000,B00000000,B00000000,B00000000,B00001111,B00000000,B00000001,B00000000,B00000000,B00001111,B00000000,B00000000,
+ B00000000,B00000001,B11111111,B11111111,B11111110,B00000000,B00000000,B00000000,B00001000,B10000000,B10000001,B00000000,B00000000,B00001000,B10000000,B00000000,
+ B00000000,B00000011,B11111111,B11111111,B11111111,B11111111,B11000000,B00000000,B00001000,B10111101,B11000001,B00111100,B00011110,B00001000,B10111101,B00100000,
+ B00000000,B00000011,B00000000,B00000000,B00000011,B11111100,B01000000,B00000000,B00001111,B00100100,B10000001,B00100100,B00000010,B00001111,B00100101,B00100000,
+ B00000000,B00000011,B00000000,B00000000,B00000000,B00000100,B01111000,B00000000,B00001000,B10100100,B10011101,B00100101,B11011110,B11101000,B10100100,B11000000,
+ B00000000,B00000011,B00000000,B00000000,B00000000,B00000100,B00001000,B00000000,B00001000,B10100100,B10000001,B00100100,B00010010,B00001000,B10100101,B00100000,
+ B00000000,B00000011,B00111111,B11111111,B00000000,B00000100,B00001000,B00000000,B00001111,B00111100,B11000001,B00100100,B00011110,B00001111,B00111101,B00100000,
+ B00000000,B00000011,B00111111,B11111111,B11111111,B10000100,B00001000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000011,B00110000,B00000111,B11111111,B11000100,B00001000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000011,B00110000,B00000000,B00000000,B11000100,B00001000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000011,B00110011,B11000000,B00000000,B11000100,B00001000,B10000000,B10000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000011,B00110011,B11000000,B00000000,B11000100,B00001001,B10000000,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000011,B00110011,B11000000,B00000000,B11000100,B00001011,B10000000,B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000011,B00110011,B11000001,B11111100,B11000100,B00001011,B10000000,B11100011,B11000010,B00000000,B00000000,B00000010,B00000000,B00000000,B00100000,
+ B00000000,B00000011,B00110011,B11000001,B11111100,B11000100,B00001011,B11100011,B11100010,B00000010,B00000000,B00000000,B00100000,B00000000,B00000000,B00100000,
+ B00000000,B00000011,B00110011,B11000001,B11111100,B11000100,B00001011,B11100011,B11100010,B00001110,B01001000,B11101111,B01110100,B11110011,B11001111,B00100000,
+ B00000000,B00000011,B00110011,B11000000,B00000000,B11000100,B00001001,B11111111,B11000011,B11010010,B01001001,B00000001,B00100100,B10010010,B01000001,B00100000,
+ B00000000,B00000011,B00110000,B00000000,B00000000,B11000100,B00001000,B11111111,B10000010,B00010010,B01001001,B00001111,B00100100,B10010010,B01001111,B00100000,
+ B00000111,B11111111,B00110000,B00000000,B00000000,B11000100,B00001000,B01111111,B00000010,B00010010,B01001001,B00001001,B00100100,B10010010,B01001001,B00100000,
+ B00001111,B11111111,B00110000,B00000000,B00000000,B11000100,B00001000,B00111100,B00000011,B11001110,B01111000,B11101111,B00110100,B11110010,B01001111,B00100000,
+ B00001111,B11111111,B00110000,B00000000,B00000000,B11000100,B00001000,B00111100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00001111,B10000111,B00110001,B11000000,B00011100,B11000100,B01111111,B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000111,B00000111,B00110001,B11100000,B00111100,B11000100,B01111111,B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00011111,B10000011,B00110000,B11111111,B11111000,B11000100,B01111111,B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00111111,B11000011,B00110000,B00111111,B11100000,B11001100,B01111111,B11111100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B01111111,B11100011,B00111111,B11000000,B00000000,B11001100,B01111111,B11111000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B11111000,B11110011,B00011111,B11111111,B00000000,B11001100,B00001000,B00000000,B00000000,B00000111,B00000000,B01000000,B00000000,B01000000,B00000000,B00000000,
+ B11111000,B01110011,B00000000,B11111111,B11111111,B11001100,B00001000,B00000000,B00000000,B00000100,B10000000,B01000000,B00000100,B00000000,B00000000,B00000000,
+ B11110000,B01110011,B00000000,B00000001,B11111111,B10001100,B00001000,B00000000,B00000000,B00000100,B10011110,B01110001,B11101110,B10001101,B11000000,B00000000,
+ B01110000,B01100011,B00000000,B00000000,B00000000,B00001100,B00001000,B00000000,B00000000,B00000111,B00010010,B01001001,B00100100,B10010001,B00000000,B00000000,
+ B00100000,B01000011,B00000000,B00000000,B00000000,B00001100,B00001000,B00000000,B00000000,B00000100,B10010010,B01001001,B00100100,B10010000,B11000000,B00000000,
+ B00000000,B00000011,B00011111,B00000000,B00000000,B00001100,B00001000,B00000000,B00000000,B00000100,B10010010,B01001001,B00100100,B10010000,B01000000,B00000000,
+ B00000000,B00000011,B00010001,B00000000,B00000000,B00001100,B00001000,B00000000,B00000000,B00000100,B10011110,B01110001,B11100110,B10001101,B11000000,B00000000,
+ B00000000,B00000011,B00010001,B00000000,B00000000,B00001100,B00001000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000011,B00010001,B00000111,B00000000,B00001100,B00001000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000011,B00011111,B00000111,B11111000,B00001100,B00001000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000011,B00000000,B00000000,B01111111,B00001100,B00001000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000011,B00000000,B00000000,B00000111,B00001100,B00001000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000011,B00000000,B00000000,B00000000,B00001100,B00001000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000011,B11110000,B00000000,B00000000,B00001100,B00001000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000001,B11111111,B10000000,B00000000,B00001100,B00010000,B00100000,B00000000,B00100000,B00000000,B10000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000001,B11111111,B11111000,B00000000,B00001100,B01100000,B00100000,B00000010,B00000000,B00000000,B10000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000001,B11111111,B11111111,B11000000,B00001100,B11100000,B00111000,B11110111,B01001111,B00111100,B11100011,B11010010,B00000111,B01111000,B00000000,
+ B00000000,B00000001,B11111111,B11111111,B11111110,B00001101,B11100000,B00100100,B10010010,B01001001,B00000100,B10010010,B01010010,B00001000,B00001000,B00000000,
+ B00000000,B00000001,B11111111,B11111111,B11111111,B11111111,B11100000,B00100100,B10010010,B01001001,B00111100,B10010010,B01001100,B00001000,B01111000,B00000000,
+ B00000000,B00000000,B11111111,B11111111,B11111111,B11111111,B11100000,B00100100,B10010010,B01001001,B00100100,B10010010,B01010010,B00001000,B01001000,B00000000,
+ B00000000,B00000000,B00001111,B11111111,B11111111,B11111111,B11100000,B00111000,B11110011,B01001001,B00111100,B11100011,B11010010,B01000111,B01111000,B00000000,
+ B00000000,B00000000,B00000000,B11111111,B11111111,B11111111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00001111,B11111111,B11111111,B10000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B11111111,B11111111,B00000001,B10110110,B11011011,B01101101,B10110110,B11011011,B01101101,B10110110,B11011011,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00001111,B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00000000,B11111100,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B10000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000001,
+ B01000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000010,
+ B00100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000100
+};
diff --git a/config/examples/Wanhao/Duplicator i3 2.1/Configuration.h b/config/examples/Wanhao/Duplicator i3 2.1/Configuration.h
new file mode 100644
index 000000000000..daa2f0b6ecad
--- /dev/null
+++ b/config/examples/Wanhao/Duplicator i3 2.1/Configuration.h
@@ -0,0 +1,2230 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * Configuration.h
+ *
+ * Basic settings such as:
+ *
+ * - Type of electronics
+ * - Type of temperature sensor
+ * - Printer geometry
+ * - Endstop configuration
+ * - LCD controller
+ * - Extra features
+ *
+ * Advanced settings can be found in Configuration_adv.h
+ *
+ */
+#define CONFIGURATION_H_VERSION 020000
+
+//===========================================================================
+//============================= Getting Started =============================
+//===========================================================================
+
+/**
+ * Here are some standard links for getting your machine calibrated:
+ *
+ * http://reprap.org/wiki/Calibration
+ * http://youtu.be/wAL9d7FgInk
+ * http://calculator.josefprusa.cz
+ * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
+ * http://www.thingiverse.com/thing:5573
+ * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
+ * http://www.thingiverse.com/thing:298812
+ */
+
+//===========================================================================
+//============================= DELTA Printer ===============================
+//===========================================================================
+// For a Delta printer start with one of the configuration files in the
+// config/examples/delta directory and customize for your machine.
+//
+
+//===========================================================================
+//============================= SCARA Printer ===============================
+//===========================================================================
+// For a SCARA printer start with the configuration files in
+// config/examples/SCARA and customize for your machine.
+//
+
+// @section info
+
+// Author info of this build printed to the host during boot and M115
+#define STRING_CONFIG_H_AUTHOR "(Matthew Piercey, Bot-In-a-Box Educational Robotics)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
+
+/**
+ * *** VENDORS PLEASE READ ***
+ *
+ * Marlin allows you to add a custom boot image for Graphical LCDs.
+ * With this option Marlin will first show your custom screen followed
+ * by the standard Marlin logo with version number and web URL.
+ *
+ * We encourage you to take advantage of this new feature and we also
+ * respectfully request that you retain the unmodified Marlin boot screen.
+ */
+
+// Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION **
+#define SHOW_BOOTSCREEN
+#define STRING_SPLASH_LINE2 "https://botinabox.ca"
+
+// Show the bitmap in Marlin/_Bootscreen.h on startup.
+#define SHOW_CUSTOM_BOOTSCREEN
+
+// Show the bitmap in Marlin/_Statusscreen.h on the status screen.
+//#define CUSTOM_STATUS_SCREEN_IMAGE
+
+// @section machine
+
+/**
+ * Select the serial port on the board to use for communication with the host.
+ * This allows the connection of wireless adapters (for instance) to non-default port pins.
+ * Note: The first serial port (-1 or 0) will always be used by the Arduino bootloader.
+ *
+ * :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
+ */
+#define SERIAL_PORT 0
+
+/**
+ * Select a secondary serial port on the board to use for communication with the host.
+ * This allows the connection of wireless adapters (for instance) to non-default port pins.
+ * Serial port -1 is the USB emulated serial port, if available.
+ *
+ * :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
+ */
+//#define SERIAL_PORT_2 -1
+
+/**
+ * This setting determines the communication speed of the printer.
+ *
+ * 250000 works in most cases, but you might try a lower speed if
+ * you commonly experience drop-outs during host printing.
+ * You may try up to 1000000 to speed up SD file transfer.
+ *
+ * :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000]
+ */
+#define BAUDRATE 250000
+
+// Enable the Bluetooth serial interface on AT90USB devices
+//#define BLUETOOTH
+
+// Choose the name from boards.h that matches your setup
+#ifndef MOTHERBOARD
+ #define MOTHERBOARD BOARD_MELZI
+#endif
+
+// Name displayed in the LCD "Ready" message and Info menu
+#define CUSTOM_MACHINE_NAME "Wanhao i3"
+
+// Printer's unique ID, used by some programs to differentiate between machines.
+// Choose your own or use a service like http://www.uuidgenerator.net/version4
+//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
+
+// @section extruder
+
+// This defines the number of extruders
+// :[1, 2, 3, 4, 5, 6]
+#define EXTRUDERS 1
+
+// Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc.
+#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75
+
+// For Cyclops or any "multi-extruder" that shares a single nozzle.
+//#define SINGLENOZZLE
+
+/**
+ * Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
+ *
+ * This device allows one stepper driver on a control board to drive
+ * two to eight stepper motors, one at a time, in a manner suitable
+ * for extruders.
+ *
+ * This option only allows the multiplexer to switch on tool-change.
+ * Additional options to configure custom E moves are pending.
+ */
+//#define MK2_MULTIPLEXER
+#if ENABLED(MK2_MULTIPLEXER)
+ // Override the default DIO selector pins here, if needed.
+ // Some pins files may provide defaults for these pins.
+ //#define E_MUX0_PIN 40 // Always Required
+ //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs
+ //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs
+#endif
+
+/**
+ * Prusa Multi-Material Unit v2
+ *
+ * Requires NOZZLE_PARK_FEATURE to park print head in case MMU unit fails.
+ * Requires EXTRUDERS = 5
+ *
+ * For additional configuration see Configuration_adv.h
+ */
+//#define PRUSA_MMU2
+
+// A dual extruder that uses a single stepper motor
+//#define SWITCHING_EXTRUDER
+#if ENABLED(SWITCHING_EXTRUDER)
+ #define SWITCHING_EXTRUDER_SERVO_NR 0
+ #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1[, E2, E3]
+ #if EXTRUDERS > 3
+ #define SWITCHING_EXTRUDER_E23_SERVO_NR 1
+ #endif
+#endif
+
+// A dual-nozzle that uses a servomotor to raise/lower one (or both) of the nozzles
+//#define SWITCHING_NOZZLE
+#if ENABLED(SWITCHING_NOZZLE)
+ #define SWITCHING_NOZZLE_SERVO_NR 0
+ //#define SWITCHING_NOZZLE_E1_SERVO_NR 1 // If two servos are used, the index of the second
+ #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 (single servo) or lowered/raised (dual servo)
+#endif
+
+/**
+ * Two separate X-carriages with extruders that connect to a moving part
+ * via a solenoid docking mechanism. Requires SOL1_PIN and SOL2_PIN.
+ */
+//#define PARKING_EXTRUDER
+
+/**
+ * Two separate X-carriages with extruders that connect to a moving part
+ * via a magnetic docking mechanism using movements and no solenoid
+ *
+ * project : https://www.thingiverse.com/thing:3080893
+ * movements : https://youtu.be/0xCEiG9VS3k
+ * https://youtu.be/Bqbcs0CU2FE
+ */
+//#define MAGNETIC_PARKING_EXTRUDER
+
+#if EITHER(PARKING_EXTRUDER, MAGNETIC_PARKING_EXTRUDER)
+
+ #define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
+ //#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
+
+ #if ENABLED(PARKING_EXTRUDER)
+
+ #define PARKING_EXTRUDER_SOLENOIDS_INVERT // If enabled, the solenoid is NOT magnetized with applied voltage
+ #define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
+ #define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // (ms) Delay for magnetic field. No delay if 0 or not defined.
+ //#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
+
+ #elif ENABLED(MAGNETIC_PARKING_EXTRUDER)
+
+ #define MPE_FAST_SPEED 9000 // (mm/m) Speed for travel before last distance point
+ #define MPE_SLOW_SPEED 4500 // (mm/m) Speed for last distance travel to park and couple
+ #define MPE_TRAVEL_DISTANCE 10 // (mm) Last distance point
+ #define MPE_COMPENSATION 0 // Offset Compensation -1 , 0 , 1 (multiplier) only for coupling
+
+ #endif
+
+#endif
+
+/**
+ * Switching Toolhead
+ *
+ * Support for swappable and dockable toolheads, such as
+ * the E3D Tool Changer. Toolheads are locked with a servo.
+ */
+//#define SWITCHING_TOOLHEAD
+
+/**
+ * Magnetic Switching Toolhead
+ *
+ * Support swappable and dockable toolheads with a magnetic
+ * docking mechanism using movement and no servo.
+ */
+//#define MAGNETIC_SWITCHING_TOOLHEAD
+
+/**
+ * Electromagnetic Switching Toolhead
+ *
+ * Parking for CoreXY / HBot kinematics.
+ * Toolheads are parked at one edge and held with an electromagnet.
+ * Supports more than 2 Toolheads. See https://youtu.be/JolbsAKTKf4
+ */
+//#define ELECTROMAGNETIC_SWITCHING_TOOLHEAD
+
+#if ANY(SWITCHING_TOOLHEAD, MAGNETIC_SWITCHING_TOOLHEAD, ELECTROMAGNETIC_SWITCHING_TOOLHEAD)
+ #define SWITCHING_TOOLHEAD_Y_POS 235 // (mm) Y position of the toolhead dock
+ #define SWITCHING_TOOLHEAD_Y_SECURITY 10 // (mm) Security distance Y axis
+ #define SWITCHING_TOOLHEAD_Y_CLEAR 60 // (mm) Minimum distance from dock for unobstructed X axis
+ #define SWITCHING_TOOLHEAD_X_POS { 215, 0 } // (mm) X positions for parking the extruders
+ #if ENABLED(SWITCHING_TOOLHEAD)
+ #define SWITCHING_TOOLHEAD_SERVO_NR 2 // Index of the servo connector
+ #define SWITCHING_TOOLHEAD_SERVO_ANGLES { 0, 180 } // (degrees) Angles for Lock, Unlock
+ #elif ENABLED(MAGNETIC_SWITCHING_TOOLHEAD)
+ #define SWITCHING_TOOLHEAD_Y_RELEASE 5 // (mm) Security distance Y axis
+ #define SWITCHING_TOOLHEAD_X_SECURITY { 90, 150 } // (mm) Security distance X axis (T0,T1)
+ //#define PRIME_BEFORE_REMOVE // Prime the nozzle before release from the dock
+ #if ENABLED(PRIME_BEFORE_REMOVE)
+ #define SWITCHING_TOOLHEAD_PRIME_MM 20 // (mm) Extruder prime length
+ #define SWITCHING_TOOLHEAD_RETRACT_MM 10 // (mm) Retract after priming length
+ #define SWITCHING_TOOLHEAD_PRIME_FEEDRATE 300 // (mm/m) Extruder prime feedrate
+ #define SWITCHING_TOOLHEAD_RETRACT_FEEDRATE 2400 // (mm/m) Extruder retract feedrate
+ #endif
+ #elif ENABLED(ELECTROMAGNETIC_SWITCHING_TOOLHEAD)
+ #define SWITCHING_TOOLHEAD_Z_HOP 2 // (mm) Z raise for switching
+ #endif
+#endif
+
+/**
+ * "Mixing Extruder"
+ * - Adds G-codes M163 and M164 to set and "commit" the current mix factors.
+ * - Extends the stepping routines to move multiple steppers in proportion to the mix.
+ * - Optional support for Repetier Firmware's 'M164 S' supporting virtual tools.
+ * - This implementation supports up to two mixing extruders.
+ * - Enable DIRECT_MIXING_IN_G1 for M165 and mixing in G1 (from Pia Taubert's reference implementation).
+ */
+//#define MIXING_EXTRUDER
+#if ENABLED(MIXING_EXTRUDER)
+ #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder
+ #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
+ //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
+ //#define GRADIENT_MIX // Support for gradient mixing with M166 and LCD
+ #if ENABLED(GRADIENT_MIX)
+ //#define GRADIENT_VTOOL // Add M166 T to use a V-tool index as a Gradient alias
+ #endif
+#endif
+
+// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
+// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
+// For the other hotends it is their distance from the extruder 0 hotend.
+//#define HOTEND_OFFSET_X { 0.0, 20.00 } // (mm) relative X-offset for each nozzle
+//#define HOTEND_OFFSET_Y { 0.0, 5.00 } // (mm) relative Y-offset for each nozzle
+//#define HOTEND_OFFSET_Z { 0.0, 0.00 } // (mm) relative Z-offset for each nozzle
+
+// @section machine
+
+/**
+ * Power Supply Control
+ *
+ * Enable and connect the power supply to the PS_ON_PIN.
+ * Specify whether the power supply is active HIGH or active LOW.
+ */
+//#define PSU_CONTROL
+//#define PSU_NAME "Power Supply"
+
+#if ENABLED(PSU_CONTROL)
+ #define PSU_ACTIVE_HIGH false // Set 'false' for ATX (1), 'true' for X-Box (2)
+
+ //#define PS_DEFAULT_OFF // Keep power off until enabled directly with M80
+
+ //#define AUTO_POWER_CONTROL // Enable automatic control of the PS_ON pin
+ #if ENABLED(AUTO_POWER_CONTROL)
+ #define AUTO_POWER_FANS // Turn on PSU if fans need power
+ #define AUTO_POWER_E_FANS
+ #define AUTO_POWER_CONTROLLERFAN
+ #define AUTO_POWER_CHAMBER_FAN
+ //#define AUTO_POWER_E_TEMP 50 // (°C) Turn on PSU over this temperature
+ //#define AUTO_POWER_CHAMBER_TEMP 30 // (°C) Turn on PSU over this temperature
+ #define POWER_TIMEOUT 30
+ #endif
+#endif
+
+// @section temperature
+
+//===========================================================================
+//============================= Thermal Settings ============================
+//===========================================================================
+
+/**
+ * --NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
+ *
+ * Temperature sensors available:
+ *
+ * -4 : thermocouple with AD8495
+ * -3 : thermocouple with MAX31855 (only for sensor 0)
+ * -2 : thermocouple with MAX6675 (only for sensor 0)
+ * -1 : thermocouple with AD595
+ * 0 : not used
+ * 1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
+ * 331 : (3.3V scaled thermistor 1 table)
+ * 2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
+ * 3 : Mendel-parts thermistor (4.7k pullup)
+ * 4 : 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
+ * 5 : 100K thermistor - ATC Semitec 104GT-2/104NT-4-R025H42G (Used in ParCan & J-Head) (4.7k pullup)
+ * 501 : 100K Zonestar (Tronxy X3A) Thermistor
+ * 512 : 100k RPW-Ultra hotend thermistor (4.7k pullup)
+ * 6 : 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
+ * 7 : 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
+ * 71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
+ * 8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
+ * 9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
+ * 10 : 100k RS thermistor 198-961 (4.7k pullup)
+ * 11 : 100k beta 3950 1% thermistor (4.7k pullup)
+ * 12 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
+ * 13 : 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
+ * 15 : 100k thermistor calibration for JGAurora A5 hotend
+ * 18 : ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327
+ * 20 : Pt100 with circuit in the Ultimainboard V2.x
+ * 201 : Pt100 with circuit in Overlord, similar to Ultimainboard V2.x
+ * 60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
+ * 61 : 100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup
+ * 66 : 4.7M High Temperature thermistor from Dyze Design
+ * 67 : 450C thermistor from SliceEngineering
+ * 70 : the 100K thermistor found in the bq Hephestos 2
+ * 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
+ *
+ * 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
+ * (but gives greater accuracy and more stable PID)
+ * 51 : 100k thermistor - EPCOS (1k pullup)
+ * 52 : 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
+ * 55 : 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
+ *
+ * 1047 : Pt1000 with 4k7 pullup
+ * 1010 : Pt1000 with 1k pullup (non standard)
+ * 147 : Pt100 with 4k7 pullup
+ * 110 : Pt100 with 1k pullup (non standard)
+ *
+ * 1000 : Custom - Specify parameters in Configuration_adv.h
+ *
+ * Use these for Testing or Development purposes. NEVER for production machine.
+ * 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
+ * 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
+ */
+#define TEMP_SENSOR_0 99
+#define TEMP_SENSOR_1 0
+#define TEMP_SENSOR_2 0
+#define TEMP_SENSOR_3 0
+#define TEMP_SENSOR_4 0
+#define TEMP_SENSOR_5 0
+#define TEMP_SENSOR_BED 99
+#define TEMP_SENSOR_CHAMBER 0
+
+// Dummy thermistor constant temperature readings, for use with 998 and 999
+#define DUMMY_THERMISTOR_998_VALUE 25
+#define DUMMY_THERMISTOR_999_VALUE 100
+
+// Use temp sensor 1 as a redundant sensor with sensor 0. If the readings
+// from the two sensors differ too much the print will be aborted.
+//#define TEMP_SENSOR_1_AS_REDUNDANT
+#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
+
+#define TEMP_RESIDENCY_TIME 10 // (seconds) Time to wait for hotend to "settle" in M109
+#define TEMP_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer
+#define TEMP_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target
+
+#define TEMP_BED_RESIDENCY_TIME 10 // (seconds) Time to wait for bed to "settle" in M190
+#define TEMP_BED_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer
+#define TEMP_BED_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target
+
+// Below this temperature the heater will be switched off
+// because it probably indicates a broken thermistor wire.
+#define HEATER_0_MINTEMP 5
+#define HEATER_1_MINTEMP 5
+#define HEATER_2_MINTEMP 5
+#define HEATER_3_MINTEMP 5
+#define HEATER_4_MINTEMP 5
+#define HEATER_5_MINTEMP 5
+#define BED_MINTEMP 5
+
+// Above this temperature the heater will be switched off.
+// This can protect components from overheating, but NOT from shorts and failures.
+// (Use MINTEMP for thermistor short/failure protection.)
+#define HEATER_0_MAXTEMP 260
+#define HEATER_1_MAXTEMP 260
+#define HEATER_2_MAXTEMP 260
+#define HEATER_3_MAXTEMP 260
+#define HEATER_4_MAXTEMP 260
+#define HEATER_5_MAXTEMP 260
+#define BED_MAXTEMP 100
+
+//===========================================================================
+//============================= PID Settings ================================
+//===========================================================================
+// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
+
+// Comment the following line to disable PID and enable bang-bang.
+#define PIDTEMP
+#define BANG_MAX 255 // Limits current to nozzle while in bang-bang mode; 255=full current
+#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
+#define PID_K1 0.95 // Smoothing factor within any PID loop
+#if ENABLED(PIDTEMP)
+ //#define PID_EDIT_MENU // Add PID editing to the "Advanced Settings" menu. (~700 bytes of PROGMEM)
+ //#define PID_AUTOTUNE_MENU // Add PID auto-tuning to the "Advanced Settings" menu. (~250 bytes of PROGMEM)
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
+ // Set/get with gcode: M301 E[extruder number, 0-2]
+ #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
+ // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
+
+ // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
+
+ // Ultimaker
+ //#define DEFAULT_Kp 22.2
+ //#define DEFAULT_Ki 1.08
+ //#define DEFAULT_Kd 114
+
+ // Wanhao Duplicator i3
+ #define DEFAULT_Kp 29
+ #define DEFAULT_Ki 2.00
+ #define DEFAULT_Kd 97
+
+ // MakerGear
+ //#define DEFAULT_Kp 7.0
+ //#define DEFAULT_Ki 0.1
+ //#define DEFAULT_Kd 12
+
+ // Mendel Parts V9 on 12V
+ //#define DEFAULT_Kp 63.0
+ //#define DEFAULT_Ki 2.25
+ //#define DEFAULT_Kd 440
+
+#endif // PIDTEMP
+
+//===========================================================================
+//====================== PID > Bed Temperature Control ======================
+//===========================================================================
+
+/**
+ * PID Bed Heating
+ *
+ * If this option is enabled set PID constants below.
+ * If this option is disabled, bang-bang will be used and BED_LIMIT_SWITCHING will enable hysteresis.
+ *
+ * The PID frequency will be the same as the extruder PWM.
+ * If PID_dT is the default, and correct for the hardware/configuration, that means 7.689Hz,
+ * which is fine for driving a square wave into a resistive load and does not significantly
+ * impact FET heating. This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W
+ * heater. If your configuration is significantly different than this and you don't understand
+ * the issues involved, don't use bed PID until someone else verifies that your hardware works.
+ */
+//#define PIDTEMPBED
+
+//#define BED_LIMIT_SWITCHING
+
+/**
+ * Max Bed Power
+ * Applies to all forms of bed control (PID, bang-bang, and bang-bang with hysteresis).
+ * When set to any value below 255, enables a form of PWM to the bed that acts like a divider
+ * so don't use it unless you are OK with PWM on your bed. (See the comment on enabling PIDTEMPBED)
+ */
+#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
+
+#if ENABLED(PIDTEMPBED)
+ //#define MIN_BED_POWER 0
+ //#define PID_BED_DEBUG // Sends debug data to the serial port.
+
+ //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
+ //from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
+ //#define DEFAULT_bedKp 10.00
+ //#define DEFAULT_bedKi .023
+ //#define DEFAULT_bedKd 305.4
+
+ // Wanhao Duplicator i3
+ #define DEFAULT_bedKp 249.52
+ #define DEFAULT_bedKi 47.89
+ #define DEFAULT_bedKd 325.03
+
+ //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
+ //from pidautotune
+ //#define DEFAULT_bedKp 97.1
+ //#define DEFAULT_bedKi 1.41
+ //#define DEFAULT_bedKd 1675.16
+
+ // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
+#endif // PIDTEMPBED
+
+// @section extruder
+
+/**
+ * Prevent extrusion if the temperature is below EXTRUDE_MINTEMP.
+ * Add M302 to set the minimum extrusion temperature and/or turn
+ * cold extrusion prevention on and off.
+ *
+ * *** IT IS HIGHLY RECOMMENDED TO LEAVE THIS OPTION ENABLED! ***
+ */
+#define PREVENT_COLD_EXTRUSION
+#define EXTRUDE_MINTEMP 170
+
+/**
+ * Prevent a single extrusion longer than EXTRUDE_MAXLENGTH.
+ * Note: For Bowden Extruders make this large enough to allow load/unload.
+ */
+#define PREVENT_LENGTHY_EXTRUDE
+#define EXTRUDE_MAXLENGTH 200
+
+//===========================================================================
+//======================== Thermal Runaway Protection =======================
+//===========================================================================
+
+/**
+ * Thermal Protection provides additional protection to your printer from damage
+ * and fire. Marlin always includes safe min and max temperature ranges which
+ * protect against a broken or disconnected thermistor wire.
+ *
+ * The issue: If a thermistor falls out, it will report the much lower
+ * temperature of the air in the room, and the the firmware will keep
+ * the heater on.
+ *
+ * If you get "Thermal Runaway" or "Heating failed" errors the
+ * details can be tuned in Configuration_adv.h
+ */
+
+#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
+#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
+#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber
+
+//===========================================================================
+//============================= Mechanical Settings =========================
+//===========================================================================
+
+// @section machine
+
+// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics
+// either in the usual order or reversed
+//#define COREXY
+//#define COREXZ
+//#define COREYZ
+//#define COREYX
+//#define COREZX
+//#define COREZY
+
+//===========================================================================
+//============================== Endstop Settings ===========================
+//===========================================================================
+
+// @section homing
+
+// Specify here all the endstop connectors that are connected to any endstop or probe.
+// Almost all printers will be using one per axis. Probes will use one or more of the
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
+#define USE_XMIN_PLUG
+#define USE_YMIN_PLUG
+#define USE_ZMIN_PLUG
+//#define USE_XMAX_PLUG
+//#define USE_YMAX_PLUG
+//#define USE_ZMAX_PLUG
+
+// Enable pullup for all endstops to prevent a floating state
+#define ENDSTOPPULLUPS
+#if DISABLED(ENDSTOPPULLUPS)
+ // Disable ENDSTOPPULLUPS to set pullups individually
+ //#define ENDSTOPPULLUP_XMAX
+ //#define ENDSTOPPULLUP_YMAX
+ //#define ENDSTOPPULLUP_ZMAX
+ //#define ENDSTOPPULLUP_XMIN
+ //#define ENDSTOPPULLUP_YMIN
+ //#define ENDSTOPPULLUP_ZMIN
+ //#define ENDSTOPPULLUP_ZMIN_PROBE
+#endif
+
+// Enable pulldown for all endstops to prevent a floating state
+//#define ENDSTOPPULLDOWNS
+#if DISABLED(ENDSTOPPULLDOWNS)
+ // Disable ENDSTOPPULLDOWNS to set pulldowns individually
+ //#define ENDSTOPPULLDOWN_XMAX
+ //#define ENDSTOPPULLDOWN_YMAX
+ //#define ENDSTOPPULLDOWN_ZMAX
+ //#define ENDSTOPPULLDOWN_XMIN
+ //#define ENDSTOPPULLDOWN_YMIN
+ //#define ENDSTOPPULLDOWN_ZMIN
+ //#define ENDSTOPPULLDOWN_ZMIN_PROBE
+#endif
+
+// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
+#define X_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
+#define Y_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
+#define Z_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
+#define X_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
+#define Y_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
+#define Z_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
+#define Z_MIN_PROBE_ENDSTOP_INVERTING false // Set to true to invert the logic of the probe.
+
+/**
+ * Stepper Drivers
+ *
+ * These settings allow Marlin to tune stepper driver timing and enable advanced options for
+ * stepper drivers that support them. You may also override timing options in Configuration_adv.h.
+ *
+ * A4988 is assumed for unspecified drivers.
+ *
+ * Options: A4988, A5984, DRV8825, LV8729, L6470, TB6560, TB6600, TMC2100,
+ * TMC2130, TMC2130_STANDALONE, TMC2160, TMC2160_STANDALONE,
+ * TMC2208, TMC2208_STANDALONE, TMC2209, TMC2209_STANDALONE,
+ * TMC26X, TMC26X_STANDALONE, TMC2660, TMC2660_STANDALONE,
+ * TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE
+ * :['A4988', 'A5984', 'DRV8825', 'LV8729', 'L6470', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE']
+ */
+//#define X_DRIVER_TYPE A4988
+//#define Y_DRIVER_TYPE A4988
+//#define Z_DRIVER_TYPE A4988
+//#define X2_DRIVER_TYPE A4988
+//#define Y2_DRIVER_TYPE A4988
+//#define Z2_DRIVER_TYPE A4988
+//#define Z3_DRIVER_TYPE A4988
+//#define E0_DRIVER_TYPE A4988
+//#define E1_DRIVER_TYPE A4988
+//#define E2_DRIVER_TYPE A4988
+//#define E3_DRIVER_TYPE A4988
+//#define E4_DRIVER_TYPE A4988
+//#define E5_DRIVER_TYPE A4988
+
+// Enable this feature if all enabled endstop pins are interrupt-capable.
+// This will remove the need to poll the interrupt pins, saving many CPU cycles.
+//#define ENDSTOP_INTERRUPTS_FEATURE
+
+/**
+ * Endstop Noise Threshold
+ *
+ * Enable if your probe or endstops falsely trigger due to noise.
+ *
+ * - Higher values may affect repeatability or accuracy of some bed probes.
+ * - To fix noise install a 100nF ceramic capacitor inline with the switch.
+ * - This feature is not required for common micro-switches mounted on PCBs
+ * based on the Makerbot design, which already have the 100nF capacitor.
+ *
+ * :[2,3,4,5,6,7]
+ */
+//#define ENDSTOP_NOISE_THRESHOLD 2
+
+//=============================================================================
+//============================== Movement Settings ============================
+//=============================================================================
+// @section motion
+
+/**
+ * Default Settings
+ *
+ * These settings can be reset by M502
+ *
+ * Note that if EEPROM is enabled, saved values will override these.
+ */
+
+/**
+ * With this option each E stepper can have its own factors for the
+ * following movement settings. If fewer factors are given than the
+ * total number of extruders, the last value applies to the rest.
+ */
+//#define DISTINCT_E_FACTORS
+
+/**
+ * Default Axis Steps Per Unit (steps/mm)
+ * Override with M92
+ * X, Y, Z, E0 [, E1[, E2[, E3[, E4[, E5]]]]]
+ */
+#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 100 }
+
+/**
+ * Default Max Feed Rate (mm/s)
+ * Override with M203
+ * X, Y, Z, E0 [, E1[, E2[, E3[, E4[, E5]]]]]
+ */
+#define DEFAULT_MAX_FEEDRATE { 700, 700, 100, 10000 }
+
+/**
+ * Default Max Acceleration (change/s) change = mm/s
+ * (Maximum start speed for accelerated moves)
+ * Override with M201
+ * X, Y, Z, E0 [, E1[, E2[, E3[, E4[, E5]]]]]
+ */
+#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+
+/**
+ * Default Acceleration (change/s) change = mm/s
+ * Override with M204
+ *
+ * M204 P Acceleration
+ * M204 R Retract Acceleration
+ * M204 T Travel Acceleration
+ */
+#define DEFAULT_ACCELERATION 700 // X, Y, Z and E acceleration for printing moves
+#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts
+#define DEFAULT_TRAVEL_ACCELERATION 700 // X, Y, Z acceleration for travel (non printing) moves
+
+/**
+ * Default Jerk limits (mm/s)
+ * Override with M205 X Y Z E
+ *
+ * "Jerk" specifies the minimum speed change that requires acceleration.
+ * When changing speed and direction, if the difference is less than the
+ * value set here, it may happen instantaneously.
+ */
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
+ #define DEFAULT_XJERK 8.0
+ #define DEFAULT_YJERK 8.0
+ #define DEFAULT_ZJERK 0.4
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
+#endif
+
+#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
+#endif
+
+/**
+ * S-Curve Acceleration
+ *
+ * This option eliminates vibration during printing by fitting a Bézier
+ * curve to move acceleration, producing much smoother direction changes.
+ *
+ * See https://github.com/synthetos/TinyG/wiki/Jerk-Controlled-Motion-Explained
+ */
+//#define S_CURVE_ACCELERATION
+
+//===========================================================================
+//============================= Z Probe Options =============================
+//===========================================================================
+// @section probes
+
+//
+// See http://marlinfw.org/docs/configuration/probes.html
+//
+
+/**
+ * Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
+ *
+ * Enable this option for a probe connected to the Z Min endstop pin.
+ */
+//#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
+
+/**
+ * Z_MIN_PROBE_PIN
+ *
+ * Define this pin if the probe is not connected to Z_MIN_PIN.
+ * If not defined the default pin for the selected MOTHERBOARD
+ * will be used. Most of the time the default is what you want.
+ *
+ * - The simplest option is to use a free endstop connector.
+ * - Use 5V for powered (usually inductive) sensors.
+ *
+ * - RAMPS 1.3/1.4 boards may use the 5V, GND, and Aux4->D32 pin:
+ * - For simple switches connect...
+ * - normally-closed switches to GND and D32.
+ * - normally-open switches to 5V and D32.
+ *
+ */
+//#define Z_MIN_PROBE_PIN 32 // Pin 32 is the RAMPS default
+
+/**
+ * Probe Type
+ *
+ * Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc.
+ * Activate one of these to use Auto Bed Leveling below.
+ */
+
+/**
+ * The "Manual Probe" provides a means to do "Auto" Bed Leveling without a probe.
+ * Use G29 repeatedly, adjusting the Z height at each point with movement commands
+ * or (with LCD_BED_LEVELING) the LCD controller.
+ */
+//#define PROBE_MANUALLY
+//#define MANUAL_PROBE_START_Z 0.2
+
+/**
+ * A Fix-Mounted Probe either doesn't deploy or needs manual deployment.
+ * (e.g., an inductive probe or a nozzle-based probe-switch.)
+ */
+//#define FIX_MOUNTED_PROBE
+
+/**
+ * Z Servo Probe, such as an endstop switch on a rotating arm.
+ */
+//#define Z_PROBE_SERVO_NR 0 // Defaults to SERVO 0 connector.
+//#define Z_SERVO_ANGLES { 70, 0 } // Z Servo Deploy and Stow angles
+
+/**
+ * The BLTouch probe uses a Hall effect sensor and emulates a servo.
+ */
+//#define BLTOUCH
+
+/**
+ * Touch-MI Probe by hotends.fr
+ *
+ * This probe is deployed and activated by moving the X-axis to a magnet at the edge of the bed.
+ * By default, the magnet is assumed to be on the left and activated by a home. If the magnet is
+ * on the right, enable and set TOUCH_MI_DEPLOY_XPOS to the deploy position.
+ *
+ * Also requires: BABYSTEPPING, BABYSTEP_ZPROBE_OFFSET, Z_SAFE_HOMING,
+ * and a minimum Z_HOMING_HEIGHT of 10.
+ */
+//#define TOUCH_MI_PROBE
+#if ENABLED(TOUCH_MI_PROBE)
+ #define TOUCH_MI_RETRACT_Z 0.5 // Height at which the probe retracts
+ //#define TOUCH_MI_DEPLOY_XPOS (X_MAX_BED + 2) // For a magnet on the right side of the bed
+ //#define TOUCH_MI_MANUAL_DEPLOY // For manual deploy (LCD menu)
+#endif
+
+// A probe that is deployed and stowed with a solenoid pin (SOL1_PIN)
+//#define SOLENOID_PROBE
+
+// A sled-mounted probe like those designed by Charles Bell.
+//#define Z_PROBE_SLED
+//#define SLED_DOCKING_OFFSET 5 // The extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
+
+// A probe deployed by moving the x-axis, such as the Wilson II's rack-and-pinion probe designed by Marty Rice.
+//#define RACK_AND_PINION_PROBE
+#if ENABLED(RACK_AND_PINION_PROBE)
+ #define Z_PROBE_DEPLOY_X X_MIN_POS
+ #define Z_PROBE_RETRACT_X X_MAX_POS
+#endif
+
+//
+// For Z_PROBE_ALLEN_KEY see the Delta example configurations.
+//
+
+/**
+ * Z Probe to nozzle (X,Y) offset, relative to (0, 0).
+ * X and Y offsets must be integers.
+ *
+ * In the following example the X and Y offsets are both positive:
+ * #define X_PROBE_OFFSET_FROM_EXTRUDER 10
+ * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10
+ *
+ * +-- BACK ---+
+ * | |
+ * L | (+) P | R <-- probe (20,20)
+ * E | | I
+ * F | (-) N (+) | G <-- nozzle (10,10)
+ * T | | H
+ * | (-) | T
+ * | |
+ * O-- FRONT --+
+ * (0,0)
+ */
+#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle]
+#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle]
+#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle]
+
+// Certain types of probes need to stay away from edges
+#define MIN_PROBE_EDGE 10
+
+// X and Y axis travel speed (mm/m) between probes
+#define XY_PROBE_SPEED 8000
+
+// Feedrate (mm/m) for the first approach when double-probing (MULTIPLE_PROBING == 2)
+#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
+
+// Feedrate (mm/m) for the "accurate" probe of each point
+#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
+
+/**
+ * Multiple Probing
+ *
+ * You may get improved results by probing 2 or more times.
+ * With EXTRA_PROBING the more atypical reading(s) will be disregarded.
+ *
+ * A total of 2 does fast/slow probes with a weighted average.
+ * A total of 3 or more adds more slow probes, taking the average.
+ */
+//#define MULTIPLE_PROBING 2
+//#define EXTRA_PROBING 1
+
+/**
+ * Z probes require clearance when deploying, stowing, and moving between
+ * probe points to avoid hitting the bed and other hardware.
+ * Servo-mounted probes require extra space for the arm to rotate.
+ * Inductive probes need space to keep from triggering early.
+ *
+ * Use these settings to specify the distance (mm) to raise the probe (or
+ * lower the bed). The values set here apply over and above any (negative)
+ * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD.
+ * Only integer values >= 1 are valid here.
+ *
+ * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle.
+ * But: `M851 Z+1` with a CLEARANCE of 2 => 2mm from bed to nozzle.
+ */
+#define Z_CLEARANCE_DEPLOY_PROBE 10 // Z Clearance for Deploy/Stow
+#define Z_CLEARANCE_BETWEEN_PROBES 5 // Z Clearance between probe points
+#define Z_CLEARANCE_MULTI_PROBE 5 // Z Clearance between multiple probes
+//#define Z_AFTER_PROBING 5 // Z position after probing is done
+
+#define Z_PROBE_LOW_POINT -2 // Farthest distance below the trigger-point to go before stopping
+
+// For M851 give a range for adjusting the Z probe offset
+#define Z_PROBE_OFFSET_RANGE_MIN -20
+#define Z_PROBE_OFFSET_RANGE_MAX 20
+
+// Enable the M48 repeatability test to test probe accuracy
+//#define Z_MIN_PROBE_REPEATABILITY_TEST
+
+// Before deploy/stow pause for user confirmation
+//#define PAUSE_BEFORE_DEPLOY_STOW
+#if ENABLED(PAUSE_BEFORE_DEPLOY_STOW)
+ //#define PAUSE_PROBE_DEPLOY_WHEN_TRIGGERED // For Manual Deploy Allenkey Probe
+#endif
+
+/**
+ * Enable one or more of the following if probing seems unreliable.
+ * Heaters and/or fans can be disabled during probing to minimize electrical
+ * noise. A delay can also be added to allow noise and vibration to settle.
+ * These options are most useful for the BLTouch probe, but may also improve
+ * readings with inductive probes and piezo sensors.
+ */
+//#define PROBING_HEATERS_OFF // Turn heaters off when probing
+#if ENABLED(PROBING_HEATERS_OFF)
+ //#define WAIT_FOR_BED_HEATER // Wait for bed to heat back up between probes (to improve accuracy)
+#endif
+//#define PROBING_FANS_OFF // Turn fans off when probing
+//#define PROBING_STEPPERS_OFF // Turn steppers off (unless needed to hold position) when probing
+//#define DELAY_BEFORE_PROBING 200 // (ms) To prevent vibrations from triggering piezo sensors
+
+// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
+// :{ 0:'Low', 1:'High' }
+#define X_ENABLE_ON 0
+#define Y_ENABLE_ON 0
+#define Z_ENABLE_ON 0
+#define E_ENABLE_ON 0 // For all extruders
+
+// Disables axis stepper immediately when it's not being used.
+// WARNING: When motors turn off there is a chance of losing position accuracy!
+#define DISABLE_X false
+#define DISABLE_Y false
+#define DISABLE_Z false
+
+// Warn on display about possibly reduced accuracy
+//#define DISABLE_REDUCED_ACCURACY_WARNING
+
+// @section extruder
+
+#define DISABLE_E false // For all extruders
+#define DISABLE_INACTIVE_EXTRUDER // Keep only the active extruder enabled
+
+// @section machine
+
+// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
+#define INVERT_X_DIR false
+#define INVERT_Y_DIR false
+#define INVERT_Z_DIR true
+
+// @section extruder
+
+// For direct drive extruder v9 set to true, for geared extruder set to false.
+#define INVERT_E0_DIR true
+#define INVERT_E1_DIR false
+#define INVERT_E2_DIR false
+#define INVERT_E3_DIR false
+#define INVERT_E4_DIR false
+#define INVERT_E5_DIR false
+
+// @section homing
+
+//#define NO_MOTION_BEFORE_HOMING // Inhibit movement until all axes have been homed
+
+//#define UNKNOWN_Z_NO_RAISE // Don't raise Z (lower the bed) if Z is "unknown." For beds that fall when Z is powered off.
+
+//#define Z_HOMING_HEIGHT 4 // (mm) Minimal Z height before homing (G28) for Z clearance above the bed, clamps, ...
+ // Be sure you have this distance over your Z_MAX_POS in case.
+
+// Direction of endstops when homing; 1=MAX, -1=MIN
+// :[-1,1]
+#define X_HOME_DIR -1
+#define Y_HOME_DIR -1
+#define Z_HOME_DIR -1
+
+// @section machine
+
+// The size of the print bed
+#define X_BED_SIZE 200
+#define Y_BED_SIZE 200
+
+// Travel limits (mm) after homing, corresponding to endstop positions.
+#define X_MIN_POS 0
+#define Y_MIN_POS 0
+#define Z_MIN_POS 0
+#define X_MAX_POS X_BED_SIZE
+#define Y_MAX_POS Y_BED_SIZE
+#define Z_MAX_POS 150
+
+/**
+ * Software Endstops
+ *
+ * - Prevent moves outside the set machine bounds.
+ * - Individual axes can be disabled, if desired.
+ * - X and Y only apply to Cartesian robots.
+ * - Use 'M211' to set software endstops on/off or report current state
+ */
+
+// Min software endstops constrain movement within minimum coordinate bounds
+#define MIN_SOFTWARE_ENDSTOPS
+#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
+ #define MIN_SOFTWARE_ENDSTOP_X
+ #define MIN_SOFTWARE_ENDSTOP_Y
+ #define MIN_SOFTWARE_ENDSTOP_Z
+#endif
+
+// Max software endstops constrain movement within maximum coordinate bounds
+#define MAX_SOFTWARE_ENDSTOPS
+#if ENABLED(MAX_SOFTWARE_ENDSTOPS)
+ #define MAX_SOFTWARE_ENDSTOP_X
+ #define MAX_SOFTWARE_ENDSTOP_Y
+ #define MAX_SOFTWARE_ENDSTOP_Z
+#endif
+
+#if EITHER(MIN_SOFTWARE_ENDSTOPS, MAX_SOFTWARE_ENDSTOPS)
+ //#define SOFT_ENDSTOPS_MENU_ITEM // Enable/Disable software endstops from the LCD
+#endif
+
+/**
+ * Filament Runout Sensors
+ * Mechanical or opto endstops are used to check for the presence of filament.
+ *
+ * RAMPS-based boards use SERVO3_PIN for the first runout sensor.
+ * For other boards you may need to define FIL_RUNOUT_PIN, FIL_RUNOUT2_PIN, etc.
+ * By default the firmware assumes HIGH=FILAMENT PRESENT.
+ */
+//#define FILAMENT_RUNOUT_SENSOR
+#if ENABLED(FILAMENT_RUNOUT_SENSOR)
+ #define NUM_RUNOUT_SENSORS 1 // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each.
+ #define FIL_RUNOUT_INVERTING false // Set to true to invert the logic of the sensor.
+ #define FIL_RUNOUT_PULLUP // Use internal pullup for filament runout pins.
+ //#define FIL_RUNOUT_PULLDOWN // Use internal pulldown for filament runout pins.
+
+ // Set one or more commands to execute on filament runout.
+ // (After 'M412 H' Marlin will ask the host to handle the process.)
+ #define FILAMENT_RUNOUT_SCRIPT "M600"
+
+ // After a runout is detected, continue printing this length of filament
+ // before executing the runout script. Useful for a sensor at the end of
+ // a feed tube. Requires 4 bytes SRAM per sensor, plus 4 bytes overhead.
+ //#define FILAMENT_RUNOUT_DISTANCE_MM 25
+
+ #ifdef FILAMENT_RUNOUT_DISTANCE_MM
+ // Enable this option to use an encoder disc that toggles the runout pin
+ // as the filament moves. (Be sure to set FILAMENT_RUNOUT_DISTANCE_MM
+ // large enough to avoid false positives.)
+ //#define FILAMENT_MOTION_SENSOR
+ #endif
+#endif
+
+//===========================================================================
+//=============================== Bed Leveling ==============================
+//===========================================================================
+// @section calibrate
+
+/**
+ * Choose one of the options below to enable G29 Bed Leveling. The parameters
+ * and behavior of G29 will change depending on your selection.
+ *
+ * If using a Probe for Z Homing, enable Z_SAFE_HOMING also!
+ *
+ * - AUTO_BED_LEVELING_3POINT
+ * Probe 3 arbitrary points on the bed (that aren't collinear)
+ * You specify the XY coordinates of all 3 points.
+ * The result is a single tilted plane. Best for a flat bed.
+ *
+ * - AUTO_BED_LEVELING_LINEAR
+ * Probe several points in a grid.
+ * You specify the rectangle and the density of sample points.
+ * The result is a single tilted plane. Best for a flat bed.
+ *
+ * - AUTO_BED_LEVELING_BILINEAR
+ * Probe several points in a grid.
+ * You specify the rectangle and the density of sample points.
+ * The result is a mesh, best for large or uneven beds.
+ *
+ * - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
+ * A comprehensive bed leveling system combining the features and benefits
+ * of other systems. UBL also includes integrated Mesh Generation, Mesh
+ * Validation and Mesh Editing systems.
+ *
+ * - MESH_BED_LEVELING
+ * Probe a grid manually
+ * The result is a mesh, suitable for large or uneven beds. (See BILINEAR.)
+ * For machines without a probe, Mesh Bed Leveling provides a method to perform
+ * leveling in steps so you can manually adjust the Z height at each grid-point.
+ * With an LCD controller the process is guided step-by-step.
+ */
+//#define AUTO_BED_LEVELING_3POINT
+//#define AUTO_BED_LEVELING_LINEAR
+//#define AUTO_BED_LEVELING_BILINEAR
+//#define AUTO_BED_LEVELING_UBL
+//#define MESH_BED_LEVELING
+
+/**
+ * Normally G28 leaves leveling disabled on completion. Enable
+ * this option to have G28 restore the prior leveling state.
+ */
+//#define RESTORE_LEVELING_AFTER_G28
+
+/**
+ * Enable detailed logging of G28, G29, M48, etc.
+ * Turn on with the command 'M111 S32'.
+ * NOTE: Requires a lot of PROGMEM!
+ */
+//#define DEBUG_LEVELING_FEATURE
+
+#if ANY(MESH_BED_LEVELING, AUTO_BED_LEVELING_BILINEAR, AUTO_BED_LEVELING_UBL)
+ // Gradually reduce leveling correction until a set height is reached,
+ // at which point movement will be level to the machine's XY plane.
+ // The height can be set with M420 Z
+ #define ENABLE_LEVELING_FADE_HEIGHT
+
+ // For Cartesian machines, instead of dividing moves on mesh boundaries,
+ // split up moves into short segments like a Delta. This follows the
+ // contours of the bed more closely than edge-to-edge straight moves.
+ #define SEGMENT_LEVELED_MOVES
+ #define LEVELED_SEGMENT_LENGTH 5.0 // (mm) Length of all segments (except the last one)
+
+ /**
+ * Enable the G26 Mesh Validation Pattern tool.
+ */
+ //#define G26_MESH_VALIDATION
+ #if ENABLED(G26_MESH_VALIDATION)
+ #define MESH_TEST_NOZZLE_SIZE 0.4 // (mm) Diameter of primary nozzle.
+ #define MESH_TEST_LAYER_HEIGHT 0.2 // (mm) Default layer height for the G26 Mesh Validation Tool.
+ #define MESH_TEST_HOTEND_TEMP 205 // (°C) Default nozzle temperature for the G26 Mesh Validation Tool.
+ #define MESH_TEST_BED_TEMP 60 // (°C) Default bed temperature for the G26 Mesh Validation Tool.
+ #define G26_XY_FEEDRATE 20 // (mm/s) Feedrate for XY Moves for the G26 Mesh Validation Tool.
+ #endif
+
+#endif
+
+#if EITHER(AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_BILINEAR)
+
+ // Set the number of grid points per dimension.
+ #define GRID_MAX_POINTS_X 3
+ #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
+
+ // Set the boundaries for probing (where the probe can reach).
+ //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE
+ //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE))
+ //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE
+ //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE))
+
+ // Probe along the Y axis, advancing X after each column
+ //#define PROBE_Y_FIRST
+
+ #if ENABLED(AUTO_BED_LEVELING_BILINEAR)
+
+ // Beyond the probed grid, continue the implied tilt?
+ // Default is to maintain the height of the nearest edge.
+ //#define EXTRAPOLATE_BEYOND_GRID
+
+ //
+ // Experimental Subdivision of the grid by Catmull-Rom method.
+ // Synthesizes intermediate points to produce a more detailed mesh.
+ //
+ //#define ABL_BILINEAR_SUBDIVISION
+ #if ENABLED(ABL_BILINEAR_SUBDIVISION)
+ // Number of subdivisions between probe points
+ #define BILINEAR_SUBDIVISIONS 3
+ #endif
+
+ #endif
+
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+
+ //===========================================================================
+ //========================= Unified Bed Leveling ============================
+ //===========================================================================
+
+ //#define MESH_EDIT_GFX_OVERLAY // Display a graphics overlay while editing the mesh
+
+ #define MESH_INSET 1 // Set Mesh bounds as an inset region of the bed
+ #define GRID_MAX_POINTS_X 10 // Don't use more than 15 points per axis, implementation limited.
+ #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
+
+ #define UBL_MESH_EDIT_MOVES_Z // Sophisticated users prefer no movement of nozzle
+ #define UBL_SAVE_ACTIVE_ON_M500 // Save the currently active mesh in the current slot on M500
+
+ //#define UBL_Z_RAISE_WHEN_OFF_MESH 2.5 // When the nozzle is off the mesh, this value is used
+ // as the Z-Height correction value.
+
+#elif ENABLED(MESH_BED_LEVELING)
+
+ //===========================================================================
+ //=================================== Mesh ==================================
+ //===========================================================================
+
+ #define MESH_INSET 10 // Set Mesh bounds as an inset region of the bed
+ #define GRID_MAX_POINTS_X 3 // Don't use more than 7 points per axis, implementation limited.
+ #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
+
+ //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest Z at Z_MIN_POS
+
+#endif // BED_LEVELING
+
+/**
+ * Points to probe for all 3-point Leveling procedures.
+ * Override if the automatically selected points are inadequate.
+ */
+#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL)
+ //#define PROBE_PT_1_X 15
+ //#define PROBE_PT_1_Y 180
+ //#define PROBE_PT_2_X 15
+ //#define PROBE_PT_2_Y 20
+ //#define PROBE_PT_3_X 170
+ //#define PROBE_PT_3_Y 20
+#endif
+
+/**
+ * Add a bed leveling sub-menu for ABL or MBL.
+ * Include a guided procedure if manual probing is enabled.
+ */
+//#define LCD_BED_LEVELING
+
+#if ENABLED(LCD_BED_LEVELING)
+ #define MESH_EDIT_Z_STEP 0.025 // (mm) Step size while manually probing Z axis.
+ #define LCD_PROBE_Z_RANGE 4 // (mm) Z Range centered on Z_MIN_POS for LCD Z adjustment
+ //#define MESH_EDIT_MENU // Add a menu to edit mesh points
+#endif
+
+// Add a menu item to move between bed corners for manual bed adjustment
+//#define LEVEL_BED_CORNERS
+
+#if ENABLED(LEVEL_BED_CORNERS)
+ #define LEVEL_CORNERS_INSET 30 // (mm) An inset for corner leveling
+ #define LEVEL_CORNERS_Z_HOP 4.0 // (mm) Move nozzle up before moving between corners
+ #define LEVEL_CORNERS_HEIGHT 0.0 // (mm) Z height of nozzle at leveling points
+ //#define LEVEL_CENTER_TOO // Move to the center after the last corner
+#endif
+
+/**
+ * Commands to execute at the end of G29 probing.
+ * Useful to retract or move the Z probe out of the way.
+ */
+//#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10"
+
+
+// @section homing
+
+// The center of the bed is at (X=0, Y=0)
+//#define BED_CENTER_AT_0_0
+
+// Manually set the home position. Leave these undefined for automatic settings.
+// For DELTA this is the top-center of the Cartesian print volume.
+//#define MANUAL_X_HOME_POS 0
+//#define MANUAL_Y_HOME_POS 0
+//#define MANUAL_Z_HOME_POS 0
+
+// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.
+//
+// With this feature enabled:
+//
+// - Allow Z homing only after X and Y homing AND stepper drivers still enabled.
+// - If stepper drivers time out, it will need X and Y homing again before Z homing.
+// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28).
+// - Prevent Z homing when the Z probe is outside bed area.
+//
+//#define Z_SAFE_HOMING
+
+#if ENABLED(Z_SAFE_HOMING)
+ #define Z_SAFE_HOMING_X_POINT ((X_BED_SIZE) / 2) // X point for Z homing when homing all axes (G28).
+ #define Z_SAFE_HOMING_Y_POINT ((Y_BED_SIZE) / 2) // Y point for Z homing when homing all axes (G28).
+#endif
+
+// Homing speeds (mm/m)
+#define HOMING_FEEDRATE_XY (50*60)
+#define HOMING_FEEDRATE_Z (4*60)
+
+// Validate that endstops are triggered on homing moves
+#define VALIDATE_HOMING_ENDSTOPS
+
+// @section calibrate
+
+/**
+ * Bed Skew Compensation
+ *
+ * This feature corrects for misalignment in the XYZ axes.
+ *
+ * Take the following steps to get the bed skew in the XY plane:
+ * 1. Print a test square (e.g., https://www.thingiverse.com/thing:2563185)
+ * 2. For XY_DIAG_AC measure the diagonal A to C
+ * 3. For XY_DIAG_BD measure the diagonal B to D
+ * 4. For XY_SIDE_AD measure the edge A to D
+ *
+ * Marlin automatically computes skew factors from these measurements.
+ * Skew factors may also be computed and set manually:
+ *
+ * - Compute AB : SQRT(2*AC*AC+2*BD*BD-4*AD*AD)/2
+ * - XY_SKEW_FACTOR : TAN(PI/2-ACOS((AC*AC-AB*AB-AD*AD)/(2*AB*AD)))
+ *
+ * If desired, follow the same procedure for XZ and YZ.
+ * Use these diagrams for reference:
+ *
+ * Y Z Z
+ * ^ B-------C ^ B-------C ^ B-------C
+ * | / / | / / | / /
+ * | / / | / / | / /
+ * | A-------D | A-------D | A-------D
+ * +-------------->X +-------------->X +-------------->Y
+ * XY_SKEW_FACTOR XZ_SKEW_FACTOR YZ_SKEW_FACTOR
+ */
+//#define SKEW_CORRECTION
+
+#if ENABLED(SKEW_CORRECTION)
+ // Input all length measurements here:
+ #define XY_DIAG_AC 282.8427124746
+ #define XY_DIAG_BD 282.8427124746
+ #define XY_SIDE_AD 200
+
+ // Or, set the default skew factors directly here
+ // to override the above measurements:
+ #define XY_SKEW_FACTOR 0.0
+
+ //#define SKEW_CORRECTION_FOR_Z
+ #if ENABLED(SKEW_CORRECTION_FOR_Z)
+ #define XZ_DIAG_AC 282.8427124746
+ #define XZ_DIAG_BD 282.8427124746
+ #define YZ_DIAG_AC 282.8427124746
+ #define YZ_DIAG_BD 282.8427124746
+ #define YZ_SIDE_AD 200
+ #define XZ_SKEW_FACTOR 0.0
+ #define YZ_SKEW_FACTOR 0.0
+ #endif
+
+ // Enable this option for M852 to set skew at runtime
+ //#define SKEW_CORRECTION_GCODE
+#endif
+
+//=============================================================================
+//============================= Additional Features ===========================
+//=============================================================================
+
+// @section extras
+
+/**
+ * EEPROM
+ *
+ * Persistent storage to preserve configurable settings across reboots.
+ *
+ * M500 - Store settings to EEPROM.
+ * M501 - Read settings from EEPROM. (i.e., Throw away unsaved changes)
+ * M502 - Revert settings to "factory" defaults. (Follow with M500 to init the EEPROM.)
+ */
+#define EEPROM_SETTINGS // Persistent storage with M500 and M501
+//#define DISABLE_M503 // Saves ~2700 bytes of PROGMEM. Disable for release!
+#define EEPROM_CHITCHAT // Give feedback on EEPROM commands. Disable to save PROGMEM.
+#if ENABLED(EEPROM_SETTINGS)
+ //#define EEPROM_AUTO_INIT // Init EEPROM automatically on any errors.
+#endif
+
+//
+// Host Keepalive
+//
+// When enabled Marlin will send a busy status message to the host
+// every couple of seconds when it can't accept commands.
+//
+#define HOST_KEEPALIVE_FEATURE // Disable this if your host doesn't like keepalive messages
+#define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
+#define BUSY_WHILE_HEATING // Some hosts require "busy" messages even during heating
+
+//
+// M100 Free Memory Watcher
+//
+//#define M100_FREE_MEMORY_WATCHER // Add M100 (Free Memory Watcher) to debug memory usage
+
+//
+// G20/G21 Inch mode support
+//
+//#define INCH_MODE_SUPPORT
+
+//
+// M149 Set temperature units support
+//
+//#define TEMPERATURE_UNITS_SUPPORT
+
+// @section temperature
+
+// Preheat Constants
+#define PREHEAT_1_LABEL "PLA"
+#define PREHEAT_1_TEMP_HOTEND 205
+#define PREHEAT_1_TEMP_BED 60
+#define PREHEAT_1_FAN_SPEED 0 // Value from 0 to 255
+
+#define PREHEAT_2_LABEL "ABS"
+#define PREHEAT_2_TEMP_HOTEND 240
+#define PREHEAT_2_TEMP_BED 100
+#define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255
+
+/**
+ * Nozzle Park
+ *
+ * Park the nozzle at the given XYZ position on idle or G27.
+ *
+ * The "P" parameter controls the action applied to the Z axis:
+ *
+ * P0 (Default) If Z is below park Z raise the nozzle.
+ * P1 Raise the nozzle always to Z-park height.
+ * P2 Raise the nozzle by Z-park amount, limited to Z_MAX_POS.
+ */
+//#define NOZZLE_PARK_FEATURE
+
+#if ENABLED(NOZZLE_PARK_FEATURE)
+ // Specify a park position as { X, Y, Z_raise }
+ #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
+ #define NOZZLE_PARK_XY_FEEDRATE 100 // (mm/s) X and Y axes feedrate (also used for delta Z axis)
+ #define NOZZLE_PARK_Z_FEEDRATE 5 // (mm/s) Z axis feedrate (not used for delta printers)
+#endif
+
+/**
+ * Clean Nozzle Feature -- EXPERIMENTAL
+ *
+ * Adds the G12 command to perform a nozzle cleaning process.
+ *
+ * Parameters:
+ * P Pattern
+ * S Strokes / Repetitions
+ * T Triangles (P1 only)
+ *
+ * Patterns:
+ * P0 Straight line (default). This process requires a sponge type material
+ * at a fixed bed location. "S" specifies strokes (i.e. back-forth motions)
+ * between the start / end points.
+ *
+ * P1 Zig-zag pattern between (X0, Y0) and (X1, Y1), "T" specifies the
+ * number of zig-zag triangles to do. "S" defines the number of strokes.
+ * Zig-zags are done in whichever is the narrower dimension.
+ * For example, "G12 P1 S1 T3" will execute:
+ *
+ * --
+ * | (X0, Y1) | /\ /\ /\ | (X1, Y1)
+ * | | / \ / \ / \ |
+ * A | | / \ / \ / \ |
+ * | | / \ / \ / \ |
+ * | (X0, Y0) | / \/ \/ \ | (X1, Y0)
+ * -- +--------------------------------+
+ * |________|_________|_________|
+ * T1 T2 T3
+ *
+ * P2 Circular pattern with middle at NOZZLE_CLEAN_CIRCLE_MIDDLE.
+ * "R" specifies the radius. "S" specifies the stroke count.
+ * Before starting, the nozzle moves to NOZZLE_CLEAN_START_POINT.
+ *
+ * Caveats: The ending Z should be the same as starting Z.
+ * Attention: EXPERIMENTAL. G-code arguments may change.
+ *
+ */
+//#define NOZZLE_CLEAN_FEATURE
+
+#if ENABLED(NOZZLE_CLEAN_FEATURE)
+ // Default number of pattern repetitions
+ #define NOZZLE_CLEAN_STROKES 12
+
+ // Default number of triangles
+ #define NOZZLE_CLEAN_TRIANGLES 3
+
+ // Specify positions as { X, Y, Z }
+ #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1) }
+ #define NOZZLE_CLEAN_END_POINT { 100, 60, (Z_MIN_POS + 1) }
+
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
+ // Move the nozzle to the initial position after cleaning
+ #define NOZZLE_CLEAN_GOBACK
+
+ // Enable for a purge/clean station that's always at the gantry height (thus no Z move)
+ //#define NOZZLE_CLEAN_NO_Z
+#endif
+
+/**
+ * Print Job Timer
+ *
+ * Automatically start and stop the print job timer on M104/M109/M190.
+ *
+ * M104 (hotend, no wait) - high temp = none, low temp = stop timer
+ * M109 (hotend, wait) - high temp = start timer, low temp = stop timer
+ * M190 (bed, wait) - high temp = start timer, low temp = none
+ *
+ * The timer can also be controlled with the following commands:
+ *
+ * M75 - Start the print job timer
+ * M76 - Pause the print job timer
+ * M77 - Stop the print job timer
+ */
+#define PRINTJOB_TIMER_AUTOSTART
+
+/**
+ * Print Counter
+ *
+ * Track statistical data such as:
+ *
+ * - Total print jobs
+ * - Total successful print jobs
+ * - Total failed print jobs
+ * - Total time printing
+ *
+ * View the current statistics with M78.
+ */
+#define PRINTCOUNTER
+
+//=============================================================================
+//============================= LCD and SD support ============================
+//=============================================================================
+
+// @section lcd
+
+/**
+ * LCD LANGUAGE
+ *
+ * Select the language to display on the LCD. These languages are available:
+ *
+ * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
+ * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ *
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ */
+#define LCD_LANGUAGE en
+
+/**
+ * LCD Character Set
+ *
+ * Note: This option is NOT applicable to Graphical Displays.
+ *
+ * All character-based LCDs provide ASCII plus one of these
+ * language extensions:
+ *
+ * - JAPANESE ... the most common
+ * - WESTERN ... with more accented characters
+ * - CYRILLIC ... for the Russian language
+ *
+ * To determine the language extension installed on your controller:
+ *
+ * - Compile and upload with LCD_LANGUAGE set to 'test'
+ * - Click the controller to view the LCD menu
+ * - The LCD will display Japanese, Western, or Cyrillic text
+ *
+ * See http://marlinfw.org/docs/development/lcd_language.html
+ *
+ * :['JAPANESE', 'WESTERN', 'CYRILLIC']
+ */
+#define DISPLAY_CHARSET_HD44780 JAPANESE
+
+/**
+ * Info Screen Style (0:Classic, 1:Prusa)
+ *
+ * :[0:'Classic', 1:'Prusa']
+ */
+#define LCD_INFO_SCREEN_STYLE 0
+
+/**
+ * SD CARD
+ *
+ * SD Card support is disabled by default. If your controller has an SD slot,
+ * you must uncomment the following option or it won't work.
+ *
+ */
+#define SDSUPPORT
+
+/**
+ * SD CARD: SPI SPEED
+ *
+ * Enable one of the following items for a slower SPI transfer speed.
+ * This may be required to resolve "volume init" errors.
+ */
+//#define SPI_SPEED SPI_HALF_SPEED
+//#define SPI_SPEED SPI_QUARTER_SPEED
+//#define SPI_SPEED SPI_EIGHTH_SPEED
+
+/**
+ * SD CARD: ENABLE CRC
+ *
+ * Use CRC checks and retries on the SD communication.
+ */
+#define SD_CHECK_AND_RETRY
+
+/**
+ * LCD Menu Items
+ *
+ * Disable all menus and only display the Status Screen, or
+ * just remove some extraneous menu items to recover space.
+ */
+//#define NO_LCD_MENUS
+//#define SLIM_LCD_MENUS
+
+//
+// ENCODER SETTINGS
+//
+// This option overrides the default number of encoder pulses needed to
+// produce one step. Should be increased for high-resolution encoders.
+//
+#define ENCODER_PULSES_PER_STEP 4
+
+//
+// Use this option to override the number of step signals required to
+// move between next/prev menu items.
+//
+#define ENCODER_STEPS_PER_MENU_ITEM 1
+
+/**
+ * Encoder Direction Options
+ *
+ * Test your encoder's behavior first with both options disabled.
+ *
+ * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.
+ * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.
+ * Reversed Value Editing only? Enable BOTH options.
+ */
+
+//
+// This option reverses the encoder direction everywhere.
+//
+// Set this option if CLOCKWISE causes values to DECREASE
+//
+#define REVERSE_ENCODER_DIRECTION
+
+//
+// This option reverses the encoder direction for navigating LCD menus.
+//
+// If CLOCKWISE normally moves DOWN this makes it go UP.
+// If CLOCKWISE normally moves UP this makes it go DOWN.
+//
+//#define REVERSE_MENU_DIRECTION
+
+//
+// This option reverses the encoder direction for Select Screen.
+//
+// If CLOCKWISE normally moves LEFT this makes it go RIGHT.
+// If CLOCKWISE normally moves RIGHT this makes it go LEFT.
+//
+//#define REVERSE_SELECT_DIRECTION
+
+//
+// Individual Axis Homing
+//
+// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
+//
+//#define INDIVIDUAL_AXIS_HOMING_MENU
+
+//
+// SPEAKER/BUZZER
+//
+// If you have a speaker that can produce tones, enable it here.
+// By default Marlin assumes you have a buzzer with a fixed frequency.
+//
+//#define SPEAKER
+
+//
+// The duration and frequency for the UI feedback sound.
+// Set these to 0 to disable audio feedback in the LCD menus.
+//
+// Note: Test audio output with the G-Code:
+// M300 S P
+//
+//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 2
+//#define LCD_FEEDBACK_FREQUENCY_HZ 5000
+
+//=============================================================================
+//======================== LCD / Controller Selection =========================
+//======================== (Character-based LCDs) =========================
+//=============================================================================
+
+//
+// RepRapDiscount Smart Controller.
+// http://reprap.org/wiki/RepRapDiscount_Smart_Controller
+//
+// Note: Usually sold with a white PCB.
+//
+//#define REPRAP_DISCOUNT_SMART_CONTROLLER
+
+//
+// Original RADDS LCD Display+Encoder+SDCardReader
+// http://doku.radds.org/dokumentation/lcd-display/
+//
+//#define RADDS_DISPLAY
+
+//
+// ULTIMAKER Controller.
+//
+//#define ULTIMAKERCONTROLLER
+
+//
+// ULTIPANEL as seen on Thingiverse.
+//
+//#define ULTIPANEL
+
+//
+// PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3)
+// http://reprap.org/wiki/PanelOne
+//
+//#define PANEL_ONE
+
+//
+// GADGETS3D G3D LCD/SD Controller
+// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel
+//
+// Note: Usually sold with a blue PCB.
+//
+//#define G3D_PANEL
+
+//
+// RigidBot Panel V1.0
+// http://www.inventapart.com/
+//
+//#define RIGIDBOT_PANEL
+
+//
+// Makeboard 3D Printer Parts 3D Printer Mini Display 1602 Mini Controller
+// https://www.aliexpress.com/item/Micromake-Makeboard-3D-Printer-Parts-3D-Printer-Mini-Display-1602-Mini-Controller-Compatible-with-Ramps-1/32765887917.html
+//
+//#define MAKEBOARD_MINI_2_LINE_DISPLAY_1602
+
+//
+// ANET and Tronxy 20x4 Controller
+//
+//#define ZONESTAR_LCD // Requires ADC_KEYPAD_PIN to be assigned to an analog pin.
+ // This LCD is known to be susceptible to electrical interference
+ // which scrambles the display. Pressing any button clears it up.
+ // This is a LCD2004 display with 5 analog buttons.
+
+//
+// Generic 16x2, 16x4, 20x2, or 20x4 character-based LCD.
+//
+//#define ULTRA_LCD
+
+//=============================================================================
+//======================== LCD / Controller Selection =========================
+//===================== (I2C and Shift-Register LCDs) =====================
+//=============================================================================
+
+//
+// CONTROLLER TYPE: I2C
+//
+// Note: These controllers require the installation of Arduino's LiquidCrystal_I2C
+// library. For more info: https://github.com/kiyoshigawa/LiquidCrystal_I2C
+//
+
+//
+// Elefu RA Board Control Panel
+// http://www.elefu.com/index.php?route=product/product&product_id=53
+//
+//#define RA_CONTROL_PANEL
+
+//
+// Sainsmart (YwRobot) LCD Displays
+//
+// These require F.Malpartida's LiquidCrystal_I2C library
+// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home
+//
+//#define LCD_SAINSMART_I2C_1602
+//#define LCD_SAINSMART_I2C_2004
+
+//
+// Generic LCM1602 LCD adapter
+//
+//#define LCM1602
+
+//
+// PANELOLU2 LCD with status LEDs,
+// separate encoder and click inputs.
+//
+// Note: This controller requires Arduino's LiquidTWI2 library v1.2.3 or later.
+// For more info: https://github.com/lincomatic/LiquidTWI2
+//
+// Note: The PANELOLU2 encoder click input can either be directly connected to
+// a pin (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).
+//
+//#define LCD_I2C_PANELOLU2
+
+//
+// Panucatt VIKI LCD with status LEDs,
+// integrated click & L/R/U/D buttons, separate encoder inputs.
+//
+//#define LCD_I2C_VIKI
+
+//
+// CONTROLLER TYPE: Shift register panels
+//
+
+//
+// 2-wire Non-latching LCD SR from https://goo.gl/aJJ4sH
+// LCD configuration: http://reprap.org/wiki/SAV_3D_LCD
+//
+//#define SAV_3DLCD
+
+//
+// 3-wire SR LCD with strobe using 74HC4094
+// https://github.com/mikeshub/SailfishLCD
+// Uses the code directly from Sailfish
+//
+//#define FF_INTERFACEBOARD
+
+//=============================================================================
+//======================= LCD / Controller Selection =======================
+//========================= (Graphical LCDs) ========================
+//=============================================================================
+
+//
+// CONTROLLER TYPE: Graphical 128x64 (DOGM)
+//
+// IMPORTANT: The U8glib library is required for Graphical Display!
+// https://github.com/olikraus/U8glib_Arduino
+//
+
+//
+// RepRapDiscount FULL GRAPHIC Smart Controller
+// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
+//
+//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
+
+//
+// ReprapWorld Graphical LCD
+// https://reprapworld.com/?products_details&products_id/1218
+//
+//#define REPRAPWORLD_GRAPHICAL_LCD
+
+//
+// Activate one of these if you have a Panucatt Devices
+// Viki 2.0 or mini Viki with Graphic LCD
+// http://panucatt.com
+//
+//#define VIKI2
+//#define miniVIKI
+
+//
+// MakerLab Mini Panel with graphic
+// controller and SD support - http://reprap.org/wiki/Mini_panel
+//
+//#define MINIPANEL
+
+//
+// MaKr3d Makr-Panel with graphic controller and SD support.
+// http://reprap.org/wiki/MaKr3d_MaKrPanel
+//
+//#define MAKRPANEL
+
+//
+// Adafruit ST7565 Full Graphic Controller.
+// https://github.com/eboston/Adafruit-ST7565-Full-Graphic-Controller/
+//
+//#define ELB_FULL_GRAPHIC_CONTROLLER
+
+//
+// BQ LCD Smart Controller shipped by
+// default with the BQ Hephestos 2 and Witbox 2.
+//
+//#define BQ_LCD_SMART_CONTROLLER
+
+//
+// Cartesio UI
+// http://mauk.cc/webshop/cartesio-shop/electronics/user-interface
+//
+//#define CARTESIO_UI
+
+//
+// LCD for Melzi Card with Graphical LCD
+//
+#define LCD_FOR_MELZI
+
+//
+// Original Ulticontroller from Ultimaker 2 printer with SSD1309 I2C display and encoder
+// https://github.com/Ultimaker/Ultimaker2/tree/master/1249_Ulticontroller_Board_(x1)
+//
+//#define ULTI_CONTROLLER
+
+//
+// MKS MINI12864 with graphic controller and SD support
+// https://reprap.org/wiki/MKS_MINI_12864
+//
+//#define MKS_MINI_12864
+
+//
+// FYSETC variant of the MINI12864 graphic controller with SD support
+// https://wiki.fysetc.com/Mini12864_Panel/
+//
+//#define FYSETC_MINI_12864_X_X // Type C/D/E/F. No tunable RGB Backlight by default
+//#define FYSETC_MINI_12864_1_2 // Type C/D/E/F. Simple RGB Backlight (always on)
+//#define FYSETC_MINI_12864_2_0 // Type A/B. Discreet RGB Backlight
+//#define FYSETC_MINI_12864_2_1 // Type A/B. Neopixel RGB Backlight
+
+//
+// Factory display for Creality CR-10
+// https://www.aliexpress.com/item/Universal-LCD-12864-3D-Printer-Display-Screen-With-Encoder-For-CR-10-CR-7-Model/32833148327.html
+//
+// This is RAMPS-compatible using a single 10-pin connector.
+// (For CR-10 owners who want to replace the Melzi Creality board but retain the display)
+//
+//#define CR10_STOCKDISPLAY
+
+//
+// ANET and Tronxy Graphical Controller
+//
+// Anet 128x64 full graphics lcd with rotary encoder as used on Anet A6
+// A clone of the RepRapDiscount full graphics display but with
+// different pins/wiring (see pins_ANET_10.h).
+//
+//#define ANET_FULL_GRAPHICS_LCD
+
+//
+// AZSMZ 12864 LCD with SD
+// https://www.aliexpress.com/store/product/3D-printer-smart-controller-SMART-RAMPS-OR-RAMPS-1-4-LCD-12864-LCD-control-panel-green/2179173_32213636460.html
+//
+//#define AZSMZ_12864
+
+//
+// Silvergate GLCD controller
+// http://github.com/android444/Silvergate
+//
+//#define SILVER_GATE_GLCD_CONTROLLER
+
+//=============================================================================
+//============================== OLED Displays ==============================
+//=============================================================================
+
+//
+// SSD1306 OLED full graphics generic display
+//
+//#define U8GLIB_SSD1306
+
+//
+// SAV OLEd LCD module support using either SSD1306 or SH1106 based LCD modules
+//
+//#define SAV_3DGLCD
+#if ENABLED(SAV_3DGLCD)
+ #define U8GLIB_SSD1306
+ //#define U8GLIB_SH1106
+#endif
+
+//
+// TinyBoy2 128x64 OLED / Encoder Panel
+//
+//#define OLED_PANEL_TINYBOY2
+
+//
+// MKS OLED 1.3" 128 × 64 FULL GRAPHICS CONTROLLER
+// http://reprap.org/wiki/MKS_12864OLED
+//
+// Tiny, but very sharp OLED display
+//
+//#define MKS_12864OLED // Uses the SH1106 controller (default)
+//#define MKS_12864OLED_SSD1306 // Uses the SSD1306 controller
+
+//
+// Einstart S OLED SSD1306
+//
+//#define U8GLIB_SH1106_EINSTART
+
+//
+// Overlord OLED display/controller with i2c buzzer and LEDs
+//
+//#define OVERLORD_OLED
+
+//=============================================================================
+//========================== Extensible UI Displays ===========================
+//=============================================================================
+
+//
+// DGUS Touch Display with DWIN OS
+//
+//#define DGUS_LCD
+
+//
+// Touch-screen LCD for Malyan M200 printers
+//
+//#define MALYAN_LCD
+
+//
+// LulzBot Color Touch UI for FTDI EVE (FT800/FT810) displays
+// See Configuration_adv.h for all configuration options.
+//
+//#define LULZBOT_TOUCH_UI
+
+//
+// Third-party or vendor-customized controller interfaces.
+// Sources should be installed in 'src/lcd/extensible_ui'.
+//
+//#define EXTENSIBLE_UI
+
+//=============================================================================
+//=============================== Graphical TFTs ==============================
+//=============================================================================
+
+//
+// FSMC display (MKS Robin, Alfawise U20, JGAurora A5S, REXYZ A1, etc.)
+//
+//#define FSMC_GRAPHICAL_TFT
+
+//=============================================================================
+//============================ Other Controllers ============================
+//=============================================================================
+
+//
+// ADS7843/XPT2046 ADC Touchscreen such as ILI9341 2.8
+//
+//#define TOUCH_BUTTONS
+#if ENABLED(TOUCH_BUTTONS)
+ #define BUTTON_DELAY_EDIT 50 // (ms) Button repeat delay for edit screens
+ #define BUTTON_DELAY_MENU 250 // (ms) Button repeat delay for menus
+
+ #define XPT2046_X_CALIBRATION 12316
+ #define XPT2046_Y_CALIBRATION -8981
+ #define XPT2046_X_OFFSET -43
+ #define XPT2046_Y_OFFSET 257
+#endif
+
+//
+// RepRapWorld REPRAPWORLD_KEYPAD v1.1
+// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
+//
+//#define REPRAPWORLD_KEYPAD
+//#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0 // (mm) Distance to move per key-press
+
+//=============================================================================
+//=============================== Extra Features ==============================
+//=============================================================================
+
+// @section extras
+
+// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino
+//#define FAST_PWM_FAN
+
+// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
+// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
+// is too low, you should also increment SOFT_PWM_SCALE.
+//#define FAN_SOFT_PWM
+
+// Incrementing this by 1 will double the software PWM frequency,
+// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
+// However, control resolution will be halved for each increment;
+// at zero value, there are 128 effective control positions.
+// :[0,1,2,3,4,5,6,7]
+#define SOFT_PWM_SCALE 0
+
+// If SOFT_PWM_SCALE is set to a value higher than 0, dithering can
+// be used to mitigate the associated resolution loss. If enabled,
+// some of the PWM cycles are stretched so on average the desired
+// duty cycle is attained.
+//#define SOFT_PWM_DITHER
+
+// Temperature status LEDs that display the hotend and bed temperature.
+// If all hotends, bed temperature, and target temperature are under 54C
+// then the BLUE led is on. Otherwise the RED led is on. (1C hysteresis)
+//#define TEMP_STAT_LEDS
+
+// SkeinForge sends the wrong arc g-codes when using Arc Point as fillet procedure
+//#define SF_ARC_FIX
+
+// Support for the BariCUDA Paste Extruder
+//#define BARICUDA
+
+// Support for BlinkM/CyzRgb
+//#define BLINKM
+
+// Support for PCA9632 PWM LED driver
+//#define PCA9632
+
+// Support for PCA9533 PWM LED driver
+// https://github.com/mikeshub/SailfishRGB_LED
+//#define PCA9533
+
+/**
+ * RGB LED / LED Strip Control
+ *
+ * Enable support for an RGB LED connected to 5V digital pins, or
+ * an RGB Strip connected to MOSFETs controlled by digital pins.
+ *
+ * Adds the M150 command to set the LED (or LED strip) color.
+ * If pins are PWM capable (e.g., 4, 5, 6, 11) then a range of
+ * luminance values can be set from 0 to 255.
+ * For Neopixel LED an overall brightness parameter is also available.
+ *
+ * *** CAUTION ***
+ * LED Strips require a MOSFET Chip between PWM lines and LEDs,
+ * as the Arduino cannot handle the current the LEDs will require.
+ * Failure to follow this precaution can destroy your Arduino!
+ * NOTE: A separate 5V power supply is required! The Neopixel LED needs
+ * more current than the Arduino 5V linear regulator can produce.
+ * *** CAUTION ***
+ *
+ * LED Type. Enable only one of the following two options.
+ *
+ */
+//#define RGB_LED
+//#define RGBW_LED
+
+#if EITHER(RGB_LED, RGBW_LED)
+ //#define RGB_LED_R_PIN 34
+ //#define RGB_LED_G_PIN 43
+ //#define RGB_LED_B_PIN 35
+ //#define RGB_LED_W_PIN -1
+#endif
+
+// Support for Adafruit Neopixel LED driver
+//#define NEOPIXEL_LED
+#if ENABLED(NEOPIXEL_LED)
+ #define NEOPIXEL_TYPE NEO_GRBW // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h)
+ #define NEOPIXEL_PIN 4 // LED driving pin
+ //#define NEOPIXEL2_TYPE NEOPIXEL_TYPE
+ //#define NEOPIXEL2_PIN 5
+ #define NEOPIXEL_PIXELS 30 // Number of LEDs in the strip, larger of 2 strips if 2 neopixel strips are used
+ #define NEOPIXEL_IS_SEQUENTIAL // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once.
+ #define NEOPIXEL_BRIGHTNESS 127 // Initial brightness (0-255)
+ //#define NEOPIXEL_STARTUP_TEST // Cycle through colors at startup
+
+ // Use a single Neopixel LED for static (background) lighting
+ //#define NEOPIXEL_BKGD_LED_INDEX 0 // Index of the LED to use
+ //#define NEOPIXEL_BKGD_COLOR { 255, 255, 255, 0 } // R, G, B, W
+#endif
+
+/**
+ * Printer Event LEDs
+ *
+ * During printing, the LEDs will reflect the printer status:
+ *
+ * - Gradually change from blue to violet as the heated bed gets to target temp
+ * - Gradually change from violet to red as the hotend gets to temperature
+ * - Change to white to illuminate work surface
+ * - Change to green once print has finished
+ * - Turn off after the print has finished and the user has pushed a button
+ */
+#if ANY(BLINKM, RGB_LED, RGBW_LED, PCA9632, PCA9533, NEOPIXEL_LED)
+ #define PRINTER_EVENT_LEDS
+#endif
+
+/**
+ * R/C SERVO support
+ * Sponsored by TrinityLabs, Reworked by codexmas
+ */
+
+/**
+ * Number of servos
+ *
+ * For some servo-related options NUM_SERVOS will be set automatically.
+ * Set this manually if there are extra servos needing manual control.
+ * Leave undefined or set to 0 to entirely disable the servo subsystem.
+ */
+//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
+
+// (ms) Delay before the next move will start, to give the servo time to reach its target angle.
+// 300ms is a good value but you can try less delay.
+// If the servo can't reach the requested position, increase it.
+#define SERVO_DELAY { 300 }
+
+// Only power servos during movement, otherwise leave off to prevent jitter
+//#define DEACTIVATE_SERVOS_AFTER_MOVE
+
+// Allow servo angle to be edited and saved to EEPROM
+//#define EDITABLE_SERVO_ANGLES
diff --git a/config/examples/Wanhao/Duplicator i3 2.1/Configuration_adv.h b/config/examples/Wanhao/Duplicator i3 2.1/Configuration_adv.h
new file mode 100644
index 000000000000..d6a06ff02a3b
--- /dev/null
+++ b/config/examples/Wanhao/Duplicator i3 2.1/Configuration_adv.h
@@ -0,0 +1,2728 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * Configuration_adv.h
+ *
+ * Advanced settings.
+ * Only change these if you know exactly what you're doing.
+ * Some of these settings can damage your printer if improperly set!
+ *
+ * Basic settings can be found in Configuration.h
+ *
+ */
+#define CONFIGURATION_ADV_H_VERSION 020000
+
+// @section temperature
+
+//===========================================================================
+//=============================Thermal Settings ============================
+//===========================================================================
+
+//
+// Custom Thermistor 1000 parameters
+//
+#if TEMP_SENSOR_0 == 1000
+ #define HOTEND0_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND0_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND0_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_1 == 1000
+ #define HOTEND1_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND1_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND1_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_2 == 1000
+ #define HOTEND2_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND2_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND2_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_3 == 1000
+ #define HOTEND3_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND3_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND3_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_4 == 1000
+ #define HOTEND4_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND4_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND4_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_5 == 1000
+ #define HOTEND5_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define HOTEND5_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define HOTEND5_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_BED == 1000
+ #define BED_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define BED_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define BED_BETA 3950 // Beta value
+#endif
+
+#if TEMP_SENSOR_CHAMBER == 1000
+ #define CHAMBER_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
+ #define CHAMBER_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
+ #define CHAMBER_BETA 3950 // Beta value
+#endif
+
+//
+// Hephestos 2 24V heated bed upgrade kit.
+// https://store.bq.com/en/heated-bed-kit-hephestos2
+//
+//#define HEPHESTOS2_HEATED_BED_KIT
+#if ENABLED(HEPHESTOS2_HEATED_BED_KIT)
+ #undef TEMP_SENSOR_BED
+ #define TEMP_SENSOR_BED 70
+ #define HEATER_BED_INVERTING true
+#endif
+
+/**
+ * Heated Chamber settings
+ */
+#if TEMP_SENSOR_CHAMBER
+ #define CHAMBER_MINTEMP 5
+ #define CHAMBER_MAXTEMP 60
+ #define TEMP_CHAMBER_HYSTERESIS 1 // (°C) Temperature proximity considered "close enough" to the target
+ //#define CHAMBER_LIMIT_SWITCHING
+ //#define HEATER_CHAMBER_PIN 44 // Chamber heater on/off pin
+ //#define HEATER_CHAMBER_INVERTING false
+#endif
+
+#if DISABLED(PIDTEMPBED)
+ #define BED_CHECK_INTERVAL 5000 // ms between checks in bang-bang control
+ #if ENABLED(BED_LIMIT_SWITCHING)
+ #define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
+ #endif
+#endif
+
+/**
+ * Thermal Protection provides additional protection to your printer from damage
+ * and fire. Marlin always includes safe min and max temperature ranges which
+ * protect against a broken or disconnected thermistor wire.
+ *
+ * The issue: If a thermistor falls out, it will report the much lower
+ * temperature of the air in the room, and the the firmware will keep
+ * the heater on.
+ *
+ * The solution: Once the temperature reaches the target, start observing.
+ * If the temperature stays too far below the target (hysteresis) for too
+ * long (period), the firmware will halt the machine as a safety precaution.
+ *
+ * If you get false positives for "Thermal Runaway", increase
+ * THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD
+ */
+#if ENABLED(THERMAL_PROTECTION_HOTENDS)
+ #define THERMAL_PROTECTION_PERIOD 40 // Seconds
+ #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius
+
+ //#define ADAPTIVE_FAN_SLOWING // Slow part cooling fan if temperature drops
+ #if BOTH(ADAPTIVE_FAN_SLOWING, PIDTEMP)
+ //#define NO_FAN_SLOWING_IN_PID_TUNING // Don't slow fan speed during M303
+ #endif
+
+ /**
+ * Whenever an M104, M109, or M303 increases the target temperature, the
+ * firmware will wait for the WATCH_TEMP_PERIOD to expire. If the temperature
+ * hasn't increased by WATCH_TEMP_INCREASE degrees, the machine is halted and
+ * requires a hard reset. This test restarts with any M104/M109/M303, but only
+ * if the current temperature is far enough below the target for a reliable
+ * test.
+ *
+ * If you get false positives for "Heating failed", increase WATCH_TEMP_PERIOD
+ * and/or decrease WATCH_TEMP_INCREASE. WATCH_TEMP_INCREASE should not be set
+ * below 2.
+ */
+ #define WATCH_TEMP_PERIOD 20 // Seconds
+ #define WATCH_TEMP_INCREASE 2 // Degrees Celsius
+#endif
+
+/**
+ * Thermal Protection parameters for the bed are just as above for hotends.
+ */
+#if ENABLED(THERMAL_PROTECTION_BED)
+ #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
+ #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
+
+ /**
+ * As described above, except for the bed (M140/M190/M303).
+ */
+ #define WATCH_BED_TEMP_PERIOD 60 // Seconds
+ #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
+#endif
+
+/**
+ * Thermal Protection parameters for the heated chamber.
+ */
+#if ENABLED(THERMAL_PROTECTION_CHAMBER)
+ #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds
+ #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius
+
+ /**
+ * Heated chamber watch settings (M141/M191).
+ */
+ #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds
+ #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius
+#endif
+
+#if ENABLED(PIDTEMP)
+ // Add an experimental additional term to the heater power, proportional to the extrusion speed.
+ // A well-chosen Kc value should add just enough power to melt the increased material volume.
+ //#define PID_EXTRUSION_SCALING
+ #if ENABLED(PID_EXTRUSION_SCALING)
+ #define DEFAULT_Kc (100) //heating power=Kc*(e_speed)
+ #define LPQ_MAX_LEN 50
+ #endif
+#endif
+
+/**
+ * Automatic Temperature:
+ * The hotend target temperature is calculated by all the buffered lines of gcode.
+ * The maximum buffered steps/sec of the extruder motor is called "se".
+ * Start autotemp mode with M109 S B F
+ * The target temperature is set to mintemp+factor*se[steps/sec] and is limited by
+ * mintemp and maxtemp. Turn this off by executing M109 without F*
+ * Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp.
+ * On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode
+ */
+#define AUTOTEMP
+#if ENABLED(AUTOTEMP)
+ #define AUTOTEMP_OLDWEIGHT 0.98
+#endif
+
+// Show extra position information in M114
+//#define M114_DETAIL
+
+// Show Temperature ADC value
+// Enable for M105 to include ADC values read from temperature sensors.
+//#define SHOW_TEMP_ADC_VALUES
+
+/**
+ * High Temperature Thermistor Support
+ *
+ * Thermistors able to support high temperature tend to have a hard time getting
+ * good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP
+ * will probably be caught when the heating element first turns on during the
+ * preheating process, which will trigger a min_temp_error as a safety measure
+ * and force stop everything.
+ * To circumvent this limitation, we allow for a preheat time (during which,
+ * min_temp_error won't be triggered) and add a min_temp buffer to handle
+ * aberrant readings.
+ *
+ * If you want to enable this feature for your hotend thermistor(s)
+ * uncomment and set values > 0 in the constants below
+ */
+
+// The number of consecutive low temperature errors that can occur
+// before a min_temp_error is triggered. (Shouldn't be more than 10.)
+//#define MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED 0
+
+// The number of milliseconds a hotend will preheat before starting to check
+// the temperature. This value should NOT be set to the time it takes the
+// hot end to reach the target temperature, but the time it takes to reach
+// the minimum temperature your thermistor can read. The lower the better/safer.
+// This shouldn't need to be more than 30 seconds (30000)
+//#define MILLISECONDS_PREHEAT_TIME 0
+
+// @section extruder
+
+// Extruder runout prevention.
+// If the machine is idle and the temperature over MINTEMP
+// then extrude some filament every couple of SECONDS.
+//#define EXTRUDER_RUNOUT_PREVENT
+#if ENABLED(EXTRUDER_RUNOUT_PREVENT)
+ #define EXTRUDER_RUNOUT_MINTEMP 190
+ #define EXTRUDER_RUNOUT_SECONDS 30
+ #define EXTRUDER_RUNOUT_SPEED 1500 // (mm/m)
+ #define EXTRUDER_RUNOUT_EXTRUDE 5 // (mm)
+#endif
+
+// @section temperature
+
+// Calibration for AD595 / AD8495 sensor to adjust temperature measurements.
+// The final temperature is calculated as (measuredTemp * GAIN) + OFFSET.
+#define TEMP_SENSOR_AD595_OFFSET 0.0
+#define TEMP_SENSOR_AD595_GAIN 1.0
+#define TEMP_SENSOR_AD8495_OFFSET 0.0
+#define TEMP_SENSOR_AD8495_GAIN 1.0
+
+/**
+ * Controller Fan
+ * To cool down the stepper drivers and MOSFETs.
+ *
+ * The fan will turn on automatically whenever any stepper is enabled
+ * and turn off after a set period after all steppers are turned off.
+ */
+//#define USE_CONTROLLER_FAN
+#if ENABLED(USE_CONTROLLER_FAN)
+ //#define CONTROLLER_FAN_PIN -1 // Set a custom pin for the controller fan
+ #define CONTROLLERFAN_SECS 60 // Duration in seconds for the fan to run after all motors are disabled
+ #define CONTROLLERFAN_SPEED 255 // 255 == full speed
+ //#define CONTROLLERFAN_SPEED_Z_ONLY 127 // Reduce noise on machines that keep Z enabled
+#endif
+
+// When first starting the main fan, run it at full speed for the
+// given number of milliseconds. This gets the fan spinning reliably
+// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
+//#define FAN_KICKSTART_TIME 100
+
+/**
+ * PWM Fan Scaling
+ *
+ * Define the min/max speeds for PWM fans (as set with M106).
+ *
+ * With these options the M106 0-255 value range is scaled to a subset
+ * to ensure that the fan has enough power to spin, or to run lower
+ * current fans with higher current. (e.g., 5V/12V fans with 12V/24V)
+ * Value 0 always turns off the fan.
+ *
+ * Define one or both of these to override the default 0-255 range.
+ */
+//#define FAN_MIN_PWM 50
+//#define FAN_MAX_PWM 128
+
+/**
+ * FAST PWM FAN Settings
+ *
+ * Use to change the FAST FAN PWM frequency (if enabled in Configuration.h)
+ * Combinations of PWM Modes, prescale values and TOP resolutions are used internally to produce a
+ * frequency as close as possible to the desired frequency.
+ *
+ * FAST_PWM_FAN_FREQUENCY [undefined by default]
+ * Set this to your desired frequency.
+ * If left undefined this defaults to F = F_CPU/(2*255*1)
+ * ie F = 31.4 Khz on 16 MHz microcontrollers or F = 39.2 KHz on 20 MHz microcontrollers
+ * These defaults are the same as with the old FAST_PWM_FAN implementation - no migration is required
+ * NOTE: Setting very low frequencies (< 10 Hz) may result in unexpected timer behavior.
+ *
+ * USE_OCR2A_AS_TOP [undefined by default]
+ * Boards that use TIMER2 for PWM have limitations resulting in only a few possible frequencies on TIMER2:
+ * 16MHz MCUs: [62.5KHz, 31.4KHz (default), 7.8KHz, 3.92KHz, 1.95KHz, 977Hz, 488Hz, 244Hz, 60Hz, 122Hz, 30Hz]
+ * 20MHz MCUs: [78.1KHz, 39.2KHz (default), 9.77KHz, 4.9KHz, 2.44KHz, 1.22KHz, 610Hz, 305Hz, 153Hz, 76Hz, 38Hz]
+ * A greater range can be achieved by enabling USE_OCR2A_AS_TOP. But note that this option blocks the use of
+ * PWM on pin OC2A. Only use this option if you don't need PWM on 0C2A. (Check your schematic.)
+ * USE_OCR2A_AS_TOP sacrifices duty cycle control resolution to achieve this broader range of frequencies.
+ */
+#if ENABLED(FAST_PWM_FAN)
+ //#define FAST_PWM_FAN_FREQUENCY 31400
+ //#define USE_OCR2A_AS_TOP
+#endif
+
+// @section extruder
+
+/**
+ * Extruder cooling fans
+ *
+ * Extruder auto fans automatically turn on when their extruders'
+ * temperatures go above EXTRUDER_AUTO_FAN_TEMPERATURE.
+ *
+ * Your board's pins file specifies the recommended pins. Override those here
+ * or set to -1 to disable completely.
+ *
+ * Multiple extruders can be assigned to the same pin in which case
+ * the fan will turn on when any selected extruder is above the threshold.
+ */
+#define E0_AUTO_FAN_PIN -1
+#define E1_AUTO_FAN_PIN -1
+#define E2_AUTO_FAN_PIN -1
+#define E3_AUTO_FAN_PIN -1
+#define E4_AUTO_FAN_PIN -1
+#define E5_AUTO_FAN_PIN -1
+#define CHAMBER_AUTO_FAN_PIN -1
+
+#define EXTRUDER_AUTO_FAN_TEMPERATURE 50
+#define EXTRUDER_AUTO_FAN_SPEED 255 // 255 == full speed
+#define CHAMBER_AUTO_FAN_TEMPERATURE 30
+#define CHAMBER_AUTO_FAN_SPEED 255
+
+/**
+ * Part-Cooling Fan Multiplexer
+ *
+ * This feature allows you to digitally multiplex the fan output.
+ * The multiplexer is automatically switched at tool-change.
+ * Set FANMUX[012]_PINs below for up to 2, 4, or 8 multiplexed fans.
+ */
+#define FANMUX0_PIN -1
+#define FANMUX1_PIN -1
+#define FANMUX2_PIN -1
+
+/**
+ * M355 Case Light on-off / brightness
+ */
+//#define CASE_LIGHT_ENABLE
+#if ENABLED(CASE_LIGHT_ENABLE)
+ //#define CASE_LIGHT_PIN 4 // Override the default pin if needed
+ #define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
+ #define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
+ #define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
+ //#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
+ //#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
+ #if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
+ #define CASE_LIGHT_NEOPIXEL_COLOR { 255, 255, 255, 255 } // { Red, Green, Blue, White }
+ #endif
+#endif
+
+// @section homing
+
+// If you want endstops to stay on (by default) even when not homing
+// enable this option. Override at any time with M120, M121.
+//#define ENDSTOPS_ALWAYS_ON_DEFAULT
+
+// @section extras
+
+//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
+
+// Employ an external closed loop controller. Override pins here if needed.
+//#define EXTERNAL_CLOSED_LOOP_CONTROLLER
+#if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER)
+ //#define CLOSED_LOOP_ENABLE_PIN -1
+ //#define CLOSED_LOOP_MOVE_COMPLETE_PIN -1
+#endif
+
+/**
+ * Dual Steppers / Dual Endstops
+ *
+ * This section will allow you to use extra E drivers to drive a second motor for X, Y, or Z axes.
+ *
+ * For example, set X_DUAL_STEPPER_DRIVERS setting to use a second motor. If the motors need to
+ * spin in opposite directions set INVERT_X2_VS_X_DIR. If the second motor needs its own endstop
+ * set X_DUAL_ENDSTOPS. This can adjust for "racking." Use X2_USE_ENDSTOP to set the endstop plug
+ * that should be used for the second endstop. Extra endstops will appear in the output of 'M119'.
+ *
+ * Use X_DUAL_ENDSTOP_ADJUSTMENT to adjust for mechanical imperfection. After homing both motors
+ * this offset is applied to the X2 motor. To find the offset home the X axis, and measure the error
+ * in X2. Dual endstop offsets can be set at runtime with 'M666 X Y Z'.
+ */
+
+//#define X_DUAL_STEPPER_DRIVERS
+#if ENABLED(X_DUAL_STEPPER_DRIVERS)
+ #define INVERT_X2_VS_X_DIR true // Set 'true' if X motors should rotate in opposite directions
+ //#define X_DUAL_ENDSTOPS
+ #if ENABLED(X_DUAL_ENDSTOPS)
+ #define X2_USE_ENDSTOP _XMAX_
+ #define X_DUAL_ENDSTOPS_ADJUSTMENT 0
+ #endif
+#endif
+
+//#define Y_DUAL_STEPPER_DRIVERS
+#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
+ #define INVERT_Y2_VS_Y_DIR true // Set 'true' if Y motors should rotate in opposite directions
+ //#define Y_DUAL_ENDSTOPS
+ #if ENABLED(Y_DUAL_ENDSTOPS)
+ #define Y2_USE_ENDSTOP _YMAX_
+ #define Y_DUAL_ENDSTOPS_ADJUSTMENT 0
+ #endif
+#endif
+
+//#define Z_DUAL_STEPPER_DRIVERS
+#if ENABLED(Z_DUAL_STEPPER_DRIVERS)
+ //#define Z_DUAL_ENDSTOPS
+ #if ENABLED(Z_DUAL_ENDSTOPS)
+ #define Z2_USE_ENDSTOP _XMAX_
+ #define Z_DUAL_ENDSTOPS_ADJUSTMENT 0
+ #endif
+#endif
+
+//#define Z_TRIPLE_STEPPER_DRIVERS
+#if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
+ //#define Z_TRIPLE_ENDSTOPS
+ #if ENABLED(Z_TRIPLE_ENDSTOPS)
+ #define Z2_USE_ENDSTOP _XMAX_
+ #define Z3_USE_ENDSTOP _YMAX_
+ #define Z_TRIPLE_ENDSTOPS_ADJUSTMENT2 0
+ #define Z_TRIPLE_ENDSTOPS_ADJUSTMENT3 0
+ #endif
+#endif
+
+/**
+ * Dual X Carriage
+ *
+ * This setup has two X carriages that can move independently, each with its own hotend.
+ * The carriages can be used to print an object with two colors or materials, or in
+ * "duplication mode" it can print two identical or X-mirrored objects simultaneously.
+ * The inactive carriage is parked automatically to prevent oozing.
+ * X1 is the left carriage, X2 the right. They park and home at opposite ends of the X axis.
+ * By default the X2 stepper is assigned to the first unused E plug on the board.
+ *
+ * The following Dual X Carriage modes can be selected with M605 S:
+ *
+ * 0 : (FULL_CONTROL) The slicer has full control over both X-carriages and can achieve optimal travel
+ * results as long as it supports dual X-carriages. (M605 S0)
+ *
+ * 1 : (AUTO_PARK) The firmware automatically parks and unparks the X-carriages on tool-change so
+ * that additional slicer support is not required. (M605 S1)
+ *
+ * 2 : (DUPLICATION) The firmware moves the second X-carriage and extruder in synchronization with
+ * the first X-carriage and extruder, to print 2 copies of the same object at the same time.
+ * Set the constant X-offset and temperature differential with M605 S2 X[offs] R[deg] and
+ * follow with M605 S2 to initiate duplicated movement.
+ *
+ * 3 : (MIRRORED) Formbot/Vivedino-inspired mirrored mode in which the second extruder duplicates
+ * the movement of the first except the second extruder is reversed in the X axis.
+ * Set the initial X offset and temperature differential with M605 S2 X[offs] R[deg] and
+ * follow with M605 S3 to initiate mirrored movement.
+ */
+//#define DUAL_X_CARRIAGE
+#if ENABLED(DUAL_X_CARRIAGE)
+ #define X1_MIN_POS X_MIN_POS // Set to X_MIN_POS
+ #define X1_MAX_POS X_BED_SIZE // Set a maximum so the first X-carriage can't hit the parked second X-carriage
+ #define X2_MIN_POS 80 // Set a minimum to ensure the second X-carriage can't hit the parked first X-carriage
+ #define X2_MAX_POS 353 // Set this to the distance between toolheads when both heads are homed
+ #define X2_HOME_DIR 1 // Set to 1. The second X-carriage always homes to the maximum endstop position
+ #define X2_HOME_POS X2_MAX_POS // Default X2 home position. Set to X2_MAX_POS.
+ // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software
+ // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops
+ // without modifying the firmware (through the "M218 T1 X???" command).
+ // Remember: you should set the second extruder x-offset to 0 in your slicer.
+
+ // This is the default power-up mode which can be later using M605.
+ #define DEFAULT_DUAL_X_CARRIAGE_MODE DXC_AUTO_PARK_MODE
+
+ // Default x offset in duplication mode (typically set to half print bed width)
+ #define DEFAULT_DUPLICATION_X_OFFSET 100
+
+#endif // DUAL_X_CARRIAGE
+
+// Activate a solenoid on the active extruder with M380. Disable all with M381.
+// Define SOL0_PIN, SOL1_PIN, etc., for each extruder that has a solenoid.
+//#define EXT_SOLENOID
+
+// @section homing
+
+// Homing hits each endstop, retracts by these distances, then does a slower bump.
+#define X_HOME_BUMP_MM 5
+#define Y_HOME_BUMP_MM 5
+#define Z_HOME_BUMP_MM 2
+#define HOMING_BUMP_DIVISOR { 2, 2, 4 } // Re-Bump Speed Divisor (Divides the Homing Feedrate)
+//#define QUICK_HOME // If homing includes X and Y, do a diagonal move initially
+//#define HOMING_BACKOFF_MM { 2, 2, 2 } // (mm) Move away from the endstops after homing
+
+// When G28 is called, this option will make Y home before X
+//#define HOME_Y_BEFORE_X
+
+// Enable this if X or Y can't home without homing the other axis first.
+//#define CODEPENDENT_XY_HOMING
+
+#if ENABLED(BLTOUCH)
+ /**
+ * Either: Use the defaults (recommended) or: For special purposes, use the following DEFINES
+ * Do not activate settings that the probe might not understand. Clones might misunderstand
+ * advanced commands.
+ *
+ * Note: If the probe is not deploying, check a "Cmd: Reset" and "Cmd: Self-Test" and then
+ * check the wiring of the BROWN, RED and ORANGE wires.
+ *
+ * Note: If the trigger signal of your probe is not being recognized, it has been very often
+ * because the BLACK and WHITE wires needed to be swapped. They are not "interchangeable"
+ * like they would be with a real switch. So please check the wiring first.
+ *
+ * Settings for all BLTouch and clone probes:
+ */
+
+ // Safety: The probe needs time to recognize the command.
+ // Minimum command delay (ms). Enable and increase if needed.
+ //#define BLTOUCH_DELAY 500
+
+ /**
+ * Settings for BLTOUCH Classic 1.2, 1.3 or BLTouch Smart 1.0, 2.0, 2.2, 3.0, 3.1, and most clones:
+ */
+
+ // Feature: Switch into SW mode after a deploy. It makes the output pulse longer. Can be useful
+ // in special cases, like noisy or filtered input configurations.
+ //#define BLTOUCH_FORCE_SW_MODE
+
+ /**
+ * Settings for BLTouch Smart 3.0 and 3.1
+ * Summary:
+ * - Voltage modes: 5V and OD (open drain - "logic voltage free") output modes
+ * - High-Speed mode
+ * - Disable LCD voltage options
+ */
+
+ /**
+ * Danger: Don't activate 5V mode unless attached to a 5V-tolerant controller!
+ * V3.0 or 3.1: Set default mode to 5V mode at Marlin startup.
+ * If disabled, OD mode is the hard-coded default on 3.0
+ * On startup, Marlin will compare its eeprom to this vale. If the selected mode
+ * differs, a mode set eeprom write will be completed at initialization.
+ * Use the option below to force an eeprom write to a V3.1 probe regardless.
+ */
+ //#define BLTOUCH_SET_5V_MODE
+
+ /**
+ * Safety: Activate if connecting a probe with an unknown voltage mode.
+ * V3.0: Set a probe into mode selected above at Marlin startup. Required for 5V mode on 3.0
+ * V3.1: Force a probe with unknown mode into selected mode at Marlin startup ( = Probe EEPROM write )
+ * To preserve the life of the probe, use this once then turn it off and re-flash.
+ */
+ //#define BLTOUCH_FORCE_MODE_SET
+
+ /**
+ * Use "HIGH SPEED" mode for probing.
+ * Danger: Disable if your probe sometimes fails. Only suitable for stable well-adjusted systems.
+ * This feature was designed for Delta's with very fast Z moves however higher speed cartesians may function
+ * If the machine cannot raise the probe fast enough after a trigger, it may enter a fault state.
+ */
+ //#define BLTOUCH_HS_MODE
+
+ // Safety: Enable voltage mode settings in the LCD menu.
+ //#define BLTOUCH_LCD_VOLTAGE_MENU
+
+#endif // BLTOUCH
+
+/**
+ * Z Steppers Auto-Alignment
+ * Add the G34 command to align multiple Z steppers using a bed probe.
+ */
+//#define Z_STEPPER_AUTO_ALIGN
+#if ENABLED(Z_STEPPER_AUTO_ALIGN)
+ // Define probe X and Y positions for Z1, Z2 [, Z3]
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_ITERATIONS 3
+
+ // Enable to restore leveling setup after operation
+ #define RESTORE_LEVELING_AFTER_G34
+
+ // On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
+ #define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
+
+ // Stop criterion. If the accuracy is better than this stop iterating early
+ #define Z_STEPPER_ALIGN_ACC 0.02
+#endif
+
+// @section motion
+
+#define AXIS_RELATIVE_MODES { false, false, false, false }
+
+// Add a Duplicate option for well-separated conjoined nozzles
+//#define MULTI_NOZZLE_DUPLICATION
+
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
+#define INVERT_X_STEP_PIN false
+#define INVERT_Y_STEP_PIN false
+#define INVERT_Z_STEP_PIN false
+#define INVERT_E_STEP_PIN false
+
+// Default stepper release if idle. Set to 0 to deactivate.
+// Steppers will shut down DEFAULT_STEPPER_DEACTIVE_TIME seconds after the last move when DISABLE_INACTIVE_? is true.
+// Time can be set by M18 and M84.
+#define DEFAULT_STEPPER_DEACTIVE_TIME 120
+#define DISABLE_INACTIVE_X true
+#define DISABLE_INACTIVE_Y true
+#define DISABLE_INACTIVE_Z true // Set to false if the nozzle will fall down on your printed part when print has finished.
+#define DISABLE_INACTIVE_E true
+
+#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
+#define DEFAULT_MINTRAVELFEEDRATE 0.0
+
+//#define HOME_AFTER_DEACTIVATE // Require rehoming after steppers are deactivated
+
+// Minimum time that a segment needs to take if the buffer is emptied
+#define DEFAULT_MINSEGMENTTIME 20000 // (ms)
+
+// If defined the movements slow down when the look ahead buffer is only half full
+#define SLOWDOWN
+
+// Frequency limit
+// See nophead's blog for more info
+// Not working O
+//#define XY_FREQUENCY_LIMIT 15
+
+// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
+// of the buffer and all stops. This should not be much greater than zero and should only be changed
+// if unwanted behavior is observed on a user's machine when running at very slow speeds.
+#define MINIMUM_PLANNER_SPEED 0.05 // (mm/s)
+
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
+/**
+ * Automatic backlash, position and hotend offset calibration
+ *
+ * Enable G425 to run automatic calibration using an electrically-
+ * conductive cube, bolt, or washer mounted on the bed.
+ *
+ * G425 uses the probe to touch the top and sides of the calibration object
+ * on the bed and measures and/or correct positional offsets, axis backlash
+ * and hotend offsets.
+ *
+ * Note: HOTEND_OFFSET and CALIBRATION_OBJECT_CENTER must be set to within
+ * ±5mm of true values for G425 to succeed.
+ */
+//#define CALIBRATION_GCODE
+#if ENABLED(CALIBRATION_GCODE)
+
+ #define CALIBRATION_MEASUREMENT_RESOLUTION 0.01 // mm
+
+ #define CALIBRATION_FEEDRATE_SLOW 60 // mm/m
+ #define CALIBRATION_FEEDRATE_FAST 1200 // mm/m
+ #define CALIBRATION_FEEDRATE_TRAVEL 3000 // mm/m
+
+ // The following parameters refer to the conical section of the nozzle tip.
+ #define CALIBRATION_NOZZLE_TIP_HEIGHT 1.0 // mm
+ #define CALIBRATION_NOZZLE_OUTER_DIAMETER 2.0 // mm
+
+ // Uncomment to enable reporting (required for "G425 V", but consumes PROGMEM).
+ //#define CALIBRATION_REPORTING
+
+ // The true location and dimension the cube/bolt/washer on the bed.
+ #define CALIBRATION_OBJECT_CENTER { 264.0, -22.0, -2.0 } // mm
+ #define CALIBRATION_OBJECT_DIMENSIONS { 10.0, 10.0, 10.0 } // mm
+
+ // Comment out any sides which are unreachable by the probe. For best
+ // auto-calibration results, all sides must be reachable.
+ #define CALIBRATION_MEASURE_RIGHT
+ #define CALIBRATION_MEASURE_FRONT
+ #define CALIBRATION_MEASURE_LEFT
+ #define CALIBRATION_MEASURE_BACK
+
+ // Probing at the exact top center only works if the center is flat. If
+ // probing on a screwhead or hollow washer, probe near the edges.
+ //#define CALIBRATION_MEASURE_AT_TOP_EDGES
+
+ // Define pin which is read during calibration
+ #ifndef CALIBRATION_PIN
+ #define CALIBRATION_PIN -1 // Override in pins.h or set to -1 to use your Z endstop
+ #define CALIBRATION_PIN_INVERTING false // Set to true to invert the pin
+ //#define CALIBRATION_PIN_PULLDOWN
+ #define CALIBRATION_PIN_PULLUP
+ #endif
+#endif
+
+/**
+ * Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
+ * below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
+ * vibration and surface artifacts. The algorithm adapts to provide the best possible step smoothing at the
+ * lowest stepping frequencies.
+ */
+//#define ADAPTIVE_STEP_SMOOTHING
+
+/**
+ * Custom Microstepping
+ * Override as-needed for your setup. Up to 3 MS pins are supported.
+ */
+//#define MICROSTEP1 LOW,LOW,LOW
+//#define MICROSTEP2 HIGH,LOW,LOW
+//#define MICROSTEP4 LOW,HIGH,LOW
+//#define MICROSTEP8 HIGH,HIGH,LOW
+//#define MICROSTEP16 LOW,LOW,HIGH
+//#define MICROSTEP32 HIGH,LOW,HIGH
+
+// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU.
+#define MICROSTEP_MODES { 16, 16, 16, 16, 16, 16 } // [1,2,4,8,16]
+
+/**
+ * @section stepper motor current
+ *
+ * Some boards have a means of setting the stepper motor current via firmware.
+ *
+ * The power on motor currents are set by:
+ * PWM_MOTOR_CURRENT - used by MINIRAMBO & ULTIMAIN_2
+ * known compatible chips: A4982
+ * DIGIPOT_MOTOR_CURRENT - used by BQ_ZUM_MEGA_3D, RAMBO & SCOOVO_X9H
+ * known compatible chips: AD5206
+ * DAC_MOTOR_CURRENT_DEFAULT - used by PRINTRBOARD_REVF & RIGIDBOARD_V2
+ * known compatible chips: MCP4728
+ * DIGIPOT_I2C_MOTOR_CURRENTS - used by 5DPRINT, AZTEEG_X3_PRO, AZTEEG_X5_MINI_WIFI, MIGHTYBOARD_REVE
+ * known compatible chips: MCP4451, MCP4018
+ *
+ * Motor currents can also be set by M907 - M910 and by the LCD.
+ * M907 - applies to all.
+ * M908 - BQ_ZUM_MEGA_3D, RAMBO, PRINTRBOARD_REVF, RIGIDBOARD_V2 & SCOOVO_X9H
+ * M909, M910 & LCD - only PRINTRBOARD_REVF & RIGIDBOARD_V2
+ */
+//#define PWM_MOTOR_CURRENT { 1300, 1300, 1250 } // Values in milliamps
+//#define DIGIPOT_MOTOR_CURRENT { 135,135,135,135,135 } // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
+//#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
+
+// Use an I2C based DIGIPOT (e.g., Azteeg X3 Pro)
+//#define DIGIPOT_I2C
+#if ENABLED(DIGIPOT_I2C) && !defined(DIGIPOT_I2C_ADDRESS_A)
+ /**
+ * Common slave addresses:
+ *
+ * A (A shifted) B (B shifted) IC
+ * Smoothie 0x2C (0x58) 0x2D (0x5A) MCP4451
+ * AZTEEG_X3_PRO 0x2C (0x58) 0x2E (0x5C) MCP4451
+ * AZTEEG_X5_MINI 0x2C (0x58) 0x2E (0x5C) MCP4451
+ * AZTEEG_X5_MINI_WIFI 0x58 0x5C MCP4451
+ * MIGHTYBOARD_REVE 0x2F (0x5E) MCP4018
+ */
+ #define DIGIPOT_I2C_ADDRESS_A 0x2C // unshifted slave address for first DIGIPOT
+ #define DIGIPOT_I2C_ADDRESS_B 0x2D // unshifted slave address for second DIGIPOT
+#endif
+
+//#define DIGIPOT_MCP4018 // Requires library from https://github.com/stawel/SlowSoftI2CMaster
+#define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4 AZTEEG_X3_PRO: 8 MKS SBASE: 5
+// Actual motor currents in Amps. The number of entries must match DIGIPOT_I2C_NUM_CHANNELS.
+// These correspond to the physical drivers, so be mindful if the order is changed.
+#define DIGIPOT_I2C_MOTOR_CURRENTS { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 } // AZTEEG_X3_PRO
+
+//===========================================================================
+//=============================Additional Features===========================
+//===========================================================================
+
+// @section lcd
+
+#if EITHER(ULTIPANEL, EXTENSIBLE_UI)
+ #define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 60 } // Feedrates for manual moves along X, Y, Z, E from panel
+ #define SHORT_MANUAL_Z_MOVE 0.025 // (mm) Smallest manual Z move (< 0.1mm)
+ #if ENABLED(ULTIPANEL)
+ #define MANUAL_E_MOVES_RELATIVE // Display extruder move distance rather than "position"
+ #define ULTIPANEL_FEEDMULTIPLY // Encoder sets the feedrate multiplier on the Status Screen
+ #endif
+#endif
+
+// Change values more rapidly when the encoder is rotated faster
+#define ENCODER_RATE_MULTIPLIER
+#if ENABLED(ENCODER_RATE_MULTIPLIER)
+ #define ENCODER_10X_STEPS_PER_SEC 30 // (steps/s) Encoder rate for 10x speed
+ #define ENCODER_100X_STEPS_PER_SEC 80 // (steps/s) Encoder rate for 100x speed
+#endif
+
+// Play a beep when the feedrate is changed from the Status Screen
+//#define BEEP_ON_FEEDRATE_CHANGE
+#if ENABLED(BEEP_ON_FEEDRATE_CHANGE)
+ #define FEEDRATE_CHANGE_BEEP_DURATION 10
+ #define FEEDRATE_CHANGE_BEEP_FREQUENCY 440
+#endif
+
+#if HAS_LCD_MENU
+
+ // Include a page of printer information in the LCD Main Menu
+ //#define LCD_INFO_MENU
+ #if ENABLED(LCD_INFO_MENU)
+ //#define LCD_PRINTER_INFO_IS_BOOTSCREEN // Show bootscreen(s) instead of Printer Info pages
+ #endif
+
+ // BACK menu items keep the highlight at the top
+ //#define TURBO_BACK_MENU_ITEM
+
+ /**
+ * LED Control Menu
+ * Add LED Control to the LCD menu
+ */
+ //#define LED_CONTROL_MENU
+ #if ENABLED(LED_CONTROL_MENU)
+ #define LED_COLOR_PRESETS // Enable the Preset Color menu option
+ #if ENABLED(LED_COLOR_PRESETS)
+ #define LED_USER_PRESET_RED 255 // User defined RED value
+ #define LED_USER_PRESET_GREEN 128 // User defined GREEN value
+ #define LED_USER_PRESET_BLUE 0 // User defined BLUE value
+ #define LED_USER_PRESET_WHITE 255 // User defined WHITE value
+ #define LED_USER_PRESET_BRIGHTNESS 255 // User defined intensity
+ //#define LED_USER_PRESET_STARTUP // Have the printer display the user preset color on startup
+ #endif
+ #endif
+
+#endif // HAS_LCD_MENU
+
+// Scroll a longer status message into view
+//#define STATUS_MESSAGE_SCROLLING
+
+// On the Info Screen, display XY with one decimal place when possible
+//#define LCD_DECIMAL_SMALL_XY
+
+// The timeout (in ms) to return to the status screen from sub-menus
+//#define LCD_TIMEOUT_TO_STATUS 15000
+
+// Add an 'M73' G-code to set the current percentage
+//#define LCD_SET_PROGRESS_MANUALLY
+
+#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
+ //#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
+ #if ENABLED(LCD_PROGRESS_BAR)
+ #define PROGRESS_BAR_BAR_TIME 2000 // (ms) Amount of time to show the bar
+ #define PROGRESS_BAR_MSG_TIME 3000 // (ms) Amount of time to show the status message
+ #define PROGRESS_MSG_EXPIRE 0 // (ms) Amount of time to retain the status message (0=forever)
+ //#define PROGRESS_MSG_ONCE // Show the message for MSG_TIME then clear it
+ //#define LCD_PROGRESS_BAR_TEST // Add a menu item to test the progress bar
+ #endif
+#endif
+
+#if ENABLED(SDSUPPORT)
+
+ // Some RAMPS and other boards don't detect when an SD card is inserted. You can work
+ // around this by connecting a push button or single throw switch to the pin defined
+ // as SD_DETECT_PIN in your board's pins definitions.
+ // This setting should be disabled unless you are using a push button, pulling the pin to ground.
+ // Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
+ #define SD_DETECT_INVERTED
+
+ #define SD_FINISHED_STEPPERRELEASE true // Disable steppers when SD Print is finished
+ #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the Z enabled so your bed stays in place.
+
+ // Reverse SD sort to show "more recent" files first, according to the card's FAT.
+ // Since the FAT gets out of order with usage, SDCARD_SORT_ALPHA is recommended.
+ #define SDCARD_RATHERRECENTFIRST
+
+ #define SD_MENU_CONFIRM_START // Confirm the selected SD file before printing
+
+ //#define MENU_ADDAUTOSTART // Add a menu option to run auto#.g files
+
+ #define EVENT_GCODE_SD_STOP "G28XY" // G-code to run on Stop Print (e.g., "G28XY" or "G27")
+
+ /**
+ * Continue after Power-Loss (Creality3D)
+ *
+ * Store the current state to the SD Card at the start of each layer
+ * during SD printing. If the recovery file is found at boot time, present
+ * an option on the LCD screen to continue the print from the last-known
+ * point in the file.
+ */
+ //#define POWER_LOSS_RECOVERY
+ #if ENABLED(POWER_LOSS_RECOVERY)
+ //#define POWER_LOSS_PIN 44 // Pin to detect power loss
+ //#define POWER_LOSS_STATE HIGH // State of pin indicating power loss
+ //#define POWER_LOSS_PULL // Set pullup / pulldown as appropriate
+ //#define POWER_LOSS_PURGE_LEN 20 // (mm) Length of filament to purge on resume
+ //#define POWER_LOSS_RETRACT_LEN 10 // (mm) Length of filament to retract on fail. Requires backup power.
+
+ // Without a POWER_LOSS_PIN the following option helps reduce wear on the SD card,
+ // especially with "vase mode" printing. Set too high and vases cannot be continued.
+ #define POWER_LOSS_MIN_Z_CHANGE 0.05 // (mm) Minimum Z change before saving power-loss data
+ #endif
+
+ /**
+ * Sort SD file listings in alphabetical order.
+ *
+ * With this option enabled, items on SD cards will be sorted
+ * by name for easier navigation.
+ *
+ * By default...
+ *
+ * - Use the slowest -but safest- method for sorting.
+ * - Folders are sorted to the top.
+ * - The sort key is statically allocated.
+ * - No added G-code (M34) support.
+ * - 40 item sorting limit. (Items after the first 40 are unsorted.)
+ *
+ * SD sorting uses static allocation (as set by SDSORT_LIMIT), allowing the
+ * compiler to calculate the worst-case usage and throw an error if the SRAM
+ * limit is exceeded.
+ *
+ * - SDSORT_USES_RAM provides faster sorting via a static directory buffer.
+ * - SDSORT_USES_STACK does the same, but uses a local stack-based buffer.
+ * - SDSORT_CACHE_NAMES will retain the sorted file listing in RAM. (Expensive!)
+ * - SDSORT_DYNAMIC_RAM only uses RAM when the SD menu is visible. (Use with caution!)
+ */
+ //#define SDCARD_SORT_ALPHA
+
+ // SD Card Sorting options
+ #if ENABLED(SDCARD_SORT_ALPHA)
+ #define SDSORT_LIMIT 40 // Maximum number of sorted items (10-256). Costs 27 bytes each.
+ #define FOLDER_SORTING -1 // -1=above 0=none 1=below
+ #define SDSORT_GCODE false // Allow turning sorting on/off with LCD and M34 g-code.
+ #define SDSORT_USES_RAM false // Pre-allocate a static array for faster pre-sorting.
+ #define SDSORT_USES_STACK false // Prefer the stack for pre-sorting to give back some SRAM. (Negated by next 2 options.)
+ #define SDSORT_CACHE_NAMES false // Keep sorted items in RAM longer for speedy performance. Most expensive option.
+ #define SDSORT_DYNAMIC_RAM false // Use dynamic allocation (within SD menus). Least expensive option. Set SDSORT_LIMIT before use!
+ #define SDSORT_CACHE_VFATS 2 // Maximum number of 13-byte VFAT entries to use for sorting.
+ // Note: Only affects SCROLL_LONG_FILENAMES with SDSORT_CACHE_NAMES but not SDSORT_DYNAMIC_RAM.
+ #endif
+
+ // This allows hosts to request long names for files and folders with M33
+ //#define LONG_FILENAME_HOST_SUPPORT
+
+ // Enable this option to scroll long filenames in the SD card menu
+ //#define SCROLL_LONG_FILENAMES
+
+ // Leave the heaters on after Stop Print (not recommended!)
+ //#define SD_ABORT_NO_COOLDOWN
+
+ /**
+ * This option allows you to abort SD printing when any endstop is triggered.
+ * This feature must be enabled with "M540 S1" or from the LCD menu.
+ * To have any effect, endstops must be enabled during SD printing.
+ */
+ //#define SD_ABORT_ON_ENDSTOP_HIT
+
+ /**
+ * This option makes it easier to print the same SD Card file again.
+ * On print completion the LCD Menu will open with the file selected.
+ * You can just click to start the print, or navigate elsewhere.
+ */
+ //#define SD_REPRINT_LAST_SELECTED_FILE
+
+ /**
+ * Auto-report SdCard status with M27 S
+ */
+ //#define AUTO_REPORT_SD_STATUS
+
+ /**
+ * Support for USB thumb drives using an Arduino USB Host Shield or
+ * equivalent MAX3421E breakout board. The USB thumb drive will appear
+ * to Marlin as an SD card.
+ *
+ * The MAX3421E can be assigned the same pins as the SD card reader, with
+ * the following pin mapping:
+ *
+ * SCLK, MOSI, MISO --> SCLK, MOSI, MISO
+ * INT --> SD_DETECT_PIN [1]
+ * SS --> SDSS
+ *
+ * [1] On AVR an interrupt-capable pin is best for UHS3 compatibility.
+ */
+ //#define USB_FLASH_DRIVE_SUPPORT
+ #if ENABLED(USB_FLASH_DRIVE_SUPPORT)
+ #define USB_CS_PIN SDSS
+ #define USB_INTR_PIN SD_DETECT_PIN
+
+ /**
+ * USB Host Shield Library
+ *
+ * - UHS2 uses no interrupts and has been production-tested
+ * on a LulzBot TAZ Pro with a 32-bit Archim board.
+ *
+ * - UHS3 is newer code with better USB compatibility. But it
+ * is less tested and is known to interfere with Servos.
+ * [1] This requires USB_INTR_PIN to be interrupt-capable.
+ */
+ //#define USE_UHS3_USB
+ #endif
+
+ /**
+ * When using a bootloader that supports SD-Firmware-Flashing,
+ * add a menu item to activate SD-FW-Update on the next reboot.
+ *
+ * Requires ATMEGA2560 (Arduino Mega)
+ *
+ * Tested with this bootloader:
+ * https://github.com/FleetProbe/MicroBridge-Arduino-ATMega2560
+ */
+ //#define SD_FIRMWARE_UPDATE
+ #if ENABLED(SD_FIRMWARE_UPDATE)
+ #define SD_FIRMWARE_UPDATE_EEPROM_ADDR 0x1FF
+ #define SD_FIRMWARE_UPDATE_ACTIVE_VALUE 0xF0
+ #define SD_FIRMWARE_UPDATE_INACTIVE_VALUE 0xFF
+ #endif
+
+ // Add an optimized binary file transfer mode, initiated with 'M28 B1'
+ //#define BINARY_FILE_TRANSFER
+
+ #if HAS_SDCARD_CONNECTION
+ /**
+ * Set this option to one of the following (or the board's defaults apply):
+ *
+ * LCD - Use the SD drive in the external LCD controller.
+ * ONBOARD - Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.)
+ * CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file).
+ *
+ * :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ]
+ */
+ //#define SDCARD_CONNECTION LCD
+ #endif
+
+#endif // SDSUPPORT
+
+/**
+ * By default an onboard SD card reader may be shared as a USB mass-
+ * storage device. This option hides the SD card from the host PC.
+ */
+//#define NO_SD_HOST_DRIVE // Disable SD Card access over USB (for security).
+
+/**
+ * Additional options for Graphical Displays
+ *
+ * Use the optimizations here to improve printing performance,
+ * which can be adversely affected by graphical display drawing,
+ * especially when doing several short moves, and when printing
+ * on DELTA and SCARA machines.
+ *
+ * Some of these options may result in the display lagging behind
+ * controller events, as there is a trade-off between reliable
+ * printing performance versus fast display updates.
+ */
+#if HAS_GRAPHICAL_LCD
+ // Show SD percentage next to the progress bar
+ //#define DOGM_SD_PERCENT
+
+ // Enable to save many cycles by drawing a hollow frame on the Info Screen
+ #define XYZ_HOLLOW_FRAME
+
+ // Enable to save many cycles by drawing a hollow frame on Menu Screens
+ #define MENU_HOLLOW_FRAME
+
+ // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
+ // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
+ //#define USE_BIG_EDIT_FONT
+
+ // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
+ // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
+ //#define USE_SMALL_INFOFONT
+
+ // Enable this option and reduce the value to optimize screen updates.
+ // The normal delay is 10µs. Use the lowest value that still gives a reliable display.
+ //#define DOGM_SPI_DELAY_US 5
+
+ // Swap the CW/CCW indicators in the graphics overlay
+ //#define OVERLAY_GFX_REVERSE
+
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
+ #if ENABLED(U8GLIB_ST7920)
+ //#define LIGHTWEIGHT_UI
+ #if ENABLED(LIGHTWEIGHT_UI)
+ #define STATUS_EXPIRE_SECONDS 20
+ #endif
+ #endif
+
+ /**
+ * Status (Info) Screen customizations
+ * These options may affect code size and screen render time.
+ * Custom status screens can forcibly override these settings.
+ */
+ //#define STATUS_COMBINE_HEATERS // Use combined heater images instead of separate ones
+ //#define STATUS_HOTEND_NUMBERLESS // Use plain hotend icons instead of numbered ones (with 2+ hotends)
+ #define STATUS_HOTEND_INVERTED // Show solid nozzle bitmaps when heating (Requires STATUS_HOTEND_ANIM)
+ #define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
+ #define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
+ #define STATUS_CHAMBER_ANIM // Use a second bitmap to indicate chamber heating
+ //#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
+ //#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
+ //#define STATUS_HEAT_PERCENT // Show heating in a progress bar
+ #define BOOT_MARLIN_LOGO_SMALL // Show a smaller Marlin logo on the Boot Screen (saving 399 bytes of flash)
+ //#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~3260 (or ~940) bytes of PROGMEM.
+
+ // Frivolous Game Options
+ //#define MARLIN_BRICKOUT
+ //#define MARLIN_INVADERS
+ //#define MARLIN_SNAKE
+ //#define GAMES_EASTER_EGG // Add extra blank lines above the "Games" sub-menu
+
+#endif // HAS_GRAPHICAL_LCD
+
+//
+// Lulzbot Touch UI
+//
+#if ENABLED(LULZBOT_TOUCH_UI)
+ // Display board used
+ //#define LCD_FTDI_VM800B35A // FTDI 3.5" with FT800 (320x240)
+ //#define LCD_4DSYSTEMS_4DLCD_FT843 // 4D Systems 4.3" (480x272)
+ //#define LCD_HAOYU_FT800CB // Haoyu with 4.3" or 5" (480x272)
+ //#define LCD_HAOYU_FT810CB // Haoyu with 5" (800x480)
+ //#define LCD_ALEPHOBJECTS_CLCD_UI // Aleph Objects Color LCD UI
+
+ // Correct the resolution if not using the stock TFT panel.
+ //#define TOUCH_UI_320x240
+ //#define TOUCH_UI_480x272
+ //#define TOUCH_UI_800x480
+
+ // Mappings for boards with a standard RepRapDiscount Display connector
+ //#define AO_EXP1_PINMAP // AlephObjects CLCD UI EXP1 mapping
+ //#define AO_EXP2_PINMAP // AlephObjects CLCD UI EXP2 mapping
+ //#define CR10_TFT_PINMAP // Rudolph Riedel's CR10 pin mapping
+ //#define OTHER_PIN_LAYOUT // Define pins manually below
+ #if ENABLED(OTHER_PIN_LAYOUT)
+ // The pins for CS and MOD_RESET (PD) must be chosen.
+ #define CLCD_MOD_RESET 9
+ #define CLCD_SPI_CS 10
+
+ // If using software SPI, specify pins for SCLK, MOSI, MISO
+ //#define CLCD_USE_SOFT_SPI
+ #if ENABLED(CLCD_USE_SOFT_SPI)
+ #define CLCD_SOFT_SPI_MOSI 11
+ #define CLCD_SOFT_SPI_MISO 12
+ #define CLCD_SOFT_SPI_SCLK 13
+ #endif
+ #endif
+
+ // Display Orientation. An inverted (i.e. upside-down) display
+ // is supported on the FT800. The FT810 and beyond also support
+ // portrait and mirrored orientations.
+ //#define TOUCH_UI_INVERTED
+ //#define TOUCH_UI_PORTRAIT
+ //#define TOUCH_UI_MIRRORED
+
+ // Enable UTF8 rendering capabilities.
+ //#define TOUCH_UI_USE_UTF8
+ #if ENABLED(TOUCH_UI_USE_UTF8)
+ #define TOUCH_UI_UTF8_WESTERN_CHARSET
+ #endif
+
+ // When labels do not fit buttons, use smaller font
+ #define TOUCH_UI_FIT_TEXT
+
+ // Runtime language selection (otherwise LCD_LANGUAGE)
+ //#define TOUCH_UI_LANGUAGE_MENU
+
+ // Use a numeric passcode for "Screen lock" keypad.
+ // (recommended for smaller displays)
+ //#define TOUCH_UI_PASSCODE
+#endif
+
+//
+// FSMC Graphical TFT
+//
+#if ENABLED(FSMC_GRAPHICAL_TFT)
+ //#define TFT_MARLINUI_COLOR 0xFFFF // White
+ //#define TFT_MARLINBG_COLOR 0x0000 // Black
+ //#define TFT_DISABLED_COLOR 0x0003 // Almost black
+ //#define TFT_BTCANCEL_COLOR 0xF800 // Red
+ //#define TFT_BTARROWS_COLOR 0xDEE6 // 11011 110111 00110 Yellow
+ //#define TFT_BTOKMENU_COLOR 0x145F // 00010 100010 11111 Cyan
+#endif
+
+// @section safety
+
+/**
+ * The watchdog hardware timer will do a reset and disable all outputs
+ * if the firmware gets too overloaded to read the temperature sensors.
+ *
+ * If you find that watchdog reboot causes your AVR board to hang forever,
+ * enable WATCHDOG_RESET_MANUAL to use a custom timer instead of WDTO.
+ * NOTE: This method is less reliable as it can only catch hangups while
+ * interrupts are enabled.
+ */
+#define USE_WATCHDOG
+#if ENABLED(USE_WATCHDOG)
+ //#define WATCHDOG_RESET_MANUAL
+#endif
+
+// @section lcd
+
+/**
+ * Babystepping enables movement of the axes by tiny increments without changing
+ * the current position values. This feature is used primarily to adjust the Z
+ * axis in the first layer of a print in real-time.
+ *
+ * Warning: Does not respect endstops!
+ */
+//#define BABYSTEPPING
+#if ENABLED(BABYSTEPPING)
+ //#define BABYSTEP_WITHOUT_HOMING
+ //#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
+ #define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
+
+ //#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
+ #if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
+ #define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds.
+ // Note: Extra time may be added to mitigate controller latency.
+ //#define BABYSTEP_ALWAYS_AVAILABLE // Allow babystepping at all times (not just during movement).
+ //#define MOVE_Z_WHEN_IDLE // Jump to the move Z menu on doubleclick when printer is idle.
+ #if ENABLED(MOVE_Z_WHEN_IDLE)
+ #define MOVE_Z_IDLE_MULTIPLICATOR 1 // Multiply 1mm by this factor for the move step size.
+ #endif
+ #endif
+
+ //#define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28
+
+ //#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping
+ #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
+ //#define BABYSTEP_HOTEND_Z_OFFSET // For multiple hotends, babystep relative Z offsets
+ //#define BABYSTEP_ZPROBE_GFX_OVERLAY // Enable graphical overlay on Z-offset editor
+ #endif
+#endif
+
+// @section extruder
+
+/**
+ * Linear Pressure Control v1.5
+ *
+ * Assumption: advance [steps] = k * (delta velocity [steps/s])
+ * K=0 means advance disabled.
+ *
+ * NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
+ *
+ * Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
+ * Larger K values will be needed for flexible filament and greater distances.
+ * If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
+ * print acceleration will be reduced during the affected moves to keep within the limit.
+ *
+ * See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
+ * Mention @Sebastianv650 on GitHub to alert the author of any issues.
+ */
+//#define LIN_ADVANCE
+#if ENABLED(LIN_ADVANCE)
+ //#define EXTRA_LIN_ADVANCE_K // Enable for second linear advance constants
+ #define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
+ //#define LA_DEBUG // If enabled, this will generate debug information output over USB.
+#endif
+
+// @section leveling
+
+#if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL)
+ // Override the mesh area if the automatic (max) area is too large
+ //#define MESH_MIN_X MESH_INSET
+ //#define MESH_MIN_Y MESH_INSET
+ //#define MESH_MAX_X X_BED_SIZE - (MESH_INSET)
+ //#define MESH_MAX_Y Y_BED_SIZE - (MESH_INSET)
+#endif
+
+/**
+ * Repeatedly attempt G29 leveling until it succeeds.
+ * Stop after G29_MAX_RETRIES attempts.
+ */
+//#define G29_RETRY_AND_RECOVER
+#if ENABLED(G29_RETRY_AND_RECOVER)
+ #define G29_MAX_RETRIES 3
+ #define G29_HALT_ON_FAILURE
+ /**
+ * Specify the GCODE commands that will be executed when leveling succeeds,
+ * between attempts, and after the maximum number of retries have been tried.
+ */
+ #define G29_SUCCESS_COMMANDS "M117 Bed leveling done."
+ #define G29_RECOVER_COMMANDS "M117 Probe failed. Rewiping.\nG28\nG12 P0 S12 T0"
+ #define G29_FAILURE_COMMANDS "M117 Bed leveling failed.\nG0 Z10\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nG4 S1"
+
+#endif
+
+// @section extras
+
+//
+// G2/G3 Arc Support
+//
+#define ARC_SUPPORT // Disable this feature to save ~3226 bytes
+#if ENABLED(ARC_SUPPORT)
+ #define MM_PER_ARC_SEGMENT 1 // Length of each arc segment
+ #define MIN_ARC_SEGMENTS 24 // Minimum number of segments in a complete circle
+ #define N_ARC_CORRECTION 25 // Number of interpolated segments between corrections
+ //#define ARC_P_CIRCLES // Enable the 'P' parameter to specify complete circles
+ //#define CNC_WORKSPACE_PLANES // Allow G2/G3 to operate in XY, ZX, or YZ planes
+#endif
+
+// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.
+//#define BEZIER_CURVE_SUPPORT
+
+/**
+ * G38 Probe Target
+ *
+ * This option adds G38.2 and G38.3 (probe towards target)
+ * and optionally G38.4 and G38.5 (probe away from target).
+ * Set MULTIPLE_PROBING for G38 to probe more than once.
+ */
+//#define G38_PROBE_TARGET
+#if ENABLED(G38_PROBE_TARGET)
+ //#define G38_PROBE_AWAY // Include G38.4 and G38.5 to probe away from target
+ #define G38_MINIMUM_MOVE 0.0275 // (mm) Minimum distance that will produce a move.
+#endif
+
+// Moves (or segments) with fewer steps than this will be joined with the next move
+#define MIN_STEPS_PER_SEGMENT 6
+
+/**
+ * Minimum delay before and after setting the stepper DIR (in ns)
+ * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire)
+ * 20 : Minimum for TMC2xxx drivers
+ * 200 : Minimum for A4988 drivers
+ * 400 : Minimum for A5984 drivers
+ * 500 : Minimum for LV8729 drivers (guess, no info in datasheet)
+ * 650 : Minimum for DRV8825 drivers
+ * 1500 : Minimum for TB6600 drivers (guess, no info in datasheet)
+ * 15000 : Minimum for TB6560 drivers (guess, no info in datasheet)
+ *
+ * Override the default value based on the driver type set in Configuration.h.
+ */
+//#define MINIMUM_STEPPER_POST_DIR_DELAY 650
+//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650
+
+/**
+ * Minimum stepper driver pulse width (in µs)
+ * 0 : Smallest possible width the MCU can produce, compatible with TMC2xxx drivers
+ * 0 : Minimum 500ns for LV8729, adjusted in stepper.h
+ * 1 : Minimum for A4988 and A5984 stepper drivers
+ * 2 : Minimum for DRV8825 stepper drivers
+ * 3 : Minimum for TB6600 stepper drivers
+ * 30 : Minimum for TB6560 stepper drivers
+ *
+ * Override the default value based on the driver type set in Configuration.h.
+ */
+//#define MINIMUM_STEPPER_PULSE 2
+
+/**
+ * Maximum stepping rate (in Hz) the stepper driver allows
+ * If undefined, defaults to 1MHz / (2 * MINIMUM_STEPPER_PULSE)
+ * 500000 : Maximum for A4988 stepper driver
+ * 400000 : Maximum for TMC2xxx stepper drivers
+ * 250000 : Maximum for DRV8825 stepper driver
+ * 200000 : Maximum for LV8729 stepper driver
+ * 150000 : Maximum for TB6600 stepper driver
+ * 15000 : Maximum for TB6560 stepper driver
+ *
+ * Override the default value based on the driver type set in Configuration.h.
+ */
+//#define MAXIMUM_STEPPER_RATE 250000
+
+// @section temperature
+
+// Control heater 0 and heater 1 in parallel.
+//#define HEATERS_PARALLEL
+
+//===========================================================================
+//================================= Buffers =================================
+//===========================================================================
+
+// @section hidden
+
+// The number of linear motions that can be in the plan at any give time.
+// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2 (e.g. 8, 16, 32) because shifts and ors are used to do the ring-buffering.
+#if ENABLED(SDSUPPORT)
+ #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
+#else
+ #define BLOCK_BUFFER_SIZE 16 // maximize block buffer
+#endif
+
+// @section serial
+
+// The ASCII buffer for serial input
+#define MAX_CMD_SIZE 96
+#define BUFSIZE 32
+
+// Transmission to Host Buffer Size
+// To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0.
+// To buffer a simple "ok" you need 4 bytes.
+// For ADVANCED_OK (M105) you need 32 bytes.
+// For debug-echo: 128 bytes for the optimal speed.
+// Other output doesn't need to be that speedy.
+// :[0, 2, 4, 8, 16, 32, 64, 128, 256]
+#define TX_BUFFER_SIZE 32
+
+// Host Receive Buffer Size
+// Without XON/XOFF flow control (see SERIAL_XON_XOFF below) 32 bytes should be enough.
+// To use flow control, set this buffer size to at least 1024 bytes.
+// :[0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048]
+//#define RX_BUFFER_SIZE 1024
+
+#if RX_BUFFER_SIZE >= 1024
+ // Enable to have the controller send XON/XOFF control characters to
+ // the host to signal the RX buffer is becoming full.
+ //#define SERIAL_XON_XOFF
+#endif
+
+// Add M575 G-code to change the baud rate
+//#define BAUD_RATE_GCODE
+
+#if ENABLED(SDSUPPORT)
+ // Enable this option to collect and display the maximum
+ // RX queue usage after transferring a file to SD.
+ //#define SERIAL_STATS_MAX_RX_QUEUED
+
+ // Enable this option to collect and display the number
+ // of dropped bytes after a file transfer to SD.
+ //#define SERIAL_STATS_DROPPED_RX
+#endif
+
+// Enable an emergency-command parser to intercept certain commands as they
+// enter the serial receive buffer, so they cannot be blocked.
+// Currently handles M108, M112, M410
+// Does not work on boards using AT90USB (USBCON) processors!
+//#define EMERGENCY_PARSER
+
+// Bad Serial-connections can miss a received command by sending an 'ok'
+// Therefore some clients abort after 30 seconds in a timeout.
+// Some other clients start sending commands while receiving a 'wait'.
+// This "wait" is only sent when the buffer is empty. 1 second is a good value here.
+//#define NO_TIMEOUTS 1000 // Milliseconds
+
+// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary.
+//#define ADVANCED_OK
+
+// Printrun may have trouble receiving long strings all at once.
+// This option inserts short delays between lines of serial output.
+#define SERIAL_OVERRUN_PROTECTION
+
+// @section extras
+
+/**
+ * Extra Fan Speed
+ * Adds a secondary fan speed for each print-cooling fan.
+ * 'M106 P T3-255' : Set a secondary speed for
+ * 'M106 P T2' : Use the set secondary speed
+ * 'M106 P T1' : Restore the previous fan speed
+ */
+//#define EXTRA_FAN_SPEED
+
+/**
+ * Firmware-based and LCD-controlled retract
+ *
+ * Add G10 / G11 commands for automatic firmware-based retract / recover.
+ * Use M207 and M208 to define parameters for retract / recover.
+ *
+ * Use M209 to enable or disable auto-retract.
+ * With auto-retract enabled, all G1 E moves within the set range
+ * will be converted to firmware-based retract/recover moves.
+ *
+ * Be sure to turn off auto-retract during filament change.
+ *
+ * Note that M207 / M208 / M209 settings are saved to EEPROM.
+ *
+ */
+//#define FWRETRACT
+#if ENABLED(FWRETRACT)
+ #define FWRETRACT_AUTORETRACT // Override slicer retractions
+ #if ENABLED(FWRETRACT_AUTORETRACT)
+ #define MIN_AUTORETRACT 0.1 // (mm) Don't convert E moves under this length
+ #define MAX_AUTORETRACT 10.0 // (mm) Don't convert E moves over this length
+ #endif
+ #define RETRACT_LENGTH 3 // (mm) Default retract length (positive value)
+ #define RETRACT_LENGTH_SWAP 13 // (mm) Default swap retract length (positive value)
+ #define RETRACT_FEEDRATE 45 // (mm/s) Default feedrate for retracting
+ #define RETRACT_ZRAISE 0 // (mm) Default retract Z-raise
+ #define RETRACT_RECOVER_LENGTH 0 // (mm) Default additional recover length (added to retract length on recover)
+ #define RETRACT_RECOVER_LENGTH_SWAP 0 // (mm) Default additional swap recover length (added to retract length on recover from toolchange)
+ #define RETRACT_RECOVER_FEEDRATE 8 // (mm/s) Default feedrate for recovering from retraction
+ #define RETRACT_RECOVER_FEEDRATE_SWAP 8 // (mm/s) Default feedrate for recovering from swap retraction
+ #if ENABLED(MIXING_EXTRUDER)
+ //#define RETRACT_SYNC_MIXING // Retract and restore all mixing steppers simultaneously
+ #endif
+#endif
+
+/**
+ * Universal tool change settings.
+ * Applies to all types of extruders except where explicitly noted.
+ */
+#if EXTRUDERS > 1
+ // Z raise distance for tool-change, as needed for some extruders
+ #define TOOLCHANGE_ZRAISE 2 // (mm)
+ //#define TOOLCHANGE_NO_RETURN // Never return to the previous position on tool-change
+
+ // Retract and prime filament on tool-change
+ //#define TOOLCHANGE_FILAMENT_SWAP
+ #if ENABLED(TOOLCHANGE_FILAMENT_SWAP)
+ #define TOOLCHANGE_FIL_SWAP_LENGTH 12 // (mm)
+ #define TOOLCHANGE_FIL_EXTRA_PRIME 2 // (mm)
+ #define TOOLCHANGE_FIL_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ #define TOOLCHANGE_FIL_SWAP_PRIME_SPEED 3600 // (mm/m)
+ #endif
+
+ /**
+ * Position to park head during tool change.
+ * Doesn't apply to SWITCHING_TOOLHEAD, DUAL_X_CARRIAGE, or PARKING_EXTRUDER
+ */
+ //#define TOOLCHANGE_PARK
+ #if ENABLED(TOOLCHANGE_PARK)
+ #define TOOLCHANGE_PARK_XY { X_MIN_POS + 10, Y_MIN_POS + 10 }
+ #define TOOLCHANGE_PARK_XY_FEEDRATE 6000 // (mm/m)
+ #endif
+#endif
+
+/**
+ * Advanced Pause
+ * Experimental feature for filament change support and for parking the nozzle when paused.
+ * Adds the GCode M600 for initiating filament change.
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
+ *
+ * Requires an LCD display.
+ * Requires NOZZLE_PARK_FEATURE.
+ * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
+ */
+//#define ADVANCED_PAUSE_FEATURE
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
+ #define PAUSE_PARK_RETRACT_FEEDRATE 60 // (mm/s) Initial retract feedrate.
+ #define PAUSE_PARK_RETRACT_LENGTH 2 // (mm) Initial retract.
+ // This short retract is done immediately, before parking the nozzle.
+ #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // (mm/s) Unload filament feedrate. This can be pretty fast.
+ #define FILAMENT_CHANGE_UNLOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate.
+ #define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // (mm) The length of filament for a complete unload.
+ // For Bowden, the full length of the tube and nozzle.
+ // For direct drive, the full length of the nozzle.
+ // Set to 0 for manual unloading.
+ #define FILAMENT_CHANGE_SLOW_LOAD_FEEDRATE 6 // (mm/s) Slow move when starting load.
+ #define FILAMENT_CHANGE_SLOW_LOAD_LENGTH 0 // (mm) Slow length, to allow time to insert material.
+ // 0 to disable start loading and skip to fast load only
+ #define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE 6 // (mm/s) Load filament feedrate. This can be pretty fast.
+ #define FILAMENT_CHANGE_FAST_LOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate.
+ #define FILAMENT_CHANGE_FAST_LOAD_LENGTH 0 // (mm) Load length of filament, from extruder gear to nozzle.
+ // For Bowden, the full length of the tube and nozzle.
+ // For direct drive, the full length of the nozzle.
+ //#define ADVANCED_PAUSE_CONTINUOUS_PURGE // Purge continuously up to the purge length until interrupted.
+ #define ADVANCED_PAUSE_PURGE_FEEDRATE 3 // (mm/s) Extrude feedrate (after loading). Should be slower than load feedrate.
+ #define ADVANCED_PAUSE_PURGE_LENGTH 50 // (mm) Length to extrude after loading.
+ // Set to 0 for manual extrusion.
+ // Filament can be extruded repeatedly from the Filament Change menu
+ // until extrusion is consistent, and to purge old filament.
+ #define ADVANCED_PAUSE_RESUME_PRIME 0 // (mm) Extra distance to prime nozzle after returning from park.
+ //#define ADVANCED_PAUSE_FANS_PAUSE // Turn off print-cooling fans while the machine is paused.
+
+ // Filament Unload does a Retract, Delay, and Purge first:
+ #define FILAMENT_UNLOAD_RETRACT_LENGTH 13 // (mm) Unload initial retract length.
+ #define FILAMENT_UNLOAD_DELAY 5000 // (ms) Delay for the filament to cool after retract.
+ #define FILAMENT_UNLOAD_PURGE_LENGTH 8 // (mm) An unretract is done, then this length is purged.
+
+ #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety.
+ #define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed.
+ #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change.
+
+ //#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
+ //#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change
+
+ //#define FILAMENT_LOAD_UNLOAD_GCODES // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu.
+ //#define FILAMENT_UNLOAD_ALL_EXTRUDERS // Allow M702 to unload all extruders above a minimum target temp (as set by M302)
+#endif
+
+// @section tmc
+
+/**
+ * TMC26X Stepper Driver options
+ *
+ * The TMC26XStepper library is required for this stepper driver.
+ * https://github.com/trinamic/TMC26XStepper
+ */
+#if HAS_DRIVER(TMC26X)
+
+ #if AXIS_DRIVER_TYPE_X(TMC26X)
+ #define X_MAX_CURRENT 1000 // (mA)
+ #define X_SENSE_RESISTOR 91 // (mOhms)
+ #define X_MICROSTEPS 16 // Number of microsteps
+ #endif
+
+ #if AXIS_DRIVER_TYPE_X2(TMC26X)
+ #define X2_MAX_CURRENT 1000
+ #define X2_SENSE_RESISTOR 91
+ #define X2_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Y(TMC26X)
+ #define Y_MAX_CURRENT 1000
+ #define Y_SENSE_RESISTOR 91
+ #define Y_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Y2(TMC26X)
+ #define Y2_MAX_CURRENT 1000
+ #define Y2_SENSE_RESISTOR 91
+ #define Y2_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z(TMC26X)
+ #define Z_MAX_CURRENT 1000
+ #define Z_SENSE_RESISTOR 91
+ #define Z_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z2(TMC26X)
+ #define Z2_MAX_CURRENT 1000
+ #define Z2_SENSE_RESISTOR 91
+ #define Z2_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z3(TMC26X)
+ #define Z3_MAX_CURRENT 1000
+ #define Z3_SENSE_RESISTOR 91
+ #define Z3_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E0(TMC26X)
+ #define E0_MAX_CURRENT 1000
+ #define E0_SENSE_RESISTOR 91
+ #define E0_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E1(TMC26X)
+ #define E1_MAX_CURRENT 1000
+ #define E1_SENSE_RESISTOR 91
+ #define E1_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E2(TMC26X)
+ #define E2_MAX_CURRENT 1000
+ #define E2_SENSE_RESISTOR 91
+ #define E2_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E3(TMC26X)
+ #define E3_MAX_CURRENT 1000
+ #define E3_SENSE_RESISTOR 91
+ #define E3_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E4(TMC26X)
+ #define E4_MAX_CURRENT 1000
+ #define E4_SENSE_RESISTOR 91
+ #define E4_MICROSTEPS 16
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E5(TMC26X)
+ #define E5_MAX_CURRENT 1000
+ #define E5_SENSE_RESISTOR 91
+ #define E5_MICROSTEPS 16
+ #endif
+
+#endif // TMC26X
+
+// @section tmc_smart
+
+/**
+ * To use TMC2130, TMC2160, TMC2660, TMC5130, TMC5160 stepper drivers in SPI mode
+ * connect your SPI pins to the hardware SPI interface on your board and define
+ * the required CS pins in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3
+ * pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
+ * You may also use software SPI if you wish to use general purpose IO pins.
+ *
+ * To use TMC2208 stepper UART-configurable stepper drivers connect #_SERIAL_TX_PIN
+ * to the driver side PDN_UART pin with a 1K resistor.
+ * To use the reading capabilities, also connect #_SERIAL_RX_PIN to PDN_UART without
+ * a resistor.
+ * The drivers can also be used with hardware serial.
+ *
+ * TMCStepper library is required to use TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
+ */
+#if HAS_TRINAMIC
+
+ #define HOLD_MULTIPLIER 0.5 // Scales down the holding current from run current
+ #define INTERPOLATE true // Interpolate X/Y/Z_MICROSTEPS to 256
+
+ #if AXIS_IS_TMC(X)
+ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current.
+ #define X_MICROSTEPS 16 // 0..256
+ #define X_RSENSE 0.11
+ #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ...
+ #endif
+
+ #if AXIS_IS_TMC(X2)
+ #define X2_CURRENT 800
+ #define X2_MICROSTEPS 16
+ #define X2_RSENSE 0.11
+ #define X2_CHAIN_POS 0
+ #endif
+
+ #if AXIS_IS_TMC(Y)
+ #define Y_CURRENT 800
+ #define Y_MICROSTEPS 16
+ #define Y_RSENSE 0.11
+ #define Y_CHAIN_POS 0
+ #endif
+
+ #if AXIS_IS_TMC(Y2)
+ #define Y2_CURRENT 800
+ #define Y2_MICROSTEPS 16
+ #define Y2_RSENSE 0.11
+ #define Y2_CHAIN_POS 0
+ #endif
+
+ #if AXIS_IS_TMC(Z)
+ #define Z_CURRENT 800
+ #define Z_MICROSTEPS 16
+ #define Z_RSENSE 0.11
+ #define Z_CHAIN_POS 0
+ #endif
+
+ #if AXIS_IS_TMC(Z2)
+ #define Z2_CURRENT 800
+ #define Z2_MICROSTEPS 16
+ #define Z2_RSENSE 0.11
+ #define Z2_CHAIN_POS 0
+ #endif
+
+ #if AXIS_IS_TMC(Z3)
+ #define Z3_CURRENT 800
+ #define Z3_MICROSTEPS 16
+ #define Z3_RSENSE 0.11
+ #define Z3_CHAIN_POS 0
+ #endif
+
+ #if AXIS_IS_TMC(E0)
+ #define E0_CURRENT 800
+ #define E0_MICROSTEPS 16
+ #define E0_RSENSE 0.11
+ #define E0_CHAIN_POS 0
+ #endif
+
+ #if AXIS_IS_TMC(E1)
+ #define E1_CURRENT 800
+ #define E1_MICROSTEPS 16
+ #define E1_RSENSE 0.11
+ #define E1_CHAIN_POS 0
+ #endif
+
+ #if AXIS_IS_TMC(E2)
+ #define E2_CURRENT 800
+ #define E2_MICROSTEPS 16
+ #define E2_RSENSE 0.11
+ #define E2_CHAIN_POS 0
+ #endif
+
+ #if AXIS_IS_TMC(E3)
+ #define E3_CURRENT 800
+ #define E3_MICROSTEPS 16
+ #define E3_RSENSE 0.11
+ #define E3_CHAIN_POS 0
+ #endif
+
+ #if AXIS_IS_TMC(E4)
+ #define E4_CURRENT 800
+ #define E4_MICROSTEPS 16
+ #define E4_RSENSE 0.11
+ #define E4_CHAIN_POS 0
+ #endif
+
+ #if AXIS_IS_TMC(E5)
+ #define E5_CURRENT 800
+ #define E5_MICROSTEPS 16
+ #define E5_RSENSE 0.11
+ #define E5_CHAIN_POS 0
+ #endif
+
+ /**
+ * Override default SPI pins for TMC2130, TMC2160, TMC2660, TMC5130 and TMC5160 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
+ /**
+ * Software option for SPI driven drivers (TMC2130, TMC2160, TMC2660, TMC5130 and TMC5160).
+ * The default SW SPI pins are defined the respective pins files,
+ * but you can override or define them here.
+ */
+ //#define TMC_USE_SW_SPI
+ //#define TMC_SW_MOSI -1
+ //#define TMC_SW_MISO -1
+ //#define TMC_SW_SCK -1
+
+ /**
+ * Four TMC2209 drivers can use the same HW/SW serial port with hardware configured addresses.
+ * Set the address using jumpers on pins MS1 and MS2.
+ * Address | MS1 | MS2
+ * 0 | LOW | LOW
+ * 1 | HIGH | LOW
+ * 2 | LOW | HIGH
+ * 3 | HIGH | HIGH
+ *
+ * Set *_SERIAL_TX_PIN and *_SERIAL_RX_PIN to match for all drivers
+ * on the same serial port, either here or in your board's pins file.
+ */
+ #define X_SLAVE_ADDRESS 0
+ #define Y_SLAVE_ADDRESS 0
+ #define Z_SLAVE_ADDRESS 0
+ #define X2_SLAVE_ADDRESS 0
+ #define Y2_SLAVE_ADDRESS 0
+ #define Z2_SLAVE_ADDRESS 0
+ #define Z3_SLAVE_ADDRESS 0
+ #define E0_SLAVE_ADDRESS 0
+ #define E1_SLAVE_ADDRESS 0
+ #define E2_SLAVE_ADDRESS 0
+ #define E3_SLAVE_ADDRESS 0
+ #define E4_SLAVE_ADDRESS 0
+ #define E5_SLAVE_ADDRESS 0
+
+ /**
+ * Software enable
+ *
+ * Use for drivers that do not use a dedicated enable pin, but rather handle the same
+ * function through a communication line such as SPI or UART.
+ */
+ //#define SOFTWARE_DRIVER_ENABLE
+
+ /**
+ * TMC2130, TMC2160, TMC2208, TMC2209, TMC5130 and TMC5160 only
+ * Use Trinamic's ultra quiet stepping mode.
+ * When disabled, Marlin will use spreadCycle stepping mode.
+ */
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Optimize spreadCycle chopper parameters by using predefined parameter sets
+ * or with the help of an example included in the library.
+ * Provided parameter sets are
+ * CHOPPER_DEFAULT_12V
+ * CHOPPER_DEFAULT_19V
+ * CHOPPER_DEFAULT_24V
+ * CHOPPER_DEFAULT_36V
+ * CHOPPER_PRUSAMK3_24V // Imported parameters from the official Prusa firmware for MK3 (24V)
+ * CHOPPER_MARLIN_119 // Old defaults from Marlin v1.1.9
+ *
+ * Define you own with
+ * { , , hysteresis_start[1..8] }
+ */
+ #define CHOPPER_TIMING CHOPPER_DEFAULT_12V
+
+ /**
+ * Monitor Trinamic drivers for error conditions,
+ * like overtemperature and short to ground.
+ * In the case of overtemperature Marlin can decrease the driver current until error condition clears.
+ * Other detected conditions can be used to stop the current print.
+ * Relevant g-codes:
+ * M906 - Set or get motor current in milliamps using axis codes X, Y, Z, E. Report values if no axis codes given.
+ * M911 - Report stepper driver overtemperature pre-warn condition.
+ * M912 - Clear stepper driver overtemperature pre-warn condition flag.
+ * M122 - Report driver parameters (Requires TMC_DEBUG)
+ */
+ //#define MONITOR_DRIVER_STATUS
+
+ #if ENABLED(MONITOR_DRIVER_STATUS)
+ #define CURRENT_STEP_DOWN 50 // [mA]
+ #define REPORT_CURRENT_CHANGE
+ #define STOP_ON_ERROR
+ #endif
+
+ /**
+ * TMC2130, TMC2160, TMC2208, TMC2209, TMC5130 and TMC5160 only
+ * The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
+ * This mode allows for faster movements at the expense of higher noise levels.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
+ * M913 X/Y/Z/E to live tune the setting
+ */
+ //#define HYBRID_THRESHOLD
+
+ #define X_HYBRID_THRESHOLD 100 // [mm/s]
+ #define X2_HYBRID_THRESHOLD 100
+ #define Y_HYBRID_THRESHOLD 100
+ #define Y2_HYBRID_THRESHOLD 100
+ #define Z_HYBRID_THRESHOLD 3
+ #define Z2_HYBRID_THRESHOLD 3
+ #define Z3_HYBRID_THRESHOLD 3
+ #define E0_HYBRID_THRESHOLD 30
+ #define E1_HYBRID_THRESHOLD 30
+ #define E2_HYBRID_THRESHOLD 30
+ #define E3_HYBRID_THRESHOLD 30
+ #define E4_HYBRID_THRESHOLD 30
+ #define E5_HYBRID_THRESHOLD 30
+
+ /**
+ * Use StallGuard2 to home / probe X, Y, Z.
+ *
+ * TMC2130, TMC2160, TMC2209, TMC2660, TMC5130, and TMC5160 only
+ * Connect the stepper driver's DIAG1 pin to the X/Y endstop pin.
+ * X, Y, and Z homing will always be done in spreadCycle mode.
+ *
+ * X/Y/Z_STALL_SENSITIVITY is the default stall threshold.
+ * Use M914 X Y Z to set the stall threshold at runtime:
+ *
+ * Sensitivity TMC2209 Others
+ * HIGHEST 255 -64 (Too sensitive => False positive)
+ * LOWEST 0 63 (Too insensitive => No trigger)
+ *
+ * It is recommended to set [XYZ]_HOME_BUMP_MM to 0.
+ *
+ * SPI_ENDSTOPS *** Beta feature! *** TMC2130 Only ***
+ * Poll the driver through SPI to determine load when homing.
+ * Removes the need for a wire from DIAG1 to an endstop pin.
+ *
+ * IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
+ * homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
+ */
+ //#define SENSORLESS_HOMING // StallGuard capable drivers only
+
+ /**
+ * Use StallGuard2 to probe the bed with the nozzle.
+ *
+ * CAUTION: This could cause damage to machines that use a lead screw or threaded rod
+ * to move the Z axis. Take extreme care when attempting to enable this feature.
+ */
+ //#define SENSORLESS_PROBING // StallGuard capable drivers only
+
+ #if EITHER(SENSORLESS_HOMING, SENSORLESS_PROBING)
+ // TMC2209: 0...255. TMC2130: -64...63
+ #define X_STALL_SENSITIVITY 8
+ #define X2_STALL_SENSITIVITY X_STALL_SENSITIVITY
+ #define Y_STALL_SENSITIVITY 8
+ //#define Z_STALL_SENSITIVITY 8
+ //#define SPI_ENDSTOPS // TMC2130 only
+ //#define IMPROVE_HOMING_RELIABILITY
+ #endif
+
+ /**
+ * Beta feature!
+ * Create a 50/50 square wave step pulse optimal for stepper drivers.
+ */
+ //#define SQUARE_WAVE_STEPPING
+
+ /**
+ * Enable M122 debugging command for TMC stepper drivers.
+ * M122 S0/1 will enable continous reporting.
+ */
+ //#define TMC_DEBUG
+
+ /**
+ * You can set your own advanced settings by filling in predefined functions.
+ * A list of available functions can be found on the library github page
+ * https://github.com/teemuatlut/TMCStepper
+ *
+ * Example:
+ * #define TMC_ADV() { \
+ * stepperX.diag0_temp_prewarn(1); \
+ * stepperY.interpolate(0); \
+ * }
+ */
+ #define TMC_ADV() { }
+
+#endif // HAS_TRINAMIC
+
+// @section L6470
+
+/**
+ * L6470 Stepper Driver options
+ *
+ * Arduino-L6470 library (0.7.0 or higher) is required for this stepper driver.
+ * https://github.com/ameyer/Arduino-L6470
+ *
+ * Requires the following to be defined in your pins_YOUR_BOARD file
+ * L6470_CHAIN_SCK_PIN
+ * L6470_CHAIN_MISO_PIN
+ * L6470_CHAIN_MOSI_PIN
+ * L6470_CHAIN_SS_PIN
+ * L6470_RESET_CHAIN_PIN (optional)
+ */
+#if HAS_DRIVER(L6470)
+
+ //#define L6470_CHITCHAT // Display additional status info
+
+ #if AXIS_DRIVER_TYPE_X(L6470)
+ #define X_MICROSTEPS 128 // Number of microsteps (VALID: 1, 2, 4, 8, 16, 32, 128)
+ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down)
+ #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down)
+ #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper
+ #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI
+ #endif
+
+ #if AXIS_DRIVER_TYPE_X2(L6470)
+ #define X2_MICROSTEPS 128
+ #define X2_OVERCURRENT 2000
+ #define X2_STALLCURRENT 1500
+ #define X2_MAX_VOLTAGE 127
+ #define X2_CHAIN_POS 0
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Y(L6470)
+ #define Y_MICROSTEPS 128
+ #define Y_OVERCURRENT 2000
+ #define Y_STALLCURRENT 1500
+ #define Y_MAX_VOLTAGE 127
+ #define Y_CHAIN_POS 0
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Y2(L6470)
+ #define Y2_MICROSTEPS 128
+ #define Y2_OVERCURRENT 2000
+ #define Y2_STALLCURRENT 1500
+ #define Y2_MAX_VOLTAGE 127
+ #define Y2_CHAIN_POS 0
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z(L6470)
+ #define Z_MICROSTEPS 128
+ #define Z_OVERCURRENT 2000
+ #define Z_STALLCURRENT 1500
+ #define Z_MAX_VOLTAGE 127
+ #define Z_CHAIN_POS 0
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z2(L6470)
+ #define Z2_MICROSTEPS 128
+ #define Z2_OVERCURRENT 2000
+ #define Z2_STALLCURRENT 1500
+ #define Z2_MAX_VOLTAGE 127
+ #define Z2_CHAIN_POS 0
+ #endif
+
+ #if AXIS_DRIVER_TYPE_Z3(L6470)
+ #define Z3_MICROSTEPS 128
+ #define Z3_OVERCURRENT 2000
+ #define Z3_STALLCURRENT 1500
+ #define Z3_MAX_VOLTAGE 127
+ #define Z3_CHAIN_POS 0
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E0(L6470)
+ #define E0_MICROSTEPS 128
+ #define E0_OVERCURRENT 2000
+ #define E0_STALLCURRENT 1500
+ #define E0_MAX_VOLTAGE 127
+ #define E0_CHAIN_POS 0
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E1(L6470)
+ #define E1_MICROSTEPS 128
+ #define E1_OVERCURRENT 2000
+ #define E1_STALLCURRENT 1500
+ #define E1_MAX_VOLTAGE 127
+ #define E1_CHAIN_POS 0
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E2(L6470)
+ #define E2_MICROSTEPS 128
+ #define E2_OVERCURRENT 2000
+ #define E2_STALLCURRENT 1500
+ #define E2_MAX_VOLTAGE 127
+ #define E2_CHAIN_POS 0
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E3(L6470)
+ #define E3_MICROSTEPS 128
+ #define E3_OVERCURRENT 2000
+ #define E3_STALLCURRENT 1500
+ #define E3_MAX_VOLTAGE 127
+ #define E3_CHAIN_POS 0
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E4(L6470)
+ #define E4_MICROSTEPS 128
+ #define E4_OVERCURRENT 2000
+ #define E4_STALLCURRENT 1500
+ #define E4_MAX_VOLTAGE 127
+ #define E4_CHAIN_POS 0
+ #endif
+
+ #if AXIS_DRIVER_TYPE_E5(L6470)
+ #define E5_MICROSTEPS 128
+ #define E5_OVERCURRENT 2000
+ #define E5_STALLCURRENT 1500
+ #define E5_MAX_VOLTAGE 127
+ #define E5_CHAIN_POS 0
+ #endif
+
+ /**
+ * Monitor L6470 drivers for error conditions like over temperature and over current.
+ * In the case of over temperature Marlin can decrease the drive until the error condition clears.
+ * Other detected conditions can be used to stop the current print.
+ * Relevant g-codes:
+ * M906 - I1/2/3/4/5 Set or get motor drive level using axis codes X, Y, Z, E. Report values if no axis codes given.
+ * I not present or I0 or I1 - X, Y, Z or E0
+ * I2 - X2, Y2, Z2 or E1
+ * I3 - Z3 or E3
+ * I4 - E4
+ * I5 - E5
+ * M916 - Increase drive level until get thermal warning
+ * M917 - Find minimum current thresholds
+ * M918 - Increase speed until max or error
+ * M122 S0/1 - Report driver parameters
+ */
+ //#define MONITOR_L6470_DRIVER_STATUS
+
+ #if ENABLED(MONITOR_L6470_DRIVER_STATUS)
+ #define KVAL_HOLD_STEP_DOWN 1
+ //#define L6470_STOP_ON_ERROR
+ #endif
+
+#endif // L6470
+
+/**
+ * TWI/I2C BUS
+ *
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
+ * machines. Enabling this will allow you to send and receive I2C data from slave
+ * devices on the bus.
+ *
+ * ; Example #1
+ * ; This macro send the string "Marlin" to the slave device with address 0x63 (99)
+ * ; It uses multiple M260 commands with one B arg
+ * M260 A99 ; Target slave address
+ * M260 B77 ; M
+ * M260 B97 ; a
+ * M260 B114 ; r
+ * M260 B108 ; l
+ * M260 B105 ; i
+ * M260 B110 ; n
+ * M260 S1 ; Send the current buffer
+ *
+ * ; Example #2
+ * ; Request 6 bytes from slave device with address 0x63 (99)
+ * M261 A99 B5
+ *
+ * ; Example #3
+ * ; Example serial output of a M261 request
+ * echo:i2c-reply: from:99 bytes:5 data:hello
+ */
+
+// @section i2cbus
+
+//#define EXPERIMENTAL_I2CBUS
+#define I2C_SLAVE_ADDRESS 0 // Set a value from 8 to 127 to act as a slave
+
+// @section extras
+
+/**
+ * Photo G-code
+ * Add the M240 G-code to take a photo.
+ * The photo can be triggered by a digital pin or a physical movement.
+ */
+//#define PHOTO_GCODE
+#if ENABLED(PHOTO_GCODE)
+ // A position to move to (and raise Z) before taking the photo
+ //#define PHOTO_POSITION { X_MAX_POS - 5, Y_MAX_POS, 0 } // { xpos, ypos, zraise } (M240 X Y Z)
+ //#define PHOTO_DELAY_MS 100 // (ms) Duration to pause before moving back (M240 P)
+ //#define PHOTO_RETRACT_MM 6.5 // (mm) E retract/recover for the photo move (M240 R S)
+
+ // Canon RC-1 or homebrew digital camera trigger
+ // Data from: http://www.doc-diy.net/photo/rc-1_hacked/
+ //#define PHOTOGRAPH_PIN 23
+
+ // Canon Hack Development Kit
+ // http://captain-slow.dk/2014/03/09/3d-printing-timelapses/
+ //#define CHDK_PIN 4
+
+ // Optional second move with delay to trigger the camera shutter
+ //#define PHOTO_SWITCH_POSITION { X_MAX_POS, Y_MAX_POS } // { xpos, ypos } (M240 I J)
+
+ // Duration to hold the switch or keep CHDK_PIN high
+ //#define PHOTO_SWITCH_MS 50 // (ms) (M240 D)
+#endif
+
+/**
+ * Spindle & Laser control
+ *
+ * Add the M3, M4, and M5 commands to turn the spindle/laser on and off, and
+ * to set spindle speed, spindle direction, and laser power.
+ *
+ * SuperPid is a router/spindle speed controller used in the CNC milling community.
+ * Marlin can be used to turn the spindle on and off. It can also be used to set
+ * the spindle speed from 5,000 to 30,000 RPM.
+ *
+ * You'll need to select a pin for the ON/OFF function and optionally choose a 0-5V
+ * hardware PWM pin for the speed control and a pin for the rotation direction.
+ *
+ * See http://marlinfw.org/docs/configuration/laser_spindle.html for more config details.
+ */
+//#define SPINDLE_FEATURE
+//#define LASER_FEATURE
+#if EITHER(SPINDLE_FEATURE, LASER_FEATURE)
+ #define SPINDLE_LASER_ACTIVE_HIGH false // Set to "true" if the on/off function is active HIGH
+ #define SPINDLE_LASER_PWM true // Set to "true" if your controller supports setting the speed/power
+ #define SPINDLE_LASER_PWM_INVERT true // Set to "true" if the speed/power goes up when you want it to go slower
+ #define SPINDLE_LASER_POWERUP_DELAY 5000 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 5000 // (ms) Delay to allow the spindle to stop
+
+ #if ENABLED(SPINDLE_FEATURE)
+ //#define SPINDLE_CHANGE_DIR // Enable if your spindle controller can change spindle direction
+ #define SPINDLE_CHANGE_DIR_STOP // Enable if the spindle should stop before changing spin direction
+ #define SPINDLE_INVERT_DIR false // Set to "true" if the spin direction is reversed
+
+ /**
+ * The M3 & M4 commands use the following equation to convert PWM duty cycle to speed/power
+ *
+ * SPEED/POWER = PWM duty cycle * SPEED_POWER_SLOPE + SPEED_POWER_INTERCEPT
+ * where PWM duty cycle varies from 0 to 255
+ *
+ * set the following for your controller (ALL MUST BE SET)
+ */
+ #define SPEED_POWER_SLOPE 118.4
+ #define SPEED_POWER_INTERCEPT 0
+ #define SPEED_POWER_MIN 5000
+ #define SPEED_POWER_MAX 30000 // SuperPID router controller 0 - 30,000 RPM
+ #else
+ #define SPEED_POWER_SLOPE 0.3922
+ #define SPEED_POWER_INTERCEPT 0
+ #define SPEED_POWER_MIN 10
+ #define SPEED_POWER_MAX 100 // 0-100%
+ #endif
+#endif
+
+/**
+ * Coolant Control
+ *
+ * Add the M7, M8, and M9 commands to turn mist or flood coolant on and off.
+ *
+ * Note: COOLANT_MIST_PIN and/or COOLANT_FLOOD_PIN must also be defined.
+ */
+//#define COOLANT_CONTROL
+#if ENABLED(COOLANT_CONTROL)
+ #define COOLANT_MIST // Enable if mist coolant is present
+ #define COOLANT_FLOOD // Enable if flood coolant is present
+ #define COOLANT_MIST_INVERT false // Set "true" if the on/off function is reversed
+ #define COOLANT_FLOOD_INVERT false // Set "true" if the on/off function is reversed
+#endif
+
+/**
+ * Filament Width Sensor
+ *
+ * Measures the filament width in real-time and adjusts
+ * flow rate to compensate for any irregularities.
+ *
+ * Also allows the measured filament diameter to set the
+ * extrusion rate, so the slicer only has to specify the
+ * volume.
+ *
+ * Only a single extruder is supported at this time.
+ *
+ * 34 RAMPS_14 : Analog input 5 on the AUX2 connector
+ * 81 PRINTRBOARD : Analog input 2 on the Exp1 connector (version B,C,D,E)
+ * 301 RAMBO : Analog input 3
+ *
+ * Note: May require analog pins to be defined for other boards.
+ */
+//#define FILAMENT_WIDTH_SENSOR
+
+#if ENABLED(FILAMENT_WIDTH_SENSOR)
+ #define FILAMENT_SENSOR_EXTRUDER_NUM 0 // Index of the extruder that has the filament sensor. :[0,1,2,3,4]
+ #define MEASUREMENT_DELAY_CM 14 // (cm) The distance from the filament sensor to the melting chamber
+
+ #define FILWIDTH_ERROR_MARGIN 1.0 // (mm) If a measurement differs too much from nominal width ignore it
+ #define MAX_MEASUREMENT_DELAY 20 // (bytes) Buffer size for stored measurements (1 byte per cm). Must be larger than MEASUREMENT_DELAY_CM.
+
+ #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA // Set measured to nominal initially
+
+ // Display filament width on the LCD status line. Status messages will expire after 5 seconds.
+ //#define FILAMENT_LCD_DISPLAY
+#endif
+
+/**
+ * CNC Coordinate Systems
+ *
+ * Enables G53 and G54-G59.3 commands to select coordinate systems
+ * and G92.1 to reset the workspace to native machine space.
+ */
+//#define CNC_COORDINATE_SYSTEMS
+
+/**
+ * Auto-report temperatures with M155 S
+ */
+#define AUTO_REPORT_TEMPERATURES
+
+/**
+ * Include capabilities in M115 output
+ */
+#define EXTENDED_CAPABILITIES_REPORT
+
+/**
+ * Expected Printer Check
+ * Add the M16 G-code to compare a string to the MACHINE_NAME.
+ * M16 with a non-matching string causes the printer to halt.
+ */
+//#define EXPECTED_PRINTER_CHECK
+
+/**
+ * Disable all Volumetric extrusion options
+ */
+//#define NO_VOLUMETRICS
+
+#if DISABLED(NO_VOLUMETRICS)
+ /**
+ * Volumetric extrusion default state
+ * Activate to make volumetric extrusion the default method,
+ * with DEFAULT_NOMINAL_FILAMENT_DIA as the default diameter.
+ *
+ * M200 D0 to disable, M200 Dn to set a new diameter.
+ */
+ //#define VOLUMETRIC_DEFAULT_ON
+#endif
+
+/**
+ * Enable this option for a leaner build of Marlin that removes all
+ * workspace offsets, simplifying coordinate transformations, leveling, etc.
+ *
+ * - M206 and M428 are disabled.
+ * - G92 will revert to its behavior from Marlin 1.0.
+ */
+//#define NO_WORKSPACE_OFFSETS
+
+/**
+ * Set the number of proportional font spaces required to fill up a typical character space.
+ * This can help to better align the output of commands like `G29 O` Mesh Output.
+ *
+ * For clients that use a fixed-width font (like OctoPrint), leave this set to 1.0.
+ * Otherwise, adjust according to your client and font.
+ */
+#define PROPORTIONAL_FONT_RATIO 1.0
+
+/**
+ * Spend 28 bytes of SRAM to optimize the GCode parser
+ */
+#define FASTER_GCODE_PARSER
+
+/**
+ * CNC G-code options
+ * Support CNC-style G-code dialects used by laser cutters, drawing machine cams, etc.
+ * Note that G0 feedrates should be used with care for 3D printing (if used at all).
+ * High feedrates may cause ringing and harm print quality.
+ */
+//#define PAREN_COMMENTS // Support for parentheses-delimited comments
+//#define GCODE_MOTION_MODES // Remember the motion mode (G0 G1 G2 G3 G5 G38.X) and apply for X Y Z E F, etc.
+
+// Enable and set a (default) feedrate for all G0 moves
+//#define G0_FEEDRATE 3000 // (mm/m)
+#ifdef G0_FEEDRATE
+ //#define VARIABLE_G0_FEEDRATE // The G0 feedrate is set by F in G0 motion mode
+#endif
+
+/**
+ * Startup commands
+ *
+ * Execute certain G-code commands immediately after power-on.
+ */
+//#define STARTUP_COMMANDS "M17 Z"
+
+/**
+ * G-code Macros
+ *
+ * Add G-codes M810-M819 to define and run G-code macros.
+ * Macros are not saved to EEPROM.
+ */
+//#define GCODE_MACROS
+#if ENABLED(GCODE_MACROS)
+ #define GCODE_MACROS_SLOTS 5 // Up to 10 may be used
+ #define GCODE_MACROS_SLOT_SIZE 50 // Maximum length of a single macro
+#endif
+
+/**
+ * User-defined menu items that execute custom GCode
+ */
+//#define CUSTOM_USER_MENUS
+#if ENABLED(CUSTOM_USER_MENUS)
+ //#define CUSTOM_USER_MENU_TITLE "Custom Commands"
+ #define USER_SCRIPT_DONE "M117 User Script Done"
+ #define USER_SCRIPT_AUDIBLE_FEEDBACK
+ //#define USER_SCRIPT_RETURN // Return to status screen after a script
+
+ #define USER_DESC_1 "Home & UBL Info"
+ #define USER_GCODE_1 "G28\nG29 W"
+
+ #define USER_DESC_2 "Preheat for " PREHEAT_1_LABEL
+ #define USER_GCODE_2 "M140 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND)
+
+ #define USER_DESC_3 "Preheat for " PREHEAT_2_LABEL
+ #define USER_GCODE_3 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND)
+
+ #define USER_DESC_4 "Heat Bed/Home/Level"
+ #define USER_GCODE_4 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nG28\nG29"
+
+ #define USER_DESC_5 "Home & Info"
+ #define USER_GCODE_5 "G28\nM503"
+#endif
+
+/**
+ * Host Action Commands
+ *
+ * Define host streamer action commands in compliance with the standard.
+ *
+ * See https://reprap.org/wiki/G-code#Action_commands
+ * Common commands ........ poweroff, pause, paused, resume, resumed, cancel
+ * G29_RETRY_AND_RECOVER .. probe_rewipe, probe_failed
+ *
+ * Some features add reason codes to extend these commands.
+ *
+ * Host Prompt Support enables Marlin to use the host for user prompts so
+ * filament runout and other processes can be managed from the host side.
+ */
+//#define HOST_ACTION_COMMANDS
+#if ENABLED(HOST_ACTION_COMMANDS)
+ //#define HOST_PROMPT_SUPPORT
+#endif
+
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
+/**
+ * I2C position encoders for closed loop control.
+ * Developed by Chris Barr at Aus3D.
+ *
+ * Wiki: http://wiki.aus3d.com.au/Magnetic_Encoder
+ * Github: https://github.com/Aus3D/MagneticEncoder
+ *
+ * Supplier: http://aus3d.com.au/magnetic-encoder-module
+ * Alternative Supplier: http://reliabuild3d.com/
+ *
+ * Reliabuild encoders have been modified to improve reliability.
+ */
+
+//#define I2C_POSITION_ENCODERS
+#if ENABLED(I2C_POSITION_ENCODERS)
+
+ #define I2CPE_ENCODER_CNT 1 // The number of encoders installed; max of 5
+ // encoders supported currently.
+
+ #define I2CPE_ENC_1_ADDR I2CPE_PRESET_ADDR_X // I2C address of the encoder. 30-200.
+ #define I2CPE_ENC_1_AXIS X_AXIS // Axis the encoder module is installed on. _AXIS.
+ #define I2CPE_ENC_1_TYPE I2CPE_ENC_TYPE_LINEAR // Type of encoder: I2CPE_ENC_TYPE_LINEAR -or-
+ // I2CPE_ENC_TYPE_ROTARY.
+ #define I2CPE_ENC_1_TICKS_UNIT 2048 // 1024 for magnetic strips with 2mm poles; 2048 for
+ // 1mm poles. For linear encoders this is ticks / mm,
+ // for rotary encoders this is ticks / revolution.
+ //#define I2CPE_ENC_1_TICKS_REV (16 * 200) // Only needed for rotary encoders; number of stepper
+ // steps per full revolution (motor steps/rev * microstepping)
+ //#define I2CPE_ENC_1_INVERT // Invert the direction of axis travel.
+ #define I2CPE_ENC_1_EC_METHOD I2CPE_ECM_MICROSTEP // Type of error error correction.
+ #define I2CPE_ENC_1_EC_THRESH 0.10 // Threshold size for error (in mm) above which the
+ // printer will attempt to correct the error; errors
+ // smaller than this are ignored to minimize effects of
+ // measurement noise / latency (filter).
+
+ #define I2CPE_ENC_2_ADDR I2CPE_PRESET_ADDR_Y // Same as above, but for encoder 2.
+ #define I2CPE_ENC_2_AXIS Y_AXIS
+ #define I2CPE_ENC_2_TYPE I2CPE_ENC_TYPE_LINEAR
+ #define I2CPE_ENC_2_TICKS_UNIT 2048
+ //#define I2CPE_ENC_2_TICKS_REV (16 * 200)
+ //#define I2CPE_ENC_2_INVERT
+ #define I2CPE_ENC_2_EC_METHOD I2CPE_ECM_MICROSTEP
+ #define I2CPE_ENC_2_EC_THRESH 0.10
+
+ #define I2CPE_ENC_3_ADDR I2CPE_PRESET_ADDR_Z // Encoder 3. Add additional configuration options
+ #define I2CPE_ENC_3_AXIS Z_AXIS // as above, or use defaults below.
+
+ #define I2CPE_ENC_4_ADDR I2CPE_PRESET_ADDR_E // Encoder 4.
+ #define I2CPE_ENC_4_AXIS E_AXIS
+
+ #define I2CPE_ENC_5_ADDR 34 // Encoder 5.
+ #define I2CPE_ENC_5_AXIS E_AXIS
+
+ // Default settings for encoders which are enabled, but without settings configured above.
+ #define I2CPE_DEF_TYPE I2CPE_ENC_TYPE_LINEAR
+ #define I2CPE_DEF_ENC_TICKS_UNIT 2048
+ #define I2CPE_DEF_TICKS_REV (16 * 200)
+ #define I2CPE_DEF_EC_METHOD I2CPE_ECM_NONE
+ #define I2CPE_DEF_EC_THRESH 0.1
+
+ //#define I2CPE_ERR_THRESH_ABORT 100.0 // Threshold size for error (in mm) error on any given
+ // axis after which the printer will abort. Comment out to
+ // disable abort behavior.
+
+ #define I2CPE_TIME_TRUSTED 10000 // After an encoder fault, there must be no further fault
+ // for this amount of time (in ms) before the encoder
+ // is trusted again.
+
+ /**
+ * Position is checked every time a new command is executed from the buffer but during long moves,
+ * this setting determines the minimum update time between checks. A value of 100 works well with
+ * error rolling average when attempting to correct only for skips and not for vibration.
+ */
+ #define I2CPE_MIN_UPD_TIME_MS 4 // (ms) Minimum time between encoder checks.
+
+ // Use a rolling average to identify persistant errors that indicate skips, as opposed to vibration and noise.
+ #define I2CPE_ERR_ROLLING_AVERAGE
+
+#endif // I2C_POSITION_ENCODERS
+
+/**
+ * Analog Joystick(s)
+ */
+//#define JOYSTICK
+#if ENABLED(JOYSTICK)
+ #define JOY_X_PIN 5 // RAMPS: Suggested pin A5 on AUX2
+ #define JOY_Y_PIN 10 // RAMPS: Suggested pin A10 on AUX2
+ #define JOY_Z_PIN 12 // RAMPS: Suggested pin A12 on AUX2
+ #define JOY_EN_PIN 44 // RAMPS: Suggested pin D44 on AUX2
+
+ // Use M119 to find reasonable values after connecting your hardware:
+ #define JOY_X_LIMITS { 5600, 8190-100, 8190+100, 10800 } // min, deadzone start, deadzone end, max
+ #define JOY_Y_LIMITS { 5600, 8250-100, 8250+100, 11000 }
+ #define JOY_Z_LIMITS { 4800, 8080-100, 8080+100, 11550 }
+#endif
+
+/**
+ * MAX7219 Debug Matrix
+ *
+ * Add support for a low-cost 8x8 LED Matrix based on the Max7219 chip as a realtime status display.
+ * Requires 3 signal wires. Some useful debug options are included to demonstrate its usage.
+ */
+//#define MAX7219_DEBUG
+#if ENABLED(MAX7219_DEBUG)
+ #define MAX7219_CLK_PIN 64
+ #define MAX7219_DIN_PIN 57
+ #define MAX7219_LOAD_PIN 44
+
+ //#define MAX7219_GCODE // Add the M7219 G-code to control the LED matrix
+ #define MAX7219_INIT_TEST 2 // Do a test pattern at initialization (Set to 2 for spiral)
+ #define MAX7219_NUMBER_UNITS 1 // Number of Max7219 units in chain.
+ #define MAX7219_ROTATE 0 // Rotate the display clockwise (in multiples of +/- 90°)
+ // connector at: right=0 bottom=-90 top=90 left=180
+ //#define MAX7219_REVERSE_ORDER // The individual LED matrix units may be in reversed order
+ //#define MAX7219_SIDE_BY_SIDE // Big chip+matrix boards can be chained side-by-side
+
+ /**
+ * Sample debug features
+ * If you add more debug displays, be careful to avoid conflicts!
+ */
+ #define MAX7219_DEBUG_PRINTER_ALIVE // Blink corner LED of 8x8 matrix to show that the firmware is functioning
+ #define MAX7219_DEBUG_PLANNER_HEAD 3 // Show the planner queue head position on this and the next LED matrix row
+ #define MAX7219_DEBUG_PLANNER_TAIL 5 // Show the planner queue tail position on this and the next LED matrix row
+
+ #define MAX7219_DEBUG_PLANNER_QUEUE 0 // Show the current planner queue depth on this and the next LED matrix row
+ // If you experience stuttering, reboots, etc. this option can reveal how
+ // tweaks made to the configuration are affecting the printer in real-time.
+#endif
+
+/**
+ * NanoDLP Sync support
+ *
+ * Add support for Synchronized Z moves when using with NanoDLP. G0/G1 axis moves will output "Z_move_comp"
+ * string to enable synchronization with DLP projector exposure. This change will allow to use
+ * [[WaitForDoneMessage]] instead of populating your gcode with M400 commands
+ */
+//#define NANODLP_Z_SYNC
+#if ENABLED(NANODLP_Z_SYNC)
+ //#define NANODLP_ALL_AXIS // Enables "Z_move_comp" output on any axis move.
+ // Default behavior is limited to Z axis only.
+#endif
+
+/**
+ * WiFi Support (Espressif ESP32 WiFi)
+ */
+//#define WIFISUPPORT
+#if ENABLED(WIFISUPPORT)
+ #define WIFI_SSID "Wifi SSID"
+ #define WIFI_PWD "Wifi Password"
+ //#define WEBSUPPORT // Start a webserver with auto-discovery
+ //#define OTASUPPORT // Support over-the-air firmware updates
+#endif
+
+/**
+ * Prusa Multi-Material Unit v2
+ * Enable in Configuration.h
+ */
+#if ENABLED(PRUSA_MMU2)
+
+ // Serial port used for communication with MMU2.
+ // For AVR enable the UART port used for the MMU. (e.g., internalSerial)
+ // For 32-bit boards check your HAL for available serial ports. (e.g., Serial2)
+ #define INTERNAL_SERIAL_PORT 2
+ #define MMU2_SERIAL internalSerial
+
+ // Use hardware reset for MMU if a pin is defined for it
+ //#define MMU2_RST_PIN 23
+
+ // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)
+ //#define MMU2_MODE_12V
+
+ // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout
+ #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"
+
+ // Add an LCD menu for MMU2
+ //#define MMU2_MENUS
+ #if ENABLED(MMU2_MENUS)
+ // Settings for filament load / unload from the LCD menu.
+ // This is for Prusa MK3-style extruders. Customize for your hardware.
+ #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0
+ #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \
+ { 7.2, 562 }, \
+ { 14.4, 871 }, \
+ { 36.0, 1393 }, \
+ { 14.4, 871 }, \
+ { 50.0, 198 }
+
+ #define MMU2_RAMMING_SEQUENCE \
+ { 1.0, 1000 }, \
+ { 1.0, 1500 }, \
+ { 2.0, 2000 }, \
+ { 1.5, 3000 }, \
+ { 2.5, 4000 }, \
+ { -15.0, 5000 }, \
+ { -14.0, 1200 }, \
+ { -6.0, 600 }, \
+ { 10.0, 700 }, \
+ { -10.0, 400 }, \
+ { -50.0, 2000 }
+
+ #endif
+
+ //#define MMU2_DEBUG // Write debug info to serial output
+
+#endif // PRUSA_MMU2
+
+/**
+ * Advanced Print Counter settings
+ */
+#if ENABLED(PRINTCOUNTER)
+ #define SERVICE_WARNING_BUZZES 3
+ // Activate up to 3 service interval watchdogs
+ //#define SERVICE_NAME_1 "Service S"
+ //#define SERVICE_INTERVAL_1 100 // print hours
+ //#define SERVICE_NAME_2 "Service L"
+ //#define SERVICE_INTERVAL_2 200 // print hours
+ //#define SERVICE_NAME_3 "Service 3"
+ //#define SERVICE_INTERVAL_3 1 // print hours
+#endif
+
+// @section develop
+
+/**
+ * M43 - display pin status, watch pins for changes, watch endstops & toggle LED, Z servo probe test, toggle pins
+ */
+//#define PINS_DEBUGGING
+
+// Enable Marlin dev mode which adds some special commands
+//#define MARLIN_DEV_MODE
diff --git a/config/examples/Wanhao/Duplicator i3 2.1/README.md b/config/examples/Wanhao/Duplicator i3 2.1/README.md
new file mode 100644
index 000000000000..d2a7ea6401fa
--- /dev/null
+++ b/config/examples/Wanhao/Duplicator i3 2.1/README.md
@@ -0,0 +1,21 @@
+Configuration for the Wanhao Duplicator i3 v2.1
+
+[Made by Bot-In-a-Box Educational Robotics](https://botinabox.ca)
+[See original configuration repo](https://github.com/BotInABoxER/marlin2-for-wanhao-i3)
+
+Notes:
+- YMMV, but the included thermistor table has been tested to work with a 100k bed thermistor with a 10K pull-up resistor
+- The smaller Marlin logo is used to save memory
+- You may have a 4.7K pull-up resistor, in which case the included thermistor table will be off
+- The included thermistor table was generated with `buildroot/share/scripts/createTemperatureLookupMarlin.py --rp=10000`
+- Includes an optional custom Wanhao logo bootscreen designed to fit the stock LCD
+- Includes an optional custom Chippy from Bot-In-a-Box bootscreen designed to fit the stock LCD
+
+Inspirations:
+- https://www.thingiverse.com/thing:3378807 (Custom firmware 1.x by Nitrogen777)
+- https://www.thingiverse.com/thing:3378807 (Custom firmware 2.x by Remotheman)
+
+Instructions:
+- Copy the `Configuration.h`, `_Bootscreen.h` (or `Chippy_Bootscreen.h`; rename it `_Bootscreen.h`), and `Configuration_adv.h` to the `Marlin/ directory`
+- Copy the `thermistor_99.h` and `thermistors.h` files to the `Marlin/src/modules/thermistors` directory
+- Flash the firmware onto your Melzi (https://www.fission3d.com/guides/flash-bootloader-and-install-firmware-with-raspberry-pi might help)
diff --git a/config/examples/Wanhao/Duplicator i3 2.1/_Bootscreen.h b/config/examples/Wanhao/Duplicator i3 2.1/_Bootscreen.h
new file mode 100644
index 000000000000..34686deeaa74
--- /dev/null
+++ b/config/examples/Wanhao/Duplicator i3 2.1/_Bootscreen.h
@@ -0,0 +1,72 @@
+/**
+ * Made with Marlin Bitmap Converter
+ * http://marlinfw.org/tools/u8glib/converter.html
+ *
+ * This bitmap from 128x64 pasted image
+ */
+#define CUSTOM_BOOTSCREEN_BMPWIDTH 104
+
+const unsigned char custom_start_bmp[] PROGMEM = {
+ B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B11111111,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00010000,B00000000,B00000011,B11111111,B10111000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00000000,B00000111,B10111111,B10000000,B01111111,B11111111,B00111111,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00000000,B00011111,B10111111,B11111111,B11111111,B11111111,B01111111,B11100000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00000000,B01111111,B10111111,B11111111,B11111111,B11111110,B01111111,B11110000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00000001,B11111111,B00111111,B11111111,B11111111,B11111100,B11111111,B11111000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00000111,B11111111,B01111111,B11111111,B11111111,B11111101,B11111111,B11111110,B00111100,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00011111,B11111111,B01111111,B11111111,B11111111,B11111101,B11111111,B11111111,B11111111,B11000000,
+ B00000000,B00000000,B00000000,B00000000,B01111111,B11111110,B01111111,B11111111,B11111111,B11111101,B11111111,B11111111,B10000001,B11100000,
+ B00000000,B00000000,B00000000,B00000001,B11111111,B11111110,B11111111,B11111111,B11111111,B11111101,B11111111,B11111110,B00000000,B11111000,
+ B00000000,B00000000,B00000000,B00000011,B11111111,B11111110,B11111111,B11111111,B11111111,B11111101,B11111111,B11111110,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00001111,B11111111,B11111110,B11111111,B11111111,B11111111,B11111101,B11111111,B11111110,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B01101111,B11111111,B11111110,B11111111,B11111111,B11111111,B11111101,B11111111,B11111111,B00000000,B00000000,
+ B00000000,B00000000,B00000001,B11101111,B11111111,B11111110,B11111111,B11111111,B11111111,B11111101,B11111111,B11111111,B00000000,B00000000,
+ B00000000,B00000000,B01100111,B11001111,B11111111,B11111110,B01111111,B11111111,B11111111,B11111101,B11111111,B11111111,B00000000,B00000000,
+ B00000000,B00000111,B01111111,B11011111,B11111111,B11111111,B01111111,B11111111,B11111111,B11111100,B11111111,B11111111,B00000000,B00000000,
+ B00000000,B00000111,B11111111,B11011111,B11111111,B11111111,B01111111,B11111111,B11111111,B11111110,B11111111,B11111111,B00000000,B00000000,
+ B00000000,B00000011,B11111111,B11011111,B11111111,B11111111,B00111111,B11111111,B11111111,B11111110,B11111111,B11111111,B10000000,B00000000,
+ B00000000,B00000011,B11111111,B11001111,B11111111,B11111111,B10111111,B11111111,B11111111,B11111110,B01111111,B11111111,B10000000,B00000000,
+ B00000000,B00000001,B11111111,B11101111,B11111111,B11111111,B10111111,B11111111,B11111111,B11111111,B01111111,B11111111,B11000000,B00000000,
+ B00000000,B00000001,B11111111,B11101111,B11111111,B11111111,B10011111,B11111111,B11111111,B11111111,B01111111,B11111111,B11000000,B00000000,
+ B00000000,B00000001,B11111111,B11101111,B11111111,B11111111,B11011111,B11111111,B11111111,B11111111,B01111111,B11111111,B11000000,B00000000,
+ B00000000,B00000001,B11111111,B11100111,B11111111,B11111111,B11011111,B11111111,B11111111,B11111111,B00111111,B11111111,B11000000,B00000000,
+ B00000000,B00000001,B11111111,B11110111,B11111111,B11111111,B11011111,B11111111,B11111111,B11111111,B10111111,B11111111,B11000000,B00000000,
+ B00000000,B01000001,B11111111,B11110011,B11111111,B11111111,B11001111,B11111111,B11111111,B11111111,B10111111,B11111111,B10000000,B00000000,
+ B00000000,B01100001,B11111111,B11111001,B11111111,B11111111,B11101111,B11111111,B11111111,B11111111,B10111111,B11111111,B10100000,B00000000,
+ B00000000,B01111001,B11111111,B11111101,B11111111,B11111111,B11101111,B11111111,B11111111,B11111111,B00111111,B11111111,B00110000,B00000000,
+ B00001000,B01111111,B11111111,B11111100,B11111111,B11111111,B11101111,B11111111,B11111111,B11111111,B01111111,B11111110,B01110000,B00000000,
+ B00001100,B00111111,B11111111,B11111110,B01111111,B11111111,B11101111,B11111111,B11111111,B11111100,B00111111,B11111100,B11111000,B00000000,
+ B00001111,B00111111,B11111111,B11111111,B00000000,B00111111,B11101111,B11111111,B11111111,B11110001,B10001111,B11111001,B11111100,B00000000,
+ B00000111,B11111111,B11111111,B11111111,B00111111,B10001111,B11100111,B11111111,B11111111,B11000011,B11100011,B11111011,B11111110,B00000000,
+ B00000111,B11111111,B11111111,B11111110,B00111111,B11100011,B11000000,B11111111,B11111110,B00000001,B11111000,B11110011,B11111111,B00000000,
+ B00000011,B11111111,B11111111,B11111000,B00011111,B11111000,B00000000,B00001111,B11110000,B00000001,B11111110,B00000111,B11111111,B00000000,
+ B00000011,B11111111,B11111111,B11100000,B00001111,B11111101,B11000000,B00000000,B00000000,B00000001,B11111111,B11101111,B11111111,B00000000,
+ B00000001,B11111111,B11111111,B11000000,B00001111,B11111101,B11111100,B00000000,B00000000,B00000111,B11111111,B11100111,B11111110,B00000000,
+ B00000000,B11111111,B11111111,B10000000,B00000111,B11111101,B11111110,B00000000,B00000000,B00001111,B11111111,B11100011,B11111100,B00000000,
+ B00000000,B01111111,B11111111,B00000000,B00000011,B11111101,B11111111,B00000000,B00000000,B00011111,B11111111,B10000011,B11111100,B00000000,
+ B00000000,B00111111,B11111110,B00000000,B00000011,B11111001,B11111111,B00000000,B00000000,B00011111,B11111110,B00000111,B11111000,B00000000,
+ B00000000,B00011111,B11111100,B00000000,B00000011,B11111011,B11111111,B10000000,B00000000,B00111111,B11111100,B00000111,B11111000,B00000000,
+ B00000000,B00011111,B11110000,B00000000,B00000011,B11110001,B11111111,B11000000,B00000000,B01111111,B11100000,B00001111,B11111000,B00000000,
+ B00000000,B00001111,B11110000,B00000000,B00000111,B11110000,B00001111,B11000000,B00000000,B11111111,B10000000,B00011111,B11110000,B00000000,
+ B00000000,B00000011,B11000000,B00000000,B00001111,B11110000,B00000001,B11000000,B00000000,B11111111,B10000000,B00011111,B11100000,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
+ B00000111,B10000111,B10000111,B10000001,B11110000,B00011110,B00000111,B10001111,B00000011,B11000000,B01111100,B00000000,B11111111,B00000000,
+ B00000111,B10000111,B10000111,B10000001,B11110000,B00011111,B00000111,B10001111,B00000011,B11000000,B01111100,B00000001,B11111111,B10000000,
+ B00000111,B10000111,B10000111,B10000011,B11111000,B00011111,B00000111,B10001111,B00000011,B11000000,B11111110,B00000011,B11111111,B11000000,
+ B00000111,B10000111,B10000111,B10000011,B11111000,B00011111,B10000111,B10001111,B00000011,B11000000,B11111110,B00000111,B11111111,B11100000,
+ B00000111,B10000111,B10000111,B10000111,B10111100,B00011111,B11000111,B10001111,B00000011,B11000001,B11101111,B00000111,B11000011,B11100000,
+ B00000111,B10000111,B10000111,B10000111,B00011100,B00011111,B11100111,B10001111,B00000011,B11000001,B11000111,B00001111,B10000001,B11110000,
+ B00000111,B10000111,B10000111,B10000111,B00011100,B00011111,B11110111,B10001111,B11111111,B11000001,B11000111,B00001111,B00000000,B11110000,
+ B00000111,B11001111,B11001111,B10001111,B00011110,B00011111,B11111111,B10001111,B11111111,B11000011,B11000111,B10001111,B00000000,B11110000,
+ B00000011,B11001111,B11001111,B00001110,B00001110,B00011111,B11111111,B10001111,B11111111,B11000011,B10000011,B10001111,B00000000,B11110000,
+ B00000011,B11101111,B11011111,B00001111,B11111110,B00011110,B11111111,B10001111,B00000011,B11000011,B11111111,B10001111,B00000000,B11110000,
+ B00000001,B11111111,B11111110,B00011111,B11111111,B00011110,B01111111,B10001111,B00000011,B11000111,B11111111,B11001111,B10000001,B11110000,
+ B00000001,B11111100,B11111110,B00011111,B11111111,B00011110,B00111111,B10001111,B00000011,B11000111,B11111111,B11000111,B11000011,B11100000,
+ B00000000,B11111100,B11111100,B00011111,B11111111,B00011110,B00011111,B10001111,B00000011,B11000111,B11111111,B11000111,B11111111,B11100000,
+ B00000000,B01111100,B11111000,B00111110,B00001111,B10011110,B00001111,B10001111,B00000011,B11001111,B10000011,B11100011,B11111111,B11000000,
+ B00000000,B01111000,B01111000,B00111100,B00000111,B10011110,B00001111,B10001111,B00000011,B11001111,B00000001,B11100001,B11111111,B10000000,
+ B00000000,B00111000,B01110000,B00111100,B00000111,B10011110,B00000111,B10001111,B00000011,B11001111,B00000001,B11100000,B01111110,B00000000
+};
diff --git a/config/examples/Wanhao/Duplicator i3 Mini/Configuration.h b/config/examples/Wanhao/Duplicator i3 Mini/Configuration.h
index 6a256a95fb0d..35cb62a9bda0 100755
--- a/config/examples/Wanhao/Duplicator i3 Mini/Configuration.h
+++ b/config/examples/Wanhao/Duplicator i3 Mini/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(thisiskeithb, Wanhao i3 Mini)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 13
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 400, 400, 15, 50 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 3000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.05 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h
index 8f56c1098e7e..b6ebb7afff7c 100644
--- a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h
+++ b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/adafruit/ST7565/Configuration.h b/config/examples/adafruit/ST7565/Configuration.h
index 8ed568a92dea..71285deee5cb 100644
--- a/config/examples/adafruit/ST7565/Configuration.h
+++ b/config/examples/adafruit/ST7565/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -725,6 +725,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -733,6 +738,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -746,35 +756,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1558,10 +1571,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/delta/Anycubic/Kossel/Configuration.h b/config/examples/delta/Anycubic/Kossel/Configuration.h
index c18b06541560..428fd0b0efb5 100644
--- a/config/examples/delta/Anycubic/Kossel/Configuration.h
+++ b/config/examples/delta/Anycubic/Kossel/Configuration.h
@@ -87,6 +87,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "@brandstaetter, @grbd" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -398,6 +399,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -415,8 +417,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -855,6 +855,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 100, 100, 100, 100}
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -863,6 +868,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 3000, 3000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -876,35 +886,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 5.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.003 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1744,10 +1757,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h
index 83529720b129..f6982459379c 100644
--- a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h
+++ b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -889,6 +904,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1288,7 +1312,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2037,6 +2062,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2535,6 +2562,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/delta/Dreammaker/Overlord/Configuration.h b/config/examples/delta/Dreammaker/Overlord/Configuration.h
index 4bb023181d81..3fc7551028b6 100644
--- a/config/examples/delta/Dreammaker/Overlord/Configuration.h
+++ b/config/examples/delta/Dreammaker/Overlord/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Team Overlord/TimMoore)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 201
#define TEMP_SENSOR_1 201
@@ -827,28 +827,15 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta
@@ -856,6 +843,17 @@
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1668,10 +1666,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h
index f977553196d5..916860689f76 100644
--- a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h
+++ b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -889,6 +904,15 @@
// Add an 'M73' G-code to set the current percentage
#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1288,8 +1312,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 10 // Babysteps are very small. Increase for faster motion.
-
+ #define BABYSTEP_MULTIPLICATOR_Z 10 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 10
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
#define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds.
@@ -2027,6 +2051,8 @@
* Too low values can lead to false positives, while too high values will collide the axis without triggering.
* It is advised to set X/Y/Z_HOME_BUMP_MM to 0.
* M914 X/Y/Z to live tune the setting
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2523,6 +2549,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration.h b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration.h
index c69a173ed1c1..5c8047fed3ac 100644
--- a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration.h
+++ b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Team Overlord/TimMoore)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 201
#define TEMP_SENSOR_1 201
@@ -839,28 +839,15 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta
@@ -868,6 +855,17 @@
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1679,10 +1677,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h
index f977553196d5..a113b8b3816e 100644
--- a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h
+++ b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -889,6 +904,15 @@
// Add an 'M73' G-code to set the current percentage
#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1288,7 +1312,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 10 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 10 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 10
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2027,6 +2052,8 @@
* Too low values can lead to false positives, while too high values will collide the axis without triggering.
* It is advised to set X/Y/Z_HOME_BUMP_MM to 0.
* M914 X/Y/Z to live tune the setting
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2523,6 +2550,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration.h
index 0fe1da99252c..1555b6bef857 100644
--- a/config/examples/delta/FLSUN/auto_calibrate/Configuration.h
+++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(LVD, FLSUN-AC)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -807,6 +807,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -815,6 +820,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 4000, 4000, 4000, 4000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -828,35 +838,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1672,10 +1685,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h
index 35644b66faa8..582c3290e3ff 100644
--- a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h
+++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -889,6 +904,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1288,7 +1312,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2037,6 +2062,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2535,6 +2562,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/delta/FLSUN/kossel/Configuration.h b/config/examples/delta/FLSUN/kossel/Configuration.h
index 74bd37da761e..45d54086d0d8 100644
--- a/config/examples/delta/FLSUN/kossel/Configuration.h
+++ b/config/examples/delta/FLSUN/kossel/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(LVD, FLSUN-AC)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -807,6 +807,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -815,6 +820,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 4000, 4000, 4000, 4000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -828,35 +838,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1671,10 +1684,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/delta/FLSUN/kossel/Configuration_adv.h b/config/examples/delta/FLSUN/kossel/Configuration_adv.h
index 35644b66faa8..582c3290e3ff 100644
--- a/config/examples/delta/FLSUN/kossel/Configuration_adv.h
+++ b/config/examples/delta/FLSUN/kossel/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -889,6 +904,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1288,7 +1312,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2037,6 +2062,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2535,6 +2562,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration.h b/config/examples/delta/FLSUN/kossel_mini/Configuration.h
index 5c81e5f1f86d..fa5067aca944 100644
--- a/config/examples/delta/FLSUN/kossel_mini/Configuration.h
+++ b/config/examples/delta/FLSUN/kossel_mini/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Michael Henke, flsun Kossel Mini)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -807,6 +807,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 200 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -815,6 +820,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 4000, 4000, 4000, 4000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -828,35 +838,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.016 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1671,10 +1684,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h
index 8bf14e194ac7..281946d988be 100644
--- a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h
+++ b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -889,6 +904,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1288,7 +1312,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2037,6 +2062,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2535,6 +2562,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration.h b/config/examples/delta/Geeetech/Rostock 301/Configuration.h
index 1eedcf2e06ac..8539bb1610e9 100644
--- a/config/examples/delta/Geeetech/Rostock 301/Configuration.h
+++ b/config/examples/delta/Geeetech/Rostock 301/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(Phr3d13, Geeetech Rostock 301)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -797,6 +797,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 500, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -805,6 +810,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 9000, 9000, 9000, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -818,35 +828,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1659,10 +1672,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h
index 5bd126a166c6..71002d227ced 100644
--- a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h
+++ b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -889,6 +904,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1288,7 +1312,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2037,6 +2062,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2535,6 +2562,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/delta/Hatchbox_Alpha/Configuration.h b/config/examples/delta/Hatchbox_Alpha/Configuration.h
index bc3f024b3992..905b3076f8f7 100644
--- a/config/examples/delta/Hatchbox_Alpha/Configuration.h
+++ b/config/examples/delta/Hatchbox_Alpha/Configuration.h
@@ -77,6 +77,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -388,6 +389,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -405,8 +407,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -812,6 +812,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 500, 200 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -820,6 +825,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 9000, 9000, 9000, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -833,35 +843,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 20.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.053 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1687,10 +1700,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/delta/MKS/SBASE/Configuration.h b/config/examples/delta/MKS/SBASE/Configuration.h
index 915c069efbf2..7792f04210e0 100644
--- a/config/examples/delta/MKS/SBASE/Configuration.h
+++ b/config/examples/delta/MKS/SBASE/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 -1
#define TEMP_SENSOR_1 0
@@ -797,6 +797,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 500, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -805,6 +810,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 9000, 9000, 9000, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -818,35 +828,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1659,10 +1672,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/delta/MKS/SBASE/Configuration_adv.h b/config/examples/delta/MKS/SBASE/Configuration_adv.h
index 9dcdee4792c6..40ae29fe4fd3 100644
--- a/config/examples/delta/MKS/SBASE/Configuration_adv.h
+++ b/config/examples/delta/MKS/SBASE/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -889,6 +904,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1288,7 +1312,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2037,6 +2062,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2535,6 +2562,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/delta/Tevo Little Monster/Configuration.h b/config/examples/delta/Tevo Little Monster/Configuration.h
index 1c894ce327a4..422987476815 100644
--- a/config/examples/delta/Tevo Little Monster/Configuration.h
+++ b/config/examples/delta/Tevo Little Monster/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(HEINRICHS)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -801,6 +801,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 25000, 25000, 25000, 5000 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -809,6 +814,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 9000, 9000, 9000, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -822,35 +832,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 5000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.008 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1663,10 +1676,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/delta/Tevo Little Monster/Configuration_adv.h b/config/examples/delta/Tevo Little Monster/Configuration_adv.h
index 71b2790f9155..ba12ad6d2c46 100644
--- a/config/examples/delta/Tevo Little Monster/Configuration_adv.h
+++ b/config/examples/delta/Tevo Little Monster/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -889,6 +904,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1288,7 +1312,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2037,6 +2062,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2535,6 +2562,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/delta/generic/Configuration.h b/config/examples/delta/generic/Configuration.h
index 34e68585ba2c..f39a7793334a 100644
--- a/config/examples/delta/generic/Configuration.h
+++ b/config/examples/delta/generic/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 -1
#define TEMP_SENSOR_1 0
@@ -797,6 +797,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 500, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -805,6 +810,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 9000, 9000, 9000, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -818,35 +828,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1659,10 +1672,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/delta/generic/Configuration_adv.h b/config/examples/delta/generic/Configuration_adv.h
index 8bf14e194ac7..281946d988be 100644
--- a/config/examples/delta/generic/Configuration_adv.h
+++ b/config/examples/delta/generic/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -889,6 +904,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1288,7 +1312,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2037,6 +2062,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2535,6 +2562,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/delta/kossel_mini/Configuration.h b/config/examples/delta/kossel_mini/Configuration.h
index 6f32e89d80c0..29da9d67f5d9 100644
--- a/config/examples/delta/kossel_mini/Configuration.h
+++ b/config/examples/delta/kossel_mini/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 7
#define TEMP_SENSOR_1 0
@@ -797,6 +797,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 500, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -805,6 +810,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 9000, 9000, 9000, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -818,35 +828,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1661,10 +1674,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/delta/kossel_mini/Configuration_adv.h b/config/examples/delta/kossel_mini/Configuration_adv.h
index 8bf14e194ac7..281946d988be 100644
--- a/config/examples/delta/kossel_mini/Configuration_adv.h
+++ b/config/examples/delta/kossel_mini/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -889,6 +904,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1288,7 +1312,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2037,6 +2062,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2535,6 +2562,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/delta/kossel_pro/Configuration.h b/config/examples/delta/kossel_pro/Configuration.h
index 8920710d8415..d994e3977074 100644
--- a/config/examples/delta/kossel_pro/Configuration.h
+++ b/config/examples/delta/kossel_pro/Configuration.h
@@ -76,6 +76,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -387,6 +388,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -404,8 +406,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -790,6 +790,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 200 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -798,6 +803,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 9000, 9000, 9000, 9000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -811,35 +821,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1661,10 +1674,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/delta/kossel_xl/Configuration.h b/config/examples/delta/kossel_xl/Configuration.h
index 2e11a8c99159..3cc6eeeb0d4f 100644
--- a/config/examples/delta/kossel_xl/Configuration.h
+++ b/config/examples/delta/kossel_xl/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(oxivanisher)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -800,6 +800,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -808,6 +813,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 9000, 9000, 9000, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -821,35 +831,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 20.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1662,10 +1675,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/delta/kossel_xl/Configuration_adv.h b/config/examples/delta/kossel_xl/Configuration_adv.h
index 73cce925fbc1..f12829dd43ee 100644
--- a/config/examples/delta/kossel_xl/Configuration_adv.h
+++ b/config/examples/delta/kossel_xl/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -889,6 +904,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1288,7 +1312,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2037,6 +2062,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2535,6 +2562,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/gCreate/gMax1.5+/Configuration.h b/config/examples/gCreate/gMax1.5+/Configuration.h
index d5278a6db073..75bcd006c86d 100644
--- a/config/examples/gCreate/gMax1.5+/Configuration.h
+++ b/config/examples/gCreate/gMax1.5+/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -388,6 +389,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -405,8 +407,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -738,6 +738,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 25, 25 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -746,6 +751,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 800, 800, 700, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -759,35 +769,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 400 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 8.5
#define DEFAULT_YJERK 8.5
#define DEFAULT_ZJERK 0.7
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 4.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.058 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1585,10 +1598,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/gCreate/gMax1.5+/Configuration_adv.h b/config/examples/gCreate/gMax1.5+/Configuration_adv.h
index f05d6576b0ff..def7036222d0 100644
--- a/config/examples/gCreate/gMax1.5+/Configuration_adv.h
+++ b/config/examples/gCreate/gMax1.5+/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 3 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 3 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 3
#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/makibox/Configuration.h b/config/examples/makibox/Configuration.h
index 4db20e066e66..e8482ab639a7 100644
--- a/config/examples/makibox/Configuration.h
+++ b/config/examples/makibox/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
@@ -728,6 +728,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 60, 60, 20, 45 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -736,6 +741,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 2000, 2000, 30, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -749,35 +759,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1561,10 +1574,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/makibox/Configuration_adv.h b/config/examples/makibox/Configuration_adv.h
index 2602e0aa526d..c53181bcbd15 100644
--- a/config/examples/makibox/Configuration_adv.h
+++ b/config/examples/makibox/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/tvrrug/Round2/Configuration.h b/config/examples/tvrrug/Round2/Configuration.h
index 7c193cff3cc4..8613b81cb7bc 100644
--- a/config/examples/tvrrug/Round2/Configuration.h
+++ b/config/examples/tvrrug/Round2/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
@@ -718,6 +718,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 45 } // David TVRR
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -728,6 +733,11 @@
/* MICHEL: This has an impact on the "ripples" in print walls */
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -741,35 +751,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 500 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.08 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1553,10 +1566,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/tvrrug/Round2/Configuration_adv.h b/config/examples/tvrrug/Round2/Configuration_adv.h
index 1875773d1160..deba4ce22c6f 100644
--- a/config/examples/tvrrug/Round2/Configuration_adv.h
+++ b/config/examples/tvrrug/Round2/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -887,6 +902,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1286,7 +1310,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2035,6 +2060,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2533,6 +2560,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/config/examples/wt150/Configuration.h b/config/examples/wt150/Configuration.h
index ff3a7c38d206..8aa573ada623 100644
--- a/config/examples/wt150/Configuration.h
+++ b/config/examples/wt150/Configuration.h
@@ -72,6 +72,7 @@
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, wt150)" // Who made the changes.
+//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
/**
* *** VENDORS PLEASE READ ***
@@ -383,6 +384,7 @@
* 67 : 450C thermistor from SliceEngineering
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
+ * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
*
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
* (but gives greater accuracy and more stable PID)
@@ -400,8 +402,6 @@
* Use these for Testing or Development purposes. NEVER for production machine.
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
- *
- * :{ '0':"Not used", '1':"100k / 4.7k - EPCOS", '331':"(3.3V thermistor 1)", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '512':"100k RPW-Ultra hotend thermistor", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '18':"ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327" '20':"Pt100 (Ultimainboard V2.x)", '201':"Pt100 (Overlord)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '61':"100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup", '66':"Dyze Design 4.7M High Temperature thermistor", '67':"Slice Engineering 450C High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595", '998':"Dummy 1", '999':"Dummy 2", '1000':"Custom thermistor params" }
*/
#define TEMP_SENSOR_0 -2
#define TEMP_SENSOR_1 0
@@ -730,6 +730,11 @@
*/
#define DEFAULT_MAX_FEEDRATE { 83.333333, 83.333333, 19.5, 26.666666 }
+//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
+#if ENABLED(LIMITED_MAX_FR_EDITING)
+ #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
+#endif
+
/**
* Default Max Acceleration (change/s) change = mm/s
* (Maximum start speed for accelerated moves)
@@ -738,6 +743,11 @@
*/
#define DEFAULT_MAX_ACCELERATION { 1200, 1200, 100, 10000 }
+//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2
+#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
+ #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits
+#endif
+
/**
* Default Acceleration (change/s) change = mm/s
* Override with M204
@@ -751,35 +761,38 @@
#define DEFAULT_TRAVEL_ACCELERATION 1200 // X, Y, Z acceleration for travel (non printing) moves
/**
- * Junction Deviation
- *
- * Use Junction Deviation instead of traditional Jerk Limiting
- *
- * See:
- * https://reprap.org/forum/read.php?1,739819
- * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
- */
-//#define JUNCTION_DEVIATION
-#if ENABLED(JUNCTION_DEVIATION)
- #define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
-#endif
-
-/**
- * Default Jerk (mm/s)
+ * Default Jerk limits (mm/s)
* Override with M205 X Y Z E
*
* "Jerk" specifies the minimum speed change that requires acceleration.
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
-#if DISABLED(JUNCTION_DEVIATION)
+//#define CLASSIC_JERK
+#if ENABLED(CLASSIC_JERK)
#define DEFAULT_XJERK 8.0
#define DEFAULT_YJERK 8.0
#define DEFAULT_ZJERK 0.3
+
+ //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
+ #if ENABLED(LIMITED_JERK_EDITING)
+ #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
+ #endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
+/**
+ * Junction Deviation Factor
+ *
+ * See:
+ * https://reprap.org/forum/read.php?1,739819
+ * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
+ */
+#if DISABLED(CLASSIC_JERK)
+ #define JUNCTION_DEVIATION_MM 0.021 // (mm) Distance from real junction edge
+#endif
+
/**
* S-Curve Acceleration
*
@@ -1563,10 +1576,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el-gr, es, eu, fi, fr, gl, hr, it, jp-kana,
- * ko_KR, nl, pl, pt, pt-br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
+ * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,
+ * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el-gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp-kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt-br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }
*/
#define LCD_LANGUAGE en
diff --git a/config/examples/wt150/Configuration_adv.h b/config/examples/wt150/Configuration_adv.h
index 1d3c110d52ab..385f5fc67977 100644
--- a/config/examples/wt150/Configuration_adv.h
+++ b/config/examples/wt150/Configuration_adv.h
@@ -379,6 +379,7 @@
#define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW
#define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin)
+ //#define CASE_LIGHT_MAX_PWM 128 // Limit pwm
//#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu
//#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting.
//#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED.
@@ -602,18 +603,32 @@
//#define Z_STEPPER_AUTO_ALIGN
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
// Define probe X and Y positions for Z1, Z2 [, Z3]
- #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align
+ #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } }
+
+ // Provide Z stepper positions for more rapid convergence in bed alignment.
+ // Currently requires triple stepper drivers.
+ //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS
+ #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
+ // Define Stepper XY positions for Z1, Z2, Z3 corresponding to
+ // the Z screw positions in the bed carriage.
+ // Define one position per Z stepper in stepper driver order.
+ #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }
+ #else
+ // Amplification factor. Used to scale the correction step up or down.
+ // In case the stepper (spindle) position is further out than the test point.
+ // Use a value > 1. NOTE: This may cause instability
+ #define Z_STEPPER_ALIGN_AMP 1.0
+ #endif
+
+ // Set number of iterations to align
#define Z_STEPPER_ALIGN_ITERATIONS 3
+
// Enable to restore leveling setup after operation
#define RESTORE_LEVELING_AFTER_G34
// On a 300mm bed a 5% grade would give a misalignment of ~1.5cm
#define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle
- // Use the amplification factor to de-/increase correction step.
- // In case the stepper (spindle) position is further out than the test point
- // Use a value > 1. NOTE: This may cause instability
- #define Z_STEPPER_ALIGN_AMP 1.0
// Stop criterion. If the accuracy is better than this stop iterating early
#define Z_STEPPER_ALIGN_ACC 0.02
#endif
@@ -888,6 +903,15 @@
// Add an 'M73' G-code to set the current percentage
//#define LCD_SET_PROGRESS_MANUALLY
+// Show the E position (filament used) during printing
+//#define LCD_SHOW_E_TOTAL
+
+#if HAS_GRAPHICAL_LCD && HAS_PRINT_PROGRESS
+ //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
+ //#define SHOW_REMAINING_TIME // Display estimated time to completion
+ //#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
+#endif
+
#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS
//#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing
#if ENABLED(LCD_PROGRESS_BAR)
@@ -1287,7 +1311,8 @@
//#define BABYSTEP_WITHOUT_HOMING
//#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!
#define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way
- #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_Z 1 // Babysteps are very small. Increase for faster motion.
+ #define BABYSTEP_MULTIPLICATOR_XY 1
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
@@ -2036,6 +2061,8 @@
*
* IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when
* homing and adds a guard period for endstop triggering.
+ *
+ * TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING
*/
//#define SENSORLESS_HOMING // StallGuard capable drivers only
@@ -2534,6 +2561,13 @@
//#define HOST_PROMPT_SUPPORT
#endif
+/**
+ * Cancel Objects
+ *
+ * Implement M486 to allow Marlin to skip objects
+ */
+//#define CANCEL_OBJECTS
+
/**
* I2C position encoders for closed loop control.
* Developed by Chris Barr at Aus3D.
diff --git a/platformio.ini b/platformio.ini
index ed4ff4ad76bc..ca112f87fb92 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -182,6 +182,32 @@ lib_deps = Servo
TMCStepper@>=0.5.0,<1.0.0
Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/master.zip
+#
+# Sanguinololu (ATmega644p)
+#
+[env:sanguino_atmega644p]
+platform = atmelavr
+framework = arduino
+board = sanguino_atmega644p
+build_flags = ${common.build_flags}
+lib_deps = ${common.lib_deps}
+ TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
+src_filter = ${common.default_src_filter} +
+monitor_speed = 250000
+
+#
+# Sanguinololu (ATmega1284p)
+#
+[env:sanguino_atmega1284p]
+platform = atmelavr
+framework = arduino
+board = sanguino_atmega1284p
+build_flags = ${common.build_flags}
+lib_deps = ${common.lib_deps}
+ TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
+src_filter = ${common.default_src_filter} +
+monitor_speed = 250000
+
#
# Melzi and clones (ATmega1284p)
#
@@ -224,37 +250,11 @@ lib_deps = ${common.lib_deps}
src_filter = ${common.default_src_filter} +
monitor_speed = 250000
-#
-# Sanguinololu (ATmega644p)
-#
-[env:sanguino_atmega644p]
-platform = atmelavr
-framework = arduino
-board = sanguino_atmega644p
-build_flags = ${common.build_flags}
-lib_deps = ${common.lib_deps}
- TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
-src_filter = ${common.default_src_filter} +
-monitor_speed = 250000
-
-#
-# Sanguinololu (ATmega1284p)
-#
-[env:sanguino_atmega1284p]
-platform = atmelavr
-framework = arduino
-board = sanguino_atmega1284p
-build_flags = ${common.build_flags}
-lib_deps = ${common.lib_deps}
- TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip
-src_filter = ${common.default_src_filter} +
-monitor_speed = 250000
-
#
# STM32F103RE
#
[env:STM32F103RE]
-platform = ststm32
+platform = ststm32@5.6.0
framework = arduino
board = genericSTM32F103RE
build_flags = !python Marlin/src/HAL/HAL_STM32F1/build_flags.py
@@ -265,12 +265,14 @@ lib_deps = ${common.lib_deps}
lib_ignore = Adafruit NeoPixel, SPI
src_filter = ${common.default_src_filter} +
monitor_speed = 250000
+debug_tool = stlink
+upload_protocol = stlink
#
# STM32F103RC_fysetc
#
[env:STM32F103RC_fysetc]
-platform = ststm32
+platform = ststm32@5.6.0
framework = arduino
board = genericSTM32F103RC
#board_build.core = maple
@@ -293,7 +295,7 @@ upload_protocol = serial
# BigTree SKR Mini V1.1 / SKR mini E3 / SKR E3 DIP (STM32F103RCT6 ARM Cortex-M3)
#
[env:STM32F103RC_bigtree]
-platform = ststm32
+platform = ststm32@5.6.0
framework = arduino
board = genericSTM32F103RC
platform_packages = tool-stm32duino
@@ -305,30 +307,26 @@ lib_deps = ${common.lib_deps}
lib_ignore = Adafruit NeoPixel, SPI
src_filter = ${common.default_src_filter} +
monitor_speed = 115200
-upload_protocol = stlink
-debug_tool = stlink
[env:STM32F103RC_bigtree_USB]
-platform = ststm32
+platform = ststm32@5.6.0
framework = arduino
board = genericSTM32F103RC
platform_packages = tool-stm32duino
extra_scripts = buildroot/share/PlatformIO/scripts/STM32F103RC_SKR_MINI.py
build_flags = !python Marlin/src/HAL/HAL_STM32F1/build_flags.py
- ${common.build_flags} -DDEBUG_LEVEL=0 -DUSE_USB_COMPOSITE -std=gnu++14
+ ${common.build_flags} -DDEBUG_LEVEL=0 -std=gnu++14 -DUSE_USB_COMPOSITE
build_unflags = -std=gnu++11
lib_deps = ${common.lib_deps}
lib_ignore = Adafruit NeoPixel, SPI
src_filter = ${common.default_src_filter} +
monitor_speed = 115200
-upload_protocol = stlink
-debug_tool = stlink
#
# STM32F4 with STM32GENERIC
#
[env:STM32F4]
-platform = ststm32
+platform = ststm32@5.6.0
framework = arduino
board = disco_f407vg
build_flags = ${common.build_flags} -DUSE_STM32GENERIC -DSTM32GENERIC -DSTM32F4 -DMENU_USB_SERIAL -DMENU_SERIAL=SerialUSB
@@ -341,7 +339,7 @@ monitor_speed = 250000
# STM32F7 with STM32GENERIC
#
[env:STM32F7]
-platform = ststm32
+platform = ststm32@5.6.0
framework = arduino
board = remram_v1
build_flags = ${common.build_flags} -DUSE_STM32GENERIC -DSTM32GENERIC -DSTM32F7 -DMENU_USB_SERIAL -DMENU_SERIAL=SerialUSB
@@ -354,7 +352,7 @@ monitor_speed = 250000
# ARMED (STM32)
#
[env:ARMED]
-platform = ststm32
+platform = ststm32@5.6.0
framework = arduino
board = armed_v1
build_flags = ${common.build_flags} -DUSBCON -DUSBD_VID=0x0483 '-DUSB_MANUFACTURER="Unknown"' '-DUSB_PRODUCT="ARMED_V1"' -DHAL_PCD_MODULE_ENABLED -DUSBD_USE_CDC -O2 -ffreestanding -fsigned-char -fno-move-loop-invariants -fno-strict-aliasing -std=gnu11 -std=gnu++11
@@ -367,7 +365,7 @@ monitor_speed = 250000
# Longer 3D board in Alfawise U20 (STM32F103VET6)
#
[env:STM32F103VE_longer]
-platform = ststm32
+platform = ststm32@5.6.0
framework = arduino
board = genericSTM32F103VE
monitor_speed = 250000
@@ -384,12 +382,12 @@ lib_ignore = Adafruit NeoPixel, LiquidTWI2, SPI
# MKS Robin (STM32F103ZET6)
#
[env:mks_robin]
-platform = ststm32
+platform = ststm32@5.6.0
framework = arduino
board = genericSTM32F103ZE
extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin.py
build_flags = !python Marlin/src/HAL/HAL_STM32F1/build_flags.py
- ${common.build_flags} -std=gnu++14
+ ${common.build_flags} -std=gnu++14 -DSTM32_XL_DENSITY
build_unflags = -std=gnu++11
src_filter = ${common.default_src_filter} +
lib_deps = ${common.lib_deps}
@@ -399,7 +397,7 @@ lib_ignore = Adafruit NeoPixel, SPI
# MKS ROBIN LITE/LITE2 (STM32F103RCT6)
#
[env:mks_robin_lite]
-platform = ststm32
+platform = ststm32@5.6.0
framework = arduino
board = genericSTM32F103RC
extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin_lite.py
@@ -414,7 +412,7 @@ lib_ignore = Adafruit NeoPixel, SPI
# MKS Robin Mini (STM32F103VET6)
#
[env:mks_robin_mini]
-platform = ststm32
+platform = ststm32@5.6.0
framework = arduino
board = genericSTM32F103VE
extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin_mini.py
@@ -429,7 +427,7 @@ lib_ignore = Adafruit NeoPixel, SPI
# MKS Robin Nano (STM32F103VET6)
#
[env:mks_robin_nano]
-platform = ststm32
+platform = ststm32@5.6.0
framework = arduino
board = genericSTM32F103VE
extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin_nano.py
@@ -444,12 +442,12 @@ lib_ignore = Adafruit NeoPixel, SPI
# JGAurora A5S A1 (STM32F103ZET6)
#
[env:jgaurora_a5s_a1]
-platform = ststm32
+platform = ststm32@5.6.0
framework = arduino
board = genericSTM32F103ZE
extra_scripts = buildroot/share/PlatformIO/scripts/jgaurora_a5s_a1_with_bootloader.py
build_flags = !python Marlin/src/HAL/HAL_STM32F1/build_flags.py
- ${common.build_flags} -DSTM32F1xx -std=gnu++14
+ ${common.build_flags} -DSTM32F1xx -std=gnu++14 -DSTM32_XL_DENSITY
build_unflags = -std=gnu++11
src_filter = ${common.default_src_filter} +
lib_deps = ${common.lib_deps}
@@ -462,56 +460,56 @@ monitor_speed = 250000
# Shield - https://github.com/jmz52/Hardware
#
[env:STM32F407VE_black]
-platform = ststm32@5.4.3
-framework = arduino
-board = blackSTM32F407VET6
+platform = ststm32@5.4.3
+framework = arduino
+board = blackSTM32F407VET6
extra_scripts = pre:buildroot/share/PlatformIO/scripts/black_stm32f407vet6.py
-build_flags = ${common.build_flags}
+build_flags = ${common.build_flags}
-DSTM32F4 -DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483 -DUSB_PRODUCT=\"BLACK_F407VE\"
-lib_deps = ${common.lib_deps}
-lib_ignore = Adafruit NeoPixel, TMCStepper, SailfishLCD, SailfishRGB_LED, SlowSoftI2CMaster
-src_filter = ${common.default_src_filter} +
+lib_deps = ${common.lib_deps}
+lib_ignore = Adafruit NeoPixel, TMCStepper, SailfishLCD, SailfishRGB_LED, SlowSoftI2CMaster
+src_filter = ${common.default_src_filter} +
monitor_speed = 250000
#
# Bigtreetech SKR Pro (STM32F407ZGT6 ARM Cortex-M4)
#
[env:BIGTREE_SKR_PRO]
-platform = ststm32
-framework = arduino
-board = BigTree_SKR_Pro
+platform = ststm32@5.6.0
+framework = arduino
+board = BigTree_SKR_Pro
extra_scripts = pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
-build_flags = ${common.build_flags}
+build_flags = ${common.build_flags}
-DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483 -DUSB_PRODUCT=\"STM32F407ZG\"
-DTARGET_STM32F4 -DSTM32F407_5ZX -DVECT_TAB_OFFSET=0x8000 -DHAVE_HWSERIAL6
-lib_deps =
+lib_deps =
U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/bugfix.zip
LiquidCrystal@1.3.4
TMCStepper@>=0.5.0,<1.0.0
Adafruit NeoPixel
LiquidTWI2=https://github.com/lincomatic/LiquidTWI2/archive/master.zip
Arduino-L6470=https://github.com/ameyer/Arduino-L6470/archive/dev.zip
-src_filter = ${common.default_src_filter} +
+src_filter = ${common.default_src_filter} +
monitor_speed = 250000
#
# BIGTREE_SKR_BTT002 (STM32F407VET6 ARM Cortex-M4)
#
[env:BIGTREE_BTT002]
-platform = ststm32
-framework = arduino
-board = BigTree_Btt002
+platform = ststm32@5.6.0
+framework = arduino
+board = BigTree_Btt002
extra_scripts = pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
-build_flags = ${common.build_flags}
+build_flags = ${common.build_flags}
-DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483 -DUSB_PRODUCT=\"STM32F407VE\"
-DTARGET_STM32F4 -DSTM32F407_5VX -DVECT_TAB_OFFSET=0x8000
-DHAVE_HWSERIAL2
-DHAVE_HWSERIAL3
-DPIN_SERIAL2_RX=PD_6
-DPIN_SERIAL2_TX=PD_5
-lib_deps = ${common.lib_deps}
-lib_ignore = Adafruit NeoPixel, SailfishLCD, SailfishRGB_LED, SlowSoftI2CMaster
-src_filter = ${common.default_src_filter} +
+lib_deps = ${common.lib_deps}
+lib_ignore = Adafruit NeoPixel, SailfishLCD, SailfishRGB_LED, SlowSoftI2CMaster
+src_filter = ${common.default_src_filter} +
monitor_speed = 250000
#
@@ -528,6 +526,33 @@ lib_ignore = Adafruit NeoPixel
src_filter = ${common.default_src_filter} +
monitor_speed = 250000
+#
+# Malyan M200 (STM32F103CB)
+#
+[env:STM32F103CB_malyan]
+platform = ststm32@5.6.0
+framework = arduino
+board = malyanM200
+build_flags = !python Marlin/src/HAL/HAL_STM32F1/build_flags.py -DMCU_STM32F103CB -D __STM32F1__=1 -std=c++1y -D MOTHERBOARD="BOARD_MALYAN_M200" -DSERIAL_USB -ffunction-sections -fdata-sections -Wl,--gc-sections
+ -DDEBUG_LEVEL=0 -D__MARLIN_FIRMWARE__
+src_filter = ${common.default_src_filter} +
+lib_ignore = Adafruit NeoPixel, LiquidCrystal, LiquidTWI2, TMCStepper, U8glib-HAL, SPI
+
+#
+# Chitu boards like Tronxy X5s (STM32F103ZET6)
+#
+[env:chitu_f103]
+platform = ststm32@5.6.0
+framework = arduino
+board = genericSTM32F103ZE
+extra_scripts = buildroot/share/PlatformIO/scripts/chitu_crypt.py
+build_flags = !python Marlin/src/HAL/HAL_STM32F1/build_flags.py
+ ${common.build_flags} -DSTM32F1xx -std=gnu++14 -DSTM32_XL_DENSITY
+build_unflags = -std=gnu++11 -DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG= -DERROR_LED_PORT=GPIOE -DERROR_LED_PIN=6
+src_filter = ${common.default_src_filter} +
+lib_deps = ${common.lib_deps}
+lib_ignore = Adafruit NeoPixel
+
#
# Teensy 3.5 / 3.6 (ARM Cortex-M4)
#
@@ -542,19 +567,6 @@ lib_ignore = Adafruit NeoPixel
src_filter = ${common.default_src_filter} +
monitor_speed = 250000
-#
-# Malyan M200 (STM32F103CB)
-#
-[env:STM32F103CB_malyan]
-platform = ststm32
-framework = arduino
-board = malyanM200
-build_flags = !python Marlin/src/HAL/HAL_STM32F1/build_flags.py -DMCU_STM32F103CB -D __STM32F1__=1 -std=c++1y -D MOTHERBOARD="BOARD_MALYAN_M200" -DSERIAL_USB -ffunction-sections -fdata-sections -Wl,--gc-sections
- -DDEBUG_LEVEL=0 -D__MARLIN_FIRMWARE__
-src_filter = ${common.default_src_filter} +
-#-
-lib_ignore = Adafruit NeoPixel, LiquidCrystal, LiquidTWI2, TMCStepper, U8glib-HAL, SPI
-
#
# Espressif ESP32
#