Prusa3d Marlin fork
Marlin main

Calibrate XYZ.

Parameters
onlyZif true, calibrate only Z axis
verbosity_level
Return values
trueSucceeded
falseFailed

Re-use the MMU error screen UI to present choices for filament change There are two button actions, Load and Eject Load will exit the screen and continue as normally by asking the user which slot to load from Eject will eject the depleted filament, very useful after FINDA runout events.

Parameters
eject_slotthe MMU slot to eject if the user selects the Eject button choice

Handling of unload when using MMU with M600 A fullscreen message showing "Unloading Filament x" should be shown on the LCD and LCD updates should be are disabled in the meantime.

load filament for mmu v2

nozzle_temp nozzle temperature to load filament

Get serial number from 32U2 processor

Typical format of S/N is:CZPX0917X003XC13518

Send command ;S to serial port 0 to retrieve serial number stored in 32U2 processor, reply is stored in *SN. Operation takes typically 23 ms. If no valid SN can be retrieved within the 250ms window, the function aborts and returns a general failure flag. The command will fail if the 32U2 processor is unpowered via USB since it is isolated from the rest of the electronics. In that case the value that is stored in the EEPROM should be used instead.

Returns
0 on success
1 on general failure

Detection of faulty RAMBo 1.1b boards equipped with bigger capacitors at the TACH_1 pin, which causes bad detection of print fan speed. Warning: This function is not to be used by ordinary users, it is here only for automated testing purposes, it may even interfere with other functions of the printer! You have been warned! The test idea is to measure the time necessary to charge the capacitor. So the algorithm is as follows:

  1. Set TACH_1 pin to INPUT mode and LOW
  2. Wait a few ms
  3. disable interrupts and measure the time until the TACH_1 pin reaches HIGH Repeat 1.-3. several times Good RAMBo's times are in the range of approx. 260-320 us Bad RAMBo's times are approx. 260-1200 us So basically we are interested in maximum time, the minima are mostly the same. May be that's why the bad RAMBo's still produce some fan RPM reading, but not corresponding to reality

Helper function to reduce code size in M861 by extracting common code into one function

Parse and process commands

look here for descriptions of G-codes: https://reprap.org/wiki/G-code

Implemented Codes


PRUSA CODES
P F - Returns FW versions
P R - Returns revision of printer


G0 -> G1
G1 - Coordinated Movement X Y Z E
G2 - CW ARC
G3 - CCW ARC
G4 - Dwell S<seconds> or P<milliseconds>
G10 - retract filament according to settings of M207
G11 - retract recover filament according to settings of M208
G28 - Home all Axes
G29 - Detailed Z-Probe, probes the bed at 3 or more points. Will fail if you haven't homed yet.
G30 - Single Z Probe, probes bed at current XY location.
G31 - Dock sled (Z_PROBE_SLED only)
G32 - Undock sled (Z_PROBE_SLED only)
G80 - Automatic mesh bed leveling
G81 - Mesh bed leveling status
G90 - Use Absolute Coordinates
G91 - Use Relative Coordinates
G92 - Set current position to coordinates given


M Codes
M0 - Unconditional stop - Wait for user to press a button on the LCD
M1 - Same as M0
M17 - Enable/Power all stepper motors
M18 - Disable all stepper motors; same as M84
M20 - List SD card
M21 - Init SD card
M22 - Release SD card
M23 - Select SD file (M23 filename.g)
M24 - Start/resume SD print
M25 - Pause SD print
M26 - Set SD position in bytes (M26 S12345)
M27 - Report SD print status
M28 - Start SD write (M28 filename.g)
M29 - Stop SD write
M30 - Delete file from SD (M30 filename.g)
M31 - Output time since last M109 or SD card start to serial
M32 - Select file and start SD print (Can be used while printing from SD card files): syntax "M32 /path/filename#", or "M32 S<startpos bytes> !filename#" Call gcode file : "M32 P !filename#" and return to caller file after finishing (similar to #include). The '#' is necessary when calling from within sd files, as it stops buffer prereading
M42 - Change pin status via gcode Use M42 Px Sy to set pin x to value y, when omitting Px the onboard led will be used.
M73 - Show percent done and print time remaining
M80 - Turn on Power Supply
M81 - Turn off Power Supply
M82 - Set E codes absolute (default)
M83 - Set E codes relative while in Absolute Coordinates (G90) mode
M84 - Disable steppers until next move, or use S<seconds> to specify an inactivity timeout, after which the steppers will be disabled. S0 to disable the timeout.
M85 - Set inactivity shutdown timer with parameter S<seconds>. To disable set zero (default)
M86 - Set safety timer expiration time with parameter S<seconds>; M86 S0 will disable safety timer
M92 - Set axis_steps_per_mm - same syntax as G92
M104 - Set extruder target temp
M105 - Read current temp
M106 - Fan on
M107 - Fan off
M109 - Sxxx Wait for extruder current temp to reach target temp. Waits only when heating Rxxx Wait for extruder current temp to reach target temp. Waits when heating and cooling IF AUTOTEMP is enabled, S<mintemp> B<maxtemp> F<factor>. Exit autotemp by any M109 without F
M112 - Emergency stop
M113 - Get or set the timeout interval for Host Keepalive "busy" messages
M114 - Output current position to serial port
M115 - Capabilities string
M117 - display message
M118 - Serial print
M119 - Output Endstop status to serial port
M123 - Tachometer value
M126 - Solenoid Air Valve Open (BariCUDA support by jmil)
M127 - Solenoid Air Valve Closed (BariCUDA vent to atmospheric pressure by jmil)
M128 - EtoP Open (BariCUDA EtoP = electricity to air pressure transducer by jmil)
M129 - EtoP Closed (BariCUDA EtoP = electricity to air pressure transducer by jmil)
M140 - Set bed target temp
M150 - Set BlinkM Color Output R: Red<0-255> U(!): Green<0-255> B: Blue<0-255> over i2c, G for green does not work.
M155 - Automatically send temperatures, fan speeds, position
M190 - Sxxx Wait for bed current temp to reach target temp. Waits only when heating Rxxx Wait for bed current temp to reach target temp. Waits when heating and cooling
M200 D<millimeters>- set filament diameter and set E axis units to cubic millimeters (use S0 to set back to millimeters).
M201 - Set max acceleration in units/s^2 for print moves (M201 X1000 Y1000)
M202 - Set max acceleration in units/s^2 for travel moves (M202 X1000 Y1000) Unused in Marlin!!
M203 - Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in mm/sec
M204 - Set default acceleration: S normal moves T filament only moves (M204 S3000 T7000) in mm/sec^2 also sets minimum segment time in ms (B20000) to prevent buffer under-runs and M20 minimum feedrate
M205 - advanced settings: minimum travel speed S=while printing T=travel only, B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk, E=maximum E jerk
M206 - set additional homing offset
M207 - set retract length S[positive mm] F[feedrate mm/min] Z[additional zlift/hop], stays in mm regardless of M200 setting
M208 - set recover=unretract length S[positive mm surplus to the M207 S*] F[feedrate mm/sec]
M209 - S<1=true/0=false> enable automatic retract detect if the slicer did not support G10/11: every normal extrude-only move will be classified as retract depending on the direction.
M214 - Set Arc Parameters (Use M500 to store in eeprom) P<MM_PER_ARC_SEGMENT> S<MIN_MM_PER_ARC_SEGMENT> R<MIN_ARC_SEGMENTS> F<ARC_SEGMENTS_PER_SEC>
M220 S<factor in percent>- set speed factor override percentage
M221 S<factor in percent>- set extrude factor override percentage
M226 P<pin number> S<pin state>- Wait until the specified pin reaches the state required
M240 - Trigger a camera to take a photograph
M250 - Set LCD contrast C<contrast value> (value 0..63)
M280 - set servo position absolute. P: servo index, S: angle or microseconds
M300 - Play beep sound S<frequency Hz> P<duration ms>
M301 - Set PID parameters P I and D
M302 - Allow cold extrudes, or set the minimum extrude S<temperature>.
M303 - PID relay autotune S<temperature> sets the target temperature. (default target temperature = 150C)
M304 - Set bed PID parameters P I and D
M310 - Thermal model settings
M400 - Finish all moves
M401 - Lower z-probe if present
M402 - Raise z-probe if present
M404 - N<dia in mm> Enter the nominal filament width (3mm, 1.75mm ) or will display nominal filament width without parameters
M405 - Turn on Filament Sensor extrusion control. Optional D<delay in cm> to set delay in centimeters between sensor and extruder
M406 - Turn off Filament Sensor extrusion control
M420 - Mesh bed leveling status
M500 - stores parameters in EEPROM
M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
M503 - print the current settings (from memory not from EEPROM)
M509 - force language selection on next restart
M540 - Use S[0|1] to enable or disable the stop SD card print on endstop hit (requires ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED)
M552 - Set IP address
M600 - Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal]
M605 - Set dual x-carriage movement mode: S<mode> [ X<duplication x-offset> R<duplication temp offset> ]
M850 - Set sheet data S[id] Z[offset] L[label] B[bed_temp] P[PINDA_TEMP]
M860 - Wait for PINDA thermistor to reach target temperature.
M861 - Set / Read PINDA temperature compensation offsets
M900 - Set LIN_ADVANCE options, if enabled. See Configuration_adv.h for details.
M907 - Set digital trimpot motor current using axis codes.
M908 - Control digital trimpot directly.
M350 - Set microstepping mode.
M351 - Toggle MS1 MS2 pins directly.


M928 - Start SD logging (M928 filename.g) - ended by M29
M999 - Restart after being stopped by error