Добавление собственных пунктов в меню Marlin
Привет всем 3D печатникам и не только!
Сегодня постараюсь в простой форме рассказать, как можно добавить собственный пункт меню в Marlin. На форуме уже была статья на эту тему, но в ней рассматривался случай отмены печати при возникновении проблем в начале печати. Способ несколько мудрёный и для моих целей на сегодня избыточный. А цель я поставил - добавить пункт для нагрева стола перед печатью PETG до 80 градусов. Дело в том, что в стоке меню имеет пункты для нагрева стола/сопла/всего_вместе для PLA (60 гр.) и ABS (100 гр.). Я использую все упомянутые виды пластика, а они имеют разные требования к температуре стола.
Так что, кому интересно, прошу под CUT.
Я не могу гарантировать, что этот метод будет на 100% работоспособен на всех вариантах принтеров. Имею в хозяйстве бутерброд из Mega+RAMPS 1.4. В этой комбинации работает.
Прошивка у меня на момент написания статьи Marlin 1.1.8. На других версиях не тестировал, но думаю, что не должно сильно отличаться.
Итак, приступим.
Открываем Arduino IDE и переходим во вкладку ultralsd.cpp. Именно в этом файле находятся описания меню принтера.
Преднагрев пластика находится во вкладке "Действия" или "Prepare" в англоязычном варианте. Нажав Ctrl+F вызываем поиск и ищем строку "Prepare" submenu. После неё идут функции обеспечивающие вывод строк во вкладке "Действия" или "Prepare" в англоязычном варианте.
Теперь надо определиться в каком месте меню будет размещаться будущая строчка. Для ориентира можно использовать комментарии перед функцией. Например, // Move Axis - это вторая строчка, // Auto Home - это третья, и так далее. Я желаю видеть свою строчку после "Преднагрев ABS". По английски это будет // Preheat for Material 1 and 2
Искать "ABS" бессмысленно, дело в том, что в прошивке жёстко не определено название материала. Его можно изменить. Поэтому пункт назвали "Преднагрев материала 1 и 2".
После этого пункта располагаем нашу новую строку:
//
// Preheat PETG
//
MENU_ITEM (function, "Преднагрев PETG стол", Preheat_PETG);
Если быть точным, то внесённая запись не просто строка в меню. Это ещё и вызов функции, которая будет выполнять определённые действия, а именно нагрев стола до 80 градусов. Безусловно, эту функцию надо будет описать:
void Preheat_PETG(){
lcd_return_to_status();
enqueue_and_echo_commands_P(PSTR("M140 S80"));
Расположу я её перед описанием подменю "Действия" или "Prepare" в англоязычном варианте.
Теперь осталось залить прошивку в принтер и можно будет наблюдать картинку, что я разместил в начале поста. После выбора пункта меню "Преднагрев PETG стол" включается нагрев и возвращается основной экран.
Если вам надо нагревать не только стол, но и сопло, то вместо "M140 S80" надо написать "M140 S80\nM104 S240".
По сути дела, данный метод описывает добавление пункта меню с действием в виде помещения исполняемой команды GCODE в очередь в буфер принтера. Поэтому возможных вариантов использования очень много.
Добавить немного удобства всегда приятно, не правда ли?
Еще больше интересных статей
Klipper - восстановление прерванной печати
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Внезапно выяснилось что у стокового клиппера есть странная особенно...
Замена нагревательного элемента на хотэнде QIDI Tech Q1 Pro
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Настраиваем прошивку Marlin и заливаем её в 3D принтер
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Комментарии и вопросы
А теперь посмотрите по схеме т...
Вот и я про то. При необходимо...
Купил себе как-то дрыгостол, п...
Добрый вечер, может у кого ест...
Сегодня получил заказанный на...
Добрый день, подскажите, пожал...
Что делать если я первый раз к...