Skip to content

Commit 7dd8c6c

Browse files
author
Bjoern Kerler
committed
Add clogging prevention if previous filament had higher temp on unload than filament on load
1 parent acf08f9 commit 7dd8c6c

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
}
@@ -169,6 +172,7 @@ void filament_gcodes::M70X_process_user_response(PreheatStatus::Result res, uint
169172
switch (res) {
170173
case PreheatStatus::Result::DoneHasFilament: {
171174
auto filament = config_store().get_filament_type(target_extruder);
175+
config_store().set_previous_filament_type(target_extruder, filament);
172176
auto preheat_temp = filament::get_description(filament).nozzle_preheat;
173177
thermalManager.setTargetHotend(preheat_temp, 0);
174178
break;

src/persistent_stores/store_instances/config_store/store_definition.cpp

+56
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,62 @@ void CurrentStore::set_filament_type([[maybe_unused]] uint8_t index, filament::T
526526
#endif
527527
}
528528

529+
filament::Type CurrentStore::get_previous_filament_type([[maybe_unused]] uint8_t index) {
530+
#if EXTRUDERS <= 1
531+
assert(index == 0);
532+
return filament_prev_type_0.get();
533+
#else
534+
switch (index) {
535+
case 0:
536+
return filament_prev_type_0.get();
537+
case 1:
538+
return filament_prev_type_1.get();
539+
case 2:
540+
return filament_prev_type_2.get();
541+
case 3:
542+
return filament_prev_type_3.get();
543+
case 4:
544+
return filament_prev_type_4.get();
545+
case 5:
546+
return filament_prev_type_5.get();
547+
default:
548+
assert(false && "invalid index");
549+
return {};
550+
}
551+
#endif
552+
}
553+
554+
void CurrentStore::set_previous_filament_type([[maybe_unused]] uint8_t index, filament::Type value) {
555+
#if EXTRUDERS <= 1
556+
assert(index == 0);
557+
filament_type_0.set(value);
558+
#else
559+
switch (index) {
560+
case 0:
561+
filament_prev_type_0.set(value);
562+
break;
563+
case 1:
564+
filament_prev_type_1.set(value);
565+
break;
566+
case 2:
567+
filament_prev_type_2.set(value);
568+
break;
569+
case 3:
570+
filament_prev_type_3.set(value);
571+
break;
572+
case 4:
573+
filament_prev_type_4.set(value);
574+
break;
575+
case 5:
576+
filament_prev_type_5.set(value);
577+
break;
578+
default:
579+
assert(false && "invalid index");
580+
return;
581+
}
582+
#endif
583+
}
584+
529585
float CurrentStore::get_nozzle_diameter([[maybe_unused]] uint8_t index) {
530586
#if HOTENDS <= 1
531587
assert(index == 0);

src/persistent_stores/store_instances/config_store/store_definition.hpp

+11
Original file line numberDiff line numberDiff line change
@@ -261,8 +261,19 @@ struct CurrentStore : public journal::CurrentStoreConfig<journal::Backend, backe
261261
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Type 5")> filament_type_5;
262262
#endif
263263

264+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 0")> filament_prev_type_0;
265+
#if EXTRUDERS > 1 // for now only doing one ifdef for simplicity
266+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 1")> filament_prev_type_1;
267+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 2")> filament_prev_type_2;
268+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 3")> filament_prev_type_3;
269+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 4")> filament_prev_type_4;
270+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 5")> filament_prev_type_5;
271+
#endif
272+
264273
filament::Type get_filament_type(uint8_t index);
265274
void set_filament_type(uint8_t index, filament::Type value);
275+
filament::Type get_previous_filament_type(uint8_t index);
276+
void set_previous_filament_type(uint8_t index, filament::Type value);
266277

267278
StoreItem<bool, defaults::bool_false, journal::hash("Heatup Bed")> heatup_bed;
268279

0 commit comments

Comments
 (0)