Skip to content

Commit b4c4420

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 09e052e commit b4c4420

File tree

4 files changed

+69
-26
lines changed

4 files changed

+69
-26
lines changed

Firmware/eeprom.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ if (eeprom_read_byte((uint8_t*)EEPROM_PINDA_TEMP_COMPENSATION) == 0xff) eeprom_u
105105
eeprom_update_dword((uint32_t *)EEPROM_TOTALTIME, 0);
106106
eeprom_update_dword((uint32_t *)EEPROM_FILAMENTUSED, 0);
107107
}
108+
109+
if (eeprom_read_byte((uint8_t*)EEPROM_HEAT_BED_ON_LOAD_FILAMENT) == EEPROM_EMPTY_VALUE) eeprom_update_byte((uint8_t *)EEPROM_HEAT_BED_ON_LOAD_FILAMENT, 1);
108110
}
109111

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

Firmware/eeprom.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,9 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
328328
| 0x0D04 3332 | uint8_t | EEPROM_ECOOL_ENABLE | ffh 255 | ^ | Disable extruder motor scaling for non-farm print | LCD menu | D3 Ax0d04 C1
329329
| ^ | ^ | ^ | 2ah 42 | ^ | Enable extruder motor scaling for non-farm print | ^ | D3 Ax0d04 C1
330330
| 0x0D03 3321 | uint8_t | EEPROM_FW_CRASH_FLAG | 01h 1 | ff/00 | Last FW crash reason (dump_crash_reason) | D21/D22 | D3 Ax0d03 C1
331+
| 0x0D02 3330 | uint8 | EEPROM_HEAT_BED_ON_LOAD_FILAMENT | ffh 255 | ffh 255 | Heat bed on load filament unknown state | LCD menu | D3 Ax0d02 C1
332+
| ^ | ^ | ^ | 00h 0 | ^ | Do not heat bed on load filament | ^ | ^
333+
| ^ | ^ | ^ | 01h 1 | ^ | Heat bed on load filament | ^ | ^
331334
332335
| Address begin | Bit/Type | Name | Valid values | Default/FactoryReset | Description | Gcode/Function| Debug code
333336
| :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--:
@@ -544,8 +547,10 @@ static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE);
544547
#define EEPROM_ECOOL_ENABLE (EEPROM_JOB_ID-1) // uint8_t
545548
#define EEPROM_FW_CRASH_FLAG (EEPROM_ECOOL_ENABLE-1) // uint8_t
546549

550+
#define EEPROM_HEAT_BED_ON_LOAD_FILAMENT (EEPROM_FW_CRASH_FLAG-1) //uint8
551+
547552
//This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items.
548-
#define EEPROM_LAST_ITEM EEPROM_FW_CRASH_FLAG
553+
#define EEPROM_LAST_ITEM EEPROM_HEAT_BED_ON_LOAD_FILAMENT
549554
// !!!!!
550555
// !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!!
551556
// !!!!!

Firmware/ultralcd.cpp

+59-25
Original file line numberDiff line numberDiff line change
@@ -1814,12 +1814,42 @@ bool bFilamentPreheatState;
18141814
bool bFilamentAction=false;
18151815
static bool bFilamentWaitingFlag=false;
18161816

1817+
bool shouldPreheatOnlyNozzle() {
1818+
uint8_t eeprom_setting = eeprom_read_byte((uint8_t*)EEPROM_HEAT_BED_ON_LOAD_FILAMENT);
1819+
if (eeprom_setting != 0)
1820+
return false;
1821+
1822+
switch(eFilamentAction) {
1823+
case FilamentAction::Load:
1824+
case FilamentAction::AutoLoad:
1825+
case FilamentAction::UnLoad:
1826+
case FilamentAction::MmuLoad:
1827+
case FilamentAction::MmuUnLoad:
1828+
case FilamentAction::MmuEject:
1829+
case FilamentAction::MmuCut:
1830+
return true;
1831+
default:
1832+
return false;
1833+
}
1834+
}
1835+
1836+
void lcd_print_target_temps_first_line(){
1837+
lcd_set_cursor(0, 0);
1838+
lcdui_print_temp(LCD_STR_THERMOMETER[0], (int) degHotend(0), (int) degTargetHotend(0));
1839+
lcd_set_cursor(10, 0);
1840+
int targetBedTemp = (int) degTargetBed();
1841+
if (targetBedTemp) {
1842+
lcdui_print_temp(LCD_STR_BEDTEMP[0], (int) degBed(), targetBedTemp);
1843+
} else {
1844+
lcd_space(10);
1845+
}
1846+
}
1847+
18171848
static void mFilamentPrompt()
18181849
{
18191850
uint8_t nLevel;
18201851

1821-
lcd_set_cursor(0,0);
1822-
lcdui_print_temp(LCD_STR_THERMOMETER[0],(int)degHotend(0),(int)degTargetHotend(0));
1852+
lcd_print_target_temps_first_line();
18231853
lcd_puts_at_P(0,1, _i("Press the knob")); ////MSG_PRESS_KNOB c=20
18241854
lcd_set_cursor(0,2);
18251855
switch(eFilamentAction)
@@ -1875,14 +1905,10 @@ if(lcd_clicked())
18751905

18761906
void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
18771907
{
1878-
static int nTargetOld;
1879-
static int nTargetBedOld;
18801908
uint8_t nLevel;
18811909

1882-
nTargetOld = target_temperature[0];
1883-
nTargetBedOld = target_temperature_bed;
1884-
setTargetHotend0((float )nTemp);
1885-
setTargetBed((float) nTempBed);
1910+
setTargetHotend0((float)nTemp);
1911+
if (!shouldPreheatOnlyNozzle()) setTargetBed((float)nTempBed);
18861912

18871913
{
18881914
const FilamentAction action = eFilamentAction;
@@ -2010,8 +2036,7 @@ void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
20102036
}
20112037

20122038
if (bFilamentWaitingFlag) {
2013-
lcd_set_cursor(0, 0);
2014-
lcdui_print_temp(LCD_STR_THERMOMETER[0], (int) degHotend(0), (int) degTargetHotend(0));
2039+
lcd_print_target_temps_first_line();
20152040
}
20162041

20172042
if (lcd_clicked())
@@ -2020,14 +2045,9 @@ void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
20202045
if (!bFilamentPreheatState)
20212046
{
20222047
setTargetHotend0(0.0);
2023-
setTargetBed(0.0);
2048+
if (!isPrintPaused) setTargetBed(0.0);
20242049
menu_back();
20252050
}
2026-
else
2027-
{
2028-
setTargetHotend0((float )nTargetOld);
2029-
setTargetBed((float) nTargetBedOld);
2030-
}
20312051
menu_back();
20322052
if (eFilamentAction == FilamentAction::AutoLoad) eFilamentAction = FilamentAction::None; // i.e. non-autoLoad
20332053
}
@@ -2126,15 +2146,16 @@ void lcd_generic_preheat_menu()
21262146
}
21272147
else
21282148
{
2129-
MENU_ITEM_SUBMENU_P(PSTR("PLA - " STRINGIFY(PLA_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PLA_PREHEAT_HPB_TEMP)),mFilamentItem_PLA);
2130-
MENU_ITEM_SUBMENU_P(PSTR("PET - " STRINGIFY(PET_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PET_PREHEAT_HPB_TEMP)),mFilamentItem_PET);
2131-
MENU_ITEM_SUBMENU_P(PSTR("ASA - " STRINGIFY(ASA_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ASA_PREHEAT_HPB_TEMP)),mFilamentItem_ASA);
2132-
MENU_ITEM_SUBMENU_P(PSTR("PC - " STRINGIFY(PC_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PC_PREHEAT_HPB_TEMP)),mFilamentItem_PC);
2133-
MENU_ITEM_SUBMENU_P(PSTR("PVB - " STRINGIFY(PVB_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PVB_PREHEAT_HPB_TEMP)),mFilamentItem_PVB);
2134-
MENU_ITEM_SUBMENU_P(PSTR("ABS - " STRINGIFY(ABS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ABS_PREHEAT_HPB_TEMP)),mFilamentItem_ABS);
2135-
MENU_ITEM_SUBMENU_P(PSTR("HIPS - " STRINGIFY(HIPS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(HIPS_PREHEAT_HPB_TEMP)),mFilamentItem_HIPS);
2136-
MENU_ITEM_SUBMENU_P(PSTR("PP - " STRINGIFY(PP_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PP_PREHEAT_HPB_TEMP)),mFilamentItem_PP);
2137-
MENU_ITEM_SUBMENU_P(PSTR("FLEX - " STRINGIFY(FLEX_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(FLEX_PREHEAT_HPB_TEMP)),mFilamentItem_FLEX);
2149+
bool bPreheatOnlyNozzle = shouldPreheatOnlyNozzle();
2150+
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);
2151+
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);
2152+
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);
2153+
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);
2154+
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);
2155+
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);
2156+
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);
2157+
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);
2158+
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);
21382159
}
21392160
if (!eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) && eFilamentAction == FilamentAction::Preheat) MENU_ITEM_FUNCTION_P(_T(MSG_COOLDOWN), lcd_cooldown);
21402161
MENU_END();
@@ -5245,6 +5266,9 @@ static void lcd_settings_menu()
52455266
}
52465267
#endif //LCD_BL_PIN
52475268

5269+
//! Enables/disables the bed heating while heating the nozzle for loading/unloading filament
5270+
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);
5271+
52485272
if (farm_mode)
52495273
{
52505274
MENU_ITEM_FUNCTION_P(PSTR("Disable farm mode"), lcd_disable_farm_mode);
@@ -8297,3 +8321,13 @@ void lcd_pinda_temp_compensation_toggle()
82978321
SERIAL_ECHOLN(pinda_temp_compensation);
82988322
}
82998323
#endif //PINDA_TEMP_COMP
8324+
8325+
void lcd_heat_bed_on_load_toggle()
8326+
{
8327+
uint8_t value = eeprom_read_byte((uint8_t*)EEPROM_HEAT_BED_ON_LOAD_FILAMENT);
8328+
if (value > 1)
8329+
value = 1;
8330+
else
8331+
value = !value;
8332+
eeprom_update_byte((uint8_t*)EEPROM_HEAT_BED_ON_LOAD_FILAMENT, value);
8333+
}

Firmware/ultralcd.h

+2
Original file line numberDiff line numberDiff line change
@@ -244,4 +244,6 @@ extern void lcd_experimental_menu();
244244
extern void lcd_pinda_temp_compensation_toggle();
245245
#endif //PINDA_TEMP_COMP
246246

247+
extern void lcd_heat_bed_on_load_toggle();
248+
247249
#endif //ULTRALCD_H

0 commit comments

Comments
 (0)