diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 1429d098df6266251c360cd25a69fb4cc291ff91..ac450dbf187e047c1a22d79463489403a174480a 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -690,14 +690,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index af44bb6c99433805dcbf2ea716cddeedee080983..94d5538a96c3932ee385a9c4b64d864da8176a33 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/default/Configuration.h b/Marlin/src/config/default/Configuration.h
index 1429d098df6266251c360cd25a69fb4cc291ff91..ac450dbf187e047c1a22d79463489403a174480a 100644
--- a/Marlin/src/config/default/Configuration.h
+++ b/Marlin/src/config/default/Configuration.h
@@ -690,14 +690,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/default/Configuration_adv.h b/Marlin/src/config/default/Configuration_adv.h
index af44bb6c99433805dcbf2ea716cddeedee080983..94d5538a96c3932ee385a9c4b64d864da8176a33 100644
--- a/Marlin/src/config/default/Configuration_adv.h
+++ b/Marlin/src/config/default/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration.h b/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration.h
index b355631b53b7fe80e61a19fd996be7b1ca9f6de2..11e77d38b17c269115e27e9a85aaed286f07e651 100644
--- a/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration.h
+++ b/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration.h
@@ -710,14 +710,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration_adv.h b/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration_adv.h
index aab17d8ff7ced002be16d535bae692779973cfff..6c284af1f66892f446cc74ad6053e136002b2c92 100644
--- a/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration_adv.h
+++ b/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/AliExpress/CL-260/Configuration.h b/Marlin/src/config/examples/AliExpress/CL-260/Configuration.h
index 3884c73c77c91f21001a2e825eee9531983241d9..094421e64ca107374cb20a46e13bd0e9ff32341a 100644
--- a/Marlin/src/config/examples/AliExpress/CL-260/Configuration.h
+++ b/Marlin/src/config/examples/AliExpress/CL-260/Configuration.h
@@ -690,14 +690,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Anet/A6/Configuration.h b/Marlin/src/config/examples/Anet/A6/Configuration.h
index b4e75680c3e39c0e0243dc625e144d11d4891cfe..58b95c98878e432a9f5e1ff48fe5f32dd84f2973 100644
--- a/Marlin/src/config/examples/Anet/A6/Configuration.h
+++ b/Marlin/src/config/examples/Anet/A6/Configuration.h
@@ -769,14 +769,16 @@
#define XY_PROBE_SPEED 8000
//#define XY_PROBE_SPEED 6000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 3)
-// Use double touch for probing
-#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Anet/A6/Configuration_adv.h b/Marlin/src/config/examples/Anet/A6/Configuration_adv.h
index c99ff058da66e164d920c97e524b89fa4040cab5..5242b557d336c9316e737dc1c5e7443f4b7345e0 100644
--- a/Marlin/src/config/examples/Anet/A6/Configuration_adv.h
+++ b/Marlin/src/config/examples/Anet/A6/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/Anet/A8/Configuration.h b/Marlin/src/config/examples/Anet/A8/Configuration.h
index 7cac1a2d3957bef4d16f9173e5aeb667569a5f52..89e1851521d0f4578c8bb9e149221c939ff61a59 100644
--- a/Marlin/src/config/examples/Anet/A8/Configuration.h
+++ b/Marlin/src/config/examples/Anet/A8/Configuration.h
@@ -696,14 +696,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 6000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Anet/A8/Configuration_adv.h b/Marlin/src/config/examples/Anet/A8/Configuration_adv.h
index 0c256cdd5f9a8073ae1e29623271dd0e8008a13d..e7b22c55dea133a565cf82954a64bc9de99a0afb 100644
--- a/Marlin/src/config/examples/Anet/A8/Configuration_adv.h
+++ b/Marlin/src/config/examples/Anet/A8/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/Azteeg/X5GT/Configuration.h b/Marlin/src/config/examples/Azteeg/X5GT/Configuration.h
index bac18e0ef5a5c217ab730c01b3dca94a0ed1292f..c2ec3e53c32e0c36e6654c0052a4df73dad61216 100644
--- a/Marlin/src/config/examples/Azteeg/X5GT/Configuration.h
+++ b/Marlin/src/config/examples/Azteeg/X5GT/Configuration.h
@@ -690,14 +690,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Azteeg/X5GT/Configuration_adv.h b/Marlin/src/config/examples/Azteeg/X5GT/Configuration_adv.h
index b3530082ea43efc17fa6f9b0a84ef624364443f7..5985d9621cc3f818e53dcf0a004f2c6f96626eec 100644
--- a/Marlin/src/config/examples/Azteeg/X5GT/Configuration_adv.h
+++ b/Marlin/src/config/examples/Azteeg/X5GT/Configuration_adv.h
@@ -743,7 +743,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/BQ/Hephestos/Configuration.h b/Marlin/src/config/examples/BQ/Hephestos/Configuration.h
index db0c92a2ca1f0c5108106fcc7938cb518ae6a5d3..8b3d11263c139b2711e91bc44fc3b04ec0d70211 100644
--- a/Marlin/src/config/examples/BQ/Hephestos/Configuration.h
+++ b/Marlin/src/config/examples/BQ/Hephestos/Configuration.h
@@ -681,14 +681,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/BQ/Hephestos/Configuration_adv.h b/Marlin/src/config/examples/BQ/Hephestos/Configuration_adv.h
index 1f75c0d681843e7ba03f6048300d5959a20e8dd2..426b39c6913a0f8851f8c0f047d70e9572c95f9b 100644
--- a/Marlin/src/config/examples/BQ/Hephestos/Configuration_adv.h
+++ b/Marlin/src/config/examples/BQ/Hephestos/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/BQ/Hephestos_2/Configuration.h b/Marlin/src/config/examples/BQ/Hephestos_2/Configuration.h
index 926e654bb9fab7a2225b0835d11163b004094110..f8585d178c4dca77336e2fb2b9502aeaa45cbeea 100644
--- a/Marlin/src/config/examples/BQ/Hephestos_2/Configuration.h
+++ b/Marlin/src/config/examples/BQ/Hephestos_2/Configuration.h
@@ -691,14 +691,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
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 a6a3c87fc9f8c389c15da62ea88996b059fd4d1e..e33f2500203918a452861224d6ec4a2a52cc9cf1 100644
--- a/Marlin/src/config/examples/BQ/Hephestos_2/Configuration_adv.h
+++ b/Marlin/src/config/examples/BQ/Hephestos_2/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/BQ/WITBOX/Configuration.h b/Marlin/src/config/examples/BQ/WITBOX/Configuration.h
index a837edf23807e378154983c119135b60fa74a26b..dc299ee668baad0b96771c1585bf492eaacedab3 100644
--- a/Marlin/src/config/examples/BQ/WITBOX/Configuration.h
+++ b/Marlin/src/config/examples/BQ/WITBOX/Configuration.h
@@ -681,14 +681,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/BQ/WITBOX/Configuration_adv.h b/Marlin/src/config/examples/BQ/WITBOX/Configuration_adv.h
index 1f75c0d681843e7ba03f6048300d5959a20e8dd2..426b39c6913a0f8851f8c0f047d70e9572c95f9b 100644
--- a/Marlin/src/config/examples/BQ/WITBOX/Configuration_adv.h
+++ b/Marlin/src/config/examples/BQ/WITBOX/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/Cartesio/Configuration.h b/Marlin/src/config/examples/Cartesio/Configuration.h
index 9788196ee202ab663d498c42d3d69d6b5533a161..74179a661e1bb0a1ed6d3b8b6a7cf5618ac28f92 100644
--- a/Marlin/src/config/examples/Cartesio/Configuration.h
+++ b/Marlin/src/config/examples/Cartesio/Configuration.h
@@ -689,14 +689,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Cartesio/Configuration_adv.h b/Marlin/src/config/examples/Cartesio/Configuration_adv.h
index 1e061e2beb44ec2032917396ffc17ffdef172616..5a406255e95514dcd7b5485b8eb233336b34c1db 100644
--- a/Marlin/src/config/examples/Cartesio/Configuration_adv.h
+++ b/Marlin/src/config/examples/Cartesio/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/Creality/CR-10/Configuration.h b/Marlin/src/config/examples/Creality/CR-10/Configuration.h
index 5ab635e83ed391ef6b5ce530868744427f06ac6d..e37f2db269dcdcec6c0b82dd6606c7e01bacc4ce 100755
--- a/Marlin/src/config/examples/Creality/CR-10/Configuration.h
+++ b/Marlin/src/config/examples/Creality/CR-10/Configuration.h
@@ -700,14 +700,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
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 386a908d0165527687131cfc8e12545789b6968a..58eb1e413919d36fe9e13857520a3ffe617dca16 100644
--- a/Marlin/src/config/examples/Creality/CR-10/Configuration_adv.h
+++ b/Marlin/src/config/examples/Creality/CR-10/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/Felix/Configuration.h b/Marlin/src/config/examples/Felix/Configuration.h
index 1db366b3ace59b7fab08964ab40029c95a60f448..14b236576e1a287a8aeabfe4f85574838ff63641 100644
--- a/Marlin/src/config/examples/Felix/Configuration.h
+++ b/Marlin/src/config/examples/Felix/Configuration.h
@@ -672,14 +672,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Felix/Configuration_adv.h b/Marlin/src/config/examples/Felix/Configuration_adv.h
index 4944d40a58673e99d2877253ed6ff19cf695382f..dd9272da2216d107322e67230f2abb45f712a92b 100644
--- a/Marlin/src/config/examples/Felix/Configuration_adv.h
+++ b/Marlin/src/config/examples/Felix/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/Felix/DUAL/Configuration.h b/Marlin/src/config/examples/Felix/DUAL/Configuration.h
index a910369d6c943bc2797eff72fd96ed523b382efe..5ecb5c09bba4da7c9ff1e89ce1a862c003f1a3df 100644
--- a/Marlin/src/config/examples/Felix/DUAL/Configuration.h
+++ b/Marlin/src/config/examples/Felix/DUAL/Configuration.h
@@ -672,14 +672,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration.h b/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration.h
index 781e42d8a3010a7f0f4695ecb609948df4d62167..ac09de398d20521ee051fe6cb70dbfc4e6bef175 100644
--- a/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration.h
+++ b/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration.h
@@ -696,14 +696,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 7500
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration_adv.h b/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration_adv.h
index 707c2f36ccc0369d5a39ce268cc8a0adb883c114..6405c97427e25f5cd2536ebf4a598f3058f829ff 100644
--- a/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration_adv.h
+++ b/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/Geeetech/GT2560/Configuration.h b/Marlin/src/config/examples/Geeetech/GT2560/Configuration.h
index 9a824a751f1fce88a0fdf7ba1034acf460589302..3f6e8eb514f08112885a78a423be4d2239c9c8bc 100644
--- a/Marlin/src/config/examples/Geeetech/GT2560/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/GT2560/Configuration.h
@@ -705,14 +705,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
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 a2224543f302a83be05ea64d4349e070e599842a..8bfc180614a3271d59142904fd70ae6632f5ea7d 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
@@ -690,14 +690,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Infitary/i3-M508/Configuration.h b/Marlin/src/config/examples/Infitary/i3-M508/Configuration.h
index ffcc1a77649b593e3ea4d453c78395a28624d0e1..70a6906d9da360fdd143e3ef01dee668effacafe 100644
--- a/Marlin/src/config/examples/Infitary/i3-M508/Configuration.h
+++ b/Marlin/src/config/examples/Infitary/i3-M508/Configuration.h
@@ -694,14 +694,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
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 f5c1659b0d5114a60bc0206b1ed0b53389a979d8..3f7ca116c15082faf767cf7a3616027a6ae8ffb5 100644
--- a/Marlin/src/config/examples/Infitary/i3-M508/Configuration_adv.h
+++ b/Marlin/src/config/examples/Infitary/i3-M508/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/Malyan/M150/Configuration.h b/Marlin/src/config/examples/Malyan/M150/Configuration.h
index 4b8d6ccbeadf143d0a80ef7bf40fbb19b32e7291..cfb9384ce4afdac3834e95216fdf5be32c0ceafb 100644
--- a/Marlin/src/config/examples/Malyan/M150/Configuration.h
+++ b/Marlin/src/config/examples/Malyan/M150/Configuration.h
@@ -714,14 +714,16 @@
// X and Y axis travel speed (mm/m) between probes
//#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
//#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
//#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Malyan/M150/Configuration_adv.h b/Marlin/src/config/examples/Malyan/M150/Configuration_adv.h
index 2eb03141041a5b87b66482e20b2297b6f7bd1e69..4e1848616297c40b49febc2362415b23b948b14a 100644
--- a/Marlin/src/config/examples/Malyan/M150/Configuration_adv.h
+++ b/Marlin/src/config/examples/Malyan/M150/Configuration_adv.h
@@ -739,7 +739,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/Micromake/C1/basic/Configuration.h b/Marlin/src/config/examples/Micromake/C1/basic/Configuration.h
index 1ceb85f008c287f35b5371d36786675f0ca02c2f..9b5e6ffde8c9d6cf33f90e21e453d29639f2b4c5 100644
--- a/Marlin/src/config/examples/Micromake/C1/basic/Configuration.h
+++ b/Marlin/src/config/examples/Micromake/C1/basic/Configuration.h
@@ -694,14 +694,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration.h b/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration.h
index ade2f730d5c4cb9a5f4d80dc1ffd080b3b454b32..ecf4bddb6d8b5683ef4df19da2155d7a091347a9 100644
--- a/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration.h
+++ b/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration.h
@@ -694,14 +694,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration_adv.h b/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration_adv.h
index 6143c438150b0a0e717d8301a5eaf3397940ae68..4b5a0e1d6aec7396869928a9c530b5987f756cd3 100644
--- a/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration_adv.h
+++ b/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration_adv.h
@@ -743,7 +743,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/Mks/Sbase/Configuration.h b/Marlin/src/config/examples/Mks/Sbase/Configuration.h
index c9b71fc2336f951719e56022e02bed8338169967..e16eaf2bc81e1af96bb140ff601a5d3fefe6595e 100644
--- a/Marlin/src/config/examples/Mks/Sbase/Configuration.h
+++ b/Marlin/src/config/examples/Mks/Sbase/Configuration.h
@@ -691,14 +691,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Mks/Sbase/Configuration_adv.h b/Marlin/src/config/examples/Mks/Sbase/Configuration_adv.h
index 3357f809e6db81f952cbfcd98ba61ed9473ceced..e15d61c7bed46e776619a961fabe2f1b9366a0ad 100644
--- a/Marlin/src/config/examples/Mks/Sbase/Configuration_adv.h
+++ b/Marlin/src/config/examples/Mks/Sbase/Configuration_adv.h
@@ -750,7 +750,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/RepRapWorld/Megatronics/Configuration.h b/Marlin/src/config/examples/RepRapWorld/Megatronics/Configuration.h
index 8a193c0099b681290a80c55682915204c4e48353..3de6dd1fbac9f997ae8e2be4e37c7f1b343b5d32 100644
--- a/Marlin/src/config/examples/RepRapWorld/Megatronics/Configuration.h
+++ b/Marlin/src/config/examples/RepRapWorld/Megatronics/Configuration.h
@@ -690,14 +690,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/RigidBot/Configuration.h b/Marlin/src/config/examples/RigidBot/Configuration.h
index 8f20ec811e457fe8a8643845d4f6fdbc00c5c1b9..5e0e8e5cc11c2fe57a1c0db0e754198a15a571f9 100644
--- a/Marlin/src/config/examples/RigidBot/Configuration.h
+++ b/Marlin/src/config/examples/RigidBot/Configuration.h
@@ -688,14 +688,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/RigidBot/Configuration_adv.h b/Marlin/src/config/examples/RigidBot/Configuration_adv.h
index bc5558adcf2ddee2cf2437614a1f5048e1ffbb39..de039e1e66c8b467066a9b79c8491d1f859d5b95 100644
--- a/Marlin/src/config/examples/RigidBot/Configuration_adv.h
+++ b/Marlin/src/config/examples/RigidBot/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/SCARA/Configuration.h b/Marlin/src/config/examples/SCARA/Configuration.h
index c016285937acdb5f44729eb187e41fd51459e84b..4c5418b9fec4f01ab279bb5fad9cb98b21e2a8be 100644
--- a/Marlin/src/config/examples/SCARA/Configuration.h
+++ b/Marlin/src/config/examples/SCARA/Configuration.h
@@ -702,14 +702,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/SCARA/Configuration_adv.h b/Marlin/src/config/examples/SCARA/Configuration_adv.h
index 87f44b69736b7cad94d0f82a45c5f71b958dd04a..7839dbc0dc1334167e6b05073126f91df24b7e7d 100644
--- a/Marlin/src/config/examples/SCARA/Configuration_adv.h
+++ b/Marlin/src/config/examples/SCARA/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/STM32F10/Configuration.h b/Marlin/src/config/examples/STM32F10/Configuration.h
index c90d25a4ce37a1957eb6ff8e4d4c5e769c50f2df..639622ceb1766ec49d110094cfd7410bdfd5aea4 100644
--- a/Marlin/src/config/examples/STM32F10/Configuration.h
+++ b/Marlin/src/config/examples/STM32F10/Configuration.h
@@ -693,14 +693,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Sanguinololu/Configuration.h b/Marlin/src/config/examples/Sanguinololu/Configuration.h
index f0cdba5f43aec5c6f945eabbf74a6181d2f39bfe..044a2c3573e546bdc11bbf01c86959ae4f44c2a1 100644
--- a/Marlin/src/config/examples/Sanguinololu/Configuration.h
+++ b/Marlin/src/config/examples/Sanguinololu/Configuration.h
@@ -721,14 +721,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Sanguinololu/Configuration_adv.h b/Marlin/src/config/examples/Sanguinololu/Configuration_adv.h
index c07caf1706158afd827fea428980411649d3e358..27cc8a0c60b911cd8540fc23b35a2353427f68e8 100644
--- a/Marlin/src/config/examples/Sanguinololu/Configuration_adv.h
+++ b/Marlin/src/config/examples/Sanguinololu/Configuration_adv.h
@@ -731,7 +731,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/TinyBoy2/Configuration.h b/Marlin/src/config/examples/TinyBoy2/Configuration.h
index f765a0939285916bba5a5ebb0fe5137c7ff05b3a..a377c6a69ac8addc2b500e3802918e5d37f1a336 100644
--- a/Marlin/src/config/examples/TinyBoy2/Configuration.h
+++ b/Marlin/src/config/examples/TinyBoy2/Configuration.h
@@ -741,14 +741,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/TinyBoy2/Configuration_adv.h b/Marlin/src/config/examples/TinyBoy2/Configuration_adv.h
index fdc6d55ab2209e0e4c064abee1211ae975451936..13c42b8a1a124c35f8e525125ae86f8ebc3e8d5d 100644
--- a/Marlin/src/config/examples/TinyBoy2/Configuration_adv.h
+++ b/Marlin/src/config/examples/TinyBoy2/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/UltiMachine/Archim2/Configuration.h b/Marlin/src/config/examples/UltiMachine/Archim2/Configuration.h
index 4dc9749616dd94ae06a15c92c7819c82862105ee..506ce16b6b6caaaa0d0f64a72b454b9b421d415f 100644
--- a/Marlin/src/config/examples/UltiMachine/Archim2/Configuration.h
+++ b/Marlin/src/config/examples/UltiMachine/Archim2/Configuration.h
@@ -690,14 +690,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/UltiMachine/Archim2/Configuration_adv.h b/Marlin/src/config/examples/UltiMachine/Archim2/Configuration_adv.h
index 4efb6c2dd77aff3149e8bfa9a4cb0021ac2dbeeb..1618c015f8166cee439f6c4f49a107c8a8e2d4f1 100644
--- a/Marlin/src/config/examples/UltiMachine/Archim2/Configuration_adv.h
+++ b/Marlin/src/config/examples/UltiMachine/Archim2/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/Velleman/K8200/Configuration.h b/Marlin/src/config/examples/Velleman/K8200/Configuration.h
index 76c93c3664b1431538431377ac757018ed387f14..0d9c1a56fcde8d6c978b0490e61a4bc6befbf05b 100644
--- a/Marlin/src/config/examples/Velleman/K8200/Configuration.h
+++ b/Marlin/src/config/examples/Velleman/K8200/Configuration.h
@@ -719,14 +719,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Velleman/K8200/Configuration_adv.h b/Marlin/src/config/examples/Velleman/K8200/Configuration_adv.h
index b36a9e8a20324e24223f5ff030f133d8ff2ae6b8..d2dec322f3f086e85fdc23350272a7d5a72a54eb 100644
--- a/Marlin/src/config/examples/Velleman/K8200/Configuration_adv.h
+++ b/Marlin/src/config/examples/Velleman/K8200/Configuration_adv.h
@@ -753,7 +753,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/Velleman/K8400/Configuration.h b/Marlin/src/config/examples/Velleman/K8400/Configuration.h
index e6598f3008f88c59953f26e024482b0ffa8861e5..098ef745157731e485a7f0df4cd68d8587bb1610 100644
--- a/Marlin/src/config/examples/Velleman/K8400/Configuration.h
+++ b/Marlin/src/config/examples/Velleman/K8400/Configuration.h
@@ -690,14 +690,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Velleman/K8400/Configuration_adv.h b/Marlin/src/config/examples/Velleman/K8400/Configuration_adv.h
index d96e2add83c7eedb476288604f2f2f75079970a7..7329d8d36b4eef5195d10a4145783d3f1606a576 100644
--- a/Marlin/src/config/examples/Velleman/K8400/Configuration_adv.h
+++ b/Marlin/src/config/examples/Velleman/K8400/Configuration_adv.h
@@ -743,7 +743,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
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 b3102a5c652386f039b3cfc9b2c76bd592dce309..7ab6b0085ca31656450effa32ba50a828b19052f 100644
--- a/Marlin/src/config/examples/Velleman/K8400/Dual-head/Configuration.h
+++ b/Marlin/src/config/examples/Velleman/K8400/Dual-head/Configuration.h
@@ -690,14 +690,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration.h b/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration.h
index 7774304de30c52fccb3d8b2643d0c89492110ecd..33ec23823b5e07ded521aff0adf26e2e70bb7c65 100644
--- a/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration.h
+++ b/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration.h
@@ -703,14 +703,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration_adv.h b/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration_adv.h
index 93952887123c314c447de57a119db18cef1a6eed..3d20bd22318249cba014cefe98dba18740fd0025 100644
--- a/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration_adv.h
+++ b/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration_adv.h
@@ -744,7 +744,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/adafruit/ST7565/Configuration.h b/Marlin/src/config/examples/adafruit/ST7565/Configuration.h
index c183bbee56f8acc1afbac9980c0d0520138bb05a..f38ecc5c5190b5de99e2ad7fd4ab3e08f04e4e0f 100644
--- a/Marlin/src/config/examples/adafruit/ST7565/Configuration.h
+++ b/Marlin/src/config/examples/adafruit/ST7565/Configuration.h
@@ -690,14 +690,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
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 d5c98e30a238da23ab1e26c46066ac003b315dca..becccb0a8f111220c04b87cd72b0db8f38c9a5a4 100644
--- a/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration.h
+++ b/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration.h
@@ -770,14 +770,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 5000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST) / 6
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Allen key retractable z-probe as seen on many Kossel delta printers - http://reprap.org/wiki/Kossel#Automatic_bed_leveling_probe
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 26681fe299e04d117b8ab66a9698d8af8e9392aa..f04397e2f874d25ce4516cb204c3ebc5cf479eea 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
@@ -744,7 +744,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
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 37ce83b7e7b52b342d27d793fb08b5752de8195d..7e3e83fe61e52243c1985c913f904c7cd2c31c61 100644
--- a/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration.h
+++ b/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration.h
@@ -770,14 +770,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 2000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+#define MULTIPLE_PROBING 2
/**
* Allen key retractable z-probe as seen on many Kossel delta printers - http://reprap.org/wiki/Kossel#Automatic_bed_leveling_probe
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 05a32b8e48a171178ec15ec0b5eef46290fdff32..95c44a8e9cbebf6fddcdd794995769b0dd74f967 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
@@ -744,7 +744,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/delta/generic/Configuration.h b/Marlin/src/config/examples/delta/generic/Configuration.h
index 8197702e08869a5c23da919463fa65e9fd33a767..a39552c07261eef160975649a2ec7a30a004003e 100644
--- a/Marlin/src/config/examples/delta/generic/Configuration.h
+++ b/Marlin/src/config/examples/delta/generic/Configuration.h
@@ -760,14 +760,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 4000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Allen key retractable z-probe as seen on many Kossel delta printers - http://reprap.org/wiki/Kossel#Automatic_bed_leveling_probe
diff --git a/Marlin/src/config/examples/delta/generic/Configuration_adv.h b/Marlin/src/config/examples/delta/generic/Configuration_adv.h
index 05a32b8e48a171178ec15ec0b5eef46290fdff32..95c44a8e9cbebf6fddcdd794995769b0dd74f967 100644
--- a/Marlin/src/config/examples/delta/generic/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/generic/Configuration_adv.h
@@ -744,7 +744,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/delta/kossel_mini/Configuration.h b/Marlin/src/config/examples/delta/kossel_mini/Configuration.h
index 74d65b19ad60ad0d8d8ae2c3839931f07b27cda2..9e0d287776dd84d1b83b4d8ce3f4aec0d3cf792e 100644
--- a/Marlin/src/config/examples/delta/kossel_mini/Configuration.h
+++ b/Marlin/src/config/examples/delta/kossel_mini/Configuration.h
@@ -760,14 +760,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 4000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Allen key retractable z-probe as seen on many Kossel delta printers - http://reprap.org/wiki/Kossel#Automatic_bed_leveling_probe
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 05a32b8e48a171178ec15ec0b5eef46290fdff32..95c44a8e9cbebf6fddcdd794995769b0dd74f967 100644
--- a/Marlin/src/config/examples/delta/kossel_mini/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/kossel_mini/Configuration_adv.h
@@ -744,7 +744,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/delta/kossel_pro/Configuration.h b/Marlin/src/config/examples/delta/kossel_pro/Configuration.h
index 78167826b2bf4c93d312de245f3773a85674aaad..61bda71e91e14ac3d7bb4d3dc727f384de52a894 100644
--- a/Marlin/src/config/examples/delta/kossel_pro/Configuration.h
+++ b/Marlin/src/config/examples/delta/kossel_pro/Configuration.h
@@ -756,14 +756,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Allen key retractable z-probe as seen on many Kossel delta printers - http://reprap.org/wiki/Kossel#Automatic_bed_leveling_probe
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 ba46688d23159af72a7fe3b250c6bc3c7db0378b..90cb06affc8a18a6ef4c5b33f1cf9efc81aadf5c 100644
--- a/Marlin/src/config/examples/delta/kossel_pro/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/kossel_pro/Configuration_adv.h
@@ -749,7 +749,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/delta/kossel_xl/Configuration.h b/Marlin/src/config/examples/delta/kossel_xl/Configuration.h
index b6d3c353b9c088d7e397eb85c18ef4e91f1ef3d5..434d1b14c47ad3b9909d9b82da0525c1a0b45957 100644
--- a/Marlin/src/config/examples/delta/kossel_xl/Configuration.h
+++ b/Marlin/src/config/examples/delta/kossel_xl/Configuration.h
@@ -772,14 +772,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Allen key retractable z-probe as seen on many Kossel delta printers - http://reprap.org/wiki/Kossel#Automatic_bed_leveling_probe
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 1db1d39bc13b8e7a0bffee31ad9b4016f16c0efb..90eccaa96f3cdfb5075a338f28bad28f0e2703ce 100644
--- a/Marlin/src/config/examples/delta/kossel_xl/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/kossel_xl/Configuration_adv.h
@@ -744,7 +744,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration.h b/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration.h
index 5eaecd04d2bc471fc1dfae97ee58e4a7f2ac9b59..362f6ad4e48cd23aedde7d9e82d5fd3f473d5699 100644
--- a/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration.h
+++ b/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration.h
@@ -703,14 +703,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 7500
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
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 c493169105013639038b0638a52b80a7cb7884c9..db9848fafb91bf48bcb18f8990be989c20405ae9 100644
--- a/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration_adv.h
+++ b/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/makibox/Configuration.h b/Marlin/src/config/examples/makibox/Configuration.h
index 8e4d45eb225b5f363c998f38c944985dd3be3ce4..533520967cda1cbafddd61014b3b53583dea0c83 100644
--- a/Marlin/src/config/examples/makibox/Configuration.h
+++ b/Marlin/src/config/examples/makibox/Configuration.h
@@ -693,14 +693,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/makibox/Configuration_adv.h b/Marlin/src/config/examples/makibox/Configuration_adv.h
index 1e82117403bc7501ded7500ab2c3e1e2ce8352d0..c7f2029fb48205d3edc0d6604010b66a699d26ee 100644
--- a/Marlin/src/config/examples/makibox/Configuration_adv.h
+++ b/Marlin/src/config/examples/makibox/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/tvrrug/Round2/Configuration.h b/Marlin/src/config/examples/tvrrug/Round2/Configuration.h
index 2a233bb0f4125297b5848830c7cd38d1a16f11b2..e1f72334b2b35a833740031c1c4320d80e3ca986 100644
--- a/Marlin/src/config/examples/tvrrug/Round2/Configuration.h
+++ b/Marlin/src/config/examples/tvrrug/Round2/Configuration.h
@@ -685,14 +685,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/tvrrug/Round2/Configuration_adv.h b/Marlin/src/config/examples/tvrrug/Round2/Configuration_adv.h
index ccbebbaa8d2f3157f09e50175d3064cd13f74d5d..76607920940b4a7f2fb20d98b6431a08c535ca9b 100644
--- a/Marlin/src/config/examples/tvrrug/Round2/Configuration_adv.h
+++ b/Marlin/src/config/examples/tvrrug/Round2/Configuration_adv.h
@@ -742,7 +742,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/config/examples/wt150/Configuration.h b/Marlin/src/config/examples/wt150/Configuration.h
index 6b7dff649008e3731daf54dcb75d689145730161..c3ad4fe0b48a9a804576f3abedc405cd767d69d7 100644
--- a/Marlin/src/config/examples/wt150/Configuration.h
+++ b/Marlin/src/config/examples/wt150/Configuration.h
@@ -695,14 +695,16 @@
// X and Y axis travel speed (mm/m) between probes
#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
+// Speed for the first approach when double-probing (MULTIPLE_PROBING == 2)
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
// Speed for the "accurate" probe of each point
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
+// The number of probes to perform at each point.
+// Set to 2 for a fast/slow probe, using the second probe result.
+// Set to 3 or more for slow probes, averaging the results.
+//#define MULTIPLE_PROBING 2
/**
* Z probes require clearance when deploying, stowing, and moving between
diff --git a/Marlin/src/config/examples/wt150/Configuration_adv.h b/Marlin/src/config/examples/wt150/Configuration_adv.h
index 056c79ca98b9e8db0570127f1c057c73389d12ce..3739b99d407a69bbaa67874eac1c11952cdaa1b9 100644
--- a/Marlin/src/config/examples/wt150/Configuration_adv.h
+++ b/Marlin/src/config/examples/wt150/Configuration_adv.h
@@ -743,7 +743,7 @@
//#define BEZIER_CURVE_SUPPORT
// G38.2 and G38.3 Probe Target
-// Enable PROBE_DOUBLE_TOUCH if you want G38 to double touch
+// Set MULTIPLE_PROBING if you want G38 to double touch
//#define G38_PROBE_TARGET
#if ENABLED(G38_PROBE_TARGET)
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
diff --git a/Marlin/src/gcode/probe/G38.cpp b/Marlin/src/gcode/probe/G38.cpp
index 105085a1464679bd11349cc3121af60bce954805..adc0d491d41c1bb5f97c1e2ac7471c7fcf74b051 100644
--- a/Marlin/src/gcode/probe/G38.cpp
+++ b/Marlin/src/gcode/probe/G38.cpp
@@ -35,7 +35,7 @@ static bool G38_run_probe() {
bool G38_pass_fail = false;
- #if ENABLED(PROBE_DOUBLE_TOUCH)
+ #if MULTIPLE_PROBING > 1
// Get direction of move and retract
float retract_mm[XYZ];
LOOP_XYZ(i) {
@@ -62,7 +62,7 @@ static bool G38_run_probe() {
G38_pass_fail = true;
- #if ENABLED(PROBE_DOUBLE_TOUCH)
+ #if MULTIPLE_PROBING > 1
// Move away by the retract distance
set_destination_from_current();
LOOP_XYZ(i) destination[i] += retract_mm[i];
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index f27da2f9cc0396b9e12e509c4e4e8e8404e7bb79..2c6a8d33111aec8e5c3bae278fe2357163e5961c 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -227,6 +227,8 @@
#error "UBL_GRANULAR_SEGMENTATION_FOR_CARTESIAN is now SEGMENT_LEVELED_MOVES. Please update your configuration."
#elif HAS_PID_HEATING && (defined(K1) || !defined(PID_K1))
#error "K1 is now PID_K1. Please update your configuration."
+#elif defined(PROBE_DOUBLE_TOUCH)
+ #error "PROBE_DOUBLE_TOUCH is now MULTIPLE_PROBING. Please update your configuration."
#endif
/**
@@ -711,6 +713,10 @@ static_assert(1 >= 0
#error "Probes need Z_CLEARANCE_BETWEEN_PROBES >= 0."
#endif
+ #if MULTIPLE_PROBING && MULTIPLE_PROBING < 2
+ #error "MULTIPLE_PROBING must be >= 2."
+ #endif
+
#else
/**
diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp
index b509adec6b124c0cdda6b5c5d4c7119333fbd1c7..b483ff022f8e21e38a2ecd169415dfbf71e7440e 100644
--- a/Marlin/src/module/probe.cpp
+++ b/Marlin/src/module/probe.cpp
@@ -507,7 +507,7 @@ static bool do_probe_move(const float z, const float fr_mm_m) {
}
/**
- * @details Used by probe_pt to do a single Z probe.
+ * @details Used by probe_pt to do a single Z probe at the current position.
* Leaves current_position[Z_AXIS] at the height where the probe triggered.
*
* @return The raw Z position where the probe was triggered
@@ -521,7 +521,8 @@ static float run_z_probe() {
// Prevent stepper_inactive_time from running out and EXTRUDER_RUNOUT_PREVENT from extruding
gcode.refresh_cmd_timeout();
- #if ENABLED(PROBE_DOUBLE_TOUCH)
+ // Double-probing does a fast probe followed by a slow probe
+ #if MULTIPLE_PROBING == 2
// Do a first probe at the fast speed
if (do_probe_move(-10, Z_PROBE_SPEED_FAST)) return NAN;
@@ -549,22 +550,49 @@ static float run_z_probe() {
}
#endif
- // Move down slowly to find bed, not too far
- if (do_probe_move(-10, Z_PROBE_SPEED_SLOW)) return NAN;
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) DEBUG_POS("<<< run_z_probe", current_position);
+ #if MULTIPLE_PROBING > 2
+ float probes_total = 0;
+ for (uint8_t p = MULTIPLE_PROBING + 1; --p;) {
#endif
- // Debug: compare probe heights
- #if ENABLED(PROBE_DOUBLE_TOUCH) && ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOPAIR("2nd Probe Z:", current_position[Z_AXIS]);
- SERIAL_ECHOLNPAIR(" Discrepancy:", first_probe_z - current_position[Z_AXIS]);
+ // Move down slowly to find bed, not too far
+ if (do_probe_move(-10, Z_PROBE_SPEED_SLOW)) return NAN;
+
+ #if MULTIPLE_PROBING > 2
+ probes_total += current_position[Z_AXIS];
+ if (p > 1) do_blocking_move_to_z(current_position[Z_AXIS] + Z_CLEARANCE_BETWEEN_PROBES, MMM_TO_MMS(Z_PROBE_SPEED_FAST));
}
#endif
- return current_position[Z_AXIS];
+ #if MULTIPLE_PROBING > 2
+
+ // Return the average value of all probes
+ return probes_total * (1.0 / (MULTIPLE_PROBING));
+
+ #elif MULTIPLE_PROBING == 2
+
+ const float z2 = current_position[Z_AXIS];
+
+ #if ENABLED(DEBUG_LEVELING_FEATURE)
+ if (DEBUGGING(LEVELING)) {
+ SERIAL_ECHOPAIR("2nd Probe Z:", z2);
+ SERIAL_ECHOLNPAIR(" Discrepancy:", first_probe_z - z2);
+ }
+ #endif
+
+ // Return a weighted average of the fast and slow probes
+ return (z2 * 3.0 + first_probe_z * 2.0) * 0.2;
+
+ #else
+
+ // Return the single probe result
+ return current_position[Z_AXIS];
+
+ #endif
+
+ #if ENABLED(DEBUG_LEVELING_FEATURE)
+ if (DEBUGGING(LEVELING)) DEBUG_POS("<<< run_z_probe", current_position);
+ #endif
}
/**