diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp
index 4d4f1ce65d8ab33cc2314a92a7f8cb6bf6bba78f..13f21162373d88a727454a40472eae5319f44bc1 100644
--- a/Marlin/ultralcd.cpp
+++ b/Marlin/ultralcd.cpp
@@ -77,6 +77,7 @@ static void menu_action_setting_edit_callback_float52(const char* pstr, float* p
static void menu_action_setting_edit_callback_long5(const char* pstr, unsigned long* ptr, unsigned long minValue, unsigned long maxValue, menuFunc_t callbackFunc);
#define ENCODER_STEPS_PER_MENU_ITEM 5
+#define ENCODER_FEEDRATE_DEADZONE 10
/* Helper macros for menus */
#define START_MENU() do { \
@@ -158,10 +159,34 @@ static void lcd_status_screen()
if (LCD_CLICKED)
{
currentMenu = lcd_main_menu;
+ encoderPosition = 0;
lcd_quick_feedback();
}
- feedmultiply += int(encoderPosition);
- encoderPosition = 0;
+
+ // Dead zone at 100% feedrate
+ if (feedmultiply < 100 && (feedmultiply + int(encoderPosition)) > 100 ||
+ feedmultiply > 100 && (feedmultiply + int(encoderPosition)) < 100)
+ {
+ encoderPosition = 0;
+ feedmultiply = 100;
+ }
+
+ if (feedmultiply == 100 && int(encoderPosition) > ENCODER_FEEDRATE_DEADZONE)
+ {
+ feedmultiply += int(encoderPosition) - ENCODER_FEEDRATE_DEADZONE;
+ encoderPosition = 0;
+ }
+ else if (feedmultiply == 100 && int(encoderPosition) < -ENCODER_FEEDRATE_DEADZONE)
+ {
+ feedmultiply += int(encoderPosition) + ENCODER_FEEDRATE_DEADZONE;
+ encoderPosition = 0;
+ }
+ else if (feedmultiply != 100)
+ {
+ feedmultiply += int(encoderPosition);
+ encoderPosition = 0;
+ }
+
if (feedmultiply < 10)
feedmultiply = 10;
if (feedmultiply > 999)