diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 001bf84f1..e02f12042 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -937,7 +937,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -950,6 +950,7 @@
//#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index 0773e7d5d..14c0fd820 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -685,69 +687,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/HAL/HAL.h b/Marlin/src/HAL/HAL.h
index 60e0df6f2..bc7d285e8 100644
--- a/Marlin/src/HAL/HAL.h
+++ b/Marlin/src/HAL/HAL.h
@@ -29,7 +29,7 @@
#ifndef _HAL_H
#define _HAL_H
-#include "../inc/SPI.h"
+#include "SPI.h"
#ifdef __AVR__
#include "HAL_AVR/HAL_AVR.h"
diff --git a/Marlin/src/HAL/HAL_STM32F1/HAL_spi_Stm32f1.cpp b/Marlin/src/HAL/HAL_STM32F1/HAL_spi_Stm32f1.cpp
index 3b4109f0c..fc1bfb755 100644
--- a/Marlin/src/HAL/HAL_STM32F1/HAL_spi_Stm32f1.cpp
+++ b/Marlin/src/HAL/HAL_STM32F1/HAL_spi_Stm32f1.cpp
@@ -37,7 +37,7 @@
// --------------------------------------------------------------------------
#include "../HAL.h"
-#include "SPI.h"
+#include "../SPI.h"
#include "pins_arduino.h"
#include "spi_pins.h"
#include "../../core/macros.h"
diff --git a/Marlin/src/HAL/SPI.h b/Marlin/src/HAL/SPI.h
new file mode 100644
index 000000000..78e867a1f
--- /dev/null
+++ b/Marlin/src/HAL/SPI.h
@@ -0,0 +1,78 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (C) 2016 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 .
+ *
+ */
+
+/**
+ * HAL/SPI.h
+ * Core Marlin definitions for SPI, implemented in the HALs
+ */
+
+#ifndef _SPI_H_
+#define _SPI_H_
+
+//#include "../inc/MarlinConfig.h"
+
+#include
+
+#ifndef SPI_FULL_SPEED
+
+/**
+ * SPI speed where 0 <= index <= 6
+ *
+ * Approximate rates :
+ *
+ * 0 : 8 - 10 MHz
+ * 1 : 4 - 5 MHz
+ * 2 : 2 - 2.5 MHz
+ * 3 : 1 - 1.25 MHz
+ * 4 : 500 - 625 kHz
+ * 5 : 250 - 312 kHz
+ * 6 : 125 - 156 kHz
+ *
+ * On AVR, actual speed is F_CPU/2^(1 + index).
+ * On other platforms, speed should be in range given above where possible.
+ */
+
+#define SPI_FULL_SPEED 0 // Set SCK to max rate
+#define SPI_HALF_SPEED 1 // Set SCK rate to half of max rate
+#define SPI_QUARTER_SPEED 2 // Set SCK rate to quarter of max rate
+#define SPI_EIGHTH_SPEED 3 // Set SCK rate to 1/8 of max rate
+#define SPI_SIXTEENTH_SPEED 4 // Set SCK rate to 1/16 of max rate
+#define SPI_SPEED_5 5 // Set SCK rate to 1/32 of max rate
+#define SPI_SPEED_6 6 // Set SCK rate to 1/64 of max rate
+
+// Standard SPI functions
+/** Initialise SPI bus */
+void spiBegin(void);
+/** Configure SPI for specified SPI speed */
+void spiInit(uint8_t spiRate);
+/** Write single byte to SPI */
+void spiSend(uint8_t b);
+/** Read single byte from SPI */
+uint8_t spiRec(void);
+/** Read from SPI into buffer */
+void spiRead(uint8_t* buf, uint16_t nbyte);
+/** Write token and then write from 512 byte buffer to SPI (for SD card) */
+void spiSendBlock(uint8_t token, const uint8_t* buf);
+
+#endif // SPI_FULL_SPEED
+
+#endif // _SPI_H_
diff --git a/Marlin/src/config/default/Configuration.h b/Marlin/src/config/default/Configuration.h
index a3332428e..16ec71367 100644
--- a/Marlin/src/config/default/Configuration.h
+++ b/Marlin/src/config/default/Configuration.h
@@ -937,7 +937,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -950,6 +950,7 @@
//#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/default/Configuration_adv.h b/Marlin/src/config/default/Configuration_adv.h
index 0773e7d5d..14c0fd820 100644
--- a/Marlin/src/config/default/Configuration_adv.h
+++ b/Marlin/src/config/default/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -685,69 +687,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration.h b/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration.h
index e0cf752e4..2633c5a2f 100644
--- a/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration.h
+++ b/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration.h
@@ -957,7 +957,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -970,6 +970,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration_adv.h b/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration_adv.h
index 6ef81166f..d190904f1 100644
--- a/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration_adv.h
+++ b/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/AliExpress/CL-260/Configuration.h b/Marlin/src/config/examples/AliExpress/CL-260/Configuration.h
index c542d9ede..9215f39ec 100644
--- a/Marlin/src/config/examples/AliExpress/CL-260/Configuration.h
+++ b/Marlin/src/config/examples/AliExpress/CL-260/Configuration.h
@@ -937,7 +937,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -950,6 +950,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Anet/A6/Configuration.h b/Marlin/src/config/examples/Anet/A6/Configuration.h
index cf58375fb..52ba8bf25 100644
--- a/Marlin/src/config/examples/Anet/A6/Configuration.h
+++ b/Marlin/src/config/examples/Anet/A6/Configuration.h
@@ -1080,7 +1080,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -1093,6 +1093,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Anet/A6/Configuration_adv.h b/Marlin/src/config/examples/Anet/A6/Configuration_adv.h
index 3476f8465..209311e2c 100644
--- a/Marlin/src/config/examples/Anet/A6/Configuration_adv.h
+++ b/Marlin/src/config/examples/Anet/A6/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
//#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/Anet/A8/Configuration.h b/Marlin/src/config/examples/Anet/A8/Configuration.h
index b9dc8deb4..082671d0e 100644
--- a/Marlin/src/config/examples/Anet/A8/Configuration.h
+++ b/Marlin/src/config/examples/Anet/A8/Configuration.h
@@ -943,7 +943,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -956,6 +956,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Anet/A8/Configuration_adv.h b/Marlin/src/config/examples/Anet/A8/Configuration_adv.h
index 9e141d3c3..70675f355 100644
--- a/Marlin/src/config/examples/Anet/A8/Configuration_adv.h
+++ b/Marlin/src/config/examples/Anet/A8/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
//#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/BQ/Hephestos/Configuration.h b/Marlin/src/config/examples/BQ/Hephestos/Configuration.h
index bde9a8c9c..018aca923 100644
--- a/Marlin/src/config/examples/BQ/Hephestos/Configuration.h
+++ b/Marlin/src/config/examples/BQ/Hephestos/Configuration.h
@@ -928,7 +928,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -941,6 +941,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/BQ/Hephestos/Configuration_adv.h b/Marlin/src/config/examples/BQ/Hephestos/Configuration_adv.h
index d272e7788..f045bdd4c 100644
--- a/Marlin/src/config/examples/BQ/Hephestos/Configuration_adv.h
+++ b/Marlin/src/config/examples/BQ/Hephestos/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/BQ/Hephestos_2/Configuration.h b/Marlin/src/config/examples/BQ/Hephestos_2/Configuration.h
index 960e8c519..f5e9e1d6f 100644
--- a/Marlin/src/config/examples/BQ/Hephestos_2/Configuration.h
+++ b/Marlin/src/config/examples/BQ/Hephestos_2/Configuration.h
@@ -938,7 +938,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -951,6 +951,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/BQ/Hephestos_2/Configuration_adv.h b/Marlin/src/config/examples/BQ/Hephestos_2/Configuration_adv.h
index 71a9d2795..ce8b341be 100644
--- a/Marlin/src/config/examples/BQ/Hephestos_2/Configuration_adv.h
+++ b/Marlin/src/config/examples/BQ/Hephestos_2/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #define SD_FINISHED_STEPPERRELEASE true // Disable steppers when SD Print is finished
#define SD_FINISHED_RELEASECOMMAND "M104 S0\nM84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -681,69 +683,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/BQ/WITBOX/Configuration.h b/Marlin/src/config/examples/BQ/WITBOX/Configuration.h
index 5f4a9680d..4d06dfa1a 100644
--- a/Marlin/src/config/examples/BQ/WITBOX/Configuration.h
+++ b/Marlin/src/config/examples/BQ/WITBOX/Configuration.h
@@ -928,7 +928,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -941,6 +941,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/BQ/WITBOX/Configuration_adv.h b/Marlin/src/config/examples/BQ/WITBOX/Configuration_adv.h
index d272e7788..f045bdd4c 100644
--- a/Marlin/src/config/examples/BQ/WITBOX/Configuration_adv.h
+++ b/Marlin/src/config/examples/BQ/WITBOX/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/Cartesio/Configuration.h b/Marlin/src/config/examples/Cartesio/Configuration.h
index 553186f71..5f5552c8e 100644
--- a/Marlin/src/config/examples/Cartesio/Configuration.h
+++ b/Marlin/src/config/examples/Cartesio/Configuration.h
@@ -936,7 +936,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -949,6 +949,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Cartesio/Configuration_adv.h b/Marlin/src/config/examples/Cartesio/Configuration_adv.h
index 4acef5bab..31ad3fac3 100644
--- a/Marlin/src/config/examples/Cartesio/Configuration_adv.h
+++ b/Marlin/src/config/examples/Cartesio/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/Creality/CR-10/Configuration.h b/Marlin/src/config/examples/Creality/CR-10/Configuration.h
index 617a289cc..a5c7346f5 100755
--- a/Marlin/src/config/examples/Creality/CR-10/Configuration.h
+++ b/Marlin/src/config/examples/Creality/CR-10/Configuration.h
@@ -947,7 +947,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -960,6 +960,7 @@
//#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Creality/CR-10/Configuration_adv.h b/Marlin/src/config/examples/Creality/CR-10/Configuration_adv.h
index ea5992d9d..dda5ec986 100644
--- a/Marlin/src/config/examples/Creality/CR-10/Configuration_adv.h
+++ b/Marlin/src/config/examples/Creality/CR-10/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/Felix/Configuration.h b/Marlin/src/config/examples/Felix/Configuration.h
index b902b5825..f590ba29f 100644
--- a/Marlin/src/config/examples/Felix/Configuration.h
+++ b/Marlin/src/config/examples/Felix/Configuration.h
@@ -919,7 +919,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -932,6 +932,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Felix/Configuration_adv.h b/Marlin/src/config/examples/Felix/Configuration_adv.h
index 27610083c..30c41ebd0 100644
--- a/Marlin/src/config/examples/Felix/Configuration_adv.h
+++ b/Marlin/src/config/examples/Felix/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/Felix/DUAL/Configuration.h b/Marlin/src/config/examples/Felix/DUAL/Configuration.h
index 0f61b9b8c..f7c42928a 100644
--- a/Marlin/src/config/examples/Felix/DUAL/Configuration.h
+++ b/Marlin/src/config/examples/Felix/DUAL/Configuration.h
@@ -919,7 +919,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -932,6 +932,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Folger Tech/i3-2020/Configuration.h b/Marlin/src/config/examples/Folger Tech/i3-2020/Configuration.h
index 063c522bc..2eca0a591 100644
--- a/Marlin/src/config/examples/Folger Tech/i3-2020/Configuration.h
+++ b/Marlin/src/config/examples/Folger Tech/i3-2020/Configuration.h
@@ -934,7 +934,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#define GRID_MAX_POINTS_X 10 // Don't use more than 15 points per axis, implementation limited.
#define GRID_MAX_POINTS_Y 10
@@ -947,6 +947,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Folger Tech/i3-2020/Configuration_adv.h b/Marlin/src/config/examples/Folger Tech/i3-2020/Configuration_adv.h
index 160188d4b..8c84c683f 100644
--- a/Marlin/src/config/examples/Folger Tech/i3-2020/Configuration_adv.h
+++ b/Marlin/src/config/examples/Folger Tech/i3-2020/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -685,69 +687,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/Geeetech/GT2560/Configuration.h b/Marlin/src/config/examples/Geeetech/GT2560/Configuration.h
index a710ff1bd..e8ee64e97 100644
--- a/Marlin/src/config/examples/Geeetech/GT2560/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/GT2560/Configuration.h
@@ -952,7 +952,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -965,6 +965,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h b/Marlin/src/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h
index b70cc39fe..ed2b4bdae 100644
--- a/Marlin/src/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h
@@ -937,7 +937,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -950,6 +950,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Infitary/i3-M508/Configuration.h b/Marlin/src/config/examples/Infitary/i3-M508/Configuration.h
index c590ba8de..26de7f4d9 100644
--- a/Marlin/src/config/examples/Infitary/i3-M508/Configuration.h
+++ b/Marlin/src/config/examples/Infitary/i3-M508/Configuration.h
@@ -941,7 +941,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -954,6 +954,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Infitary/i3-M508/Configuration_adv.h b/Marlin/src/config/examples/Infitary/i3-M508/Configuration_adv.h
index 2b4085136..6c7f2c3d2 100644
--- a/Marlin/src/config/examples/Infitary/i3-M508/Configuration_adv.h
+++ b/Marlin/src/config/examples/Infitary/i3-M508/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/Malyan/M150/Configuration.h b/Marlin/src/config/examples/Malyan/M150/Configuration.h
index a0fb50dd5..226042a7d 100644
--- a/Marlin/src/config/examples/Malyan/M150/Configuration.h
+++ b/Marlin/src/config/examples/Malyan/M150/Configuration.h
@@ -965,7 +965,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -978,6 +978,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Malyan/M150/Configuration_adv.h b/Marlin/src/config/examples/Malyan/M150/Configuration_adv.h
index 7293c0f6c..764b58e36 100644
--- a/Marlin/src/config/examples/Malyan/M150/Configuration_adv.h
+++ b/Marlin/src/config/examples/Malyan/M150/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -681,69 +683,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/Micromake/C1/basic/Configuration.h b/Marlin/src/config/examples/Micromake/C1/basic/Configuration.h
index 91c637488..1e6524323 100644
--- a/Marlin/src/config/examples/Micromake/C1/basic/Configuration.h
+++ b/Marlin/src/config/examples/Micromake/C1/basic/Configuration.h
@@ -941,7 +941,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -954,6 +954,7 @@
//#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration.h b/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration.h
index 6e6f091f6..d1fc92549 100644
--- a/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration.h
+++ b/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration.h
@@ -941,7 +941,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -954,6 +954,7 @@
//#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Mks/Sbase/Configuration.h b/Marlin/src/config/examples/Mks/Sbase/Configuration.h
index 9fdf995b8..636f46e25 100644
--- a/Marlin/src/config/examples/Mks/Sbase/Configuration.h
+++ b/Marlin/src/config/examples/Mks/Sbase/Configuration.h
@@ -939,7 +939,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -952,6 +952,7 @@
//#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Mks/Sbase/Configuration_adv.h b/Marlin/src/config/examples/Mks/Sbase/Configuration_adv.h
index 1f45a3879..fae5ea1cc 100644
--- a/Marlin/src/config/examples/Mks/Sbase/Configuration_adv.h
+++ b/Marlin/src/config/examples/Mks/Sbase/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -705,69 +707,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/RepRapWorld/Megatronics/Configuration.h b/Marlin/src/config/examples/RepRapWorld/Megatronics/Configuration.h
index b32f8006c..277ddc8c7 100644
--- a/Marlin/src/config/examples/RepRapWorld/Megatronics/Configuration.h
+++ b/Marlin/src/config/examples/RepRapWorld/Megatronics/Configuration.h
@@ -937,7 +937,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -950,6 +950,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/RigidBot/Configuration.h b/Marlin/src/config/examples/RigidBot/Configuration.h
index 5c64a5357..8af196eba 100644
--- a/Marlin/src/config/examples/RigidBot/Configuration.h
+++ b/Marlin/src/config/examples/RigidBot/Configuration.h
@@ -935,7 +935,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -948,6 +948,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/RigidBot/Configuration_adv.h b/Marlin/src/config/examples/RigidBot/Configuration_adv.h
index 9b9f7c347..5ad95c98c 100644
--- a/Marlin/src/config/examples/RigidBot/Configuration_adv.h
+++ b/Marlin/src/config/examples/RigidBot/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/SCARA/Configuration.h b/Marlin/src/config/examples/SCARA/Configuration.h
index e2251f4f7..44432618f 100644
--- a/Marlin/src/config/examples/SCARA/Configuration.h
+++ b/Marlin/src/config/examples/SCARA/Configuration.h
@@ -949,7 +949,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -962,6 +962,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/SCARA/Configuration_adv.h b/Marlin/src/config/examples/SCARA/Configuration_adv.h
index 150a10a1c..de89cc7e5 100644
--- a/Marlin/src/config/examples/SCARA/Configuration_adv.h
+++ b/Marlin/src/config/examples/SCARA/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/Sanguinololu/Configuration.h b/Marlin/src/config/examples/Sanguinololu/Configuration.h
index 467d2c458..6267b4311 100644
--- a/Marlin/src/config/examples/Sanguinololu/Configuration.h
+++ b/Marlin/src/config/examples/Sanguinololu/Configuration.h
@@ -968,7 +968,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -981,6 +981,7 @@
//#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Sanguinololu/Configuration_adv.h b/Marlin/src/config/examples/Sanguinololu/Configuration_adv.h
index 74315aa32..2ecd9ef44 100644
--- a/Marlin/src/config/examples/Sanguinololu/Configuration_adv.h
+++ b/Marlin/src/config/examples/Sanguinololu/Configuration_adv.h
@@ -478,12 +478,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -673,69 +675,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/TinyBoy2/Configuration.h b/Marlin/src/config/examples/TinyBoy2/Configuration.h
index 8cc92f15a..194e73aec 100644
--- a/Marlin/src/config/examples/TinyBoy2/Configuration.h
+++ b/Marlin/src/config/examples/TinyBoy2/Configuration.h
@@ -993,7 +993,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -1006,6 +1006,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/TinyBoy2/Configuration_adv.h b/Marlin/src/config/examples/TinyBoy2/Configuration_adv.h
index 3ae501a30..f75e35213 100644
--- a/Marlin/src/config/examples/TinyBoy2/Configuration_adv.h
+++ b/Marlin/src/config/examples/TinyBoy2/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/Velleman/K8200/Configuration.h b/Marlin/src/config/examples/Velleman/K8200/Configuration.h
index b8c42cc65..d085210a7 100644
--- a/Marlin/src/config/examples/Velleman/K8200/Configuration.h
+++ b/Marlin/src/config/examples/Velleman/K8200/Configuration.h
@@ -967,7 +967,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -980,6 +980,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Velleman/K8200/Configuration_adv.h b/Marlin/src/config/examples/Velleman/K8200/Configuration_adv.h
index c57a8765f..d63595d1a 100644
--- a/Marlin/src/config/examples/Velleman/K8200/Configuration_adv.h
+++ b/Marlin/src/config/examples/Velleman/K8200/Configuration_adv.h
@@ -502,7 +502,7 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
#define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
@@ -694,69 +694,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/Velleman/K8400/Configuration.h b/Marlin/src/config/examples/Velleman/K8400/Configuration.h
index c99b7de2d..cb80eba1f 100644
--- a/Marlin/src/config/examples/Velleman/K8400/Configuration.h
+++ b/Marlin/src/config/examples/Velleman/K8400/Configuration.h
@@ -937,7 +937,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -950,6 +950,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/Velleman/K8400/Configuration_adv.h b/Marlin/src/config/examples/Velleman/K8400/Configuration_adv.h
index e5b96e6ae..6428a2119 100644
--- a/Marlin/src/config/examples/Velleman/K8400/Configuration_adv.h
+++ b/Marlin/src/config/examples/Velleman/K8400/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/Velleman/K8400/Dual-head/Configuration.h b/Marlin/src/config/examples/Velleman/K8400/Dual-head/Configuration.h
index cae1f4352..9ed95be6a 100644
--- a/Marlin/src/config/examples/Velleman/K8400/Dual-head/Configuration.h
+++ b/Marlin/src/config/examples/Velleman/K8400/Dual-head/Configuration.h
@@ -937,7 +937,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -950,6 +950,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/adafruit/ST7565/Configuration.h b/Marlin/src/config/examples/adafruit/ST7565/Configuration.h
index ae1bd7535..efe6373b5 100644
--- a/Marlin/src/config/examples/adafruit/ST7565/Configuration.h
+++ b/Marlin/src/config/examples/adafruit/ST7565/Configuration.h
@@ -937,7 +937,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -950,6 +950,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration.h b/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration.h
index e49b160d6..a8bc01484 100644
--- a/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration.h
+++ b/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration.h
@@ -1063,7 +1063,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -1078,6 +1078,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h b/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h
index 8c2e7fc95..6a6379658 100644
--- a/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h
@@ -491,12 +491,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -686,69 +688,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration.h b/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration.h
index ce740f011..6d536475c 100644
--- a/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration.h
+++ b/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration.h
@@ -1057,7 +1057,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -1072,6 +1072,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h b/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h
index a039abc46..04ae683d0 100644
--- a/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h
@@ -491,12 +491,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -686,69 +688,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/delta/generic/Configuration.h b/Marlin/src/config/examples/delta/generic/Configuration.h
index 857cb4c12..ed859f6c8 100644
--- a/Marlin/src/config/examples/delta/generic/Configuration.h
+++ b/Marlin/src/config/examples/delta/generic/Configuration.h
@@ -1052,7 +1052,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -1067,6 +1067,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/delta/generic/Configuration_adv.h b/Marlin/src/config/examples/delta/generic/Configuration_adv.h
index a039abc46..04ae683d0 100644
--- a/Marlin/src/config/examples/delta/generic/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/generic/Configuration_adv.h
@@ -491,12 +491,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -686,69 +688,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/delta/kossel_mini/Configuration.h b/Marlin/src/config/examples/delta/kossel_mini/Configuration.h
index 81a499b6e..7d15cdeb2 100644
--- a/Marlin/src/config/examples/delta/kossel_mini/Configuration.h
+++ b/Marlin/src/config/examples/delta/kossel_mini/Configuration.h
@@ -1055,7 +1055,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -1070,6 +1070,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/delta/kossel_mini/Configuration_adv.h b/Marlin/src/config/examples/delta/kossel_mini/Configuration_adv.h
index a039abc46..04ae683d0 100644
--- a/Marlin/src/config/examples/delta/kossel_mini/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/kossel_mini/Configuration_adv.h
@@ -491,12 +491,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -686,69 +688,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/delta/kossel_pro/Configuration.h b/Marlin/src/config/examples/delta/kossel_pro/Configuration.h
index 911b50e49..d88cdb51a 100644
--- a/Marlin/src/config/examples/delta/kossel_pro/Configuration.h
+++ b/Marlin/src/config/examples/delta/kossel_pro/Configuration.h
@@ -1055,7 +1055,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -1070,6 +1070,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/delta/kossel_pro/Configuration_adv.h b/Marlin/src/config/examples/delta/kossel_pro/Configuration_adv.h
index 9c5e1ab8f..75a918e64 100644
--- a/Marlin/src/config/examples/delta/kossel_pro/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/kossel_pro/Configuration_adv.h
@@ -496,12 +496,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -691,69 +693,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/delta/kossel_xl/Configuration.h b/Marlin/src/config/examples/delta/kossel_xl/Configuration.h
index 2deb49db3..d17a5735a 100644
--- a/Marlin/src/config/examples/delta/kossel_xl/Configuration.h
+++ b/Marlin/src/config/examples/delta/kossel_xl/Configuration.h
@@ -1064,7 +1064,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -1079,6 +1079,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/delta/kossel_xl/Configuration_adv.h b/Marlin/src/config/examples/delta/kossel_xl/Configuration_adv.h
index c2bbd7efc..aa05d414f 100644
--- a/Marlin/src/config/examples/delta/kossel_xl/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/kossel_xl/Configuration_adv.h
@@ -491,12 +491,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -686,69 +688,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration.h b/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration.h
index 9ac72b031..e6578f5b3 100644
--- a/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration.h
+++ b/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration.h
@@ -951,7 +951,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 45 // Mesh inset margin on print area
+ #define MESH_INSET 45 // Mesh inset margin on print area
#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
@@ -964,6 +964,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration_adv.h b/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration_adv.h
index 32d7b410e..54ae9d1c9 100644
--- a/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration_adv.h
+++ b/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/makibox/Configuration.h b/Marlin/src/config/examples/makibox/Configuration.h
index 8a7230c15..13414e4f3 100644
--- a/Marlin/src/config/examples/makibox/Configuration.h
+++ b/Marlin/src/config/examples/makibox/Configuration.h
@@ -940,7 +940,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -953,6 +953,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/makibox/Configuration_adv.h b/Marlin/src/config/examples/makibox/Configuration_adv.h
index 8e9e1fb72..68782035a 100644
--- a/Marlin/src/config/examples/makibox/Configuration_adv.h
+++ b/Marlin/src/config/examples/makibox/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
//#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/stm32f103ret6/Configuration.h b/Marlin/src/config/examples/stm32f103ret6/Configuration.h
index 9a7a46b07..e9292e388 100644
--- a/Marlin/src/config/examples/stm32f103ret6/Configuration.h
+++ b/Marlin/src/config/examples/stm32f103ret6/Configuration.h
@@ -924,7 +924,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -937,6 +937,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/tvrrug/Round2/Configuration.h b/Marlin/src/config/examples/tvrrug/Round2/Configuration.h
index 6ca0d5c5f..32369f40b 100644
--- a/Marlin/src/config/examples/tvrrug/Round2/Configuration.h
+++ b/Marlin/src/config/examples/tvrrug/Round2/Configuration.h
@@ -932,7 +932,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -945,6 +945,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/tvrrug/Round2/Configuration_adv.h b/Marlin/src/config/examples/tvrrug/Round2/Configuration_adv.h
index 9e702d9e6..2bb64edf3 100644
--- a/Marlin/src/config/examples/tvrrug/Round2/Configuration_adv.h
+++ b/Marlin/src/config/examples/tvrrug/Round2/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/config/examples/wt150/Configuration.h b/Marlin/src/config/examples/wt150/Configuration.h
index 98b495955..baa2953c6 100644
--- a/Marlin/src/config/examples/wt150/Configuration.h
+++ b/Marlin/src/config/examples/wt150/Configuration.h
@@ -942,7 +942,7 @@
//========================= Unified Bed Leveling ============================
//===========================================================================
- #define UBL_MESH_INSET 1 // Mesh inset margin on print area
+ #define MESH_INSET 1 // Mesh inset margin on print area
#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
@@ -955,6 +955,7 @@
#define UBL_G26_MESH_VALIDATION // Enable G26 mesh validation
#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
#elif ENABLED(MESH_BED_LEVELING)
diff --git a/Marlin/src/config/examples/wt150/Configuration_adv.h b/Marlin/src/config/examples/wt150/Configuration_adv.h
index eadd8f330..3d840dbb7 100644
--- a/Marlin/src/config/examples/wt150/Configuration_adv.h
+++ b/Marlin/src/config/examples/wt150/Configuration_adv.h
@@ -489,12 +489,14 @@
// Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
#define SD_DETECT_INVERTED
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
+ #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.
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
+ // 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
+
+ // Add an option in the menu to run all auto#.g files
//#define MENU_ADDAUTOSTART
/**
@@ -684,69 +686,12 @@
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
- #elif IS_SCARA
- #define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
- #define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
- #define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
- #define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
- #define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-#elif ENABLED(AUTO_BED_LEVELING_UBL)
- #if ENABLED(DELTA)
- // Probing points may be verified at compile time within the radius
- // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
- // so that may be added to SanityCheck.h in the future.
- #define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
- #elif IS_SCARA
- #define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
- #define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
- #else
- // Boundaries for Cartesian probing based on set limits
- #if ENABLED(BED_CENTER_AT_0_0)
- #define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
- #define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
- #define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
- #else
- #define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
- #define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
- #define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
- #endif
- #endif
-
- // If this is defined, the currently active mesh will be saved in the
- // current slot on M500.
- #define UBL_SAVE_ACTIVE_ON_M500
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(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
// @section extras
diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.cpp b/Marlin/src/feature/bedlevel/ubl/ubl.cpp
index ff7d2e72d..9f4a33f19 100644
--- a/Marlin/src/feature/bedlevel/ubl/ubl.cpp
+++ b/Marlin/src/feature/bedlevel/ubl/ubl.cpp
@@ -125,9 +125,9 @@
SERIAL_ECHO_SP(spaces + 3);
serial_echo_xy(GRID_MAX_POINTS_X - 1, GRID_MAX_POINTS_Y - 1);
SERIAL_EOL();
- serial_echo_xy(UBL_MESH_MIN_X, UBL_MESH_MAX_Y);
+ serial_echo_xy(MESH_MIN_X, MESH_MAX_Y);
SERIAL_ECHO_SP(spaces);
- serial_echo_xy(UBL_MESH_MAX_X, UBL_MESH_MAX_Y);
+ serial_echo_xy(MESH_MAX_X, MESH_MAX_Y);
SERIAL_EOL();
}
else {
@@ -174,9 +174,9 @@
}
if (map_type == 0) {
- serial_echo_xy(UBL_MESH_MIN_X, UBL_MESH_MIN_Y);
+ serial_echo_xy(MESH_MIN_X, MESH_MIN_Y);
SERIAL_ECHO_SP(spaces + 4);
- serial_echo_xy(UBL_MESH_MAX_X, UBL_MESH_MIN_Y);
+ serial_echo_xy(MESH_MAX_X, MESH_MIN_Y);
SERIAL_EOL();
serial_echo_xy(0, 0);
SERIAL_ECHO_SP(spaces + 5);
diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.h b/Marlin/src/feature/bedlevel/ubl/ubl.h
index 20333895f..6709a8f1b 100644
--- a/Marlin/src/feature/bedlevel/ubl/ubl.h
+++ b/Marlin/src/feature/bedlevel/ubl/ubl.h
@@ -67,8 +67,8 @@ extern uint8_t ubl_cnt;
void lcd_quick_feedback();
#endif
-#define MESH_X_DIST (float(UBL_MESH_MAX_X - (UBL_MESH_MIN_X)) / float(GRID_MAX_POINTS_X - 1))
-#define MESH_Y_DIST (float(UBL_MESH_MAX_Y - (UBL_MESH_MIN_Y)) / float(GRID_MAX_POINTS_Y - 1))
+#define MESH_X_DIST (float(MESH_MAX_X - (MESH_MIN_X)) / float(GRID_MAX_POINTS_X - 1))
+#define MESH_Y_DIST (float(MESH_MAX_Y - (MESH_MIN_Y)) / float(GRID_MAX_POINTS_Y - 1))
class unified_bed_leveling {
private:
@@ -162,25 +162,25 @@ class unified_bed_leveling {
// 15 is the maximum nubmer of grid points supported + 1 safety margin for now,
// until determinism prevails
constexpr static float _mesh_index_to_xpos[16] PROGMEM = {
- UBL_MESH_MIN_X + 0 * (MESH_X_DIST), UBL_MESH_MIN_X + 1 * (MESH_X_DIST),
- UBL_MESH_MIN_X + 2 * (MESH_X_DIST), UBL_MESH_MIN_X + 3 * (MESH_X_DIST),
- UBL_MESH_MIN_X + 4 * (MESH_X_DIST), UBL_MESH_MIN_X + 5 * (MESH_X_DIST),
- UBL_MESH_MIN_X + 6 * (MESH_X_DIST), UBL_MESH_MIN_X + 7 * (MESH_X_DIST),
- UBL_MESH_MIN_X + 8 * (MESH_X_DIST), UBL_MESH_MIN_X + 9 * (MESH_X_DIST),
- UBL_MESH_MIN_X + 10 * (MESH_X_DIST), UBL_MESH_MIN_X + 11 * (MESH_X_DIST),
- UBL_MESH_MIN_X + 12 * (MESH_X_DIST), UBL_MESH_MIN_X + 13 * (MESH_X_DIST),
- UBL_MESH_MIN_X + 14 * (MESH_X_DIST), UBL_MESH_MIN_X + 15 * (MESH_X_DIST)
+ MESH_MIN_X + 0 * (MESH_X_DIST), MESH_MIN_X + 1 * (MESH_X_DIST),
+ MESH_MIN_X + 2 * (MESH_X_DIST), MESH_MIN_X + 3 * (MESH_X_DIST),
+ MESH_MIN_X + 4 * (MESH_X_DIST), MESH_MIN_X + 5 * (MESH_X_DIST),
+ MESH_MIN_X + 6 * (MESH_X_DIST), MESH_MIN_X + 7 * (MESH_X_DIST),
+ MESH_MIN_X + 8 * (MESH_X_DIST), MESH_MIN_X + 9 * (MESH_X_DIST),
+ MESH_MIN_X + 10 * (MESH_X_DIST), MESH_MIN_X + 11 * (MESH_X_DIST),
+ MESH_MIN_X + 12 * (MESH_X_DIST), MESH_MIN_X + 13 * (MESH_X_DIST),
+ MESH_MIN_X + 14 * (MESH_X_DIST), MESH_MIN_X + 15 * (MESH_X_DIST)
};
constexpr static float _mesh_index_to_ypos[16] PROGMEM = {
- UBL_MESH_MIN_Y + 0 * (MESH_Y_DIST), UBL_MESH_MIN_Y + 1 * (MESH_Y_DIST),
- UBL_MESH_MIN_Y + 2 * (MESH_Y_DIST), UBL_MESH_MIN_Y + 3 * (MESH_Y_DIST),
- UBL_MESH_MIN_Y + 4 * (MESH_Y_DIST), UBL_MESH_MIN_Y + 5 * (MESH_Y_DIST),
- UBL_MESH_MIN_Y + 6 * (MESH_Y_DIST), UBL_MESH_MIN_Y + 7 * (MESH_Y_DIST),
- UBL_MESH_MIN_Y + 8 * (MESH_Y_DIST), UBL_MESH_MIN_Y + 9 * (MESH_Y_DIST),
- UBL_MESH_MIN_Y + 10 * (MESH_Y_DIST), UBL_MESH_MIN_Y + 11 * (MESH_Y_DIST),
- UBL_MESH_MIN_Y + 12 * (MESH_Y_DIST), UBL_MESH_MIN_Y + 13 * (MESH_Y_DIST),
- UBL_MESH_MIN_Y + 14 * (MESH_Y_DIST), UBL_MESH_MIN_Y + 15 * (MESH_Y_DIST)
+ MESH_MIN_Y + 0 * (MESH_Y_DIST), MESH_MIN_Y + 1 * (MESH_Y_DIST),
+ MESH_MIN_Y + 2 * (MESH_Y_DIST), MESH_MIN_Y + 3 * (MESH_Y_DIST),
+ MESH_MIN_Y + 4 * (MESH_Y_DIST), MESH_MIN_Y + 5 * (MESH_Y_DIST),
+ MESH_MIN_Y + 6 * (MESH_Y_DIST), MESH_MIN_Y + 7 * (MESH_Y_DIST),
+ MESH_MIN_Y + 8 * (MESH_Y_DIST), MESH_MIN_Y + 9 * (MESH_Y_DIST),
+ MESH_MIN_Y + 10 * (MESH_Y_DIST), MESH_MIN_Y + 11 * (MESH_Y_DIST),
+ MESH_MIN_Y + 12 * (MESH_Y_DIST), MESH_MIN_Y + 13 * (MESH_Y_DIST),
+ MESH_MIN_Y + 14 * (MESH_Y_DIST), MESH_MIN_Y + 15 * (MESH_Y_DIST)
};
static bool g26_debug_flag, has_control_of_lcd_panel;
@@ -196,14 +196,14 @@ class unified_bed_leveling {
FORCE_INLINE static void set_z(const int8_t px, const int8_t py, const float &z) { z_values[px][py] = z; }
static int8_t get_cell_index_x(const float &x) {
- const int8_t cx = (x - (UBL_MESH_MIN_X)) * (1.0 / (MESH_X_DIST));
+ const int8_t cx = (x - (MESH_MIN_X)) * (1.0 / (MESH_X_DIST));
return constrain(cx, 0, (GRID_MAX_POINTS_X) - 1); // -1 is appropriate if we want all movement to the X_MAX
} // position. But with this defined this way, it is possible
// to extrapolate off of this point even further out. Probably
// that is OK because something else should be keeping that from
// happening and should not be worried about at this level.
static int8_t get_cell_index_y(const float &y) {
- const int8_t cy = (y - (UBL_MESH_MIN_Y)) * (1.0 / (MESH_Y_DIST));
+ const int8_t cy = (y - (MESH_MIN_Y)) * (1.0 / (MESH_Y_DIST));
return constrain(cy, 0, (GRID_MAX_POINTS_Y) - 1); // -1 is appropriate if we want all movement to the Y_MAX
} // position. But with this defined this way, it is possible
// to extrapolate off of this point even further out. Probably
@@ -211,12 +211,12 @@ class unified_bed_leveling {
// happening and should not be worried about at this level.
static int8_t find_closest_x_index(const float &x) {
- const int8_t px = (x - (UBL_MESH_MIN_X) + (MESH_X_DIST) * 0.5) * (1.0 / (MESH_X_DIST));
+ const int8_t px = (x - (MESH_MIN_X) + (MESH_X_DIST) * 0.5) * (1.0 / (MESH_X_DIST));
return WITHIN(px, 0, GRID_MAX_POINTS_X - 1) ? px : -1;
}
static int8_t find_closest_y_index(const float &y) {
- const int8_t py = (y - (UBL_MESH_MIN_Y) + (MESH_Y_DIST) * 0.5) * (1.0 / (MESH_Y_DIST));
+ const int8_t py = (y - (MESH_MIN_Y) + (MESH_Y_DIST) * 0.5) * (1.0 / (MESH_Y_DIST));
return WITHIN(py, 0, GRID_MAX_POINTS_Y - 1) ? py : -1;
}
@@ -362,11 +362,11 @@ class unified_bed_leveling {
}
FORCE_INLINE static float mesh_index_to_xpos(const uint8_t i) {
- return i < GRID_MAX_POINTS_X ? pgm_read_float(&_mesh_index_to_xpos[i]) : UBL_MESH_MIN_X + i * (MESH_X_DIST);
+ return i < GRID_MAX_POINTS_X ? pgm_read_float(&_mesh_index_to_xpos[i]) : MESH_MIN_X + i * (MESH_X_DIST);
}
FORCE_INLINE static float mesh_index_to_ypos(const uint8_t i) {
- return i < GRID_MAX_POINTS_Y ? pgm_read_float(&_mesh_index_to_ypos[i]) : UBL_MESH_MIN_Y + i * (MESH_Y_DIST);
+ return i < GRID_MAX_POINTS_Y ? pgm_read_float(&_mesh_index_to_ypos[i]) : MESH_MIN_Y + i * (MESH_Y_DIST);
}
static bool prepare_segmented_line_to(const float ltarget[XYZE], const float &feedrate);
diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
index f1eb6b7f0..edb862ce1 100644
--- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
+++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
@@ -415,7 +415,7 @@
z2 -= get_z_correction(LOGICAL_X_POSITION(UBL_PROBE_PT_2_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_2_Y)) /* + zprobe_zoffset */ ;
z3 -= get_z_correction(LOGICAL_X_POSITION(UBL_PROBE_PT_3_X), LOGICAL_Y_POSITION(UBL_PROBE_PT_3_Y)) /* + zprobe_zoffset */ ;
- do_blocking_move_to_xy(0.5 * (UBL_MESH_MAX_X - (UBL_MESH_MIN_X)), 0.5 * (UBL_MESH_MAX_Y - (UBL_MESH_MIN_Y)));
+ do_blocking_move_to_xy(0.5 * (MESH_MAX_X - (MESH_MIN_X)), 0.5 * (MESH_MAX_Y - (MESH_MIN_Y)));
tilt_mesh_based_on_3pts(z1, z2, z3);
restore_ubl_active_state_and_leave();
}
@@ -778,8 +778,8 @@
restore_ubl_active_state_and_leave();
do_blocking_move_to_xy(
- constrain(lx - (X_PROBE_OFFSET_FROM_EXTRUDER), UBL_MESH_MIN_X, UBL_MESH_MAX_X),
- constrain(ly - (Y_PROBE_OFFSET_FROM_EXTRUDER), UBL_MESH_MIN_Y, UBL_MESH_MAX_Y)
+ constrain(lx - (X_PROBE_OFFSET_FROM_EXTRUDER), MESH_MIN_X, MESH_MAX_X),
+ constrain(ly - (Y_PROBE_OFFSET_FROM_EXTRUDER), MESH_MIN_Y, MESH_MAX_Y)
);
}
@@ -915,7 +915,7 @@
save_ubl_active_state_and_disable(); // Disable bed level correction for probing
do_blocking_move_to_z(in_height);
- do_blocking_move_to_xy(0.5 * (UBL_MESH_MAX_X - (UBL_MESH_MIN_X)), 0.5 * (UBL_MESH_MAX_Y - (UBL_MESH_MIN_Y)));
+ do_blocking_move_to_xy(0.5 * (MESH_MAX_X - (MESH_MIN_X)), 0.5 * (MESH_MAX_Y - (MESH_MIN_Y)));
//, min(planner.max_feedrate_mm_s[X_AXIS], planner.max_feedrate_mm_s[Y_AXIS]) / 2.0);
stepper.synchronize();
@@ -1221,11 +1221,11 @@
SERIAL_EOL();
#endif
- SERIAL_ECHOLNPAIR("UBL_MESH_MIN_X " STRINGIFY(UBL_MESH_MIN_X) "=", UBL_MESH_MIN_X);
- SERIAL_ECHOLNPAIR("UBL_MESH_MIN_Y " STRINGIFY(UBL_MESH_MIN_Y) "=", UBL_MESH_MIN_Y);
+ SERIAL_ECHOLNPAIR("MESH_MIN_X " STRINGIFY(MESH_MIN_X) "=", MESH_MIN_X);
+ SERIAL_ECHOLNPAIR("MESH_MIN_Y " STRINGIFY(MESH_MIN_Y) "=", MESH_MIN_Y);
safe_delay(25);
- SERIAL_ECHOLNPAIR("UBL_MESH_MAX_X " STRINGIFY(UBL_MESH_MAX_X) "=", UBL_MESH_MAX_X);
- SERIAL_ECHOLNPAIR("UBL_MESH_MAX_Y " STRINGIFY(UBL_MESH_MAX_Y) "=", UBL_MESH_MAX_Y);
+ SERIAL_ECHOLNPAIR("MESH_MAX_X " STRINGIFY(MESH_MAX_X) "=", MESH_MAX_X);
+ SERIAL_ECHOLNPAIR("MESH_MAX_Y " STRINGIFY(MESH_MAX_Y) "=", MESH_MAX_Y);
safe_delay(25);
SERIAL_ECHOLNPAIR("GRID_MAX_POINTS_X ", GRID_MAX_POINTS_X);
SERIAL_ECHOLNPAIR("GRID_MAX_POINTS_Y ", GRID_MAX_POINTS_Y);
@@ -1641,10 +1641,10 @@
#if HAS_BED_PROBE
void unified_bed_leveling::tilt_mesh_based_on_probed_grid(const bool do_ubl_mesh_map) {
- constexpr int16_t x_min = max(MIN_PROBE_X, UBL_MESH_MIN_X),
- x_max = min(MAX_PROBE_X, UBL_MESH_MAX_X),
- y_min = max(MIN_PROBE_Y, UBL_MESH_MIN_Y),
- y_max = min(MAX_PROBE_Y, UBL_MESH_MAX_Y);
+ constexpr int16_t x_min = max(MIN_PROBE_X, MESH_MIN_X),
+ x_max = min(MAX_PROBE_X, MESH_MAX_X),
+ y_min = max(MIN_PROBE_Y, MESH_MIN_Y),
+ y_max = min(MAX_PROBE_Y, MESH_MAX_Y);
const float dx = float(x_max - x_min) / (g29_grid_size - 1.0),
dy = float(y_max - y_min) / (g29_grid_size - 1.0);
diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_motion.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_motion.cpp
index 376c077b8..41c11e4c6 100644
--- a/Marlin/src/feature/bedlevel/ubl/ubl_motion.cpp
+++ b/Marlin/src/feature/bedlevel/ubl/ubl_motion.cpp
@@ -622,8 +622,8 @@
// in top of loop and again re-find same adjacent cell and use it, just less efficient
// for mesh inset area.
- int8_t cell_xi = (seg_rx - (UBL_MESH_MIN_X)) * (1.0 / (MESH_X_DIST)),
- cell_yi = (seg_ry - (UBL_MESH_MIN_Y)) * (1.0 / (MESH_X_DIST));
+ int8_t cell_xi = (seg_rx - (MESH_MIN_X)) * (1.0 / (MESH_X_DIST)),
+ cell_yi = (seg_ry - (MESH_MIN_Y)) * (1.0 / (MESH_X_DIST));
cell_xi = constrain(cell_xi, 0, (GRID_MAX_POINTS_X) - 1);
cell_yi = constrain(cell_yi, 0, (GRID_MAX_POINTS_Y) - 1);
diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h
index f50d2f007..6f6e18d54 100644
--- a/Marlin/src/inc/Conditionals_LCD.h
+++ b/Marlin/src/inc/Conditionals_LCD.h
@@ -28,468 +28,468 @@
#ifndef CONDITIONALS_LCD_H // Get the LCD defines which are needed first
#define CONDITIONALS_LCD_H
- #define LCD_HAS_DIRECTIONAL_BUTTONS (BUTTON_EXISTS(UP) || BUTTON_EXISTS(DWN) || BUTTON_EXISTS(LFT) || BUTTON_EXISTS(RT))
+#define LCD_HAS_DIRECTIONAL_BUTTONS (BUTTON_EXISTS(UP) || BUTTON_EXISTS(DWN) || BUTTON_EXISTS(LFT) || BUTTON_EXISTS(RT))
- #if ENABLED(CARTESIO_UI)
+#if ENABLED(CARTESIO_UI)
- #define DOGLCD
- #define ULTIPANEL
- #define DEFAULT_LCD_CONTRAST 90
- #define LCD_CONTRAST_MIN 60
- #define LCD_CONTRAST_MAX 140
+ #define DOGLCD
+ #define ULTIPANEL
+ #define DEFAULT_LCD_CONTRAST 90
+ #define LCD_CONTRAST_MIN 60
+ #define LCD_CONTRAST_MAX 140
- #elif ENABLED(MAKRPANEL)
+#elif ENABLED(MAKRPANEL)
+ #define U8GLIB_ST7565_64128N
+
+#elif ENABLED(ANET_KEYPAD_LCD)
+
+ #define REPRAPWORLD_KEYPAD
+ #define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0
+ #define ADC_KEYPAD
+ #define ADC_KEY_NUM 8
+ #define ULTIPANEL
+
+ // this helps to implement ADC_KEYPAD menus
+ #define ENCODER_PULSES_PER_STEP 1
+ #define ENCODER_STEPS_PER_MENU_ITEM 1
+ #define REVERSE_MENU_DIRECTION
+
+#elif ENABLED(ANET_FULL_GRAPHICS_LCD)
+
+ #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
+
+#elif ENABLED(BQ_LCD_SMART_CONTROLLER)
+
+ #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
+
+#elif ENABLED(miniVIKI) || ENABLED(VIKI2) || ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) || ENABLED(AZSMZ_12864)
+
+ #define ULTRA_LCD //general LCD support, also 16x2
+ #define DOGLCD // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
+ #define ULTIMAKERCONTROLLER //as available from the Ultimaker online store.
+
+ #if ENABLED(miniVIKI)
+ #define LCD_CONTRAST_MIN 75
+ #define LCD_CONTRAST_MAX 115
+ #define DEFAULT_LCD_CONTRAST 95
+ #define U8GLIB_ST7565_64128N
+ #elif ENABLED(VIKI2)
+ #define LCD_CONTRAST_MIN 0
+ #define LCD_CONTRAST_MAX 255
+ #define DEFAULT_LCD_CONTRAST 140
+ #define U8GLIB_ST7565_64128N
+ #elif ENABLED(ELB_FULL_GRAPHIC_CONTROLLER)
+ #define LCD_CONTRAST_MIN 90
+ #define LCD_CONTRAST_MAX 130
+ #define DEFAULT_LCD_CONTRAST 110
+ #define U8GLIB_LM6059_AF
+ #define SD_DETECT_INVERTED
+ #elif ENABLED(AZSMZ_12864)
+ #define LCD_CONTRAST_MIN 120
+ #define LCD_CONTRAST_MAX 255
+ #define DEFAULT_LCD_CONTRAST 190
#define U8GLIB_ST7565_64128N
-
- #elif ENABLED(ANET_KEYPAD_LCD)
-
- #define REPRAPWORLD_KEYPAD
- #define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0
- #define ADC_KEYPAD
- #define ADC_KEY_NUM 8
- #define ULTIPANEL
-
- // this helps to implement ADC_KEYPAD menus
- #define ENCODER_PULSES_PER_STEP 1
- #define ENCODER_STEPS_PER_MENU_ITEM 1
- #define REVERSE_MENU_DIRECTION
-
- #elif ENABLED(ANET_FULL_GRAPHICS_LCD)
-
- #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
-
- #elif ENABLED(BQ_LCD_SMART_CONTROLLER)
-
- #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
-
- #elif ENABLED(miniVIKI) || ENABLED(VIKI2) || ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) || ENABLED(AZSMZ_12864)
-
- #define ULTRA_LCD //general LCD support, also 16x2
- #define DOGLCD // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
- #define ULTIMAKERCONTROLLER //as available from the Ultimaker online store.
-
- #if ENABLED(miniVIKI)
- #define LCD_CONTRAST_MIN 75
- #define LCD_CONTRAST_MAX 115
- #define DEFAULT_LCD_CONTRAST 95
- #define U8GLIB_ST7565_64128N
- #elif ENABLED(VIKI2)
- #define LCD_CONTRAST_MIN 0
- #define LCD_CONTRAST_MAX 255
- #define DEFAULT_LCD_CONTRAST 140
- #define U8GLIB_ST7565_64128N
- #elif ENABLED(ELB_FULL_GRAPHIC_CONTROLLER)
- #define LCD_CONTRAST_MIN 90
- #define LCD_CONTRAST_MAX 130
- #define DEFAULT_LCD_CONTRAST 110
- #define U8GLIB_LM6059_AF
- #define SD_DETECT_INVERTED
- #elif ENABLED(AZSMZ_12864)
- #define LCD_CONTRAST_MIN 120
- #define LCD_CONTRAST_MAX 255
- #define DEFAULT_LCD_CONTRAST 190
- #define U8GLIB_ST7565_64128N
- #endif
-
- #elif ENABLED(OLED_PANEL_TINYBOY2)
-
- #define U8GLIB_SSD1306
- #define ULTIPANEL
- #define REVERSE_ENCODER_DIRECTION
- #define REVERSE_MENU_DIRECTION
-
- #elif ENABLED(RA_CONTROL_PANEL)
-
- #define LCD_I2C_TYPE_PCA8574
- #define LCD_I2C_ADDRESS 0x27 // I2C Address of the port expander
- #define ULTIPANEL
-
- #elif ENABLED(REPRAPWORLD_GRAPHICAL_LCD)
-
- #define DOGLCD
- #define U8GLIB_ST7920
- #define ULTIPANEL
-
- #elif ENABLED(CR10_STOCKDISPLAY)
-
- #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
- #ifndef ST7920_DELAY_1
- #define ST7920_DELAY_1 DELAY_2_NOP
- #endif
- #ifndef ST7920_DELAY_2
- #define ST7920_DELAY_2 DELAY_2_NOP
- #endif
- #ifndef ST7920_DELAY_3
- #define ST7920_DELAY_3 DELAY_2_NOP
- #endif
-
- #elif ENABLED(MKS_12864OLED)
-
- #define REPRAP_DISCOUNT_SMART_CONTROLLER
- #define U8GLIB_SH1106
-
- #elif ENABLED(MKS_MINI_12864)
-
- #define MINIPANEL
-
#endif
- #if ENABLED(MAKRPANEL) || ENABLED(MINIPANEL)
- #define DOGLCD
- #define ULTIPANEL
- #define DEFAULT_LCD_CONTRAST 17
+#elif ENABLED(OLED_PANEL_TINYBOY2)
+
+ #define U8GLIB_SSD1306
+ #define ULTIPANEL
+ #define REVERSE_ENCODER_DIRECTION
+ #define REVERSE_MENU_DIRECTION
+
+#elif ENABLED(RA_CONTROL_PANEL)
+
+ #define LCD_I2C_TYPE_PCA8574
+ #define LCD_I2C_ADDRESS 0x27 // I2C Address of the port expander
+ #define ULTIPANEL
+
+#elif ENABLED(REPRAPWORLD_GRAPHICAL_LCD)
+
+ #define DOGLCD
+ #define U8GLIB_ST7920
+ #define ULTIPANEL
+
+#elif ENABLED(CR10_STOCKDISPLAY)
+
+ #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
+ #ifndef ST7920_DELAY_1
+ #define ST7920_DELAY_1 DELAY_2_NOP
+ #endif
+ #ifndef ST7920_DELAY_2
+ #define ST7920_DELAY_2 DELAY_2_NOP
+ #endif
+ #ifndef ST7920_DELAY_3
+ #define ST7920_DELAY_3 DELAY_2_NOP
#endif
- // Generic support for SSD1306 / SH1106 OLED based LCDs.
- #if ENABLED(U8GLIB_SSD1306) || ENABLED(U8GLIB_SH1106)
- #define ULTRA_LCD //general LCD support, also 16x2
- #define DOGLCD // Support for I2C LCD 128x64 (Controller SSD1306 / SH1106 graphic Display Family)
+#elif ENABLED(MKS_12864OLED)
+
+ #define REPRAP_DISCOUNT_SMART_CONTROLLER
+ #define U8GLIB_SH1106
+
+#elif ENABLED(MKS_MINI_12864)
+
+ #define MINIPANEL
+
+#endif
+
+#if ENABLED(MAKRPANEL) || ENABLED(MINIPANEL)
+ #define DOGLCD
+ #define ULTIPANEL
+ #define DEFAULT_LCD_CONTRAST 17
+#endif
+
+// Generic support for SSD1306 / SH1106 OLED based LCDs.
+#if ENABLED(U8GLIB_SSD1306) || ENABLED(U8GLIB_SH1106)
+ #define ULTRA_LCD //general LCD support, also 16x2
+ #define DOGLCD // Support for I2C LCD 128x64 (Controller SSD1306 / SH1106 graphic Display Family)
+#endif
+
+#if ENABLED(PANEL_ONE) || ENABLED(U8GLIB_SH1106)
+
+ #define ULTIMAKERCONTROLLER
+
+#elif ENABLED(MAKEBOARD_MINI_2_LINE_DISPLAY_1602)
+
+ #define REPRAP_DISCOUNT_SMART_CONTROLLER
+ #define LCD_WIDTH 16
+ #define LCD_HEIGHT 2
+
+#endif
+
+#if ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER) || ENABLED(LCD_FOR_MELZI)
+ #define DOGLCD
+ #define U8GLIB_ST7920
+ #define REPRAP_DISCOUNT_SMART_CONTROLLER
+#endif
+
+#if ENABLED(ULTIMAKERCONTROLLER) \
+ || ENABLED(REPRAP_DISCOUNT_SMART_CONTROLLER) \
+ || ENABLED(G3D_PANEL) \
+ || ENABLED(RIGIDBOT_PANEL)
+ #define ULTIPANEL
+#endif
+
+#if ENABLED(REPRAPWORLD_KEYPAD)
+ #define NEWPANEL
+ #if ENABLED(ULTIPANEL) && !defined(REPRAPWORLD_KEYPAD_MOVE_STEP)
+ #define REPRAPWORLD_KEYPAD_MOVE_STEP 1.0
#endif
+#endif
- #if ENABLED(PANEL_ONE) || ENABLED(U8GLIB_SH1106)
+/**
+ * I2C PANELS
+ */
- #define ULTIMAKERCONTROLLER
+#if ENABLED(LCD_I2C_SAINSMART_YWROBOT)
- #elif ENABLED(MAKEBOARD_MINI_2_LINE_DISPLAY_1602)
+ // Note: This controller requires F.Malpartida's LiquidCrystal_I2C library
+ // https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home
- #define REPRAP_DISCOUNT_SMART_CONTROLLER
+ #define LCD_I2C_TYPE_PCF8575
+ #define LCD_I2C_ADDRESS 0x27 // I2C Address of the port expander
+ #define ULTIPANEL
+
+#elif ENABLED(LCD_I2C_PANELOLU2)
+
+ // PANELOLU2 LCD with status LEDs, separate encoder and click inputs
+
+ #define LCD_I2C_TYPE_MCP23017
+ #define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
+ #define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD
+ #define ULTIPANEL
+
+#elif ENABLED(LCD_I2C_VIKI)
+
+ /**
+ * Panucatt VIKI LCD with status LEDs, integrated click & L/R/U/P buttons, separate encoder inputs
+ *
+ * This uses the LiquidTWI2 library v1.2.3 or later ( https://github.com/lincomatic/LiquidTWI2 )
+ * Make sure the LiquidTWI2 directory is placed in the Arduino or Sketchbook libraries subdirectory.
+ * Note: The pause/stop/resume LCD button pin should be connected to the Arduino
+ * BTN_ENC pin (or set BTN_ENC to -1 if not used)
+ */
+ #define LCD_I2C_TYPE_MCP23017
+ #define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
+ #define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD (requires LiquidTWI2 v1.2.3 or later)
+ #define ULTIPANEL
+
+ #define ENCODER_FEEDRATE_DEADZONE 4
+
+ #define STD_ENCODER_PULSES_PER_STEP 1
+ #define STD_ENCODER_STEPS_PER_MENU_ITEM 2
+
+#elif ENABLED(G3D_PANEL)
+
+ #define STD_ENCODER_PULSES_PER_STEP 2
+ #define STD_ENCODER_STEPS_PER_MENU_ITEM 1
+
+#elif ENABLED(miniVIKI) || ENABLED(VIKI2) \
+ || ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) \
+ || ENABLED(AZSMZ_12864) \
+ || ENABLED(OLED_PANEL_TINYBOY2) \
+ || ENABLED(BQ_LCD_SMART_CONTROLLER) \
+ || ENABLED(LCD_I2C_PANELOLU2) \
+ || ENABLED(REPRAP_DISCOUNT_SMART_CONTROLLER)
+ #define STD_ENCODER_PULSES_PER_STEP 4
+ #define STD_ENCODER_STEPS_PER_MENU_ITEM 1
+#endif
+
+#ifndef STD_ENCODER_PULSES_PER_STEP
+ #define STD_ENCODER_PULSES_PER_STEP 5
+#endif
+#ifndef STD_ENCODER_STEPS_PER_MENU_ITEM
+ #define STD_ENCODER_STEPS_PER_MENU_ITEM 1
+#endif
+#ifndef ENCODER_PULSES_PER_STEP
+ #define ENCODER_PULSES_PER_STEP STD_ENCODER_PULSES_PER_STEP
+#endif
+#ifndef ENCODER_STEPS_PER_MENU_ITEM
+ #define ENCODER_STEPS_PER_MENU_ITEM STD_ENCODER_STEPS_PER_MENU_ITEM
+#endif
+#ifndef ENCODER_FEEDRATE_DEADZONE
+ #define ENCODER_FEEDRATE_DEADZONE 6
+#endif
+
+// Shift register panels
+// ---------------------
+// 2 wire Non-latching LCD SR from:
+// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection
+
+#if ENABLED(SAV_3DLCD)
+ #define SR_LCD_2W_NL // Non latching 2 wire shift register
+ #define ULTIPANEL
+#endif
+
+#if ENABLED(DOGLCD) // Change number of lines to match the DOG graphic display
+ #ifndef LCD_WIDTH
+ #define LCD_WIDTH 22
+ #endif
+ #ifndef LCD_HEIGHT
+ #define LCD_HEIGHT 5
+ #endif
+#endif
+
+#if ENABLED(ULTIPANEL)
+ #define NEWPANEL // Disable this if you actually have no click-encoder panel
+ #define ULTRA_LCD
+ #ifndef LCD_WIDTH
+ #define LCD_WIDTH 20
+ #endif
+ #ifndef LCD_HEIGHT
+ #define LCD_HEIGHT 4
+ #endif
+#elif ENABLED(ULTRA_LCD) // no panel but just LCD
+ #ifndef LCD_WIDTH
#define LCD_WIDTH 16
+ #endif
+ #ifndef LCD_HEIGHT
#define LCD_HEIGHT 2
-
#endif
+#endif
- #if ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER) || ENABLED(LCD_FOR_MELZI)
- #define DOGLCD
- #define U8GLIB_ST7920
- #define REPRAP_DISCOUNT_SMART_CONTROLLER
- #endif
+#if ENABLED(DOGLCD)
+ /* Custom characters defined in font dogm_font_data_Marlin_symbols.h / Marlin_symbols.fon */
+ // \x00 intentionally skipped to avoid problems in strings
+ #define LCD_STR_REFRESH "\x01"
+ #define LCD_STR_FOLDER "\x02"
+ #define LCD_STR_ARROW_RIGHT "\x03"
+ #define LCD_STR_UPLEVEL "\x04"
+ #define LCD_STR_CLOCK "\x05"
+ #define LCD_STR_FEEDRATE "\x06"
+ #define LCD_STR_BEDTEMP "\x07"
+ #define LCD_STR_THERMOMETER "\x08"
+ #define LCD_STR_DEGREE "\x09"
- #if ENABLED(ULTIMAKERCONTROLLER) \
- || ENABLED(REPRAP_DISCOUNT_SMART_CONTROLLER) \
- || ENABLED(G3D_PANEL) \
- || ENABLED(RIGIDBOT_PANEL)
- #define ULTIPANEL
- #endif
+ #define LCD_STR_SPECIAL_MAX '\x09'
+ // Maximum here is 0x1F because 0x20 is ' ' (space) and the normal charsets begin.
+ // Better stay below 0x10 because DISPLAY_CHARSET_HD44780_WESTERN begins here.
- #if ENABLED(REPRAPWORLD_KEYPAD)
- #define NEWPANEL
- #if ENABLED(ULTIPANEL) && !defined(REPRAPWORLD_KEYPAD_MOVE_STEP)
- #define REPRAPWORLD_KEYPAD_MOVE_STEP 1.0
+ // Symbol characters
+ #define LCD_STR_FILAM_DIA "\xf8"
+ #define LCD_STR_FILAM_MUL "\xa4"
+#else
+ /* Custom characters defined in the first 8 characters of the LCD */
+ #define LCD_BEDTEMP_CHAR 0x00 // Print only as a char. This will have 'unexpected' results when used in a string!
+ #define LCD_DEGREE_CHAR 0x01
+ #define LCD_STR_THERMOMETER "\x02" // Still used with string concatenation
+ #define LCD_UPLEVEL_CHAR 0x03
+ #define LCD_STR_REFRESH "\x04"
+ #define LCD_STR_FOLDER "\x05"
+ #define LCD_FEEDRATE_CHAR 0x06
+ #define LCD_CLOCK_CHAR 0x07
+ #define LCD_STR_ARROW_RIGHT ">" /* from the default character set */
+#endif
+
+/**
+ * Default LCD contrast for dogm-like LCD displays
+ */
+#if ENABLED(DOGLCD)
+
+ #define HAS_LCD_CONTRAST ( \
+ ENABLED(MAKRPANEL) \
+ || ENABLED(CARTESIO_UI) \
+ || ENABLED(VIKI2) \
+ || ENABLED(AZSMZ_12864) \
+ || ENABLED(miniVIKI) \
+ || ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) \
+ )
+
+ #if HAS_LCD_CONTRAST
+ #ifndef LCD_CONTRAST_MIN
+ #define LCD_CONTRAST_MIN 0
+ #endif
+ #ifndef LCD_CONTRAST_MAX
+ #define LCD_CONTRAST_MAX 63
+ #endif
+ #ifndef DEFAULT_LCD_CONTRAST
+ #define DEFAULT_LCD_CONTRAST 32
#endif
#endif
+#endif
- /**
- * I2C PANELS
- */
+// Boot screens
+#if DISABLED(ULTRA_LCD)
+ #undef SHOW_BOOTSCREEN
+#elif !defined(BOOTSCREEN_TIMEOUT)
+ #define BOOTSCREEN_TIMEOUT 2500
+#endif
- #if ENABLED(LCD_I2C_SAINSMART_YWROBOT)
+#define HAS_DEBUG_MENU ENABLED(LCD_PROGRESS_BAR_TEST)
- // Note: This controller requires F.Malpartida's LiquidCrystal_I2C library
- // https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home
+// MK2 Multiplexer forces SINGLENOZZLE to be enabled
+#if ENABLED(MK2_MULTIPLEXER)
+ #define SINGLENOZZLE
+#endif
- #define LCD_I2C_TYPE_PCF8575
- #define LCD_I2C_ADDRESS 0x27 // I2C Address of the port expander
- #define ULTIPANEL
-
- #elif ENABLED(LCD_I2C_PANELOLU2)
-
- // PANELOLU2 LCD with status LEDs, separate encoder and click inputs
-
- #define LCD_I2C_TYPE_MCP23017
- #define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
- #define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD
- #define ULTIPANEL
-
- #elif ENABLED(LCD_I2C_VIKI)
-
- /**
- * Panucatt VIKI LCD with status LEDs, integrated click & L/R/U/P buttons, separate encoder inputs
- *
- * This uses the LiquidTWI2 library v1.2.3 or later ( https://github.com/lincomatic/LiquidTWI2 )
- * Make sure the LiquidTWI2 directory is placed in the Arduino or Sketchbook libraries subdirectory.
- * Note: The pause/stop/resume LCD button pin should be connected to the Arduino
- * BTN_ENC pin (or set BTN_ENC to -1 if not used)
- */
- #define LCD_I2C_TYPE_MCP23017
- #define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
- #define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD (requires LiquidTWI2 v1.2.3 or later)
- #define ULTIPANEL
-
- #define ENCODER_FEEDRATE_DEADZONE 4
-
- #define STD_ENCODER_PULSES_PER_STEP 1
- #define STD_ENCODER_STEPS_PER_MENU_ITEM 2
-
- #elif ENABLED(G3D_PANEL)
-
- #define STD_ENCODER_PULSES_PER_STEP 2
- #define STD_ENCODER_STEPS_PER_MENU_ITEM 1
-
- #elif ENABLED(miniVIKI) || ENABLED(VIKI2) \
- || ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) \
- || ENABLED(AZSMZ_12864) \
- || ENABLED(OLED_PANEL_TINYBOY2) \
- || ENABLED(BQ_LCD_SMART_CONTROLLER) \
- || ENABLED(LCD_I2C_PANELOLU2) \
- || ENABLED(REPRAP_DISCOUNT_SMART_CONTROLLER)
- #define STD_ENCODER_PULSES_PER_STEP 4
- #define STD_ENCODER_STEPS_PER_MENU_ITEM 1
+/**
+ * Extruders have some combination of stepper motors and hotends
+ * so we separate these concepts into the defines:
+ *
+ * EXTRUDERS - Number of Selectable Tools
+ * HOTENDS - Number of hotends, whether connected or separate
+ * E_STEPPERS - Number of actual E stepper motors
+ * E_MANUAL - Number of E steppers for LCD move options
+ * TOOL_E_INDEX - Index to use when getting/setting the tool state
+ *
+ */
+#if ENABLED(SINGLENOZZLE) || ENABLED(MIXING_EXTRUDER) // One hotend, one thermistor, no XY offset
+ #define HOTENDS 1
+ #undef TEMP_SENSOR_1_AS_REDUNDANT
+ #undef HOTEND_OFFSET_X
+ #undef HOTEND_OFFSET_Y
+#else // Two hotends
+ #define HOTENDS EXTRUDERS
+ #if ENABLED(SWITCHING_NOZZLE) && !defined(HOTEND_OFFSET_Z)
+ #define HOTEND_OFFSET_Z { 0 }
#endif
+#endif
- #ifndef STD_ENCODER_PULSES_PER_STEP
- #define STD_ENCODER_PULSES_PER_STEP 5
- #endif
- #ifndef STD_ENCODER_STEPS_PER_MENU_ITEM
- #define STD_ENCODER_STEPS_PER_MENU_ITEM 1
- #endif
- #ifndef ENCODER_PULSES_PER_STEP
- #define ENCODER_PULSES_PER_STEP STD_ENCODER_PULSES_PER_STEP
- #endif
- #ifndef ENCODER_STEPS_PER_MENU_ITEM
- #define ENCODER_STEPS_PER_MENU_ITEM STD_ENCODER_STEPS_PER_MENU_ITEM
- #endif
- #ifndef ENCODER_FEEDRATE_DEADZONE
- #define ENCODER_FEEDRATE_DEADZONE 6
- #endif
+#define HOTEND_LOOP() for (int8_t e = 0; e < HOTENDS; e++)
- // Shift register panels
- // ---------------------
- // 2 wire Non-latching LCD SR from:
- // https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection
+#if HOTENDS == 1
+ #define HOTEND_INDEX 0
+#else
+ #define HOTEND_INDEX e
+#endif
- #if ENABLED(SAV_3DLCD)
- #define SR_LCD_2W_NL // Non latching 2 wire shift register
- #define ULTIPANEL
- #endif
-
- #if ENABLED(DOGLCD) // Change number of lines to match the DOG graphic display
- #ifndef LCD_WIDTH
- #define LCD_WIDTH 22
- #endif
- #ifndef LCD_HEIGHT
- #define LCD_HEIGHT 5
- #endif
- #endif
-
- #if ENABLED(ULTIPANEL)
- #define NEWPANEL // Disable this if you actually have no click-encoder panel
- #define ULTRA_LCD
- #ifndef LCD_WIDTH
- #define LCD_WIDTH 20
- #endif
- #ifndef LCD_HEIGHT
- #define LCD_HEIGHT 4
- #endif
- #elif ENABLED(ULTRA_LCD) // no panel but just LCD
- #ifndef LCD_WIDTH
- #define LCD_WIDTH 16
- #endif
- #ifndef LCD_HEIGHT
- #define LCD_HEIGHT 2
- #endif
- #endif
-
- #if ENABLED(DOGLCD)
- /* Custom characters defined in font dogm_font_data_Marlin_symbols.h / Marlin_symbols.fon */
- // \x00 intentionally skipped to avoid problems in strings
- #define LCD_STR_REFRESH "\x01"
- #define LCD_STR_FOLDER "\x02"
- #define LCD_STR_ARROW_RIGHT "\x03"
- #define LCD_STR_UPLEVEL "\x04"
- #define LCD_STR_CLOCK "\x05"
- #define LCD_STR_FEEDRATE "\x06"
- #define LCD_STR_BEDTEMP "\x07"
- #define LCD_STR_THERMOMETER "\x08"
- #define LCD_STR_DEGREE "\x09"
-
- #define LCD_STR_SPECIAL_MAX '\x09'
- // Maximum here is 0x1F because 0x20 is ' ' (space) and the normal charsets begin.
- // Better stay below 0x10 because DISPLAY_CHARSET_HD44780_WESTERN begins here.
-
- // Symbol characters
- #define LCD_STR_FILAM_DIA "\xf8"
- #define LCD_STR_FILAM_MUL "\xa4"
+#if ENABLED(SWITCHING_EXTRUDER) || ENABLED(MIXING_EXTRUDER) // Unified E axis
+ #if ENABLED(MIXING_EXTRUDER)
+ #define E_STEPPERS MIXING_STEPPERS
#else
- /* Custom characters defined in the first 8 characters of the LCD */
- #define LCD_BEDTEMP_CHAR 0x00 // Print only as a char. This will have 'unexpected' results when used in a string!
- #define LCD_DEGREE_CHAR 0x01
- #define LCD_STR_THERMOMETER "\x02" // Still used with string concatenation
- #define LCD_UPLEVEL_CHAR 0x03
- #define LCD_STR_REFRESH "\x04"
- #define LCD_STR_FOLDER "\x05"
- #define LCD_FEEDRATE_CHAR 0x06
- #define LCD_CLOCK_CHAR 0x07
- #define LCD_STR_ARROW_RIGHT ">" /* from the default character set */
+ #define E_STEPPERS 1 // One E stepper
#endif
+ #define E_MANUAL 1
+ #define TOOL_E_INDEX 0
+#else
+ #define E_STEPPERS EXTRUDERS
+ #define E_MANUAL EXTRUDERS
+ #define TOOL_E_INDEX current_block->active_extruder
+#endif
- /**
- * Default LCD contrast for dogm-like LCD displays
- */
- #if ENABLED(DOGLCD)
+/**
+ * DISTINCT_E_FACTORS affects how some E factors are accessed
+ */
+#if ENABLED(DISTINCT_E_FACTORS) && E_STEPPERS > 1
+ #define XYZE_N (XYZ + E_STEPPERS)
+ #define E_AXIS_N (E_AXIS + extruder)
+#else
+ #undef DISTINCT_E_FACTORS
+ #define XYZE_N XYZE
+ #define E_AXIS_N E_AXIS
+#endif
- #define HAS_LCD_CONTRAST ( \
- ENABLED(MAKRPANEL) \
- || ENABLED(CARTESIO_UI) \
- || ENABLED(VIKI2) \
- || ENABLED(AZSMZ_12864) \
- || ENABLED(miniVIKI) \
- || ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) \
- )
-
- #if HAS_LCD_CONTRAST
- #ifndef LCD_CONTRAST_MIN
- #define LCD_CONTRAST_MIN 0
- #endif
- #ifndef LCD_CONTRAST_MAX
- #define LCD_CONTRAST_MAX 63
- #endif
- #ifndef DEFAULT_LCD_CONTRAST
- #define DEFAULT_LCD_CONTRAST 32
- #endif
- #endif
+/**
+ * The BLTouch Probe emulates a servo probe
+ * and uses "special" angles for its state.
+ */
+#if ENABLED(BLTOUCH)
+ #ifndef Z_ENDSTOP_SERVO_NR
+ #define Z_ENDSTOP_SERVO_NR 0
#endif
-
- // Boot screens
- #if DISABLED(ULTRA_LCD)
- #undef SHOW_BOOTSCREEN
- #elif !defined(BOOTSCREEN_TIMEOUT)
- #define BOOTSCREEN_TIMEOUT 2500
+ #ifndef NUM_SERVOS
+ #define NUM_SERVOS (Z_ENDSTOP_SERVO_NR + 1)
#endif
-
- #define HAS_DEBUG_MENU ENABLED(LCD_PROGRESS_BAR_TEST)
-
- // MK2 Multiplexer forces SINGLENOZZLE to be enabled
- #if ENABLED(MK2_MULTIPLEXER)
- #define SINGLENOZZLE
+ #undef DEACTIVATE_SERVOS_AFTER_MOVE
+ #if NUM_SERVOS == 1
+ #undef SERVO_DELAY
+ #define SERVO_DELAY { 50 }
#endif
-
- /**
- * Extruders have some combination of stepper motors and hotends
- * so we separate these concepts into the defines:
- *
- * EXTRUDERS - Number of Selectable Tools
- * HOTENDS - Number of hotends, whether connected or separate
- * E_STEPPERS - Number of actual E stepper motors
- * E_MANUAL - Number of E steppers for LCD move options
- * TOOL_E_INDEX - Index to use when getting/setting the tool state
- *
- */
- #if ENABLED(SINGLENOZZLE) || ENABLED(MIXING_EXTRUDER) // One hotend, one thermistor, no XY offset
- #define HOTENDS 1
- #undef TEMP_SENSOR_1_AS_REDUNDANT
- #undef HOTEND_OFFSET_X
- #undef HOTEND_OFFSET_Y
- #else // Two hotends
- #define HOTENDS EXTRUDERS
- #if ENABLED(SWITCHING_NOZZLE) && !defined(HOTEND_OFFSET_Z)
- #define HOTEND_OFFSET_Z { 0 }
- #endif
+ #ifndef BLTOUCH_DELAY
+ #define BLTOUCH_DELAY 375
#endif
+ #undef Z_SERVO_ANGLES
+ #define Z_SERVO_ANGLES { BLTOUCH_DEPLOY, BLTOUCH_STOW }
- #define HOTEND_LOOP() for (int8_t e = 0; e < HOTENDS; e++)
+ #define BLTOUCH_DEPLOY 10
+ #define BLTOUCH_STOW 90
+ #define BLTOUCH_SELFTEST 120
+ #define BLTOUCH_RESET 160
+ #define _TEST_BLTOUCH(P) (READ(P##_PIN) != P##_ENDSTOP_INVERTING)
- #if HOTENDS == 1
- #define HOTEND_INDEX 0
+ // Always disable probe pin inverting for BLTouch
+ #undef Z_MIN_PROBE_ENDSTOP_INVERTING
+ #define Z_MIN_PROBE_ENDSTOP_INVERTING false
+
+ #if ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
+ #undef Z_MIN_ENDSTOP_INVERTING
+ #define Z_MIN_ENDSTOP_INVERTING false
+ #define TEST_BLTOUCH() _TEST_BLTOUCH(Z_MIN)
#else
- #define HOTEND_INDEX e
+ #define TEST_BLTOUCH() _TEST_BLTOUCH(Z_MIN_PROBE)
#endif
+#endif
- #if ENABLED(SWITCHING_EXTRUDER) || ENABLED(MIXING_EXTRUDER) // Unified E axis
- #if ENABLED(MIXING_EXTRUDER)
- #define E_STEPPERS MIXING_STEPPERS
- #else
- #define E_STEPPERS 1 // One E stepper
- #endif
- #define E_MANUAL 1
- #define TOOL_E_INDEX 0
- #else
- #define E_STEPPERS EXTRUDERS
- #define E_MANUAL EXTRUDERS
- #define TOOL_E_INDEX current_block->active_extruder
- #endif
+/**
+ * Set a flag for a servo probe
+ */
+#define HAS_Z_SERVO_ENDSTOP (defined(Z_ENDSTOP_SERVO_NR) && Z_ENDSTOP_SERVO_NR >= 0)
- /**
- * DISTINCT_E_FACTORS affects how some E factors are accessed
- */
- #if ENABLED(DISTINCT_E_FACTORS) && E_STEPPERS > 1
- #define XYZE_N (XYZ + E_STEPPERS)
- #define E_AXIS_N (E_AXIS + extruder)
- #else
- #undef DISTINCT_E_FACTORS
- #define XYZE_N XYZE
- #define E_AXIS_N E_AXIS
- #endif
+/**
+ * UBL has its own manual probing, so this just causes trouble.
+ */
+#if ENABLED(AUTO_BED_LEVELING_UBL)
+ #undef PROBE_MANUALLY
+#endif
- /**
- * The BLTouch Probe emulates a servo probe
- * and uses "special" angles for its state.
- */
- #if ENABLED(BLTOUCH)
- #ifndef Z_ENDSTOP_SERVO_NR
- #define Z_ENDSTOP_SERVO_NR 0
- #endif
- #ifndef NUM_SERVOS
- #define NUM_SERVOS (Z_ENDSTOP_SERVO_NR + 1)
- #endif
- #undef DEACTIVATE_SERVOS_AFTER_MOVE
- #if NUM_SERVOS == 1
- #undef SERVO_DELAY
- #define SERVO_DELAY { 50 }
- #endif
- #ifndef BLTOUCH_DELAY
- #define BLTOUCH_DELAY 375
- #endif
- #undef Z_SERVO_ANGLES
- #define Z_SERVO_ANGLES { BLTOUCH_DEPLOY, BLTOUCH_STOW }
+/**
+ * Set a flag for any enabled probe
+ */
+#define PROBE_SELECTED (ENABLED(PROBE_MANUALLY) || ENABLED(FIX_MOUNTED_PROBE) || ENABLED(Z_PROBE_ALLEN_KEY) || HAS_Z_SERVO_ENDSTOP || ENABLED(Z_PROBE_SLED) || ENABLED(SOLENOID_PROBE))
- #define BLTOUCH_DEPLOY 10
- #define BLTOUCH_STOW 90
- #define BLTOUCH_SELFTEST 120
- #define BLTOUCH_RESET 160
- #define _TEST_BLTOUCH(P) (READ(P##_PIN) != P##_ENDSTOP_INVERTING)
+/**
+ * Clear probe pin settings when no probe is selected
+ */
+#if !PROBE_SELECTED || ENABLED(PROBE_MANUALLY)
+ #undef Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
+ #undef Z_MIN_PROBE_ENDSTOP
+#endif
- // Always disable probe pin inverting for BLTouch
- #undef Z_MIN_PROBE_ENDSTOP_INVERTING
- #define Z_MIN_PROBE_ENDSTOP_INVERTING false
-
- #if ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
- #undef Z_MIN_ENDSTOP_INVERTING
- #define Z_MIN_ENDSTOP_INVERTING false
- #define TEST_BLTOUCH() _TEST_BLTOUCH(Z_MIN)
- #else
- #define TEST_BLTOUCH() _TEST_BLTOUCH(Z_MIN_PROBE)
- #endif
- #endif
-
- /**
- * Set a flag for a servo probe
- */
- #define HAS_Z_SERVO_ENDSTOP (defined(Z_ENDSTOP_SERVO_NR) && Z_ENDSTOP_SERVO_NR >= 0)
-
- /**
- * UBL has its own manual probing, so this just causes trouble.
- */
- #if ENABLED(AUTO_BED_LEVELING_UBL)
- #undef PROBE_MANUALLY
- #endif
-
- /**
- * Set a flag for any enabled probe
- */
- #define PROBE_SELECTED (ENABLED(PROBE_MANUALLY) || ENABLED(FIX_MOUNTED_PROBE) || ENABLED(Z_PROBE_ALLEN_KEY) || HAS_Z_SERVO_ENDSTOP || ENABLED(Z_PROBE_SLED) || ENABLED(SOLENOID_PROBE))
-
- /**
- * Clear probe pin settings when no probe is selected
- */
- #if !PROBE_SELECTED || ENABLED(PROBE_MANUALLY)
- #undef Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
- #undef Z_MIN_PROBE_ENDSTOP
- #endif
-
- #define HAS_SOFTWARE_ENDSTOPS (ENABLED(MIN_SOFTWARE_ENDSTOPS) || ENABLED(MAX_SOFTWARE_ENDSTOPS))
- #define HAS_RESUME_CONTINUE (ENABLED(NEWPANEL) || ENABLED(EMERGENCY_PARSER))
- #define HAS_COLOR_LEDS (ENABLED(BLINKM) || ENABLED(RGB_LED) || ENABLED(RGBW_LED) || ENABLED(PCA9632) || ENABLED(NEOPIXEL_LED))
+#define HAS_SOFTWARE_ENDSTOPS (ENABLED(MIN_SOFTWARE_ENDSTOPS) || ENABLED(MAX_SOFTWARE_ENDSTOPS))
+#define HAS_RESUME_CONTINUE (ENABLED(NEWPANEL) || ENABLED(EMERGENCY_PARSER))
+#define HAS_COLOR_LEDS (ENABLED(BLINKM) || ENABLED(RGB_LED) || ENABLED(RGBW_LED) || ENABLED(PCA9632) || ENABLED(NEOPIXEL_LED))
// For Re-ARM boards, always use the USB Emulated Serial Port unless RE_ARM_FORCE_SERIAL_PORT is defined
#if 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)
diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h
index b9f5e7db1..8a71a9d4a 100644
--- a/Marlin/src/inc/Conditionals_post.h
+++ b/Marlin/src/inc/Conditionals_post.h
@@ -28,1001 +28,1039 @@
#ifndef CONDITIONALS_POST_H
#define CONDITIONALS_POST_H
- #define AVR_ATmega2560_FAMILY_PLUS_70 ( \
- MB(BQ_ZUM_MEGA_3D) \
- || MB(MIGHTYBOARD_REVE) \
- || MB(MINIRAMBO) \
- || MB(SCOOVO_X9H) \
- )
+#define AVR_ATmega2560_FAMILY_PLUS_70 ( \
+ MB(BQ_ZUM_MEGA_3D) \
+ || MB(MIGHTYBOARD_REVE) \
+ || MB(MINIRAMBO) \
+ || MB(SCOOVO_X9H) \
+)
- #define IS_SCARA (ENABLED(MORGAN_SCARA) || ENABLED(MAKERARM_SCARA))
- #define IS_KINEMATIC (ENABLED(DELTA) || IS_SCARA)
- #define IS_CARTESIAN !IS_KINEMATIC
+#define IS_SCARA (ENABLED(MORGAN_SCARA) || ENABLED(MAKERARM_SCARA))
+#define IS_KINEMATIC (ENABLED(DELTA) || IS_SCARA)
+#define IS_CARTESIAN !IS_KINEMATIC
- /**
- * Axis lengths and center
- */
- #define X_MAX_LENGTH (X_MAX_POS - (X_MIN_POS))
- #define Y_MAX_LENGTH (Y_MAX_POS - (Y_MIN_POS))
- #define Z_MAX_LENGTH (Z_MAX_POS - (Z_MIN_POS))
+/**
+ * Axis lengths and center
+ */
+#define X_MAX_LENGTH (X_MAX_POS - (X_MIN_POS))
+#define Y_MAX_LENGTH (Y_MAX_POS - (Y_MIN_POS))
+#define Z_MAX_LENGTH (Z_MAX_POS - (Z_MIN_POS))
- // Defined only if the sanity-check is bypassed
- #ifndef X_BED_SIZE
- #define X_BED_SIZE X_MAX_LENGTH
+// Defined only if the sanity-check is bypassed
+#ifndef X_BED_SIZE
+ #define X_BED_SIZE X_MAX_LENGTH
+#endif
+#ifndef Y_BED_SIZE
+ #define Y_BED_SIZE Y_MAX_LENGTH
+#endif
+
+// Require 0,0 bed center for Delta and SCARA
+#if IS_KINEMATIC
+ #define BED_CENTER_AT_0_0
+#endif
+
+// Define center values for future use
+#if ENABLED(BED_CENTER_AT_0_0)
+ #define X_CENTER 0
+ #define Y_CENTER 0
+#else
+ #define X_CENTER ((X_BED_SIZE) / 2)
+ #define Y_CENTER ((Y_BED_SIZE) / 2)
+#endif
+#define Z_CENTER ((Z_MIN_POS + Z_MAX_POS) / 2)
+
+// Get the linear boundaries of the bed
+#define X_MIN_BED (X_CENTER - (X_BED_SIZE) / 2)
+#define X_MAX_BED (X_CENTER + (X_BED_SIZE) / 2)
+#define Y_MIN_BED (Y_CENTER - (Y_BED_SIZE) / 2)
+#define Y_MAX_BED (Y_CENTER + (Y_BED_SIZE) / 2)
+
+/**
+ * CoreXY, CoreXZ, and CoreYZ - and their reverse
+ */
+#define CORE_IS_XY (ENABLED(COREXY) || ENABLED(COREYX))
+#define CORE_IS_XZ (ENABLED(COREXZ) || ENABLED(COREZX))
+#define CORE_IS_YZ (ENABLED(COREYZ) || ENABLED(COREZY))
+#define IS_CORE (CORE_IS_XY || CORE_IS_XZ || CORE_IS_YZ)
+#if IS_CORE
+ #if CORE_IS_XY
+ #define CORE_AXIS_1 A_AXIS
+ #define CORE_AXIS_2 B_AXIS
+ #define NORMAL_AXIS Z_AXIS
+ #elif CORE_IS_XZ
+ #define CORE_AXIS_1 A_AXIS
+ #define NORMAL_AXIS Y_AXIS
+ #define CORE_AXIS_2 C_AXIS
+ #elif CORE_IS_YZ
+ #define NORMAL_AXIS X_AXIS
+ #define CORE_AXIS_1 B_AXIS
+ #define CORE_AXIS_2 C_AXIS
#endif
- #ifndef Y_BED_SIZE
- #define Y_BED_SIZE Y_MAX_LENGTH
- #endif
-
- // Require 0,0 bed center for Delta and SCARA
- #if IS_KINEMATIC
- #define BED_CENTER_AT_0_0
- #endif
-
- // Define center values for future use
- #if ENABLED(BED_CENTER_AT_0_0)
- #define X_CENTER 0
- #define Y_CENTER 0
+ #if (ENABLED(COREYX) || ENABLED(COREZX) || ENABLED(COREZY))
+ #define CORESIGN(n) (-(n))
#else
- #define X_CENTER ((X_BED_SIZE) / 2)
- #define Y_CENTER ((Y_BED_SIZE) / 2)
+ #define CORESIGN(n) (n)
#endif
- #define Z_CENTER ((Z_MIN_POS + Z_MAX_POS) / 2)
+#endif
- // Get the linear boundaries of the bed
- #define X_MIN_BED (X_CENTER - (X_BED_SIZE) / 2)
- #define X_MAX_BED (X_CENTER + (X_BED_SIZE) / 2)
- #define Y_MIN_BED (Y_CENTER - (Y_BED_SIZE) / 2)
- #define Y_MAX_BED (Y_CENTER + (Y_BED_SIZE) / 2)
+/**
+ * No adjustable bed on non-cartesians
+ */
+#if IS_KINEMATIC
+ #undef LEVEL_BED_CORNERS
+#endif
- /**
- * CoreXY, CoreXZ, and CoreYZ - and their reverse
- */
- #define CORE_IS_XY (ENABLED(COREXY) || ENABLED(COREYX))
- #define CORE_IS_XZ (ENABLED(COREXZ) || ENABLED(COREZX))
- #define CORE_IS_YZ (ENABLED(COREYZ) || ENABLED(COREZY))
- #define IS_CORE (CORE_IS_XY || CORE_IS_XZ || CORE_IS_YZ)
- #if IS_CORE
- #if CORE_IS_XY
- #define CORE_AXIS_1 A_AXIS
- #define CORE_AXIS_2 B_AXIS
- #define NORMAL_AXIS Z_AXIS
- #elif CORE_IS_XZ
- #define CORE_AXIS_1 A_AXIS
- #define NORMAL_AXIS Y_AXIS
- #define CORE_AXIS_2 C_AXIS
- #elif CORE_IS_YZ
- #define NORMAL_AXIS X_AXIS
- #define CORE_AXIS_1 B_AXIS
- #define CORE_AXIS_2 C_AXIS
- #endif
- #if (ENABLED(COREYX) || ENABLED(COREZX) || ENABLED(COREZY))
- #define CORESIGN(n) (-(n))
- #else
- #define CORESIGN(n) (n)
- #endif
- #endif
+/**
+ * SCARA cannot use SLOWDOWN and requires QUICKHOME
+ */
+#if IS_SCARA
+ #undef SLOWDOWN
+ #define QUICK_HOME
+#endif
- /**
- * No adjustable bed on non-cartesians
- */
- #if IS_KINEMATIC
- #undef LEVEL_BED_CORNERS
- #endif
-
- /**
- * SCARA cannot use SLOWDOWN and requires QUICKHOME
- */
- #if IS_SCARA
- #undef SLOWDOWN
- #define QUICK_HOME
- #endif
-
- /**
- * Set the home position based on settings or manual overrides
- */
- #ifdef MANUAL_X_HOME_POS
- #define X_HOME_POS MANUAL_X_HOME_POS
- #elif ENABLED(BED_CENTER_AT_0_0)
- #if ENABLED(DELTA)
- #define X_HOME_POS 0
- #else
- #define X_HOME_POS ((X_BED_SIZE) * (X_HOME_DIR) * 0.5)
- #endif
- #else
- #if ENABLED(DELTA)
- #define X_HOME_POS (X_MIN_POS + (X_BED_SIZE) * 0.5)
- #else
- #define X_HOME_POS (X_HOME_DIR < 0 ? X_MIN_POS : X_MAX_POS)
- #endif
- #endif
-
- #ifdef MANUAL_Y_HOME_POS
- #define Y_HOME_POS MANUAL_Y_HOME_POS
- #elif ENABLED(BED_CENTER_AT_0_0)
- #if ENABLED(DELTA)
- #define Y_HOME_POS 0
- #else
- #define Y_HOME_POS ((Y_BED_SIZE) * (Y_HOME_DIR) * 0.5)
- #endif
- #else
- #if ENABLED(DELTA)
- #define Y_HOME_POS (Y_MIN_POS + (Y_BED_SIZE) * 0.5)
- #else
- #define Y_HOME_POS (Y_HOME_DIR < 0 ? Y_MIN_POS : Y_MAX_POS)
- #endif
- #endif
-
- #ifdef MANUAL_Z_HOME_POS
- #define Z_HOME_POS MANUAL_Z_HOME_POS
- #else
- #define Z_HOME_POS (Z_HOME_DIR < 0 ? Z_MIN_POS : Z_MAX_POS)
- #endif
-
- /**
- * If DELTA_HEIGHT isn't defined use the old setting
- */
- #if ENABLED(DELTA) && !defined(DELTA_HEIGHT)
- #define DELTA_HEIGHT Z_HOME_POS
- #endif
-
- /**
- * Auto Bed Leveling and Z Probe Repeatability Test
- */
- #define HOMING_Z_WITH_PROBE (HAS_BED_PROBE && Z_HOME_DIR < 0 && ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN))
-
- /**
- * Z Sled Probe requires Z_SAFE_HOMING
- */
- #if ENABLED(Z_PROBE_SLED)
- #define Z_SAFE_HOMING
- #endif
-
- /**
- * DELTA should ignore Z_SAFE_HOMING and SLOWDOWN
- */
+/**
+ * Set the home position based on settings or manual overrides
+ */
+#ifdef MANUAL_X_HOME_POS
+ #define X_HOME_POS MANUAL_X_HOME_POS
+#elif ENABLED(BED_CENTER_AT_0_0)
#if ENABLED(DELTA)
- #undef Z_SAFE_HOMING
- #undef SLOWDOWN
- #endif
-
- /**
- * Safe Homing Options
- */
- #if ENABLED(Z_SAFE_HOMING)
- #ifndef Z_SAFE_HOMING_X_POINT
- #define Z_SAFE_HOMING_X_POINT X_CENTER
- #endif
- #ifndef Z_SAFE_HOMING_Y_POINT
- #define Z_SAFE_HOMING_Y_POINT Y_CENTER
- #endif
- #define X_TILT_FULCRUM Z_SAFE_HOMING_X_POINT
- #define Y_TILT_FULCRUM Z_SAFE_HOMING_Y_POINT
+ #define X_HOME_POS 0
#else
- #define X_TILT_FULCRUM X_HOME_POS
- #define Y_TILT_FULCRUM Y_HOME_POS
+ #define X_HOME_POS ((X_BED_SIZE) * (X_HOME_DIR) * 0.5)
#endif
+#else
+ #if ENABLED(DELTA)
+ #define X_HOME_POS (X_MIN_POS + (X_BED_SIZE) * 0.5)
+ #else
+ #define X_HOME_POS (X_HOME_DIR < 0 ? X_MIN_POS : X_MAX_POS)
+ #endif
+#endif
+#ifdef MANUAL_Y_HOME_POS
+ #define Y_HOME_POS MANUAL_Y_HOME_POS
+#elif ENABLED(BED_CENTER_AT_0_0)
+ #if ENABLED(DELTA)
+ #define Y_HOME_POS 0
+ #else
+ #define Y_HOME_POS ((Y_BED_SIZE) * (Y_HOME_DIR) * 0.5)
+ #endif
+#else
+ #if ENABLED(DELTA)
+ #define Y_HOME_POS (Y_MIN_POS + (Y_BED_SIZE) * 0.5)
+ #else
+ #define Y_HOME_POS (Y_HOME_DIR < 0 ? Y_MIN_POS : Y_MAX_POS)
+ #endif
+#endif
+
+#ifdef MANUAL_Z_HOME_POS
+ #define Z_HOME_POS MANUAL_Z_HOME_POS
+#else
+ #define Z_HOME_POS (Z_HOME_DIR < 0 ? Z_MIN_POS : Z_MAX_POS)
+#endif
+
+/**
+ * If DELTA_HEIGHT isn't defined use the old setting
+ */
+#if ENABLED(DELTA) && !defined(DELTA_HEIGHT)
+ #define DELTA_HEIGHT Z_HOME_POS
+#endif
+
+/**
+ * Auto Bed Leveling and Z Probe Repeatability Test
+ */
+#define HOMING_Z_WITH_PROBE (HAS_BED_PROBE && Z_HOME_DIR < 0 && ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN))
+
+/**
+ * Z Sled Probe requires Z_SAFE_HOMING
+ */
+#if ENABLED(Z_PROBE_SLED)
+ #define Z_SAFE_HOMING
+#endif
+
+/**
+ * DELTA should ignore Z_SAFE_HOMING and SLOWDOWN
+ */
+#if ENABLED(DELTA)
+ #undef Z_SAFE_HOMING
+ #undef SLOWDOWN
+#endif
+
+/**
+ * Safe Homing Options
+ */
+#if ENABLED(Z_SAFE_HOMING)
+ #ifndef Z_SAFE_HOMING_X_POINT
+ #define Z_SAFE_HOMING_X_POINT X_CENTER
+ #endif
+ #ifndef Z_SAFE_HOMING_Y_POINT
+ #define Z_SAFE_HOMING_Y_POINT Y_CENTER
+ #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
+
+/**
+ * Host keep alive
+ */
+#ifndef DEFAULT_KEEPALIVE_INTERVAL
+ #define DEFAULT_KEEPALIVE_INTERVAL 2
+#endif
+
+#ifdef CPU_32_BIT
/**
- * Host keep alive
+ * Hidden options for developer
*/
- #ifndef DEFAULT_KEEPALIVE_INTERVAL
- #define DEFAULT_KEEPALIVE_INTERVAL 2
+ // Double stepping starts at STEP_DOUBLER_FREQUENCY + 1, quad stepping starts at STEP_DOUBLER_FREQUENCY * 2 + 1
+ #ifndef STEP_DOUBLER_FREQUENCY
+ #if ENABLED(LIN_ADVANCE)
+ #define STEP_DOUBLER_FREQUENCY 60000 // Hz
+ #else
+ #define STEP_DOUBLER_FREQUENCY 80000 // Hz
+ #endif
#endif
+ // Disable double / quad stepping
+ //#define DISABLE_MULTI_STEPPING
+#endif
+/**
+ * Provide a MAX_AUTORETRACT for older configs
+ */
+#if ENABLED(FWRETRACT) && !defined(MAX_AUTORETRACT)
+ #define MAX_AUTORETRACT 99
+#endif
+
+/**
+ * MAX_STEP_FREQUENCY differs for TOSHIBA
+ */
+#if ENABLED(CONFIG_STEPPERS_TOSHIBA)
#ifdef CPU_32_BIT
- /**
- * Hidden options for developer
- */
- // Double stepping starts at STEP_DOUBLER_FREQUENCY + 1, quad stepping starts at STEP_DOUBLER_FREQUENCY * 2 + 1
- #ifndef STEP_DOUBLER_FREQUENCY
- #if ENABLED(LIN_ADVANCE)
- #define STEP_DOUBLER_FREQUENCY 60000 // Hz
- #else
- #define STEP_DOUBLER_FREQUENCY 80000 // Hz
- #endif
- #endif
- // Disable double / quad stepping
- //#define DISABLE_MULTI_STEPPING
- #endif
-
- /**
- * Provide a MAX_AUTORETRACT for older configs
- */
- #if ENABLED(FWRETRACT) && !defined(MAX_AUTORETRACT)
- #define MAX_AUTORETRACT 99
- #endif
-
- /**
- * MAX_STEP_FREQUENCY differs for TOSHIBA
- */
- #if ENABLED(CONFIG_STEPPERS_TOSHIBA)
- #ifdef CPU_32_BIT
- #define MAX_STEP_FREQUENCY STEP_DOUBLER_FREQUENCY // Max step frequency for Toshiba Stepper Controllers, 96kHz is close to maximum for an Arduino Due
- #else
- #define MAX_STEP_FREQUENCY 10000 // Max step frequency for Toshiba Stepper Controllers
- #endif
+ #define MAX_STEP_FREQUENCY STEP_DOUBLER_FREQUENCY // Max step frequency for Toshiba Stepper Controllers, 96kHz is close to maximum for an Arduino Due
#else
- #ifdef CPU_32_BIT
- #define MAX_STEP_FREQUENCY (STEP_DOUBLER_FREQUENCY * 4) // Max step frequency for the Due is approx. 330kHz
- #else
- #define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step)
- #endif
+ #define MAX_STEP_FREQUENCY 10000 // Max step frequency for Toshiba Stepper Controllers
#endif
-
- // MS1 MS2 Stepper Driver Microstepping mode table
- #define MICROSTEP1 LOW,LOW
- #define MICROSTEP2 HIGH,LOW
- #define MICROSTEP4 LOW,HIGH
- #define MICROSTEP8 HIGH,HIGH
- #ifdef __SAM3X8E__
- #if MB(ALLIGATOR)
- #define MICROSTEP16 LOW,LOW
- #define MICROSTEP32 HIGH,HIGH
- #else
- #define MICROSTEP16 HIGH,HIGH
- #endif
+#else
+ #ifdef CPU_32_BIT
+ #define MAX_STEP_FREQUENCY (STEP_DOUBLER_FREQUENCY * 4) // Max step frequency for the Due is approx. 330kHz
#else
- #define MICROSTEP16 HIGH,HIGH
+ #define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step)
#endif
+#endif
- /**
- * Override here because this is set in Configuration_adv.h
- */
- #if ENABLED(ULTIPANEL) && DISABLED(ELB_FULL_GRAPHIC_CONTROLLER)
- #undef SD_DETECT_INVERTED
+// MS1 MS2 Stepper Driver Microstepping mode table
+#define MICROSTEP1 LOW,LOW
+#define MICROSTEP2 HIGH,LOW
+#define MICROSTEP4 LOW,HIGH
+#define MICROSTEP8 HIGH,HIGH
+#ifdef __SAM3X8E__
+ #if MB(ALLIGATOR)
+ #define MICROSTEP16 LOW,LOW
+ #define MICROSTEP32 HIGH,HIGH
+ #else
+ #define MICROSTEP16 HIGH,HIGH
#endif
+#else
+#define MICROSTEP16 HIGH,HIGH
+#endif
- /**
- * Set defaults for missing (newer) options
- */
- #ifndef DISABLE_INACTIVE_X
- #define DISABLE_INACTIVE_X DISABLE_X
- #endif
- #ifndef DISABLE_INACTIVE_Y
- #define DISABLE_INACTIVE_Y DISABLE_Y
- #endif
- #ifndef DISABLE_INACTIVE_Z
- #define DISABLE_INACTIVE_Z DISABLE_Z
- #endif
- #ifndef DISABLE_INACTIVE_E
- #define DISABLE_INACTIVE_E DISABLE_E
- #endif
+/**
+ * Override here because this is set in Configuration_adv.h
+ */
+#if ENABLED(ULTIPANEL) && DISABLED(ELB_FULL_GRAPHIC_CONTROLLER)
+ #undef SD_DETECT_INVERTED
+#endif
- // Power Signal Control Definitions
- // By default use ATX definition
- #ifndef POWER_SUPPLY
- #define POWER_SUPPLY 1
+/**
+ * Set defaults for missing (newer) options
+ */
+#ifndef DISABLE_INACTIVE_X
+ #define DISABLE_INACTIVE_X DISABLE_X
+#endif
+#ifndef DISABLE_INACTIVE_Y
+ #define DISABLE_INACTIVE_Y DISABLE_Y
+#endif
+#ifndef DISABLE_INACTIVE_Z
+ #define DISABLE_INACTIVE_Z DISABLE_Z
+#endif
+#ifndef DISABLE_INACTIVE_E
+ #define DISABLE_INACTIVE_E DISABLE_E
+#endif
+
+// Power Signal Control Definitions
+// By default use ATX definition
+#ifndef POWER_SUPPLY
+ #define POWER_SUPPLY 1
+#endif
+#if (POWER_SUPPLY == 1) // 1 = ATX
+ #define PS_ON_AWAKE LOW
+ #define PS_ON_ASLEEP HIGH
+#elif (POWER_SUPPLY == 2) // 2 = X-Box 360 203W
+ #define PS_ON_AWAKE HIGH
+ #define PS_ON_ASLEEP LOW
+#endif
+#define HAS_POWER_SWITCH (POWER_SUPPLY > 0 && PIN_EXISTS(PS_ON))
+
+/**
+ * Temp Sensor defines
+ */
+#if TEMP_SENSOR_0 == -3
+ #define HEATER_0_USES_MAX6675
+ #define MAX6675_IS_MAX31855
+ #define MAX6675_TMIN -270
+ #define MAX6675_TMAX 1800
+#elif TEMP_SENSOR_0 == -2
+ #define HEATER_0_USES_MAX6675
+ #define MAX6675_TMIN 0
+ #define MAX6675_TMAX 1024
+#elif TEMP_SENSOR_0 == -1
+ #define HEATER_0_USES_AD595
+#elif TEMP_SENSOR_0 == 0
+ #undef HEATER_0_MINTEMP
+ #undef HEATER_0_MAXTEMP
+#elif TEMP_SENSOR_0 > 0
+ #define THERMISTORHEATER_0 TEMP_SENSOR_0
+ #define HEATER_0_USES_THERMISTOR
+#endif
+
+#if TEMP_SENSOR_1 <= -2
+ #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_1"
+#elif TEMP_SENSOR_1 == -1
+ #define HEATER_1_USES_AD595
+#elif TEMP_SENSOR_1 == 0
+ #undef HEATER_1_MINTEMP
+ #undef HEATER_1_MAXTEMP
+#elif TEMP_SENSOR_1 > 0
+ #define THERMISTORHEATER_1 TEMP_SENSOR_1
+ #define HEATER_1_USES_THERMISTOR
+#endif
+
+#if TEMP_SENSOR_2 <= -2
+ #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_2"
+#elif TEMP_SENSOR_2 == -1
+ #define HEATER_2_USES_AD595
+#elif TEMP_SENSOR_2 == 0
+ #undef HEATER_2_MINTEMP
+ #undef HEATER_2_MAXTEMP
+#elif TEMP_SENSOR_2 > 0
+ #define THERMISTORHEATER_2 TEMP_SENSOR_2
+ #define HEATER_2_USES_THERMISTOR
+#endif
+
+#if TEMP_SENSOR_3 <= -2
+ #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_3"
+#elif TEMP_SENSOR_3 == -1
+ #define HEATER_3_USES_AD595
+#elif TEMP_SENSOR_3 == 0
+ #undef HEATER_3_MINTEMP
+ #undef HEATER_3_MAXTEMP
+#elif TEMP_SENSOR_3 > 0
+ #define THERMISTORHEATER_3 TEMP_SENSOR_3
+ #define HEATER_3_USES_THERMISTOR
+#endif
+
+#if TEMP_SENSOR_4 <= -2
+ #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_4"
+#elif TEMP_SENSOR_4 == -1
+ #define HEATER_4_USES_AD595
+#elif TEMP_SENSOR_4 == 0
+ #undef HEATER_4_MINTEMP
+ #undef HEATER_4_MAXTEMP
+#elif TEMP_SENSOR_4 > 0
+ #define THERMISTORHEATER_4 TEMP_SENSOR_4
+ #define HEATER_4_USES_THERMISTOR
+#endif
+
+#if TEMP_SENSOR_BED <= -2
+ #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_BED"
+#elif TEMP_SENSOR_BED == -1
+ #define BED_USES_AD595
+#elif TEMP_SENSOR_BED == 0
+ #undef BED_MINTEMP
+ #undef BED_MAXTEMP
+#elif TEMP_SENSOR_BED > 0
+ #define THERMISTORBED TEMP_SENSOR_BED
+ #define BED_USES_THERMISTOR
+#endif
+
+#ifdef __SAM3X8E__
+ #define HEATER_USES_AD595 (ENABLED(HEATER_0_USES_AD595) || ENABLED(HEATER_1_USES_AD595) || ENABLED(HEATER_2_USES_AD595) || ENABLED(HEATER_3_USES_AD595))
+#endif
+
+/**
+ * Flags for PID handling
+ */
+#define HAS_PID_HEATING (ENABLED(PIDTEMP) || ENABLED(PIDTEMPBED))
+#define HAS_PID_FOR_BOTH (ENABLED(PIDTEMP) && ENABLED(PIDTEMPBED))
+
+/**
+ * Default hotend offsets, if not defined
+ */
+#if HOTENDS > 1
+ #ifndef HOTEND_OFFSET_X
+ #define HOTEND_OFFSET_X { 0 } // X offsets for each extruder
#endif
- #if (POWER_SUPPLY == 1) // 1 = ATX
- #define PS_ON_AWAKE LOW
- #define PS_ON_ASLEEP HIGH
- #elif (POWER_SUPPLY == 2) // 2 = X-Box 360 203W
- #define PS_ON_AWAKE HIGH
- #define PS_ON_ASLEEP LOW
+ #ifndef HOTEND_OFFSET_Y
+ #define HOTEND_OFFSET_Y { 0 } // Y offsets for each extruder
#endif
- #define HAS_POWER_SWITCH (POWER_SUPPLY > 0 && PIN_EXISTS(PS_ON))
-
- /**
- * Temp Sensor defines
- */
- #if TEMP_SENSOR_0 == -3
- #define HEATER_0_USES_MAX6675
- #define MAX6675_IS_MAX31855
- #define MAX6675_TMIN -270
- #define MAX6675_TMAX 1800
- #elif TEMP_SENSOR_0 == -2
- #define HEATER_0_USES_MAX6675
- #define MAX6675_TMIN 0
- #define MAX6675_TMAX 1024
- #elif TEMP_SENSOR_0 == -1
- #define HEATER_0_USES_AD595
- #elif TEMP_SENSOR_0 == 0
- #undef HEATER_0_MINTEMP
- #undef HEATER_0_MAXTEMP
- #elif TEMP_SENSOR_0 > 0
- #define THERMISTORHEATER_0 TEMP_SENSOR_0
- #define HEATER_0_USES_THERMISTOR
+ #if !defined(HOTEND_OFFSET_Z) && (ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_NOZZLE))
+ #define HOTEND_OFFSET_Z { 0 }
#endif
+#endif
- #if TEMP_SENSOR_1 <= -2
- #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_1"
- #elif TEMP_SENSOR_1 == -1
- #define HEATER_1_USES_AD595
- #elif TEMP_SENSOR_1 == 0
- #undef HEATER_1_MINTEMP
- #undef HEATER_1_MAXTEMP
- #elif TEMP_SENSOR_1 > 0
- #define THERMISTORHEATER_1 TEMP_SENSOR_1
- #define HEATER_1_USES_THERMISTOR
+/**
+ * ARRAY_BY_EXTRUDERS based on EXTRUDERS
+ */
+#define ARRAY_BY_EXTRUDERS(...) ARRAY_N(EXTRUDERS, __VA_ARGS__)
+#define ARRAY_BY_EXTRUDERS1(v1) ARRAY_BY_EXTRUDERS(v1, v1, v1, v1, v1, v1)
+
+/**
+ * ARRAY_BY_HOTENDS based on HOTENDS
+ */
+#define ARRAY_BY_HOTENDS(...) ARRAY_N(HOTENDS, __VA_ARGS__)
+#define ARRAY_BY_HOTENDS1(v1) ARRAY_BY_HOTENDS(v1, v1, v1, v1, v1, v1)
+
+/**
+ * Z_DUAL_ENDSTOPS endstop reassignment
+ */
+#if ENABLED(Z_DUAL_ENDSTOPS)
+ #define _XMIN_ 100
+ #define _YMIN_ 200
+ #define _ZMIN_ 300
+ #define _XMAX_ 101
+ #define _YMAX_ 201
+ #define _ZMAX_ 301
+ #if Z2_USE_ENDSTOP == _XMIN_
+ #define USE_XMIN_PLUG
+ #elif Z2_USE_ENDSTOP == _XMAX_
+ #define USE_XMAX_PLUG
+ #elif Z2_USE_ENDSTOP == _YMIN_
+ #define USE_YMIN_PLUG
+ #elif Z2_USE_ENDSTOP == _YMAX_
+ #define USE_YMAX_PLUG
+ #elif Z2_USE_ENDSTOP == _ZMIN_
+ #define USE_ZMIN_PLUG
+ #elif Z2_USE_ENDSTOP == _ZMAX_
+ #define USE_ZMAX_PLUG
#endif
-
- #if TEMP_SENSOR_2 <= -2
- #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_2"
- #elif TEMP_SENSOR_2 == -1
- #define HEATER_2_USES_AD595
- #elif TEMP_SENSOR_2 == 0
- #undef HEATER_2_MINTEMP
- #undef HEATER_2_MAXTEMP
- #elif TEMP_SENSOR_2 > 0
- #define THERMISTORHEATER_2 TEMP_SENSOR_2
- #define HEATER_2_USES_THERMISTOR
- #endif
-
- #if TEMP_SENSOR_3 <= -2
- #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_3"
- #elif TEMP_SENSOR_3 == -1
- #define HEATER_3_USES_AD595
- #elif TEMP_SENSOR_3 == 0
- #undef HEATER_3_MINTEMP
- #undef HEATER_3_MAXTEMP
- #elif TEMP_SENSOR_3 > 0
- #define THERMISTORHEATER_3 TEMP_SENSOR_3
- #define HEATER_3_USES_THERMISTOR
- #endif
-
- #if TEMP_SENSOR_4 <= -2
- #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_4"
- #elif TEMP_SENSOR_4 == -1
- #define HEATER_4_USES_AD595
- #elif TEMP_SENSOR_4 == 0
- #undef HEATER_4_MINTEMP
- #undef HEATER_4_MAXTEMP
- #elif TEMP_SENSOR_4 > 0
- #define THERMISTORHEATER_4 TEMP_SENSOR_4
- #define HEATER_4_USES_THERMISTOR
- #endif
-
- #if TEMP_SENSOR_BED <= -2
- #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_BED"
- #elif TEMP_SENSOR_BED == -1
- #define BED_USES_AD595
- #elif TEMP_SENSOR_BED == 0
- #undef BED_MINTEMP
- #undef BED_MAXTEMP
- #elif TEMP_SENSOR_BED > 0
- #define THERMISTORBED TEMP_SENSOR_BED
- #define BED_USES_THERMISTOR
- #endif
-
- #ifdef __SAM3X8E__
- #define HEATER_USES_AD595 (ENABLED(HEATER_0_USES_AD595) || ENABLED(HEATER_1_USES_AD595) || ENABLED(HEATER_2_USES_AD595) || ENABLED(HEATER_3_USES_AD595))
- #endif
-
- /**
- * Flags for PID handling
- */
- #define HAS_PID_HEATING (ENABLED(PIDTEMP) || ENABLED(PIDTEMPBED))
- #define HAS_PID_FOR_BOTH (ENABLED(PIDTEMP) && ENABLED(PIDTEMPBED))
-
- /**
- * Default hotend offsets, if not defined
- */
- #if HOTENDS > 1
- #ifndef HOTEND_OFFSET_X
- #define HOTEND_OFFSET_X { 0 } // X offsets for each extruder
- #endif
- #ifndef HOTEND_OFFSET_Y
- #define HOTEND_OFFSET_Y { 0 } // Y offsets for each extruder
- #endif
- #if !defined(HOTEND_OFFSET_Z) && (ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_NOZZLE))
- #define HOTEND_OFFSET_Z { 0 }
- #endif
- #endif
-
- /**
- * ARRAY_BY_EXTRUDERS based on EXTRUDERS
- */
- #define ARRAY_BY_EXTRUDERS(...) ARRAY_N(EXTRUDERS, __VA_ARGS__)
- #define ARRAY_BY_EXTRUDERS1(v1) ARRAY_BY_EXTRUDERS(v1, v1, v1, v1, v1, v1)
-
- /**
- * ARRAY_BY_HOTENDS based on HOTENDS
- */
- #define ARRAY_BY_HOTENDS(...) ARRAY_N(HOTENDS, __VA_ARGS__)
- #define ARRAY_BY_HOTENDS1(v1) ARRAY_BY_HOTENDS(v1, v1, v1, v1, v1, v1)
-
- /**
- * Z_DUAL_ENDSTOPS endstop reassignment
- */
- #if ENABLED(Z_DUAL_ENDSTOPS)
- #define _XMIN_ 100
- #define _YMIN_ 200
- #define _ZMIN_ 300
- #define _XMAX_ 101
- #define _YMAX_ 201
- #define _ZMAX_ 301
+ #if Z_HOME_DIR > 0
#if Z2_USE_ENDSTOP == _XMIN_
- #define USE_XMIN_PLUG
+ #define Z2_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
+ #define Z2_MAX_PIN X_MIN_PIN
#elif Z2_USE_ENDSTOP == _XMAX_
- #define USE_XMAX_PLUG
+ #define Z2_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING
+ #define Z2_MAX_PIN X_MAX_PIN
#elif Z2_USE_ENDSTOP == _YMIN_
- #define USE_YMIN_PLUG
+ #define Z2_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING
+ #define Z2_MAX_PIN Y_MIN_PIN
#elif Z2_USE_ENDSTOP == _YMAX_
- #define USE_YMAX_PLUG
+ #define Z2_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING
+ #define Z2_MAX_PIN Y_MAX_PIN
#elif Z2_USE_ENDSTOP == _ZMIN_
- #define USE_ZMIN_PLUG
+ #define Z2_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING
+ #define Z2_MAX_PIN Z_MIN_PIN
#elif Z2_USE_ENDSTOP == _ZMAX_
- #define USE_ZMAX_PLUG
- #endif
- #if Z_HOME_DIR > 0
- #if Z2_USE_ENDSTOP == _XMIN_
- #define Z2_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
- #define Z2_MAX_PIN X_MIN_PIN
- #elif Z2_USE_ENDSTOP == _XMAX_
- #define Z2_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING
- #define Z2_MAX_PIN X_MAX_PIN
- #elif Z2_USE_ENDSTOP == _YMIN_
- #define Z2_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING
- #define Z2_MAX_PIN Y_MIN_PIN
- #elif Z2_USE_ENDSTOP == _YMAX_
- #define Z2_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING
- #define Z2_MAX_PIN Y_MAX_PIN
- #elif Z2_USE_ENDSTOP == _ZMIN_
- #define Z2_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING
- #define Z2_MAX_PIN Z_MIN_PIN
- #elif Z2_USE_ENDSTOP == _ZMAX_
- #define Z2_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING
- #define Z2_MAX_PIN Z_MAX_PIN
- #else
- #define Z2_MAX_ENDSTOP_INVERTING false
- #endif
+ #define Z2_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING
+ #define Z2_MAX_PIN Z_MAX_PIN
#else
- #if Z2_USE_ENDSTOP == _XMIN_
- #define Z2_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
- #define Z2_MIN_PIN X_MIN_PIN
- #elif Z2_USE_ENDSTOP == _XMAX_
- #define Z2_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING
- #define Z2_MIN_PIN X_MAX_PIN
- #elif Z2_USE_ENDSTOP == _YMIN_
- #define Z2_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING
- #define Z2_MIN_PIN Y_MIN_PIN
- #elif Z2_USE_ENDSTOP == _YMAX_
- #define Z2_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING
- #define Z2_MIN_PIN Y_MAX_PIN
- #elif Z2_USE_ENDSTOP == _ZMIN_
- #define Z2_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING
- #define Z2_MIN_PIN Z_MIN_PIN
- #elif Z2_USE_ENDSTOP == _ZMAX_
- #define Z2_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING
- #define Z2_MIN_PIN Z_MAX_PIN
- #else
- #define Z2_MIN_ENDSTOP_INVERTING false
- #endif
+ #define Z2_MAX_ENDSTOP_INVERTING false
#endif
- #endif
-
- // Is an endstop plug used for the Z2 endstop or the bed probe?
- #define IS_Z2_OR_PROBE(A,M) ( \
- (ENABLED(Z_DUAL_ENDSTOPS) && Z2_USE_ENDSTOP == _##A##M##_) \
- || (ENABLED(Z_MIN_PROBE_ENDSTOP) && Z_MIN_PROBE_PIN == A##_##M##_PIN ) )
-
- /**
- * Set ENDSTOPPULLUPS for active endstop switches
- */
- #if ENABLED(ENDSTOPPULLUPS)
- #if ENABLED(USE_XMAX_PLUG)
- #define ENDSTOPPULLUP_XMAX
- #endif
- #if ENABLED(USE_YMAX_PLUG)
- #define ENDSTOPPULLUP_YMAX
- #endif
- #if ENABLED(USE_ZMAX_PLUG)
- #define ENDSTOPPULLUP_ZMAX
- #endif
- #if ENABLED(USE_XMIN_PLUG)
- #define ENDSTOPPULLUP_XMIN
- #endif
- #if ENABLED(USE_YMIN_PLUG)
- #define ENDSTOPPULLUP_YMIN
- #endif
- #if ENABLED(USE_ZMIN_PLUG)
- #define ENDSTOPPULLUP_ZMIN
- #endif
- #endif
-
- /**
- * Shorthand for pin tests, used wherever needed
- */
-
- // Steppers
- #define HAS_X_ENABLE (PIN_EXISTS(X_ENABLE))
- #define HAS_X_DIR (PIN_EXISTS(X_DIR))
- #define HAS_X_STEP (PIN_EXISTS(X_STEP))
- #define HAS_X_MICROSTEPS (PIN_EXISTS(X_MS1))
-
- #define HAS_X2_ENABLE (PIN_EXISTS(X2_ENABLE))
- #define HAS_X2_DIR (PIN_EXISTS(X2_DIR))
- #define HAS_X2_STEP (PIN_EXISTS(X2_STEP))
- #define HAS_Y_MICROSTEPS (PIN_EXISTS(Y_MS1))
-
- #define HAS_Y_ENABLE (PIN_EXISTS(Y_ENABLE))
- #define HAS_Y_DIR (PIN_EXISTS(Y_DIR))
- #define HAS_Y_STEP (PIN_EXISTS(Y_STEP))
- #define HAS_Z_MICROSTEPS (PIN_EXISTS(Z_MS1))
-
- #define HAS_Y2_ENABLE (PIN_EXISTS(Y2_ENABLE))
- #define HAS_Y2_DIR (PIN_EXISTS(Y2_DIR))
- #define HAS_Y2_STEP (PIN_EXISTS(Y2_STEP))
-
- #define HAS_Z_ENABLE (PIN_EXISTS(Z_ENABLE))
- #define HAS_Z_DIR (PIN_EXISTS(Z_DIR))
- #define HAS_Z_STEP (PIN_EXISTS(Z_STEP))
-
- #define HAS_Z2_ENABLE (PIN_EXISTS(Z2_ENABLE))
- #define HAS_Z2_DIR (PIN_EXISTS(Z2_DIR))
- #define HAS_Z2_STEP (PIN_EXISTS(Z2_STEP))
-
- // Extruder steppers and solenoids
- #define HAS_E0_ENABLE (PIN_EXISTS(E0_ENABLE))
- #define HAS_E0_DIR (PIN_EXISTS(E0_DIR))
- #define HAS_E0_STEP (PIN_EXISTS(E0_STEP))
- #define HAS_E0_MICROSTEPS (PIN_EXISTS(E0_MS1))
- #define HAS_SOLENOID_0 (PIN_EXISTS(SOL0))
-
- #define HAS_E1_ENABLE (PIN_EXISTS(E1_ENABLE))
- #define HAS_E1_DIR (PIN_EXISTS(E1_DIR))
- #define HAS_E1_STEP (PIN_EXISTS(E1_STEP))
- #define HAS_E1_MICROSTEPS (PIN_EXISTS(E1_MS1))
- #define HAS_SOLENOID_1 (PIN_EXISTS(SOL1))
-
- #define HAS_E2_ENABLE (PIN_EXISTS(E2_ENABLE))
- #define HAS_E2_DIR (PIN_EXISTS(E2_DIR))
- #define HAS_E2_STEP (PIN_EXISTS(E2_STEP))
- #define HAS_E2_MICROSTEPS (PIN_EXISTS(E2_MS1))
- #define HAS_SOLENOID_2 (PIN_EXISTS(SOL2))
-
- #define HAS_E3_ENABLE (PIN_EXISTS(E3_ENABLE))
- #define HAS_E3_DIR (PIN_EXISTS(E3_DIR))
- #define HAS_E3_STEP (PIN_EXISTS(E3_STEP))
- #define HAS_E3_MICROSTEPS (PIN_EXISTS(E3_MS1))
- #define HAS_SOLENOID_3 (PIN_EXISTS(SOL3))
-
- #define HAS_E4_ENABLE (PIN_EXISTS(E4_ENABLE))
- #define HAS_E4_DIR (PIN_EXISTS(E4_DIR))
- #define HAS_E4_STEP (PIN_EXISTS(E4_STEP))
- #define HAS_E4_MICROSTEPS (PIN_EXISTS(E4_MS1))
- #define HAS_SOLENOID_4 (PIN_EXISTS(SOL4))
-
- // Endstops and bed probe
- #define HAS_X_MIN (PIN_EXISTS(X_MIN) && !IS_Z2_OR_PROBE(X,MIN))
- #define HAS_X_MAX (PIN_EXISTS(X_MAX) && !IS_Z2_OR_PROBE(X,MAX))
- #define HAS_Y_MIN (PIN_EXISTS(Y_MIN) && !IS_Z2_OR_PROBE(Y,MIN))
- #define HAS_Y_MAX (PIN_EXISTS(Y_MAX) && !IS_Z2_OR_PROBE(Y,MAX))
- #define HAS_Z_MIN (PIN_EXISTS(Z_MIN) && !IS_Z2_OR_PROBE(Z,MIN))
- #define HAS_Z_MAX (PIN_EXISTS(Z_MAX) && !IS_Z2_OR_PROBE(Z,MAX))
- #define HAS_Z2_MIN (PIN_EXISTS(Z2_MIN))
- #define HAS_Z2_MAX (PIN_EXISTS(Z2_MAX))
- #define HAS_Z_MIN_PROBE_PIN (PIN_EXISTS(Z_MIN_PROBE))
-
- // Thermistors
- #define HAS_TEMP_0 (PIN_EXISTS(TEMP_0) && TEMP_SENSOR_0 != 0 && TEMP_SENSOR_0 > -2)
- #define HAS_TEMP_1 (PIN_EXISTS(TEMP_1) && TEMP_SENSOR_1 != 0 && TEMP_SENSOR_1 > -2)
- #define HAS_TEMP_2 (PIN_EXISTS(TEMP_2) && TEMP_SENSOR_2 != 0 && TEMP_SENSOR_2 > -2)
- #define HAS_TEMP_3 (PIN_EXISTS(TEMP_3) && TEMP_SENSOR_3 != 0 && TEMP_SENSOR_3 > -2)
- #define HAS_TEMP_4 (PIN_EXISTS(TEMP_4) && TEMP_SENSOR_4 != 0 && TEMP_SENSOR_4 > -2)
- #define HAS_TEMP_HOTEND (HAS_TEMP_0 || ENABLED(HEATER_0_USES_MAX6675))
- #define HAS_TEMP_BED (PIN_EXISTS(TEMP_BED) && TEMP_SENSOR_BED != 0 && TEMP_SENSOR_BED > -2)
-
- // Heaters
- #define HAS_HEATER_0 (PIN_EXISTS(HEATER_0))
- #define HAS_HEATER_1 (PIN_EXISTS(HEATER_1))
- #define HAS_HEATER_2 (PIN_EXISTS(HEATER_2))
- #define HAS_HEATER_3 (PIN_EXISTS(HEATER_3))
- #define HAS_HEATER_4 (PIN_EXISTS(HEATER_4))
- #define HAS_HEATER_BED (PIN_EXISTS(HEATER_BED))
-
- // Thermal protection
- #define HAS_THERMALLY_PROTECTED_BED (ENABLED(THERMAL_PROTECTION_BED) && HAS_TEMP_BED && HAS_HEATER_BED)
- #define WATCH_HOTENDS (ENABLED(THERMAL_PROTECTION_HOTENDS) && WATCH_TEMP_PERIOD > 0)
- #define WATCH_THE_BED (HAS_THERMALLY_PROTECTED_BED && WATCH_BED_TEMP_PERIOD > 0)
-
- // Auto fans
- #define HAS_AUTO_FAN_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))
- #define HAS_AUTO_FAN_4 (HOTENDS > 4 && PIN_EXISTS(E4_AUTO_FAN))
- #define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3)
- #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)
-
- // Other fans
- #define HAS_FAN0 (PIN_EXISTS(FAN))
- #define HAS_FAN1 (PIN_EXISTS(FAN1) && CONTROLLER_FAN_PIN != FAN1_PIN && E0_AUTO_FAN_PIN != FAN1_PIN && E1_AUTO_FAN_PIN != FAN1_PIN && E2_AUTO_FAN_PIN != FAN1_PIN && E3_AUTO_FAN_PIN != FAN1_PIN)
- #define HAS_FAN2 (PIN_EXISTS(FAN2) && CONTROLLER_FAN_PIN != FAN2_PIN && E0_AUTO_FAN_PIN != FAN2_PIN && E1_AUTO_FAN_PIN != FAN2_PIN && E2_AUTO_FAN_PIN != FAN2_PIN && E3_AUTO_FAN_PIN != FAN2_PIN)
- #define HAS_CONTROLLER_FAN (PIN_EXISTS(CONTROLLER_FAN))
-
- // Servos
- #define HAS_SERVOS (defined(NUM_SERVOS) && NUM_SERVOS > 0)
- #define HAS_SERVO_0 (PIN_EXISTS(SERVO0))
- #define HAS_SERVO_1 (PIN_EXISTS(SERVO1))
- #define HAS_SERVO_2 (PIN_EXISTS(SERVO2))
- #define HAS_SERVO_3 (PIN_EXISTS(SERVO3))
-
- // Sensors
- #define HAS_FILAMENT_WIDTH_SENSOR (PIN_EXISTS(FILWIDTH))
- #define HAS_FIL_RUNOUT (PIN_EXISTS(FIL_RUNOUT))
-
- // User Interface
- #define HAS_HOME (PIN_EXISTS(HOME))
- #define HAS_KILL (PIN_EXISTS(KILL))
- #define HAS_SUICIDE (PIN_EXISTS(SUICIDE))
- #define HAS_PHOTOGRAPH (PIN_EXISTS(PHOTOGRAPH))
- #define HAS_BUZZER (PIN_EXISTS(BEEPER) || ENABLED(LCD_USE_I2C_BUZZER))
- #define HAS_CASE_LIGHT (PIN_EXISTS(CASE_LIGHT) && ENABLED(CASE_LIGHT_ENABLE))
-
- // Digital control
- #define HAS_MICROSTEPS (HAS_X_MICROSTEPS || HAS_Y_MICROSTEPS || HAS_Z_MICROSTEPS || HAS_E0_MICROSTEPS || HAS_E1_MICROSTEPS || HAS_E2_MICROSTEPS || HAS_E3_MICROSTEPS || HAS_E4_MICROSTEPS)
- #define HAS_STEPPER_RESET (PIN_EXISTS(STEPPER_RESET))
- #define HAS_DIGIPOTSS (PIN_EXISTS(DIGIPOTSS))
- #define HAS_MOTOR_CURRENT_PWM (PIN_EXISTS(MOTOR_CURRENT_PWM_XY) || PIN_EXISTS(MOTOR_CURRENT_PWM_Z) || PIN_EXISTS(MOTOR_CURRENT_PWM_E))
-
- /**
- * This setting is also used by M109 when trying to calculate
- * a ballpark safe margin to prevent wait-forever situation.
- */
- #ifndef EXTRUDE_MINTEMP
- #define EXTRUDE_MINTEMP 170
- #endif
-
- /**
- * Helper Macros for heaters and extruder fan
- */
- #define WRITE_HEATER_0P(v) WRITE(HEATER_0_PIN, v)
- #if HOTENDS > 1 || ENABLED(HEATERS_PARALLEL)
- #define WRITE_HEATER_1(v) WRITE(HEATER_1_PIN, v)
- #if HOTENDS > 2
- #define WRITE_HEATER_2(v) WRITE(HEATER_2_PIN, v)
- #if HOTENDS > 3
- #define WRITE_HEATER_3(v) WRITE(HEATER_3_PIN, v)
- #if HOTENDS > 4
- #define WRITE_HEATER_4(v) WRITE(HEATER_4_PIN, v)
- #endif // HOTENDS > 4
- #endif // HOTENDS > 3
- #endif // HOTENDS > 2
- #endif // HOTENDS > 1
- #if ENABLED(HEATERS_PARALLEL)
- #define WRITE_HEATER_0(v) { WRITE_HEATER_0P(v); WRITE_HEATER_1(v); }
#else
- #define WRITE_HEATER_0(v) WRITE_HEATER_0P(v)
- #endif
-
- /**
- * Heated bed requires settings
- */
- #if HAS_HEATER_BED
- #ifndef MAX_BED_POWER
- #define MAX_BED_POWER 255
- #endif
- #ifndef HEATER_BED_INVERTING
- #define HEATER_BED_INVERTING false
- #endif
- #define WRITE_HEATER_BED(v) WRITE(HEATER_BED_PIN, (v) ^ HEATER_BED_INVERTING)
- #endif
-
- /**
- * Up to 3 PWM fans
- */
- #if HAS_FAN2
- #define FAN_COUNT 3
- #elif HAS_FAN1
- #define FAN_COUNT 2
- #elif HAS_FAN0
- #define FAN_COUNT 1
- #else
- #define FAN_COUNT 0
- #endif
-
- #if HAS_FAN0
- #define WRITE_FAN(v) WRITE(FAN_PIN, v)
- #define WRITE_FAN0(v) WRITE_FAN(v)
- #endif
- #if HAS_FAN1
- #define WRITE_FAN1(v) WRITE(FAN1_PIN, v)
- #endif
- #if HAS_FAN2
- #define WRITE_FAN2(v) WRITE(FAN2_PIN, v)
- #endif
- #define WRITE_FAN_N(n, v) WRITE_FAN##n(v)
-
- /**
- * Part Cooling fan multipliexer
- */
- #define HAS_FANMUX PIN_EXISTS(FANMUX0)
-
- /**
- * Servos and probes
- */
-
- #if HAS_SERVOS
- #ifndef Z_ENDSTOP_SERVO_NR
- #define Z_ENDSTOP_SERVO_NR -1
- #endif
- #endif
-
- #define PROBE_PIN_CONFIGURED (HAS_Z_MIN_PROBE_PIN || (HAS_Z_MIN && ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)))
- #define HAS_BED_PROBE (PROBE_SELECTED && PROBE_PIN_CONFIGURED && DISABLED(PROBE_MANUALLY))
-
- #if ENABLED(Z_PROBE_ALLEN_KEY)
- #define PROBE_IS_TRIGGERED_WHEN_STOWED_TEST
- #endif
-
- /**
- * Bed Probe dependencies
- */
- #if HAS_BED_PROBE
- #if ENABLED(ENDSTOPPULLUPS) && HAS_Z_MIN_PROBE_PIN
- #define ENDSTOPPULLUP_ZMIN_PROBE
- #endif
- #ifndef Z_PROBE_OFFSET_RANGE_MIN
- #define Z_PROBE_OFFSET_RANGE_MIN -20
- #endif
- #ifndef Z_PROBE_OFFSET_RANGE_MAX
- #define Z_PROBE_OFFSET_RANGE_MAX 20
- #endif
- #ifndef XY_PROBE_SPEED
- #ifdef HOMING_FEEDRATE_XY
- #define XY_PROBE_SPEED HOMING_FEEDRATE_XY
- #else
- #define XY_PROBE_SPEED 4000
- #endif
- #endif
- #if Z_CLEARANCE_BETWEEN_PROBES > Z_CLEARANCE_DEPLOY_PROBE
- #define _Z_CLEARANCE_DEPLOY_PROBE Z_CLEARANCE_BETWEEN_PROBES
+ #if Z2_USE_ENDSTOP == _XMIN_
+ #define Z2_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
+ #define Z2_MIN_PIN X_MIN_PIN
+ #elif Z2_USE_ENDSTOP == _XMAX_
+ #define Z2_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING
+ #define Z2_MIN_PIN X_MAX_PIN
+ #elif Z2_USE_ENDSTOP == _YMIN_
+ #define Z2_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING
+ #define Z2_MIN_PIN Y_MIN_PIN
+ #elif Z2_USE_ENDSTOP == _YMAX_
+ #define Z2_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING
+ #define Z2_MIN_PIN Y_MAX_PIN
+ #elif Z2_USE_ENDSTOP == _ZMIN_
+ #define Z2_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING
+ #define Z2_MIN_PIN Z_MIN_PIN
+ #elif Z2_USE_ENDSTOP == _ZMAX_
+ #define Z2_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING
+ #define Z2_MIN_PIN Z_MAX_PIN
#else
- #define _Z_CLEARANCE_DEPLOY_PROBE Z_CLEARANCE_DEPLOY_PROBE
+ #define Z2_MIN_ENDSTOP_INVERTING false
#endif
+ #endif
+#endif
+
+// Is an endstop plug used for the Z2 endstop or the bed probe?
+#define IS_Z2_OR_PROBE(A,M) ( \
+ (ENABLED(Z_DUAL_ENDSTOPS) && Z2_USE_ENDSTOP == _##A##M##_) \
+ || (ENABLED(Z_MIN_PROBE_ENDSTOP) && Z_MIN_PROBE_PIN == A##_##M##_PIN ) )
+
+/**
+ * Set ENDSTOPPULLUPS for active endstop switches
+ */
+#if ENABLED(ENDSTOPPULLUPS)
+ #if ENABLED(USE_XMAX_PLUG)
+ #define ENDSTOPPULLUP_XMAX
+ #endif
+ #if ENABLED(USE_YMAX_PLUG)
+ #define ENDSTOPPULLUP_YMAX
+ #endif
+ #if ENABLED(USE_ZMAX_PLUG)
+ #define ENDSTOPPULLUP_ZMAX
+ #endif
+ #if ENABLED(USE_XMIN_PLUG)
+ #define ENDSTOPPULLUP_XMIN
+ #endif
+ #if ENABLED(USE_YMIN_PLUG)
+ #define ENDSTOPPULLUP_YMIN
+ #endif
+ #if ENABLED(USE_ZMIN_PLUG)
+ #define ENDSTOPPULLUP_ZMIN
+ #endif
+#endif
+
+/**
+ * Shorthand for pin tests, used wherever needed
+ */
+
+// Steppers
+#define HAS_X_ENABLE (PIN_EXISTS(X_ENABLE))
+#define HAS_X_DIR (PIN_EXISTS(X_DIR))
+#define HAS_X_STEP (PIN_EXISTS(X_STEP))
+#define HAS_X_MICROSTEPS (PIN_EXISTS(X_MS1))
+
+#define HAS_X2_ENABLE (PIN_EXISTS(X2_ENABLE))
+#define HAS_X2_DIR (PIN_EXISTS(X2_DIR))
+#define HAS_X2_STEP (PIN_EXISTS(X2_STEP))
+#define HAS_Y_MICROSTEPS (PIN_EXISTS(Y_MS1))
+
+#define HAS_Y_ENABLE (PIN_EXISTS(Y_ENABLE))
+#define HAS_Y_DIR (PIN_EXISTS(Y_DIR))
+#define HAS_Y_STEP (PIN_EXISTS(Y_STEP))
+#define HAS_Z_MICROSTEPS (PIN_EXISTS(Z_MS1))
+
+#define HAS_Y2_ENABLE (PIN_EXISTS(Y2_ENABLE))
+#define HAS_Y2_DIR (PIN_EXISTS(Y2_DIR))
+#define HAS_Y2_STEP (PIN_EXISTS(Y2_STEP))
+
+#define HAS_Z_ENABLE (PIN_EXISTS(Z_ENABLE))
+#define HAS_Z_DIR (PIN_EXISTS(Z_DIR))
+#define HAS_Z_STEP (PIN_EXISTS(Z_STEP))
+
+#define HAS_Z2_ENABLE (PIN_EXISTS(Z2_ENABLE))
+#define HAS_Z2_DIR (PIN_EXISTS(Z2_DIR))
+#define HAS_Z2_STEP (PIN_EXISTS(Z2_STEP))
+
+// Extruder steppers and solenoids
+#define HAS_E0_ENABLE (PIN_EXISTS(E0_ENABLE))
+#define HAS_E0_DIR (PIN_EXISTS(E0_DIR))
+#define HAS_E0_STEP (PIN_EXISTS(E0_STEP))
+#define HAS_E0_MICROSTEPS (PIN_EXISTS(E0_MS1))
+#define HAS_SOLENOID_0 (PIN_EXISTS(SOL0))
+
+#define HAS_E1_ENABLE (PIN_EXISTS(E1_ENABLE))
+#define HAS_E1_DIR (PIN_EXISTS(E1_DIR))
+#define HAS_E1_STEP (PIN_EXISTS(E1_STEP))
+#define HAS_E1_MICROSTEPS (PIN_EXISTS(E1_MS1))
+#define HAS_SOLENOID_1 (PIN_EXISTS(SOL1))
+
+#define HAS_E2_ENABLE (PIN_EXISTS(E2_ENABLE))
+#define HAS_E2_DIR (PIN_EXISTS(E2_DIR))
+#define HAS_E2_STEP (PIN_EXISTS(E2_STEP))
+#define HAS_E2_MICROSTEPS (PIN_EXISTS(E2_MS1))
+#define HAS_SOLENOID_2 (PIN_EXISTS(SOL2))
+
+#define HAS_E3_ENABLE (PIN_EXISTS(E3_ENABLE))
+#define HAS_E3_DIR (PIN_EXISTS(E3_DIR))
+#define HAS_E3_STEP (PIN_EXISTS(E3_STEP))
+#define HAS_E3_MICROSTEPS (PIN_EXISTS(E3_MS1))
+#define HAS_SOLENOID_3 (PIN_EXISTS(SOL3))
+
+#define HAS_E4_ENABLE (PIN_EXISTS(E4_ENABLE))
+#define HAS_E4_DIR (PIN_EXISTS(E4_DIR))
+#define HAS_E4_STEP (PIN_EXISTS(E4_STEP))
+#define HAS_E4_MICROSTEPS (PIN_EXISTS(E4_MS1))
+#define HAS_SOLENOID_4 (PIN_EXISTS(SOL4))
+
+// Endstops and bed probe
+#define HAS_X_MIN (PIN_EXISTS(X_MIN) && !IS_Z2_OR_PROBE(X,MIN))
+#define HAS_X_MAX (PIN_EXISTS(X_MAX) && !IS_Z2_OR_PROBE(X,MAX))
+#define HAS_Y_MIN (PIN_EXISTS(Y_MIN) && !IS_Z2_OR_PROBE(Y,MIN))
+#define HAS_Y_MAX (PIN_EXISTS(Y_MAX) && !IS_Z2_OR_PROBE(Y,MAX))
+#define HAS_Z_MIN (PIN_EXISTS(Z_MIN) && !IS_Z2_OR_PROBE(Z,MIN))
+#define HAS_Z_MAX (PIN_EXISTS(Z_MAX) && !IS_Z2_OR_PROBE(Z,MAX))
+#define HAS_Z2_MIN (PIN_EXISTS(Z2_MIN))
+#define HAS_Z2_MAX (PIN_EXISTS(Z2_MAX))
+#define HAS_Z_MIN_PROBE_PIN (PIN_EXISTS(Z_MIN_PROBE))
+
+// Thermistors
+#define HAS_TEMP_0 (PIN_EXISTS(TEMP_0) && TEMP_SENSOR_0 != 0 && TEMP_SENSOR_0 > -2)
+#define HAS_TEMP_1 (PIN_EXISTS(TEMP_1) && TEMP_SENSOR_1 != 0 && TEMP_SENSOR_1 > -2)
+#define HAS_TEMP_2 (PIN_EXISTS(TEMP_2) && TEMP_SENSOR_2 != 0 && TEMP_SENSOR_2 > -2)
+#define HAS_TEMP_3 (PIN_EXISTS(TEMP_3) && TEMP_SENSOR_3 != 0 && TEMP_SENSOR_3 > -2)
+#define HAS_TEMP_4 (PIN_EXISTS(TEMP_4) && TEMP_SENSOR_4 != 0 && TEMP_SENSOR_4 > -2)
+#define HAS_TEMP_HOTEND (HAS_TEMP_0 || ENABLED(HEATER_0_USES_MAX6675))
+#define HAS_TEMP_BED (PIN_EXISTS(TEMP_BED) && TEMP_SENSOR_BED != 0 && TEMP_SENSOR_BED > -2)
+
+// Heaters
+#define HAS_HEATER_0 (PIN_EXISTS(HEATER_0))
+#define HAS_HEATER_1 (PIN_EXISTS(HEATER_1))
+#define HAS_HEATER_2 (PIN_EXISTS(HEATER_2))
+#define HAS_HEATER_3 (PIN_EXISTS(HEATER_3))
+#define HAS_HEATER_4 (PIN_EXISTS(HEATER_4))
+#define HAS_HEATER_BED (PIN_EXISTS(HEATER_BED))
+
+// Thermal protection
+#define HAS_THERMALLY_PROTECTED_BED (ENABLED(THERMAL_PROTECTION_BED) && HAS_TEMP_BED && HAS_HEATER_BED)
+#define WATCH_HOTENDS (ENABLED(THERMAL_PROTECTION_HOTENDS) && WATCH_TEMP_PERIOD > 0)
+#define WATCH_THE_BED (HAS_THERMALLY_PROTECTED_BED && WATCH_BED_TEMP_PERIOD > 0)
+
+// Auto fans
+#define HAS_AUTO_FAN_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))
+#define HAS_AUTO_FAN_4 (HOTENDS > 4 && PIN_EXISTS(E4_AUTO_FAN))
+#define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3)
+#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)
+
+// Other fans
+#define HAS_FAN0 (PIN_EXISTS(FAN))
+#define HAS_FAN1 (PIN_EXISTS(FAN1) && CONTROLLER_FAN_PIN != FAN1_PIN && E0_AUTO_FAN_PIN != FAN1_PIN && E1_AUTO_FAN_PIN != FAN1_PIN && E2_AUTO_FAN_PIN != FAN1_PIN && E3_AUTO_FAN_PIN != FAN1_PIN)
+#define HAS_FAN2 (PIN_EXISTS(FAN2) && CONTROLLER_FAN_PIN != FAN2_PIN && E0_AUTO_FAN_PIN != FAN2_PIN && E1_AUTO_FAN_PIN != FAN2_PIN && E2_AUTO_FAN_PIN != FAN2_PIN && E3_AUTO_FAN_PIN != FAN2_PIN)
+#define HAS_CONTROLLER_FAN (PIN_EXISTS(CONTROLLER_FAN))
+
+// Servos
+#define HAS_SERVOS (defined(NUM_SERVOS) && NUM_SERVOS > 0)
+#define HAS_SERVO_0 (PIN_EXISTS(SERVO0))
+#define HAS_SERVO_1 (PIN_EXISTS(SERVO1))
+#define HAS_SERVO_2 (PIN_EXISTS(SERVO2))
+#define HAS_SERVO_3 (PIN_EXISTS(SERVO3))
+
+// Sensors
+#define HAS_FILAMENT_WIDTH_SENSOR (PIN_EXISTS(FILWIDTH))
+#define HAS_FIL_RUNOUT (PIN_EXISTS(FIL_RUNOUT))
+
+// User Interface
+#define HAS_HOME (PIN_EXISTS(HOME))
+#define HAS_KILL (PIN_EXISTS(KILL))
+#define HAS_SUICIDE (PIN_EXISTS(SUICIDE))
+#define HAS_PHOTOGRAPH (PIN_EXISTS(PHOTOGRAPH))
+#define HAS_BUZZER (PIN_EXISTS(BEEPER) || ENABLED(LCD_USE_I2C_BUZZER))
+#define HAS_CASE_LIGHT (PIN_EXISTS(CASE_LIGHT) && ENABLED(CASE_LIGHT_ENABLE))
+
+// Digital control
+#define HAS_MICROSTEPS (HAS_X_MICROSTEPS || HAS_Y_MICROSTEPS || HAS_Z_MICROSTEPS || HAS_E0_MICROSTEPS || HAS_E1_MICROSTEPS || HAS_E2_MICROSTEPS || HAS_E3_MICROSTEPS || HAS_E4_MICROSTEPS)
+#define HAS_STEPPER_RESET (PIN_EXISTS(STEPPER_RESET))
+#define HAS_DIGIPOTSS (PIN_EXISTS(DIGIPOTSS))
+#define HAS_MOTOR_CURRENT_PWM (PIN_EXISTS(MOTOR_CURRENT_PWM_XY) || PIN_EXISTS(MOTOR_CURRENT_PWM_Z) || PIN_EXISTS(MOTOR_CURRENT_PWM_E))
+
+/**
+ * This setting is also used by M109 when trying to calculate
+ * a ballpark safe margin to prevent wait-forever situation.
+ */
+#ifndef EXTRUDE_MINTEMP
+ #define EXTRUDE_MINTEMP 170
+#endif
+
+/**
+ * Helper Macros for heaters and extruder fan
+ */
+#define WRITE_HEATER_0P(v) WRITE(HEATER_0_PIN, v)
+#if HOTENDS > 1 || ENABLED(HEATERS_PARALLEL)
+ #define WRITE_HEATER_1(v) WRITE(HEATER_1_PIN, v)
+ #if HOTENDS > 2
+ #define WRITE_HEATER_2(v) WRITE(HEATER_2_PIN, v)
+ #if HOTENDS > 3
+ #define WRITE_HEATER_3(v) WRITE(HEATER_3_PIN, v)
+ #if HOTENDS > 4
+ #define WRITE_HEATER_4(v) WRITE(HEATER_4_PIN, v)
+ #endif // HOTENDS > 4
+ #endif // HOTENDS > 3
+ #endif // HOTENDS > 2
+#endif // HOTENDS > 1
+#if ENABLED(HEATERS_PARALLEL)
+ #define WRITE_HEATER_0(v) { WRITE_HEATER_0P(v); WRITE_HEATER_1(v); }
+#else
+ #define WRITE_HEATER_0(v) WRITE_HEATER_0P(v)
+#endif
+
+/**
+ * Heated bed requires settings
+ */
+#if HAS_HEATER_BED
+ #ifndef MAX_BED_POWER
+ #define MAX_BED_POWER 255
+ #endif
+ #ifndef HEATER_BED_INVERTING
+ #define HEATER_BED_INVERTING false
+ #endif
+ #define WRITE_HEATER_BED(v) WRITE(HEATER_BED_PIN, (v) ^ HEATER_BED_INVERTING)
+#endif
+
+/**
+ * Up to 3 PWM fans
+ */
+#if HAS_FAN2
+ #define FAN_COUNT 3
+#elif HAS_FAN1
+ #define FAN_COUNT 2
+#elif HAS_FAN0
+ #define FAN_COUNT 1
+#else
+ #define FAN_COUNT 0
+#endif
+
+#if HAS_FAN0
+ #define WRITE_FAN(v) WRITE(FAN_PIN, v)
+ #define WRITE_FAN0(v) WRITE_FAN(v)
+#endif
+#if HAS_FAN1
+ #define WRITE_FAN1(v) WRITE(FAN1_PIN, v)
+#endif
+#if HAS_FAN2
+ #define WRITE_FAN2(v) WRITE(FAN2_PIN, v)
+#endif
+#define WRITE_FAN_N(n, v) WRITE_FAN##n(v)
+
+/**
+ * Part Cooling fan multipliexer
+ */
+#define HAS_FANMUX PIN_EXISTS(FANMUX0)
+
+/**
+ * Servos and probes
+ */
+
+#if HAS_SERVOS
+ #ifndef Z_ENDSTOP_SERVO_NR
+ #define Z_ENDSTOP_SERVO_NR -1
+ #endif
+#endif
+
+#define PROBE_PIN_CONFIGURED (HAS_Z_MIN_PROBE_PIN || (HAS_Z_MIN && ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)))
+#define HAS_BED_PROBE (PROBE_SELECTED && PROBE_PIN_CONFIGURED && DISABLED(PROBE_MANUALLY))
+
+#if ENABLED(Z_PROBE_ALLEN_KEY)
+ #define PROBE_IS_TRIGGERED_WHEN_STOWED_TEST
+#endif
+
+/**
+ * Bed Probe dependencies
+ */
+#if HAS_BED_PROBE
+ #if ENABLED(ENDSTOPPULLUPS) && HAS_Z_MIN_PROBE_PIN
+ #define ENDSTOPPULLUP_ZMIN_PROBE
+ #endif
+ #ifndef Z_PROBE_OFFSET_RANGE_MIN
+ #define Z_PROBE_OFFSET_RANGE_MIN -20
+ #endif
+ #ifndef Z_PROBE_OFFSET_RANGE_MAX
+ #define Z_PROBE_OFFSET_RANGE_MAX 20
+ #endif
+ #ifndef XY_PROBE_SPEED
+ #ifdef HOMING_FEEDRATE_XY
+ #define XY_PROBE_SPEED HOMING_FEEDRATE_XY
+ #else
+ #define XY_PROBE_SPEED 4000
+ #endif
+ #endif
+ #if Z_CLEARANCE_BETWEEN_PROBES > Z_CLEARANCE_DEPLOY_PROBE
+ #define _Z_CLEARANCE_DEPLOY_PROBE Z_CLEARANCE_BETWEEN_PROBES
#else
- #undef X_PROBE_OFFSET_FROM_EXTRUDER
- #undef Y_PROBE_OFFSET_FROM_EXTRUDER
- #undef Z_PROBE_OFFSET_FROM_EXTRUDER
- #define X_PROBE_OFFSET_FROM_EXTRUDER 0
- #define Y_PROBE_OFFSET_FROM_EXTRUDER 0
- #define Z_PROBE_OFFSET_FROM_EXTRUDER 0
+ #define _Z_CLEARANCE_DEPLOY_PROBE Z_CLEARANCE_DEPLOY_PROBE
#endif
+#else
+ #undef X_PROBE_OFFSET_FROM_EXTRUDER
+ #undef Y_PROBE_OFFSET_FROM_EXTRUDER
+ #undef Z_PROBE_OFFSET_FROM_EXTRUDER
+ #define X_PROBE_OFFSET_FROM_EXTRUDER 0
+ #define Y_PROBE_OFFSET_FROM_EXTRUDER 0
+ #define Z_PROBE_OFFSET_FROM_EXTRUDER 0
+#endif
- /**
- * Heater & Fan Pausing
- */
- #if FAN_COUNT == 0
- #undef PROBING_FANS_OFF
+/**
+ * Heater & Fan Pausing
+ */
+#if FAN_COUNT == 0
+ #undef PROBING_FANS_OFF
+#endif
+#define QUIET_PROBING (HAS_BED_PROBE && (ENABLED(PROBING_HEATERS_OFF) || ENABLED(PROBING_FANS_OFF) || DELAY_BEFORE_PROBING > 0))
+#define HEATER_IDLE_HANDLER (ENABLED(ADVANCED_PAUSE_FEATURE) || ENABLED(PROBING_HEATERS_OFF))
+
+/**
+ * Only constrain Z on DELTA / SCARA machines
+ */
+#if IS_KINEMATIC
+ #undef MIN_SOFTWARE_ENDSTOP_X
+ #undef MIN_SOFTWARE_ENDSTOP_Y
+ #undef MAX_SOFTWARE_ENDSTOP_X
+ #undef MAX_SOFTWARE_ENDSTOP_Y
+#endif
+
+/**
+ * Delta radius/rod trimmers/angle trimmers
+ */
+#if ENABLED(DELTA)
+ #ifndef DELTA_PROBEABLE_RADIUS
+ #define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#endif
- #define QUIET_PROBING (HAS_BED_PROBE && (ENABLED(PROBING_HEATERS_OFF) || ENABLED(PROBING_FANS_OFF) || DELAY_BEFORE_PROBING > 0))
- #define HEATER_IDLE_HANDLER (ENABLED(ADVANCED_PAUSE_FEATURE) || ENABLED(PROBING_HEATERS_OFF))
+ #ifndef DELTA_CALIBRATION_RADIUS
+ #define DELTA_CALIBRATION_RADIUS DELTA_PRINTABLE_RADIUS - 10
+ #endif
+ #ifndef DELTA_ENDSTOP_ADJ
+ #define DELTA_ENDSTOP_ADJ { 0, 0, 0 }
+ #endif
+ #ifndef DELTA_TOWER_ANGLE_TRIM
+ #define DELTA_TOWER_ANGLE_TRIM {0, 0, 0}
+ #endif
+ #ifndef DELTA_RADIUS_TRIM_TOWER
+ #define DELTA_RADIUS_TRIM_TOWER {0, 0, 0}
+ #endif
+ #ifndef DELTA_DIAGONAL_ROD_TRIM_TOWER
+ #define DELTA_DIAGONAL_ROD_TRIM_TOWER {0, 0, 0}
+ #endif
+#endif
- /**
- * Only constrain Z on DELTA / SCARA machines
- */
+/**
+ * Set granular options based on the specific type of leveling
+ */
+#define UBL_DELTA (ENABLED(AUTO_BED_LEVELING_UBL) && (ENABLED(DELTA) || ENABLED(UBL_GRANULAR_SEGMENTATION_FOR_CARTESIAN)))
+#define ABL_PLANAR (ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_3POINT))
+#define ABL_GRID (ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_BILINEAR))
+#define OLDSCHOOL_ABL (ABL_PLANAR || ABL_GRID)
+#define HAS_ABL (OLDSCHOOL_ABL || ENABLED(AUTO_BED_LEVELING_UBL))
+#define HAS_LEVELING (HAS_ABL || ENABLED(MESH_BED_LEVELING))
+#define HAS_AUTOLEVEL (HAS_ABL && DISABLED(PROBE_MANUALLY))
+#define HAS_MESH (ENABLED(AUTO_BED_LEVELING_BILINEAR) || ENABLED(AUTO_BED_LEVELING_UBL) || ENABLED(MESH_BED_LEVELING))
+#define PLANNER_LEVELING (OLDSCHOOL_ABL || ENABLED(MESH_BED_LEVELING) || UBL_DELTA)
+#define HAS_PROBING_PROCEDURE (HAS_ABL || ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST))
+#if HAS_PROBING_PROCEDURE
+ #define PROBE_BED_WIDTH abs(RIGHT_PROBE_BED_POSITION - (LEFT_PROBE_BED_POSITION))
+ #define PROBE_BED_HEIGHT abs(BACK_PROBE_BED_POSITION - (FRONT_PROBE_BED_POSITION))
+#endif
+
+/**
+ * Bed Probing rectangular bounds
+ * These can be further constrained in code for Delta and SCARA
+ */
+#if ENABLED(DELTA)
+ // Probing points may be verified at compile time within the radius
+ // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
+ // so that may be added to SanityCheck.h in the future.
+ #define MIN_PROBE_X (X_CENTER - (DELTA_PROBEABLE_RADIUS))
+ #define MIN_PROBE_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS))
+ #define MAX_PROBE_X (X_CENTER + DELTA_PROBEABLE_RADIUS)
+ #define MAX_PROBE_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS)
+#elif IS_SCARA
+ #define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
+ #define MIN_PROBE_X (X_CENTER - (SCARA_PRINTABLE_RADIUS))
+ #define MIN_PROBE_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS))
+ #define MAX_PROBE_X (X_CENTER + SCARA_PRINTABLE_RADIUS)
+ #define MAX_PROBE_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS)
+#else
+ // Boundaries for Cartesian probing based on bed limits
+ #define MIN_PROBE_X (max(X_MIN_BED, X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
+ #define MIN_PROBE_Y (max(Y_MIN_BED, Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
+ #define MAX_PROBE_X (min(X_MAX_BED, X_MAX_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
+ #define MAX_PROBE_Y (min(Y_MAX_BED, Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
+#endif
+
+/**
+ * Default mesh area is an area with an inset margin on the print area.
+ */
+#if ENABLED(MESH_BED_LEVELING) || ENABLED(AUTO_BED_LEVELING_UBL)
#if IS_KINEMATIC
- #undef MIN_SOFTWARE_ENDSTOP_X
- #undef MIN_SOFTWARE_ENDSTOP_Y
- #undef MAX_SOFTWARE_ENDSTOP_X
- #undef MAX_SOFTWARE_ENDSTOP_Y
- #endif
-
- /**
- * Delta endstops, radius/rod trimmers, angle trimmers
- */
- #if ENABLED(DELTA)
- #ifndef DELTA_CALIBRATION_RADIUS
- #define DELTA_CALIBRATION_RADIUS DELTA_PRINTABLE_RADIUS - 10
- #endif
- #ifndef DELTA_ENDSTOP_ADJ
- #define DELTA_ENDSTOP_ADJ { 0, 0, 0 }
- #endif
- #ifndef DELTA_TOWER_ANGLE_TRIM
- #define DELTA_TOWER_ANGLE_TRIM {0, 0, 0}
- #endif
- #ifndef DELTA_RADIUS_TRIM_TOWER
- #define DELTA_RADIUS_TRIM_TOWER {0, 0, 0}
- #endif
- #ifndef DELTA_DIAGONAL_ROD_TRIM_TOWER
- #define DELTA_DIAGONAL_ROD_TRIM_TOWER {0, 0, 0}
- #endif
- #endif
-
- /**
- * Set granular options based on the specific type of leveling
- */
-
- #define UBL_DELTA (ENABLED(AUTO_BED_LEVELING_UBL) && (ENABLED(DELTA) || ENABLED(UBL_GRANULAR_SEGMENTATION_FOR_CARTESIAN)))
- #define ABL_PLANAR (ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_3POINT))
- #define ABL_GRID (ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_BILINEAR))
- #define OLDSCHOOL_ABL (ABL_PLANAR || ABL_GRID)
- #define HAS_ABL (OLDSCHOOL_ABL || ENABLED(AUTO_BED_LEVELING_UBL))
- #define HAS_LEVELING (HAS_ABL || ENABLED(MESH_BED_LEVELING))
- #define HAS_AUTOLEVEL (HAS_ABL && DISABLED(PROBE_MANUALLY))
- #define HAS_MESH (ENABLED(AUTO_BED_LEVELING_BILINEAR) || ENABLED(AUTO_BED_LEVELING_UBL) || ENABLED(MESH_BED_LEVELING))
- #define PLANNER_LEVELING (OLDSCHOOL_ABL || ENABLED(MESH_BED_LEVELING) || UBL_DELTA)
- #define HAS_PROBING_PROCEDURE (HAS_ABL || ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST))
- #if HAS_PROBING_PROCEDURE
- #define PROBE_BED_WIDTH abs(RIGHT_PROBE_BED_POSITION - (LEFT_PROBE_BED_POSITION))
- #define PROBE_BED_HEIGHT abs(BACK_PROBE_BED_POSITION - (FRONT_PROBE_BED_POSITION))
- #endif
-
- /**
- * Buzzer/Speaker
- */
- #if ENABLED(LCD_USE_I2C_BUZZER)
- #ifndef LCD_FEEDBACK_FREQUENCY_HZ
- #define LCD_FEEDBACK_FREQUENCY_HZ 1000
- #endif
- #ifndef LCD_FEEDBACK_FREQUENCY_DURATION_MS
- #define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
- #endif
- #else
- #ifndef LCD_FEEDBACK_FREQUENCY_HZ
- #define LCD_FEEDBACK_FREQUENCY_HZ 5000
- #endif
- #ifndef LCD_FEEDBACK_FREQUENCY_DURATION_MS
- #define LCD_FEEDBACK_FREQUENCY_DURATION_MS 2
- #endif
- #endif
-
- /**
- * VIKI2, miniVIKI, and AZSMZ_12864 require DOGLCD_SCK and DOGLCD_MOSI to be defined.
- */
- #if ENABLED(VIKI2) || ENABLED(miniVIKI) || ENABLED(AZSMZ_12864)
- #ifndef DOGLCD_SCK
- #define DOGLCD_SCK SCK_PIN
- #endif
- #ifndef DOGLCD_MOSI
- #define DOGLCD_MOSI MOSI_PIN
- #endif
- #endif
-
- /**
- * Z_HOMING_HEIGHT / Z_CLEARANCE_BETWEEN_PROBES
- */
- #ifndef Z_HOMING_HEIGHT
- #ifndef Z_CLEARANCE_BETWEEN_PROBES
- #define Z_HOMING_HEIGHT 0
- #else
- #define Z_HOMING_HEIGHT Z_CLEARANCE_BETWEEN_PROBES
- #endif
- #endif
- #ifndef Z_CLEARANCE_BETWEEN_PROBES
- #define Z_CLEARANCE_BETWEEN_PROBES Z_HOMING_HEIGHT
- #endif
- #if Z_CLEARANCE_BETWEEN_PROBES > Z_HOMING_HEIGHT
- #define MANUAL_PROBE_HEIGHT Z_CLEARANCE_BETWEEN_PROBES
- #else
- #define MANUAL_PROBE_HEIGHT Z_HOMING_HEIGHT
- #endif
-
- /**
- * Bed Probing rectangular bounds
- * These can be further constrained in code for Delta and SCARA
- */
- #if ENABLED(DELTA)
- #ifndef DELTA_PROBEABLE_RADIUS
- #define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
- #endif
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
- #define MIN_PROBE_X (X_CENTER - (DELTA_PROBEABLE_RADIUS))
- #define MIN_PROBE_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS))
- #define MAX_PROBE_X (X_CENTER + DELTA_PROBEABLE_RADIUS)
- #define MAX_PROBE_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS)
- #elif IS_SCARA
- #define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
- #define MIN_PROBE_X (X_CENTER - (SCARA_PRINTABLE_RADIUS))
- #define MIN_PROBE_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS))
- #define MAX_PROBE_X (X_CENTER + SCARA_PRINTABLE_RADIUS)
- #define MAX_PROBE_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS)
+ #define _MESH_MIN_X (MIN_PROBE_X + MESH_INSET)
+ #define _MESH_MIN_Y (MIN_PROBE_Y + MESH_INSET)
+ #define _MESH_MAX_X (MAX_PROBE_X - (MESH_INSET))
+ #define _MESH_MAX_Y (MAX_PROBE_Y - (MESH_INSET))
#else
- // Boundaries for Cartesian probing based on bed limits
- #define MIN_PROBE_X (max(X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER, X_MIN_BED))
- #define MIN_PROBE_Y (max(Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER, Y_MIN_BED))
- #define MAX_PROBE_X (min(X_MAX_POS + X_PROBE_OFFSET_FROM_EXTRUDER, X_MAX_BED))
- #define MAX_PROBE_Y (min(Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER, Y_MAX_BED))
+ // Boundaries for Cartesian probing based on set limits
+ #define _MESH_MIN_X (max(X_MIN_BED + MESH_INSET, X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
+ #define _MESH_MIN_Y (max(Y_MIN_BED + MESH_INSET, Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
+ #define _MESH_MAX_X (min(X_MAX_BED - (MESH_INSET), X_MAX_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
+ #define _MESH_MAX_Y (min(Y_MAX_BED - (MESH_INSET), Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
#endif
-
- // Stepper pulse duration, in cycles
- #define STEP_PULSE_CYCLES ((MINIMUM_STEPPER_PULSE) * CYCLES_PER_MICROSECOND)
- #ifdef CPU_32_BIT
- // Add additional delay for between direction signal and pulse signal of stepper
- #ifndef STEPPER_DIRECTION_DELAY
- #define STEPPER_DIRECTION_DELAY 0 // time in microseconds
- #endif
- #endif
-
- #ifndef __SAM3X8E__ //todo: hal: broken hal encapsulation
- #undef UI_VOLTAGE_LEVEL
- #undef RADDS_DISPLAY
- #undef MOTOR_CURRENT
- #endif
-
- #if ENABLED(SDCARD_SORT_ALPHA)
- #define HAS_FOLDER_SORTING (FOLDER_SORTING || ENABLED(SDSORT_GCODE))
- #endif
-
- // Updated G92 behavior shifts the workspace
- #define HAS_POSITION_SHIFT DISABLED(NO_WORKSPACE_OFFSETS)
- // The home offset also shifts the coordinate space
- #define HAS_HOME_OFFSET (DISABLED(NO_WORKSPACE_OFFSETS) || ENABLED(DELTA))
- // Either offset yields extra calculations on all moves
- #define HAS_WORKSPACE_OFFSET (HAS_POSITION_SHIFT || HAS_HOME_OFFSET)
- // M206 doesn't apply to DELTA
- #define HAS_M206_COMMAND (HAS_HOME_OFFSET && DISABLED(DELTA))
-
- // LCD timeout to status screen default is 15s
- #ifndef LCD_TIMEOUT_TO_STATUS
- #define LCD_TIMEOUT_TO_STATUS 15000
- #endif
-
/**
- * DELTA_SEGMENT_MIN_LENGTH for UBL_DELTA
+ * These may be overridden in Configuration if a smaller area is wanted
*/
- #if UBL_DELTA
- #ifndef DELTA_SEGMENT_MIN_LENGTH
- #if IS_SCARA
- #define DELTA_SEGMENT_MIN_LENGTH 0.25 // SCARA minimum segment size is 0.25mm
- #elif ENABLED(DELTA)
- #define DELTA_SEGMENT_MIN_LENGTH 0.10 // mm (still subject to DELTA_SEGMENTS_PER_SECOND)
- #else // CARTESIAN
- #define DELTA_SEGMENT_MIN_LENGTH 1.00 // mm (similar to G2/G3 arc segmentation)
- #endif
+ #if ENABLED(MESH_BED_LEVELING) || ENABLED(AUTO_BED_LEVELING_UBL)
+ #ifndef MESH_MIN_X
+ #define MESH_MIN_X _MESH_MIN_X
+ #endif
+ #ifndef MESH_MIN_Y
+ #define MESH_MIN_Y _MESH_MIN_Y
+ #endif
+ #ifndef MESH_MAX_X
+ #define MESH_MAX_X _MESH_MAX_X
+ #endif
+ #ifndef MESH_MAX_Y
+ #define MESH_MAX_Y _MESH_MAX_Y
#endif
#endif
+#endif // MESH_BED_LEVELING || AUTO_BED_LEVELING_UBL
- // Shorthand
- #define GRID_MAX_POINTS ((GRID_MAX_POINTS_X) * (GRID_MAX_POINTS_Y))
-
- // Add commands that need sub-codes to this list
- #define USE_GCODE_SUBCODES ENABLED(G38_PROBE_TARGET)
-
- // MESH_BED_LEVELING overrides PROBE_MANUALLY
- #if ENABLED(MESH_BED_LEVELING)
- #undef PROBE_MANUALLY
+/**
+ * Buzzer/Speaker
+ */
+#if ENABLED(LCD_USE_I2C_BUZZER)
+ #ifndef LCD_FEEDBACK_FREQUENCY_HZ
+ #define LCD_FEEDBACK_FREQUENCY_HZ 1000
#endif
+ #ifndef LCD_FEEDBACK_FREQUENCY_DURATION_MS
+ #define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
+ #endif
+#else
+ #ifndef LCD_FEEDBACK_FREQUENCY_HZ
+ #define LCD_FEEDBACK_FREQUENCY_HZ 5000
+ #endif
+ #ifndef LCD_FEEDBACK_FREQUENCY_DURATION_MS
+ #define LCD_FEEDBACK_FREQUENCY_DURATION_MS 2
+ #endif
+#endif
- // Parking Extruder
- #if ENABLED(PARKING_EXTRUDER)
- #ifndef PARKING_EXTRUDER_GRAB_DISTANCE
- #define PARKING_EXTRUDER_GRAB_DISTANCE 0
- #endif
- #ifndef PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE
- #define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE HIGH
+/**
+ * VIKI2, miniVIKI, and AZSMZ_12864 require DOGLCD_SCK and DOGLCD_MOSI to be defined.
+ */
+#if ENABLED(VIKI2) || ENABLED(miniVIKI) || ENABLED(AZSMZ_12864)
+ #ifndef DOGLCD_SCK
+ #define DOGLCD_SCK SCK_PIN
+ #endif
+ #ifndef DOGLCD_MOSI
+ #define DOGLCD_MOSI MOSI_PIN
+ #endif
+#endif
+
+/**
+ * Z_HOMING_HEIGHT / Z_CLEARANCE_BETWEEN_PROBES
+ */
+#ifndef Z_HOMING_HEIGHT
+ #ifndef Z_CLEARANCE_BETWEEN_PROBES
+ #define Z_HOMING_HEIGHT 0
+ #else
+ #define Z_HOMING_HEIGHT Z_CLEARANCE_BETWEEN_PROBES
+ #endif
+#endif
+#ifndef Z_CLEARANCE_BETWEEN_PROBES
+ #define Z_CLEARANCE_BETWEEN_PROBES Z_HOMING_HEIGHT
+#endif
+#if Z_CLEARANCE_BETWEEN_PROBES > Z_HOMING_HEIGHT
+ #define MANUAL_PROBE_HEIGHT Z_CLEARANCE_BETWEEN_PROBES
+#else
+ #define MANUAL_PROBE_HEIGHT Z_HOMING_HEIGHT
+#endif
+
+// Stepper pulse duration, in cycles
+#define STEP_PULSE_CYCLES ((MINIMUM_STEPPER_PULSE) * CYCLES_PER_MICROSECOND)
+#ifdef CPU_32_BIT
+ // Add additional delay for between direction signal and pulse signal of stepper
+ #ifndef STEPPER_DIRECTION_DELAY
+ #define STEPPER_DIRECTION_DELAY 0 // time in microseconds
+ #endif
+#endif
+
+#ifndef __SAM3X8E__ //todo: hal: broken hal encapsulation
+ #undef UI_VOLTAGE_LEVEL
+ #undef RADDS_DISPLAY
+ #undef MOTOR_CURRENT
+#endif
+
+#if ENABLED(SDCARD_SORT_ALPHA)
+ #define HAS_FOLDER_SORTING (FOLDER_SORTING || ENABLED(SDSORT_GCODE))
+#endif
+
+// Updated G92 behavior shifts the workspace
+#define HAS_POSITION_SHIFT DISABLED(NO_WORKSPACE_OFFSETS)
+// The home offset also shifts the coordinate space
+#define HAS_HOME_OFFSET (DISABLED(NO_WORKSPACE_OFFSETS) || ENABLED(DELTA))
+// Either offset yields extra calculations on all moves
+#define HAS_WORKSPACE_OFFSET (HAS_POSITION_SHIFT || HAS_HOME_OFFSET)
+// M206 doesn't apply to DELTA
+#define HAS_M206_COMMAND (HAS_HOME_OFFSET && DISABLED(DELTA))
+
+// LCD timeout to status screen default is 15s
+#ifndef LCD_TIMEOUT_TO_STATUS
+ #define LCD_TIMEOUT_TO_STATUS 15000
+#endif
+
+/**
+ * DELTA_SEGMENT_MIN_LENGTH for UBL_DELTA
+ */
+#if UBL_DELTA
+ #ifndef DELTA_SEGMENT_MIN_LENGTH
+ #if IS_SCARA
+ #define DELTA_SEGMENT_MIN_LENGTH 0.25 // SCARA minimum segment size is 0.25mm
+ #elif ENABLED(DELTA)
+ #define DELTA_SEGMENT_MIN_LENGTH 0.10 // mm (still subject to DELTA_SEGMENTS_PER_SECOND)
+ #else // CARTESIAN
+ #define DELTA_SEGMENT_MIN_LENGTH 1.00 // mm (similar to G2/G3 arc segmentation)
#endif
#endif
+#endif
- // Use float instead of double. Needs profiling.
- #if defined(ARDUINO_ARCH_SAM) && ENABLED(DELTA_FAST_SQRT)
- #undef ATAN2
- #undef FABS
- #undef POW
- #undef SQRT
- #undef CEIL
- #undef FLOOR
- #undef LROUND
- #undef FMOD
- #define ATAN2(y, x) atan2f(y, x)
- #define FABS(x) fabsf(x)
- #define POW(x, y) powf(x, y)
- #define SQRT(x) sqrtf(x)
- #define CEIL(x) ceilf(x)
- #define FLOOR(x) floorf(x)
- #define LROUND(x) lroundf(x)
- #define FMOD(x, y) fmodf(x, y)
+// Shorthand
+#define GRID_MAX_POINTS ((GRID_MAX_POINTS_X) * (GRID_MAX_POINTS_Y))
+
+// Add commands that need sub-codes to this list
+#define USE_GCODE_SUBCODES ENABLED(G38_PROBE_TARGET)
+
+// MESH_BED_LEVELING overrides PROBE_MANUALLY
+#if ENABLED(MESH_BED_LEVELING)
+ #undef PROBE_MANUALLY
+#endif
+
+// Parking Extruder
+#if ENABLED(PARKING_EXTRUDER)
+ #ifndef PARKING_EXTRUDER_GRAB_DISTANCE
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 0
#endif
-
- #ifdef TEENSYDUINO
- #undef max
- #define max(a,b) ((a)>(b)?(a):(b))
- #undef min
- #define min(a,b) ((a)<(b)?(a):(b))
-
- #define NOT_A_PIN 0 // For PINS_DEBUGGING
+ #ifndef PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE
+ #define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE HIGH
#endif
+#endif
+
+// Use float instead of double. Needs profiling.
+#if defined(ARDUINO_ARCH_SAM) && ENABLED(DELTA_FAST_SQRT)
+ #undef ATAN2
+ #undef FABS
+ #undef POW
+ #undef SQRT
+ #undef CEIL
+ #undef FLOOR
+ #undef LROUND
+ #undef FMOD
+ #define ATAN2(y, x) atan2f(y, x)
+ #define FABS(x) fabsf(x)
+ #define POW(x, y) powf(x, y)
+ #define SQRT(x) sqrtf(x)
+ #define CEIL(x) ceilf(x)
+ #define FLOOR(x) floorf(x)
+ #define LROUND(x) lroundf(x)
+ #define FMOD(x, y) fmodf(x, y)
+#endif
+
+#ifdef TEENSYDUINO
+ #undef max
+ #define max(a,b) ((a)>(b)?(a):(b))
+ #undef min
+ #define min(a,b) ((a)<(b)?(a):(b))
+
+ #define NOT_A_PIN 0 // For PINS_DEBUGGING
+#endif
+
#endif // CONDITIONALS_POST_H
diff --git a/Marlin/src/inc/MarlinConfig.h b/Marlin/src/inc/MarlinConfig.h
index 1b471051e..5b2d5a5d8 100644
--- a/Marlin/src/inc/MarlinConfig.h
+++ b/Marlin/src/inc/MarlinConfig.h
@@ -26,7 +26,7 @@
#include "../core/boards.h"
#include "../core/macros.h"
#include "Version.h"
-#include "SPI.h"
+#include "../HAL/SPI.h"
#include "../../Configuration.h"
#include "Conditionals_LCD.h"
#include "../../Configuration_adv.h"
diff --git a/Marlin/src/inc/SPI.h b/Marlin/src/inc/SPI.h
deleted file mode 100644
index 3fa0cecce..000000000
--- a/Marlin/src/inc/SPI.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#include
-
-
-#ifndef SPI_FULL_SPEED
-
-/**
- * SPI speed where 0 <= index <= 6
- *
- * Approximate rates :
- *
- * 0 : 8 - 10 MHz
- * 1 : 4 - 5 MHz
- * 2 : 2 - 2.5 MHz
- * 3 : 1 - 1.25 MHz
- * 4 : 500 - 625 kHz
- * 5 : 250 - 312 kHz
- * 6 : 125 - 156 kHz
- *
- * On AVR, actual speed is F_CPU/2^(1 + index).
- * On other platforms, speed should be in range given above where possible.
- */
-
-/** Set SCK to max rate */
-#define SPI_FULL_SPEED 0
-/** Set SCK rate to half max rate. */
-#define SPI_HALF_SPEED 1
-/** Set SCK rate to quarter max rate. */
-#define SPI_QUARTER_SPEED 2
-/** Set SCK rate to 1/8 max rate. */
-#define SPI_EIGHTH_SPEED 3
-/** Set SCK rate to 1/16 of max rate. */
-#define SPI_SIXTEENTH_SPEED 4
-/** Set SCK rate to 1/32 of max rate. */
-#define SPI_SPEED_5 5
-/** Set SCK rate to 1/64 of max rate. */
-#define SPI_SPEED_6 6
-
-// Standard SPI functions
-/** Initialise SPI bus */
-void spiBegin(void);
-/** Configure SPI for specified SPI speed */
-void spiInit(uint8_t spiRate);
-/** Write single byte to SPI */
-void spiSend(uint8_t b);
-/** Read single byte from SPI */
-uint8_t spiRec(void);
-/** Read from SPI into buffer */
-void spiRead(uint8_t* buf, uint16_t nbyte);
-/** Write token and then write from 512 byte buffer to SPI (for SD card) */
-void spiSendBlock(uint8_t token, const uint8_t* buf);
-
-#endif
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index f2e9d2063..b95099fe9 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -26,6 +26,9 @@
* Test configuration values for errors at compile-time.
*/
+#ifndef _SANITYCHECK_H_
+#define _SANITYCHECK_H_
+
/**
* Require gcc 4.7 or newer (first included with Arduino 1.6.8) for C++11 features.
*/
@@ -212,6 +215,10 @@
#error "ADVANCE was removed in Marlin 1.1.6. Please use LIN_ADVANCE."
#elif defined(NEOPIXEL_RGBW_LED)
#error "NEOPIXEL_RGBW_LED is now NEOPIXEL_LED. Please update your configuration."
+#elif defined(UBL_MESH_INSET)
+ #error "UBL_MESH_INSET is now just MESH_INSET. Please update your configuration."
+#elif defined(UBL_MESH_MIN_X) || defined(UBL_MESH_MIN_Y) || defined(UBL_MESH_MAX_X) || defined(UBL_MESH_MAX_Y)
+ #error "UBL_MESH_(MIN|MAX)_[XY] is now just MESH_(MIN|MAX)_[XY]. Please update your configuration."
#endif
/**
@@ -1379,5 +1386,6 @@ static_assert(COUNT(sanity_arr_1) <= XYZE_N, "DEFAULT_AXIS_STEPS_PER_UNIT has to
static_assert(COUNT(sanity_arr_2) <= XYZE_N, "DEFAULT_MAX_FEEDRATE has too many elements.");
static_assert(COUNT(sanity_arr_3) <= XYZE_N, "DEFAULT_MAX_ACCELERATION has too many elements.");
-
#include "../HAL/HAL_SanityCheck.h" // get CPU specific checks
+
+#endif // _SANITYCHECK_H_
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index fa628f421..3731b476f 100644
--- a/Marlin/src/inc/Version.h
+++ b/Marlin/src/inc/Version.h
@@ -20,6 +20,11 @@
*
*/
+#ifndef _VERSION_H_
+#define _VERSION_H_
+
+#include "MarlinConfig.h"
+
/**
* This file is the standard Marlin version identifier file, all fields can be
* overriden by the ones defined on _Version.h by using the Configuration.h
@@ -48,7 +53,7 @@
* here we define this default string as the date where the latest release
* version was tagged.
*/
- #define STRING_DISTRIBUTION_DATE "2017-07-27 12:00"
+ #define STRING_DISTRIBUTION_DATE "2017-10-19 12:00"
/**
* Required minimum Configuration.h and Configuration_adv.h file versions.
@@ -92,3 +97,5 @@
#define WEBSITE_URL "http://marlinfw.org"
#endif // USE_AUTOMATIC_VERSIONING
+
+#endif // _VERSION_H_