Skip to content

Commit bdc65cb

Browse files
author
Bjoern Kerler
committed
Add clogging prevention if previous filament had higher temp on unload than filament on load
1 parent 0de68b8 commit bdc65cb

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
@@ -528,6 +528,62 @@ void CurrentStore::set_filament_type([[maybe_unused]] uint8_t index, filament::T
528528
#endif
529529
}
530530

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

src/persistent_stores/store_instances/config_store/store_definition.hpp

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

292+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 0")> filament_prev_type_0;
293+
#if EXTRUDERS > 1 // for now only doing one ifdef for simplicity
294+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 1")> filament_prev_type_1;
295+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 2")> filament_prev_type_2;
296+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 3")> filament_prev_type_3;
297+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 4")> filament_prev_type_4;
298+
StoreItem<filament::Type, defaults::filament_type, journal::hash("Filament Previous Type 5")> filament_prev_type_5;
299+
#endif
300+
292301
filament::Type get_filament_type(uint8_t index);
293302
void set_filament_type(uint8_t index, filament::Type value);
303+
filament::Type get_previous_filament_type(uint8_t index);
304+
void set_previous_filament_type(uint8_t index, filament::Type value);
294305

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

0 commit comments

Comments
 (0)