@ -1667,28 +1667,27 @@ void kill_screen(const char* lcd_msg) {
void _lcd_ubl_level_bed ( ) ;
int UBL_STORAGE_SLOT = 0 ,
CUSTOM_BED_TEMP = 50 ,
CUSTOM_HOTEND_TEMP = 190 ,
SIDE_POINTS = 3 ,
UBL_FILLIN_AMOUNT = 5 ,
UBL_HEIGHT_AMOUNT ,
static int ubl_storage_slot = 0 ,
custom_bed_temp = 50 ,
custom_hotend_temp = 190 ,
side_points = 3 ,
ubl_fillin_amount = 5 ,
ubl_height_amount ,
map_type ;
char UBL_LCD_GCODE [ 30 ] ;
/**
* UBL Build Custom Mesh Command
*/
void _lcd_ubl_build_custom_mesh ( ) {
enqueue_and_echo_command ( " G28 " ) ;
# if (WATCH_THE_BED)
sprintf_P ( UBL_LCD_GCODE , PSTR ( " M190 S%i " ) , CUSTOM_BED_TEMP ) ;
char UBL_LCD_GCODE [ 20 ] ;
enqueue_and_echo_commands_P ( PSTR ( " G28 " ) ) ;
# if WATCH_THE_BED
sprintf_P ( UBL_LCD_GCODE , PSTR ( " M190 S%i " ) , custom_bed_temp ) ;
enqueue_and_echo_command ( UBL_LCD_GCODE ) ;
# endif
sprintf_P ( UBL_LCD_GCODE , PSTR ( " M109 S%i " ) , CUSTOM_HOTEND_TEMP ) ;
sprintf_P ( UBL_LCD_GCODE , PSTR ( " M109 S%i " ) , custom_hotend_temp ) ;
enqueue_and_echo_command ( UBL_LCD_GCODE ) ;
enqueue_and_echo_command ( " G29 P1 " ) ;
enqueue_and_echo_command s_P( PSTR ( " G29 P1 " ) ) ;
}
/**
@ -1697,9 +1696,9 @@ void kill_screen(const char* lcd_msg) {
void _lcd_ubl_custom_mesh ( ) {
START_MENU ( ) ;
MENU_BACK ( MSG_UBL_BUILD_MESH_MENU ) ;
MENU_ITEM_EDIT ( int3 , MSG_UBL_CUSTOM_HOTEND_TEMP , & CUSTOM_HOTEND_TEMP , EXTRUDE_MINTEMP , ( HEATER_0_MAXTEMP - 10 ) ) ;
# if ( WATCH_THE_BED)
MENU_ITEM_EDIT ( int3 , MSG_UBL_CUSTOM_BED_TEMP , & CUSTOM_BED_TEMP , BED_MINTEMP , ( BED_MAXTEMP - 5 ) ) ;
MENU_ITEM_EDIT ( int3 , MSG_UBL_CUSTOM_HOTEND_TEMP , & custom_hotend_temp , EXTRUDE_MINTEMP , ( HEATER_0_MAXTEMP - 10 ) ) ;
# if WATCH_THE_BED
MENU_ITEM_EDIT ( int3 , MSG_UBL_CUSTOM_BED_TEMP , & custom_bed_temp , BED_MINTEMP , ( BED_MAXTEMP - 5 ) ) ;
# endif
MENU_ITEM ( function , MSG_UBL_BUILD_CUSTOM_MESH , _lcd_ubl_build_custom_mesh ) ;
END_MENU ( ) ;
@ -1709,16 +1708,10 @@ void kill_screen(const char* lcd_msg) {
* UBL Adjust Mesh Height Command
*/
void _lcd_ubl_adjust_height_cmd ( ) {
if ( UBL_HEIGHT_AMOUNT < 0 ) {
// Convert to positive for the `sprintf_P` string.
UBL_HEIGHT_AMOUNT = ( UBL_HEIGHT_AMOUNT - ( UBL_HEIGHT_AMOUNT * 2 ) ) ; // Convert to positive
sprintf_P ( UBL_LCD_GCODE , PSTR ( " G29 P6-.%i " ) , UBL_HEIGHT_AMOUNT ) ;
// Convert back to negative to preserve the user setting.
UBL_HEIGHT_AMOUNT = ( UBL_HEIGHT_AMOUNT - ( UBL_HEIGHT_AMOUNT * 2 ) ) ; // Convert back to negative
}
else {
sprintf_P ( UBL_LCD_GCODE , PSTR ( " G29 P6.%i " ) , UBL_HEIGHT_AMOUNT ) ;
}
char UBL_LCD_GCODE [ 16 ] ;
const int ind = ubl_height_amount < 0 ? 6 : 7 ;
strcpy_P ( UBL_LCD_GCODE , PSTR ( " G29 P6- " ) ) ;
sprintf_P ( & UBL_LCD_GCODE [ ind ] , PSTR ( " .%i " ) , abs ( ubl_height_amount ) ) ;
enqueue_and_echo_command ( UBL_LCD_GCODE ) ;
}
@ -1728,7 +1721,7 @@ void kill_screen(const char* lcd_msg) {
void _lcd_ubl_height_adjust_menu ( ) {
START_MENU ( ) ;
MENU_BACK ( MSG_UBL_EDIT_MESH_MENU ) ;
MENU_ITEM_EDIT ( int3 , MSG_UBL_MESH_HEIGHT_AMOUNT , & UBL_HEIGHT_AMOUNT , - 9 , 9 ) ;
MENU_ITEM_EDIT ( int3 , MSG_UBL_MESH_HEIGHT_AMOUNT , & ubl_height_amount , - 9 , 9 ) ;
MENU_ITEM ( function , MSG_UBL_MESH_HEIGHT_ADJUST , _lcd_ubl_adjust_height_cmd ) ;
MENU_ITEM ( submenu , MSG_WATCH , lcd_status_screen ) ;
END_MENU ( ) ;
@ -1752,12 +1745,15 @@ void kill_screen(const char* lcd_msg) {
* UBL Validate Custom Mesh Command
*/
void _lcd_ubl_validate_custom_mesh ( ) {
enqueue_and_echo_command ( " G28 " ) ;
# if (WATCH_THE_BED)
sprintf_P ( UBL_LCD_GCODE , PSTR ( " G26 C B%i H%i P " ) , CUSTOM_BED_TEMP , CUSTOM_HOTEND_TEMP ) ;
char UBL_LCD_GCODE [ 24 ] ;
const int temp =
# if WATCH_THE_BED
custom_bed_temp
# else
sprintf_P ( UBL_LCD_GCODE , PSTR ( " G26 C B0 H%i P " ) , CUSTOM_HOTEND_TEMP ) ;
0
# endif
;
sprintf_P ( UBL_LCD_GCODE , PSTR ( " G28 \n G26 C B%i H%i P " ) , temp , custom_hotend_temp ) ;
enqueue_and_echo_command ( UBL_LCD_GCODE ) ;
}
@ -1767,11 +1763,9 @@ void kill_screen(const char* lcd_msg) {
void _lcd_ubl_validate_mesh ( ) {
START_MENU ( ) ;
MENU_BACK ( MSG_UBL_TOOLS ) ;
# if (WATCH_THE_BED)
MENU_ITEM ( gcode , MSG_UBL_VALIDATE_PLA_MESH , PSTR ( " G28 \n G26 C B " STRINGIFY ( PREHEAT_1_TEMP_BED )
" H " STRINGIFY ( PREHEAT_1_TEMP_HOTEND ) " P " ) ) ;
MENU_ITEM ( gcode , MSG_UBL_VALIDATE_ABS_MESH , PSTR ( " G28 \n G26 C B " STRINGIFY ( PREHEAT_2_TEMP_BED )
" H " STRINGIFY ( PREHEAT_2_TEMP_HOTEND ) " P " ) ) ;
# if WATCH_THE_BED
MENU_ITEM ( gcode , MSG_UBL_VALIDATE_PLA_MESH , PSTR ( " G28 \n G26 C B " STRINGIFY ( PREHEAT_1_TEMP_BED ) " H " STRINGIFY ( PREHEAT_1_TEMP_HOTEND ) " P " ) ) ;
MENU_ITEM ( gcode , MSG_UBL_VALIDATE_ABS_MESH , PSTR ( " G28 \n G26 C B " STRINGIFY ( PREHEAT_2_TEMP_BED ) " H " STRINGIFY ( PREHEAT_2_TEMP_HOTEND ) " P " ) ) ;
# else
MENU_ITEM ( gcode , MSG_UBL_VALIDATE_PLA_MESH , PSTR ( " G28 \n G26 C B0 H " STRINGIFY ( PREHEAT_1_TEMP_HOTEND ) " P " ) ) ;
MENU_ITEM ( gcode , MSG_UBL_VALIDATE_ABS_MESH , PSTR ( " G28 \n G26 C B0 H " STRINGIFY ( PREHEAT_2_TEMP_HOTEND ) " P " ) ) ;
@ -1785,7 +1779,8 @@ void kill_screen(const char* lcd_msg) {
* UBL Grid Leveling Command
*/
void _lcd_ubl_grid_level_cmd ( ) {
sprintf_P ( UBL_LCD_GCODE , PSTR ( " G29 J%i " ) , SIDE_POINTS ) ;
char UBL_LCD_GCODE [ 10 ] ;
sprintf_P ( UBL_LCD_GCODE , PSTR ( " G29 J%i " ) , side_points ) ;
enqueue_and_echo_command ( UBL_LCD_GCODE ) ;
}
@ -1795,7 +1790,7 @@ void kill_screen(const char* lcd_msg) {
void _lcd_ubl_grid_level ( ) {
START_MENU ( ) ;
MENU_BACK ( MSG_UBL_TOOLS ) ;
MENU_ITEM_EDIT ( int3 , MSG_UBL_SIDE_POINTS , & SIDE_POINTS , 2 , 6 ) ;
MENU_ITEM_EDIT ( int3 , MSG_UBL_SIDE_POINTS , & side_points , 2 , 6 ) ;
MENU_ITEM ( function , MSG_UBL_MESH_LEVEL , _lcd_ubl_grid_level_cmd ) ;
END_MENU ( ) ;
}
@ -1816,7 +1811,8 @@ void kill_screen(const char* lcd_msg) {
* UBL Fill - in Amount Mesh Command
*/
void _lcd_ubl_fillin_amount_cmd ( ) {
sprintf_P ( UBL_LCD_GCODE , PSTR ( " G29 P3 R C.%i " ) , UBL_FILLIN_AMOUNT ) ;
char UBL_LCD_GCODE [ 16 ] ;
sprintf_P ( UBL_LCD_GCODE , PSTR ( " G29 P3 R C.%i " ) , ubl_fillin_amount ) ;
enqueue_and_echo_command ( UBL_LCD_GCODE ) ;
}
@ -1824,6 +1820,7 @@ void kill_screen(const char* lcd_msg) {
* UBL Smart Fill - in Command
*/
void _lcd_ubl_smart_fillin_cmd ( ) {
char UBL_LCD_GCODE [ 12 ] ;
sprintf_P ( UBL_LCD_GCODE , PSTR ( " G29 P3 T%i " ) , map_type ) ;
enqueue_and_echo_command ( UBL_LCD_GCODE ) ;
}
@ -1834,7 +1831,7 @@ void kill_screen(const char* lcd_msg) {
void _lcd_ubl_fillin_menu ( ) {
START_MENU ( ) ;
MENU_BACK ( MSG_UBL_BUILD_MESH_MENU ) ;
MENU_ITEM_EDIT ( int3 , MSG_UBL_FILLIN_AMOUNT , & UBL_FILLIN_AMOUNT , 0 , 9 ) ;
MENU_ITEM_EDIT ( int3 , MSG_UBL_FILLIN_AMOUNT , & ubl_fillin_amount , 0 , 9 ) ;
MENU_ITEM ( function , MSG_UBL_FILLIN_MESH , _lcd_ubl_fillin_amount_cmd ) ;
MENU_ITEM ( function , MSG_UBL_SMART_FILLIN , _lcd_ubl_smart_fillin_cmd ) ;
MENU_ITEM ( gcode , MSG_UBL_MANUAL_FILLIN , PSTR ( " G29 P2 B T0 " ) ) ;
@ -1853,16 +1850,36 @@ void kill_screen(const char* lcd_msg) {
void _lcd_ubl_build_mesh ( ) {
START_MENU ( ) ;
MENU_BACK ( MSG_UBL_TOOLS ) ;
# if (WATCH_THE_BED)
MENU_ITEM ( gcode , MSG_UBL_BUILD_PLA_MESH , PSTR ( " G28 \n M190 S " STRINGIFY ( PREHEAT_1_TEMP_BED )
" \n M109 S " STRINGIFY ( PREHEAT_1_TEMP_HOTEND ) " \n G29 P1 \n M104 S0 \n M140 S0 " ) ) ;
MENU_ITEM ( gcode , MSG_UBL_BUILD_ABS_MESH , PSTR ( " G28 \n M190 S " STRINGIFY ( PREHEAT_1_TEMP_BED )
" \n M109 S " STRINGIFY ( PREHEAT_1_TEMP_HOTEND ) " \n G29 P1 \n M104 S0 \n M140 S0 " ) ) ;
# if WATCH_THE_BED
MENU_ITEM ( gcode , MSG_UBL_BUILD_PLA_MESH , PSTR (
" G28 \n "
" M190 S " STRINGIFY ( PREHEAT_1_TEMP_BED ) " \n "
" M109 S " STRINGIFY ( PREHEAT_1_TEMP_HOTEND ) " \n "
" G29 P1 \n "
" M104 S0 \n "
" M140 S0 "
) ) ;
MENU_ITEM ( gcode , MSG_UBL_BUILD_ABS_MESH , PSTR (
" G28 \n "
" M190 S " STRINGIFY ( PREHEAT_2_TEMP_BED ) " \n "
" M109 S " STRINGIFY ( PREHEAT_2_TEMP_HOTEND ) " \n "
" G29 P1 \n "
" M104 S0 \n "
" M140 S0 "
) ) ;
# else
MENU_ITEM ( gcode , MSG_UBL_BUILD_PLA_MESH , PSTR ( " G28 \n M109 S " STRINGIFY ( PREHEAT_1_TEMP_HOTEND )
" \n G29 P1 \n M104 S0 " ) ) ;
MENU_ITEM ( gcode , MSG_UBL_BUILD_ABS_MESH , PSTR ( " G28 \n M109 S " STRINGIFY ( PREHEAT_1_TEMP_HOTEND )
" \n G29 P1 \n M104 S0 " ) ) ;
MENU_ITEM ( gcode , MSG_UBL_BUILD_PLA_MESH , PSTR (
" G28 \n "
" M109 S " STRINGIFY ( PREHEAT_1_TEMP_HOTEND ) " \n "
" G29 P1 \n "
" M104 S0 "
) ) ;
MENU_ITEM ( gcode , MSG_UBL_BUILD_ABS_MESH , PSTR (
" G28 \n "
" M109 S " STRINGIFY ( PREHEAT_2_TEMP_HOTEND ) " \n "
" G29 P1 \n "
" M104 S0 "
) ) ;
# endif
MENU_ITEM ( submenu , MSG_UBL_BUILD_CUSTOM_MESH , _lcd_ubl_custom_mesh ) ;
MENU_ITEM ( gcode , MSG_UBL_BUILD_COLD_MESH , PSTR ( " G28 \n G29 P1 " ) ) ;
@ -1878,7 +1895,8 @@ void kill_screen(const char* lcd_msg) {
* UBL Load Mesh Command
*/
void _lcd_ubl_load_mesh_cmd ( ) {
sprintf_P ( UBL_LCD_GCODE , PSTR ( " G29 L%i " ) , UBL_STORAGE_SLOT ) ;
char UBL_LCD_GCODE [ 8 ] ;
sprintf_P ( UBL_LCD_GCODE , PSTR ( " G29 L%i " ) , ubl_storage_slot ) ;
enqueue_and_echo_command ( UBL_LCD_GCODE ) ;
}
@ -1886,7 +1904,8 @@ void kill_screen(const char* lcd_msg) {
* UBL Save Mesh Command
*/
void _lcd_ubl_save_mesh_cmd ( ) {
sprintf_P ( UBL_LCD_GCODE , PSTR ( " G29 S%i " ) , UBL_STORAGE_SLOT ) ;
char UBL_LCD_GCODE [ 8 ] ;
sprintf_P ( UBL_LCD_GCODE , PSTR ( " G29 S%i " ) , ubl_storage_slot ) ;
enqueue_and_echo_command ( UBL_LCD_GCODE ) ;
}
@ -1896,7 +1915,7 @@ void kill_screen(const char* lcd_msg) {
void _lcd_ubl_storage_mesh ( ) {
START_MENU ( ) ;
MENU_BACK ( MSG_UBL_LEVEL_BED ) ;
MENU_ITEM_EDIT ( int3 , MSG_UBL_STORAGE_SLOT , & UBL_STORAGE_SLOT , 0 , 9 ) ;
MENU_ITEM_EDIT ( int3 , MSG_UBL_STORAGE_SLOT , & ubl_storage_slot , 0 , 9 ) ;
MENU_ITEM ( function , MSG_UBL_LOAD_MESH , _lcd_ubl_load_mesh_cmd ) ;
MENU_ITEM ( function , MSG_UBL_SAVE_MESH , _lcd_ubl_save_mesh_cmd ) ;
END_MENU ( ) ;
@ -1906,6 +1925,7 @@ void kill_screen(const char* lcd_msg) {
* UBL Output map Command
*/
void _lcd_ubl_output_map_cmd ( ) {
char UBL_LCD_GCODE [ 10 ] ;
sprintf_P ( UBL_LCD_GCODE , PSTR ( " G29 T%i " ) , map_type ) ;
enqueue_and_echo_command ( UBL_LCD_GCODE ) ;
}
@ -2052,7 +2072,7 @@ void kill_screen(const char* lcd_msg) {
MENU_ITEM ( submenu , MSG_LEVEL_BED , lcd_level_bed ) ;
# endif
# endif
# endif // LCD_BED_LEVELING || HAS_ABL
# if HAS_M206_COMMAND
//