Skip to content

Commit 104a156

Browse files
Do not heat the bed, on load/unload
If during a paused print, the preheat is canceled, keep the bed target temperature Display bed temperatures only if bed is also heated Remove not needed variables nTargetOld and nTargetBedOld from the mFilamentItem function Define new Setting "HeatBedOnLoad" [Yes/No]
1 parent fea1520 commit 104a156

File tree

4 files changed

+70
-26
lines changed

4 files changed

+70
-26
lines changed

Firmware/eeprom.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ void eeprom_init()
5757
eeprom_init_default_dword((uint32_t*)EEPROM_TOTALTIME, 0);
5858
eeprom_init_default_dword((uint32_t*)EEPROM_FILAMENTUSED, 0);
5959
eeprom_init_default_byte((uint8_t*)EEPROM_MMU_CUTTER_ENABLED, 0);
60+
61+
eeprom_init_default_byte((uint8_t*)EEPROM_HEAT_BED_ON_LOAD_FILAMENT, 1);
62+
6063
}
6164

6265
//! @brief Get default sheet name for index

Firmware/eeprom.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,9 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
344344
| 0x0CAD 3245 | uint8 | EEPROM_FSENSOR_JAM_DETECTION | 01h 1 | ff/01 | fsensor pat9125 jam detection feature | LCD menu | D3 Ax0cad C1
345345
| 0x0CAC 3244 | uint8 | EEPROM_MMU_ENABLED | 01h 1 | ff/01 | MMU enabled | LCD menu | D3 Ax0cac C1
346346
| 0x0CA8 3240 | uint32 | EEPROM_TOTAL_TOOLCHANGE_COUNT | ??? | ff ff ff ffh | MMU toolchange counter over printers lifetime | LCD statistic| D3 Ax0ca8 C4
347+
| 0x0CA7 3239 | uint8 | EEPROM_HEAT_BED_ON_LOAD_FILAMENT | ffh 255 | ffh 255 | Heat bed on load filament unknown state | LCD menu | D3 Ax0d02 C1
348+
| ^ | ^ | ^ | 00h 0 | ^ | Do not heat bed on load filament | ^ | ^
349+
| ^ | ^ | ^ | 01h 1 | ^ | Heat bed on load filament | ^ | ^
347350
348351
|Address begin|Bit/Type | Name | Valid values | Default/FactoryReset | Description |Gcode/Function| Debug code
349352
| :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--:
@@ -570,8 +573,10 @@ static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE);
570573
#define EEPROM_FSENSOR_JAM_DETECTION (EEPROM_TEMP_MODEL_E-1) // uint8_t
571574
#define EEPROM_MMU_ENABLED (EEPROM_FSENSOR_JAM_DETECTION-1) // uint8_t
572575
#define EEPROM_TOTAL_TOOLCHANGE_COUNT (EEPROM_MMU_ENABLED-4)
576+
#define EEPROM_HEAT_BED_ON_LOAD_FILAMENT (EEPROM_TOTAL_TOOLCHANGE_COUNT-1) //uint8
577+
573578
//This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items.
574-
#define EEPROM_LAST_ITEM EEPROM_TOTAL_TOOLCHANGE_COUNT
579+
#define EEPROM_LAST_ITEM EEPROM_HEAT_BED_ON_LOAD_FILAMENT
575580
// !!!!!
576581
// !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!!
577582
// !!!!!

Firmware/ultralcd.cpp

+59-25
Original file line numberDiff line numberDiff line change
@@ -1769,12 +1769,42 @@ bool bFilamentPreheatState;
17691769
bool bFilamentAction=false;
17701770
static bool bFilamentWaitingFlag=false;
17711771

1772+
bool shouldPreheatOnlyNozzle() {
1773+
uint8_t eeprom_setting = eeprom_read_byte((uint8_t*)EEPROM_HEAT_BED_ON_LOAD_FILAMENT);
1774+
if (eeprom_setting != 0)
1775+
return false;
1776+
1777+
switch(eFilamentAction) {
1778+
case FilamentAction::Load:
1779+
case FilamentAction::AutoLoad:
1780+
case FilamentAction::UnLoad:
1781+
case FilamentAction::MmuLoad:
1782+
case FilamentAction::MmuUnLoad:
1783+
case FilamentAction::MmuEject:
1784+
case FilamentAction::MmuCut:
1785+
return true;
1786+
default:
1787+
return false;
1788+
}
1789+
}
1790+
1791+
void lcd_print_target_temps_first_line(){
1792+
lcd_set_cursor(0, 0);
1793+
lcdui_print_temp(LCD_STR_THERMOMETER[0], (int) degHotend(0), (int) degTargetHotend(0));
1794+
lcd_set_cursor(10, 0);
1795+
int targetBedTemp = (int) degTargetBed();
1796+
if (targetBedTemp) {
1797+
lcdui_print_temp(LCD_STR_BEDTEMP[0], (int) degBed(), targetBedTemp);
1798+
} else {
1799+
lcd_space(10);
1800+
}
1801+
}
1802+
17721803
static void mFilamentPrompt()
17731804
{
17741805
uint8_t nLevel;
17751806

1776-
lcd_set_cursor(0,0);
1777-
lcdui_print_temp(LCD_STR_THERMOMETER[0],(int)degHotend(0),(int)degTargetHotend(0));
1807+
lcd_print_target_temps_first_line();
17781808
lcd_puts_at_P(0,1, _i("Press the knob")); ////MSG_PRESS_KNOB c=20
17791809
lcd_set_cursor(0,2);
17801810
switch(eFilamentAction)
@@ -1836,14 +1866,10 @@ switch(eFilamentAction)
18361866

18371867
void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
18381868
{
1839-
static int nTargetOld;
1840-
static int nTargetBedOld;
18411869
uint8_t nLevel;
18421870

1843-
nTargetOld = target_temperature[0];
1844-
nTargetBedOld = target_temperature_bed;
1845-
setTargetHotend0((float )nTemp);
1846-
setTargetBed((float) nTempBed);
1871+
setTargetHotend0((float)nTemp);
1872+
if (!shouldPreheatOnlyNozzle()) setTargetBed((float)nTempBed);
18471873

18481874
{
18491875
const FilamentAction action = eFilamentAction;
@@ -1978,8 +2004,7 @@ void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
19782004
}
19792005

19802006
if (bFilamentWaitingFlag) {
1981-
lcd_set_cursor(0, 0);
1982-
lcdui_print_temp(LCD_STR_THERMOMETER[0], (int) degHotend(0), (int) degTargetHotend(0));
2007+
lcd_print_target_temps_first_line();
19832008
}
19842009

19852010
if (lcd_clicked())
@@ -1988,14 +2013,9 @@ void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
19882013
if (!bFilamentPreheatState)
19892014
{
19902015
setTargetHotend0(0.0);
1991-
setTargetBed(0.0);
2016+
if (!isPrintPaused) setTargetBed(0.0);
19922017
menu_back();
19932018
}
1994-
else
1995-
{
1996-
setTargetHotend0((float )nTargetOld);
1997-
setTargetBed((float) nTargetBedOld);
1998-
}
19992019
menu_back();
20002020
if (eFilamentAction == FilamentAction::AutoLoad) eFilamentAction = FilamentAction::None; // i.e. non-autoLoad
20012021
}
@@ -2094,15 +2114,16 @@ void lcd_generic_preheat_menu()
20942114
}
20952115
else
20962116
{
2097-
MENU_ITEM_SUBMENU_P(PSTR("PLA - " STRINGIFY(PLA_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PLA_PREHEAT_HPB_TEMP)),mFilamentItem_PLA);
2098-
MENU_ITEM_SUBMENU_P(PSTR("PET - " STRINGIFY(PET_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PET_PREHEAT_HPB_TEMP)),mFilamentItem_PET);
2099-
MENU_ITEM_SUBMENU_P(PSTR("ASA - " STRINGIFY(ASA_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ASA_PREHEAT_HPB_TEMP)),mFilamentItem_ASA);
2100-
MENU_ITEM_SUBMENU_P(PSTR("PC - " STRINGIFY(PC_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PC_PREHEAT_HPB_TEMP)),mFilamentItem_PC);
2101-
MENU_ITEM_SUBMENU_P(PSTR("PVB - " STRINGIFY(PVB_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PVB_PREHEAT_HPB_TEMP)),mFilamentItem_PVB);
2102-
MENU_ITEM_SUBMENU_P(PSTR("ABS - " STRINGIFY(ABS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ABS_PREHEAT_HPB_TEMP)),mFilamentItem_ABS);
2103-
MENU_ITEM_SUBMENU_P(PSTR("HIPS - " STRINGIFY(HIPS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(HIPS_PREHEAT_HPB_TEMP)),mFilamentItem_HIPS);
2104-
MENU_ITEM_SUBMENU_P(PSTR("PP - " STRINGIFY(PP_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PP_PREHEAT_HPB_TEMP)),mFilamentItem_PP);
2105-
MENU_ITEM_SUBMENU_P(PSTR("FLEX - " STRINGIFY(FLEX_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(FLEX_PREHEAT_HPB_TEMP)),mFilamentItem_FLEX);
2117+
bool bPreheatOnlyNozzle = shouldPreheatOnlyNozzle();
2118+
MENU_ITEM_SUBMENU_P(bPreheatOnlyNozzle ? PSTR("PLA - " STRINGIFY(PLA_PREHEAT_HOTEND_TEMP)) : PSTR("PLA - " STRINGIFY(PLA_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PLA_PREHEAT_HPB_TEMP)) , mFilamentItem_PLA);
2119+
MENU_ITEM_SUBMENU_P(bPreheatOnlyNozzle ? PSTR("PET - " STRINGIFY(PET_PREHEAT_HOTEND_TEMP)) : PSTR("PET - " STRINGIFY(PET_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PET_PREHEAT_HPB_TEMP)) , mFilamentItem_PET);
2120+
MENU_ITEM_SUBMENU_P(bPreheatOnlyNozzle ? PSTR("ASA - " STRINGIFY(ASA_PREHEAT_HOTEND_TEMP)) : PSTR("ASA - " STRINGIFY(ASA_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ASA_PREHEAT_HPB_TEMP)) , mFilamentItem_ASA);
2121+
MENU_ITEM_SUBMENU_P(bPreheatOnlyNozzle ? PSTR("PC - " STRINGIFY(PC_PREHEAT_HOTEND_TEMP)) : PSTR("PC - " STRINGIFY(PC_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PC_PREHEAT_HPB_TEMP)) , mFilamentItem_PC);
2122+
MENU_ITEM_SUBMENU_P(bPreheatOnlyNozzle ? PSTR("PVB - " STRINGIFY(PVB_PREHEAT_HOTEND_TEMP)) : PSTR("PVB - " STRINGIFY(PVB_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PVB_PREHEAT_HPB_TEMP)) , mFilamentItem_PVB);
2123+
MENU_ITEM_SUBMENU_P(bPreheatOnlyNozzle ? PSTR("ABS - " STRINGIFY(ABS_PREHEAT_HOTEND_TEMP)) : PSTR("ABS - " STRINGIFY(ABS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ABS_PREHEAT_HPB_TEMP)) , mFilamentItem_ABS);
2124+
MENU_ITEM_SUBMENU_P(bPreheatOnlyNozzle ? PSTR("HIPS - " STRINGIFY(HIPS_PREHEAT_HOTEND_TEMP)): PSTR("HIPS - " STRINGIFY(HIPS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(HIPS_PREHEAT_HPB_TEMP)), mFilamentItem_HIPS);
2125+
MENU_ITEM_SUBMENU_P(bPreheatOnlyNozzle ? PSTR("PP - " STRINGIFY(PP_PREHEAT_HOTEND_TEMP)) : PSTR("PP - " STRINGIFY(PP_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PP_PREHEAT_HPB_TEMP)) , mFilamentItem_PP);
2126+
MENU_ITEM_SUBMENU_P(bPreheatOnlyNozzle ? PSTR("FLEX - " STRINGIFY(FLEX_PREHEAT_HOTEND_TEMP)): PSTR("FLEX - " STRINGIFY(FLEX_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(FLEX_PREHEAT_HPB_TEMP)), mFilamentItem_FLEX);
21062127
}
21072128
if (!eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) && eFilamentAction == FilamentAction::Preheat) MENU_ITEM_FUNCTION_P(_T(MSG_COOLDOWN), lcd_cooldown);
21082129
MENU_END();
@@ -4637,6 +4658,9 @@ static void lcd_settings_menu()
46374658
}
46384659
#endif //LCD_BL_PIN
46394660

4661+
//! Enables/disables the bed heating while heating the nozzle for loading/unloading filament
4662+
MENU_ITEM_TOGGLE_P(_N("HeatBedOnLoad"), eeprom_read_byte((uint8_t *)EEPROM_HEAT_BED_ON_LOAD_FILAMENT) ? _T(MSG_YES) : _T(MSG_NO), lcd_heat_bed_on_load_toggle);
4663+
46404664
if (farm_mode)
46414665
{
46424666
MENU_ITEM_FUNCTION_P(PSTR("Disable farm mode"), lcd_disable_farm_mode);
@@ -7672,3 +7696,13 @@ void lcd_pinda_temp_compensation_toggle()
76727696
SERIAL_ECHOLN(pinda_temp_compensation);
76737697
}
76747698
#endif //PINDA_TEMP_COMP
7699+
7700+
void lcd_heat_bed_on_load_toggle()
7701+
{
7702+
uint8_t value = eeprom_read_byte((uint8_t*)EEPROM_HEAT_BED_ON_LOAD_FILAMENT);
7703+
if (value > 1)
7704+
value = 1;
7705+
else
7706+
value = !value;
7707+
eeprom_update_byte((uint8_t*)EEPROM_HEAT_BED_ON_LOAD_FILAMENT, value);
7708+
}

Firmware/ultralcd.h

+2
Original file line numberDiff line numberDiff line change
@@ -251,4 +251,6 @@ uint8_t lcdui_print_extruder(void);
251251
extern void lcd_pinda_temp_compensation_toggle();
252252
#endif //PINDA_TEMP_COMP
253253

254+
extern void lcd_heat_bed_on_load_toggle();
255+
254256
#endif //ULTRALCD_H

0 commit comments

Comments
 (0)