From 3f9f622c9a0631355e8180b7cf9bee6c2cc93fe8 Mon Sep 17 00:00:00 2001 From: vovodroid Date: Tue, 1 Apr 2025 17:04:19 +0300 Subject: [PATCH] Max fan menu --- Marlin/src/gcode/temp/M106_M107.cpp | 6 ++++++ Marlin/src/lcd/language/language_en.h | 1 + Marlin/src/lcd/menu/menu_temperature.cpp | 1 + Marlin/src/lcd/menu/menu_tune.cpp | 1 + Marlin/src/module/temperature.cpp | 1 + Marlin/src/module/temperature.h | 1 + 6 files changed, 11 insertions(+) diff --git a/Marlin/src/gcode/temp/M106_M107.cpp b/Marlin/src/gcode/temp/M106_M107.cpp index dc0c3d6b27..f4dd50668c 100644 --- a/Marlin/src/gcode/temp/M106_M107.cpp +++ b/Marlin/src/gcode/temp/M106_M107.cpp @@ -44,6 +44,10 @@ #define _CNT_P FAN_COUNT #endif +#ifndef min + #define min std::min +#endif + /** * M106: Set Fan Speed * @@ -86,6 +90,8 @@ void GcodeSuite::M106() { if (!got_preset && parser.seenval('S')) speed = parser.value_ushort(); + speed = min(speed, (uint16_t) thermalManager.max_fan_speed); + TERN_(FOAMCUTTER_XYUV, speed *= 2.55f); // Get command in % of max heat // Set speed, with constraint diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 0472c9e4ec..e6506fdc3f 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -387,6 +387,7 @@ namespace LanguageNarrow_en { LSTR MSG_LED_BRIGHTNESS = _UxGT("Brightness"); LSTR MSG_HOTEND_TOO_COLD = _UxGT("Hotend too cold"); LSTR MSG_CHAMBER = _UxGT("Enclosure"); + LSTR MSG_MAX_FAN_SPEED = _UxGT("Max Fan Speed"); LSTR MSG_STORED_FAN_N = _UxGT("Stored Fan ~"); LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Extra Fan Speed"); LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra Fan Speed ~"); diff --git a/Marlin/src/lcd/menu/menu_temperature.cpp b/Marlin/src/lcd/menu/menu_temperature.cpp index 14845f5253..5218f3ec2b 100644 --- a/Marlin/src/lcd/menu/menu_temperature.cpp +++ b/Marlin/src/lcd/menu/menu_temperature.cpp @@ -241,6 +241,7 @@ void menu_temperature() { singlenozzle_item(7); #endif + EDIT_ITEM_FAST(percent, MSG_MAX_FAN_SPEED, &Temperature::max_fan_speed, 0, 255); #endif // HAS_FAN #if HAS_PREHEAT diff --git a/Marlin/src/lcd/menu/menu_tune.cpp b/Marlin/src/lcd/menu/menu_tune.cpp index 856ae5a5f4..cf0da8bcb0 100644 --- a/Marlin/src/lcd/menu/menu_tune.cpp +++ b/Marlin/src/lcd/menu/menu_tune.cpp @@ -192,6 +192,7 @@ void menu_tune() { singlenozzle_item(7); #endif + EDIT_ITEM_FAST(percent, MSG_MAX_FAN_SPEED, &Temperature::max_fan_speed, 0, 255); #endif // HAS_FAN // diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index f0ca49ef66..2ad668a36e 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -436,6 +436,7 @@ PGMSTR(str_t_heating_failed, STR_T_HEATING_FAILED); #if HAS_FAN uint8_t Temperature::fan_speed[FAN_COUNT] = ARRAY_N_1(FAN_COUNT, FAN_OFF_PWM); + uint8_t Temperature::max_fan_speed = 255; #if ENABLED(EXTRA_FAN_SPEED) diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index f2ef4d0f6c..fa9e3e8bf5 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -919,6 +919,7 @@ class Temperature { static uint8_t fan_speed[FAN_COUNT]; #define FANS_LOOP(I) for (uint8_t I = 0; I < FAN_COUNT; ++I) + static uint8_t max_fan_speed; static void set_fan_speed(const uint8_t fan, const uint16_t speed);