Синбад 6 Опубліковано: 5 квітня 2019 Поділитись Опубліковано: 5 квітня 2019 Каждому 3D печатнику не хватает возможностей меню своего принтера. Мысли о добавлении своих пунктов в меню посещают всех, кто прошёл стадию "печать калибровочного кубика". В Marlin есть возможность добавить свои пункты (кнопки) с привязанными к ним действиями. (речь идёт о Marlin 2.0, я не знаю корректность работы в прошивках 1.х.х) В файле Configuration_adv.h, ближе к концу, есть блок отвечающий за "пользовательское меню, меню пользователя". //#define CUSTOM_USER_MENUS Для активации нужно раскоментировать этот дефайн и заполнить пять пунктов "своего" меню. #define USER_DESC_1 "название пункта 1" #define USER_GCODE_1 "действие 1(G код)" #define USER_DESC_2 "название пункта 2" #define USER_GCODE_2 "действие 2(G код)" #define USER_DESC_3 "название пункта 3" #define USER_GCODE_3 "действие 3(G код)" #define USER_DESC_4 "название пункта 4" #define USER_GCODE_4 "действие 4(G код)" #define USER_DESC_5 "название пункта 5" #define USER_GCODE_5 "действие 5(G код)" Названия латинскими буквами в кавычках, действие: исполняемый G код, или последовательность G кода в кавычках. Если пять пунктов меню вам не нужно, неиспользуемые пункты достаточно закомментировать. В меню принтера появится новый подпункт, в котором содержатся ваши пользовательские пункты меню. Название этого нового пункта задаётся строкой #define CUSTOM_USER_MENU_TITLE "название" Латинскими буквами, в кавычках. Скорее всего эта информация вам известна и вы активно пользуетесь CUSTOM_USER_MENUS. Но в нём возможно задать всего пять пунктов, часто этого мало. Увеличить количество пунктов пользовательского меню несложно. (рекомендуется сделать резервные копии подвергающихся ковырянию файлов) Нужно добавить строки (пример увеличения CUSTOM_USER_MENUS до десяти пунктов) файл ...\Marlin\Configuration_adv.h #define CUSTOM_USER_MENUS #if ENABLED(CUSTOM_USER_MENUS) #define CUSTOM_USER_MENU_TITLE "Commands" //#define USER_SCRIPT_DONE "M117 User Script Done" //#define USER_SCRIPT_AUDIBLE_FEEDBACK //#define USER_SCRIPT_RETURN // Return to status screen after a script #define USER_DESC_1 "KALIBROVKA STOLA" #define USER_GCODE_1 "G29 P1\nG29 P3" #define USER_DESC_2 "SETKA STOLA" #define USER_GCODE_2 "G29 T" #define USER_DESC_3 "ZAPOMNIT' SETKU1" #define USER_GCODE_3 "G29 S1" #define USER_DESC_4 "PROCHEST' SETKU1" #define USER_GCODE_4 "G29 L1" #define USER_DESC_5 "ZAPOMNIT' SETKU2" #define USER_GCODE_5 "G29 S2" #define USER_DESC_6 "PROCHEST' SETKU2" #define USER_GCODE_6 "G29 L1" #define USER_DESC_7 "VVOD PLASTIK" #define USER_GCODE_7 "G92 E0\nG1 E650 F6000\nG92 E0\nG1 E50 F180\nG92 E0" #define USER_DESC_8 "UBRAT' PLASTIK" #define USER_GCODE_8 "G92 E0\nG1 E-700 F6000\nG92 E0" //#define USER_DESC_9 "9" //#define USER_GCODE_9 "G0" //#define USER_DESC_10 "10" //#define USER_GCODE_10 "G0" #endif Начиная с шестого пункта - добавлено. файл ...\Marlin\src\lcd\menu\menu_custom.cpp #if defined(USER_DESC_1) && defined(USER_GCODE_1) void lcd_user_gcode_1() { _lcd_user_gcode(PSTR(USER_GCODE_1 _DONE_SCRIPT)); } #endif #if defined(USER_DESC_2) && defined(USER_GCODE_2) void lcd_user_gcode_2() { _lcd_user_gcode(PSTR(USER_GCODE_2 _DONE_SCRIPT)); } #endif #if defined(USER_DESC_3) && defined(USER_GCODE_3) void lcd_user_gcode_3() { _lcd_user_gcode(PSTR(USER_GCODE_3 _DONE_SCRIPT)); } #endif #if defined(USER_DESC_4) && defined(USER_GCODE_4) void lcd_user_gcode_4() { _lcd_user_gcode(PSTR(USER_GCODE_4 _DONE_SCRIPT)); } #endif #if defined(USER_DESC_5) && defined(USER_GCODE_5) void lcd_user_gcode_5() { _lcd_user_gcode(PSTR(USER_GCODE_5 _DONE_SCRIPT)); } #endif #if defined(USER_DESC_6) && defined(USER_GCODE_6) void lcd_user_gcode_6() { _lcd_user_gcode(PSTR(USER_GCODE_6 _DONE_SCRIPT)); } #endif #if defined(USER_DESC_7) && defined(USER_GCODE_7) void lcd_user_gcode_7() { _lcd_user_gcode(PSTR(USER_GCODE_7 _DONE_SCRIPT)); } #endif #if defined(USER_DESC_8) && defined(USER_GCODE_8) void lcd_user_gcode_8() { _lcd_user_gcode(PSTR(USER_GCODE_8 _DONE_SCRIPT)); } #endif #if defined(USER_DESC_9) && defined(USER_GCODE_9) void lcd_user_gcode_9() { _lcd_user_gcode(PSTR(USER_GCODE_9 _DONE_SCRIPT)); } #endif #if defined(USER_DESC_10) && defined(USER_GCODE_10) void lcd_user_gcode_10() { _lcd_user_gcode(PSTR(USER_GCODE_10 _DONE_SCRIPT)); } #endif void menu_user() { START_MENU(); MENU_BACK(MSG_MAIN); #if defined(USER_DESC_1) && defined(USER_GCODE_1) MENU_ITEM(function, USER_DESC_1, lcd_user_gcode_1); #endif #if defined(USER_DESC_2) && defined(USER_GCODE_2) MENU_ITEM(function, USER_DESC_2, lcd_user_gcode_2); #endif #if defined(USER_DESC_3) && defined(USER_GCODE_3) MENU_ITEM(function, USER_DESC_3, lcd_user_gcode_3); #endif #if defined(USER_DESC_4) && defined(USER_GCODE_4) MENU_ITEM(function, USER_DESC_4, lcd_user_gcode_4); #endif #if defined(USER_DESC_5) && defined(USER_GCODE_5) MENU_ITEM(function, USER_DESC_5, lcd_user_gcode_5); #endif #if defined(USER_DESC_6) && defined(USER_GCODE_6) MENU_ITEM(function, USER_DESC_6, lcd_user_gcode_6); #endif #if defined(USER_DESC_7) && defined(USER_GCODE_7) MENU_ITEM(function, USER_DESC_7, lcd_user_gcode_7); #endif #if defined(USER_DESC_8) && defined(USER_GCODE_8) MENU_ITEM(function, USER_DESC_8, lcd_user_gcode_8); #endif #if defined(USER_DESC_9) && defined(USER_GCODE_9) MENU_ITEM(function, USER_DESC_9, lcd_user_gcode_9); #endif #if defined(USER_DESC_10) && defined(USER_GCODE_10) MENU_ITEM(function, USER_DESC_10, lcd_user_gcode_10); #endif END_MENU(); } #endif // HAS_LCD_MENU && CUSTOM_USER_MENUS В двух группах, начиная с шестого пункта- добавлено. файл ...\Marlin\src\inc\SanityCheck.h #if ENABLED(CUSTOM_USER_MENUS) #ifdef USER_GCODE_1 constexpr char _chr1 = USER_GCODE_1[strlen(USER_GCODE_1) - 1]; static_assert(_chr1 != '\n' && _chr1 != '\r', "USER_GCODE_1 cannot have a newline at the end. Please remove it."); #endif #ifdef USER_GCODE_2 constexpr char _chr2 = USER_GCODE_2[strlen(USER_GCODE_2) - 1]; static_assert(_chr2 != '\n' && _chr2 != '\r', "USER_GCODE_2 cannot have a newline at the end. Please remove it."); #endif #ifdef USER_GCODE_3 constexpr char _chr3 = USER_GCODE_3[strlen(USER_GCODE_3) - 1]; static_assert(_chr3 != '\n' && _chr3 != '\r', "USER_GCODE_3 cannot have a newline at the end. Please remove it."); #endif #ifdef USER_GCODE_4 constexpr char _chr4 = USER_GCODE_4[strlen(USER_GCODE_4) - 1]; static_assert(_chr4 != '\n' && _chr4 != '\r', "USER_GCODE_4 cannot have a newline at the end. Please remove it."); #endif #ifdef USER_GCODE_5 constexpr char _chr5 = USER_GCODE_5[strlen(USER_GCODE_5) - 1]; static_assert(_chr5 != '\n' && _chr5 != '\r', "USER_GCODE_5 cannot have a newline at the end. Please remove it."); #endif #ifdef USER_GCODE_6 constexpr char _chr6 = USER_GCODE_6[strlen(USER_GCODE_6) - 1]; static_assert(_chr6 != '\n' && _chr6 != '\r', "USER_GCODE_6 cannot have a newline at the end. Please remove it."); #endif #ifdef USER_GCODE_7 constexpr char _chr7 = USER_GCODE_7[strlen(USER_GCODE_7) - 1]; static_assert(_chr7 != '\n' && _chr7 != '\r', "USER_GCODE_7 cannot have a newline at the end. Please remove it."); #endif #ifdef USER_GCODE_8 constexpr char _chr8 = USER_GCODE_8[strlen(USER_GCODE_8) - 1]; static_assert(_chr8 != '\n' && _chr8 != '\r', "USER_GCODE_8 cannot have a newline at the end. Please remove it."); #endif #ifdef USER_GCODE_9 constexpr char _chr9 = USER_GCODE_9[strlen(USER_GCODE_9) - 1]; static_assert(_chr9 != '\n' && _chr9 != '\r', "USER_GCODE_9 cannot have a newline at the end. Please remove it."); #endif #ifdef USER_GCODE_10 constexpr char _chr10 = USER_GCODE_10[strlen(USER_GCODE_10) - 1]; static_assert(_chr10 != '\n' && _chr10 != '\r', "USER_GCODE_10 cannot have a newline at the end. Please remove it."); #endif #endif Начиная с шестого пункта - добавлено. Как сказал уважаемый KomAndr Облегчи себе жизнь! 2 1 Цитата Посилання на повідомлення Поділитися на інших сайтах
KomAndr 355 Опубліковано: 6 квітня 2019 Поділитись Опубліковано: 6 квітня 2019 Инфа полезная. Глянул на меню и есть вопрос, а почему не использовать для сменьі пластика всего один код М600? В Configuration_adv.h его параметрьі можно настроить как угодно. А ещее при М600 не отпускает моторьі и єтим кодом удобно пластик менять во время печати. Цитата Посилання на повідомлення Поділитися на інших сайтах
Синбад 6 Опубліковано: 6 квітня 2019 Автор Поділитись Опубліковано: 6 квітня 2019 @KomAndr А эти пункты не для замены пластика во время печати M600 у меня висит на одной из трёх кнопок пользовательских скриптов в Simplify3D, совсем под рукой. Но пользуюсь кнопкой редко, обычно, или просто через постпроцессинг Simplify3D, или хитро через постпроцессинг Simplify3D. Ну и на датчике окончания филамента M600 висит, как у всех, у кого стоит датчик. А те два пункта меню, которые вы углядели, они для заправки пластика перед печатью и для извлечения уже не нужного пластика вне процесса печати. У меня длинючий боуден и лень долго пихать пруток, или тащить его. Цитата Посилання на повідомлення Поділитися на інших сайтах
KomAndr 355 Опубліковано: 6 квітня 2019 Поділитись Опубліковано: 6 квітня 2019 Позволю себе, оставить ссьілку на еще более полезньій пункт в меню Marlin https://3dtoday.ru/blogs/stasbronchukov/eliminate-annoying-moments-marlin/ Нечто подобное у меня настроено в OctoPrint. Цитата Посилання на повідомлення Поділитися на інших сайтах
Синбад 6 Опубліковано: 6 квітня 2019 Автор Поділитись Опубліковано: 6 квітня 2019 Полезно Цитата Посилання на повідомлення Поділитися на інших сайтах
Рекомендовані повідомлення
Приєднуйтесь до обговорення
Ви можете опублікувати повідомлення зараз, а зареєструватися пізніше. Якщо у вас є акаунт, увійдіть в нього для написання від свого імені.