Перейти до публікації

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


Рекомендовані повідомлення

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

 

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

 

 

 

 

 

Посилання на повідомлення
Поділитися на інших сайтах

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

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

Посилання на повідомлення
Поділитися на інших сайтах

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

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

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

Посилання на повідомлення
Поділитися на інших сайтах

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

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

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

Посилання на повідомлення
Поділитися на інших сайтах
  • KomAndr закріпив темі

Приєднуйтесь до обговорення

Ви можете опублікувати повідомлення зараз, а зареєструватися пізніше. Якщо у вас є акаунт, увійдіть в нього для написання від свого імені.

Гість
Відповісти в тему...

×   Вставлено в вигляді відформатованого тексту.   Вставити у вигляді звичайного тексту

  Дозволено не більше 75 емодзі.

×   Ваше посилання було автоматично вбудоване.   Відобразити як посилання

×   Ваш попередній контент був відновлений.   Очистити редактор

×   Ви не можете вставити зображення безпосередньо. Завантажте або вставте зображення за посиланням.

×
×
  • Створити...