MarlinFirmware / Marlin

Marlin is an optimized firmware for RepRap 3D printers based on the Arduino platform. Many commercial 3D printers come with Marlin installed. Check with your vendor if you need source code for your specific machine.
https://marlinfw.org
GNU General Public License v3.0
15.94k stars 19.08k forks source link

[FR] "HotBed" Idle Timeout #27033

Open danihmorais opened 2 weeks ago

danihmorais commented 2 weeks ago

Is your feature request related to a problem? Please describe.

No response

Are you looking for hardware support?

No response

Describe the feature you want

Sorry bad English. I think that is cool to implement a function like HOTEND_IDLE_TIMEOUT, but for Hot Bed. Actually, this only verify the temperature hotend. It could be better, (for security too), if have a option for Hot Bed, avoid that a hot bed stay warming up forever. Suppose, for example, that I manually set 110º ONLY for the Hot BED, and not for hot end, and forget that I did that, it will stay there heating up, since the function HOTEND_IDLE_TIMEOUT will not be activated.

If this already exists, could you show me where and how? Thank you.

Additional context

No response

classicrocker883 commented 1 week ago

Bed should get turned off at same time hotend idle timeout

look at void HotendIdleProtection::timed_out()

Marlin\src\feature\hotend_idle.cpp

void HotendIdleProtection::check() {
  const millis_t ms = millis();                   // Shared millis

  check_hotends(ms);                              // Any hotends need protection?
  check_e_motion(ms);                             // Motion will protect them

  // Hot and not moving for too long...
  if (next_protect_ms && ELAPSED(ms, next_protect_ms))
    timed_out();
}

// Lower (but don't raise) hotend / bed temperatures
void HotendIdleProtection::timed_out() {
  next_protect_ms = 0;
  SERIAL_ECHOLNPGM("Hotend Idle Timeout");
  LCD_MESSAGE(MSG_HOTEND_IDLE_TIMEOUT);
  HOTEND_LOOP() {
    if (cfg.nozzle_target < thermalManager.degTargetHotend(e))
      thermalManager.setTargetHotend(cfg.nozzle_target, e);
  }
  #if HAS_HEATED_BED
    if (cfg.bed_target < thermalManager.degTargetBed())
      thermalManager.setTargetBed(cfg.bed_target);
  #endif
}
thisiskeithb commented 1 week ago

Bed should get turned off at same time hotend idle timeout

Yes, but it relies on HOTEND_IDLE_TIMEOUT being enabled and above the set point. There’s no “BED_IDLE_TIMEOUT”-like feature where there’s a timeout if only the bed is heated.

danihmorais commented 1 week ago

Yes, but it relies on HOTEND_IDLE_TIMEOUT being enabled and above the set point. There’s no “BED_IDLE_TIMEOUT”-like feature where there’s a timeout if only the bed is heated.

Exactly.