|
|
@ -37,7 +37,7 @@
|
|
|
|
#include "../../feature/bedlevel/bedlevel.h"
|
|
|
|
#include "../../feature/bedlevel/bedlevel.h"
|
|
|
|
|
|
|
|
|
|
|
|
static int16_t ubl_storage_slot = 0,
|
|
|
|
static int16_t ubl_storage_slot = 0,
|
|
|
|
custom_hotend_temp = 190,
|
|
|
|
custom_hotend_temp = 150,
|
|
|
|
side_points = 3,
|
|
|
|
side_points = 3,
|
|
|
|
ubl_fillin_amount = 5,
|
|
|
|
ubl_fillin_amount = 5,
|
|
|
|
ubl_height_amount = 1;
|
|
|
|
ubl_height_amount = 1;
|
|
|
@ -603,6 +603,51 @@ void _menu_ubl_tools() {
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if ENABLED(UBL_MESH_WIZARD)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* UBL Mesh Wizard - One-click mesh creation with or without a probe
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
void _lcd_ubl_mesh_wizard() {
|
|
|
|
|
|
|
|
char ubl_lcd_gcode[30];
|
|
|
|
|
|
|
|
#if HAS_HEATED_BED && HAS_HOTEND
|
|
|
|
|
|
|
|
sprintf_P(ubl_lcd_gcode, PSTR("M1004B%iH%iS%i"), custom_bed_temp, custom_hotend_temp, ubl_storage_slot);
|
|
|
|
|
|
|
|
#elif HAS_HOTEND
|
|
|
|
|
|
|
|
sprintf_P(ubl_lcd_gcode, PSTR("M1004H%iS%i"), custom_hotend_temp, ubl_storage_slot);
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
sprintf_P(ubl_lcd_gcode, PSTR("M1004S%i"), ubl_storage_slot);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
queue.inject(ubl_lcd_gcode);
|
|
|
|
|
|
|
|
ui.return_to_status();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void _menu_ubl_mesh_wizard() {
|
|
|
|
|
|
|
|
const int16_t total_slots = settings.calc_num_meshes();
|
|
|
|
|
|
|
|
START_MENU();
|
|
|
|
|
|
|
|
BACK_ITEM(MSG_UBL_LEVEL_BED);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if HAS_HOTEND
|
|
|
|
|
|
|
|
EDIT_ITEM(int3, MSG_UBL_HOTEND_TEMP_CUSTOM, &custom_hotend_temp, HEATER_0_MINTEMP + 20, thermalManager.hotend_max_target(0));
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if HAS_HEATED_BED
|
|
|
|
|
|
|
|
EDIT_ITEM(int3, MSG_UBL_BED_TEMP_CUSTOM, &custom_bed_temp, BED_MINTEMP + 20, BED_MAX_TARGET);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EDIT_ITEM(int3, MSG_UBL_STORAGE_SLOT, &ubl_storage_slot, 0, total_slots);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ACTION_ITEM(MSG_UBL_MESH_WIZARD, _lcd_ubl_mesh_wizard);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if ENABLED(G26_MESH_VALIDATION)
|
|
|
|
|
|
|
|
SUBMENU(MSG_UBL_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ACTION_ITEM(MSG_INFO_SCREEN, ui.return_to_status);
|
|
|
|
|
|
|
|
END_MENU();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* UBL System submenu
|
|
|
|
* UBL System submenu
|
|
|
|
*
|
|
|
|
*
|
|
|
@ -626,6 +671,9 @@ void _lcd_ubl_level_bed() {
|
|
|
|
#if ENABLED(G26_MESH_VALIDATION)
|
|
|
|
#if ENABLED(G26_MESH_VALIDATION)
|
|
|
|
SUBMENU(MSG_UBL_STEP_BY_STEP_MENU, _lcd_ubl_step_by_step);
|
|
|
|
SUBMENU(MSG_UBL_STEP_BY_STEP_MENU, _lcd_ubl_step_by_step);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if ENABLED(UBL_MESH_WIZARD)
|
|
|
|
|
|
|
|
SUBMENU(MSG_UBL_MESH_WIZARD, _menu_ubl_mesh_wizard);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
ACTION_ITEM(MSG_UBL_MESH_EDIT, _ubl_goto_map_screen);
|
|
|
|
ACTION_ITEM(MSG_UBL_MESH_EDIT, _ubl_goto_map_screen);
|
|
|
|
SUBMENU(MSG_UBL_STORAGE_MESH_MENU, _lcd_ubl_storage_mesh);
|
|
|
|
SUBMENU(MSG_UBL_STORAGE_MESH_MENU, _lcd_ubl_storage_mesh);
|
|
|
|
SUBMENU(MSG_UBL_OUTPUT_MAP, _lcd_ubl_output_map);
|
|
|
|
SUBMENU(MSG_UBL_OUTPUT_MAP, _lcd_ubl_output_map);
|
|
|
|