From 323c0883564743409ff335f3578d9ee033163571 Mon Sep 17 00:00:00 2001 From: Giuliano Zaro <3684609+GMagician@users.noreply.github.com> Date: Thu, 1 Nov 2018 23:44:41 +0100 Subject: [PATCH] Restore LED light color after pid tuning (#12082) --- Marlin/src/feature/leds/leds.cpp | 17 +++++------------ Marlin/src/feature/leds/leds.h | 12 +++++++++--- Marlin/src/feature/leds/printer_event_leds.h | 8 ++++---- Marlin/src/module/temperature.cpp | 12 ++++++++---- 4 files changed, 26 insertions(+), 23 deletions(-) diff --git a/Marlin/src/feature/leds/leds.cpp b/Marlin/src/feature/leds/leds.cpp index d3175a0314..0694491f0f 100644 --- a/Marlin/src/feature/leds/leds.cpp +++ b/Marlin/src/feature/leds/leds.cpp @@ -48,7 +48,7 @@ ); #endif -#if ENABLED(LED_CONTROL_MENU) +#if ENABLED(LED_CONTROL_MENU) || ENABLED(PRINTER_EVENT_LEDS) LEDColor LEDLights::color; bool LEDLights::lights_on; #endif @@ -72,7 +72,9 @@ void LEDLights::set_color(const LEDColor &incol #if ENABLED(NEOPIXEL_LED) - const uint32_t neocolor = pixels.Color(incol.r, incol.g, incol.b, incol.w); + const uint32_t neocolor = LEDColorWhite() == incol + ? pixels.Color(NEO_WHITE) + : pixels.Color(incol.r, incol.g, incol.b, incol.w); static uint16_t nextLed = 0; pixels.setBrightness(incol.i); @@ -117,22 +119,13 @@ void LEDLights::set_color(const LEDColor &incol pca9632_set_led_color(incol); #endif - #if ENABLED(LED_CONTROL_MENU) + #if ENABLED(LED_CONTROL_MENU) || ENABLED(PRINTER_EVENT_LEDS) // Don't update the color when OFF lights_on = !incol.is_off(); if (lights_on) color = incol; #endif } -void LEDLights::set_white() { - #if ENABLED(RGB_LED) || ENABLED(RGBW_LED) || ENABLED(BLINKM) || ENABLED(PCA9632) - set_color(LEDColorWhite()); - #endif - #if ENABLED(NEOPIXEL_LED) - set_neopixel_color(pixels.Color(NEO_WHITE)); - #endif -} - #if ENABLED(LED_CONTROL_MENU) void LEDLights::toggle() { if (lights_on) set_off(); else update(); } #endif diff --git a/Marlin/src/feature/leds/leds.h b/Marlin/src/feature/leds/leds.h index a59a655fb8..224e3cc200 100644 --- a/Marlin/src/feature/leds/leds.h +++ b/Marlin/src/feature/leds/leds.h @@ -115,12 +115,12 @@ typedef struct LEDColor { * Color helpers and presets */ #if HAS_WHITE_LED - #define LEDColorWhite() LEDColor(0, 0, 0, 255) #if ENABLED(NEOPIXEL_LED) #define MakeLEDColor(R,G,B,W,I) LEDColor(R, G, B, W, I) #else #define MakeLEDColor(R,G,B,W,I) LEDColor(R, G, B, W) #endif + #define LEDColorWhite() LEDColor(0, 0, 0, 255) #else #define MakeLEDColor(R,G,B,W,I) LEDColor(R, G, B) #define LEDColorWhite() LEDColor(255, 255, 255) @@ -164,9 +164,9 @@ public: ); } - static void set_white(); FORCE_INLINE static void set_off() { set_color(LEDColorOff()); } FORCE_INLINE static void set_green() { set_color(LEDColorGreen()); } + FORCE_INLINE static void set_white() { set_color(LEDColorWhite()); } #if ENABLED(LED_COLOR_PRESETS) static const LEDColor defaultLEDColor; @@ -179,9 +179,15 @@ public: FORCE_INLINE static void set_violet() { set_color(LEDColorViolet()); } #endif - #if ENABLED(LED_CONTROL_MENU) + #if ENABLED(PRINTER_EVENT_LEDS) + FORCE_INLINE static LEDColor get_color() { return lights_on ? color : LEDColorOff(); } + #endif + + #if ENABLED(LED_CONTROL_MENU) || ENABLED(PRINTER_EVENT_LEDS) static LEDColor color; // last non-off color static bool lights_on; // the last set color was "on" + #endif + #if ENABLED(LED_CONTROL_MENU) static void toggle(); // swap "off" with color FORCE_INLINE static void update() { set_color(color); } #endif diff --git a/Marlin/src/feature/leds/printer_event_leds.h b/Marlin/src/feature/leds/printer_event_leds.h index 679eddfbc9..bcd7cec57c 100644 --- a/Marlin/src/feature/leds/printer_event_leds.h +++ b/Marlin/src/feature/leds/printer_event_leds.h @@ -38,18 +38,18 @@ private: public: #if HAS_TEMP_HOTEND - FORCE_INLINE static void onHotendHeatingStart() { old_intensity = 0; } + FORCE_INLINE static LEDColor onHotendHeatingStart() { old_intensity = 0; return leds.get_color(); } static void onHotendHeating(const float &start, const float ¤t, const float &target); #endif #if HAS_HEATED_BED - FORCE_INLINE static void onBedHeatingStart() { old_intensity = 127; } + FORCE_INLINE static LEDColor onBedHeatingStart() { old_intensity = 127; return leds.get_color(); } static void onBedHeating(const float &start, const float ¤t, const float &target); #endif #if HAS_TEMP_HOTEND || HAS_HEATED_BED - FORCE_INLINE static void onHeated() { leds.set_white(); } - FORCE_INLINE static void onHeatersOff() { leds.set_off(); } + FORCE_INLINE static void onHeated() { leds.set_color(LEDColorWhite()); } + FORCE_INLINE static void onPidTuningDone(LEDColor c) { leds.set_color(c); } #endif #if ENABLED(SDSUPPORT) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 20d7b7c3ab..28d4e55064 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -251,7 +251,7 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS]; #if HAS_PID_FOR_BOTH #define GHV(B,H) (hotend < 0 ? (B) : (H)) #define SHV(S,B,H) do{ if (hotend < 0) S##_bed = B; else S [hotend] = H; }while(0) - #define ONHEATINGSTART() do{ if (hotend < 0) printerEventLEDs.onBedHeatingStart(); else printerEventLEDs.onHotendHeatingStart(); }while(0) + #define ONHEATINGSTART() (hotend < 0 ? printerEventLEDs.onBedHeatingStart() : printerEventLEDs.onHotendHeatingStart()) #define ONHEATING(S,C,T) do{ if (hotend < 0) printerEventLEDs.onBedHeating(S,C,T); else printerEventLEDs.onHotendHeating(S,C,T); }while(0) #elif ENABLED(PIDTEMPBED) #define GHV(B,H) B @@ -311,7 +311,7 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS]; wait_for_heatup = true; // Can be interrupted with M108 #if ENABLED(PRINTER_EVENT_LEDS) const float start_temp = GHV(current_temperature_bed, current_temperature[hotend]); - ONHEATINGSTART(); + LEDColor color = ONHEATINGSTART(); #endif // PID Tuning loop @@ -492,13 +492,17 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS]; _SET_BED_PID(); #endif } + #if ENABLED(PRINTER_EVENT_LEDS) + printerEventLEDs.onPidTuningDone(color); + #endif + return; } lcd_update(); } disable_all_heaters(); #if ENABLED(PRINTER_EVENT_LEDS) - printerEventLEDs.onHeatersOff(); + printerEventLEDs.onPidTuningDone(color); #endif } @@ -2525,7 +2529,7 @@ void Temperature::isr() { if (wait_for_heatup) { lcd_reset_status(); #if ENABLED(PRINTER_EVENT_LEDS) - printerEventLEDs.onHeated(); + printerEventLEDs.onHeatingDone(); #endif }