Skip to content

Commit 04fbaf4

Browse files
author
Bjoern Kerler
committed
Add clogging prevention if previous filament had higher temp on unload than filament on load
1 parent 8a788ae commit 04fbaf4

File tree

3 files changed

+72
-1
lines changed

3 files changed

+72
-1
lines changed

src/marlin_stubs/pause/M701_2.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ using namespace filament_gcodes;
3838
bool filament_gcodes::load_unload([[maybe_unused]] LoadUnloadMode type, filament_gcodes::Func f_load_unload, pause::Settings &rSettings) {
3939
float disp_temp = marlin_vars()->active_hotend().display_nozzle;
4040
float targ_temp = Temperature::degTargetHotend(rSettings.GetExtruder());
41-
41+
float previous_filament_temp = filament::get_description(config_store().get_previous_filament_type(rSettings.GetExtruder())).nozzle;
42+
if (previous_filament_temp > disp_temp) {
43+
targ_temp = previous_filament_temp;
44+
}
4245
if (disp_temp > targ_temp) {
4346
thermalManager.setTargetHotend(disp_temp, rSettings.GetExtruder());
4447
}
@@ -188,6 +191,7 @@ void filament_gcodes::M70X_process_user_response(PreheatStatus::Result res, uint
188191
switch (res) {
189192
case PreheatStatus::Result::DoneHasFilament: {
190193
auto filament = config_store().get_filament_type(target_extruder);
194+
config_store().set_previous_filament_type(target_extruder, filament);
191195
auto preheat_temp = filament::get_description(filament).nozzle_preheat;
192196
thermalManager.setTargetHotend(preheat_temp, 0);
193197
break;

src/persistent_stores/store_instances/config_store/store_definition.cpp

+56
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,62 @@ void CurrentStore::set_filament_type([[maybe_unused]] uint8_t index, filament::T
567567
#endif
568568
}
569569

570+
filament::Type CurrentStore::get_previous_filament_type([[maybe_unused]] uint8_t index) {
571+
#if EXTRUDERS <= 1
572+
assert(index == 0);
573+
return filament_prev_type_0.get();
574+
#else
575+
switch (index) {
576+
case 0:
577+
return filament_prev_type_0.get();
578+
case 1:
579+
return filament_prev_type_1.get();
580+
case 2:
581+
return filament_prev_type_2.get();
582+
case 3:
583+
return filament_prev_type_3.get();
584+
case 4:
585+
return filament_prev_type_4.get();
586+
case 5:
587+
return filament_prev_type_5.get();
588+
default:
589+
assert(false && "invalid index");
590+
return {};
591+
}
592+
#endif
593+
}
594+
595+
void CurrentStore::set_previous_filament_type([[maybe_unused]] uint8_t index, filament::Type value) {
596+
#if EXTRUDERS <= 1
597+
assert(index == 0);
598+
filament_type_0.set(value);
599+
#else
600+
switch (index) {
601+
case 0:
602+
filament_prev_type_0.set(value);
603+
break;
604+
case 1:
605+
filament_prev_type_1.set(value);
606+
break;
607+
case 2:
608+
filament_prev_type_2.set(value);
609+
break;
610+
case 3:
611+
filament_prev_type_3.set(value);
612+
break;
613+
case 4:
614+
filament_prev_type_4.set(value);
615+
break;
616+
case 5:
617+
filament_prev_type_5.set(value);
618+
break;
619+
default:
620+
assert(false && "invalid index");
621+
return;
622+
}
623+
#endif
624+
}
625+
570626
float CurrentStore::get_nozzle_diameter([[maybe_unused]] uint8_t index) {
571627
#if HOTENDS <= 1
572628
assert(index == 0);

src/persistent_stores/store_instances/config_store/store_definition.hpp

+11
Original file line numberDiff line numberDiff line change
@@ -304,8 +304,19 @@ struct CurrentStore
304304
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Type 5")> filament_type_5;
305305
#endif
306306

307+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 0")> filament_prev_type_0;
308+
#if EXTRUDERS > 1 // for now only doing one ifdef for simplicity
309+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 1")> filament_prev_type_1;
310+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 2")> filament_prev_type_2;
311+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 3")> filament_prev_type_3;
312+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 4")> filament_prev_type_4;
313+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 5")> filament_prev_type_5;
314+
#endif
315+
307316
filament::Type get_filament_type(uint8_t index);
308317
void set_filament_type(uint8_t index, filament::Type value);
318+
filament::Type get_previous_filament_type(uint8_t index);
319+
void set_previous_filament_type(uint8_t index, filament::Type value);
309320

310321
StoreItem<bool, false, journal::hash("Heatup Bed")> heatup_bed;
311322

0 commit comments

Comments
 (0)