I want to write a couple of very simple G-code test cases in Marlin-Style to make sure my printer works properly. The idea is to test the movement system, then the end-stops, then the heating and ability to hold temperature. But Marlin already runs large, so I can't spare too many lines in the basic setup, if I want to integrate it into the firmware.

The test I have in mind is this order of operations, covering the basis of each axis and the thermal control:

  • The printhead shall move up 20 mm, then right and forward the same.
  • the printhead shall home.
  • the printhead shall rise again by 20 mm.
  • The preheating shall be done (50°C bed, 180°C head).
  • The printer shall do nothing for 2 minutes.
  • The printer shall cool down.
  • Beep twice to signal that the test is concluded.

What is the best way to set up such a test code in the least amount of lines? Did I forget a crucial test command?

  • $\begingroup$ I do not think this question is a good fit for stackexchange. It is basically a "do-my-homework" question and it shows no effort. It is also incredibly specific (and thus useless to anybody else), focussing on a very specific test script that you want. $\endgroup$ Jan 6, 2021 at 8:56
  • $\begingroup$ @TomvanderZanden you DO realize that a) I put it in knowledgebase - where BASICS are explained b) I wrote an answer, which took me a little longer than expected c) the extreme specificity here is wanted because it is a very specific test case: do the motors work, does homing work, does the heating work. d) the G-code could be ran on basically every printer, no matter the size. $\endgroup$
    – Trish
    Jan 6, 2021 at 10:30
  • $\begingroup$ I did see you wrote an answer, but that doesn't change how the question should be evaluated. $\endgroup$ Jan 6, 2021 at 11:04
  • $\begingroup$ I think that for a "knowledge base" question "How to write G-code to do movement?" or "How to command the heated bed to warm?" or "How to pause a print?" might be more suitable as isolated question (even though these are still very basic questions, of course). $\endgroup$ Jan 6, 2021 at 11:05
  • $\begingroup$ I think that for a programming stackexchange, a question on "I want to write a program that does A, then B, then C" wouldn't be considered appropriate. But a question "How to do B?" might be. This seems to be the equivalent of that? $\endgroup$ Jan 6, 2021 at 11:07

1 Answer 1


I can get down to 13(14) lines using 6 commands, one of which is optional: G1 movements, G28 homing, M140 setting the bed temperature without pause, M109 to set the hotend temperature, G4 dwell to pause, and M300 to beep.

The line in [] is optional, but the nozzle isn't safe to touch right away - waiting for the cooldown ensures touch safety.

G1 Z20 F1000 ; Movement Test Z
G1 X20       ; Movement Test X
G1 Y20       ; Movement Test Y
G28          ; Homing Test
G1 Z20       ; Movement up (safety measure)
M140 S50     ; Set Bed temperature to 50, directly goto next line
M109 R180    ; Set Nozzle temperature to 180, wait for achieving
G4 S60       ; Wait a minute (to see if nozzle temperature is held)
M140 S0      ; "turn off" bed
[ M109 R25     ; set nozzle temperature to 25C, wait for achieving ]
M109 S0      ; actually turn off nozzle!
M300 S440 P200 ; Beep
G4 P200      ; short pause
M300 S660 P200 ; Beep
  • $\begingroup$ ... and this could be put into one line, and added as a "Self-test" custom menu item for easy access. Maybe this was an origin of "in the least amount of lines" requirement. I like this idea :) it helps to implement PDCA cycle into printer improvements. This could be even built into Marlin, which is aware of current position (risk of gcode raise on start) and hardware (speaker vs buzzer). $\endgroup$
    – octopus8
    Jan 8, 2021 at 3:01

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .