|
@@ -1674,6 +1674,348 @@ void kill_screen(const char* lcd_msg) {
|
1674
|
1674
|
END_MENU();
|
1675
|
1675
|
}
|
1676
|
1676
|
|
|
1677
|
+ #if ENABLED(AUTO_BED_LEVELING_UBL)
|
|
1678
|
+
|
|
1679
|
+ void _lcd_ubl_level_bed();
|
|
1680
|
+
|
|
1681
|
+ int UBL_STORAGE_SLOT = 0;
|
|
1682
|
+ int CUSTOM_BED_TEMP = 50;
|
|
1683
|
+ int CUSTOM_HOTEND_TEMP = 190;
|
|
1684
|
+ int SIDE_POINTS = 3;
|
|
1685
|
+ int UBL_FILLIN_AMOUNT = 5;
|
|
1686
|
+ int UBL_HEIGHT_AMOUNT;
|
|
1687
|
+ int map_type;
|
|
1688
|
+
|
|
1689
|
+ char UBL_LCD_GCODE [30];
|
|
1690
|
+
|
|
1691
|
+ /**
|
|
1692
|
+ * UBL Build Custom Mesh Command
|
|
1693
|
+ */
|
|
1694
|
+ void _lcd_ubl_build_custom_mesh() {
|
|
1695
|
+ enqueue_and_echo_command("G28");
|
|
1696
|
+ #if (WATCH_THE_BED)
|
|
1697
|
+ sprintf_P(UBL_LCD_GCODE, PSTR("M190 S%i"), CUSTOM_BED_TEMP);
|
|
1698
|
+ enqueue_and_echo_command(UBL_LCD_GCODE);
|
|
1699
|
+ #endif
|
|
1700
|
+ sprintf_P(UBL_LCD_GCODE, PSTR("M109 S%i"), CUSTOM_HOTEND_TEMP);
|
|
1701
|
+ enqueue_and_echo_command(UBL_LCD_GCODE);
|
|
1702
|
+ enqueue_and_echo_command("G29 P1");
|
|
1703
|
+ }
|
|
1704
|
+
|
|
1705
|
+ /**
|
|
1706
|
+ * UBL Custom Mesh submenu
|
|
1707
|
+ */
|
|
1708
|
+ void _lcd_ubl_custom_mesh() {
|
|
1709
|
+ START_MENU();
|
|
1710
|
+ MENU_BACK(MSG_UBL_BUILD_MESH_MENU);
|
|
1711
|
+ MENU_ITEM_EDIT(int3, MSG_UBL_CUSTOM_HOTEND_TEMP, &CUSTOM_HOTEND_TEMP, EXTRUDE_MINTEMP, (HEATER_0_MAXTEMP - 10));
|
|
1712
|
+ #if (WATCH_THE_BED)
|
|
1713
|
+ MENU_ITEM_EDIT(int3, MSG_UBL_CUSTOM_BED_TEMP, &CUSTOM_BED_TEMP, BED_MINTEMP, (BED_MAXTEMP - 5));
|
|
1714
|
+ #endif
|
|
1715
|
+ MENU_ITEM(function, MSG_UBL_BUILD_CUSTOM_MESH, _lcd_ubl_build_custom_mesh);
|
|
1716
|
+ END_MENU();
|
|
1717
|
+ }
|
|
1718
|
+
|
|
1719
|
+ /**
|
|
1720
|
+ * UBL Adjust Mesh Height Command
|
|
1721
|
+ */
|
|
1722
|
+ void _lcd_ubl_adjust_height_cmd() {
|
|
1723
|
+ if (UBL_HEIGHT_AMOUNT < 0) {
|
|
1724
|
+ // Convert to positive for the `sprintf_P` string.
|
|
1725
|
+ UBL_HEIGHT_AMOUNT = (UBL_HEIGHT_AMOUNT - (UBL_HEIGHT_AMOUNT * 2)); // Convert to positive
|
|
1726
|
+ sprintf_P(UBL_LCD_GCODE, PSTR("G29 N Z-.%i"), UBL_HEIGHT_AMOUNT);
|
|
1727
|
+ // Convert back to negative to preserve the user setting.
|
|
1728
|
+ UBL_HEIGHT_AMOUNT = (UBL_HEIGHT_AMOUNT - (UBL_HEIGHT_AMOUNT * 2)); // Convert back to negative
|
|
1729
|
+ }
|
|
1730
|
+ else {
|
|
1731
|
+ sprintf_P(UBL_LCD_GCODE, PSTR("G29 N Z.%i"), UBL_HEIGHT_AMOUNT);
|
|
1732
|
+ }
|
|
1733
|
+ enqueue_and_echo_command(UBL_LCD_GCODE);
|
|
1734
|
+ }
|
|
1735
|
+
|
|
1736
|
+ /**
|
|
1737
|
+ * UBL Adjust Mesh Height submenu
|
|
1738
|
+ */
|
|
1739
|
+ void _lcd_ubl_height_adjust_menu() {
|
|
1740
|
+ START_MENU();
|
|
1741
|
+ MENU_BACK(MSG_UBL_EDIT_MESH_MENU);
|
|
1742
|
+ MENU_ITEM_EDIT(int3, MSG_UBL_MESH_HEIGHT_AMOUNT, &UBL_HEIGHT_AMOUNT, -9, 9);
|
|
1743
|
+ MENU_ITEM(function, MSG_UBL_MESH_HEIGHT_ADJUST, _lcd_ubl_adjust_height_cmd);
|
|
1744
|
+ MENU_ITEM(submenu, MSG_WATCH, lcd_status_screen);
|
|
1745
|
+ END_MENU();
|
|
1746
|
+ }
|
|
1747
|
+
|
|
1748
|
+ /**
|
|
1749
|
+ * UBL Edit Mesh submenu
|
|
1750
|
+ */
|
|
1751
|
+ void _lcd_ubl_edit_mesh() {
|
|
1752
|
+ START_MENU();
|
|
1753
|
+ MENU_BACK(MSG_UBL_TOOLS);
|
|
1754
|
+ MENU_BACK(MSG_UBL_LEVEL_BED);
|
|
1755
|
+ MENU_ITEM(gcode, MSG_UBL_FINE_TUNE_ALL, PSTR("G29 P4 R O"));
|
|
1756
|
+ MENU_ITEM(gcode, MSG_UBL_FINE_TUNE_CLOSEST, PSTR("G29 P4 O"));
|
|
1757
|
+ MENU_ITEM(submenu, MSG_UBL_MESH_HEIGHT_ADJUST, _lcd_ubl_height_adjust_menu);
|
|
1758
|
+ MENU_ITEM(submenu, MSG_WATCH, lcd_status_screen);
|
|
1759
|
+ END_MENU();
|
|
1760
|
+ }
|
|
1761
|
+
|
|
1762
|
+ /**
|
|
1763
|
+ * UBL Validate Custom Mesh Command
|
|
1764
|
+ */
|
|
1765
|
+ void _lcd_ubl_validate_custom_mesh() {
|
|
1766
|
+ enqueue_and_echo_command("G28");
|
|
1767
|
+ #if (WATCH_THE_BED)
|
|
1768
|
+ sprintf_P(UBL_LCD_GCODE, PSTR("G26 C B%i H%i P"), CUSTOM_BED_TEMP, CUSTOM_HOTEND_TEMP);
|
|
1769
|
+ #else
|
|
1770
|
+ sprintf_P(UBL_LCD_GCODE, PSTR("G26 C B0 H%i P"), CUSTOM_HOTEND_TEMP);
|
|
1771
|
+ #endif
|
|
1772
|
+ enqueue_and_echo_command(UBL_LCD_GCODE);
|
|
1773
|
+ }
|
|
1774
|
+
|
|
1775
|
+ /**
|
|
1776
|
+ * UBL Validate Mesh submenu
|
|
1777
|
+ */
|
|
1778
|
+ void _lcd_ubl_validate_mesh() {
|
|
1779
|
+ START_MENU();
|
|
1780
|
+ MENU_BACK(MSG_UBL_TOOLS);
|
|
1781
|
+ #if (WATCH_THE_BED)
|
|
1782
|
+ MENU_ITEM(gcode, MSG_UBL_VALIDATE_PLA_MESH, PSTR("G28\nG26 C B" STRINGIFY(PREHEAT_1_TEMP_BED)
|
|
1783
|
+ " H" STRINGIFY(PREHEAT_1_TEMP_HOTEND) " P"));
|
|
1784
|
+ MENU_ITEM(gcode, MSG_UBL_VALIDATE_ABS_MESH, PSTR("G28\nG26 C B" STRINGIFY(PREHEAT_2_TEMP_BED)
|
|
1785
|
+ " H" STRINGIFY(PREHEAT_2_TEMP_HOTEND) " P"));
|
|
1786
|
+ #else
|
|
1787
|
+ MENU_ITEM(gcode, MSG_UBL_VALIDATE_PLA_MESH, PSTR("G28\nG26 C B0 H" STRINGIFY(PREHEAT_1_TEMP_HOTEND) " P"));
|
|
1788
|
+ MENU_ITEM(gcode, MSG_UBL_VALIDATE_ABS_MESH, PSTR("G28\nG26 C B0 H" STRINGIFY(PREHEAT_2_TEMP_HOTEND) " P"));
|
|
1789
|
+ #endif
|
|
1790
|
+ MENU_ITEM(function, MSG_UBL_VALIDATE_CUSTOM_MESH, _lcd_ubl_validate_custom_mesh);
|
|
1791
|
+ MENU_ITEM(submenu, MSG_WATCH, lcd_status_screen);
|
|
1792
|
+ END_MENU();
|
|
1793
|
+ }
|
|
1794
|
+
|
|
1795
|
+ /**
|
|
1796
|
+ * UBL Grid Leveling Command
|
|
1797
|
+ */
|
|
1798
|
+ void _lcd_ubl_grid_level_cmd() {
|
|
1799
|
+ sprintf_P(UBL_LCD_GCODE, PSTR("G29 J%i"), SIDE_POINTS);
|
|
1800
|
+ enqueue_and_echo_command(UBL_LCD_GCODE);
|
|
1801
|
+ }
|
|
1802
|
+
|
|
1803
|
+ /**
|
|
1804
|
+ * UBL Grid Leveling submenu
|
|
1805
|
+ */
|
|
1806
|
+ void _lcd_ubl_grid_level() {
|
|
1807
|
+ START_MENU();
|
|
1808
|
+ MENU_BACK(MSG_UBL_TOOLS);
|
|
1809
|
+ MENU_ITEM_EDIT(int3, MSG_UBL_SIDE_POINTS, &SIDE_POINTS, 2, 6);
|
|
1810
|
+ MENU_ITEM(function, MSG_UBL_MESH_LEVEL, _lcd_ubl_grid_level_cmd);
|
|
1811
|
+ END_MENU();
|
|
1812
|
+ }
|
|
1813
|
+
|
|
1814
|
+ /**
|
|
1815
|
+ * UBL Mesh Leveling submenu
|
|
1816
|
+ */
|
|
1817
|
+ void _lcd_ubl_mesh_leveling() {
|
|
1818
|
+ START_MENU();
|
|
1819
|
+ MENU_BACK(MSG_UBL_TOOLS);
|
|
1820
|
+ MENU_ITEM(gcode, MSG_UBL_3POINT_MESH_LEVELING, PSTR("G29 T"));
|
|
1821
|
+ MENU_ITEM(submenu, MSG_UBL_GRID_MESH_LEVELING, _lcd_ubl_grid_level);
|
|
1822
|
+ MENU_ITEM(submenu, MSG_WATCH, lcd_status_screen);
|
|
1823
|
+ END_MENU();
|
|
1824
|
+ }
|
|
1825
|
+
|
|
1826
|
+ /**
|
|
1827
|
+ * UBL Fill-in Amount Mesh Command
|
|
1828
|
+ */
|
|
1829
|
+ void _lcd_ubl_fillin_amount_cmd() {
|
|
1830
|
+ sprintf_P(UBL_LCD_GCODE, PSTR("G29 P3 R C.%i N"), UBL_FILLIN_AMOUNT);
|
|
1831
|
+ enqueue_and_echo_command(UBL_LCD_GCODE);
|
|
1832
|
+ }
|
|
1833
|
+
|
|
1834
|
+ /**
|
|
1835
|
+ * UBL Smart Fill-in Command
|
|
1836
|
+ */
|
|
1837
|
+ void _lcd_ubl_smart_fillin_cmd() {
|
|
1838
|
+ sprintf_P(UBL_LCD_GCODE, PSTR("G29 P3 N O%i"), map_type);
|
|
1839
|
+ enqueue_and_echo_command(UBL_LCD_GCODE);
|
|
1840
|
+ }
|
|
1841
|
+
|
|
1842
|
+ /**
|
|
1843
|
+ * UBL Fill-in Mesh submenu
|
|
1844
|
+ */
|
|
1845
|
+ void _lcd_ubl_fillin_menu() {
|
|
1846
|
+ START_MENU();
|
|
1847
|
+ MENU_BACK(MSG_UBL_BUILD_MESH_MENU);
|
|
1848
|
+ MENU_ITEM_EDIT(int3, MSG_UBL_FILLIN_AMOUNT, &UBL_FILLIN_AMOUNT, 0, 9);
|
|
1849
|
+ MENU_ITEM(function, MSG_UBL_FILLIN_MESH, _lcd_ubl_fillin_amount_cmd);
|
|
1850
|
+ MENU_ITEM(function, MSG_UBL_SMART_FILLIN, _lcd_ubl_smart_fillin_cmd);
|
|
1851
|
+ MENU_ITEM(gcode, MSG_UBL_MANUAL_FILLIN, PSTR("G29 P2 B O"));
|
|
1852
|
+ MENU_ITEM(submenu, MSG_WATCH, lcd_status_screen);
|
|
1853
|
+ END_MENU();
|
|
1854
|
+ }
|
|
1855
|
+
|
|
1856
|
+ void _lcd_ubl_invalidate() {
|
|
1857
|
+ ubl.invalidate();
|
|
1858
|
+ SERIAL_PROTOCOLLNPGM("Mesh invalidated.");
|
|
1859
|
+ }
|
|
1860
|
+
|
|
1861
|
+ /**
|
|
1862
|
+ * UBL Build Mesh submenu
|
|
1863
|
+ */
|
|
1864
|
+ void _lcd_ubl_build_mesh() {
|
|
1865
|
+ int GRID_NUM_POINTS = GRID_MAX_POINTS_X * GRID_MAX_POINTS_Y ;
|
|
1866
|
+ START_MENU();
|
|
1867
|
+ MENU_BACK(MSG_UBL_TOOLS);
|
|
1868
|
+ #if (WATCH_THE_BED)
|
|
1869
|
+ MENU_ITEM(gcode, MSG_UBL_BUILD_PLA_MESH, PSTR("G28\nM190 S" STRINGIFY(PREHEAT_1_TEMP_BED)
|
|
1870
|
+ "\nM109 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND) "\nG29 P1\nM104 S0\nM140 S0"));
|
|
1871
|
+ MENU_ITEM(gcode, MSG_UBL_BUILD_ABS_MESH, PSTR("G28\nM190 S" STRINGIFY(PREHEAT_1_TEMP_BED)
|
|
1872
|
+ "\nM109 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND) "\nG29 P1\nM104 S0\nM140 S0"));
|
|
1873
|
+ #else
|
|
1874
|
+ MENU_ITEM(gcode, MSG_UBL_BUILD_PLA_MESH, PSTR("G28\nM109 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND)
|
|
1875
|
+ "\nG29 P1\nM104 S0"));
|
|
1876
|
+ MENU_ITEM(gcode, MSG_UBL_BUILD_ABS_MESH, PSTR("G28\nM109 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND)
|
|
1877
|
+ "\nG29 P1\nM104 S0"));
|
|
1878
|
+ #endif
|
|
1879
|
+ MENU_ITEM(submenu, MSG_UBL_BUILD_CUSTOM_MESH, _lcd_ubl_custom_mesh);
|
|
1880
|
+ MENU_ITEM(gcode, MSG_UBL_BUILD_COLD_MESH, PSTR("G28\nG29 P1"));
|
|
1881
|
+ MENU_ITEM(submenu, MSG_UBL_FILLIN_MESH, _lcd_ubl_fillin_menu);
|
|
1882
|
+ MENU_ITEM(gcode, MSG_UBL_CONTINUE_MESH, PSTR("G29 P1 C"));
|
|
1883
|
+ MENU_ITEM(function, MSG_UBL_INVALIDATE_ALL, _lcd_ubl_invalidate);
|
|
1884
|
+ MENU_ITEM(gcode, MSG_UBL_INVALIDATE_CLOSEST, PSTR("G29 I"));
|
|
1885
|
+ MENU_ITEM(submenu, MSG_WATCH, lcd_status_screen);
|
|
1886
|
+ END_MENU();
|
|
1887
|
+ }
|
|
1888
|
+
|
|
1889
|
+ /**
|
|
1890
|
+ * UBL Load Mesh Command
|
|
1891
|
+ */
|
|
1892
|
+ void _lcd_ubl_load_mesh_cmd() {
|
|
1893
|
+ sprintf_P(UBL_LCD_GCODE, PSTR("G29 N L%i"), UBL_STORAGE_SLOT);
|
|
1894
|
+ enqueue_and_echo_command(UBL_LCD_GCODE);
|
|
1895
|
+ }
|
|
1896
|
+
|
|
1897
|
+ /**
|
|
1898
|
+ * UBL Save Mesh Command
|
|
1899
|
+ */
|
|
1900
|
+ void _lcd_ubl_save_mesh_cmd() {
|
|
1901
|
+ sprintf_P(UBL_LCD_GCODE, PSTR("G29 N S%i"), UBL_STORAGE_SLOT);
|
|
1902
|
+ enqueue_and_echo_command(UBL_LCD_GCODE);
|
|
1903
|
+ }
|
|
1904
|
+
|
|
1905
|
+ /**
|
|
1906
|
+ * UBL Mesh Storage submenu
|
|
1907
|
+ */
|
|
1908
|
+ void _lcd_ubl_storage_mesh() {
|
|
1909
|
+ START_MENU();
|
|
1910
|
+ MENU_BACK(MSG_UBL_LEVEL_BED);
|
|
1911
|
+ MENU_ITEM_EDIT(int3, MSG_UBL_STORAGE_SLOT, &UBL_STORAGE_SLOT, 0, 9);
|
|
1912
|
+ MENU_ITEM(function, MSG_UBL_LOAD_MESH, _lcd_ubl_load_mesh_cmd);
|
|
1913
|
+ MENU_ITEM(function, MSG_UBL_SAVE_MESH, _lcd_ubl_save_mesh_cmd);
|
|
1914
|
+ END_MENU();
|
|
1915
|
+ }
|
|
1916
|
+
|
|
1917
|
+ /**
|
|
1918
|
+ * UBL Output map Command
|
|
1919
|
+ */
|
|
1920
|
+ void _lcd_ubl_output_map_cmd() {
|
|
1921
|
+ sprintf_P(UBL_LCD_GCODE, PSTR("G29 N O%i"), map_type);
|
|
1922
|
+ enqueue_and_echo_command(UBL_LCD_GCODE);
|
|
1923
|
+ }
|
|
1924
|
+
|
|
1925
|
+ /**
|
|
1926
|
+ * UBL Output map submenu
|
|
1927
|
+ */
|
|
1928
|
+ void _lcd_ubl_output_map() {
|
|
1929
|
+ START_MENU();
|
|
1930
|
+ MENU_BACK(MSG_UBL_LEVEL_BED);
|
|
1931
|
+ MENU_ITEM_EDIT(int3, MSG_UBL_MAP_TYPE, &map_type, 0, 1);
|
|
1932
|
+ if (map_type == 0) MENU_ITEM(function, MSG_UBL_OUTPUT_MAP_HOST, _lcd_ubl_output_map_cmd);
|
|
1933
|
+ if (map_type == 1) MENU_ITEM(function, MSG_UBL_OUTPUT_MAP_CSV, _lcd_ubl_output_map_cmd);
|
|
1934
|
+ END_MENU();
|
|
1935
|
+ }
|
|
1936
|
+
|
|
1937
|
+ /**
|
|
1938
|
+ * UBL Tools submenu
|
|
1939
|
+ */
|
|
1940
|
+ void _lcd_ubl_tools_menu() {
|
|
1941
|
+ START_MENU();
|
|
1942
|
+ MENU_BACK(MSG_UBL_LEVEL_BED);
|
|
1943
|
+ MENU_ITEM(submenu, MSG_UBL_BUILD_MESH_MENU, _lcd_ubl_build_mesh);
|
|
1944
|
+ MENU_ITEM(submenu, MSG_UBL_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
|
|
1945
|
+ MENU_ITEM(submenu, MSG_UBL_EDIT_MESH_MENU, _lcd_ubl_edit_mesh);
|
|
1946
|
+ MENU_ITEM(submenu, MSG_UBL_MESH_LEVELING, _lcd_ubl_mesh_leveling);
|
|
1947
|
+ END_MENU();
|
|
1948
|
+ }
|
|
1949
|
+
|
|
1950
|
+ /**
|
|
1951
|
+ * UBL System submenu
|
|
1952
|
+ *
|
|
1953
|
+ * Prepare
|
|
1954
|
+ * - Unified Bed Leveling
|
|
1955
|
+ * - Activate UBL
|
|
1956
|
+ * - Deactivate UBL
|
|
1957
|
+ * - Mesh Storage
|
|
1958
|
+ * Memory Slot:
|
|
1959
|
+ * Load Bed Mesh
|
|
1960
|
+ * Save Bed Mesh
|
|
1961
|
+ * - Output Map
|
|
1962
|
+ * Map Type:
|
|
1963
|
+ * Output Bed Mesh Host / Output Bed Mesh CSV
|
|
1964
|
+ * - UBL Tools
|
|
1965
|
+ * - Build Mesh
|
|
1966
|
+ * Build PLA Mesh
|
|
1967
|
+ * Build ABS Mesh
|
|
1968
|
+ * - Build Custom Mesh
|
|
1969
|
+ * Hotend Temp:
|
|
1970
|
+ * Bed Temp:
|
|
1971
|
+ * Build Custom Mesh
|
|
1972
|
+ * Info Screen
|
|
1973
|
+ * - Build Cold Mesh
|
|
1974
|
+ * - Fill-in Mesh
|
|
1975
|
+ * Fill-in Mesh
|
|
1976
|
+ * Smart Fill-in
|
|
1977
|
+ * Manual Fill-in
|
|
1978
|
+ * Info Screen
|
|
1979
|
+ * Continue Bed Mesh
|
|
1980
|
+ * Invalidate All
|
|
1981
|
+ * Invalidate Closest
|
|
1982
|
+ * - Validate Mesh
|
|
1983
|
+ * PLA Mesh Validation
|
|
1984
|
+ * ABS Mesh Validation
|
|
1985
|
+ * - Custom Mesh Validation
|
|
1986
|
+ * Hotend Temp:
|
|
1987
|
+ * Bed Temp:
|
|
1988
|
+ * Validate Mesh
|
|
1989
|
+ * Info Screen
|
|
1990
|
+ * - Edit Mesh
|
|
1991
|
+ * Fine Tune All
|
|
1992
|
+ * Fine Tune Closest
|
|
1993
|
+ * - Adjust Mesh Height
|
|
1994
|
+ * Height Amount:
|
|
1995
|
+ * Adjust Mesh Height
|
|
1996
|
+ * Info Screen
|
|
1997
|
+ * - Mesh Leveling
|
|
1998
|
+ * 3-Point Mesh Leveling
|
|
1999
|
+ * - Grid Mesh Leveling
|
|
2000
|
+ * Side points:
|
|
2001
|
+ * Level Mesh
|
|
2002
|
+ * Info Screen
|
|
2003
|
+ * - Output UBL Info
|
|
2004
|
+ */
|
|
2005
|
+
|
|
2006
|
+ void _lcd_ubl_level_bed() {
|
|
2007
|
+ START_MENU();
|
|
2008
|
+ MENU_BACK(MSG_PREPARE);
|
|
2009
|
+ MENU_ITEM(gcode, MSG_UBL_ACTIVATE_MESH, PSTR("G29 A N"));
|
|
2010
|
+ MENU_ITEM(gcode, MSG_UBL_DEACTIVATE_MESH, PSTR("G29 D N"));
|
|
2011
|
+ MENU_ITEM(submenu, MSG_UBL_STORAGE_MESH_MENU, _lcd_ubl_storage_mesh);
|
|
2012
|
+ MENU_ITEM(submenu, MSG_UBL_OUTPUT_MAP, _lcd_ubl_output_map);
|
|
2013
|
+ MENU_ITEM(submenu, MSG_UBL_TOOLS, _lcd_ubl_tools_menu);
|
|
2014
|
+ MENU_ITEM(gcode, MSG_UBL_INFO_UBL, PSTR("G29 W N"));
|
|
2015
|
+ END_MENU();
|
|
2016
|
+ }
|
|
2017
|
+ #endif
|
|
2018
|
+
|
1677
|
2019
|
#endif // LCD_BED_LEVELING || HAS_ABL
|
1678
|
2020
|
|
1679
|
2021
|
/**
|
|
@@ -1716,7 +2058,11 @@ void kill_screen(const char* lcd_msg) {
|
1716
|
2058
|
#if ENABLED(PROBE_MANUALLY)
|
1717
|
2059
|
if (!g29_in_progress)
|
1718
|
2060
|
#endif
|
1719
|
|
- MENU_ITEM(submenu, MSG_LEVEL_BED, lcd_level_bed);
|
|
2061
|
+ #if ENABLED(AUTO_BED_LEVELING_UBL)
|
|
2062
|
+ MENU_ITEM(submenu, MSG_UBL_LEVEL_BED, _lcd_ubl_level_bed);
|
|
2063
|
+ #else
|
|
2064
|
+ MENU_ITEM(submenu, MSG_LEVEL_BED, lcd_level_bed);
|
|
2065
|
+ #endif
|
1720
|
2066
|
|
1721
|
2067
|
#endif
|
1722
|
2068
|
|
|
@@ -2158,7 +2504,7 @@ void kill_screen(const char* lcd_msg) {
|
2158
|
2504
|
#endif
|
2159
|
2505
|
|
2160
|
2506
|
MENU_ITEM(function, MSG_RESTORE_FAILSAFE, lcd_factory_settings);
|
2161
|
|
- END_MENU();
|
|
2507
|
+ END_MENU();
|
2162
|
2508
|
}
|
2163
|
2509
|
|
2164
|
2510
|
/**
|