Как добавить параметры меню в жидкокристаллическое меню (прошивка Marlin)?

Где находится правильный файл прошивки Marlin и место для добавления кода, который я хочу сохранить в жидкокристаллическом меню моего принтера, а затем выполнить функцию, которую я пишу при нажатии кнопки?

Например, я хочу добавить пункт меню с надписью "Preheat Custom", который находится в том же меню, что и "preheat PLA" и "preheat ABS", а затем запустить код для нагрева до заданных мной значений.

Я запускаю прошивку Marlin версии 1.1.9 на Creality Ender 3.

, 👍13


5 ответов


Лучший ответ:

9

Ответ на ваш вопрос-файл ultralcd.cpp. В настоящее время вы также можете включить дополнительную опцию через файл Configuration_adv.h, просто включите:

#define CUSTOM_USER_MENUS

и отредактируйте параметры под ним в соответствии с вашими потребностями (в противном случае он будет использовать предустановленные значения из файла Configuration.h).


Добавление пользовательских элементов с помощью ultralcd.cpp

Вот как я привык это делать если вы хотите добавить пункты в меню в прошивке Marlin через ultralcd.cpp... Лучше всего сначала посмотреть на текущую реализацию пунктов меню. Как вы уже упоминали, Разогрейте ПЛА, что бы первым искать. Поиск в файлах очень прост, когда вы заходите на сайт github с источниками прошивки Marlin, функциональность доступна для поиска в файлах. Кроме того, можно скачать копию прошивки и использовать бесплатную утилиту "grep" для поиска в файлах.

Поиск Preheat PLA покажет вам кучу файлов перевода языка. Они указывают на использование константы MSG_PREHEAT_1, которая находит свое присутствие в ultralcd.cpp... Это указывает на функцию lcd_preheat_m1_menu, которая вызывается MENU_ITEM, который добавляет пункты меню на ЖК-дисплей. Вы можете начать с этого, чтобы добавить свой собственный вариант.


Демонстрация

В качестве быстрой демонстрации я добавил ПОЛЬЗОВАТЕЛЬСКИЙ элемент ПРЕДВАРИТЕЛЬНОГО НАГРЕВА, скопировав функцию lcd_preheat_m2_menu в ultralcd.cpp и переименовал этот lcd_preheat_m3_menu (полный функциональный элемент нуждается в изменениях в lcd_preheat_m3_menu, поскольку теперь он использует константы из опции предварительного нагрева ABS).

Затем вы добавляете этот пункт в меню, изменяя эту часть кода:

      //
      // Предварительно разогреть материал 1 и 2
      //
      #if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 || TEMP_SENSOR_4 != 0 || HAS_HEATED_BED
        MENU_ITEM(подменю, MSG_PREHEAT_1, lcd_preheat_m1_menu);
        MENU_ITEM(подменю, MSG_PREHEAT_2, lcd_preheat_m2_menu);
        // ДОБАВЬТЕ ЭТУ СТРОКУ:
        MENU_ITEM(подменю, "CUSTOM PREHEAT", lcd_preheat_m3_menu);
      #еще
        MENU_ITEM(функция, MSG_PREHEAT_1, lcd_preheat_m1_e0_only);
        MENU_ITEM(функция, MSG_PREHEAT_2, lcd_preheat_m2_e0_only);
      #endif

После компиляции и загрузки на плату принтера войдите в меню Подготовки и прокрутите страницу вниз, чтобы увидеть:

LCD showing custom preheat option


,

1

Возможно, есть лучшее решение.

Marlin поддерживает пользовательские меню пользователей, в configuration_adv.h, вероятно, вам следует попытаться ограничить свои изменения файлами конфигурации*.h.

Код меню довольно уродливый, и вы можете легко взламывать вещи.

,

Привет, Марк, и добро пожаловать в SE.3DP! Это звучит как хорошее замечание, которое следует сделать. Не могли бы вы предоставить фрагмент кода? Я сам не смотрел, и, возможно, он слишком велик, чтобы подводить итоги, но если бы вы могли отредактировать свой ответ и показать часть кода и проиллюстрировать, как/куда вставлять, это было бы отличным дополнением к ответу., @Greenonline


2

Как сказал Марк, Marlin поддерживает ряд пунктов меню в своей расширенной конфигурации. Эти элементы предназначены для запуска пользовательского G-кода, который в данном случае (добавление действия предварительного нагрева с пользовательским целевым экструдером и настольной температурой) достаточно для удовлетворения ваших потребностей. Итак, давайте посмотрим на этот расширенный конфигурационный файл: Configuration_adv.h. Раздел, который мы ищем, находится почти в конце файла, вы можете нажать ctrl+f для "CUSTOM_USER_MENUS", чтобы найти его.

#define CUSTOM_USER_MENUS
#if ENABLED(CUSTOM_USER_MENUS)
  #define USER_SCRIPT_DONE "M117 User Script Done"
  #define USER_SCRIPT_AUDIBLE_FEEDBACK
  //#define USER_SCRIPT_RETURN  //  Возврат к экрану состояния после выполнения скрипта

  #define USER_DESC_1 "Do the trick"
  #define USER_GCODE_1 "G91\nG0 z5\nG0 y10"

  #define USER_DESC_2 "Park"
  #define USER_GCODE_2 "G27 P2"

  //#define USER_DESC_2 "Предварительный нагрев для PLA"
  //#define USER_GCODE_2 "M140 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND)

  //#define USER_DESC_3 "Предварительный нагрев для ABS"
  //#define USER_GCODE_3 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND)

  //#define USER_DESC_4 "Heat Bed/Home/Level"
  //#define USER_GCODE_4 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nG28\nG29"

  //#define USER_DESC_5 "Home & Info"
  //#define USER_GCODE_5 "G28\nM503"
#endif

Исходный код, загруженный из официального репо, на самом деле поставляется с некоторыми примерами (те, которые прокомментированы), и я добавил еще два просто для удовольствия. Чтобы заставить ваш пользовательский пункт меню предварительного нагрева работать, вы будете использовать следующие Gcodes:

  • M140: установите целевую температуру стола (посещение http://marlinfw.org/docs/gcode/M140.html для получения еще некоторых данных)
  • M104: установите целевую температуру хотенда (визит http://marlinfw.org/docs/gcode/M104.html для получения еще некоторых данных)
,

2

Дополнение о том, как действовать с пользовательскими меню на практике:

Включите (раскомментируйте) эту строку в configuration_adv.h:

#define CUSTOM_USER_MENUS  

Ниже есть 5 примеров записей, позже вы можете изменить их или удалить/прокомментировать. Вы можете добавить новые, например:

  #define  USER_DESC_6 "Home Z (0.2)"
  #define USER_GCODE_6 "G28 Z\nG0 Z0.2"

  #define  USER_DESC_7 "Fan on"
  #define USER_GCODE_7 "M106 S255"

  #define  USER_DESC_8 "Fan off"
  #define USER_GCODE_8 "M107"

Marlin в настоящее время (v2.0.7.2) поддерживает до 25 пунктов меню (см. menu_custom.cpp). В этих цифрах могут быть пробелы, поэтому вы можете закомментировать некоторые ненужные варианты без фиксации нумерации других, что может быть очень удобно.

Пользовательские команды могут выполняться во время выполнения (когда уже выполняется печать). Я мог бы использовать вышеупомянутый "home Z" после ручной настройки Z endstop, чтобы быстро исправить высоту первого слоя, не перезапуская печать. Таким образом, вы также можете нанести вред текущей печати.

,

0

Константы предварительного нагрева - поддерживается до 5 без изменения кода, просто добавьте новую, а затем создайте

#define PREHEAT_1_LABEL       "PLA"
#define PREHEAT_1_TEMP_HOTEND 215
#define PREHEAT_1_TEMP_BED     70
#define PREHEAT_1_TEMP_CHAMBER 35
#define PREHEAT_1_FAN_SPEED     0 // Значение от 0 до 255

#define PREHEAT_2_LABEL       "PETG"
#define PREHEAT_2_TEMP_HOTEND 235
#define PREHEAT_2_TEMP_BED    70
#define PREHEAT_2_TEMP_CHAMBER 35
#define PREHEAT_2_FAN_SPEED     0 // Значение от 0 до 255

#define PREHEAT_3_LABEL       "ABS"
#define PREHEAT_3_TEMP_HOTEND 270
#define PREHEAT_3_TEMP_BED    100
#define PREHEAT_3_TEMP_CHAMBER 35
#define PREHEAT_3_FAN_SPEED     0 // Значение от 0 до 255

#define PREHEAT_4_LABEL       "NYLON"
#define PREHEAT_4_TEMP_HOTEND 260
#define PREHEAT_4_TEMP_BED     65
#define PREHEAT_4_TEMP_CHAMBER 35
#define PREHEAT_4_FAN_SPEED     0 // Значение от 0 до 255
```
,