From b3f52f95c7892d7cb2b0683a9729c0a51845cb75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Sun, 30 Apr 2023 23:31:16 +0000 Subject: [PATCH] optimisation: only check feedrate if knob is rotated Guard the feedmultiply code with lcd_encoder. if lcd_encoder = 0, then there is no need to check if feedmultiply should be updated. Also set lcd_encoder to zero in one line to consume the rotation event. Change in memory: Flash: -40 bytes SRAM: 0 bytes --- Firmware/ultralcd.cpp | 49 +++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index a2bfd7bd6..537feb8c9 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -693,34 +693,29 @@ void lcd_status_screen() // NOT static due to using ins { static uint8_t lcd_status_update_delay = 0; #ifdef ULTIPANEL_FEEDMULTIPLY - // Dead zone at 100% feedrate - if ((feedmultiply < 100 && (feedmultiply + lcd_encoder) > 100) || - (feedmultiply > 100 && (feedmultiply + lcd_encoder) < 100)) - { - lcd_encoder = 0; - feedmultiply = 100; - } - if (feedmultiply == 100 && lcd_encoder > ENCODER_FEEDRATE_DEADZONE) - { - feedmultiply += lcd_encoder - ENCODER_FEEDRATE_DEADZONE; - lcd_encoder = 0; - } - else if (feedmultiply == 100 && lcd_encoder < -ENCODER_FEEDRATE_DEADZONE) - { - feedmultiply += lcd_encoder + ENCODER_FEEDRATE_DEADZONE; - lcd_encoder = 0; - } - else if (feedmultiply != 100) - { - feedmultiply += lcd_encoder; - lcd_encoder = 0; - } -#endif //ULTIPANEL_FEEDMULTIPLY + if (lcd_encoder) + { + const int16_t initial_feedmultiply = feedmultiply; + // Dead zone at 100% feedrate + if ((feedmultiply < 100 && (feedmultiply + lcd_encoder) > 100) || + (feedmultiply > 100 && (feedmultiply + lcd_encoder) < 100)) + { + feedmultiply = 100; + } + else if (feedmultiply == 100 && lcd_encoder > ENCODER_FEEDRATE_DEADZONE) { + feedmultiply += lcd_encoder - ENCODER_FEEDRATE_DEADZONE; + } + else if (feedmultiply == 100 && lcd_encoder < -ENCODER_FEEDRATE_DEADZONE) { + feedmultiply += lcd_encoder + ENCODER_FEEDRATE_DEADZONE; + } + else if (feedmultiply != 100) feedmultiply += lcd_encoder; - if (feedmultiply < 10) - feedmultiply = 10; - else if (feedmultiply > 999) - feedmultiply = 999; + if (initial_feedmultiply != feedmultiply) { + feedmultiply = constrain(feedmultiply, 10, 999); + lcd_encoder = 0; // Consume rotation event + } + } +#endif //ULTIPANEL_FEEDMULTIPLY if (lcd_draw_update) { // Update the status screen immediately