From 1242e875aadcb5b5ef8a9f54fd99f32a0adbdde8 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 15 Apr 2025 15:49:23 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=B8=20More=20frequent=20button=20polli?= =?UTF-8?q?ng=20(#27797)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 2 ++ Marlin/src/inc/Conditionals-5-post.h | 4 ++++ Marlin/src/module/temperature.cpp | 11 ++++++++--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index d4b4307b05..73073762f1 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -2268,6 +2268,8 @@ #define ADC_BUTTON_DEBOUNCE_DELAY 16 // (count) Increase if buttons bounce or repeat too fast #endif +//#define FAST_BUTTON_POLLING // Poll buttons at ~1kHz on 8-bit AVR. Set to 'false' for slow polling on 32-bit. + // @section safety /** diff --git a/Marlin/src/inc/Conditionals-5-post.h b/Marlin/src/inc/Conditionals-5-post.h index 9b16f515d6..380e8e6071 100644 --- a/Marlin/src/inc/Conditionals-5-post.h +++ b/Marlin/src/inc/Conditionals-5-post.h @@ -3557,6 +3557,10 @@ #define HAS_ROTARY_ENCODER 1 #endif +#if defined(CPU_32_BIT) && !defined(FAST_BUTTON_POLLING) + #define FAST_BUTTON_POLLING +#endif + #if PIN_EXISTS(SAFE_POWER) && DISABLED(DISABLE_DRIVER_SAFE_POWER_PROTECT) #define HAS_DRIVER_SAFE_POWER_PROTECT 1 #endif diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 169d86a72f..5c9f122067 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -4283,10 +4283,15 @@ void Temperature::isr() { #endif // SLOW_PWM_HEATERS // - // Update lcd buttons 488 times per second + // Update lcd buttons at ~488Hz or ~976Hz // - static bool do_buttons; - if ((do_buttons ^= true)) ui.update_buttons(); + #if ENABLED(FAST_BUTTON_POLLING) + constexpr bool do_buttons = true; + #else + static bool do_buttons; + do_buttons ^= true; + #endif + if (do_buttons) ui.update_buttons(); /** * One sensor is sampled on every other call of the ISR.