# This file serves as documentation for config parameters of
# additional devices that may be configured on a printer. The snippets
# in this file may be copied into the main printer.cfg file. See the
# "example.cfg" file for description of common config parameters.
#
# Note, where an extra config section creates additional pins, the
# section defining the pins must be listed in the config file before
# any sections using those pins.


# Z height probe. One may define this section to enable Z height
# probing hardware. When this section is enabled, PROBE and
# QUERY_PROBE extended g-code commands become available. The probe
# section also creates a virtual "probe:z_virtual_endstop" pin. One
# may set the stepper_z endstop_pin to this virtual pin on cartesian
# style printers that use the probe in place of a z endstop. If using
# "probe:z_virtual_endstop" then do not define a position_endstop in
# the stepper_z config section.
#[probe]
#pin: ar15
#   Probe detection pin. This parameter must be provided.
#x_offset: 0.0
#   The distance (in mm) between the probe and the nozzle along the
#   x-axis. The default is 0.
#y_offset: 0.0
#   The distance (in mm) between the probe and the nozzle along the
#   y-axis. The default is 0.
#z_offset:
#   The distance (in mm) between the bed and the nozzle when the probe
#   triggers. This parameter must be provided.
#speed: 5.0
#   Speed (in mm/s) of the Z axis when probing. The default is 5mm/s.
#activate_gcode:
#   A list of G-Code commands (one per line; subsequent lines
#   indented) to execute prior to each probe attempt. This may be
#   useful if the probe needs to be activated in some way. Do not
#   issue any commands here that move the toolhead (eg, G1). The
#   default is to not run any special G-Code commands on activation.
#deactivate_gcode:
#   A list of G-Code commands (one per line; subsequent lines
#   indented) to execute after each probe attempt completes. Do not
#   issue any commands here that move the toolhead. The default is to
#   not run any special G-Code commands on deactivation.


# BLTouch probe. One may define this section (instead of a probe
# section) to enable a BLTouch probe. (Note! This bltouch module may
# not work correctly with some BLTouch "clones"!) A virtual
# "probe:z_virtual_endstop" pin is also created (see the "probe"
# section above for the details).
#[bltouch]
#sensor_pin:
#   Pin connected to the BLTouch sensor pin. This parameter must be
#   provided.
#control_pin:
#   Pin connected to the BLTouch control pin. This parameter must be
#   provided.
#pin_move_time: 0.675
#   The amount of time (in seconds) to wait for the BLTouch pin to
#   move up or down. The default is 0.675 seconds.
#pin_up_reports_not_triggered: True
#   Set if the BLTouch consistently reports the probe in a "not
#   triggered" state after a successful "pin_up" command. This should
#   be True for a genuine BLTouch; some BLTouch clones may require
#   False. The default is True.
#pin_up_touch_mode_reports_triggered: True
#   Set if the BLTouch consistently reports a "triggered" state after
#   the commands "pin_up" followed by "touch_mode". This should be
#   True for a genuine BLTouch v2 and earlier; the BLTouch v3 and some
#   BLTouch clones require False. The default is True.
#x_offset:
#y_offset:
#z_offset:
#speed:
#   See the "probe" section for information on these parameters.


# Bed tilt compensation. One may define a [bed_tilt] config section to
# enable move transformations that account for a tilted bed.
#[bed_tilt]
#x_adjust: 0
#   The amount to add to each move's Z height for each mm on the X
#   axis. The default is 0.
#y_adjust: 0
#   The amount to add to each move's Z height for each mm on the Y
#   axis. The default is 0.
#z_adjust: 0
#   The amount to add to the Z height when the nozzle is nominally at
#   0,0. The default is 0.
# The remaining parameters control a BED_TILT_CALIBRATE extended
# g-code command that may be used to calibrate appropriate x and y
# adjustment parameters.
#points:
#   A list of X,Y coordinates (one per line; subsequent lines
#   indented) that should be probed during a BED_TILT_CALIBRATE
#   command. Specify coordinates of the nozzle and be sure the probe
#   is above the bed at the given nozzle coordinates. The default is
#   to not enable the command.
#speed: 50
#   The speed (in mm/s) of non-probing moves during the calibration.
#   The default is 50.
#horizontal_move_z: 5
#   The height (in mm) that the head should be commanded to move to
#   just prior to starting a probe operation. The default is 5.
#samples: 1
#   The number of times to probe each point.  The probed z-values
#   will be averaged.  The default is to probe 1 time.
#samples_result: average
#   One can choose median or average between probes samples
#   The default is average.
#sample_retract_dist: 2.0
#   The distance (in mm) to retract between each sample if
#   sampling more than once.  Default is 2mm.


# Mesh Bed Leveling. One may define a [bed_mesh] config section
# to enable move transformations that offset the z axis based
# on a mesh generated from probed points. Note that bed_mesh
# and bed_tilt are incompatible, both cannot be defined.  When
# using a probe to home the z-axis, it is recommended to define
# a [homing_override] section in printer.cfg to home toward the
# center of the print area.
#
#  Visual Examples:
#   rectangular bed, probe_count = 3,3:
#               x---x---x (max_point)
#               |
#               x---x---x
#                       |
#   (min_point) x---x---x
#
#   round bed, round_probe_count = 5, bed_radius = r:
#                  x (0,r) end
#                /
#              x---x---x
#                        \
#   (-r,0) x---x---x---x---x (r,0)
#            \
#              x---x---x
#                    /
#                  x  (0,-r) start
#
#[bed_mesh]
#speed: 50
#   The speed (in mm/s) of non-probing moves during the
#   calibration. The default is 50.
#horizontal_move_z: 5
#   The height (in mm) that the head should be commanded to move to
#   just prior to starting a probe operation. The default is 5.
#samples: 1
#   The number of times to probe each point.  The probed z-values
#   will be averaged.  The default is to probe 1 time.
#samples_result: average
#   One can choose median or average between probes samples
#   The default is average.
#sample_retract_dist: 2.0
#   The distance (in mm) to retract between each sample if
#   sampling more than once.  Default is 2mm.
#bed_radius:
#   Defines the radius to probe for round beds.  Note that the radius
#   is relative to the nozzle's origin, if using a probe be sure to
#   account for its offset.  This parameter must be provided for round
#   beds and omitted for rectangular beds.
#min_point:
#   Defines the minimum x,y position to probe when for rectangular
#   beds. Note that this refers to the nozzle position, take care that
#   you do not define a point that will move the probe off of the bed.
#   This parameter must be provided for rectangular beds.
#max_point:
#   Defines the maximum x,y position to probe when for rectangular
#   beds. Follow the same precautions as listed in min_point. Also note
#   that this does not necessarily define the last point probed, only
#   the maximum coordinate. This parameter must be provided.
#probe_count: 3,3
#   For rectangular beds, this is a comma separate pair of integer
#   values (X,Y) defining the number of points to probe along each axis.
#   A single value is also valid, in which case that value will be applied
#   to both axes.  Default is 3,3.
#round_probe_count: 5
#   For round beds, this is integer value defines the maximum number of
#   points to probe along each axis. This value must be an odd number.
#   Default is 5.
#fade_start: 1.0
#   The gcode z position in which to start phasing out z-adjustment
#   when fade is enabled.  Default is 1.0.
#fade_end: 0.0
#   The gcode z position in which phasing out completes.  When set
#   to a value below fade_start, fade is disabled. It should be
#   noted that fade may add unwanted scaling along the z-axis of a
#   print.  If a user wishes to enable fade, a value of 10.0 is
#   recommended. Default is 0.0, which disables fade.
#fade_target:
#   The z position in which fade should converge. When this value is set
#   to a non-zero value it must be within the range of z-values in the mesh.
#   Users that wish to converge to the z homing position should set this to 0.
#   Default is the average z value of the mesh.
#split_delta_z: .025
#   The amount of Z difference (in mm) along a move that will
#   trigger a split. Default is .025.
#move_check_distance: 5.0
#   The distance (in mm) along a move to check for split_delta_z.
#   This is also the minimum length that a move can be split. Default
#   is 5.0.
#mesh_pps: 2,2
#   A comma separated pair of integers (X,Y) defining the number of
#   points per segment to interpolate in the mesh along each axis. A
#   "segment" can be defined as the space between each probed
#   point. The user may enter a single value which will be applied
#   to both axes.  Default is 2,2.
#algorithm: lagrange
#   The interpolation algorithm to use. May be either "lagrange"
#   or "bicubic". This option will not affect 3x3 grids, which
#   are forced to use lagrange sampling.  Default is lagrange.
#bicubic_tension: .2
#   When using the bicubic algorithm the tension parameter above
#   may be applied to change the amount of slope interpolated.
#   Larger numbers will increase the amount of slope, which
#   results in more curvature in the mesh. Default is .2.
#relative_reference_index:
#   A point index in the mesh to reference all z values to. Enabling
#   this parameter produces a mesh relative to the probed z position
#   at the provided index.


# Tool to help adjust bed leveling screws. One may define a
# [bed_screws] config section to enable a BED_SCREWS_ADJUST g-code
# command.
#[bed_screws]
#screw1: 100,100
#   The X,Y coordinate of the first bed leveling screw. This is a
#   position to command the nozzle to that is directly above the bed
#   screw (or as close as possible while still being above the bed).
#   This parameter must be provided.
#screw1_name: front screw
#   An arbitrary name for the given screw. This name is displayed when
#   the helper script runs. The default is to use a name based upon
#   the screw XY location.
#screw1_fine_adjust:
#   An X,Y coordinate to command the nozzle to so that one can fine
#   tune the bed leveling screw. The default is to not perform fine
#   adjustments on the bed screw.
#screw2:
#screw2_name:
#screw2_fine_adjust:
#...
#   Additional bed leveling screws. At least three screws must be
#   defined.
#horizontal_move_z: 5
#   The height (in mm) that the head should be commanded to move to
#   when moving from one screw location to the next. The default is 5.
#probe_height: 0
#   The height of the probe (in mm) after adjusting for the thermal
#   expansion of bed and nozzle. The default is zero.
#speed: 50
#   The speed (in mm/s) of non-probing moves during the calibration.
#   The default is 50.
#probe_speed: 5
#   The speed (in mm/s) when moving from a horizontal_move_z position
#   to a probe_height position. The default is 5.

# Tool to help adjust bed screws tilt using Z probe. One may define a
# [screws_tilt_adjust] config section to enable a SCREWS_TILT_CALCULATE
# g-code command.
#[screws_tilt_adjust]
#screw1: 100,100
#   The X,Y coordinate of the first bed leveling screw. This is a
#   position to command the nozzle to that is directly above the bed
#   screw (or as close as possible while still being above the bed).
#   This is the base screw used in calculations.
#   This parameter must be provided.
#screw1_name: front screw
#   An arbitrary name for the given screw. This name is displayed when
#   the helper script runs. The default is to use a name based upon
#   the screw XY location.
#screw2:
#screw2_name:
#...
#   Additional bed leveling screws. At least two screws must be
#   defined.
#speed: 50
#   The speed (in mm/s) of non-probing moves during the calibration.
#   The default is 50.
#horizontal_move_z: 5
#   The height (in mm) that the head should be commanded to move to
#   just prior to starting a probe operation. The default is 5.
#samples: 1
#   The number of times to probe each point.  The probed z-values
#   will be averaged.  The default is to probe 1 time.
#sample_retract_dist: 2.0
#   The distance (in mm) to retract between each sample if
#   sampling more than once.  Default is 2mm.
#samples_result: median
#   One can choose median or average between screw probes
#   The default is average.
#screw_thread: CW-M3
#   The type of screw used for bed level, M3, M4 or M5 and the
#   direction of the knob used to level the bed, clockwise decrease
#   counter-clockwise decrease.
#   Accepted values: CW-M3, CCW-M3, CW-M4, CCW-M4, CW-M5, CCW-M5.
#   Default value is CW-M3, most printers use an M3 screw and
#   turning the knob clockwise decrease distance.

# Multiple Z stepper tilt adjustment. This feature enables independent
# adjustment of multiple z steppers (see stepper_z1 section below) to
# adjust for tilt. If this section is present then a Z_TILT_ADJUST
# extended G-Code command becomes available.
#[z_tilt]
#z_positions:
#   A list of X,Y coordinates (one per line; subsequent lines
#   indented) describing the location of each bed "pivot point". The
#   "pivot point" is the point where the bed attaches to the given Z
#   stepper. It is described using nozzle coordinates (the XY position
#   of the nozzle if it could move directly above the point). The
#   first entry corresponds to stepper_z, the second to stepper_z1,
#   the third to stepper_z2, etc. This parameter must be provided.
#points:
#   A list of X,Y coordinates (one per line; subsequent lines
#   indented) that should be probed during a Z_TILT_ADJUST command.
#   Specify coordinates of the nozzle and be sure the probe is above
#   the bed at the given nozzle coordinates. This parameter must be
#   provided.
#speed: 50
#   The speed (in mm/s) of non-probing moves during the calibration.
#   The default is 50.
#horizontal_move_z: 5
#   The height (in mm) that the head should be commanded to move to
#   just prior to starting a probe operation. The default is 5.
#samples: 1
#   The number of times to probe each point.  The probed z-values
#   will be averaged.  The default is to probe 1 time.
#samples_result: average
#   One can choose median or average between probes samples
#   The default is average.
#sample_retract_dist: 2.0
#   The distance (in mm) to retract between each sample if
#   sampling more than once.  Default is 2mm.


# Moving gantry leveling using 4 independently controlled Z motors.
# Corrects hyperbolic parabola effects (potato chip) on moving gantry
# which is more flexible.
# WARNING: Using this on a moving bed may lead to undesirable results.
# If this section is present then a QUAD_GANTRY_LEVEL extended G-Code
# command becomes available. This routine assumes the following Z motor
# configuration:
# ----------------
# |Z1          Z2|
# |  ---------   |
# |  |       |   |
# |  |       |   |
# |  x--------   |
# |Z           Z3|
# ----------------
# Where x is the (0,0) point on the bed
#[quad_gantry_level]
#gantry_corners:
#   A newline separated list of X,Y coordinates describing the
#   two opposing corners of the gantry. The first entry corresponds to
#   Z, the second to Z2.
#   This parameter must be provided.
#points:
#   A newline separated list of four X,Y points that should be probed
#   during a QUAD_GANTRY_LEVEL command.
#   Order of the locations is important, and should correspond to Z,Z1
#   Z2, and Z3 location in order.
#   This parameter must be provided.
#   For maximum accuracy, ensure your probe offsets are configured.
#speed: 50
#   The speed (in mm/s) of non-probing moves during the calibration.
#   The default is 50.
#horizontal_move_z: 5
#   The height (in mm) that the head should be commanded to move to
#   just prior to starting a probe operation. The default is 5
#max_adjust: 4
#   Saftey limit if an ajustment greater than this value is requested
#   quad_gantry_level will abort.
#samples: 1
#   Number of probe samples per point. The defaut is 1
#samples_result: average
#   One can choose median or average between probes samples
#   The default is average.
#sample_retract_dist: 2.0
#   Distance in mm to retract the probe between samples. Default is 2.


# In a multi-extruder printer add an additional extruder section for
# each additional extruder. The additional extruder sections should be
# named "extruder1", "extruder2", "extruder3", and so on. See the
# "extruder" section in example.cfg for a description of available
# parameters.
#[extruder1]
#step_pin: ar36
#dir_pin: ar34
#...
#shared_heater:
#   If this extruder uses the same heater already defined for another
#   extruder then place the name of that extruder here.  For example,
#   should extruder3 and extruder4 share a heater then the extruder3
#   config section should define the heater and the extruder4 section
#   should specify "shared_heater: extruder3". The default is to not
#   reuse an existing heater.
#deactivate_gcode:
#   A list of G-Code commands (one per line; subsequent lines
#   indented) to execute on a G-Code tool change command (eg, "T1")
#   that deactivates this extruder and activates some other
#   extruder. It only makes sense to define this section on
#   multi-extruder printers. The default is to not run any special
#   G-Code commands on deactivation.
#activate_gcode:
#   A list of G-Code commands (one per line; subsequent lines
#   indented) to execute on a G-Code tool change command (eg, "T0")
#   that activates this extruder. It only makes sense to define this
#   section on multi-extruder printers. The default is to not run any
#   special G-Code commands on activation.


# Support for cartesian printers with dual carriages on a single
# axis. The active carriage is set via the SET_DUAL_CARRIAGE extended
# g-code command. The "SET_DUAL_CARRIAGE CARRIAGE=1" command will
# activate the carriage defined in this section (CARRIAGE=0 will
# return activation to the primary carriage). Dual carriage support is
# typically combined with extra extruders - use the SET_DUAL_CARRIAGE
# command in the activate_gcode / deactivate_gcode section of the
# appropriate extruder. Be sure to also use that mechanism to park the
# carriages during deactivation.
#[dual_carriage]
#axis:
#   The axis this extra carriage is on (either x or y). This parameter
#   must be provided.
#step_pin:
#dir_pin:
#enable_pin:
#step_distance:
#endstop_pin:
#position_endstop:
#position_min:
#position_max:
#   See the example.cfg for the definition of the above parameters.


# Heater and temperature sensor verification. Heater verification is
# automatically enabled for each heater that is configured on the
# printer. Use verify_heater sections to change the default settings.
#[verify_heater heater_config_name]
#max_error: 120
#   The maximum "cumulative temperature error" before raising an
#   error. Smaller values result in stricter checking and larger
#   values allow for more time before an error is reported.
#   Specifically, the temperature is inspected once a second and if it
#   is close to the target temperature then an internal "error
#   counter" is reset; otherwise, if the temperature is below the
#   target range then the counter is increased by the amount the
#   reported temperature differs from that range. Should the counter
#   exceed this "max_error" then an error is raised. The default is
#   120.
#check_gain_time:
#   This controls heater verification during initial heating.  Smaller
#   values result in stricter checking and larger values allow for
#   more time before an error is reported. Specifically, during
#   initial heating, as long as the heater increases in temperature
#   within this time frame (specified in seconds) then the internal
#   "error counter" is reset. The default is 20 seconds for extruders
#   and 60 seconds for heater_bed.
#hysteresis: 5
#   The maximum temperature difference (in Celsius) to a target
#   temperature that is considered in range of the target. This
#   controls the max_error range check. It is rare to customize this
#   value. The default is 5.
#heating_gain: 2
#   The minimum temperature (in Celsius) that the heater must increase
#   by during the check_gain_time check. It is rare to customize this
#   value. The default is 2.


# Idle timeout. An idle timeout is automatically enabled - add an
# explicit idle_timeout config section to change the default settings.
#[idle_timeout]
#gcode:
#   A list of G-Code commands (one per line; subsequent lines
#   indented) to execute on an idle timeout. The default is to run
#   "TURN_OFF_HEATERS" and "M84".
#timeout: 600
#   Idle time (in seconds) to wait before running the above G-Code
#   commands. The default is 600 seconds.


# Multi-stepper axes. On a cartesian style printer, the stepper
# controlling a given axis may have additional config blocks defining
# steppers that should be stepped in concert with the primary
# stepper. One may define any number of sections with a numeric suffix
# starting at 1 (for example, "stepper_z1", "stepper_z2", etc.).
#[stepper_z1]
#step_pin: ar36
#dir_pin: ar34
#enable_pin: !ar30
#step_distance: .005
#   See the example.cfg for the definition of the above parameters.
#endstop_pin: ^ar19
#   If an endstop_pin is defined for the additional stepper then the
#   stepper will home until the endstop is triggered. Otherwise, the
#   stepper will home until the endstop on the primary stepper for the
#   axis is triggered.


# Stepper phase adjusted endstops. To use this feature, define a
# config section with an "endstop_phase" prefix followed by the name
# of the corresponding stepper config section (for example,
# "[endstop_phase stepper_z]"). This feature can improve the accuracy
# of endstop switches. Add a bare "[endstop_phase]" declaration to
# enable the ENDSTOP_PHASE_CALIBRATE command.
#[endstop_phase stepper_z]
#phases:
#   This specifies the number of phases of the given stepper motor
#   driver (which is the number of micro-steps multiplied by four).
#   This setting is automatically determined if one uses TMC2130,
#   TMC2208, TMC2224 or TMC2660 drivers with run-time configuration.
#   Otherwise, this parameter must be provided.
#endstop_accuracy: 0.200
#   Sets the expected accuracy (in mm) of the endstop. This represents
#   the maximum error distance the endstop may trigger (eg, if an
#   endstop may occasionally trigger 100um early or up to 100um late
#   then set this to 0.200 for 200um). The default is
#   phases*step_distance.
#endstop_phase:
#   This specifies the phase of the stepper motor driver to expect
#   when hitting the endstop. Only set this value if one is sure the
#   stepper motor driver is reset every time the mcu is reset. If this
#   is not set, then the stepper phase will be detected on the first
#   home and that phase will be used on all subsequent homes.
#endstop_align_zero: False
#   If true then the position_endstop of the axis will effectively be
#   modified so that the zero position for the axis occurs at a full
#   step on the stepper motor. (If used on the Z axis and the print
#   layer height is a multiple of a full step distance then every
#   layer will occur on a full step.) The default is False.


# Heater cooling fans (one may define any number of sections with a
# "heater_fan" prefix). A "heater fan" is a fan that will be enabled
# whenever its associated heater is active. By default, a heater_fan
# has a shutdown_speed equal to max_power.
#[heater_fan my_nozzle_fan]
#pin:
#max_power:
#shutdown_speed:
#cycle_time:
#hardware_pwm:
#kick_start_time:
#   See the "fan" section in example.cfg for a description of the
#   above parameters.
#heater: extruder
#   Name of the config section defining the heater that this fan is
#   associated with. If a comma separated list of heater names is
#   provided here, then the fan will be enabled when any of the given
#   heaters are enabled. The default is "extruder".
#heater_temp: 50.0
#   A temperature (in Celsius) that the heater must drop below before
#   the fan is disabled. The default is 50 Celsius.
#fan_speed: 1.0
#   The fan speed (expressed as a value from 0.0 to 1.0) that the fan
#   will be set to when its associated heater is enabled. The default
#   is 1.0


# Controller cooling fan (one may define any number of sections with a
# "controller_fan" prefix). A "controller fan" is a fan that will be
# enabled whenever its associated heater or any configured stepper
# driver is active. The fan will stop, whenever an idle_timeout is
# reached to ensure no overheating will occur after deactivating a
# watched component.
#[controller_fan my_controller_fan]
#pin:
#max_power:
#shutdown_speed:
#cycle_time:
#hardware_pwm:
#kick_start_time:
#   See the "fan" section in example.cfg for a description of the
#   above parameters.
#idle_timeout:
#   The ammount of time (in seconds) after a stepper driver or heater
#   was active and the fan should be kept running. The default
#   is 30 seconds.
#idle_speed:
#   The fan speed (expressed as a value from 0.0 to 1.0) that the fan
#   will be set to when a heater or stepper driver was active and before
#   the idle_timeout is reached. This must be greater or equal
#   max_power. The default is max_power
#heater:
#   Name of the config section defining the heater that this fan is
#   associated with. If a comma separated list of heater names is
#   provided here, then the fan will be enabled when any of the given
#   heaters are enabled. The default is "extruder".


# Temperature-triggered cooling fans (one may define any number of
# sections with a "temperature_fan" prefix). A "temperature fan" is a
# fan that will be enabled whenever its associated sensor is above a
# set temperature. By default, a temperature_fan has a shutdown_speed
# equal to max_power.
#[temperature_fan my_temp_fan]
#pin:
#max_power:
#shutdown_speed:
#cycle_time:
#hardware_pwm:
#kick_start_time:
#   See the "fan" section in example.cfg for a description of the
#   above parameters.
#sensor_type: EPCOS 100K B57560G104F
#sensor_pin: analog13
#   See the "heater" section for details about the sensor_type and
#   sensor_pin parameters.
#min_temp: 0
#max_temp: 100
#   The maximum range of valid temperatures (in Celsius) that the
#   sensor must remain within. This controls a safety feature
#   implemented in the micro-controller code - should the measured
#   temperature ever fall outside this range then the micro-controller
#   will go into a shutdown state. Set this range just wide enough so
#   that reasonable temperatures do not result in an error. These
#   parameters must be provided.
#target_temp: 40.0
#   A temperature (in Celsius) that will be the target temperature.
#   The default is 40 degrees.
#max_speed: 1.0
#   The fan speed (expressed as a value from 0.0 to 1.0) that the fan
#   will be set to when the sensor temperature exceeds the set value.
#   The default is 1.0.
#min_speed: 0.3
#   The minimum fan speed (expressed as a value from 0.0 to 1.0) that
#   the fan will be set to for PID temperature fans.
#   The default is 0.3.
#control: watermark
#   Control algorithm (either watermark or pid). This parameter must
#   be provided.
#pid_Kp: 40
#   Kp is the "proportional" constant for the pid. This parameter must
#   be provided for PID temperature fans.
#pid_Ki: 0.2
#   Ki is the "integral" constant for the pid. This parameter must be
#   provided for PID temperature fans.
#pid_Kd: 0.1
#   Kd is the "derivative" constant for the pid. This parameter must
#   be provided for PID temperature fans.
#pid_deriv_time: 2.0
#   A time value (in seconds) over which the derivative in the pid
#   will be smoothed to reduce the impact of measurement noise. The
#   default is 2 seconds.
#pid_integral_max:
#   The maximum "windup" the integral term may accumulate. The default
#   is to use the same value as max_power.
#gcode_id:
#   If set, the temperature will be reported in M105 queries using the
#   given id. The default is to not report the temperature via M105.


# Additional micro-controllers (one may define any number of sections
# with an "mcu" prefix). Additional micro-controllers introduce
# additional pins that may be configured as heaters, steppers, fans,
# etc.. For example, if an "[mcu extra_mcu]" section is introduced,
# then pins such as "extra_mcu:ar9" may then be used elsewhere in the
# config (where "ar9" is a hardware pin name or alias name on the
# given mcu).
#[mcu my_extra_mcu]
# See the "mcu" section in example.cfg for configuration parameters.


# Servos (one may define any number of sections with a "servo"
# prefix). The servos may be controlled using the SET_SERVO g-code
# command. For example: SET_SERVO SERVO=my_servo ANGLE=180
#[servo my_servo]
#pin: ar7
#   PWM output pin controlling the servo. This parameter must be
#   provided.
#maximum_servo_angle: 180
#   The maximum angle (in degrees) that this servo can be set to. The
#   default is 180 degrees.
#minimum_pulse_width: 0.001
#   The minimum pulse width time (in seconds). This should correspond
#   with an angle of 0 degrees. The default is 0.001 seconds.
#maximum_pulse_width: 0.002
#   The maximum pulse width time (in seconds). This should correspond
#   with an angle of maximum_servo_angle. The default is 0.002
#   seconds.
#initial_angle: 70
#   Initial angle to set the servo to when the mcu resets.  Must be between
#   0 and maximum_servo_angle  This parameter is optional.  If both
#   initial_angle and initial_pulse_width are set initial_angle will be used.
#initial_pulse_width: 0.0015
#   Initial pulse width time (in seconds) to set the servo to when
#   the mcu resets.  Must be between minimum_pulse_width and maximum_pulse_width.
#   This parameter is optional.  If both initial_angle and initial_pulse_width
#   are set initial_angle will be used
#enable: True
#   Enable or disable servo. It can be enabled or disabled later using
#   SET_SERVO SERVO=my_servo ENABLE=<0|1> g-command. The default is True (=enabled)

# Statically configured digital output pins (one may define any number
# of sections with a "static_digital_output" prefix). Pins configured
# here will be setup as a GPIO output during MCU configuration. They
# can not be changed at run-time.
#[static_digital_output my_output_pins]
#pins:
#   A comma separated list of pins to be set as GPIO output pins. The
#   pin will be set to a high level unless the pin name is prefaced
#   with "!". This parameter must be provided.


# Manual steppers (one may define any number of sections with a
# "manual_stepper" prefix). These are steppers that are controlled by
# the MANUAL_STEPPER g-code command. For example: "MANUAL_STEPPER
# STEPPER=my_stepper MOVE=10 SPEED=5". See the docs/G-Codes.md file
# for a description of the MANUAL_STEPPER command. The steppers are
# not connected to the normal printer kinematics.
#[manual_stepper my_stepper]
#step_pin:
#dir_pin:
#enable_pin:
#step_distance:
#   See the "[stepper_x]" section in example.cfg for a description of
#   these parameters.
#velocity:
#   Set the default velocity (in mm/s) for the stepper. This value
#   will be used if a MANUAL_STEPPER command does not specify a SPEED
#   parameter. The default is 5mm/s.
#accel:
#   Set the default acceleration (in mm/s^2) for the stepper. An
#   acceleration of zero will result in no acceleration. This value
#   will be used if a MANUAL_STEPPER command does not specify an ACCEL
#   parameter. The default is zero.
#endstop_pin:
#   Endstop switch detection pin. If specified, then one may perform
#   "homing moves" by adding a STOP_ON_ENDSTOP parameter to
#   MANUAL_STEPPER movement commands.


# Run-time configurable output pins (one may define any number of
# sections with an "output_pin" prefix). Pins configured here will be
# setup as output pins and one may modify them at run-time using
# "SET_PIN PIN=my_pin VALUE=.1" type extended g-code commands.
#[output_pin my_pin]
#pin:
#   The pin to configure as an output. This parameter must be
#   provided.
#pwm: False
#   Set if the output pin should be capable of pulse-width-modulation.
#   If this is true, the value fields should be between 0 and 1; if it
#   is false the value fields should be either 0 or 1. The default is
#   False.
#static_value:
#   If this is set, then the pin is assigned to this value at startup
#   and the pin can not be changed during runtime. A static pin uses
#   slightly less ram in the micro-controller. The default is to use
#   runtime configuration of pins.
#value:
#   The value to initially set the pin to during MCU configuration.
#   The default is 0 (for low voltage).
#shutdown_value:
#   The value to set the pin to on an MCU shutdown event. The default
#   is 0 (for low voltage).
#cycle_time: 0.100
#   The amount of time (in seconds) per PWM cycle. It is recommended
#   this be 10 milliseconds or greater when using software based
#   PWM. The default is 0.100 seconds for pwm pins.
#hardware_pwm: False
#   Enable this to use hardware PWM instead of software PWM. When
#   using hardware PWM the actual cycle time is constrained by the
#   implementation and may be significantly different than the
#   requested cycle_time. The default is False.
#scale:
#   This parameter can be used to alter how the 'value' and
#   'shutdown_value' parameters are interpreted for pwm pins. If
#   provided, then the 'value' parameter should be between 0.0 and
#   'scale'. This may be useful when configuring a PWM pin that
#   controls a stepper voltage reference. The 'scale' can be set to
#   the equivalent stepper amperage if the PWM were fully enabled, and
#   then the 'value' parameter can be specified using the desired
#   amperage for the stepper. The default is to not scale the 'value'
#   parameter.


# Multiple pin outputs (one may define any number of sections with a
# "multi_pin" prefix). A multi_pin output creates an internal pin
# alias that can modify multiple output pins each time the alias pin
# is set. For example, one could define a "[multi_pin my_fan]" object
# containing two pins and then set "pin=multi_pin:my_fan" in the
# "[fan]" section - on each fan change both output pins would be
# updated. These aliases may not be used with stepper motor pins.
#[multi_pin my_multi_pin]
#pins:
#   A comma separated list of pins associated with this alias. This
#   parameter must be provided.


# SAMD SERCOM configuration to specify which pins to use on a given SERCOM.
# One may define one section with the "samd_sercom" prefix per
# SERCOM available. Each SERCOM must be configured prior to using it as
# SPI or I2C peripheral. Place this config section above any other section
# that makes use of SPI or I2C buses.
#[samd_sercom sercom0]
#tx_pin:
#   MOSI pin for SPI communication, or SDA (data) pin for I2C
#   communication. The pin must have a valid pinmux configuration
#   for the given SERCOM peripheral. This parameter must be provided.
#rx_pin:
#   MISO pin for SPI communication. This pin is not used for I2C
#   communication (I2C uses tx_pin for both sending and receiving).
#   The pin must have a valid pinmux configuration for the given
#   SERCOM peripheral. This parameter is optional.
#clk_pin:
#   CLK pin for SPI communication, or SCL (clock) pin for I2C
#   communication. The pin must have a valid pinmux configuration
#   for the given SERCOM peripheral. This parameter must be provided.


# Statically configured AD5206 digipots connected via SPI bus (one may
# define any number of sections with an "ad5206" prefix).
#[ad5206 my_digipot]
#enable_pin:
#   The pin corresponding to the AD5206 chip select line. This pin
#   will be set to low at the start of SPI messages and raised to high
#   after the message completes. This parameter must be provided.
#spi_bus:
#spi_speed:
#spi_software_sclk_pin:
#spi_software_mosi_pin:
#spi_software_miso_pin:
#   These optional parameters allow one to customize the SPI settings
#   used to communicate with the chip.
#channel_1:
#channel_2:
#channel_3:
#channel_4:
#channel_5:
#channel_6:
#   The value to statically set the given AD5206 channel to. This is
#   typically set to a number between 0.0 and 1.0 with 1.0 being the
#   highest resistance and 0.0 being the lowest resistance. However,
#   the range may be changed with the 'scale' parameter (see below).
#   If a channel is not specified then it is left unconfigured.
#scale:
#   This parameter can be used to alter how the 'channel_x' parameters
#   are interpreted. If provided, then the 'channel_x' parameters
#   should be between 0.0 and 'scale'. This may be useful when the
#   AD5206 is used to set stepper voltage references. The 'scale' can
#   be set to the equivalent stepper amperage if the AD5206 were at
#   its highest resistance, and then the 'channel_x' parameters can be
#   specified using the desired amperage value for the stepper. The
#   default is to not scale the 'channel_x' parameters.


# Statically configured MCP4451 digipot connected via I2C bus (one may
# define any number of sections with an "mcp4451" prefix).
#[mcp4451 my_digipot]
#i2c_mcu: mcu
#   The name of the micro-controller that the MCP4451 chip is
#   connected to. The default is "mcu".
#i2c_address:
#   The i2c address that the chip is using on the i2c bus. This
#   parameter must be provided.
#wiper_0:
#wiper_1:
#wiper_2:
#wiper_3:
#   The value to statically set the given MCP4451 "wiper" to. This is
#   typically set to a number between 0.0 and 1.0 with 1.0 being the
#   highest resistance and 0.0 being the lowest resistance. However,
#   the range may be changed with the 'scale' parameter (see
#   below). If a wiper is not specified then it is left unconfigured.
#scale:
#   This parameter can be used to alter how the 'wiper_x' parameters
#   are interpreted. If provided, then the 'wiper_x' parameters should
#   be between 0.0 and 'scale'. This may be useful when the MCP4451 is
#   used to set stepper voltage references. The 'scale' can be set to
#   the equivalent stepper amperage if the MCP4451 were at its highest
#   resistance, and then the 'wiper_x' parameters can be specified
#   using the desired amperage value for the stepper. The default is
#   to not scale the 'wiper_x' parameters.


# Statically configured MCP4728 digital-to-analog converter connected
# via I2C bus (one may define any number of sections with an "mcp4728"
# prefix).
#[mcp4728 my_dac]
#i2c_mcu: mcu
#   The name of the micro-controller that the MCP4451 chip is
#   connected to. The default is "mcu".
#i2c_address:
#   The i2c address that the chip is using on the i2c bus. The default
#   is zero.
#channel_a:
#channel_b:
#channel_c:
#channel_d:
#   The value to statically set the given MCP4728 channel to. This is
#   typically set to a number between 0.0 and 1.0 with 1.0 being the
#   highest voltage and 0.0 being the lowest voltage. However, the
#   range may be changed with the 'scale' parameter (see below). If a
#   channel is not specified then it is left unconfigured.
#scale:
#   This parameter can be used to alter how the 'channel_x' parameters
#   are interpreted. If provided, then the 'channel_x' parameters
#   should be between 0.0 and 'scale'. This may be useful when the
#   MCP4728 is used to set stepper voltage references. The 'scale' can
#   be set to the equivalent stepper amperage if the MCP4728 were at
#   its highest voltage, and then the 'channel_x' parameters can be
#   specified using the desired amperage value for the stepper. The
#   default is to not scale the 'channel_x' parameters.


# Statically configured MCP4018 digipot connected via two gpio "bit
# banging" pins (one may define any number of sections with an
# "mcp4018" prefix).
#[mcp4018 my_digipot]
#scl_pin:
#   The SCL "clock" pin. This parameter must be provided.
#sda_pin:
#   The SDA "data" pin. This parameter must be provided.
#wiper:
#   The value to statically set the given MCP4018 "wiper" to. This is
#   typically set to a number between 0.0 and 1.0 with 1.0 being the
#   highest resistance and 0.0 being the lowest resistance. However,
#   the range may be changed with the 'scale' parameter (see
#   below). This parameter must be provided.
#scale:
#   This parameter can be used to alter how the 'wiper' parameter is
#   interpreted. If provided, then the 'wiper' parameter should be
#   between 0.0 and 'scale'. This may be useful when the MCP4018 is
#   used to set stepper voltage references. The 'scale' can be set to
#   the equivalent stepper amperage if the MCP4018 is at its highest
#   resistance, and then the 'wiper' parameter can be specified using
#   the desired amperage value for the stepper. The default is to not
#   scale the 'wiper' parameter.


# Configure an SX1509 I2C to GPIO expander. Due to the delay incurred
# by I2C communication you should NOT use SX1509 pins as stepper enable,
# step or dir pins or any other pin that requires fast bit-banging. They
# are best used as static or gcode controlled digital outputs or hardware-pwm
# pins for e.g. fans. One may define any number of sections with an "sx1509"
# prefix. Each expander provides a set of 16 pins (sx1509_my_sx1509:PIN_0 to
# sx1509_my_sx1509:PIN_15) which can be used in the printer configuration.
#[sx1509 my_sx1509]
#i2c_mcu: mcu
#   The name of the micro-controller that the SX1509 chip is connected
#   to. The default is "mcu".
#i2c_address:
#   I2C address used by this expander. Depending on the hardware jumpers
#   this is one out of the following addresses: 62 63 112 113. This
#   parameter must be provided.
#i2c_bus:
#   If the I2C implementation of your microcontroller supports
#   multiple I2C busses, you may specify the bus name here. The
#   default is to use the default micro-controller i2c bus.


# Configure a TMC2130 stepper motor driver via SPI bus. To use this
# feature, define a config section with a "tmc2130" prefix followed by
# the name of the corresponding stepper config section (for example,
# "[tmc2130 stepper_x]").
#[tmc2130 stepper_x]
#cs_pin:
#   The pin corresponding to the TMC2130 chip select line. This pin
#   will be set to low at the start of SPI messages and raised to high
#   after the message completes. This parameter must be provided.
#spi_bus:
#spi_speed:
#spi_software_sclk_pin:
#spi_software_mosi_pin:
#spi_software_miso_pin:
#   These optional parameters allow one to customize the SPI settings
#   used to communicate with the chip.
#microsteps:
#   The number of microsteps to configure the driver to use. Valid
#   values are 1, 2, 4, 8, 16, 32, 64, 128, 256. This parameter must
#   be provided.
#interpolate: True
#   If true, enable step interpolation (the driver will internally
#   step at a rate of 256 micro-steps). The default is True.
#run_current:
#   The amount of current (in amps) to configure the driver to use
#   during stepper movement. This parameter must be provided.
#hold_current:
#   The amount of current (in amps) to configure the driver to use
#   when the stepper is not moving. The default is to use the same
#   value as run_current.
#sense_resistor: 0.110
#   The resistance (in ohms) of the motor sense resistor. The default
#   is 0.110 ohms.
#stealthchop_threshold: 0
#   The velocity (in mm/s) to set the "stealthChop" threshold to. When
#   set, "stealthChop" mode will be enabled if the stepper motor
#   velocity is below this value. The default is 0, which disables
#   "stealthChop" mode.
#driver_IHOLDDELAY: 8
#driver_TPOWERDOWN: 0
#driver_TBL: 1
#driver_TOFF: 4
#driver_HEND: 7
#driver_HSTRT: 0
#driver_PWM_AUTOSCALE: True
#driver_PWM_FREQ: 1
#driver_PWM_GRAD: 4
#driver_PWM_AMPL: 128
#driver_SGT: 0
#   Set the given register during the configuration of the TMC2130
#   chip. This may be used to set custom motor parameters. The
#   defaults for each parameter are next to the parameter name in the
#   above list.
#diag1_pin:
#   The micro-controller pin attached to the DIAG1 line of the TMC2130
#   chip. Setting this creates a "tmc2130_stepper_x:virtual_endstop"
#   virtual pin which may be used as the stepper's endstop_pin. Doing
#   this enables "sensorless homing". (Be sure to also set driver_SGT
#   to an appropriate sensitivity value.) The default is to not enable
#   sensorless homing. See docs/Sensorless_Homing.md for details on how
#   to configure this.


# Configure a TMC2208 (or TMC2224) stepper motor driver via single
# wire UART. To use this feature, define a config section with a
# "tmc2208" prefix followed by the name of the corresponding stepper
# config section (for example, "[tmc2208 stepper_x]").
#[tmc2208 stepper_x]
#uart_pin:
#   The pin connected to the TMC2208 PDN_UART line. This parameter
#   must be provided.
#tx_pin:
#   If using separate receive and transmit lines to communicate with
#   the driver then set uart_pin to the receive pin and tx_pin to the
#   transmit pin. The default is to use uart_pin for both reading and
#   writing.
#microsteps:
#   The number of microsteps to configure the driver to use. Valid
#   values are 1, 2, 4, 8, 16, 32, 64, 128, 256. This parameter must
#   be provided.
#interpolate: True
#   If true, enable step interpolation (the driver will internally
#   step at a rate of 256 micro-steps). The default is True.
#run_current:
#   The amount of current (in amps) to configure the driver to use
#   during stepper movement. This parameter must be provided.
#hold_current:
#   The amount of current (in amps) to configure the driver to use
#   when the stepper is not moving. The default is to use the same
#   value as run_current.
#sense_resistor: 0.110
#   The resistance (in ohms) of the motor sense resistor. The default
#   is 0.110 ohms.
#stealthchop_threshold: 0
#   The velocity (in mm/s) to set the "stealthChop" threshold to. When
#   set, "stealthChop" mode will be enabled if the stepper motor
#   velocity is below this value. The default is 0, which disables
#   "stealthChop" mode.
#driver_IHOLDDELAY: 8
#driver_TPOWERDOWN: 20
#driver_TBL: 2
#driver_TOFF: 3
#driver_HEND: 0
#driver_HSTRT: 5
#driver_PWM_AUTOGRAD: True
#driver_PWM_AUTOSCALE: True
#driver_PWM_LIM: 12
#driver_PWM_REG: 8
#driver_PWM_FREQ: 1
#driver_PWM_GRAD: 14
#driver_PWM_OFS: 36
#   Set the given register during the configuration of the TMC2208
#   chip. This may be used to set custom motor parameters. The
#   defaults for each parameter are next to the parameter name in the
#   above list.


# Configure a TMC2660 stepper motor driver via SPI bus. To use this
# feature, define a config section with a tmc2660 prefix followed by
# the name of the corresponding stepper config section (for example,
# "[tmc2660 stepper_x]"). The current of the TMC2660 stepper driver
# is adjustable at run-time using
# "SET_TMC_CURRENT STEPPER=stepper_x CURRENT=.1" type extended g-code
# commands.
#[tmc2660 stepper_x]
#cs_pin:
#   The pin corresponding to the TMC2660 chip select line. This pin
#   will be set to low at the start of SPI messages and set to high
#   after the message transfer completes. This parameter must be provided.
#spi_bus:
#   Select the SPI bus the TMC2660 stepper driver is connected to.
#   This depends on the physical connections on your board, as well as
#   the SPI implementation of your particular micro-controller. The
#   default is to use the default micro-controller spi bus.
#spi_speed: 4000000
#   SPI bus frequency used to communicate with the TMC2660 stepper
#   driver. The default is 4000000.
#spi_software_sclk_pin:
#spi_software_mosi_pin:
#spi_software_miso_pin:
#   These optional parameters allow one to customize the SPI settings
#   used to communicate with the chip.
#microsteps:
#   The number of microsteps to configure the driver to use. Valid
#   values are 1, 2, 4, 8, 16, 32, 64, 128, 256. This parameter must
#   be provided.
#interpolate: True
#   If true, enable step interpolation (the driver will internally
#   step at a rate of 256 micro-steps). This only works if microsteps
#   is set to 16. The default is True.
#run_current:
#   The amount of current (in ampere) used by the driver during stepper
#   movement. This parameter must be provided.
#sense_resistor:
#   The resistance (in ohms) of the motor sense resistor. This parameter
#   must be provided.
#idle_current_percent: 100
#   The percentage of the run_current the stepper driver will be
#   lowered to when the idle timeout expires (you need to set up the
#   timeout using a [idle_timeout] config section). The current will
#   be raised again once the stepper has to move again. Make sure to
#   set this to a high enough value such that the steppers do not lose
#   their position. There is also small delay until the  current is
#   raised again, so take this into account when commanding fast moves
#   while the stepper is idling. The default is 100 (no reduction).
#driver_DEDGE: 0
#driver_TBL: 2
#driver_RNDTF: 0
#driver_HDEC: 0
#driver_CHM: 0
#driver_HEND: 3
#driver_HSTRT: 3
#driver_TOFF: 4
#driver_SEIMIN: 0
#driver_SEDN: 0
#driver_SEMAX: 0
#driver_SEUP: 0
#driver_SEMIN: 0
#driver_SFILT: 1
#driver_SGT: 0
#driver_SLPH: 0
#driver_SLPL: 0
#driver_DISS2G: 0
#driver_TS2G: 3
#   Set the given parameter during the configuration of the TMC2660
#   chip. This may be used to set custom driver parameters. The
#   defaults for each parameter are next to the parameter name in the
#   list above. See the TMC2660 datasheet about what each parameter
#   does and what the restrictions on parameter combinations are.
#   Be especially aware of the CHOPCONF register, where setting CHM to
#   either 0 or one will lead to layout changes (the first bit of HDEC)
#   is interpreted as the MSB of HSTRT in this case).

# Configure a TMC5160 stepper motor driver via SPI bus. To use this
# feature, define a config section with a "tmc5160" prefix followed by
# the name of the corresponding stepper config section (for example,
# "[tmc5160 stepper_x]").
# This block is an example with values that may be intersting.
# If you want to turn further, see trinamics documentation.
# Following registers are implemented with theyre fields:
# COOLCONF, CHOPCONF, DRV_STATUS, FACTORY_CONF, GCONF, GSTAT, IHOLD_IRUN, IOIN
# LOST_STEPS, MSCNT, MSCURACT, OTP_READ, PWM_AUTO, PWMCONF, PWM_SCALE, TPOWERDOWN,
# TPWMTHRS, TSTEP
#[tmc5160 stepper_x]
#cs_pin:
#   The pin corresponding to the TMC5160 chip select line. This pin
#   will be set to low at the start of SPI messages and raised to high
#   after the message completes. This parameter must be provided.
#spi_bus:
#spi_speed:
#spi_software_sclk_pin:
#spi_software_mosi_pin:
#spi_software_miso_pin:
#   These optional parameters allow one to customize the SPI settings
#   used to communicate with the chip.
#microsteps:
#   The number of microsteps to configure the driver to use. Valid
#   values are 1, 2, 4, 8, 16, 32, 64, 128, 256. This parameter must
#   be provided.
#interpolate: True
#   If true, enable step interpolation (the driver will internally
#   step at a rate of 256 micro-steps). The default is True.
#run_current:
#   The amount of current (in amps) to configure the driver to use
#   during stepper movement. This parameter must be provided.
#hold_current:
#   The amount of current (in amps) to configure the driver to use
#   when the stepper is not moving. The default is to use the same
#   value as run_current.
#sense_resistor: 0.075
#   The resistance (in ohms) of the motor sense resistor. The default
#   is 0.075 ohms.
#stealthchop_threshold: 0
#   The velocity (in mm/s) to set the "stealthChop" threshold to. When
#   set, "stealthChop" mode will be enabled if the stepper motor
#   velocity is below this value. The default is 0, which disables
#   "stealthChop" mode. Try to reexperience this with tmc5160.
#   Values can be much higher than other tmcs.
#driver_IHOLDDELAY: 6
#driver_TPOWERDOWN: 10
#driver_TBL: 2
#driver_TOFF: 0
#driver_HEND: 2
#driver_HSTRT: 5
#driver_tpfd: 4
#driver_pwm_autoscale: True
#driver_pwm_autograd: True
#driver_pwm_freq: 1
#driver_PWM_GRAD: 0
#driver_PWM_OFS: 30
#driver_PWM_REG: 4
#driver_PWM_LIM: 12
#driver_SGT: 0
#   Set the given register during the configuration of the TMC5160
#   chip. This may be used to set custom motor parameters. The
#   defaults for each parameter are next to the parameter name in the
#   above list.
#diag1_pin:
#   The micro-controller pin attached to the DIAG1 line of the TMC5160
#   chip. Setting this creates a "tmc5160_stepper_x:virtual_endstop"
#   virtual pin which may be used as the stepper's endstop_pin. Doing
#   this enables "sensorless homing". (Be sure to also set driver_SGT
#   to an appropriate sensitivity value.) The default is to not enable
#   sensorless homing. See docs/Sensorless_Homing.md for details on how
#   to configure this.
#driver_semin: 0
#driver_seup: 0
#driver_semax: 0
#driver_sedn: 0
#driver_seimin: 0
#driver_sfilt: 0

# Homing override. One may use this mechanism to run a series of
# g-code commands in place of a G28 found in the normal g-code input.
# This may be useful on printers that require a specific procedure to
# home the machine.
#[homing_override]
#gcode:
#   A list of G-Code commands (one per line; subsequent lines
#   indented) to execute in place of G28 commands found in the normal
#   g-code input. If a G28 is contained in this list of commands then
#   it will invoke the normal homing procedure for the printer. The
#   commands listed here must home all axes. This parameter must be
#   provided.
#axes: xyz
#   The axes to override. For example, if this is set to "z" then the
#   override script will only be run when the z axis is homed (eg, via
#   a "G28" or "G28 Z0" command). Note, the override script should
#   still home all axes. The default is "xyz" which causes the
#   override script to be run in place of all G28 commands.
#set_position_x:
#set_position_y:
#set_position_z:
#   If specified, the printer will assume the axis is at the specified
#   position prior to running the above g-code commands. Setting this
#   disables homing checks for that axis. This may be useful if the
#   head must move prior to invoking the normal G28 mechanism for an
#   axis. The default is to not force a position for an axis.


# Support manually moving stepper motors for diagnostic purposes.
# Note, using this feature may place the printer in an invalid state -
# see docs/G-Codes.md for important details.
#[force_move]
#enable_force_move: False
#   Set to true to enable FORCE_MOVE and SET_KINEMATIC_POSITION
#   extended G-Code commands. The default is false.


# A virtual sdcard may be useful if the host machine is not fast
# enough to run OctoPrint well. It allows the Klipper host software to
# directly print gcode files stored in a directory on the host using
# standard sdcard G-Code commands (eg, M24).
#[virtual_sdcard]
#path: ~/.octoprint/uploads/
#   The path of the local directory on the host machine to look for
#   g-code files. This is a read-only directory (sdcard file writes
#   are not supported). One may point this to OctoPrint's upload
#   directory (generally ~/.octoprint/uploads/ ). This parameter must
#   be provided.


# Support for a display attached to the micro-controller.
#[display]
#lcd_type:
#   The type of LCD chip in use. This may be "hd44780" (which is used
#   in "RepRapDiscount 2004 Smart Controller" type displays), "st7920"
#   (which is used in "RepRapDiscount 12864 Full Graphic Smart
#   Controller" type displays), "uc1701" (which is used in "MKS Mini
#   12864" type displays), or "ssd1306". This parameter must be
#   provided.
#rs_pin:
#e_pin:
#d4_pin:
#d5_pin:
#d6_pin:
#d7_pin:
#   The pins connected to an hd44780 type lcd. These parameters must
#   be provided when using an hd44780 display.
#cs_pin:
#sclk_pin:
#sid_pin:
#   The pins connected to an st7920 type lcd. These parameters must be
#   provided when using an st7920 display.
#cs_pin:
#a0_pin:
#   The pins connected to an uc1701 type lcd. These parameters must be
#   provided when using an uc1701 display.
#rs_pin:
#cs_pin:
#a0_pin:
#   The pins connected to an st7567 type lcd. These parameters must be
#   provided when using an st7567 display.
#contrast:
#   The contrast to set when using a uc1701/st7567 type displays.  The value
#   may range from 0 to 63. Default is 40 for uc1701 and 60 for st7567.
#cs_pin:
#dc_pin:
#spi_bus:
#spi_speed:
#spi_software_sclk_pin:
#spi_software_mosi_pin:
#spi_software_miso_pin:
#   The pins connected to an ssd1306 type lcd when in "4-wire" spi
#   mode. The parameters that start with "spi_" are optional and they
#   control the spi settings used to communicate with the chip. The
#   default is to use i2c mode for ssd1306 displays.
#menu_root:
#   Entry point for menu, root menu container name. If this parameter
#   is not provided then default menu root is used. When provided
#   menu entry is 'deck' type then it'll be initiated immediately at startup.
#   Description of menu items is located in example-menu.cfg file.
#menu_timeout:
#   Timeout for menu. Being inactive this amount of seconds will trigger
#   menu exit or return to root menu when having autorun enabled.
#   The default is 0 seconds (disabled)
#encoder_pins:
#   The pins connected to encoder. 2 pins must be provided when
#   using encoder. This parameter must be provided when using menu.
#click_pin:
#   The pin connected to 'enter' button or encoder 'click'. This parameter
#   must be provided when using menu. The presence of an 'analog_range_click_pin'
#   config parameter turns this parameter from digital to analog.
#back_pin:
#   The pin connected to 'back' button. This parameter is optional, menu
#   can be used without it. The presence of an 'analog_range_back_pin'
#   config parameter turns this parameter from digital to analog.
#up_pin:
#   The pin connected to 'up' button. This parameter must be provided
#   when using menu without encoder. The presence of an 'analog_range_up_pin'
#   config parameter turns this parameter from digital to analog.
#down_pin:
#   The pin connected to 'down' button. This parameter must be provided
#   when using menu without encoder. The presence of an 'analog_range_down_pin'
#   config parameter turns this parameter from digital to analog.
#kill_pin:
#   The pin connected to 'kill' button. This button will call emergency stop.
#   The presence of an 'analog_range_kill_pin' config parameter turns this
#   parameter from digital to analog.
#analog_pullup_resistor: 4700
#   The resistance (in ohms) of the pullup attached to the analog button.
#   The default is 4700 ohms.
#analog_pin_debug:
#   When enabled it will output analog (ADC) button readings to the log.
#   It's useful for finding analog button resistance range values.
#   The default is False (disabled)
#analog_range_click_pin:
#   The resistance range for a 'enter' button. Range minimum and maximum
#   comma-separated values must be provided when using analog button.
#analog_range_back_pin:
#   The resistance range for a 'back' button. Range minimum and maximum
#   comma-separated values must be provided when using analog button.
#analog_range_up_pin:
#   The resistance range for a 'up' button. Range minimum and maximum
#   comma-separated values must be provided when using analog button.
#analog_range_down_pin:
#   The resistance range for a 'down' button. Range minimum and maximum
#   comma-separated values must be provided when using analog button.
#analog_range_kill_pin:
#   The resistance range for a 'kill' button. Range minimum and maximum
#   comma-separated values must be provided when using analog button.


# Custom thermistors (one may define any number of sections with a
# "thermistor" prefix). A custom thermistor may be used in the
# sensor_type field of a heater config section. (For example, if one
# defines a "[thermistor my_thermistor]" section then one may use a
# "sensor_type: my_thermistor" when defining a heater.) Be sure to
# place the thermistor section in the config file above its first use
# in a heater section.
#[thermistor my_thermistor]
#temperature1:
#resistance1:
#temperature2:
#resistance2:
#temperature3:
#resistance3:
#   Three resistance measurements (in Ohms) at the given temperatures
#   (in Celsius). The three measurements will be used to calculate the
#   Steinhart-Hart coefficients for the thermistor. These parameters
#   must be provided when using Steinhart-Hart to define the
#   thermistor.
#beta:
#   Alternatively, one may define temperature1, resistance1, and beta
#   to define the thermistor parameters. This parameter must be
#   provided when using "beta" to define the thermistor.


# Custom ADC temperature sensors (one may define any number of
# sections with an "adc_temperature" prefix). This allows one to
# define a custom temperature sensor that measures a voltage on an
# Analog to Digital Converter (ADC) pin and uses linear interpolation
# between a set of configured temperature/voltage (or
# temperature/resistance) measurements to determine the
# temperature. The resulting sensor can be used as a sensor_type in a
# heater section. (For example, if one defines a "[adc_temperature
# my_sensor]" section then one may use a "sensor_type: my_sensor" when
# defining a heater.) Be sure to place the sensor section in the
# config file above its first use in a heater section.
#[adc_temperature my_sensor]
#temperature1:
#voltage1:
#temperature2:
#voltage2:
#...
#   A set of temperatures (in Celsius) and voltages (in Volts) to use
#   as reference when converting a temperature. At least two
#   measurements must be provided.
#temperature1:
#resistance1:
#temperature2:
#resistance2:
#...
#   Alternatively one may specify a set of temperatures (in Celsius)
#   and resistance (in Ohms) to use as reference when converting a
#   temperature. At least two measurements must be provided.


# MAXxxxxx serial peripheral interface (SPI) temperature based
# sensors. The following parameters are available in heater sections
# that use one of these sensor types.
#[extruder]
# See the "extruder" section in example.cfg for a description of
# heater parameters. The parameters below describe sensor parameters.
#sensor_type:
#   One of "MAX6675", "MAX31855", "MAX31856", or "MAX31865".
#spi_speed: 4000000
#   The SPI speed (in hz) to use when communicating with the chip.
#   The default is 4000000.
#spi_bus:
#spi_software_sclk_pin:
#spi_software_mosi_pin:
#spi_software_miso_pin:
#   These optional parameters allow one to customize the SPI settings
#   used to communicate with the chip.
#sensor_pin:
#   The chip select line for the sensor chip. This parameter must be
#   provided.
#tc_type: K
#tc_use_50Hz_filter: False
#tc_averaging_count: 1
#   The above parameters control the sensor parameters of MAX31856
#   chips.  The defaults for each parameter are next to the parameter
#   name in the above list.
#rtd_nominal_r: 100
#rtd_reference_r: 430
#rtd_num_of_wires: 2
#rtd_use_50Hz_filter: False
#   The above parameters control the sensor parameters of MAX31865
#   chips.  The defaults for each parameter are next to the parameter
#   name in the above list.


# G-Code macros (one may define any number of sections with a
# "gcode_macro" prefix).
#[gcode_macro my_cmd]
#gcode:
#   A list of G-Code commands (one per line; subsequent lines
#   indented) to execute in place of "my_cmd". This parameter is
#   evaluated using Python "string format syntax" with the command
#   parameters as named arguments. For example, if one were to define
#   a macro MY_DELAY with gcode "G4 P{DELAY}" then the command
#   "MY_DELAY DELAY=100" would evaluate to "G4 P100". This parameter
#   must be provided.
#default_parameter_<parameter>:
#   One may define any number of options with a "default_parameter_"
#   prefix. Use this to define default values for g-code parameters.
#   For example, if one were to define the macro MY_DELAY with gcode
#   "G4 P{DELAY}" along with "default_parameter_DELAY = 50" then the
#   command "MY_DELAY" would evaluate to "G4 P50". The default is to
#   require that all parameters used in the gcode script be present in
#   the command invoking the macro.


# Enable the "M118" and "RESPOND" extended commands.
# [respond]
# default_type: echo
#    Sets the default prefix of the "M118" and "RESPOND" output to one of
#    the following:
#        echo: "echo: " (This is the default)
#        command: "// "
#        error: "!! "
# default_prefix: echo:
#    Directly sets the default prefix. If present, this value will override
#    the "default_type".


# The heater_generic section is used to describe a custom/generic heater.
# These behave the same as typical heaters (extruders, heated beds) and
# can be configured as similarly.
# However, a gcode_id must be supplied which is used for temperature reporting.
# See notes on the SET_HEATER_TEMPERATURE command for setting the temperature.
#[heater_generic my_generic_heater]
#gcode_id: C
#    A mandatory parameter that is required for reporting the temperature
#    through the M105 command.
#heater_pin:
#max_power:
#sensor_type:
#sensor_pin:
#pullup_resistor:
#adc_voltage:
#smooth_time:
#control:
#pid_Kp:
#pid_Ki:
#pid_Kd:
#pid_integral_max:
#pwm_cycle_time:
#min_extrude_temp:
#min_temp:
#max_temp:
#   See the heater section in example.cfg for the definition of the
#   above parameters.


# Temperature sensors. One can define any number of temperature
# sensors. Their values are reported via the M105 command.
#[temperature_sensor my_sensor]
#sensor_type:
#sensor_pin:
#min_temp:
#max_temp:
#   See the heater section in example.cfg for the definition of the
#   above parameters.
#gcode_id:
#   See the heater_generic section above for the definition of this
#   parameter.


# Pause/Resume functionality with support of position capture and restore
#[pause_resume]
#recover_velocity: 50.
#   When capture/restore is enabled, the speed at which to return to
#   the captured position (in mm/s).  Default is 50.0 mm/s.


# Filament Switch Sensor.  Support for filament insert and runout detection
# using a switch sensor, such as an endstop switch.
#[filament_switch_sensor my_sensor]
#pause_on_runout: True
#   When set to True, a PAUSE will execute immediately after a runout
#   is detected. Note that if pause_on_runout is False and the
#   runout_gcode is omitted then runout detection is disabled. Default
#   is True.
#runout_gcode:
#   The gcode to run after a filament runout is detected. If
#   pause_on_runout is set to True this gcode will run after the PAUSE
#   is complete. The default is not to run any gcode commands.
#insert_gcode:
#   The gcode to run after a filament insert is detected. The default
#   is not to run any gcode commands, which disables insert detection.
#event_delay: 3.0
#   The minimum amount of time in seconds to delay between events.
#   Events triggered during this time period will be silently
#   ignored. The default is 3 seconds.
#switch_pin:
#   The pin on which the switch is connected. This parameter must be
#   provided.


# TSLl401CL Based Filament Width Sensor
#[tsl1401cl_filament_width_sensor]
#pin: analog5
#default_nominal_filament_diameter: 1.75 # (mm)
#   Maximum allowed filament diameter difference as mm
#max_difference: 0.2
#   The distance from sensor to the melting chamber as mm
#measurement_delay: 100


# Include file support. One may include additional config file from
# the main printer config file. Wildcards may also be used (eg,
# "configs/*.cfg").
#[include my_other_config.cfg]


# Replicape support - see the generic-replicape.cfg file for further
# details.
#[replicape]