diff --git a/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp b/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp index d49dfb6b22..1f9de12f53 100644 --- a/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp +++ b/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp @@ -886,7 +886,7 @@ void MarlinUI::draw_status_screen() { uint16_t spd = thermalManager.fan_speed[0]; if (blink) c = 'F'; #if ENABLED(ADAPTIVE_FAN_SLOWING) - else { c = '*'; spd = (spd * thermalManager.fan_speed_scaler[0]) >> 7; } + else { c = '*'; spd = thermalManager.scaledFanSpeed(0, spd); } #endif per = thermalManager.fanPercent(spd); } diff --git a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp index cbf1650314..09b121434c 100644 --- a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp +++ b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp @@ -423,7 +423,7 @@ void MarlinUI::draw_status_screen() { if (spd) { #if ENABLED(ADAPTIVE_FAN_SLOWING) if (!blink && thermalManager.fan_speed_scaler[0] < 128) { - spd = (spd * thermalManager.fan_speed_scaler[0]) >> 7; + spd = thermalManager.scaledFanSpeed(0, spd); c = '*'; } #endif diff --git a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp index 8b12a83570..20c360f519 100644 --- a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp +++ b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp @@ -684,7 +684,7 @@ bool ST7920_Lite_Status_Screen::indicators_changed() { // them only during blinks we gain a bit of stability. const bool blink = ui.get_blink(); const uint16_t feedrate_perc = feedrate_percentage; - const uint16_t fs = (thermalManager.fan_speed[0] * uint16_t(thermalManager.fan_speed_scaler[0])) >> 7; + const uint16_t fs = thermalManager.scaledFanSpeed(0); const int16_t extruder_1_target = thermalManager.degTargetHotend(0); #if HOTENDS > 1 const int16_t extruder_2_target = thermalManager.degTargetHotend(1); @@ -734,7 +734,7 @@ void ST7920_Lite_Status_Screen::update_indicators(const bool forceUpdate) { #if ENABLED(ADAPTIVE_FAN_SLOWING) if (!blink && thermalManager.fan_speed_scaler[0] < 128) - spd = (spd * thermalManager.fan_speed_scaler[0]) >> 7; + spd = thermalManager.scaledFanSpeed(0, spd); #endif draw_fan_speed(thermalManager.fanPercent(spd)); diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp index 2ecfe91d62..87f2eab92d 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.cpp +++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp @@ -246,7 +246,7 @@ namespace ExtUI { } float getActualFan_percent(const fan_t fan) { - return thermalManager.fanPercent((thermalManager.fan_speed[fan - FAN0] * uint16_t(thermalManager.fan_speed_scaler[fan - FAN0])) >> 7); + return thermalManager.fanPercent(thermalManager.scaledFanSpeed(fan - FAN0)); } float getAxisPosition_mm(const axis_t axis) { diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index d402604743..06612bd8ba 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1184,7 +1184,7 @@ void Planner::check_axes_activity() { if (has_blocks_queued()) { #if FAN_COUNT > 0 FANS_LOOP(i) - tail_fan_speed[i] = (block_buffer[block_buffer_tail].fan_speed[i] * uint16_t(thermalManager.fan_speed_scaler[i])) >> 7; + tail_fan_speed[i] = thermalManager.scaledFanSpeed(i, block_buffer[block_buffer_tail].fan_speed[i]); #endif block_t* block; @@ -1207,7 +1207,7 @@ void Planner::check_axes_activity() { else { #if FAN_COUNT > 0 FANS_LOOP(i) - tail_fan_speed[i] = (thermalManager.fan_speed[i] * uint16_t(thermalManager.fan_speed_scaler[i])) >> 7; + tail_fan_speed[i] = thermalManager.scaledFanSpeed(i); #endif #if ENABLED(BARICUDA) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 35ace2c42a..828c34e4ce 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -171,6 +171,9 @@ hotend_info_t Temperature::temp_hotend[HOTENDS #endif + /** + * Set the print fan speed for a target extruder + */ void Temperature::set_fan_speed(uint8_t target, uint16_t speed) { NOMORE(speed, 255U); diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index 8a8300892f..23da631c11 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -472,8 +472,12 @@ class Temperature { static constexpr uint8_t fan_speed_scaler[FAN_COUNT] = ARRAY_N(FAN_COUNT, 128, 128, 128, 128, 128, 128); #endif - static inline uint8_t lcd_fanSpeedActual(const uint8_t target) { - return (fan_speed[target] * uint16_t(fan_speed_scaler[target])) >> 7; + static inline uint8_t scaledFanSpeed(const uint8_t target) { + return (fs * uint16_t(fan_speed_scaler[target])) >> 7; + } + + static inline uint8_t scaledFanSpeed(const uint8_t target, const uint8_t fs) { + return scaledFanSpeed(target, fan_speed[target]); } #if ENABLED(EXTRA_FAN_SPEED)