# Creality Ender 3 Pro - START & END gcode for Cura

These are my custom start and end gcodes **for Cura slicer** to be used with the **Creality Ender 3 Pro** with BLTouch/3DTouch installed.

### Why this and not some other custom gcode I found on Reddit?
Well, that's what I was using for a long time, but I wanted to address some isues:

- [x] heat up the printer as quickly as possible
- [x] don't heat up the extruder all the way until just before nozzle priming (to prevent oozing from the nozzle during auto bed leveling, which takes 60 seconds)
- [x] print quick and efficient, Prusa-like, priming line of filament
- [x] after finishing the print, retracting the filament plenty back so that I can change it while the printer is cold, if need be.
- [x] present finished print ASAP

It does all of this somewhat nicely, took me two hours and 12 test prints. :D

### Disclaimer
Take this as-is, I take no responsibility in breaking your printer if used incorrectly. Test it couple of times with your finger on the PSU shut off switch.

**It works for my setup, which is:**
- Ender 3 Pro with 4.2.7 silent board
- Marlin 2.0.9.1 firmware
- 3DTouch installed on [Satsana](https://www.thingiverse.com/thing:4720050)
- Cura slicer (the macros like `{material_print_temperature_layer_0}` would need to be adjusted for other slicers accordingly, for Prusa Slicer see their docs on [Macros](https://help.prusa3d.com/en/article/macros_1775/))

### Start code
```gcode
; Ender 3 Pro – Cura Custom START G-code
; NOTE:
; This is for Ender with auto bed leveling probe.
; For printers without it, remove the line with G29 (I have not tested this, though!)

; Preheat bed fully
M140 S{material_bed_temperature_layer_0}

; Preheat extuder half way to 160 C to prevent oozing during auto bed leveling.
M104 S160

; Home X and Y axes
G28 X Y

; Absolute positioning
G90 

; Move to homing position for Z axis
G1 X168 Y126 F5000

; Wait for bed to be at printing temperature and then...
M190 S{material_bed_temperature_layer_0}

; ... home Z axis...
G28 Z

; ... start heating up the extruder all the way and meanwhile do...
M104 S{material_print_temperature_layer_0}

; ... automatic bed leveling
G29

; Move to start position for priming
G1 X5 Y5 Z10 F5000

; Wait for extruder to fully heat up to set temperature
M109 S{material_print_temperature_layer_0} 

; Reset extruder
G92 E0 

; Extrude line of filament
G1 Z0.8 F500
G1 X45 Z0.8 E40 F750 
G92 E0
G1 X65 Z0.8 E10 F500

; Reset extruder again
G92 E0 

; Move quickly away from prime line to prevent blob squish
G1 X75 F5000
```

### End code
```gcode
; Ender 3 Pro - Cura END G-code
; If making any changes here, change them BOTH in Cura (End G-Code) AND OctoPrint (GCODE Scripts -> After print job is cancelled)

;Relative positioning
G91 

;Retract 30 mm and raise Z +2 mm
G1 X-10 Z10 E-30 F3000

;Absolute positioning
G90 

; Put away X and present print
G1 X3 Y225 ;Present print

; Shutdown fan, hotend and bed
M106 S0 ;Turn-off fan
M104 S0 ;Turn-off hotend
M140 S0 ;Turn-off bed
M84 X Y Z E ;Disable all steppers
```