Jump to content

Українська 3D спільнота

Створено телеграм канали. Підписавшись на них ви будете отримувати повідомлення про появу нових тем на форумі. Також там Ви знайдете посилання на канал допомоги для вирішення термінових питань по друку та принтерам.
3DUA_Help 3DUA.info
Синбад

"Меню пользавателя" в Марлин, или свои пункты меню на экране принтера

Recommended Posts

Каждому 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

 

Облегчи себе жизнь! 

 

 

 

 

 

  • Like 1

Share this post


Link to post
Share on other sites

Инфа полезная. 

Глянул на меню и есть вопрос, а почему не использовать для сменьі пластика всего один код М600? В Configuration_adv.h его параметрьі можно настроить как угодно. А ещее при М600 не отпускает моторьі и єтим кодом удобно пластик менять во время печати. 😁 

Share this post


Link to post
Share on other sites

@KomAndr А эти пункты не для замены пластика во время печати 😉

M600 у меня висит на одной из трёх кнопок пользовательских скриптов в Simplify3D, совсем под рукой. Но пользуюсь кнопкой редко, обычно, или просто через постпроцессинг Simplify3D, или хитро через постпроцессинг Simplify3D. Ну и на датчике окончания филамента M600 висит, как у всех, у кого стоит датчик.

А те два пункта меню, которые вы углядели, они для заправки пластика перед печатью и для извлечения уже не нужного пластика вне процесса печати. У меня длинючий боуден и лень долго пихать пруток, или тащить его. 🙂

Share this post


Link to post
Share on other sites

Позволю себе, оставить ссьілку на еще более полезньій пункт в меню Marlin

https://3dtoday.ru/blogs/stasbronchukov/eliminate-annoying-moments-marlin/

Нечто подобное у меня настроено в OctoPrint. 😁 

Share this post


Link to post
Share on other sites

Полезно 🙂

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×