Skip to content

Commit 1bd1340

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 98d4e69 commit 1bd1340

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
@@ -100,6 +100,8 @@ if (eeprom_read_byte((uint8_t*)EEPROM_PINDA_TEMP_COMPENSATION) == 0xff) eeprom_u
100100

101101
if (eeprom_read_dword((uint32_t*)EEPROM_JOB_ID) == EEPROM_EMPTY_VALUE32)
102102
eeprom_update_dword((uint32_t*)EEPROM_JOB_ID, 0);
103+
104+
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);
103105
}
104106

105107
//! @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
@@ -2122,12 +2122,42 @@ bool bFilamentPreheatState;
21222122
bool bFilamentAction=false;
21232123
static bool bFilamentWaitingFlag=false;
21242124

2125+
bool shouldPreheatOnlyNozzle() {
2126+
uint8_t eeprom_setting = eeprom_read_byte((uint8_t*)EEPROM_HEAT_BED_ON_LOAD_FILAMENT);
2127+
if (eeprom_setting != 0)
2128+
return false;
2129+
2130+
switch(eFilamentAction) {
2131+
case FilamentAction::Load:
2132+
case FilamentAction::AutoLoad:
2133+
case FilamentAction::UnLoad:
2134+
case FilamentAction::MmuLoad:
2135+
case FilamentAction::MmuUnLoad:
2136+
case FilamentAction::MmuEject:
2137+
case FilamentAction::MmuCut:
2138+
return true;
2139+
default:
2140+
return false;
2141+
}
2142+
}
2143+
2144+
void lcd_print_target_temps_first_line(){
2145+
lcd_set_cursor(0, 0);
2146+
lcdui_print_temp(LCD_STR_THERMOMETER[0], (int) degHotend(0), (int) degTargetHotend(0));
2147+
lcd_set_cursor(10, 0);
2148+
int targetBedTemp = (int) degTargetBed();
2149+
if (targetBedTemp) {
2150+
lcdui_print_temp(LCD_STR_BEDTEMP[0], (int) degBed(), targetBedTemp);
2151+
} else {
2152+
lcd_space(10);
2153+
}
2154+
}
2155+
21252156
static void mFilamentPrompt()
21262157
{
21272158
uint8_t nLevel;
21282159

2129-
lcd_set_cursor(0,0);
2130-
lcdui_print_temp(LCD_STR_THERMOMETER[0],(int)degHotend(0),(int)degTargetHotend(0));
2160+
lcd_print_target_temps_first_line();
21312161
lcd_puts_at_P(0,1, _i("Press the knob")); ////MSG_PRESS_KNOB c=20
21322162
lcd_set_cursor(0,2);
21332163
switch(eFilamentAction)
@@ -2183,14 +2213,10 @@ if(lcd_clicked())
21832213

21842214
void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
21852215
{
2186-
static int nTargetOld;
2187-
static int nTargetBedOld;
21882216
uint8_t nLevel;
21892217

2190-
nTargetOld = target_temperature[0];
2191-
nTargetBedOld = target_temperature_bed;
2192-
setTargetHotend0((float )nTemp);
2193-
setTargetBed((float) nTempBed);
2218+
setTargetHotend0((float)nTemp);
2219+
if (!shouldPreheatOnlyNozzle()) setTargetBed((float)nTempBed);
21942220

21952221
{
21962222
const FilamentAction action = eFilamentAction;
@@ -2317,23 +2343,17 @@ void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
23172343
}
23182344
}
23192345

2320-
lcd_set_cursor(0, 0);
2321-
lcdui_print_temp(LCD_STR_THERMOMETER[0], (int) degHotend(0), (int) degTargetHotend(0));
2346+
lcd_print_target_temps_first_line();
23222347

23232348
if (lcd_clicked())
23242349
{
23252350
bFilamentWaitingFlag = false;
23262351
if (!bFilamentPreheatState)
23272352
{
23282353
setTargetHotend0(0.0);
2329-
setTargetBed(0.0);
2354+
if (!isPrintPaused) setTargetBed(0.0);
23302355
menu_back();
23312356
}
2332-
else
2333-
{
2334-
setTargetHotend0((float )nTargetOld);
2335-
setTargetBed((float) nTargetBedOld);
2336-
}
23372357
menu_back();
23382358
if (eFilamentAction == FilamentAction::AutoLoad) eFilamentAction = FilamentAction::None; // i.e. non-autoLoad
23392359
}
@@ -2437,15 +2457,16 @@ void lcd_generic_preheat_menu()
24372457
}
24382458
else
24392459
{
2440-
MENU_ITEM_SUBMENU_P(PSTR("PLA - " STRINGIFY(PLA_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PLA_PREHEAT_HPB_TEMP)),mFilamentItem_PLA);
2441-
MENU_ITEM_SUBMENU_P(PSTR("PET - " STRINGIFY(PET_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PET_PREHEAT_HPB_TEMP)),mFilamentItem_PET);
2442-
MENU_ITEM_SUBMENU_P(PSTR("ASA - " STRINGIFY(ASA_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ASA_PREHEAT_HPB_TEMP)),mFilamentItem_ASA);
2443-
MENU_ITEM_SUBMENU_P(PSTR("PC - " STRINGIFY(PC_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PC_PREHEAT_HPB_TEMP)),mFilamentItem_PC);
2444-
MENU_ITEM_SUBMENU_P(PSTR("PVB - " STRINGIFY(PVB_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PVB_PREHEAT_HPB_TEMP)),mFilamentItem_PVB);
2445-
MENU_ITEM_SUBMENU_P(PSTR("ABS - " STRINGIFY(ABS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ABS_PREHEAT_HPB_TEMP)),mFilamentItem_ABS);
2446-
MENU_ITEM_SUBMENU_P(PSTR("HIPS - " STRINGIFY(HIPS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(HIPS_PREHEAT_HPB_TEMP)),mFilamentItem_HIPS);
2447-
MENU_ITEM_SUBMENU_P(PSTR("PP - " STRINGIFY(PP_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PP_PREHEAT_HPB_TEMP)),mFilamentItem_PP);
2448-
MENU_ITEM_SUBMENU_P(PSTR("FLEX - " STRINGIFY(FLEX_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(FLEX_PREHEAT_HPB_TEMP)),mFilamentItem_FLEX);
2460+
bool bPreheatOnlyNozzle = shouldPreheatOnlyNozzle();
2461+
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);
2462+
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);
2463+
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);
2464+
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);
2465+
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);
2466+
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);
2467+
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);
2468+
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);
2469+
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);
24492470
}
24502471
if (!eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) && eFilamentAction == FilamentAction::Preheat) MENU_ITEM_FUNCTION_P(_T(MSG_COOLDOWN), lcd_cooldown);
24512472
MENU_END();
@@ -5726,6 +5747,9 @@ static void lcd_settings_menu()
57265747
}
57275748
#endif //LCD_BL_PIN
57285749

5750+
//! Enables/disables the bed heating while heating the nozzle for loading/unloading filament
5751+
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);
5752+
57295753
if (farm_mode)
57305754
{
57315755
MENU_ITEM_FUNCTION_P(PSTR("Disable farm mode"), lcd_disable_farm_mode);
@@ -9007,3 +9031,13 @@ void lcd_pinda_temp_compensation_toggle()
90079031
SERIAL_ECHOLN(pinda_temp_compensation);
90089032
}
90099033
#endif //PINDA_TEMP_COMP
9034+
9035+
void lcd_heat_bed_on_load_toggle()
9036+
{
9037+
uint8_t value = eeprom_read_byte((uint8_t*)EEPROM_HEAT_BED_ON_LOAD_FILAMENT);
9038+
if (value > 1)
9039+
value = 1;
9040+
else
9041+
value = !value;
9042+
eeprom_update_byte((uint8_t*)EEPROM_HEAT_BED_ON_LOAD_FILAMENT, value);
9043+
}

Firmware/ultralcd.h

+2
Original file line numberDiff line numberDiff line change
@@ -257,4 +257,6 @@ extern void lcd_experimental_menu();
257257
extern void lcd_pinda_temp_compensation_toggle();
258258
#endif //PINDA_TEMP_COMP
259259

260+
extern void lcd_heat_bed_on_load_toggle();
261+
260262
#endif //ULTRALCD_H

0 commit comments

Comments
 (0)