Возникла необходимость создать собственный пункт меню в прошивке MARLIN. В интернете нашел пару интересных решений. Спешу поделиться ими с вами.
Открываем исходник прошивки Marlin в Arduino IDE. Находим файл ultralsd.cpp. Именно в этом файле находятся описания меню принтера.
Мне необходимо добавить функцию преднагрева сопла и стола для пластика PETG. Назову этот пункт меню «Preheat PETG». Помещу его во вкладку «Prepare».
В исходном коде нахожу процедуру, отвечающую за вывод пунктов меню вкладки «Prepare». У меня это строка номер 2646.
На скриншоте я выделил куски кода, отвечающие за вывод пунктов меню раздела Prepare. Теперь сюда вставлю свой пункт меню.
MENU_ITEM(gcode, "Preheat PETG", PSTR ("M300 S5000 P280\nM140 S80\nM104 S240"));
- \n – перенос строки.
- M300 S5000 P280 ; звуковой сигнал
- M140 S80 ; Нагрев стола до 80 градусов.
- M104 S240 ; Нагрев сопла до 240 градусов.
Хочу предупредить, что такой Gcode включает одновременный нагрев стола и сопла. Если у вас слабый блок питания, то лучше не рисковать, запуская его.
У этого метода есть один недостаток. После запуска процедуры не происходит переход на главный экран. Приходится это делать вручную. О начале процедуры сигнализирует лишь звуковой сигнал.
Второй способ исправляет этот недостаток. Код получается чуть сложнее, но это стоит того.
Первое, создаем новую процедуру.
void Preheat_PETG(){
lcd_return_to_status();
enqueue_and_echo_commands_P(PSTR("M300 S5000 P280\nM140 S80\nM104 S240\nM117 Preheat PETG..."));
}
- Preheat_PETG() – название процедуры.
- lcd_return_to_status(); - переход в меню статуса.
- enqueue_and_echo_commands_P(PSTR(gcode)); - выполнение gcode.
Процедура готова, осталось ее вызвать.
MENU_ITEM (function, "Preheat PETG", Preheat_PETG);
Вот что получилось.
Как видно, создавать меню в прошивке Marlin очень просто. Несколько строк кода и все готово!