浏览代码

Merge pull request #4362 from thinkyhead/rc_duplication_mode

DUAL_NOZZLE_DUPLICATION_MODE
Scott Lahteine 9 年前
父节点
当前提交
652fd8a826

+ 4
- 1
Marlin/Configuration_adv.h 查看文件

@@ -329,7 +329,10 @@
329 329
 
330 330
 #define AXIS_RELATIVE_MODES {false, false, false, false}
331 331
 
332
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
332
+// Allow duplication mode with a basic dual-nozzle extruder
333
+//#define DUAL_NOZZLE_DUPLICATION_MODE
334
+
335
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
333 336
 #define INVERT_X_STEP_PIN false
334 337
 #define INVERT_Y_STEP_PIN false
335 338
 #define INVERT_Z_STEP_PIN false

+ 1
- 1
Marlin/Marlin.h 查看文件

@@ -134,7 +134,7 @@ void idle(
134 134
 
135 135
 void manage_inactivity(bool ignore_stepper_queue = false);
136 136
 
137
-#if ENABLED(DUAL_X_CARRIAGE)
137
+#if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
138 138
   extern bool extruder_duplication_enabled;
139 139
 #endif
140 140
 

+ 26
- 9
Marlin/Marlin_main.cpp 查看文件

@@ -1394,6 +1394,10 @@ XYZ_CONSTS_FROM_CONFIG(float, max_length,     MAX_LENGTH);
1394 1394
 XYZ_CONSTS_FROM_CONFIG(float, home_bump_mm,   HOME_BUMP_MM);
1395 1395
 XYZ_CONSTS_FROM_CONFIG(signed char, home_dir, HOME_DIR);
1396 1396
 
1397
+#if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
1398
+  bool extruder_duplication_enabled = false; // Used in Dual X mode 2
1399
+#endif
1400
+
1397 1401
 #if ENABLED(DUAL_X_CARRIAGE)
1398 1402
 
1399 1403
   #define DXC_FULL_CONTROL_MODE 0
@@ -1425,7 +1429,6 @@ XYZ_CONSTS_FROM_CONFIG(signed char, home_dir, HOME_DIR);
1425 1429
   static millis_t delayed_move_time = 0; // used in mode 1
1426 1430
   static float duplicate_extruder_x_offset = DEFAULT_DUPLICATION_X_OFFSET; // used in mode 2
1427 1431
   static float duplicate_extruder_temp_offset = 0; // used in mode 2
1428
-  bool extruder_duplication_enabled = false; // used in mode 2
1429 1432
 
1430 1433
 #endif //DUAL_X_CARRIAGE
1431 1434
 
@@ -2812,12 +2815,13 @@ inline void gcode_G4() {
2812 2815
     current_position[X_AXIS] = current_position[Y_AXIS] = 0.0;
2813 2816
     sync_plan_position();
2814 2817
 
2815
-    #if ENABLED(DUAL_X_CARRIAGE)
2816
-      int x_axis_home_dir = x_home_dir(active_extruder);
2817
-      extruder_duplication_enabled = false;
2818
-    #else
2819
-      int x_axis_home_dir = home_dir(X_AXIS);
2820
-    #endif
2818
+    int x_axis_home_dir =
2819
+      #if ENABLED(DUAL_X_CARRIAGE)
2820
+        x_home_dir(active_extruder)
2821
+      #else
2822
+        home_dir(X_AXIS)
2823
+      #endif
2824
+    ;
2821 2825
 
2822 2826
     float mlx = max_length(X_AXIS),
2823 2827
           mly = max_length(Y_AXIS),
@@ -2870,6 +2874,10 @@ inline void gcode_G28() {
2870 2874
     tool_change(0, 0, true);
2871 2875
   #endif
2872 2876
 
2877
+  #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
2878
+    extruder_duplication_enabled = false;
2879
+  #endif
2880
+
2873 2881
   /**
2874 2882
    * For mesh bed leveling deactivate the mesh calculations, will be turned
2875 2883
    * on again when homing all axis
@@ -2988,7 +2996,6 @@ inline void gcode_G28() {
2988 2996
     if (home_all_axis || homeX) {
2989 2997
       #if ENABLED(DUAL_X_CARRIAGE)
2990 2998
         int tmp_extruder = active_extruder;
2991
-        extruder_duplication_enabled = false;
2992 2999
         active_extruder = !active_extruder;
2993 3000
         HOMEAXIS(X);
2994 3001
         inactive_extruder_x_pos = current_position[X_AXIS];
@@ -6449,7 +6456,17 @@ inline void gcode_M503() {
6449 6456
     delayed_move_time = 0;
6450 6457
   }
6451 6458
 
6452
-#endif // DUAL_X_CARRIAGE
6459
+#elif ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
6460
+
6461
+  inline void gcode_M605() {
6462
+    stepper.synchronize();
6463
+    extruder_duplication_enabled = code_seen('S') && code_value_int() == 2;
6464
+    SERIAL_ECHO_START;
6465
+    SERIAL_ECHOPAIR(MSG_DUPLICATION_MODE, extruder_duplication_enabled ? MSG_ON : MSG_OFF);
6466
+    SERIAL_EOL;
6467
+  }
6468
+
6469
+#endif // M605
6453 6470
 
6454 6471
 #if ENABLED(LIN_ADVANCE)
6455 6472
   /**

+ 18
- 1
Marlin/SanityCheck.h 查看文件

@@ -175,7 +175,7 @@
175 175
  */
176 176
 #if ENABLED(SWITCHING_EXTRUDER)
177 177
   #if ENABLED(DUAL_X_CARRIAGE)
178
-    #error "SINGLENOZZLE and DUAL_X_CARRIAGE are incompatible."
178
+    #error "SWITCHING_EXTRUDER and DUAL_X_CARRIAGE are incompatible."
179 179
   #elif EXTRUDERS != 2
180 180
     #error "SWITCHING_EXTRUDER requires exactly 2 EXTRUDERS."
181 181
   #elif NUM_SERVOS < 1
@@ -573,6 +573,23 @@
573 573
 #endif
574 574
 
575 575
 /**
576
+ * Basic 2-nozzle duplication mode
577
+ */
578
+#if ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
579
+  #if HOTENDS != 2
580
+    #error "DUAL_NOZZLE_DUPLICATION_MODE requires exactly 2 hotends."
581
+  #elif ENABLED(DUAL_X_CARRIAGE)
582
+    #error "DUAL_NOZZLE_DUPLICATION_MODE is incompatible with DUAL_X_CARRIAGE."
583
+  #elif ENABLED(SINGLENOZZLE)
584
+    #error "DUAL_NOZZLE_DUPLICATION_MODE is incompatible with SINGLENOZZLE."
585
+  #elif ENABLED(MIXING_EXTRUDER)
586
+    #error "DUAL_NOZZLE_DUPLICATION_MODE is incompatible with MIXING_EXTRUDER."
587
+  #elif ENABLED(SWITCHING_EXTRUDER)
588
+    #error "DUAL_NOZZLE_DUPLICATION_MODE is incompatible with SWITCHING_EXTRUDER."
589
+  #endif
590
+#endif
591
+
592
+/**
576 593
  * Test Extruder Pins
577 594
  */
578 595
 #if EXTRUDERS > 3

+ 4
- 1
Marlin/example_configurations/Cartesio/Configuration_adv.h 查看文件

@@ -329,7 +329,10 @@
329 329
 
330 330
 #define AXIS_RELATIVE_MODES {false, false, false, false}
331 331
 
332
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
332
+// Allow duplication mode with a basic dual-nozzle extruder
333
+//#define DUAL_NOZZLE_DUPLICATION_MODE
334
+
335
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
333 336
 #define INVERT_X_STEP_PIN false
334 337
 #define INVERT_Y_STEP_PIN false
335 338
 #define INVERT_Z_STEP_PIN false

+ 4
- 1
Marlin/example_configurations/Felix/Configuration_adv.h 查看文件

@@ -329,7 +329,10 @@
329 329
 
330 330
 #define AXIS_RELATIVE_MODES {false, false, false, false}
331 331
 
332
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
332
+// Allow duplication mode with a basic dual-nozzle extruder
333
+//#define DUAL_NOZZLE_DUPLICATION_MODE
334
+
335
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
333 336
 #define INVERT_X_STEP_PIN false
334 337
 #define INVERT_Y_STEP_PIN false
335 338
 #define INVERT_Z_STEP_PIN false

+ 4
- 1
Marlin/example_configurations/Hephestos/Configuration_adv.h 查看文件

@@ -329,7 +329,10 @@
329 329
 
330 330
 #define AXIS_RELATIVE_MODES {false, false, false, false}
331 331
 
332
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
332
+// Allow duplication mode with a basic dual-nozzle extruder
333
+//#define DUAL_NOZZLE_DUPLICATION_MODE
334
+
335
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
333 336
 #define INVERT_X_STEP_PIN false
334 337
 #define INVERT_Y_STEP_PIN false
335 338
 #define INVERT_Z_STEP_PIN false

+ 4
- 1
Marlin/example_configurations/Hephestos_2/Configuration_adv.h 查看文件

@@ -329,7 +329,10 @@
329 329
 
330 330
 #define AXIS_RELATIVE_MODES {false, false, false, false}
331 331
 
332
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
332
+// Allow duplication mode with a basic dual-nozzle extruder
333
+//#define DUAL_NOZZLE_DUPLICATION_MODE
334
+
335
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
333 336
 #define INVERT_X_STEP_PIN false
334 337
 #define INVERT_Y_STEP_PIN false
335 338
 #define INVERT_Z_STEP_PIN false

+ 4
- 1
Marlin/example_configurations/K8200/Configuration_adv.h 查看文件

@@ -335,7 +335,10 @@
335 335
 
336 336
 #define AXIS_RELATIVE_MODES {false, false, false, false}
337 337
 
338
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
338
+// Allow duplication mode with a basic dual-nozzle extruder
339
+//#define DUAL_NOZZLE_DUPLICATION_MODE
340
+
341
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
339 342
 #define INVERT_X_STEP_PIN false
340 343
 #define INVERT_Y_STEP_PIN false
341 344
 #define INVERT_Z_STEP_PIN false

+ 4
- 1
Marlin/example_configurations/K8400/Configuration_adv.h 查看文件

@@ -329,7 +329,10 @@
329 329
 
330 330
 #define AXIS_RELATIVE_MODES {false, false, false, false}
331 331
 
332
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
332
+// Allow duplication mode with a basic dual-nozzle extruder
333
+//#define DUAL_NOZZLE_DUPLICATION_MODE
334
+
335
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
333 336
 #define INVERT_X_STEP_PIN false
334 337
 #define INVERT_Y_STEP_PIN false
335 338
 #define INVERT_Z_STEP_PIN false

+ 4
- 1
Marlin/example_configurations/RigidBot/Configuration_adv.h 查看文件

@@ -329,7 +329,10 @@
329 329
 
330 330
 #define AXIS_RELATIVE_MODES {false, false, false, false}
331 331
 
332
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
332
+// Allow duplication mode with a basic dual-nozzle extruder
333
+//#define DUAL_NOZZLE_DUPLICATION_MODE
334
+
335
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
333 336
 #define INVERT_X_STEP_PIN false
334 337
 #define INVERT_Y_STEP_PIN false
335 338
 #define INVERT_Z_STEP_PIN false

+ 4
- 1
Marlin/example_configurations/SCARA/Configuration_adv.h 查看文件

@@ -329,7 +329,10 @@
329 329
 
330 330
 #define AXIS_RELATIVE_MODES {false, false, false, false}
331 331
 
332
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
332
+// Allow duplication mode with a basic dual-nozzle extruder
333
+//#define DUAL_NOZZLE_DUPLICATION_MODE
334
+
335
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
333 336
 #define INVERT_X_STEP_PIN false
334 337
 #define INVERT_Y_STEP_PIN false
335 338
 #define INVERT_Z_STEP_PIN false

+ 4
- 1
Marlin/example_configurations/TAZ4/Configuration_adv.h 查看文件

@@ -337,7 +337,10 @@
337 337
 
338 338
 #define AXIS_RELATIVE_MODES {false, false, false, false}
339 339
 
340
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
340
+// Allow duplication mode with a basic dual-nozzle extruder
341
+//#define DUAL_NOZZLE_DUPLICATION_MODE
342
+
343
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
341 344
 #define INVERT_X_STEP_PIN false
342 345
 #define INVERT_Y_STEP_PIN false
343 346
 #define INVERT_Z_STEP_PIN false

+ 4
- 1
Marlin/example_configurations/WITBOX/Configuration_adv.h 查看文件

@@ -329,7 +329,10 @@
329 329
 
330 330
 #define AXIS_RELATIVE_MODES {false, false, false, false}
331 331
 
332
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
332
+// Allow duplication mode with a basic dual-nozzle extruder
333
+//#define DUAL_NOZZLE_DUPLICATION_MODE
334
+
335
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
333 336
 #define INVERT_X_STEP_PIN false
334 337
 #define INVERT_Y_STEP_PIN false
335 338
 #define INVERT_Z_STEP_PIN false

+ 4
- 1
Marlin/example_configurations/delta/biv2.5/Configuration_adv.h 查看文件

@@ -329,7 +329,10 @@
329 329
 
330 330
 #define AXIS_RELATIVE_MODES {false, false, false, false}
331 331
 
332
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
332
+// Allow duplication mode with a basic dual-nozzle extruder
333
+//#define DUAL_NOZZLE_DUPLICATION_MODE
334
+
335
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
333 336
 #define INVERT_X_STEP_PIN false
334 337
 #define INVERT_Y_STEP_PIN false
335 338
 #define INVERT_Z_STEP_PIN false

+ 4
- 1
Marlin/example_configurations/delta/generic/Configuration_adv.h 查看文件

@@ -329,7 +329,10 @@
329 329
 
330 330
 #define AXIS_RELATIVE_MODES {false, false, false, false}
331 331
 
332
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
332
+// Allow duplication mode with a basic dual-nozzle extruder
333
+//#define DUAL_NOZZLE_DUPLICATION_MODE
334
+
335
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
333 336
 #define INVERT_X_STEP_PIN false
334 337
 #define INVERT_Y_STEP_PIN false
335 338
 #define INVERT_Z_STEP_PIN false

+ 4
- 1
Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h 查看文件

@@ -329,7 +329,10 @@
329 329
 
330 330
 #define AXIS_RELATIVE_MODES {false, false, false, false}
331 331
 
332
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
332
+// Allow duplication mode with a basic dual-nozzle extruder
333
+//#define DUAL_NOZZLE_DUPLICATION_MODE
334
+
335
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
333 336
 #define INVERT_X_STEP_PIN false
334 337
 #define INVERT_Y_STEP_PIN false
335 338
 #define INVERT_Z_STEP_PIN false

+ 4
- 1
Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h 查看文件

@@ -334,7 +334,10 @@
334 334
 
335 335
 #define AXIS_RELATIVE_MODES {false, false, false, false}
336 336
 
337
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
337
+// Allow duplication mode with a basic dual-nozzle extruder
338
+//#define DUAL_NOZZLE_DUPLICATION_MODE
339
+
340
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
338 341
 #define INVERT_X_STEP_PIN false
339 342
 #define INVERT_Y_STEP_PIN false
340 343
 #define INVERT_Z_STEP_PIN false

+ 4
- 1
Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h 查看文件

@@ -329,7 +329,10 @@
329 329
 
330 330
 #define AXIS_RELATIVE_MODES {false, false, false, false}
331 331
 
332
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
332
+// Allow duplication mode with a basic dual-nozzle extruder
333
+//#define DUAL_NOZZLE_DUPLICATION_MODE
334
+
335
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
333 336
 #define INVERT_X_STEP_PIN false
334 337
 #define INVERT_Y_STEP_PIN false
335 338
 #define INVERT_Z_STEP_PIN false

+ 4
- 1
Marlin/example_configurations/makibox/Configuration_adv.h 查看文件

@@ -329,7 +329,10 @@
329 329
 
330 330
 #define AXIS_RELATIVE_MODES {false, false, false, false}
331 331
 
332
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
332
+// Allow duplication mode with a basic dual-nozzle extruder
333
+//#define DUAL_NOZZLE_DUPLICATION_MODE
334
+
335
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
333 336
 #define INVERT_X_STEP_PIN false
334 337
 #define INVERT_Y_STEP_PIN false
335 338
 #define INVERT_Z_STEP_PIN false

+ 4
- 1
Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h 查看文件

@@ -329,7 +329,10 @@
329 329
 
330 330
 #define AXIS_RELATIVE_MODES {false, false, false, false}
331 331
 
332
-//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
332
+// Allow duplication mode with a basic dual-nozzle extruder
333
+//#define DUAL_NOZZLE_DUPLICATION_MODE
334
+
335
+// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
333 336
 #define INVERT_X_STEP_PIN false
334 337
 #define INVERT_Y_STEP_PIN false
335 338
 #define INVERT_Z_STEP_PIN false

+ 1
- 0
Marlin/language.h 查看文件

@@ -159,6 +159,7 @@
159 159
 #define MSG_ENDSTOP_HIT                     "TRIGGERED"
160 160
 #define MSG_ENDSTOP_OPEN                    "open"
161 161
 #define MSG_HOTEND_OFFSET                   "Hotend offsets:"
162
+#define MSG_DUPLICATION_MODE                "Duplication mode: "
162 163
 
163 164
 #define MSG_SD_CANT_OPEN_SUBDIR             "Cannot open subdir "
164 165
 #define MSG_SD_INIT_FAIL                    "SD init fail"

+ 6
- 6
Marlin/stepper_indirection.h 查看文件

@@ -72,7 +72,7 @@
72 72
   #define X2_ENABLE_INIT SET_OUTPUT(X2_ENABLE_PIN)
73 73
   #define X2_ENABLE_WRITE(STATE) WRITE(X2_ENABLE_PIN,STATE)
74 74
   #define X2_ENABLE_READ READ(X_ENABLE_PIN)
75
-#endif // DUAL_X_CARRIAGE
75
+#endif
76 76
 
77 77
 // Y motor
78 78
 #define Y_STEP_INIT SET_OUTPUT(Y_STEP_PIN)
@@ -195,14 +195,14 @@
195 195
   #define NORM_E_DIR() { switch (current_block->active_extruder) { case 0: E0_DIR_WRITE(!INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(!INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(!INVERT_E2_DIR); } }
196 196
   #define REV_E_DIR() { switch (current_block->active_extruder) { case 0: E0_DIR_WRITE(INVERT_E0_DIR); break; case 1: E1_DIR_WRITE(INVERT_E1_DIR); break; case 2: E2_DIR_WRITE(INVERT_E2_DIR); } }
197 197
 #elif EXTRUDERS > 1
198
-  #if DISABLED(DUAL_X_CARRIAGE)
199
-    #define E_STEP_WRITE(v) { if (current_block->active_extruder == 0) { E0_STEP_WRITE(v); } else { E1_STEP_WRITE(v); } }
200
-    #define NORM_E_DIR() { if (current_block->active_extruder == 0) { E0_DIR_WRITE(!INVERT_E0_DIR); } else { E1_DIR_WRITE(!INVERT_E1_DIR); } }
201
-    #define REV_E_DIR() { if (current_block->active_extruder == 0) { E0_DIR_WRITE(INVERT_E0_DIR); } else { E1_DIR_WRITE(INVERT_E1_DIR); } }
202
-  #else
198
+  #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
203 199
     #define E_STEP_WRITE(v) { if (extruder_duplication_enabled) { E0_STEP_WRITE(v); E1_STEP_WRITE(v); } else if (current_block->active_extruder == 0) { E0_STEP_WRITE(v); } else { E1_STEP_WRITE(v); } }
204 200
     #define NORM_E_DIR() { if (extruder_duplication_enabled) { E0_DIR_WRITE(!INVERT_E0_DIR); E1_DIR_WRITE(!INVERT_E1_DIR); } else if (current_block->active_extruder == 0) { E0_DIR_WRITE(!INVERT_E0_DIR); } else { E1_DIR_WRITE(!INVERT_E1_DIR); } }
205 201
     #define REV_E_DIR() { if (extruder_duplication_enabled) { E0_DIR_WRITE(INVERT_E0_DIR); E1_DIR_WRITE(INVERT_E1_DIR); } else if (current_block->active_extruder == 0) { E0_DIR_WRITE(INVERT_E0_DIR); } else { E1_DIR_WRITE(INVERT_E1_DIR); } }
202
+  #else
203
+    #define E_STEP_WRITE(v) { if (current_block->active_extruder == 0) { E0_STEP_WRITE(v); } else { E1_STEP_WRITE(v); } }
204
+    #define NORM_E_DIR() { if (current_block->active_extruder == 0) { E0_DIR_WRITE(!INVERT_E0_DIR); } else { E1_DIR_WRITE(!INVERT_E1_DIR); } }
205
+    #define REV_E_DIR() { if (current_block->active_extruder == 0) { E0_DIR_WRITE(INVERT_E0_DIR); } else { E1_DIR_WRITE(INVERT_E1_DIR); } }
206 206
   #endif
207 207
 #elif ENABLED(MIXING_EXTRUDER)
208 208
   #define E_STEP_WRITE(v) NOOP /* not used for mixing extruders! */

正在加载...
取消
保存