KREMEN Реклама
KREMEN Реклама

Как отключить звук в Марлине при ошибке Thermal Protection

inetous
Идет загрузка
Загрузка
25.04.2023
2099
6
Вопросы и ответы

Добрый вечер.Тестирую Thermal Protection он работает и когда срабатывает, но дико пищит. Вопрос такой как сделать чтоб была ток ошибка, а адского громкого бесконечного звука не было. Откусывать buzzer  не хочу в каком файле лежит код пищалки не пойму. в Configuration.h все закрыл Заранее спасибо за помощь. 

//

// SPEAKER/BUZZER 

//

// If you have a speaker that can produce tones, enable it here.

// By default Marlin assumes you have a buzzer with a fixed frequency.

//

//#define SPEAKER //

О принтере

1)Притер само сбор

2) Плата MKS Gen 1.4

3)Дисплей LCD 12864

3)Прошивка Marlin 2.1.0

Configuration.h

#include

/**

 * Marlin 3D Printer Firmware

 * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]

 *

 * Based on Sprinter and grbl.

 * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm

 *

 * This program is free software: you can redistribute it and/or modify

 * it under the terms of the GNU General Public License as published by

 * the Free Software Foundation, either version 3 of the License, or

 * (at your option) any later version.

 *

 * This program is distributed in the hope that it will be useful,

 * but WITHOUT ANY WARRANTY; without even the implied warranty of

 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

 * GNU General Public License for more details.

 *

 * You should have received a copy of the GNU General Public License

 * along with this program. If not, see .

 *

 */

#pragma once

/**

 * Configuration.h

 *

 * Basic settings such as:

 *

 * - Type of electronics

 * - Type of temperature sensor

 * - Printer geometry

 * - Endstop configuration

 * - LCD controller

 * - Extra features

 *

 * Advanced settings can be found in Configuration_adv.h

 *

 */

#define CONFIGURATION_H_VERSION 020005

//===========================================================================

//============================= Getting Started =============================

//===========================================================================

/**

 * Here are some standard links for getting your machine calibrated:

 *

 * http://reprap.org/wiki/Calibration

 * http://youtu.be/wAL9d7FgInk

 * http://calculator.josefprusa.cz

 * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide

 * http://www.thingiverse.com/thing:5573

 * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap

 * http://www.thingiverse.com/thing:298812

 */

//===========================================================================

//============================= DELTA Printer ===============================

//===========================================================================

// For a Delta printer start with one of the configuration files in the

// config/examples/delta directory and customize for your machine.

//

//===========================================================================

//============================= SCARA Printer ===============================

//===========================================================================

// For a SCARA printer start with the configuration files in

// config/examples/SCARA and customize for your machine.

//

// @section info

// Author info of this build printed to the host during boot and M115

#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.

//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)

/**

 * *** VENDORS PLEASE READ ***

 *

 * Marlin allows you to add a custom boot image for Graphical LCDs.

 * With this option Marlin will first show your custom screen followed

 * by the standard Marlin logo with version number and web URL.

 *

 * We encourage you to take advantage of this new feature and we also

 * respectfully request that you retain the unmodified Marlin boot screen.

 */

// Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION **

#define SHOW_BOOTSCREEN

// Show the bitmap in Marlin/_Bootscreen.h on startup.

//#define SHOW_CUSTOM_BOOTSCREEN

// Show the bitmap in Marlin/_Statusscreen.h on the status screen.

//#define CUSTOM_STATUS_SCREEN_IMAGE

// @section machine

/**

 * Select the serial port on the board to use for communication with the host.

 * This allows the connection of wireless adapters (for instance) to non-default port pins.

 * Serial port -1 is the USB emulated serial port, if available.

 * Note: The first serial port (-1 or 0) will always be used by the Arduino bootloader.

 *

 * :[-1, 0, 1, 2, 3, 4, 5, 6, 7]

 */

#define SERIAL_PORT 0

/**

 * Select a secondary serial port on the board to use for communication with the host.

 * :[-1, 0, 1, 2, 3, 4, 5, 6, 7]

 */

//#define SERIAL_PORT_2 -1

/**

 * This setting determines the communication speed of the printer.

 *

 * 250000 works in most cases, but you might try a lower speed if

 * you commonly experience drop-outs during host printing.

 * You may try up to 1000000 to speed up SD file transfer.

 *

 * :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000]

 */

#define BAUDRATE 250000

// Enable the Bluetooth serial interface on AT90USB devices

//#define BLUETOOTH

// Choose the name from boards.h that matches your setup

#ifndef MOTHERBOARD

  #define MOTHERBOARD BOARD_MKS_GEN_13

#endif

// Name displayed in the LCD "Ready" message and Info menu

//#define CUSTOM_MACHINE_NAME "3D Printer"

// Printer's unique ID, used by some programs to differentiate between machines.

// Choose your own or use a service like http://www.uuidgenerator.net/version4

//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"

// @section extruder

// This defines the number of extruders

// :[1, 2, 3, 4, 5, 6, 7, 8]

#define EXTRUDERS 1

// Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc.

#define DEFAULT_NOMINAL_FILAMENT_DIA 3.0

// For Cyclops or any "multi-extruder" that shares a single nozzle.

//#define SINGLENOZZLE

/**

 * Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.

 *

 * This device allows one stepper driver on a control board to drive

 * two to eight stepper motors, one at a time, in a manner suitable

 * for extruders.

 *

 * This option only allows the multiplexer to switch on tool-change.

 * Additional options to configure custom E moves are pending.

 */

//#define MK2_MULTIPLEXER

#if ENABLED(MK2_MULTIPLEXER)

  // Override the default DIO selector pins here, if needed.

  // Some pins files may provide defaults for these pins.

  //#define E_MUX0_PIN 40 // Always Required

  //#define E_MUX1_PIN 42 // Needed for 3 to 8 inputs

  //#define E_MUX2_PIN 44 // Needed for 5 to 8 inputs

#endif

/**

 * Prusa Multi-Material Unit v2

 *

 * Requires NOZZLE_PARK_FEATURE to park print head in case MMU unit fails.

 * Requires EXTRUDERS = 5

 *

 * For additional configuration see Configuration_adv.h

 */

//#define PRUSA_MMU2

// A dual extruder that uses a single stepper motor

//#define SWITCHING_EXTRUDER

#if ENABLED(SWITCHING_EXTRUDER)

  #define SWITCHING_EXTRUDER_SERVO_NR 0

  #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1[, E2, E3]

  #if EXTRUDERS > 3

    #define SWITCHING_EXTRUDER_E23_SERVO_NR 1

  #endif

#endif

// A dual-nozzle that uses a servomotor to raise/lower one (or both) of the nozzles

//#define SWITCHING_NOZZLE

#if ENABLED(SWITCHING_NOZZLE)

  #define SWITCHING_NOZZLE_SERVO_NR 0

  //#define SWITCHING_NOZZLE_E1_SERVO_NR 1 // If two servos are used, the index of the second

  #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 (single servo) or lowered/raised (dual servo)

#endif

/**

 * Two separate X-carriages with extruders that connect to a moving part

 * via a solenoid docking mechanism. Requires SOL1_PIN and SOL2_PIN.

 */

//#define PARKING_EXTRUDER

/**

 * Two separate X-carriages with extruders that connect to a moving part

 * via a magnetic docking mechanism using movements and no solenoid

 *

 * project : https://www.thingiverse.com/thing:3080893

 * movements : https://youtu.be/0xCEiG9VS3k

 * https://youtu.be/Bqbcs0CU2FE

 */

//#define MAGNETIC_PARKING_EXTRUDER

#if EITHER(PARKING_EXTRUDER, MAGNETIC_PARKING_EXTRUDER)

  #define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders

  #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder

  //#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381

  #if ENABLED(PARKING_EXTRUDER)

    #define PARKING_EXTRUDER_SOLENOIDS_INVERT // If enabled, the solenoid is NOT magnetized with applied voltage

    #define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil

    #define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // (ms) Delay for magnetic field. No delay if 0 or not defined.

    //#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381

  #elif ENABLED(MAGNETIC_PARKING_EXTRUDER)

    #define MPE_FAST_SPEED 9000 // (mm/m) Speed for travel before last distance point

    #define MPE_SLOW_SPEED 4500 // (mm/m) Speed for last distance travel to park and couple

    #define MPE_TRAVEL_DISTANCE 10 // (mm) Last distance point

    #define MPE_COMPENSATION 0 // Offset Compensation -1 , 0 , 1 (multiplier) only for coupling

  #endif

#endif

/**

 * Switching Toolhead

 *

 * Support for swappable and dockable toolheads, such as

 * the E3D Tool Changer. Toolheads are locked with a servo.

 */

//#define SWITCHING_TOOLHEAD

/**

 * Magnetic Switching Toolhead

 *

 * Support swappable and dockable toolheads with a magnetic

 * docking mechanism using movement and no servo.

 */

//#define MAGNETIC_SWITCHING_TOOLHEAD

/**

 * Electromagnetic Switching Toolhead

 *

 * Parking for CoreXY / HBot kinematics.

 * Toolheads are parked at one edge and held with an electromagnet.

 * Supports more than 2 Toolheads. See https://youtu.be/JolbsAKTKf4

 */

//#define ELECTROMAGNETIC_SWITCHING_TOOLHEAD

#if ANY(SWITCHING_TOOLHEAD, MAGNETIC_SWITCHING_TOOLHEAD, ELECTROMAGNETIC_SWITCHING_TOOLHEAD)

  #define SWITCHING_TOOLHEAD_Y_POS 235 // (mm) Y position of the toolhead dock

  #define SWITCHING_TOOLHEAD_Y_SECURITY 10 // (mm) Security distance Y axis

  #define SWITCHING_TOOLHEAD_Y_CLEAR 60 // (mm) Minimum distance from dock for unobstructed X axis

  #define SWITCHING_TOOLHEAD_X_POS { 215, 0 } // (mm) X positions for parking the extruders

  #if ENABLED(SWITCHING_TOOLHEAD)

    #define SWITCHING_TOOLHEAD_SERVO_NR 2 // Index of the servo connector

    #define SWITCHING_TOOLHEAD_SERVO_ANGLES { 0, 180 } // (degrees) Angles for Lock, Unlock

  #elif ENABLED(MAGNETIC_SWITCHING_TOOLHEAD)

    #define SWITCHING_TOOLHEAD_Y_RELEASE 5 // (mm) Security distance Y axis

    #define SWITCHING_TOOLHEAD_X_SECURITY { 90, 150 } // (mm) Security distance X axis (T0,T1)

    //#define PRIME_BEFORE_REMOVE // Prime the nozzle before release from the dock

    #if ENABLED(PRIME_BEFORE_REMOVE)

      #define SWITCHING_TOOLHEAD_PRIME_MM 20 // (mm) Extruder prime length

      #define SWITCHING_TOOLHEAD_RETRACT_MM 10 // (mm) Retract after priming length

      #define SWITCHING_TOOLHEAD_PRIME_FEEDRATE 300 // (mm/m) Extruder prime feedrate

      #define SWITCHING_TOOLHEAD_RETRACT_FEEDRATE 2400 // (mm/m) Extruder retract feedrate

    #endif

  #elif ENABLED(ELECTROMAGNETIC_SWITCHING_TOOLHEAD)

    #define SWITCHING_TOOLHEAD_Z_HOP 2 // (mm) Z raise for switching

  #endif

#endif

/**

 * "Mixing Extruder"

 * - Adds G-codes M163 and M164 to set and "commit" the current mix factors.

 * - Extends the stepping routines to move multiple steppers in proportion to the mix.

 * - Optional support for Repetier Firmware's 'M164 S' supporting virtual tools.

 * - This implementation supports up to two mixing extruders.

 * - Enable DIRECT_MIXING_IN_G1 for M165 and mixing in G1 (from Pia Taubert's reference implementation).

 */

//#define MIXING_EXTRUDER

#if ENABLED(MIXING_EXTRUDER)

  #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder

  #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164

  //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands

  //#define GRADIENT_MIX // Support for gradient mixing with M166 and LCD

  #if ENABLED(GRADIENT_MIX)

    //#define GRADIENT_VTOOL // Add M166 T to use a V-tool index as a Gradient alias

  #endif

#endif

// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).

// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).

// For the other hotends it is their distance from the extruder 0 hotend.

//#define HOTEND_OFFSET_X { 0.0, 20.00 } // (mm) relative X-offset for each nozzle

//#define HOTEND_OFFSET_Y { 0.0, 5.00 } // (mm) relative Y-offset for each nozzle

//#define HOTEND_OFFSET_Z { 0.0, 0.00 } // (mm) relative Z-offset for each nozzle

// @section machine

/**

 * Power Supply Control

 *

 * Enable and connect the power supply to the PS_ON_PIN.

 * Specify whether the power supply is active HIGH or active LOW.

 */

//#define PSU_CONTROL

//#define PSU_NAME "Power Supply"

#if ENABLED(PSU_CONTROL)

  #define PSU_ACTIVE_HIGH false // Set 'false' for ATX, 'true' for X-Box

  //#define PSU_DEFAULT_OFF // Keep power off until enabled directly with M80

  //#define PSU_POWERUP_DELAY 100 // (ms) Delay for the PSU to warm up to full power

  //#define AUTO_POWER_CONTROL // Enable automatic control of the PS_ON pin

  #if ENABLED(AUTO_POWER_CONTROL)

    #define AUTO_POWER_FANS // Turn on PSU if fans need power

    #define AUTO_POWER_E_FANS

    #define AUTO_POWER_CONTROLLERFAN

    #define AUTO_POWER_CHAMBER_FAN

    //#define AUTO_POWER_E_TEMP 50 // (°C) Turn on PSU over this temperature

    //#define AUTO_POWER_CHAMBER_TEMP 30 // (°C) Turn on PSU over this temperature

    #define POWER_TIMEOUT 30

  #endif

#endif

// @section temperature

//===========================================================================

//============================= Thermal Settings ============================

//===========================================================================

/**

 * --NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table

 *

 * Temperature sensors available:

 *

 * -5 : PT100 / PT1000 with MAX31865 (only for sensors 0-1)

 * -3 : thermocouple with MAX31855 (only for sensors 0-1)

 * -2 : thermocouple with MAX6675 (only for sensors 0-1)

 * -4 : thermocouple with AD8495

 * -1 : thermocouple with AD595

 * 0 : not used

 * 1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup)

 * 331 : (3.3V scaled thermistor 1 table for MEGA)

 * 332 : (3.3V scaled thermistor 1 table for DUE)

 * 2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)

 * 202 : 200k thermistor - Copymaster 3D

 * 3 : Mendel-parts thermistor (4.7k pullup)

 * 4 : 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!

 * 5 : 100K thermistor - ATC Semitec 104GT-2/104NT-4-R025H42G (Used in ParCan & J-Head) (4.7k pullup)

 * 501 : 100K Zonestar (Tronxy X3A) Thermistor

 * 512 : 100k RPW-Ultra hotend thermistor (4.7k pullup)

 * 6 : 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)

 * 7 : 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)

 * 71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)

 * 8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)

 * 9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)

 * 10 : 100k RS thermistor 198-961 (4.7k pullup)

 * 11 : 100k beta 3950 1% thermistor (4.7k pullup)

 * 12 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)

 * 13 : 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"

 * 15 : 100k thermistor calibration for JGAurora A5 hotend

 * 18 : ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327

 * 20 : Pt100 with circuit in the Ultimainboard V2.x with 5v excitation (AVR)

 * 21 : Pt100 with circuit in the Ultimainboard V2.x with 3.3v excitation (STM32 \ LPC176x....)

 * 201 : Pt100 with circuit in Overlord, similar to Ultimainboard V2.x

 * 60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950

 * 61 : 100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup

 * 66 : 4.7M High Temperature thermistor from Dyze Design

 * 67 : 450C thermistor from SliceEngineering

 * 70 : the 100K thermistor found in the bq Hephestos 2

 * 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor

 * 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)

 *

 * 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.

 * (but gives greater accuracy and more stable PID)

 * 51 : 100k thermistor - EPCOS (1k pullup)

 * 52 : 200k thermistor - ATC Semitec 204GT-2 (1k pullup)

 * 55 : 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)

 *

 * 1047 : Pt1000 with 4k7 pullup

 * 1010 : Pt1000 with 1k pullup (non standard)

 * 147 : Pt100 with 4k7 pullup

 * 110 : Pt100 with 1k pullup (non standard)

 *

 * 1000 : Custom - Specify parameters in Configuration_adv.h

 *

 * Use these for Testing or Development purposes. NEVER for production machine.

 * 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.

 * 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.

 */

#define TEMP_SENSOR_0 5 ///поменял на 5 было (1)

#define TEMP_SENSOR_1 0

#define TEMP_SENSOR_2 0

#define TEMP_SENSOR_3 0

#define TEMP_SENSOR_4 0

#define TEMP_SENSOR_5 0

#define TEMP_SENSOR_6 0

#define TEMP_SENSOR_7 0

#define TEMP_SENSOR_BED 1 ///поменял на 1 было (0)

#define TEMP_SENSOR_PROBE 0

#define TEMP_SENSOR_CHAMBER 0

// Dummy thermistor constant temperature readings, for use with 998 and 999

#define DUMMY_THERMISTOR_998_VALUE 25

#define DUMMY_THERMISTOR_999_VALUE 100

// Use temp sensor 1 as a redundant sensor with sensor 0. If the readings

// from the two sensors differ too much the print will be aborted.

//#define TEMP_SENSOR_1_AS_REDUNDANT

#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10

#define TEMP_RESIDENCY_TIME 10 // (seconds) Time to wait for hotend to "settle" in M109

#define TEMP_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer

#define TEMP_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target

#define TEMP_BED_RESIDENCY_TIME 10 // (seconds) Time to wait for bed to "settle" in M190

#define TEMP_BED_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer

#define TEMP_BED_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target

// Below this temperature the heater will be switched off

// because it probably indicates a broken thermistor wire.

#define HEATER_0_MINTEMP 5

#define HEATER_1_MINTEMP 5

#define HEATER_2_MINTEMP 5

#define HEATER_3_MINTEMP 5

#define HEATER_4_MINTEMP 5

#define HEATER_5_MINTEMP 5

#define HEATER_6_MINTEMP 5

#define HEATER_7_MINTEMP 5

#define BED_MINTEMP 5

// Above this temperature the heater will be switched off.

// This can protect components from overheating, but NOT from shorts and failures.

// (Use MINTEMP for thermistor short/failure protection.)

#define HEATER_0_MAXTEMP 275

#define HEATER_1_MAXTEMP 275

#define HEATER_2_MAXTEMP 275

#define HEATER_3_MAXTEMP 275

#define HEATER_4_MAXTEMP 275

#define HEATER_5_MAXTEMP 275

#define HEATER_6_MAXTEMP 275

#define HEATER_7_MAXTEMP 275

#define BED_MAXTEMP 150

//===========================================================================

//============================= PID Settings ================================

//===========================================================================

// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning

// Comment the following line to disable PID and enable bang-bang.

#define PIDTEMP

#define BANG_MAX 255 // Limits current to nozzle while in bang-bang mode; 255=full current

#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current

#define PID_K1 0.95 // Smoothing factor within any PID loop

#if ENABLED(PIDTEMP)

  //#define PID_EDIT_MENU // Add PID editing to the "Advanced Settings" menu. (~700 bytes of PROGMEM)

  //#define PID_AUTOTUNE_MENU // Add PID auto-tuning to the "Advanced Settings" menu. (~250 bytes of PROGMEM)

  //#define PID_DEBUG // Sends debug data to the serial port. Use 'M303 D' to toggle activation.

  //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX

  //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay

  //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)

                                  // Set/get with gcode: M301 E[extruder number, 0-2]

  #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature

                                  // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.

  // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it

  // Ultimaker

  #define DEFAULT_Kp 22.2

  #define DEFAULT_Ki 1.08

  #define DEFAULT_Kd 114

  // MakerGear

  //#define DEFAULT_Kp 7.0

  //#define DEFAULT_Ki 0.1

  //#define DEFAULT_Kd 12

  // Mendel Parts V9 on 12V

  //#define DEFAULT_Kp 63.0

  //#define DEFAULT_Ki 2.25

  //#define DEFAULT_Kd 440

#endif // PIDTEMP

//===========================================================================

//====================== PID > Bed Temperature Control ======================

//===========================================================================

/**

 * PID Bed Heating

 *

 * If this option is enabled set PID constants below.

 * If this option is disabled, bang-bang will be used and BED_LIMIT_SWITCHING will enable hysteresis.

 *

 * The PID frequency will be the same as the extruder PWM.

 * If PID_dT is the default, and correct for the hardware/configuration, that means 7.689Hz,

 * which is fine for driving a square wave into a resistive load and does not significantly

 * impact FET heating. This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W

 * heater. If your configuration is significantly different than this and you don't understand

 * the issues involved, don't use bed PID until someone else verifies that your hardware works.

 */

//#define PIDTEMPBED

//#define BED_LIMIT_SWITCHING

/**

 * Max Bed Power

 * Applies to all forms of bed control (PID, bang-bang, and bang-bang with hysteresis).

 * When set to any value below 255, enables a form of PWM to the bed that acts like a divider

 * so don't use it unless you are OK with PWM on your bed. (See the comment on enabling PIDTEMPBED)

 */

#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current

#if ENABLED(PIDTEMPBED)

  //#define MIN_BED_POWER 0

  //#define PID_BED_DEBUG // Sends debug data to the serial port.

  //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)

  //from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)

  #define DEFAULT_bedKp 10.00

  #define DEFAULT_bedKi .023

  #define DEFAULT_bedKd 305.4

  //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)

  //from pidautotune

  //#define DEFAULT_bedKp 97.1

  //#define DEFAULT_bedKi 1.41

  //#define DEFAULT_bedKd 1675.16

  // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.

#endif // PIDTEMPBED

// @section extruder

/**

 * Prevent extrusion if the temperature is below EXTRUDE_MINTEMP.

 * Add M302 to set the minimum extrusion temperature and/or turn

 * cold extrusion prevention on and off.

 *

 * *** IT IS HIGHLY RECOMMENDED TO LEAVE THIS OPTION ENABLED! ***

 */

#define PREVENT_COLD_EXTRUSION

#define EXTRUDE_MINTEMP 170

/**

 * Prevent a single extrusion longer than EXTRUDE_MAXLENGTH.

 * Note: For Bowden Extruders make this large enough to allow load/unload.

 */

#define PREVENT_LENGTHY_EXTRUDE

#define EXTRUDE_MAXLENGTH 200

//===========================================================================

//======================== Thermal Runaway Protection =======================

//===========================================================================

/**

 * Thermal Protection provides additional protection to your printer from damage

 * and fire. Marlin always includes safe min and max temperature ranges which

 * protect against a broken or disconnected thermistor wire.

 *

 * The issue: If a thermistor falls out, it will report the much lower

 * temperature of the air in the room, and the the firmware will keep

 * the heater on.

 *

 * If you get "Thermal Runaway" or "Heating failed" errors the

 * details can be tuned in Configuration_adv.h

 */

 #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders

 #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed

 #define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber

//===========================================================================

//============================= Mechanical Settings =========================

//===========================================================================

 // @section machine

// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics

// either in the usual order or reversed

#define COREXY //открыл

//#define COREXZ

//#define COREYZ

//#define COREYX //закрыл 13.11.22

//#define COREZX

//#define COREZY

//===========================================================================

//============================== Endstop Settings ===========================

//===========================================================================

// @section homing

// Specify here all the endstop connectors that are connected to any endstop or probe.

// Almost all printers will be using one per axis. Probes will use one or more of the

// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.

#define USE_XMIN_PLUG //открыл

#define USE_YMIN_PLUG //открыл

#define USE_ZMIN_PLUG //открыл

//#define USE_XMAX_PLUG

//#define USE_YMAX_PLUG

//define USE_ZMAX_PLUG

// Enable pullup for all endstops to prevent a floating state

#define ENDSTOPPULLUPS //включаем подтягивание для концевиков вместо которых установлен режим

#if DISABLED(ENDSTOPPULLUPS)

  // Disable ENDSTOPPULLUPS to set pullups individually

  //#define ENDSTOPPULLUP_XMAX

  //#define ENDSTOPPULLUP_YMAX

  //#define ENDSTOPPULLUP_ZMAX

  #define ENDSTOPPULLUP_XMIN //включаем подтягивание для концевиков вместо которых установлен режим

  #define ENDSTOPPULLUP_YMIN //включаем подтягивание для концевиков вместо которых установлен режим

  //#define ENDSTOPPULLUP_ZMIN //включаем подтягивание для концевиков вместо которых установлен режим выключил ось z

  #define ENDSTOPPULLUP_ZMIN_PROBE //раскрыл для датчика з

#endif

// Enable pulldown for all endstops to prevent a floating state

//#define ENDSTOPPULLDOWNS

#if DISABLED(ENDSTOPPULLDOWNS)

  // Disable ENDSTOPPULLDOWNS to set pulldowns individually

  //#define ENDSTOPPULLDOWN_XMAX

  //#define ENDSTOPPULLDOWN_YMAX

  //#define ENDSTOPPULLDOWN_ZMAX

  //#define ENDSTOPPULLDOWN_XMIN

  //#define ENDSTOPPULLDOWN_YMIN

  //#define ENDSTOPPULLDOWN_ZMIN

  //#define ENDSTOPPULLDOWN_ZMIN_PROBE

#endif

// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).

#define X_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop //поменял false нф тру

#define Y_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop //поменял false нф тру

#define Z_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop //поменял true на фальс

#define X_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.

#define Y_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.

#define Z_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.

#define Z_MIN_PROBE_ENDSTOP_INVERTING true // Set to true to invert the logic of the probe. поставил тру

/**

 * Stepper Drivers

 *

 * These settings allow Marlin to tune stepper driver timing and enable advanced options for

 * stepper drivers that support them. You may also override timing options in Configuration_adv.h.

 *

 * A4988 is assumed for unspecified drivers.

 *

 * Options: A4988, A5984, DRV8825, LV8729, L6470, L6474, POWERSTEP01,

 * TB6560, TB6600, TMC2100,

 * TMC2130, TMC2130_STANDALONE, TMC2160, TMC2160_STANDALONE,

 * TMC2208, TMC2208_STANDALONE, TMC2209, TMC2209_STANDALONE,

 * TMC26X, TMC26X_STANDALONE, TMC2660, TMC2660_STANDALONE,

 * TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE

 * :['A4988', 'A5984', 'DRV8825', 'LV8729', 'L6470', 'L6474', 'POWERSTEP01', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE']

 */

#define X_DRIVER_TYPE TMC2130 //Здесь указываем на каких осях какие драйвера ставятся.

#define Y_DRIVER_TYPE TMC2130 //Здесь указываем на каких осях какие драйвера ставятся.

#define Z_DRIVER_TYPE TMC2130 //Здесь указываем на каких осях какие драйвера ставятся.

//#define X2_DRIVER_TYPE A4988

//#define Y2_DRIVER_TYPE A4988

#define Z2_DRIVER_TYPE TMC2130 //Здесь указываем на каких осях какие драйвера ставятся. з2 это именно второй мотор по у маолчаниею прошивка использует е1

//#define Z3_DRIVER_TYPE A4988

//#define Z4_DRIVER_TYPE A4988

#define E0_DRIVER_TYPE TMC2130 //Здесь указываем на каких осях какие драйвера ставятся.

//#define E1_DRIVER_TYPE A4988

//#define E2_DRIVER_TYPE A4988

//#define E3_DRIVER_TYPE A4988

//#define E4_DRIVER_TYPE A4988

//#define E5_DRIVER_TYPE A4988

//#define E6_DRIVER_TYPE A4988

//#define E7_DRIVER_TYPE A4988

// Enable this feature if all enabled endstop pins are interrupt-capable.

// This will remove the need to poll the interrupt pins, saving many CPU cycles.

// #define ENDSTOP_INTERRUPTS_FEATURE

/**

 * Endstop Noise Threshold

 *

 * Enable if your probe or endstops falsely trigger due to noise.

 *

 * - Higher values may affect repeatability or accuracy of some bed probes.

 * - To fix noise install a 100nF ceramic capacitor inline with the switch.

 * - This feature is not required for common micro-switches mounted on PCBs

 * based on the Makerbot design, which already have the 100nF capacitor.

 *

 * :[2,3,4,5,6,7]

 */

//#define ENDSTOP_NOISE_THRESHOLD 2

//=============================================================================

//============================== Movement Settings ============================

//=============================================================================

// @section motion

/**

 * Default Settings

 *

 * These settings can be reset by M502

 *

 * Note that if EEPROM is enabled, saved values will override these.

 */

/**

 * With this option each E stepper can have its own factors for the

 * following movement settings. If fewer factors are given than the

 * total number of extruders, the last value applies to the rest.

 */

//#define DISTINCT_E_FACTORS

/**

 * Default Axis Steps Per Unit (steps/mm)

 * Override with M92

 * X, Y, Z, E0 [, E1[, E2...]]

 */

#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 4000, 500 }

/**

 * Default Max Feed Rate (mm/s)

 * Override with M203

 * X, Y, Z, E0 [, E1[, E2...]]

 */

#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }

//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2

#if ENABLED(LIMITED_MAX_FR_EDITING)

  #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits

#endif

/**

 * Default Max Acceleration (change/s) change = mm/s

 * (Maximum start speed for accelerated moves)

 * Override with M201

 * X, Y, Z, E0 [, E1[, E2...]]

 */

#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }

//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2

#if ENABLED(LIMITED_MAX_ACCEL_EDITING)

  #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits

#endif

/**

 * Default Acceleration (change/s) change = mm/s

 * Override with M204

 *

 * M204 P Acceleration

 * M204 R Retract Acceleration

 * M204 T Travel Acceleration

 */

#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E acceleration for printing moves

#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts

#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves

/**

 * Default Jerk limits (mm/s)

 * Override with M205 X Y Z E

 *

 * "Jerk" specifies the minimum speed change that requires acceleration.

 * When changing speed and direction, if the difference is less than the

 * value set here, it may happen instantaneously.

 */

//#define CLASSIC_JERK

#if ENABLED(CLASSIC_JERK)

  #define DEFAULT_XJERK 10.0

  #define DEFAULT_YJERK 10.0

  #define DEFAULT_ZJERK 0.3

  //#define TRAVEL_EXTRA_XYJERK 0.0 // Additional jerk allowance for all travel moves

  //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2

  #if ENABLED(LIMITED_JERK_EDITING)

    #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits

  #endif

#endif

#define DEFAULT_EJERK 5.0 // May be used by Linear Advance

/**

 * Junction Deviation Factor

 *

 * See:

 * https://reprap.org/forum/read.php?1,739819

 * http://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html

 */

#if DISABLED(CLASSIC_JERK)

  #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge

#endif

/**

 * S-Curve Acceleration

 *

 * This option eliminates vibration during printing by fitting a Bézier

 * curve to move acceleration, producing much smoother direction changes.

 *

 * See https://github.com/synthetos/TinyG/wiki/Jerk-Controlled-Motion-Explained

 */

//#define S_CURVE_ACCELERATION

//===========================================================================

//============================= Z Probe Options =============================

//===========================================================================

// @section probes //надо посмотреть

//

// See http://marlinfw.org/docs/configuration/probes.html

//

/**

 * Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN

 *

 * Enable this option for a probe connected to the Z Min endstop pin.

 */

#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN

/**

 * Z_MIN_PROBE_PIN

 *

 * Define this pin if the probe is not connected to Z_MIN_PIN.

 * If not defined the default pin for the selected MOTHERBOARD

 * will be used. Most of the time the default is what you want.

 *

 * - The simplest option is to use a free endstop connector.

 * - Use 5V for powered (usually inductive) sensors.

 *

 * - RAMPS 1.3/1.4 boards may use the 5V, GND, and Aux4->D32 pin:

 * - For simple switches connect...

 * - normally-closed switches to GND and D32.

 * - normally-open switches to 5V and D32.

 *

 */

//#define Z_MIN_PROBE_PIN 32 // Pin 32 is the RAMPS default

/**

 * Probe Type

 *

 * Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc.

 * Activate one of these to use Auto Bed Leveling below.

 */

/**

 * The "Manual Probe" provides a means to do "Auto" Bed Leveling without a probe.

 * Use G29 repeatedly, adjusting the Z height at each point with movement commands

 * or (with LCD_BED_LEVELING) the LCD controller.

 */

//#define PROBE_MANUALLY

//#define MANUAL_PROBE_START_Z 0.2

/**

 * A Fix-Mounted Probe either doesn't deploy or needs manual deployment.

 * (e.g., an inductive probe or a nozzle-based probe-switch.)

 */

//#define FIX_MOUNTED_PROBE

/**

 * Use the nozzle as the probe, as with a conductive

 * nozzle system or a piezo-electric smart effector.

 */

//#define NOZZLE_AS_PROBE

/**

 * Z Servo Probe, such as an endstop switch on a rotating arm.

 */

//#define Z_PROBE_SERVO_NR 0 // Defaults to SERVO 0 connector.

//#define Z_SERVO_ANGLES { 70, 0 } // Z Servo Deploy and Stow angles

/**

 * The BLTouch probe uses a Hall effect sensor and emulates a servo.

 */

#define BLTOUCH //раскрылл з датчик

/**

 * Touch-MI Probe by hotends.fr

 *

 * This probe is deployed and activated by moving the X-axis to a magnet at the edge of the bed.

 * By default, the magnet is assumed to be on the left and activated by a home. If the magnet is

 * on the right, enable and set TOUCH_MI_DEPLOY_XPOS to the deploy position.

 *

 * Also requires: BABYSTEPPING, BABYSTEP_ZPROBE_OFFSET, Z_SAFE_HOMING,

 * and a minimum Z_HOMING_HEIGHT of 10.

 */

//#define TOUCH_MI_PROBE

#if ENABLED(TOUCH_MI_PROBE)

  #define TOUCH_MI_RETRACT_Z 0.5 // Height at which the probe retracts

  //#define TOUCH_MI_DEPLOY_XPOS (X_MAX_BED + 2) // For a magnet on the right side of the bed

 // #define TOUCH_MI_MANUAL_DEPLOY // For manual deploy (LCD menu)

#endif

// A probe that is deployed and stowed with a solenoid pin (SOL1_PIN)

//#define SOLENOID_PROBE

// A sled-mounted probe like those designed by Charles Bell.

//#define Z_PROBE_SLED

//#define SLED_DOCKING_OFFSET 5 // The extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.

// A probe deployed by moving the x-axis, such as the Wilson II's rack-and-pinion probe designed by Marty Rice.

//#define RACK_AND_PINION_PROBE

#if ENABLED(RACK_AND_PINION_PROBE)

  #define Z_PROBE_DEPLOY_X X_MIN_POS

  #define Z_PROBE_RETRACT_X X_MAX_POS

#endif

// Duet Smart Effector (for delta printers) - https://bit.ly/2ul5U7J

// When the pin is defined you can use M672 to set/reset the probe sensivity.

//#define DUET_SMART_EFFECTOR

#if ENABLED(DUET_SMART_EFFECTOR)

  #define SMART_EFFECTOR_MOD_PIN -1 // Connect a GPIO pin to the Smart Effector MOD pin

#endif

/**

14

 */

// #define SENSORLESS_PROBING

//

// For Z_PROBE_ALLEN_KEY see the Delta example configurations.

//

/**

 * Z Probe to nozzle (X,Y) offset, relative to (0, 0).

 *

 * In the following example the X and Y offsets are both positive:

 *

 * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 }

 *

 * +-- BACK ---+

 * | |

 * L | (+) P | R = 1 are valid here.

 *

 * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle.

 * But: `M851 Z+1` with a CLEARANCE of 2 => 2mm from bed to nozzle.

 */

#define Z_CLEARANCE_DEPLOY_PROBE 10 // Z Clearance for Deploy/Stow

#define Z_CLEARANCE_BETWEEN_PROBES 5 // Z Clearance between probe points

#define Z_CLEARANCE_MULTI_PROBE 5 // Z Clearance between multiple probes

//#define Z_AFTER_PROBING 5 // Z position after probing is done

#define Z_PROBE_LOW_POINT -2 // Farthest distance below the trigger-point to go before stopping

// For M851 give a range for adjusting the Z probe offset

#define Z_PROBE_OFFSET_RANGE_MIN -20

#define Z_PROBE_OFFSET_RANGE_MAX 20

// Enable the M48 repeatability test to test probe accuracy

//#define Z_MIN_PROBE_REPEATABILITY_TEST

// Before deploy/stow pause for user confirmation

//#define PAUSE_BEFORE_DEPLOY_STOW

#if ENABLED(PAUSE_BEFORE_DEPLOY_STOW)

  //#define PAUSE_PROBE_DEPLOY_WHEN_TRIGGERED // For Manual Deploy Allenkey Probe

#endif

/**

 * Enable one or more of the following if probing seems unreliable.

 * Heaters and/or fans can be disabled during probing to minimize electrical

 * noise. A delay can also be added to allow noise and vibration to settle.

 * These options are most useful for the BLTouch probe, but may also improve

 * readings with inductive probes and piezo sensors.

 */

//#define PROBING_HEATERS_OFF // Turn heaters off when probing

#if ENABLED(PROBING_HEATERS_OFF)

  //#define WAIT_FOR_BED_HEATER // Wait for bed to heat back up between probes (to improve accuracy)

#endif

//#define PROBING_FANS_OFF // Turn fans off when probing

//#define PROBING_STEPPERS_OFF // Turn steppers off (unless needed to hold position) when probing

//#define DELAY_BEFORE_PROBING 200 // (ms) To prevent vibrations from triggering piezo sensors

// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1

// :{ 0:'Low', 1:'High' }

#define X_ENABLE_ON 0

#define Y_ENABLE_ON 0

#define Z_ENABLE_ON 0

#define E_ENABLE_ON 0 // For all extruders

// Disables axis stepper immediately when it's not being used.

// WARNING: When motors turn off there is a chance of losing position accuracy!

#define DISABLE_X false

#define DISABLE_Y false

#define DISABLE_Z false

// Warn on display about possibly reduced accuracy

//#define DISABLE_REDUCED_ACCURACY_WARNING

// @section extruder

#define DISABLE_E false // For all extruders

#define DISABLE_INACTIVE_EXTRUDER // Keep only the active extruder enabled

// @section machine

// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.

#define INVERT_X_DIR true //инвентирую положение моторов

#define INVERT_Y_DIR true //инвентирую положение моторов

#define INVERT_Z_DIR false //инвентирую положение моторов инвентирую положение моторов было true поменял 13112022

// @section extruder

// For direct drive extruder v9 set to true, for geared extruder set to false.

#define INVERT_E0_DIR true //инвентирую положение моторов

#define INVERT_E1_DIR false //инвентирую положение моторов было true поменял 08102022

#define INVERT_E2_DIR false

#define INVERT_E3_DIR false

#define INVERT_E4_DIR false

#define INVERT_E5_DIR false

#define INVERT_E6_DIR false

#define INVERT_E7_DIR false

// @section homing

//#define NO_MOTION_BEFORE_HOMING // Inhibit movement until all axes have been homed

//#define UNKNOWN_Z_NO_RAISE // Don't raise Z (lower the bed) if Z is "unknown." For beds that fall when Z is powered off.

//#define Z_HOMING_HEIGHT 4 // (mm) Minimal Z height before homing (G28) for Z clearance above the bed, clamps, ...

                                  // Be sure to have this much clearance over your Z_MAX_POS to prevent grinding.

//#define Z_AFTER_HOMING 10 // (mm) Height to move to after homing Z

// Direction of endstops when homing; 1=MAX, -1=MIN

// :[-1,1]

#define X_HOME_DIR -1

#define Y_HOME_DIR -1

#define Z_HOME_DIR -1 // открыл з

// @section machine

// The size of the print bed

#define X_BED_SIZE 290 // размер печати по осям был 200

#define Y_BED_SIZE 490 // размер печати по осям был 200

// Travel limits (mm) after homing, corresponding to endstop positions.

#define X_MIN_POS 0

#define Y_MIN_POS 0

#define Z_MIN_POS 0

#define X_MAX_POS X_BED_SIZE

#define Y_MAX_POS Y_BED_SIZE

#define Z_MAX_POS 730 // размер печати по осям был 200

/**

 * Software Endstops

 *

 * - Prevent moves outside the set machine bounds.

 * - Individual axes can be disabled, if desired.

 * - X and Y only apply to Cartesian robots.

 * - Use 'M211' to set software endstops on/off or report current state

 */

// Min software endstops constrain movement within minimum coordinate bounds

#define MIN_SOFTWARE_ENDSTOPS

#if ENABLED(MIN_SOFTWARE_ENDSTOPS)

  #define MIN_SOFTWARE_ENDSTOP_X

  #define MIN_SOFTWARE_ENDSTOP_Y

  #define MIN_SOFTWARE_ENDSTOP_Z

#endif

// Max software endstops constrain movement within maximum coordinate bounds

#define MAX_SOFTWARE_ENDSTOPS

#if ENABLED(MAX_SOFTWARE_ENDSTOPS)

  #define MAX_SOFTWARE_ENDSTOP_X

  #define MAX_SOFTWARE_ENDSTOP_Y

  #define MAX_SOFTWARE_ENDSTOP_Z

#endif

#if EITHER(MIN_SOFTWARE_ENDSTOPS, MAX_SOFTWARE_ENDSTOPS)

 // #define SOFT_ENDSTOPS_MENU_ITEM ////включение кольцевиков в меню на жк

#endif

/**

 * Filament Runout Sensors

 * Mechanical or opto endstops are used to check for the presence of filament.

 *

 * RAMPS-based boards use SERVO3_PIN for the first runout sensor.

 * For other boards you may need to define FIL_RUNOUT_PIN, FIL_RUNOUT2_PIN, etc.

 * By default the firmware assumes HIGH=FILAMENT PRESENT.

 */

//#define FILAMENT_RUNOUT_SENSOR

#if ENABLED(FILAMENT_RUNOUT_SENSOR)

  #define NUM_RUNOUT_SENSORS 1 // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each.

  #define FIL_RUNOUT_INVERTING false // Set to true to invert the logic of the sensor.

  #define FIL_RUNOUT_PULLUP // Use internal pullup for filament runout pins.

  //#define FIL_RUNOUT_PULLDOWN // Use internal pulldown for filament runout pins.

  // Set one or more commands to execute on filament runout.

  // (After 'M412 H' Marlin will ask the host to handle the process.)

  #define FILAMENT_RUNOUT_SCRIPT "M600"

  // After a runout is detected, continue printing this length of filament

  // before executing the runout script. Useful for a sensor at the end of

  // a feed tube. Requires 4 bytes SRAM per sensor, plus 4 bytes overhead.

  //#define FILAMENT_RUNOUT_DISTANCE_MM 25

  #ifdef FILAMENT_RUNOUT_DISTANCE_MM

    // Enable this option to use an encoder disc that toggles the runout pin

    // as the filament moves. (Be sure to set FILAMENT_RUNOUT_DISTANCE_MM

    // large enough to avoid false positives.)

    //#define FILAMENT_MOTION_SENSOR

  #endif

#endif

//===========================================================================

//=============================== Bed Leveling ==============================

//===========================================================================

// @section calibrate

/**

 * Choose one of the options below to enable G29 Bed Leveling. The parameters

 * and behavior of G29 will change depending on your selection.

 *

 * If using a Probe for Z Homing, enable Z_SAFE_HOMING also!

 *

 * - AUTO_BED_LEVELING_3POINT

 * Probe 3 arbitrary points on the bed (that aren't collinear)

 * You specify the XY coordinates of all 3 points.

 * The result is a single tilted plane. Best for a flat bed.

 *

 * - AUTO_BED_LEVELING_LINEAR

 * Probe several points in a grid.

 * You specify the rectangle and the density of sample points.

 * The result is a single tilted plane. Best for a flat bed.

 *

 * - AUTO_BED_LEVELING_BILINEAR

 * Probe several points in a grid.

 * You specify the rectangle and the density of sample points.

 * The result is a mesh, best for large or uneven beds.

 *

 * - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)

 * A comprehensive bed leveling system combining the features and benefits

 * of other systems. UBL also includes integrated Mesh Generation, Mesh

 * Validation and Mesh Editing systems.

 *

 * - MESH_BED_LEVELING

 * Probe a grid manually

 * The result is a mesh, suitable for large or uneven beds. (See BILINEAR.)

 * For machines without a probe, Mesh Bed Leveling provides a method to perform

 * leveling in steps so you can manually adjust the Z height at each grid-point.

 * With an LCD controller the process is guided step-by-step.

 */

//#define AUTO_BED_LEVELING_3POINT

//#define AUTO_BED_LEVELING_LINEAR

#define AUTO_BED_LEVELING_BILINEAR // калиброка стола в виде сетки

//#define AUTO_BED_LEVELING_UBL

//#define MESH_BED_LEVELING

/**

 * Normally G28 leaves leveling disabled on completion. Enable

 * this option to have G28 restore the prior leveling state.

 */

//#define RESTORE_LEVELING_AFTER_G28

/**

 * Enable detailed logging of G28, G29, M48, etc.

 * Turn on with the command 'M111 S32'.

 * NOTE: Requires a lot of PROGMEM!

 */

//#define DEBUG_LEVELING_FEATURE

#if ANY(MESH_BED_LEVELING, AUTO_BED_LEVELING_BILINEAR, AUTO_BED_LEVELING_UBL)

  // Gradually reduce leveling correction until a set height is reached,

  // at which point movement will be level to the machine's XY plane.

  // The height can be set with M420 Z

  #define ENABLE_LEVELING_FADE_HEIGHT

  // For Cartesian machines, instead of dividing moves on mesh boundaries,

  // split up moves into short segments like a Delta. This follows the

  // contours of the bed more closely than edge-to-edge straight moves.

  #define SEGMENT_LEVELED_MOVES

  #define LEVELED_SEGMENT_LENGTH 5.0 // (mm) Length of all segments (except the last one)

  /**

   * Enable the G26 Mesh Validation Pattern tool.

   */

  //#define G26_MESH_VALIDATION

  #if ENABLED(G26_MESH_VALIDATION)

    #define MESH_TEST_NOZZLE_SIZE 0.4 // (mm) Diameter of primary nozzle.

    #define MESH_TEST_LAYER_HEIGHT 0.2 // (mm) Default layer height for the G26 Mesh Validation Tool.

    #define MESH_TEST_HOTEND_TEMP 205 // (°C) Default nozzle temperature for the G26 Mesh Validation Tool.

    #define MESH_TEST_BED_TEMP 60 // (°C) Default bed temperature for the G26 Mesh Validation Tool.

    #define G26_XY_FEEDRATE 20 // (mm/s) Feedrate for XY Moves for the G26 Mesh Validation Tool.

    #define G26_RETRACT_MULTIPLIER 1.0 // G26 Q (retraction) used by default between mesh test elements.

  #endif

#endif

#if EITHER(AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_BILINEAR)

  // Set the number of grid points per dimension.

  #define GRID_MAX_POINTS_X 3

  #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X

  // Probe along the Y axis, advancing X after each column

  //#define PROBE_Y_FIRST

  #if ENABLED(AUTO_BED_LEVELING_BILINEAR)

    // Beyond the probed grid, continue the implied tilt?

    // Default is to maintain the height of the nearest edge.

    //#define EXTRAPOLATE_BEYOND_GRID

    //

    // Experimental Subdivision of the grid by Catmull-Rom method.

    // Synthesizes intermediate points to produce a more detailed mesh.

    //

    //#define ABL_BILINEAR_SUBDIVISION

    #if ENABLED(ABL_BILINEAR_SUBDIVISION)

      // Number of subdivisions between probe points

      #define BILINEAR_SUBDIVISIONS 3

    #endif

  #endif

#elif ENABLED(AUTO_BED_LEVELING_UBL)

  //===========================================================================

  //========================= Unified Bed Leveling ============================

  //===========================================================================

  //#define MESH_EDIT_GFX_OVERLAY // Display a graphics overlay while editing the mesh

  #define MESH_INSET 1 // Set Mesh bounds as an inset region of the bed

  #define GRID_MAX_POINTS_X 10 // Don't use more than 15 points per axis, implementation limited.

  #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X

  #define UBL_MESH_EDIT_MOVES_Z // Sophisticated users prefer no movement of nozzle

  #define UBL_SAVE_ACTIVE_ON_M500 // Save the currently active mesh in the current slot on M500

  //#define UBL_Z_RAISE_WHEN_OFF_MESH 2.5 // When the nozzle is off the mesh, this value is used

                                          // as the Z-Height correction value.

#elif ENABLED(MESH_BED_LEVELING)

  //===========================================================================

  //=================================== Mesh ==================================

  //===========================================================================

  #define MESH_INSET 10 // Set Mesh bounds as an inset region of the bed

  #define GRID_MAX_POINTS_X 3 // Don't use more than 7 points per axis, implementation limited.

  #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X

  //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest Z at Z_MIN_POS

#endif // BED_LEVELING

/**

 * Add a bed leveling sub-menu for ABL or MBL.

 * Include a guided procedure if manual probing is enabled.

 */

//#define LCD_BED_LEVELING

#if ENABLED(LCD_BED_LEVELING)

  #define MESH_EDIT_Z_STEP 0.025 // (mm) Step size while manually probing Z axis.

  #define LCD_PROBE_Z_RANGE 4 // (mm) Z Range centered on Z_MIN_POS for LCD Z adjustment

  //#define MESH_EDIT_MENU // Add a menu to edit mesh points

#endif

// Add a menu item to move between bed corners for manual bed adjustment

//#define LEVEL_BED_CORNERS

#if ENABLED(LEVEL_BED_CORNERS)

  #define LEVEL_CORNERS_INSET_LFRB { 30, 30, 30, 30 } // (mm) Left, Front, Right, Back insets

  #define LEVEL_CORNERS_HEIGHT 0.0 // (mm) Z height of nozzle at leveling points

  #define LEVEL_CORNERS_Z_HOP 4.0 // (mm) Z height of nozzle between leveling points

  //#define LEVEL_CENTER_TOO // Move to the center after the last corner

#endif

/**

 * Commands to execute at the end of G29 probing.

 * Useful to retract or move the Z probe out of the way.

 */

//#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10"

// @section homing

// The center of the bed is at (X=0, Y=0)

//#define BED_CENTER_AT_0_0

// Manually set the home position. Leave these undefined for automatic settings.

// For DELTA this is the top-center of the Cartesian print volume.

#define MANUAL_X_HOME_POS 0 // откуда идти по сетке

#define MANUAL_Y_HOME_POS 0 //откуда идти по сетке

#define MANUAL_Z_HOME_POS 0 // откуда идти по сетке

// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.

//

// With this feature enabled:

//

// - Allow Z homing only after X and Y homing AND stepper drivers still enabled.

// - If stepper drivers time out, it will need X and Y homing again before Z homing.

// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28).

// - Prevent Z homing when the Z probe is outside bed area.

//

#define Z_SAFE_HOMING //безопастное возращение домой

#if ENABLED(Z_SAFE_HOMING)

  #define Z_SAFE_HOMING_X_POINT ((X_BED_SIZE) / 2) // X point for Z homing when homing all axes (G28).

  #define Z_SAFE_HOMING_Y_POINT ((Y_BED_SIZE) / 2) // Y point for Z homing when homing all axes (G28).

#endif

// Homing speeds (mm/m)

#define HOMING_FEEDRATE_XY (50*60)

#define HOMING_FEEDRATE_Z (4*60)

// Validate that endstops are triggered on homing moves

#define VALIDATE_HOMING_ENDSTOPS

// @section calibrate

/**

 * Bed Skew Compensation

 *

 * This feature corrects for misalignment in the XYZ axes.

 *

 * Take the following steps to get the bed skew in the XY plane:

 * 1. Print a test square (e.g., https://www.thingiverse.com/thing:2563185)

 * 2. For XY_DIAG_AC measure the diagonal A to C

 * 3. For XY_DIAG_BD measure the diagonal B to D

 * 4. For XY_SIDE_AD measure the edge A to D

 *

 * Marlin automatically computes skew factors from these measurements.

 * Skew factors may also be computed and set manually:

 *

 * - Compute AB : SQRT(2*AC*AC+2*BD*BD-4*AD*AD)/2

 * - XY_SKEW_FACTOR : TAN(PI/2-ACOS((AC*AC-AB*AB-AD*AD)/(2*AB*AD)))

 *

 * If desired, follow the same procedure for XZ and YZ.

 * Use these diagrams for reference:

 *

 * Y Z Z

 * ^ B-------C ^ B-------C ^ B-------C

 * | / / | / / | / /

 * | / / | / / | / /

 * | A-------D | A-------D | A-------D

 * +-------------->X +-------------->X +-------------->Y

 * XY_SKEW_FACTOR XZ_SKEW_FACTOR YZ_SKEW_FACTOR

 */

//#define SKEW_CORRECTION

#if ENABLED(SKEW_CORRECTION)

  // Input all length measurements here:

  #define XY_DIAG_AC 282.8427124746

  #define XY_DIAG_BD 282.8427124746

  #define XY_SIDE_AD 200

  // Or, set the default skew factors directly here

  // to override the above measurements:

  #define XY_SKEW_FACTOR 0.0

  //#define SKEW_CORRECTION_FOR_Z

  #if ENABLED(SKEW_CORRECTION_FOR_Z)

    #define XZ_DIAG_AC 282.8427124746

    #define XZ_DIAG_BD 282.8427124746

    #define YZ_DIAG_AC 282.8427124746

    #define YZ_DIAG_BD 282.8427124746

    #define YZ_SIDE_AD 200

    #define XZ_SKEW_FACTOR 0.0

    #define YZ_SKEW_FACTOR 0.0

  #endif

  // Enable this option for M852 to set skew at runtime

  //#define SKEW_CORRECTION_GCODE

#endif

//=============================================================================

//============================= Additional Features ===========================

//=============================================================================

// @section extras

/**

 * EEPROM

 *

 * Persistent storage to preserve configurable settings across reboots.

 *

 * M500 - Store settings to EEPROM.

 * M501 - Read settings from EEPROM. (i.e., Throw away unsaved changes)

 * M502 - Revert settings to "factory" defaults. (Follow with M500 to init the EEPROM.)

 */

//#define EEPROM_SETTINGS // Persistent storage with M500 and M501

//#define DISABLE_M503 // Saves ~2700 bytes of PROGMEM. Disable for release!

#define EEPROM_CHITCHAT // Give feedback on EEPROM commands. Disable to save PROGMEM.

#define EEPROM_BOOT_SILENT // Keep M503 quiet and only give errors during first load

#if ENABLED(EEPROM_SETTINGS)

  //#define EEPROM_AUTO_INIT // Init EEPROM automatically on any errors.

#endif

//

// Host Keepalive

//

// When enabled Marlin will send a busy status message to the host

// every couple of seconds when it can't accept commands.

//

#define HOST_KEEPALIVE_FEATURE // Disable this if your host doesn't like keepalive messages

#define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.

#define BUSY_WHILE_HEATING // Some hosts require "busy" messages even during heating

//

// G20/G21 Inch mode support

//

//#define INCH_MODE_SUPPORT

//

// M149 Set temperature units support

//

//#define TEMPERATURE_UNITS_SUPPORT

// @section temperature

// Preheat Constants

#define PREHEAT_1_LABEL "PLA"

#define PREHEAT_1_TEMP_HOTEND 180

#define PREHEAT_1_TEMP_BED 70

#define PREHEAT_1_FAN_SPEED 0 // Value from 0 to 255

#define PREHEAT_2_LABEL "ABS"

#define PREHEAT_2_TEMP_HOTEND 240

#define PREHEAT_2_TEMP_BED 110

#define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255

/**

 * Nozzle Park

 *

 * Park the nozzle at the given XYZ position on idle or G27.

 *

 * The "P" parameter controls the action applied to the Z axis:

 *

 * P0 (Default) If Z is below park Z raise the nozzle.

 * P1 Raise the nozzle always to Z-park height.

 * P2 Raise the nozzle by Z-park amount, limited to Z_MAX_POS.

 */

//#define NOZZLE_PARK_FEATURE

#if ENABLED(NOZZLE_PARK_FEATURE)

  // Specify a park position as { X, Y, Z_raise }

  #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }

  #define NOZZLE_PARK_XY_FEEDRATE 100 // (mm/s) X and Y axes feedrate (also used for delta Z axis)

  #define NOZZLE_PARK_Z_FEEDRATE 5 // (mm/s) Z axis feedrate (not used for delta printers)

#endif

/**

 * Clean Nozzle Feature -- EXPERIMENTAL

 *

 * Adds the G12 command to perform a nozzle cleaning process.

 *

 * Parameters:

 * P Pattern

 * S Strokes / Repetitions

 * T Triangles (P1 only)

 *

 * Patterns:

 * P0 Straight line (default). This process requires a sponge type material

 * at a fixed bed location. "S" specifies strokes (i.e. back-forth motions)

 * between the start / end points.

 *

 * P1 Zig-zag pattern between (X0, Y0) and (X1, Y1), "T" specifies the

 * number of zig-zag triangles to do. "S" defines the number of strokes.

 * Zig-zags are done in whichever is the narrower dimension.

 * For example, "G12 P1 S1 T3" will execute:

 *

 * --

 * | (X0, Y1) | /\ /\ /\ | (X1, Y1)

 * | | / \ / \ / \ |

 * A | | / \ / \ / \ |

 * | | / \ / \ / \ |

 * | (X0, Y0) | / \/ \/ \ | (X1, Y0)

 * -- +--------------------------------+

 * |________|_________|_________|

 * T1 T2 T3

 *

 * P2 Circular pattern with middle at NOZZLE_CLEAN_CIRCLE_MIDDLE.

 * "R" specifies the radius. "S" specifies the stroke count.

 * Before starting, the nozzle moves to NOZZLE_CLEAN_START_POINT.

 *

 * Caveats: The ending Z should be the same as starting Z.

 * Attention: EXPERIMENTAL. G-code arguments may change.

 *

 */

//#define NOZZLE_CLEAN_FEATURE

#if ENABLED(NOZZLE_CLEAN_FEATURE)

  // Default number of pattern repetitions

  #define NOZZLE_CLEAN_STROKES 12

  // Default number of triangles

  #define NOZZLE_CLEAN_TRIANGLES 3

  // Specify positions for each tool as { { X, Y, Z }, { X, Y, Z } }

  // Dual hotend system may use { { -20, (Y_BED_SIZE / 2), (Z_MIN_POS + 1) }, { 420, (Y_BED_SIZE / 2), (Z_MIN_POS + 1) }}

  #define NOZZLE_CLEAN_START_POINT { { 30, 30, (Z_MIN_POS + 1) } }

  #define NOZZLE_CLEAN_END_POINT { { 100, 60, (Z_MIN_POS + 1) } }

  // Circular pattern radius

  #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5

  // Circular pattern circle fragments number

  #define NOZZLE_CLEAN_CIRCLE_FN 10

  // Middle point of circle

  #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT

  // Move the nozzle to the initial position after cleaning

  #define NOZZLE_CLEAN_GOBACK

  // Enable for a purge/clean station that's always at the gantry height (thus no Z move)

  //#define NOZZLE_CLEAN_NO_Z

#endif

/**

 * Print Job Timer

 *

 * Automatically start and stop the print job timer on M104/M109/M190.

 *

 * M104 (hotend, no wait) - high temp = none, low temp = stop timer

 * M109 (hotend, wait) - high temp = start timer, low temp = stop timer

 * M190 (bed, wait) - high temp = start timer, low temp = none

 *

 * The timer can also be controlled with the following commands:

 *

 * M75 - Start the print job timer

 * M76 - Pause the print job timer

 * M77 - Stop the print job timer

 */

#define PRINTJOB_TIMER_AUTOSTART

/**

 * Print Counter

 *

 * Track statistical data such as:

 *

 * - Total print jobs

 * - Total successful print jobs

 * - Total failed print jobs

 * - Total time printing

 *

 * View the current statistics with M78.

 */

//#define PRINTCOUNTER

//=============================================================================

//============================= LCD and SD support ============================

//=============================================================================

// @section lcd

/**

 * LCD LANGUAGE

 *

 * Select the language to display on the LCD. These languages are available:

 *

 * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, it, jp_kana,

 * ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test

 *

 * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' }

 */

#define LCD_LANGUAGE ru // замена языка на дисплее на русский

/**

 * LCD Character Set

 *

 * Note: This option is NOT applicable to Graphical Displays.

 *

 * All character-based LCDs provide ASCII plus one of these

 * language extensions:

 *

 * - JAPANESE ... the most common

 * - WESTERN ... with more accented characters

 * - CYRILLIC ... for the Russian language

 *

 * To determine the language extension installed on your controller:

 *

 * - Compile and upload with LCD_LANGUAGE set to 'test'

 * - Click the controller to view the LCD menu

 * - The LCD will display Japanese, Western, or Cyrillic text

 *

 * See http://marlinfw.org/docs/development/lcd_language.html

 *

 * :['JAPANESE', 'WESTERN', 'CYRILLIC']

 */

#define DISPLAY_CHARSET_HD44780 JAPANESE

/**

 * Info Screen Style (0:Classic, 1:Prusa)

 *

 * :[0:'Classic', 1:'Prusa']

 */

#define LCD_INFO_SCREEN_STYLE 0

/**

 * SD CARD

 *

 * SD Card support is disabled by default. If your controller has an SD slot,

 * you must uncomment the following option or it won't work.

 *

 */

//#define SDSUPPORT

/**

 * SD CARD: SPI SPEED

 *

 * Enable one of the following items for a slower SPI transfer speed.

 * This may be required to resolve "volume init" errors.

 */

//#define SPI_SPEED SPI_HALF_SPEED

//#define SPI_SPEED SPI_QUARTER_SPEED

//#define SPI_SPEED SPI_EIGHTH_SPEED

/**

 * SD CARD: ENABLE CRC

 *

 * Use CRC checks and retries on the SD communication.

 */

//#define SD_CHECK_AND_RETRY

/**

 * LCD Menu Items

 *

 * Disable all menus and only display the Status Screen, or

 * just remove some extraneous menu items to recover space.

 */

//#define NO_LCD_MENUS

//#define SLIM_LCD_MENUS

//

// ENCODER SETTINGS

//

// This option overrides the default number of encoder pulses needed to

// produce one step. Should be increased for high-resolution encoders.

//

//#define ENCODER_PULSES_PER_STEP 4

//

// Use this option to override the number of step signals required to

// move between next/prev menu items.

//

//#define ENCODER_STEPS_PER_MENU_ITEM 1

/**

 * Encoder Direction Options

 *

 * Test your encoder's behavior first with both options disabled.

 *

 * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.

 * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.

 * Reversed Value Editing only? Enable BOTH options.

 */

//

// This option reverses the encoder direction everywhere.

//

// Set this option if CLOCKWISE causes values to DECREASE

//

//#define REVERSE_ENCODER_DIRECTION

//

// This option reverses the encoder direction for navigating LCD menus.

//

// If CLOCKWISE normally moves DOWN this makes it go UP.

// If CLOCKWISE normally moves UP this makes it go DOWN.

//

//#define REVERSE_MENU_DIRECTION

//

// This option reverses the encoder direction for Select Screen.

//

// If CLOCKWISE normally moves LEFT this makes it go RIGHT.

// If CLOCKWISE normally moves RIGHT this makes it go LEFT.

//

//#define REVERSE_SELECT_DIRECTION

//

// Individual Axis Homing

//

// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.

//

#define INDIVIDUAL_AXIS_HOMING_MENU //добавил в меню отдельную парковку дома

//

// The duration and frequency for the UI feedback sound.

// Set these to 0 to disable audio feedback in the LCD menus.

//

// Note: Test audio output with the G-Code:

// M300 S P

//

//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 2 //открыл частоту пищялки если поставить 0 то выкл его

//#define LCD_FEEDBACK_FREQUENCY_HZ 5000 // открыл длительность мс

//=============================================================================

//======================== LCD / Controller Selection =========================

//======================== (Character-based LCDs) =========================

//=============================================================================

//

// RepRapDiscount Smart Controller.

// http://reprap.org/wiki/RepRapDiscount_Smart_Controller

//

// Note: Usually sold with a white PCB.

//

//#define REPRAP_DISCOUNT_SMART_CONTROLLER

//

// Original RADDS LCD Display+Encoder+SDCardReader

// http://doku.radds.org/dokumentation/lcd-display/

//

//#define RADDS_DISPLAY

//

// ULTIMAKER Controller.

//

//#define ULTIMAKERCONTROLLER

//

// ULTIPANEL as seen on Thingiverse.

//

//#define ULTIPANEL

//

// PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3)

//

//#define PANEL_ONE

//

// GADGETS3D G3D LCD/SD Controller

// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel

//

// Note: Usually sold with a blue PCB.

//

//#define G3D_PANEL

//

// RigidBot Panel V1.0

// http://www.inventapart.com/

//

//#define RIGIDBOT_PANEL

//

// Makeboard 3D Printer Parts 3D Printer Mini Display 1602 Mini Controller

// https://www.aliexpress.com/item/32765887917.html

//

//#define MAKEBOARD_MINI_2_LINE_DISPLAY_1602

//

// ANET and Tronxy 20x4 Controller

//

//#define ZONESTAR_LCD // Requires ADC_KEYPAD_PIN to be assigned to an analog pin.

                                  // This LCD is known to be susceptible to electrical interference

                                  // which scrambles the display. Pressing any button clears it up.

                                  // This is a LCD2004 display with 5 analog buttons.

//

// Generic 16x2, 16x4, 20x2, or 20x4 character-based LCD.

//

//#define ULTRA_LCD

//=============================================================================

//======================== LCD / Controller Selection =========================

//===================== (I2C and Shift-Register LCDs) =====================

//=============================================================================

//

// CONTROLLER TYPE: I2C

//

// Note: These controllers require the installation of Arduino's LiquidCrystal_I2C

// library. For more info: https://github.com/kiyoshigawa/LiquidCrystal_I2C

//

//

// Elefu RA Board Control Panel

// http://www.elefu.com/index.php?route=product/product&product_id=53

//

//#define RA_CONTROL_PANEL

//

// Sainsmart (YwRobot) LCD Displays

//

// These require F.Malpartida's LiquidCrystal_I2C library

// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home

//

//#define LCD_SAINSMART_I2C_1602

//#define LCD_SAINSMART_I2C_2004

//

// Generic LCM1602 LCD adapter

//

//#define LCM1602

//

// PANELOLU2 LCD with status LEDs,

// separate encoder and click inputs.

//

// Note: This controller requires Arduino's LiquidTWI2 library v1.2.3 or later.

// For more info: https://github.com/lincomatic/LiquidTWI2

//

// Note: The PANELOLU2 encoder click input can either be directly connected to

// a pin (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).

//

//#define LCD_I2C_PANELOLU2

//

// Panucatt VIKI LCD with status LEDs,

// integrated click & L/R/U/D buttons, separate encoder inputs.

//

//#define LCD_I2C_VIKI

//

// CONTROLLER TYPE: Shift register panels

//

//

// 2-wire Non-latching LCD SR from https://goo.gl/aJJ4sH

// LCD configuration: http://reprap.org/wiki/SAV_3D_LCD

//

//#define SAV_3DLCD

//

// 3-wire SR LCD with strobe using 74HC4094

// https://github.com/mikeshub/SailfishLCD

// Uses the code directly from Sailfish

//

//#define FF_INTERFACEBOARD

//=============================================================================

//======================= LCD / Controller Selection =======================

//========================= (Graphical LCDs) ========================

//=============================================================================

//

// CONTROLLER TYPE: Graphical 128x64 (DOGM)

//

// IMPORTANT: The U8glib library is required for Graphical Display!

// https://github.com/olikraus/U8glib_Arduino

//

//

// RepRapDiscount FULL GRAPHIC Smart Controller

// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller

//

#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER //Подключение дисплейя

#define ST7920_DELAY_1 DELAY_NS(255)//Чтоб дисплей не задваивался

#define ST7920_DELAY_2 DELAY_NS(255)//Чтоб дисплей не задваивался

#define ST7920_DELAY_3 DELAY_NS(255)//Чтоб дисплей не задваивался

//

// ReprapWorld Graphical LCD

// https://reprapworld.com/?products_details&products_id/1218

//

//#define REPRAPWORLD_GRAPHICAL_LCD

//

// Activate one of these if you have a Panucatt Devices

// Viki 2.0 or mini Viki with Graphic LCD

// http://panucatt.com

//

//#define VIKI2

//#define miniVIKI

//

// MakerLab Mini Panel with graphic

// controller and SD support - http://reprap.org/wiki/Mini_panel

//

//#define MINIPANEL

//

// MaKr3d Makr-Panel with graphic controller and SD support.

// http://reprap.org/wiki/MaKr3d_MaKrPanel

//

//#define MAKRPANEL

//

// Adafruit ST7565 Full Graphic Controller.

// https://github.com/eboston/Adafruit-ST7565-Full-Graphic-Controller/

//

//#define ELB_FULL_GRAPHIC_CONTROLLER

//

// BQ LCD Smart Controller shipped by

// default with the BQ Hephestos 2 and Witbox 2.

//

//#define BQ_LCD_SMART_CONTROLLER

//

// Cartesio UI

// http://mauk.cc/webshop/cartesio-shop/electronics/user-interface

//

//#define CARTESIO_UI

//

// LCD for Melzi Card with Graphical LCD

//

//#define LCD_FOR_MELZI

//

// Original Ulticontroller from Ultimaker 2 printer with SSD1309 I2C display and encoder

// https://github.com/Ultimaker/Ultimaker2/tree/master/1249_Ulticontroller_Board_(x1)

//

//#define ULTI_CONTROLLER

//

// MKS MINI12864 with graphic controller and SD support

// https://reprap.org/wiki/MKS_MINI_12864

//

//#define MKS_MINI_12864

//

// FYSETC variant of the MINI12864 graphic controller with SD support

// https://wiki.fysetc.com/Mini12864_Panel/

//

//#define FYSETC_MINI_12864_X_X // Type C/D/E/F. No tunable RGB Backlight by default

//#define FYSETC_MINI_12864_1_2 // Type C/D/E/F. Simple RGB Backlight (always on)

//#define FYSETC_MINI_12864_2_0 // Type A/B. Discreet RGB Backlight

//#define FYSETC_MINI_12864_2_1 // Type A/B. Neopixel RGB Backlight

//#define FYSETC_GENERIC_12864_1_1 // Larger display with basic ON/OFF backlight.

//

// Factory display for Creality CR-10

// https://www.aliexpress.com/item/32833148327.html

//

// This is RAMPS-compatible using a single 10-pin connector.

// (For CR-10 owners who want to replace the Melzi Creality board but retain the display)

//

//#define CR10_STOCKDISPLAY

//

// Ender-2 OEM display, a variant of the MKS_MINI_12864

//

//#define ENDER2_STOCKDISPLAY

//

// ANET and Tronxy Graphical Controller

//

// Anet 128x64 full graphics lcd with rotary encoder as used on Anet A6

// A clone of the RepRapDiscount full graphics display but with

// different pins/wiring (see pins_ANET_10.h).

//

//#define ANET_FULL_GRAPHICS_LCD

//

// AZSMZ 12864 LCD with SD

// https://www.aliexpress.com/item/32837222770.html

//

//#define AZSMZ_12864

//

// Silvergate GLCD controller

// http://github.com/android444/Silvergate

//

//#define SILVER_GATE_GLCD_CONTROLLER

//=============================================================================

//============================== OLED Displays ==============================

//=============================================================================

//

// SSD1306 OLED full graphics generic display

//

//#define U8GLIB_SSD1306

//

// SAV OLEd LCD module support using either SSD1306 or SH1106 based LCD modules

//

//#define SAV_3DGLCD

#if ENABLED(SAV_3DGLCD)

  #define U8GLIB_SSD1306

  //#define U8GLIB_SH1106

#endif

//

// TinyBoy2 128x64 OLED / Encoder Panel

//

//#define OLED_PANEL_TINYBOY2

//

// MKS OLED 1.3" 128 × 64 FULL GRAPHICS CONTROLLER

// http://reprap.org/wiki/MKS_12864OLED

//

// Tiny, but very sharp OLED display

//

//#define MKS_12864OLED // Uses the SH1106 controller (default)

//#define MKS_12864OLED_SSD1306 // Uses the SSD1306 controller

//

// Einstart S OLED SSD1306

//

//#define U8GLIB_SH1106_EINSTART

//

// Overlord OLED display/controller with i2c buzzer and LEDs

//

//#define OVERLORD_OLED

//=============================================================================

//========================== Extensible UI Displays ===========================

//=============================================================================

//

// DGUS Touch Display with DWIN OS. (Choose one.)

//

//#define DGUS_LCD_UI_ORIGIN

//#define DGUS_LCD_UI_FYSETC

//#define DGUS_LCD_UI_HIPRECY

//

// Touch-screen LCD for Malyan M200 printers

//

//#define MALYAN_LCD

//

// Touch UI for FTDI EVE (FT800/FT810) displays

// See Configuration_adv.h for all configuration options.

//

//#define TOUCH_UI_FTDI_EVE

//

// Third-party or vendor-customized controller interfaces.

// Sources should be installed in 'src/lcd/extensible_ui'.

//

//#define EXTENSIBLE_UI

//=============================================================================

//=============================== Graphical TFTs ==============================

//=============================================================================

//

// FSMC display (MKS Robin, Alfawise U20, JGAurora A5S, REXYZ A1, etc.)

//

//#define FSMC_GRAPHICAL_TFT

//=============================================================================

//============================ Other Controllers ============================

//=============================================================================

//

// ADS7843/XPT2046 ADC Touchscreen such as ILI9341 2.8

//

//#define TOUCH_BUTTONS

#if ENABLED(TOUCH_BUTTONS)

  #define BUTTON_DELAY_EDIT 50 // (ms) Button repeat delay for edit screens

  #define BUTTON_DELAY_MENU 250 // (ms) Button repeat delay for menus

  #define XPT2046_X_CALIBRATION 12316

  #define XPT2046_Y_CALIBRATION -8981

  #define XPT2046_X_OFFSET -43

  #define XPT2046_Y_OFFSET 257

#endif

//

// RepRapWorld REPRAPWORLD_KEYPAD v1.1

// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626

//

//#define REPRAPWORLD_KEYPAD

//#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0 // (mm) Distance to move per key-press

//=============================================================================

//=============================== Extra Features ==============================

//=============================================================================

// @section extras

// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino

//#define FAST_PWM_FAN

// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency

// which is not as annoying as with the hardware PWM. On the other hand, if this frequency

// is too low, you should also increment SOFT_PWM_SCALE.

//#define FAN_SOFT_PWM

// Incrementing this by 1 will double the software PWM frequency,

// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.

// However, control resolution will be halved for each increment;

// at zero value, there are 128 effective control positions.

// :[0,1,2,3,4,5,6,7]

#define SOFT_PWM_SCALE 0

// If SOFT_PWM_SCALE is set to a value higher than 0, dithering can

// be used to mitigate the associated resolution loss. If enabled,

// some of the PWM cycles are stretched so on average the desired

// duty cycle is attained.

//#define SOFT_PWM_DITHER

// Temperature status LEDs that display the hotend and bed temperature.

// If all hotends, bed temperature, and target temperature are under 54C

// then the BLUE led is on. Otherwise the RED led is on. (1C hysteresis)

//#define TEMP_STAT_LEDS

// SkeinForge sends the wrong arc g-codes when using Arc Point as fillet procedure

//#define SF_ARC_FIX

// Support for the BariCUDA Paste Extruder

//#define BARICUDA

// Support for BlinkM/CyzRgb

//#define BLINKM

// Support for PCA9632 PWM LED driver

//#define PCA9632

// Support for PCA9533 PWM LED driver

// https://github.com/mikeshub/SailfishRGB_LED

//#define PCA9533

/**

 * RGB LED / LED Strip Control

 *

 * Enable support for an RGB LED connected to 5V digital pins, or

 * an RGB Strip connected to MOSFETs controlled by digital pins.

 *

 * Adds the M150 command to set the LED (or LED strip) color.

 * If pins are PWM capable (e.g., 4, 5, 6, 11) then a range of

 * luminance values can be set from 0 to 255.

 * For Neopixel LED an overall brightness parameter is also available.

 *

 * *** CAUTION ***

 * LED Strips require a MOSFET Chip between PWM lines and LEDs,

 * as the Arduino cannot handle the current the LEDs will require.

 * Failure to follow this precaution can destroy your Arduino!

 * NOTE: A separate 5V power supply is required! The Neopixel LED needs

 * more current than the Arduino 5V linear regulator can produce.

 * *** CAUTION ***

 *

 * LED Type. Enable only one of the following two options.

 *

 */

//#define RGB_LED

//#define RGBW_LED

#if EITHER(RGB_LED, RGBW_LED)

  //#define RGB_LED_R_PIN 34

  //#define RGB_LED_G_PIN 43

  //#define RGB_LED_B_PIN 35

  //#define RGB_LED_W_PIN -1

#endif

// Support for Adafruit Neopixel LED driver

//#define NEOPIXEL_LED

#if ENABLED(NEOPIXEL_LED)

  #define NEOPIXEL_TYPE NEO_GRBW // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h)

  #define NEOPIXEL_PIN 4 // LED driving pin

  //#define NEOPIXEL2_TYPE NEOPIXEL_TYPE

  //#define NEOPIXEL2_PIN 5

  #define NEOPIXEL_PIXELS 30 // Number of LEDs in the strip, larger of 2 strips if 2 neopixel strips are used

  #define NEOPIXEL_IS_SEQUENTIAL // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once.

  #define NEOPIXEL_BRIGHTNESS 127 // Initial brightness (0-255)

  //#define NEOPIXEL_STARTUP_TEST // Cycle through colors at startup

  // Use a single Neopixel LED for static (background) lighting

  //#define NEOPIXEL_BKGD_LED_INDEX 0 // Index of the LED to use

  //#define NEOPIXEL_BKGD_COLOR { 255, 255, 255, 0 } // R, G, B, W

#endif

/**

 * Printer Event LEDs

 *

 * During printing, the LEDs will reflect the printer status:

 *

 * - Gradually change from blue to violet as the heated bed gets to target temp

 * - Gradually change from violet to red as the hotend gets to temperature

 * - Change to white to illuminate work surface

 * - Change to green once print has finished

 * - Turn off after the print has finished and the user has pushed a button

 */

#if ANY(BLINKM, RGB_LED, RGBW_LED, PCA9632, PCA9533, NEOPIXEL_LED)

  #define PRINTER_EVENT_LEDS

#endif

/**

 * R/C SERVO support

 * Sponsored by TrinityLabs, Reworked by codexmas

 */

/**

 * Number of servos

 *

 * For some servo-related options NUM_SERVOS will be set automatically.

 * Set this manually if there are extra servos needing manual control.

 * Leave undefined or set to 0 to entirely disable the servo subsystem.

 */

//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command

// (ms) Delay before the next move will start, to give the servo time to reach its target angle.

// 300ms is a good value but you can try less delay.

// If the servo can't reach the requested position, increase it.

#define SERVO_DELAY { 300 }

// Only power servos during movement, otherwise leave off to prevent jitter

//#define DEACTIVATE_SERVOS_AFTER_MOVE

// Allow servo angle to be edited and saved to EEPROM

//#define EDITABLE_SERVO_ANGLES

Configuration_adv.h

/**

 * Marlin 3D Printer Firmware

 * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]

 *

 * Based on Sprinter and grbl.

 * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm

 *

 * This program is free software: you can redistribute it and/or modify

 * it under the terms of the GNU General Public License as published by

 * the Free Software Foundation, either version 3 of the License, or

 * (at your option) any later version.

 *

 * This program is distributed in the hope that it will be useful,

 * but WITHOUT ANY WARRANTY; without even the implied warranty of

 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

 * GNU General Public License for more details.

 *

 * You should have received a copy of the GNU General Public License

 * along with this program. If not, see .

 *

 */

#pragma once

/**

 * Configuration_adv.h

 *

 * Advanced settings.

 * Only change these if you know exactly what you're doing.

 * Some of these settings can damage your printer if improperly set!

 *

 * Basic settings can be found in Configuration.h

 *

 */

#define CONFIGURATION_ADV_H_VERSION 020005

// @section temperature

//===========================================================================

//=============================Thermal Settings ============================

//===========================================================================

//

// Custom Thermistor 1000 parameters

//

#if TEMP_SENSOR_0 == 1000

  #define HOTEND0_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor

  #define HOTEND0_RESISTANCE_25C_OHMS 100000 // Resistance at 25C

  #define HOTEND0_BETA 3950 // Beta value

#endif

#if TEMP_SENSOR_1 == 1000

  #define HOTEND1_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor

  #define HOTEND1_RESISTANCE_25C_OHMS 100000 // Resistance at 25C

  #define HOTEND1_BETA 3950 // Beta value

#endif

#if TEMP_SENSOR_2 == 1000

  #define HOTEND2_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor

  #define HOTEND2_RESISTANCE_25C_OHMS 100000 // Resistance at 25C

  #define HOTEND2_BETA 3950 // Beta value

#endif

#if TEMP_SENSOR_3 == 1000

  #define HOTEND3_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor

  #define HOTEND3_RESISTANCE_25C_OHMS 100000 // Resistance at 25C

  #define HOTEND3_BETA 3950 // Beta value

#endif

#if TEMP_SENSOR_4 == 1000

  #define HOTEND4_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor

  #define HOTEND4_RESISTANCE_25C_OHMS 100000 // Resistance at 25C

  #define HOTEND4_BETA 3950 // Beta value

#endif

#if TEMP_SENSOR_5 == 1000

  #define HOTEND5_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor

  #define HOTEND5_RESISTANCE_25C_OHMS 100000 // Resistance at 25C

  #define HOTEND5_BETA 3950 // Beta value

#endif

#if TEMP_SENSOR_6 == 1000

  #define HOTEND6_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor

  #define HOTEND6_RESISTANCE_25C_OHMS 100000 // Resistance at 25C

  #define HOTEND6_BETA 3950 // Beta value

#endif

#if TEMP_SENSOR_7 == 1000

  #define HOTEND7_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor

  #define HOTEND7_RESISTANCE_25C_OHMS 100000 // Resistance at 25C

  #define HOTEND7_BETA 3950 // Beta value

#endif

#if TEMP_SENSOR_BED == 1000

  #define BED_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor

  #define BED_RESISTANCE_25C_OHMS 100000 // Resistance at 25C

  #define BED_BETA 3950 // Beta value

#endif

#if TEMP_SENSOR_CHAMBER == 1000

  #define CHAMBER_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor

  #define CHAMBER_RESISTANCE_25C_OHMS 100000 // Resistance at 25C

  #define CHAMBER_BETA 3950 // Beta value

#endif

//

// Hephestos 2 24V heated bed upgrade kit.

// https://store.bq.com/en/heated-bed-kit-hephestos2

//

//#define HEPHESTOS2_HEATED_BED_KIT

#if ENABLED(HEPHESTOS2_HEATED_BED_KIT)

  #undef TEMP_SENSOR_BED

  #define TEMP_SENSOR_BED 70

  #define HEATER_BED_INVERTING true

#endif

/**

 * Heated Chamber settings

 */

#if TEMP_SENSOR_CHAMBER

  #define CHAMBER_MINTEMP 5

  #define CHAMBER_MAXTEMP 60

  #define TEMP_CHAMBER_HYSTERESIS 1 // (°C) Temperature proximity considered "close enough" to the target

  //#define CHAMBER_LIMIT_SWITCHING

  //#define HEATER_CHAMBER_PIN 44 // Chamber heater on/off pin

  //#define HEATER_CHAMBER_INVERTING false

#endif

#if DISABLED(PIDTEMPBED)

  #define BED_CHECK_INTERVAL 5000 // ms between checks in bang-bang control

  #if ENABLED(BED_LIMIT_SWITCHING)

    #define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS

  #endif

#endif

/**

 * Thermal Protection provides additional protection to your printer from damage

 * and fire. Marlin always includes safe min and max temperature ranges which

 * protect against a broken or disconnected thermistor wire.

 *

 * The issue: If a thermistor falls out, it will report the much lower

 * temperature of the air in the room, and the the firmware will keep

 * the heater on.

 *

 * The solution: Once the temperature reaches the target, start observing.

 * If the temperature stays too far below the target (hysteresis) for too

 * long (period), the firmware will halt the machine as a safety precaution.

 *

 * If you get false positives for "Thermal Runaway", increase

 * THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD

 */

#if ENABLED(THERMAL_PROTECTION_HOTENDS)

  #define THERMAL_PROTECTION_PERIOD 40 // Seconds

  #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius

  //#define ADAPTIVE_FAN_SLOWING // Slow part cooling fan if temperature drops

  #if BOTH(ADAPTIVE_FAN_SLOWING, PIDTEMP)

    //#define NO_FAN_SLOWING_IN_PID_TUNING // Don't slow fan speed during M303

  #endif

  /**

   * Whenever an M104, M109, or M303 increases the target temperature, the

   * firmware will wait for the WATCH_TEMP_PERIOD to expire. If the temperature

   * hasn't increased by WATCH_TEMP_INCREASE degrees, the machine is halted and

   * requires a hard reset. This test restarts with any M104/M109/M303, but only

   * if the current temperature is far enough below the target for a reliable

   * test.

   *

   * If you get false positives for "Heating failed", increase WATCH_TEMP_PERIOD

   * and/or decrease WATCH_TEMP_INCREASE. WATCH_TEMP_INCREASE should not be set

   * below 2.

   */

  #define WATCH_TEMP_PERIOD 20 // Seconds время нагрева хотенда было (20)

  #define WATCH_TEMP_INCREASE 2 // Degrees Celsius тепмература нагрева хотенда на сколько градусов измениться было (2)

#endif

/**

 * Thermal Protection parameters for the bed are just as above for hotends.

 */

#if ENABLED(THERMAL_PROTECTION_BED)

  #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds

  #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius

  /**

   * As described above, except for the bed (M140/M190/M303).

   */

  #define WATCH_BED_TEMP_PERIOD 60 // Seconds

  #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius

#endif

/**

 * Thermal Protection parameters for the heated chamber.

 */

#if ENABLED(THERMAL_PROTECTION_CHAMBER)

  #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds

  #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius

  /**

   * Heated chamber watch settings (M141/M191).

   */

  #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds

  #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius

#endif

#if ENABLED(PIDTEMP)

  // Add an experimental additional term to the heater power, proportional to the extrusion speed.

  // A well-chosen Kc value should add just enough power to melt the increased material volume.

  //#define PID_EXTRUSION_SCALING

  #if ENABLED(PID_EXTRUSION_SCALING)

    #define DEFAULT_Kc (100) //heating power=Kc*(e_speed)

    #define LPQ_MAX_LEN 50

  #endif

  /**

   * Add an experimental additional term to the heater power, proportional to the fan speed.

   * A well-chosen Kf value should add just enough power to compensate for power-loss from the cooling fan.

   * You can either just add a constant compensation with the DEFAULT_Kf value

   * or follow the instruction below to get speed-dependent compensation.

   *

   * Constant compensation (use only with fanspeeds of 0% and 100%)

   * ---------------------------------------------------------------------

   * A good starting point for the Kf-value comes from the calculation:

   * kf = (power_fan * eff_fan) / power_heater * 255

   * where eff_fan is between 0.0 and 1.0, based on fan-efficiency and airflow to the nozzle / heater.

   *

   * Example:

   * Heater: 40W, Fan: 0.1A * 24V = 2.4W, eff_fan = 0.8

   * Kf = (2.4W * 0.8) / 40W * 255 = 12.24

   *

   * Fan-speed dependent compensation

   * --------------------------------

   * 1. To find a good Kf value, set the hotend temperature, wait for it to settle, and enable the fan (100%).

   * Make sure PID_FAN_SCALING_LIN_FACTOR is 0 and PID_FAN_SCALING_ALTERNATIVE_DEFINITION is not enabled.

   * If you see the temperature drop repeat the test, increasing the Kf value slowly, until the temperature

   * drop goes away. If the temperature overshoots after enabling the fan, the Kf value is too big.

   * 2. Note the Kf-value for fan-speed at 100%

   * 3. Determine a good value for PID_FAN_SCALING_MIN_SPEED, which is around the speed, where the fan starts moving.

   * 4. Repeat step 1. and 2. for this fan speed.

   * 5. Enable PID_FAN_SCALING_ALTERNATIVE_DEFINITION and enter the two identified Kf-values in

   * PID_FAN_SCALING_AT_FULL_SPEED and PID_FAN_SCALING_AT_MIN_SPEED. Enter the minimum speed in PID_FAN_SCALING_MIN_SPEED

   */

  //#define PID_FAN_SCALING

  #if ENABLED(PID_FAN_SCALING)

    //#define PID_FAN_SCALING_ALTERNATIVE_DEFINITION

    #if ENABLED(PID_FAN_SCALING_ALTERNATIVE_DEFINITION)

      // The alternative definition is used for an easier configuration.

      // Just figure out Kf at fullspeed (255) and PID_FAN_SCALING_MIN_SPEED.

      // DEFAULT_Kf and PID_FAN_SCALING_LIN_FACTOR are calculated accordingly.

      #define PID_FAN_SCALING_AT_FULL_SPEED 13.0 //=PID_FAN_SCALING_LIN_FACTOR*255+DEFAULT_Kf

      #define PID_FAN_SCALING_AT_MIN_SPEED 6.0 //=PID_FAN_SCALING_LIN_FACTOR*PID_FAN_SCALING_MIN_SPEED+DEFAULT_Kf

      #define PID_FAN_SCALING_MIN_SPEED 10.0 // Minimum fan speed at which to enable PID_FAN_SCALING

      #define DEFAULT_Kf (255.0*PID_FAN_SCALING_AT_MIN_SPEED-PID_FAN_SCALING_AT_FULL_SPEED*PID_FAN_SCALING_MIN_SPEED)/(255.0-PID_FAN_SCALING_MIN_SPEED)

      #define PID_FAN_SCALING_LIN_FACTOR (PID_FAN_SCALING_AT_FULL_SPEED-DEFAULT_Kf)/255.0

    #else

      #define PID_FAN_SCALING_LIN_FACTOR (0) // Power loss due to cooling = Kf * (fan_speed)

      #define DEFAULT_Kf 10 // A constant value added to the PID-tuner

      #define PID_FAN_SCALING_MIN_SPEED 10 // Minimum fan speed at which to enable PID_FAN_SCALING

    #endif

  #endif

#endif

/**

 * Automatic Temperature:

 * The hotend target temperature is calculated by all the buffered lines of gcode.

 * The maximum buffered steps/sec of the extruder motor is called "se".

 * Start autotemp mode with M109 S B F

 * The target temperature is set to mintemp+factor*se[steps/sec] and is limited by

 * mintemp and maxtemp. Turn this off by executing M109 without F*

 * Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp.

 * On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode

 */

#define AUTOTEMP

#if ENABLED(AUTOTEMP)

  #define AUTOTEMP_OLDWEIGHT 0.98

#endif

// Extra options for the M114 "Current Position" report

//#define M114_DETAIL // Use 'M114` for details to check planner calculations

//#define M114_REALTIME // Real current position based on forward kinematics

//#define M114_LEGACY // M114 used to synchronize on every call. Enable if needed.

// Show Temperature ADC value

// Enable for M105 to include ADC values read from temperature sensors.

//#define SHOW_TEMP_ADC_VALUES

/**

 * High Temperature Thermistor Support

 *

 * Thermistors able to support high temperature tend to have a hard time getting

 * good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP

 * will probably be caught when the heating element first turns on during the

 * preheating process, which will trigger a min_temp_error as a safety measure

 * and force stop everything.

 * To circumvent this limitation, we allow for a preheat time (during which,

 * min_temp_error won't be triggered) and add a min_temp buffer to handle

 * aberrant readings.

 *

 * If you want to enable this feature for your hotend thermistor(s)

 * uncomment and set values > 0 in the constants below

 */

// The number of consecutive low temperature errors that can occur

// before a min_temp_error is triggered. (Shouldn't be more than 10.)

//#define MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED 0

// The number of milliseconds a hotend will preheat before starting to check

// the temperature. This value should NOT be set to the time it takes the

// hot end to reach the target temperature, but the time it takes to reach

// the minimum temperature your thermistor can read. The lower the better/safer.

// This shouldn't need to be more than 30 seconds (30000)

//#define MILLISECONDS_PREHEAT_TIME 0

// @section extruder

// Extruder runout prevention.

// If the machine is idle and the temperature over MINTEMP

// then extrude some filament every couple of SECONDS.

//#define EXTRUDER_RUNOUT_PREVENT Предотвращение экструдера засора

#if ENABLED(EXTRUDER_RUNOUT_PREVENT)

  #define EXTRUDER_RUNOUT_MINTEMP 190

  #define EXTRUDER_RUNOUT_SECONDS 30

  #define EXTRUDER_RUNOUT_SPEED 1500 // (mm/m)

  #define EXTRUDER_RUNOUT_EXTRUDE 5 // (mm)

#endif

// @section temperature

// Calibration for AD595 / AD8495 sensor to adjust temperature measurements.

// The final temperature is calculated as (measuredTemp * GAIN) + OFFSET.

#define TEMP_SENSOR_AD595_OFFSET 0.0

#define TEMP_SENSOR_AD595_GAIN 1.0

#define TEMP_SENSOR_AD8495_OFFSET 0.0

#define TEMP_SENSOR_AD8495_GAIN 1.0

/**

 * Controller Fan

 * To cool down the stepper drivers and MOSFETs.

 *

 * The fan turns on automatically whenever any driver is enabled and turns

 * off (or reduces to idle speed) shortly after drivers are turned off.

 *

 */

//#define USE_CONTROLLER_FAN

#if ENABLED(USE_CONTROLLER_FAN)

  //#define CONTROLLER_FAN_PIN -1 // Set a custom pin for the controller fan

  //#define CONTROLLER_FAN_USE_Z_ONLY // With this option only the Z axis is considered

  #define CONTROLLERFAN_SPEED_MIN 0 // (0-255) Minimum speed. (If set below this value the fan is turned off.)

  #define CONTROLLERFAN_SPEED_ACTIVE 255 // (0-255) Active speed, used when any motor is enabled

  #define CONTROLLERFAN_SPEED_IDLE 0 // (0-255) Idle speed, used when motors are disabled

  #define CONTROLLERFAN_IDLE_TIME 60 // (seconds) Extra time to keep the fan running after disabling motors

  //#define CONTROLLER_FAN_EDITABLE // Enable M710 configurable settings

  #if ENABLED(CONTROLLER_FAN_EDITABLE)

    #define CONTROLLER_FAN_MENU // Enable the Controller Fan submenu

  #endif

#endif

// When first starting the main fan, run it at full speed for the

// given number of milliseconds. This gets the fan spinning reliably

// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)

//#define FAN_KICKSTART_TIME 100

// Some coolers may require a non-zero "off" state.

//#define FAN_OFF_PWM 1

/**

 * PWM Fan Scaling

 *

 * Define the min/max speeds for PWM fans (as set with M106).

 *

 * With these options the M106 0-255 value range is scaled to a subset

 * to ensure that the fan has enough power to spin, or to run lower

 * current fans with higher current. (e.g., 5V/12V fans with 12V/24V)

 * Value 0 always turns off the fan.

 *

 * Define one or both of these to override the default 0-255 range.

 */

//#define FAN_MIN_PWM 50

//#define FAN_MAX_PWM 128

/**

 * FAST PWM FAN Settings

 *

 * Use to change the FAST FAN PWM frequency (if enabled in Configuration.h)

 * Combinations of PWM Modes, prescale values and TOP resolutions are used internally to produce a

 * frequency as close as possible to the desired frequency.

 *

 * FAST_PWM_FAN_FREQUENCY [undefined by default]

 * Set this to your desired frequency.

 * If left undefined this defaults to F = F_CPU/(2*255*1)

 * i.e., F = 31.4kHz on 16MHz microcontrollers or F = 39.2kHz on 20MHz microcontrollers.

 * These defaults are the same as with the old FAST_PWM_FAN implementation - no migration is required

 * NOTE: Setting very low frequencies ( Y Z'.

 */

//#define X_DUAL_STEPPER_DRIVERS

#if ENABLED(X_DUAL_STEPPER_DRIVERS)

  #define INVERT_X2_VS_X_DIR true // Set 'true' if X motors should rotate in opposite directions

  //#define X_DUAL_ENDSTOPS

  #if ENABLED(X_DUAL_ENDSTOPS)

    #define X2_USE_ENDSTOP _XMAX_

    #define X2_ENDSTOP_ADJUSTMENT 0

  #endif

#endif

//#define Y_DUAL_STEPPER_DRIVERS

#if ENABLED(Y_DUAL_STEPPER_DRIVERS)

  #define INVERT_Y2_VS_Y_DIR true // Set 'true' if Y motors should rotate in opposite directions

  //#define Y_DUAL_ENDSTOPS

  #if ENABLED(Y_DUAL_ENDSTOPS)

    #define Y2_USE_ENDSTOP _YMAX_

    #define Y2_ENDSTOP_ADJUSTMENT 0

  #endif

#endif

//

// Два мотора для оси Z

#define NUM_Z_STEPPER_DRIVERS 2 // (1-4) Z options change based on how many открыл для второго z мотора было 1 поменя на типо два шаг драйвера

#if NUM_Z_STEPPER_DRIVERS > 2 // поменял на 2 так как два драйвера на оси z

  //#define Z_MULTI_ENDSTOPS

  #if ENABLED(Z_MULTI_ENDSTOPS)

    #define Z2_USE_ENDSTOP _XMAX_

    #define Z2_ENDSTOP_ADJUSTMENT 0

    #if NUM_Z_STEPPER_DRIVERS >= 3

      #define Z3_USE_ENDSTOP _YMAX_

      #define Z3_ENDSTOP_ADJUSTMENT 0

    #endif

    #if NUM_Z_STEPPER_DRIVERS >= 4

      #define Z4_USE_ENDSTOP _ZMAX_

      #define Z4_ENDSTOP_ADJUSTMENT 0

    #endif

  #endif

#endif

/**

 * Dual X Carriage

 *

 * This setup has two X carriages that can move independently, each with its own hotend.

 * The carriages can be used to print an object with two colors or materials, or in

 * "duplication mode" it can print two identical or X-mirrored objects simultaneously.

 * The inactive carriage is parked automatically to prevent oozing.

 * X1 is the left carriage, X2 the right. They park and home at opposite ends of the X axis.

 * By default the X2 stepper is assigned to the first unused E plug on the board.

 *

 * The following Dual X Carriage modes can be selected with M605 S:

 *

 * 0 : (FULL_CONTROL) The slicer has full control over both X-carriages and can achieve optimal travel

 * results as long as it supports dual X-carriages. (M605 S0)

 *

 * 1 : (AUTO_PARK) The firmware automatically parks and unparks the X-carriages on tool-change so

 * that additional slicer support is not required. (M605 S1)

 *

 * 2 : (DUPLICATION) The firmware moves the second X-carriage and extruder in synchronization with

 * the first X-carriage and extruder, to print 2 copies of the same object at the same time.

 * Set the constant X-offset and temperature differential with M605 S2 X[offs] R[deg] and

 * follow with M605 S2 to initiate duplicated movement.

 *

 * 3 : (MIRRORED) Formbot/Vivedino-inspired mirrored mode in which the second extruder duplicates

 * the movement of the first except the second extruder is reversed in the X axis.

 * Set the initial X offset and temperature differential with M605 S2 X[offs] R[deg] and

 * follow with M605 S3 to initiate mirrored movement.

 */

//#define DUAL_X_CARRIAGE

#if ENABLED(DUAL_X_CARRIAGE)

  #define X1_MIN_POS X_MIN_POS // Set to X_MIN_POS

  #define X1_MAX_POS X_BED_SIZE // Set a maximum so the first X-carriage can't hit the parked second X-carriage

  #define X2_MIN_POS 80 // Set a minimum to ensure the second X-carriage can't hit the parked first X-carriage

  #define X2_MAX_POS 353 // Set this to the distance between toolheads when both heads are homed

  #define X2_HOME_DIR 1 // Set to 1. The second X-carriage always homes to the maximum endstop position

  #define X2_HOME_POS X2_MAX_POS // Default X2 home position. Set to X2_MAX_POS.

                      // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software

                      // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops

                      // without modifying the firmware (through the "M218 T1 X???" command).

                      // Remember: you should set the second extruder x-offset to 0 in your slicer.

  // This is the default power-up mode which can be later using M605.

  #define DEFAULT_DUAL_X_CARRIAGE_MODE DXC_AUTO_PARK_MODE

  // Default x offset in duplication mode (typically set to half print bed width)

  #define DEFAULT_DUPLICATION_X_OFFSET 100

#endif // DUAL_X_CARRIAGE

// Activate a solenoid on the active extruder with M380. Disable all with M381.

// Define SOL0_PIN, SOL1_PIN, etc., for each extruder that has a solenoid.

//#define EXT_SOLENOID

// @section homing

// Homing hits each endstop, retracts by these distances, then does a slower bump.

#define X_HOME_BUMP_MM 0 //сила удара при парковке было 5 поменял на 0

#define Y_HOME_BUMP_MM 0 //сила удара при парковке было 5 поменял на 0

#define Z_HOME_BUMP_MM 0 //сила удара при парковке было 2 поменял на 0

#define HOMING_BUMP_DIVISOR { 2, 2, 4 } // Re-Bump Speed Divisor (Divides the Homing Feedrate)

#define QUICK_HOME // If homing includes X and Y, do a diagonal move initially //движение разных моторов сразу

#define HOMING_BACKOFF_MM { 2, 2, 2 } // (mm) Move away from the endstops after homing //раскоментировал

// When G28 is called, this option will make Y home before X

//#define HOME_Y_BEFORE_X

// Enable this if X or Y can't home without homing the other axis first.

//#define CODEPENDENT_XY_HOMING

#if ENABLED(BLTOUCH)

  /**

   * Either: Use the defaults (recommended) or: For special purposes, use the following DEFINES

   * Do not activate settings that the probe might not understand. Clones might misunderstand

   * advanced commands.

   *

   * Note: If the probe is not deploying, check a "Cmd: Reset" and "Cmd: Self-Test" and then

   * check the wiring of the BROWN, RED and ORANGE wires.

   *

   * Note: If the trigger signal of your probe is not being recognized, it has been very often

   * because the BLACK and WHITE wires needed to be swapped. They are not "interchangeable"

   * like they would be with a real switch. So please check the wiring first.

   *

   * Settings for all BLTouch and clone probes:

   */

  // Safety: The probe needs time to recognize the command.

  // Minimum command delay (ms). Enable and increase if needed.

  //#define BLTOUCH_DELAY 500

  /**

   * Settings for BLTOUCH Classic 1.2, 1.3 or BLTouch Smart 1.0, 2.0, 2.2, 3.0, 3.1, and most clones:

   */

  // Feature: Switch into SW mode after a deploy. It makes the output pulse longer. Can be useful

  // in special cases, like noisy or filtered input configurations.

  //#define BLTOUCH_FORCE_SW_MODE

  /**

   * Settings for BLTouch Smart 3.0 and 3.1

   * Summary:

   * - Voltage modes: 5V and OD (open drain - "logic voltage free") output modes

   * - High-Speed mode

   * - Disable LCD voltage options

   */

  /**

   * Danger: Don't activate 5V mode unless attached to a 5V-tolerant controller!

   * V3.0 or 3.1: Set default mode to 5V mode at Marlin startup.

   * If disabled, OD mode is the hard-coded default on 3.0

   * On startup, Marlin will compare its eeprom to this vale. If the selected mode

   * differs, a mode set eeprom write will be completed at initialization.

   * Use the option below to force an eeprom write to a V3.1 probe regardless.

   */

  //#define BLTOUCH_SET_5V_MODE

  /**

   * Safety: Activate if connecting a probe with an unknown voltage mode.

   * V3.0: Set a probe into mode selected above at Marlin startup. Required for 5V mode on 3.0

   * V3.1: Force a probe with unknown mode into selected mode at Marlin startup ( = Probe EEPROM write )

   * To preserve the life of the probe, use this once then turn it off and re-flash.

   */

  //#define BLTOUCH_FORCE_MODE_SET

  /**

   * Use "HIGH SPEED" mode for probing.

   * Danger: Disable if your probe sometimes fails. Only suitable for stable well-adjusted systems.

   * This feature was designed for Delta's with very fast Z moves however higher speed cartesians may function

   * If the machine cannot raise the probe fast enough after a trigger, it may enter a fault state.

   */

  //#define BLTOUCH_HS_MODE

  // Safety: Enable voltage mode settings in the LCD menu.

  //#define BLTOUCH_LCD_VOLTAGE_MENU

#endif // BLTOUCH

/**

 * Z Steppers Auto-Alignment? // авто выравнивание двух моторов

 * Add the G34 command to align multiple Z steppers using a bed probe.

 */

//#define Z_STEPPER_AUTO_ALIGN // включить для выравнивания

#if ENABLED(Z_STEPPER_AUTO_ALIGN)

  // Define probe X and Y positions for Z1, Z2 [, Z3 [, Z4]]

  // If not defined, probe limits will be used.

  // Override with 'M422 S X Y'

  //#define Z_STEPPER_ALIGN_XY { { 10, 190 }, { 100, 10 }, { 190, 190 } }

  /**

   * Orientation for the automatically-calculated probe positions.

   * Override Z stepper align points with 'M422 S X Y'

   *

   * 2 Steppers: (0) (1)

   * | | 2 |

   * | 1 2 | |

   * | | 1 |

   *

   * 3 Steppers: (0) (1) (2) (3)

   * | 3 | 1 | 2 1 | 2 |

   * | | 3 | | 3 |

   * | 1 2 | 2 | 3 | 1 |

   *

   * 4 Steppers: (0) (1) (2) (3)

   * | 4 3 | 1 4 | 2 1 | 3 2 |

   * | | | | |

   * | 1 2 | 2 3 | 3 4 | 4 1 |

   *

   */

  #ifndef Z_STEPPER_ALIGN_XY

    //#define Z_STEPPERS_ORIENTATION 0

  #endif

  // Provide Z stepper positions for more rapid convergence in bed alignment.

  // Requires triple stepper drivers (i.e., set NUM_Z_STEPPER_DRIVERS to 3)

  //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS

  #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)

    // Define Stepper XY positions for Z1, Z2, Z3 corresponding to

    // the Z screw positions in the bed carriage.

    // Define one position per Z stepper in stepper driver order.

    #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } }

  #else

    // Amplification factor. Used to scale the correction step up or down in case

    // the stepper (spindle) position is farther out than the test point.

    #define Z_STEPPER_ALIGN_AMP 1.0 // Use a value > 1.0 NOTE: This may cause instability!

  #endif

  // On a 300mm bed a 5% grade would give a misalignment of ~1.5cm

  #define G34_MAX_GRADE 5 // (%) Maximum incline that G34 will handle

  #define Z_STEPPER_ALIGN_ITERATIONS 5 // Number of iterations to apply during alignment

  #define Z_STEPPER_ALIGN_ACC 0.02 // Stop iterating early if the accuracy is better than this

  #define RESTORE_LEVELING_AFTER_G34 // Restore leveling after G34 is done?

  // After G34, re-home Z (G28 Z) or just calculate it from the last probe heights?

  // Re-homing might be more precise in reproducing the actual 'G28 Z' homing height, especially on an uneven bed.

  #define HOME_AFTER_G34

#endif

// @section motion

#define AXIS_RELATIVE_MODES { false, false, false, false }

// Add a Duplicate option for well-separated conjoined nozzles

//#define MULTI_NOZZLE_DUPLICATION

// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.

#define INVERT_X_STEP_PIN false

#define INVERT_Y_STEP_PIN false

#define INVERT_Z_STEP_PIN false

#define INVERT_E_STEP_PIN false

// Default stepper release if idle. Set to 0 to deactivate.

// Steppers will shut down DEFAULT_STEPPER_DEACTIVE_TIME seconds after the last move when DISABLE_INACTIVE_? is true.

// Time can be set by M18 and M84.

#define DEFAULT_STEPPER_DEACTIVE_TIME 120

#define DISABLE_INACTIVE_X true

#define DISABLE_INACTIVE_Y true

#define DISABLE_INACTIVE_Z true // Set to false if the nozzle will fall down on your printed part when print has finished.

#define DISABLE_INACTIVE_E true

#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate

#define DEFAULT_MINTRAVELFEEDRATE 0.0

//#define HOME_AFTER_DEACTIVATE // Require rehoming after steppers are deactivated

// Minimum time that a segment needs to take if the buffer is emptied

#define DEFAULT_MINSEGMENTTIME 20000 // (ms)

// Slow down the machine if the look ahead buffer is (by default) half full.

// Increase the slowdown divisor for larger buffer sizes.

#define SLOWDOWN

#if ENABLED(SLOWDOWN)

  #define SLOWDOWN_DIVISOR 2

#endif

// Frequency limit

// See nophead's blog for more info

// Not working O

//#define XY_FREQUENCY_LIMIT 15

// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end

// of the buffer and all stops. This should not be much greater than zero and should only be changed

// if unwanted behavior is observed on a user's machine when running at very slow speeds.

#define MINIMUM_PLANNER_SPEED 0.05 // (mm/s)

//

// Backlash Compensation

// Adds extra movement to axes on direction-changes to account for backlash.

//

//#define BACKLASH_COMPENSATION Компенсация люфта

#if ENABLED(BACKLASH_COMPENSATION)

  // Define values for backlash distance and correction.

  // If BACKLASH_GCODE is enabled these values are the defaults.

  #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)

  #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction

  // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments

  // to reduce print artifacts. (Enabling this is costly in memory and computation!)

  //#define BACKLASH_SMOOTHING_MM 3 // (mm)

  // Add runtime configuration and tuning of backlash values (M425)

  //#define BACKLASH_GCODE

  #if ENABLED(BACKLASH_GCODE)

    // Measure the Z backlash when probing (G29) and set with "M425 Z"

    #define MEASURE_BACKLASH_WHEN_PROBING

    #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)

      // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT

      // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION

      // increments while checking for the contact to be broken.

      #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)

      #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)

      #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)

    #endif

  #endif

#endif

/**

 * Automatic backlash, position and hotend offset calibration

 *

 * Enable G425 to run automatic calibration using an electrically-

 * conductive cube, bolt, or washer mounted on the bed.

 *

 * G425 uses the probe to touch the top and sides of the calibration object

 * on the bed and measures and/or correct positional offsets, axis backlash

 * and hotend offsets.

 *

 * Note: HOTEND_OFFSET and CALIBRATION_OBJECT_CENTER must be set to within

 * ±5mm of true values for G425 to succeed.

 */

//#define CALIBRATION_GCODE Автоматическая калибровка люфта

#if ENABLED(CALIBRATION_GCODE)

  #define CALIBRATION_MEASUREMENT_RESOLUTION 0.01 // mm

  #define CALIBRATION_FEEDRATE_SLOW 60 // mm/m

  #define CALIBRATION_FEEDRATE_FAST 1200 // mm/m

  #define CALIBRATION_FEEDRATE_TRAVEL 3000 // mm/m

  // The following parameters refer to the conical section of the nozzle tip.

  #define CALIBRATION_NOZZLE_TIP_HEIGHT 1.0 // mm

  #define CALIBRATION_NOZZLE_OUTER_DIAMETER 2.0 // mm

  // Uncomment to enable reporting (required for "G425 V", but consumes PROGMEM).

  //#define CALIBRATION_REPORTING

  // The true location and dimension the cube/bolt/washer on the bed.

  #define CALIBRATION_OBJECT_CENTER { 264.0, -22.0, -2.0 } // mm

  #define CALIBRATION_OBJECT_DIMENSIONS { 10.0, 10.0, 10.0 } // mm

  // Comment out any sides which are unreachable by the probe. For best

  // auto-calibration results, all sides must be reachable.

  #define CALIBRATION_MEASURE_RIGHT

  #define CALIBRATION_MEASURE_FRONT

  #define CALIBRATION_MEASURE_LEFT

  #define CALIBRATION_MEASURE_BACK

  // Probing at the exact top center only works if the center is flat. If

  // probing on a screwhead or hollow washer, probe near the edges.

  //#define CALIBRATION_MEASURE_AT_TOP_EDGES

  // Define the pin to read during calibration

  #ifndef CALIBRATION_PIN

    //#define CALIBRATION_PIN -1 // Define here to override the default pin

    #define CALIBRATION_PIN_INVERTING false // Set to true to invert the custom pin

    //#define CALIBRATION_PIN_PULLDOWN

    #define CALIBRATION_PIN_PULLUP

  #endif

#endif

/**

 * Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies

 * below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible

 * vibration and surface artifacts. The algorithm adapts to provide the best possible step smoothing at the

 * lowest stepping frequencies.

 */

//#define ADAPTIVE_STEP_SMOOTHING

/**

 * Custom Microstepping

 * Override as-needed for your setup. Up to 3 MS pins are supported.

 */

//#define MICROSTEP1 LOW,LOW,LOW

//#define MICROSTEP2 HIGH,LOW,LOW

//#define MICROSTEP4 LOW,HIGH,LOW

//#define MICROSTEP8 HIGH,HIGH,LOW

//#define MICROSTEP16 LOW,LOW,HIGH

//#define MICROSTEP32 HIGH,LOW,HIGH

// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU.

#define MICROSTEP_MODES { 16, 16, 16, 16, 16, 16 } // [1,2,4,8,16]

/**

 * @section stepper motor current

 *

 * Some boards have a means of setting the stepper motor current via firmware.

 *

 * The power on motor currents are set by:

 * PWM_MOTOR_CURRENT - used by MINIRAMBO & ULTIMAIN_2

 * known compatible chips: A4982

 * DIGIPOT_MOTOR_CURRENT - used by BQ_ZUM_MEGA_3D, RAMBO & SCOOVO_X9H

 * known compatible chips: AD5206

 * DAC_MOTOR_CURRENT_DEFAULT - used by PRINTRBOARD_REVF & RIGIDBOARD_V2

 * known compatible chips: MCP4728

 * DIGIPOT_I2C_MOTOR_CURRENTS - used by 5DPRINT, AZTEEG_X3_PRO, AZTEEG_X5_MINI_WIFI, MIGHTYBOARD_REVE

 * known compatible chips: MCP4451, MCP4018

 *

 * Motor currents can also be set by M907 - M910 and by the LCD.

 * M907 - applies to all.

 * M908 - BQ_ZUM_MEGA_3D, RAMBO, PRINTRBOARD_REVF, RIGIDBOARD_V2 & SCOOVO_X9H

 * M909, M910 & LCD - only PRINTRBOARD_REVF & RIGIDBOARD_V2

 */

//#define PWM_MOTOR_CURRENT { 1300, 1300, 1250 } // Values in milliamps

//#define DIGIPOT_MOTOR_CURRENT { 135,135,135,135,135 } // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)

//#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis

// Use an I2C based DIGIPOT (e.g., Azteeg X3 Pro)

//#define DIGIPOT_I2C

#if ENABLED(DIGIPOT_I2C) && !defined(DIGIPOT_I2C_ADDRESS_A)

  /**

   * Common slave addresses:

   *

   * A (A shifted) B (B shifted) IC

   * Smoothie 0x2C (0x58) 0x2D (0x5A) MCP4451

   * AZTEEG_X3_PRO 0x2C (0x58) 0x2E (0x5C) MCP4451

   * AZTEEG_X5_MINI 0x2C (0x58) 0x2E (0x5C) MCP4451

   * AZTEEG_X5_MINI_WIFI 0x58 0x5C MCP4451

   * MIGHTYBOARD_REVE 0x2F (0x5E) MCP4018

   */

  #define DIGIPOT_I2C_ADDRESS_A 0x2C // unshifted slave address for first DIGIPOT

  #define DIGIPOT_I2C_ADDRESS_B 0x2D // unshifted slave address for second DIGIPOT

#endif

//#define DIGIPOT_MCP4018 // Requires library from https://github.com/stawel/SlowSoftI2CMaster

#define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4 AZTEEG_X3_PRO: 8 MKS SBASE: 5

// Actual motor currents in Amps. The number of entries must match DIGIPOT_I2C_NUM_CHANNELS.

// These correspond to the physical drivers, so be mindful if the order is changed.

#define DIGIPOT_I2C_MOTOR_CURRENTS { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 } // AZTEEG_X3_PRO

//===========================================================================

//=============================Additional Features===========================

//===========================================================================

// @section lcd

#if EITHER(ULTIPANEL, EXTENSIBLE_UI)

  #define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 60 } // Feedrates for manual moves along X, Y, Z, E from panel

  #define SHORT_MANUAL_Z_MOVE 0.025 // (mm) Smallest manual Z move (

   */

  //#define AUTO_REPORT_SD_STATUS

  /**

   * Support for USB thumb drives using an Arduino USB Host Shield or

   * equivalent MAX3421E breakout board. The USB thumb drive will appear

   * to Marlin as an SD card.

   *

   * The MAX3421E can be assigned the same pins as the SD card reader, with

   * the following pin mapping:

   *

   * SCLK, MOSI, MISO --> SCLK, MOSI, MISO

   * INT --> SD_DETECT_PIN [1]

   * SS --> SDSS

   *

   * [1] On AVR an interrupt-capable pin is best for UHS3 compatibility.

   */

  //#define USB_FLASH_DRIVE_SUPPORT Поддержка USB-накопителя

  #if ENABLED(USB_FLASH_DRIVE_SUPPORT)

    #define USB_CS_PIN SDSS

    #define USB_INTR_PIN SD_DETECT_PIN

    /**

     * USB Host Shield Library

     *

     * - UHS2 uses no interrupts and has been production-tested

     * on a LulzBot TAZ Pro with a 32-bit Archim board.

     *

     * - UHS3 is newer code with better USB compatibility. But it

     * is less tested and is known to interfere with Servos.

     * [1] This requires USB_INTR_PIN to be interrupt-capable.

     */

    //#define USE_UHS3_USB

  #endif

  /**

   * When using a bootloader that supports SD-Firmware-Flashing,

   * add a menu item to activate SD-FW-Update on the next reboot.

   *

   * Requires ATMEGA2560 (Arduino Mega)

   *

   * Tested with this bootloader:

   * https://github.com/FleetProbe/MicroBridge-Arduino-ATMega2560

   */

  //#define SD_FIRMWARE_UPDATE

  #if ENABLED(SD_FIRMWARE_UPDATE)

    #define SD_FIRMWARE_UPDATE_EEPROM_ADDR 0x1FF

    #define SD_FIRMWARE_UPDATE_ACTIVE_VALUE 0xF0

    #define SD_FIRMWARE_UPDATE_INACTIVE_VALUE 0xFF

  #endif

  // Add an optimized binary file transfer mode, initiated with 'M28 B1'

  //#define BINARY_FILE_TRANSFER

  /**

   * Set this option to one of the following (or the board's defaults apply):

   *

   * LCD - Use the SD drive in the external LCD controller.

   * ONBOARD - Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.)

   * CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file).

   *

   * :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ]

   */

  //#define SDCARD_CONNECTION LCD

#endif // SDSUPPORT

/**

 * By default an onboard SD card reader may be shared as a USB mass-

 * storage device. This option hides the SD card from the host PC.

 */

//#define NO_SD_HOST_DRIVE // Disable SD Card access over USB (for security).

/**

 * Additional options for Graphical Displays

 *

 * Use the optimizations here to improve printing performance,

 * which can be adversely affected by graphical display drawing,

 * especially when doing several short moves, and when printing

 * on DELTA and SCARA machines.

 *

 * Some of these options may result in the display lagging behind

 * controller events, as there is a trade-off between reliable

 * printing performance versus fast display updates.

 */

#if HAS_GRAPHICAL_LCD

  // Show SD percentage next to the progress bar

  //#define DOGM_SD_PERCENT

  // Enable to save many cycles by drawing a hollow frame on the Info Screen

  #define XYZ_HOLLOW_FRAME

  // Enable to save many cycles by drawing a hollow frame on Menu Screens

  #define MENU_HOLLOW_FRAME

  // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.

  // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.

  //#define USE_BIG_EDIT_FONT

  // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.

  // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.

  //#define USE_SMALL_INFOFONT

  // Swap the CW/CCW indicators in the graphics overlay

  //#define OVERLAY_GFX_REVERSE

  /**

   * ST7920-based LCDs can emulate a 16 x 4 character display using

   * the ST7920 character-generator for very fast screen updates.

   * Enable LIGHTWEIGHT_UI to use this special display mode.

   *

   * Since LIGHTWEIGHT_UI has limited space, the position and status

   * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the

   * length of time to display the status message before clearing.

   *

   * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.

   * This will prevent position updates from being displayed.

   */

  #if ENABLED(U8GLIB_ST7920)

    // Enable this option and reduce the value to optimize screen updates.

    // The normal delay is 10µs. Use the lowest value that still gives a reliable display.

    //#define DOGM_SPI_DELAY_US 5

    //#define LIGHTWEIGHT_UI

    #if ENABLED(LIGHTWEIGHT_UI)

      #define STATUS_EXPIRE_SECONDS 20

    #endif

  #endif

  /**

   * Status (Info) Screen customizations

   * These options may affect code size and screen render time.

   * Custom status screens can forcibly override these settings.

   */

  //#define STATUS_COMBINE_HEATERS // Use combined heater images instead of separate ones

  //#define STATUS_HOTEND_NUMBERLESS // Use plain hotend icons instead of numbered ones (with 2+ hotends)

  #define STATUS_HOTEND_INVERTED // Show solid nozzle bitmaps when heating (Requires STATUS_HOTEND_ANIM)

  #define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating

  #define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating

  #define STATUS_CHAMBER_ANIM // Use a second bitmap to indicate chamber heating

  //#define STATUS_CUTTER_ANIM // Use a second bitmap to indicate spindle / laser active

  //#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap

  //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap

  //#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames

  //#define STATUS_HEAT_PERCENT // Show heating in a progress bar

  //#define BOOT_MARLIN_LOGO_SMALL // Show a smaller Marlin logo on the Boot Screen (saving 399 bytes of flash)

  //#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~‭3260 (or ~940) bytes of PROGMEM.

  // Frivolous Game Options

  //#define MARLIN_BRICKOUT

  //#define MARLIN_INVADERS

  //#define MARLIN_SNAKE

  //#define GAMES_EASTER_EGG // Add extra blank lines above the "Games" sub-menu

#endif // HAS_GRAPHICAL_LCD

//

// Additional options for DGUS / DWIN displays

//

#if HAS_DGUS_LCD

  #define DGUS_SERIAL_PORT 3

  #define DGUS_BAUDRATE 115200

  #define DGUS_RX_BUFFER_SIZE 128

  #define DGUS_TX_BUFFER_SIZE 48

  //#define DGUS_SERIAL_STATS_RX_BUFFER_OVERRUNS // Fix Rx overrun situation (Currently only for AVR)

  #define DGUS_UPDATE_INTERVAL_MS 500 // (ms) Interval between automatic screen updates

  #if EITHER(DGUS_LCD_UI_FYSETC, DGUS_LCD_UI_HIPRECY)

    #define DGUS_PRINT_FILENAME // Display the filename during printing

    #define DGUS_PREHEAT_UI // Display a preheat screen during heatup

    #if ENABLED(DGUS_LCD_UI_FYSETC)

      //#define DGUS_UI_MOVE_DIS_OPTION // Disabled by default for UI_FYSETC

    #else

      #define DGUS_UI_MOVE_DIS_OPTION // Enabled by default for UI_HIPRECY

    #endif

    #define DGUS_FILAMENT_LOADUNLOAD

    #if ENABLED(DGUS_FILAMENT_LOADUNLOAD)

      #define DGUS_FILAMENT_PURGE_LENGTH 10

      #define DGUS_FILAMENT_LOAD_LENGTH_PER_TIME 0.5 // (mm) Adjust in proportion to DGUS_UPDATE_INTERVAL_MS

    #endif

    #define DGUS_UI_WAITING // Show a "waiting" screen between some screens

    #if ENABLED(DGUS_UI_WAITING)

      #define DGUS_UI_WAITING_STATUS 10

      #define DGUS_UI_WAITING_STATUS_PERIOD 8 // Increase to slower waiting status looping

    #endif

  #endif

#endif // HAS_DGUS_LCD

//

// Touch UI for the FTDI Embedded Video Engine (EVE)

//

#if ENABLED(TOUCH_UI_FTDI_EVE)

  // Display board used

  //#define LCD_FTDI_VM800B35A // FTDI 3.5" with FT800 (320x240)

  //#define LCD_4DSYSTEMS_4DLCD_FT843 // 4D Systems 4.3" (480x272)

  //#define LCD_HAOYU_FT800CB // Haoyu with 4.3" or 5" (480x272)

  //#define LCD_HAOYU_FT810CB // Haoyu with 5" (800x480)

  //#define LCD_ALEPHOBJECTS_CLCD_UI // Aleph Objects Color LCD UI

  // Correct the resolution if not using the stock TFT panel.

  //#define TOUCH_UI_320x240

  //#define TOUCH_UI_480x272

  //#define TOUCH_UI_800x480

  // Mappings for boards with a standard RepRapDiscount Display connector

  //#define AO_EXP1_PINMAP // AlephObjects CLCD UI EXP1 mapping

  //#define AO_EXP2_PINMAP // AlephObjects CLCD UI EXP2 mapping

  //#define CR10_TFT_PINMAP // Rudolph Riedel's CR10 pin mapping

  //#define S6_TFT_PINMAP // FYSETC S6 pin mapping

  //#define OTHER_PIN_LAYOUT // Define pins manually below

  #if ENABLED(OTHER_PIN_LAYOUT)

    // Pins for CS and MOD_RESET (PD) must be chosen

    #define CLCD_MOD_RESET 9

    #define CLCD_SPI_CS 10

    // If using software SPI, specify pins for SCLK, MOSI, MISO

    //#define CLCD_USE_SOFT_SPI

    #if ENABLED(CLCD_USE_SOFT_SPI)

      #define CLCD_SOFT_SPI_MOSI 11

      #define CLCD_SOFT_SPI_MISO 12

      #define CLCD_SOFT_SPI_SCLK 13

    #endif

  #endif

  // Display Orientation. An inverted (i.e. upside-down) display

  // is supported on the FT800. The FT810 and beyond also support

  // portrait and mirrored orientations.

  //#define TOUCH_UI_INVERTED

  //#define TOUCH_UI_PORTRAIT

  //#define TOUCH_UI_MIRRORED

  // UTF8 processing and rendering.

  // Unsupported characters are shown as '?'.

  //#define TOUCH_UI_USE_UTF8

  #if ENABLED(TOUCH_UI_USE_UTF8)

    // Western accents support. These accented characters use

    // combined bitmaps and require relatively little storage.

    #define TOUCH_UI_UTF8_WESTERN_CHARSET

    #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET)

      // Additional character groups. These characters require

      // full bitmaps and take up considerable storage:

      //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³

      //#define TOUCH_UI_UTF8_COPYRIGHT // © ®

      //#define TOUCH_UI_UTF8_GERMANIC // ß

      //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ

      //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡

      //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥

      //#define TOUCH_UI_UTF8_ORDINALS // º ª

      //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷

      //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾

      //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬

    #endif

  #endif

  // Use a smaller font when labels don't fit buttons

  #define TOUCH_UI_FIT_TEXT

  // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE)

  //#define LCD_LANGUAGE_1 en

  //#define LCD_LANGUAGE_2 fr

  //#define LCD_LANGUAGE_3 de

  //#define LCD_LANGUAGE_4 es

  //#define LCD_LANGUAGE_5 it

  // Use a numeric passcode for "Screen lock" keypad.

  // (recommended for smaller displays)

  //#define TOUCH_UI_PASSCODE

  // Output extra debug info for Touch UI events

  //#define TOUCH_UI_DEBUG

  // Developer menu (accessed by touching "About Printer" copyright text)

  //#define TOUCH_UI_DEVELOPER_MENU

#endif

//

// FSMC Graphical TFT

//

#if ENABLED(FSMC_GRAPHICAL_TFT)

  //#define TFT_MARLINUI_COLOR 0xFFFF // White

  //#define TFT_MARLINBG_COLOR 0x0000 // Black

  //#define TFT_DISABLED_COLOR 0x0003 // Almost black

  //#define TFT_BTCANCEL_COLOR 0xF800 // Red

  //#define TFT_BTARROWS_COLOR 0xDEE6 // 11011 110111 00110 Yellow

  //#define TFT_BTOKMENU_COLOR 0x145F // 00010 100010 11111 Cyan

#endif

//

// ADC Button Debounce

//

#if HAS_ADC_BUTTONS

  #define ADC_BUTTON_DEBOUNCE_DELAY 16 // (ms) Increase if buttons bounce or repeat too fast

#endif

// @section safety

/**

 * The watchdog hardware timer will do a reset and disable all outputs

 * if the firmware gets too overloaded to read the temperature sensors.

 *

 * If you find that watchdog reboot causes your AVR board to hang forever,

 * enable WATCHDOG_RESET_MANUAL to use a custom timer instead of WDTO.

 * NOTE: This method is less reliable as it can only catch hangups while

 * interrupts are enabled.

 */

#define USE_WATCHDOG

#if ENABLED(USE_WATCHDOG)

  //#define WATCHDOG_RESET_MANUAL

#endif

// @section lcd

/**

 * Babystepping enables movement of the axes by tiny increments without changing

 * the current position values. This feature is used primarily to adjust the Z

 * axis in the first layer of a print in real-time.

 *

 * Warning: Does not respect endstops!

 */

#define BABYSTEPPING // мини шаги для точного выравнивания

#if ENABLED(BABYSTEPPING)

  //#define INTEGRATED_BABYSTEPPING // EXPERIMENTAL integration of babystepping into the Stepper ISR

  //#define BABYSTEP_WITHOUT_HOMING

  //#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA!

  #define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way

  #define BABYSTEP_MULTIPLICATOR_Z 0.5 // Babysteps are very small. Increase for faster motion. было 1 поменял для точности

  #define BABYSTEP_MULTIPLICATOR_XY 1

  #define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping. //двойное нажатие для запуска

  #if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)

    #define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds.

                                            // Note: Extra time may be added to mitigate controller latency.

    //#define BABYSTEP_ALWAYS_AVAILABLE // Allow babystepping at all times (not just during movement).

    //#define MOVE_Z_WHEN_IDLE // Jump to the move Z menu on doubleclick when printer is idle.

    #if ENABLED(MOVE_Z_WHEN_IDLE)

      #define MOVE_Z_IDLE_MULTIPLICATOR 1 // Multiply 1mm by this factor for the move step size.

    #endif

  #endif

  //#define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28

  //#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping

  #if ENABLED(BABYSTEP_ZPROBE_OFFSET)

    //#define BABYSTEP_HOTEND_Z_OFFSET // For multiple hotends, babystep relative Z offsets

    //#define BABYSTEP_ZPROBE_GFX_OVERLAY // Enable graphical overlay on Z-offset editor

  #endif

#endif

// @section extruder

/**

 * Linear Pressure Control v1.5

 *

 * Assumption: advance [steps] = k * (delta velocity [steps/s])

 * K=0 means advance disabled.

 *

 * NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!

 *

 * Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.

 * Larger K values will be needed for flexible filament and greater distances.

 * If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)

 * print acceleration will be reduced during the affected moves to keep within the limit.

 *

 * See http://marlinfw.org/docs/features/lin_advance.html for full instructions.

 * Mention @Sebastianv650 on GitHub to alert the author of any issues.

 */

//#define LIN_ADVANCE

#if ENABLED(LIN_ADVANCE)

  //#define EXTRA_LIN_ADVANCE_K // Enable for second linear advance constants

  #define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed

  //#define LA_DEBUG // If enabled, this will generate debug information output over USB.

#endif

// @section leveling

/**

 * Points to probe for all 3-point Leveling procedures.

 * Override if the automatically selected points are inadequate.

 */

#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL)

  //#define PROBE_PT_1_X 15

  //#define PROBE_PT_1_Y 180

  //#define PROBE_PT_2_X 15

  //#define PROBE_PT_2_Y 20

  //#define PROBE_PT_3_X 170

  //#define PROBE_PT_3_Y 20

#endif

/**

 * Override MIN_PROBE_EDGE for each side of the build plate

 * Useful to get probe points to exact positions on targets or

 * to allow leveling to avoid plate clamps on only specific

 * sides of the bed. With NOZZLE_AS_PROBE negative values are

 * allowed, to permit probing outside the bed.

 *

 * If you are replacing the prior *_PROBE_BED_POSITION options,

 * LEFT and FRONT values in most cases will map directly over

 * RIGHT and REAR would be the inverse such as

 * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION)

 *

 * This will allow all positions to match at compilation, however

 * should the probe position be modified with M851XY then the

 * probe points will follow. This prevents any change from causing

 * the probe to be unable to reach any points.

 */

#if PROBE_SELECTED && !IS_KINEMATIC

  #define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE //открыл для датчика з

  #define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE //открыл для датчика з

  #define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE //открыл для датчика з

  #define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE//открыл для датчика з

#endif

#if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL)

  // Override the mesh area if the automatic (max) area is too large

  //#define MESH_MIN_X MESH_INSET

  //#define MESH_MIN_Y MESH_INSET

  //#define MESH_MAX_X X_BED_SIZE - (MESH_INSET)

  //#define MESH_MAX_Y Y_BED_SIZE - (MESH_INSET)

#endif

/**

 * Repeatedly attempt G29 leveling until it succeeds.

 * Stop after G29_MAX_RETRIES attempts.

 */

//#define G29_RETRY_AND_RECOVER

#if ENABLED(G29_RETRY_AND_RECOVER)

  #define G29_MAX_RETRIES 3

  #define G29_HALT_ON_FAILURE

  /**

   * Specify the GCODE commands that will be executed when leveling succeeds,

   * between attempts, and after the maximum number of retries have been tried.

   */

  #define G29_SUCCESS_COMMANDS "M117 Bed leveling done."

  #define G29_RECOVER_COMMANDS "M117 Probe failed. Rewiping.\nG28\nG12 P0 S12 T0"

  #define G29_FAILURE_COMMANDS "M117 Bed leveling failed.\nG0 Z10\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nG4 S1"

#endif

/**

 * Thermal Probe Compensation

 * Probe measurements are adjusted to compensate for temperature distortion.

 * Use G76 to calibrate this feature. Use M871 to set values manually.

 * For a more detailed explanation of the process see G76_M871.cpp.

 */

#if HAS_BED_PROBE && TEMP_SENSOR_PROBE && TEMP_SENSOR_BED

  // Enable thermal first layer compensation using bed and probe temperatures

  #define PROBE_TEMP_COMPENSATION

  // Add additional compensation depending on hotend temperature

  // Note: this values cannot be calibrated and have to be set manually

  #if ENABLED(PROBE_TEMP_COMPENSATION)

    // Max temperature that can be reached by heated bed.

    // This is required only for the calibration process.

    #define PTC_MAX_BED_TEMP BED_MAXTEMP

    // Park position to wait for probe cooldown

    #define PTC_PARK_POS_X 0.0F

    #define PTC_PARK_POS_Y 0.0F

    #define PTC_PARK_POS_Z 100.0F

    // Probe position to probe and wait for probe to reach target temperature

    #define PTC_PROBE_POS_X 90.0F

    #define PTC_PROBE_POS_Y 100.0F

    // Enable additional compensation using hotend temperature

    // Note: this values cannot be calibrated automatically but have to be set manually

    //#define USE_TEMP_EXT_COMPENSATION

  #endif

#endif

// @section extras

//

// G60/G61 Position Save and Return

//

//#define SAVED_POSITIONS 1 // Each saved position slot costs 12 bytes

//

// G2/G3 Arc Support

//

#define ARC_SUPPORT // Disable this feature to save ~3226 bytes

#if ENABLED(ARC_SUPPORT)

  #define MM_PER_ARC_SEGMENT 1 // (mm) Length (or minimum length) of each arc segment

  //#define ARC_SEGMENTS_PER_R 1 // Max segment length, MM_PER = Min

  #define MIN_ARC_SEGMENTS 24 // Minimum number of segments in a complete circle

  //#define ARC_SEGMENTS_PER_SEC 50 // Use feedrate to choose segment length (with MM_PER_ARC_SEGMENT as the minimum)

  #define N_ARC_CORRECTION 25 // Number of interpolated segments between corrections

  //#define ARC_P_CIRCLES // Enable the 'P' parameter to specify complete circles

  //#define CNC_WORKSPACE_PLANES // Allow G2/G3 to operate in XY, ZX, or YZ planes

#endif

// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.

//#define BEZIER_CURVE_SUPPORT

/**

 * G38 Probe Target

 *

 * This option adds G38.2 and G38.3 (probe towards target)

 * and optionally G38.4 and G38.5 (probe away from target).

 * Set MULTIPLE_PROBING for G38 to probe more than once.

 */

//#define G38_PROBE_TARGET

#if ENABLED(G38_PROBE_TARGET)

  //#define G38_PROBE_AWAY // Include G38.4 and G38.5 to probe away from target

  #define G38_MINIMUM_MOVE 0.0275 // (mm) Minimum distance that will produce a move.

#endif

// Moves (or segments) with fewer steps than this will be joined with the next move

#define MIN_STEPS_PER_SEGMENT 6

/**

 * Minimum delay before and after setting the stepper DIR (in ns)

 * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire)

 * 20 : Minimum for TMC2xxx drivers

 * 200 : Minimum for A4988 drivers

 * 400 : Minimum for A5984 drivers

 * 500 : Minimum for LV8729 drivers (guess, no info in datasheet)

 * 650 : Minimum for DRV8825 drivers

 * 1500 : Minimum for TB6600 drivers (guess, no info in datasheet)

 * 15000 : Minimum for TB6560 drivers (guess, no info in datasheet)

 *

 * Override the default value based on the driver type set in Configuration.h.

 */

#define MINIMUM_STEPPER_POST_DIR_DELAY 20 //Поменял с 650 на 20 ТМС соотвествие драйверам

#define MINIMUM_STEPPER_PRE_DIR_DELAY 20 //Поменял с 650 на 20 ТМС соотвествие драйверам

/**

 * Minimum stepper driver pulse width (in µs)

 * 0 : Smallest possible width the MCU can produce, compatible with TMC2xxx drivers

 * 0 : Minimum 500ns for LV8729, adjusted in stepper.h

 * 1 : Minimum for A4988 and A5984 stepper drivers

 * 2 : Minimum for DRV8825 stepper drivers

 * 3 : Minimum for TB6600 stepper drivers

 * 30 : Minimum for TB6560 stepper drivers

 *

 * Override the default value based on the driver type set in Configuration.h.

 */

#define MINIMUM_STEPPER_PULSE 0 //понеля с 2 на 0 и расскоментил

/**

 * Maximum stepping rate (in Hz) the stepper driver allows

 * If undefined, defaults to 1MHz / (2 * MINIMUM_STEPPER_PULSE)

 * 5000000 : Maximum for TMC2xxx stepper drivers

 * 1000000 : Maximum for LV8729 stepper driver

 * 500000 : Maximum for A4988 stepper driver

 * 250000 : Maximum for DRV8825 stepper driver

 * 150000 : Maximum for TB6600 stepper driver

 * 15000 : Maximum for TB6560 stepper driver

 *

 * Override the default value based on the driver type set in Configuration.h.

 */

#define MAXIMUM_STEPPER_RATE 5000000 //поменял с 25000 и расскоментил

// @section temperature

// Control heater 0 and heater 1 in parallel.

//#define HEATERS_PARALLEL

//===========================================================================

//================================= Buffers =================================

//===========================================================================

// @section hidden

// The number of linear motions that can be in the plan at any give time.

// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2 (e.g. 8, 16, 32) because shifts and ors are used to do the ring-buffering.

#if ENABLED(SDSUPPORT)

  #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller

#else

  #define BLOCK_BUFFER_SIZE 16 // maximize block buffer

#endif

// @section serial

// The ASCII buffer for serial input

#define MAX_CMD_SIZE 96

#define BUFSIZE 4

// Transmission to Host Buffer Size

// To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0.

// To buffer a simple "ok" you need 4 bytes.

// For ADVANCED_OK (M105) you need 32 bytes.

// For debug-echo: 128 bytes for the optimal speed.

// Other output doesn't need to be that speedy.

// :[0, 2, 4, 8, 16, 32, 64, 128, 256]

#define TX_BUFFER_SIZE 0

// Host Receive Buffer Size

// Without XON/XOFF flow control (see SERIAL_XON_XOFF below) 32 bytes should be enough.

// To use flow control, set this buffer size to at least 1024 bytes.

// :[0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048]

//#define RX_BUFFER_SIZE 1024

#if RX_BUFFER_SIZE >= 1024

  // Enable to have the controller send XON/XOFF control characters to

  // the host to signal the RX buffer is becoming full.

  //#define SERIAL_XON_XOFF

#endif

// Add M575 G-code to change the baud rate

//#define BAUD_RATE_GCODE

#if ENABLED(SDSUPPORT)

  // Enable this option to collect and display the maximum

  // RX queue usage after transferring a file to SD.

  //#define SERIAL_STATS_MAX_RX_QUEUED

  // Enable this option to collect and display the number

  // of dropped bytes after a file transfer to SD.

  //#define SERIAL_STATS_DROPPED_RX

#endif

// Enable an emergency-command parser to intercept certain commands as they

// enter the serial receive buffer, so they cannot be blocked.

// Currently handles M108, M112, M410

// Does not work on boards using AT90USB (USBCON) processors!

//#define EMERGENCY_PARSER

// Bad Serial-connections can miss a received command by sending an 'ok'

// Therefore some clients abort after 30 seconds in a timeout.

// Some other clients start sending commands while receiving a 'wait'.

// This "wait" is only sent when the buffer is empty. 1 second is a good value here.

//#define NO_TIMEOUTS 1000 // Milliseconds

// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary.

//#define ADVANCED_OK

// Printrun may have trouble receiving long strings all at once.

// This option inserts short delays between lines of serial output.

#define SERIAL_OVERRUN_PROTECTION

// @section extras

/**

 * Extra Fan Speed

 * Adds a secondary fan speed for each print-cooling fan.

 * 'M106 P T3-255' : Set a secondary speed for

 * 'M106 P T2' : Use the set secondary speed

 * 'M106 P T1' : Restore the previous fan speed

 */

//#define EXTRA_FAN_SPEED

/**

 * Firmware-based and LCD-controlled retract

 *

 * Add G10 / G11 commands for automatic firmware-based retract / recover.

 * Use M207 and M208 to define parameters for retract / recover.

 *

 * Use M209 to enable or disable auto-retract.

 * With auto-retract enabled, all G1 E moves within the set range

 * will be converted to firmware-based retract/recover moves.

 *

 * Be sure to turn off auto-retract during filament change.

 *

 * Note that M207 / M208 / M209 settings are saved to EEPROM.

 *

 */

//#define FWRETRACT

#if ENABLED(FWRETRACT)

  #define FWRETRACT_AUTORETRACT // Override slicer retractions

  #if ENABLED(FWRETRACT_AUTORETRACT)

    #define MIN_AUTORETRACT 0.1 // (mm) Don't convert E moves under this length

    #define MAX_AUTORETRACT 10.0 // (mm) Don't convert E moves over this length

  #endif

  #define RETRACT_LENGTH 3 // (mm) Default retract length (positive value)

  #define RETRACT_LENGTH_SWAP 13 // (mm) Default swap retract length (positive value)

  #define RETRACT_FEEDRATE 45 // (mm/s) Default feedrate for retracting

  #define RETRACT_ZRAISE 0 // (mm) Default retract Z-raise

  #define RETRACT_RECOVER_LENGTH 0 // (mm) Default additional recover length (added to retract length on recover)

  #define RETRACT_RECOVER_LENGTH_SWAP 0 // (mm) Default additional swap recover length (added to retract length on recover from toolchange)

  #define RETRACT_RECOVER_FEEDRATE 8 // (mm/s) Default feedrate for recovering from retraction

  #define RETRACT_RECOVER_FEEDRATE_SWAP 8 // (mm/s) Default feedrate for recovering from swap retraction

  #if ENABLED(MIXING_EXTRUDER)

    //#define RETRACT_SYNC_MIXING // Retract and restore all mixing steppers simultaneously

  #endif

#endif

/**

 * Universal tool change settings.

 * Applies to all types of extruders except where explicitly noted.

 */

#if EXTRUDERS > 1

  // Z raise distance for tool-change, as needed for some extruders

  #define TOOLCHANGE_ZRAISE 2 // (mm)

  //#define TOOLCHANGE_NO_RETURN // Never return to the previous position on tool-change

  #if ENABLED(TOOLCHANGE_NO_RETURN)

    //#define EVENT_GCODE_AFTER_TOOLCHANGE "G12X" // G-code to run after tool-change is complete

  #endif

  // Retract and prime filament on tool-change

  //#define TOOLCHANGE_FILAMENT_SWAP

  #if ENABLED(TOOLCHANGE_FILAMENT_SWAP)

    #define TOOLCHANGE_FIL_SWAP_LENGTH 12 // (mm)

    #define TOOLCHANGE_FIL_EXTRA_PRIME 2 // (mm)

    #define TOOLCHANGE_FIL_SWAP_RETRACT_SPEED 3600 // (mm/m)

    #define TOOLCHANGE_FIL_SWAP_PRIME_SPEED 3600 // (mm/m)

  #endif

  /**

   * Position to park head during tool change.

   * Doesn't apply to SWITCHING_TOOLHEAD, DUAL_X_CARRIAGE, or PARKING_EXTRUDER

   */

  //#define TOOLCHANGE_PARK

  #if ENABLED(TOOLCHANGE_PARK)

    #define TOOLCHANGE_PARK_XY { X_MIN_POS + 10, Y_MIN_POS + 10 }

    #define TOOLCHANGE_PARK_XY_FEEDRATE 6000 // (mm/m)

  #endif

#endif

/**

 * Advanced Pause

 * Experimental feature for filament change support and for parking the nozzle when paused.

 * Adds the GCode M600 for initiating filament change.

 * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.

 *

 * Requires an LCD display.

 * Requires NOZZLE_PARK_FEATURE.

 * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.

 */

//#define ADVANCED_PAUSE_FEATURE

#if ENABLED(ADVANCED_PAUSE_FEATURE)

  #define PAUSE_PARK_RETRACT_FEEDRATE 60 // (mm/s) Initial retract feedrate.

  #define PAUSE_PARK_RETRACT_LENGTH 2 // (mm) Initial retract.

                                                  // This short retract is done immediately, before parking the nozzle.

  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // (mm/s) Unload filament feedrate. This can be pretty fast.

  #define FILAMENT_CHANGE_UNLOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate.

  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // (mm) The length of filament for a complete unload.

                                                  // For Bowden, the full length of the tube and nozzle.

                                                  // For direct drive, the full length of the nozzle.

                                                  // Set to 0 for manual unloading.

  #define FILAMENT_CHANGE_SLOW_LOAD_FEEDRATE 6 // (mm/s) Slow move when starting load.

  #define FILAMENT_CHANGE_SLOW_LOAD_LENGTH 0 // (mm) Slow length, to allow time to insert material.

                                                  // 0 to disable start loading and skip to fast load only

  #define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE 6 // (mm/s) Load filament feedrate. This can be pretty fast.

  #define FILAMENT_CHANGE_FAST_LOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate.

  #define FILAMENT_CHANGE_FAST_LOAD_LENGTH 0 // (mm) Load length of filament, from extruder gear to nozzle.

                                                  // For Bowden, the full length of the tube and nozzle.

                                                  // For direct drive, the full length of the nozzle.

  //#define ADVANCED_PAUSE_CONTINUOUS_PURGE // Purge continuously up to the purge length until interrupted.

  #define ADVANCED_PAUSE_PURGE_FEEDRATE 3 // (mm/s) Extrude feedrate (after loading). Should be slower than load feedrate.

  #define ADVANCED_PAUSE_PURGE_LENGTH 50 // (mm) Length to extrude after loading.

                                                  // Set to 0 for manual extrusion.

                                                  // Filament can be extruded repeatedly from the Filament Change menu

                                                  // until extrusion is consistent, and to purge old filament.

  #define ADVANCED_PAUSE_RESUME_PRIME 0 // (mm) Extra distance to prime nozzle after returning from park.

  //#define ADVANCED_PAUSE_FANS_PAUSE // Turn off print-cooling fans while the machine is paused.

                                                  // Filament Unload does a Retract, Delay, and Purge first:

  #define FILAMENT_UNLOAD_PURGE_RETRACT 13 // (mm) Unload initial retract length.

  #define FILAMENT_UNLOAD_PURGE_DELAY 5000 // (ms) Delay for the filament to cool after retract.

  #define FILAMENT_UNLOAD_PURGE_LENGTH 8 // (mm) An unretract is done, then this length is purged.

  #define FILAMENT_UNLOAD_PURGE_FEEDRATE 25 // (mm/s) feedrate to purge before unload

  #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety.

  #define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed.

  #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change.

  //#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.

  //#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change

  //#define FILAMENT_LOAD_UNLOAD_GCODES // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu.

  //#define FILAMENT_UNLOAD_ALL_EXTRUDERS // Allow M702 to unload all extruders above a minimum target temp (as set by M302)

#endif

// @section tmc

/**

 * TMC26X Stepper Driver options

 *

 * The TMC26XStepper library is required for this stepper driver.

 * https://github.com/trinamic/TMC26XStepper

 */

#if HAS_DRIVER(TMC26X)

  #if AXIS_DRIVER_TYPE_X(TMC26X)

    #define X_MAX_CURRENT 1000 // (mA)

    #define X_SENSE_RESISTOR 91 // (mOhms)

    #define X_MICROSTEPS 16 // Number of microsteps

  #endif

  #if AXIS_DRIVER_TYPE_X2(TMC26X)

    #define X2_MAX_CURRENT 1000

    #define X2_SENSE_RESISTOR 91

    #define X2_MICROSTEPS 16

  #endif

  #if AXIS_DRIVER_TYPE_Y(TMC26X)

    #define Y_MAX_CURRENT 1000

    #define Y_SENSE_RESISTOR 91

    #define Y_MICROSTEPS 16

  #endif

  #if AXIS_DRIVER_TYPE_Y2(TMC26X)

    #define Y2_MAX_CURRENT 1000

    #define Y2_SENSE_RESISTOR 91

    #define Y2_MICROSTEPS 16

  #endif

  #if AXIS_DRIVER_TYPE_Z(TMC26X)

    #define Z_MAX_CURRENT 1000

    #define Z_SENSE_RESISTOR 91

    #define Z_MICROSTEPS 16

  #endif

  #if AXIS_DRIVER_TYPE_Z2(TMC26X)

    #define Z2_MAX_CURRENT 1000

    #define Z2_SENSE_RESISTOR 91

    #define Z2_MICROSTEPS 16

  #endif

  #if AXIS_DRIVER_TYPE_Z3(TMC26X)

    #define Z3_MAX_CURRENT 1000

    #define Z3_SENSE_RESISTOR 91

    #define Z3_MICROSTEPS 16

  #endif

  #if AXIS_DRIVER_TYPE_Z4(TMC26X)

    #define Z4_MAX_CURRENT 1000

    #define Z4_SENSE_RESISTOR 91

    #define Z4_MICROSTEPS 16

  #endif

  #if AXIS_DRIVER_TYPE_E0(TMC26X)

    #define E0_MAX_CURRENT 1000

    #define E0_SENSE_RESISTOR 91

    #define E0_MICROSTEPS 16

  #endif

  #if AXIS_DRIVER_TYPE_E1(TMC26X)

    #define E1_MAX_CURRENT 1000

    #define E1_SENSE_RESISTOR 91

    #define E1_MICROSTEPS 16

  #endif

  #if AXIS_DRIVER_TYPE_E2(TMC26X)

    #define E2_MAX_CURRENT 1000

    #define E2_SENSE_RESISTOR 91

    #define E2_MICROSTEPS 16

  #endif

  #if AXIS_DRIVER_TYPE_E3(TMC26X)

    #define E3_MAX_CURRENT 1000

    #define E3_SENSE_RESISTOR 91

    #define E3_MICROSTEPS 16

  #endif

  #if AXIS_DRIVER_TYPE_E4(TMC26X)

    #define E4_MAX_CURRENT 1000

    #define E4_SENSE_RESISTOR 91

    #define E4_MICROSTEPS 16

  #endif

  #if AXIS_DRIVER_TYPE_E5(TMC26X)

    #define E5_MAX_CURRENT 1000

    #define E5_SENSE_RESISTOR 91

    #define E5_MICROSTEPS 16

  #endif

  #if AXIS_DRIVER_TYPE_E6(TMC26X)

    #define E6_MAX_CURRENT 1000

    #define E6_SENSE_RESISTOR 91

    #define E6_MICROSTEPS 16

  #endif

  #if AXIS_DRIVER_TYPE_E7(TMC26X)

    #define E7_MAX_CURRENT 1000

    #define E7_SENSE_RESISTOR 91

    #define E7_MICROSTEPS 16

  #endif

#endif // TMC26X

// @section tmc_smart

/**

 * To use TMC2130, TMC2160, TMC2660, TMC5130, TMC5160 stepper drivers in SPI mode

 * connect your SPI pins to the hardware SPI interface on your board and define

 * the required CS pins in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3

 * pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).

 * You may also use software SPI if you wish to use general purpose IO pins.

 *

 * To use TMC2208 stepper UART-configurable stepper drivers connect #_SERIAL_TX_PIN

 * to the driver side PDN_UART pin with a 1K resistor.

 * To use the reading capabilities, also connect #_SERIAL_RX_PIN to PDN_UART without

 * a resistor.

 * The drivers can also be used with hardware serial.

 *

 * TMCStepper library is required to use TMC stepper drivers.

 * https://github.com/teemuatlut/TMCStepper

 */

#if HAS_TRINAMIC_CONFIG

  #define HOLD_MULTIPLIER 0.5 // Scales down the holding current from run current

  #define INTERPOLATE true // Interpolate X/Y/Z_MICROSTEPS to 256

  #if AXIS_IS_TMC(X)

    #define X_CURRENT 760 // (mA) RMS current. Multiply by 1.414 for peak current. было 800 изменил на 760

    #define X_CURRENT_HOME X_CURRENT // (mA) RMS current for sensorless homing

    #define X_MICROSTEPS 16 // 0..256

    #define X_RSENSE 0.11

    #define X_CHAIN_POS -1 // , , hysteresis_start[1..8] }

   */

  #define CHOPPER_TIMING CHOPPER_DEFAULT_12V

  /**

   * Monitor Trinamic drivers for error conditions,

   * like overtemperature and short to ground.

   * In the case of overtemperature Marlin can decrease the driver current until error condition clears.

   * Other detected conditions can be used to stop the current print.

   * Relevant g-codes:

   * M906 - Set or get motor current in milliamps using axis codes X, Y, Z, E. Report values if no axis codes given.

   * M911 - Report stepper driver overtemperature pre-warn condition.

   * M912 - Clear stepper driver overtemperature pre-warn condition flag.

   * M122 - Report driver parameters (Requires TMC_DEBUG)

   */

  #define MONITOR_DRIVER_STATUS //Активируем мониторинг драйверов

  #if ENABLED(MONITOR_DRIVER_STATUS)

    #define CURRENT_STEP_DOWN 50 // [mA]

    #define REPORT_CURRENT_CHANGE

    #define STOP_ON_ERROR

  #endif

  /**

   * TMC2130, TMC2160, TMC2208, TMC2209, TMC5130 and TMC5160 only

   * The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.

   * This mode allows for faster movements at the expense of higher noise levels.

   * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.

   * M913 X/Y/Z/E to live tune the setting

   */

  #define HYBRID_THRESHOLD //Активируем гибридный режим. С ним прошивка сама будет менять режимы работы шаговиков с тихого на усиленный

  #define X_HYBRID_THRESHOLD 60 // [mm/s] было 100 поменял на 60

  #define X2_HYBRID_THRESHOLD 100

  #define Y_HYBRID_THRESHOLD 60 // [mm/s] было 100 поменял на 60

  #define Y2_HYBRID_THRESHOLD 100

  #define Z_HYBRID_THRESHOLD 3

  #define Z2_HYBRID_THRESHOLD 3

  #define Z3_HYBRID_THRESHOLD 3

  #define Z4_HYBRID_THRESHOLD 3

  #define E0_HYBRID_THRESHOLD 30

  #define E1_HYBRID_THRESHOLD 3 //было 30 поменял на 3

  #define E2_HYBRID_THRESHOLD 30

  #define E3_HYBRID_THRESHOLD 30

  #define E4_HYBRID_THRESHOLD 30

  #define E5_HYBRID_THRESHOLD 30

  #define E6_HYBRID_THRESHOLD 30

  #define E7_HYBRID_THRESHOLD 30

  /**

   * Use StallGuard2 to home / probe X, Y, Z.

   *

   * TMC2130, TMC2160, TMC2209, TMC2660, TMC5130, and TMC5160 only

   * Connect the stepper driver's DIAG1 pin to the X/Y endstop pin.

   * X, Y, and Z homing will always be done in spreadCycle mode.

   *

   * X/Y/Z_STALL_SENSITIVITY is the default stall threshold.

   * Use M914 X Y Z to set the stall threshold at runtime:

   *

   * Sensitivity TMC2209 Others

   * HIGHEST 255 -64 (Too sensitive => False positive)

   * LOWEST 0 63 (Too insensitive => No trigger)

   *

   * It is recommended to set [XYZ]_HOME_BUMP_MM to 0.

   *

   * SPI_ENDSTOPS *** Beta feature! *** TMC2130 Only ***

   * Poll the driver through SPI to determine load when homing.

   * Removes the need for a wire from DIAG1 to an endstop pin.

   *

   * IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when

   * homing and adds a guard period for endstop triggering.

   */

  #define SENSORLESS_HOMING //TMC2130 only режим который будет работать вместо концевиков Xmin и Ymin Zmin

  #if EITHER(SENSORLESS_HOMING, SENSORLESS_PROBING)

    // TMC2209: 0...255. TMC2130: -64...63

    #define X_STALL_SENSITIVITY 9 // Чувствительность

    #define X2_STALL_SENSITIVITY X_STALL_SENSITIVITY

    #define Y_STALL_SENSITIVITY 9 // Чувствительность

    //#define Z_STALL_SENSITIVITY 1 // Чувствительность пока Z закрыл

    //#define SPI_ENDSTOPS // TMC2130 only закрыл это для без проводов подключения типо берет инфу о сотоянии кольцевиков из spi

    //#define IMPROVE_HOMING_RELIABILITY //выключил хз что это

#endif

  /**

   * Beta feature!

   * Create a 50/50 square wave step pulse optimal for stepper drivers.

   */

  //#define SQUARE_WAVE_STEPPING

  /**

   * Enable M122 debugging command for TMC stepper drivers.

   * M122 S0/1 will enable continous reporting.

   */

  #define TMC_DEBUG //Активируем режим отладки для драйверов

  /**

   * You can set your own advanced settings by filling in predefined functions.

   * A list of available functions can be found on the library github page

   * https://github.com/teemuatlut/TMCStepper

   *

   * Example:

   * #define TMC_ADV() { \

   * stepperX.diag0_otpw(1); \

   * stepperY.intpol(0); \

   * }

   */

  #define TMC_ADV() { }

#endif

// @section L64XX

/**

 * L64XX Stepper Driver options

 *

 * Arduino-L6470 library (0.8.0 or higher) is required.

 * https://github.com/ameyer/Arduino-L6470

 *

 * Requires the following to be defined in your pins_YOUR_BOARD file

 * L6470_CHAIN_SCK_PIN

 * L6470_CHAIN_MISO_PIN

 * L6470_CHAIN_MOSI_PIN

 * L6470_CHAIN_SS_PIN

 * ENABLE_RESET_L64XX_CHIPS(Q) where Q is 1 to enable and 0 to reset

 */

#if HAS_L64XX

  //#define L6470_CHITCHAT // Display additional status info

  #if AXIS_IS_L64XX(X)

    #define X_MICROSTEPS 128 // Number of microsteps (VALID: 1, 2, 4, 8, 16, 32, 128) - L6474 max is 16

    #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current

                                    // L6470 & L6474 - VALID: 375 x (1 - 16) - 6A max - rounds down

                                    // POWERSTEP01: VALID: 1000 x (1 - 32) - 32A max - rounds down

    #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down)

                                    // L6470 & L6474 - VALID: 31.25 * (1-128) - 4A max - rounds down

                                    // POWERSTEP01: VALID: 200 x (1 - 32) - 6.4A max - rounds down

                                    // L6474 - STALLCURRENT setting is used to set the nominal (TVAL) current

    #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - not used by L6474

    #define X_CHAIN_POS -1 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI

    #define X_SLEW_RATE 1 // 0-3, Slew 0 is slowest, 3 is fastest

  #endif

  #if AXIS_IS_L64XX(X2)

    #define X2_MICROSTEPS 128

    #define X2_OVERCURRENT 2000

    #define X2_STALLCURRENT 1500

    #define X2_MAX_VOLTAGE 127

    #define X2_CHAIN_POS -1

    #define X2_SLEW_RATE 1

  #endif

  #if AXIS_IS_L64XX(Y)

    #define Y_MICROSTEPS 128

    #define Y_OVERCURRENT 2000

    #define Y_STALLCURRENT 1500

    #define Y_MAX_VOLTAGE 127

    #define Y_CHAIN_POS -1

    #define Y_SLEW_RATE 1

  #endif

  #if AXIS_IS_L64XX(Y2)

    #define Y2_MICROSTEPS 128

    #define Y2_OVERCURRENT 2000

    #define Y2_STALLCURRENT 1500

    #define Y2_MAX_VOLTAGE 127

    #define Y2_CHAIN_POS -1

    #define Y2_SLEW_RATE 1

  #endif

  #if AXIS_IS_L64XX(Z)

    #define Z_MICROSTEPS 128

    #define Z_OVERCURRENT 2000

    #define Z_STALLCURRENT 1500

    #define Z_MAX_VOLTAGE 127

    #define Z_CHAIN_POS -1

    #define Z_SLEW_RATE 1

  #endif

  #if AXIS_IS_L64XX(Z2)

    #define Z2_MICROSTEPS 128

    #define Z2_OVERCURRENT 2000

    #define Z2_STALLCURRENT 1500

    #define Z2_MAX_VOLTAGE 127

    #define Z2_CHAIN_POS -1

    #define Z2_SLEW_RATE 1

  #endif

  #if AXIS_IS_L64XX(Z3)

    #define Z3_MICROSTEPS 128

    #define Z3_OVERCURRENT 2000

    #define Z3_STALLCURRENT 1500

    #define Z3_MAX_VOLTAGE 127

    #define Z3_CHAIN_POS -1

    #define Z3_SLEW_RATE 1

  #endif

  #if AXIS_IS_L64XX(Z4)

    #define Z4_MICROSTEPS 128

    #define Z4_OVERCURRENT 2000

    #define Z4_STALLCURRENT 1500

    #define Z4_MAX_VOLTAGE 127

    #define Z4_CHAIN_POS -1

    #define Z4_SLEW_RATE 1

  #endif

  #if AXIS_IS_L64XX(E0)

    #define E0_MICROSTEPS 128

    #define E0_OVERCURRENT 2000

    #define E0_STALLCURRENT 1500

    #define E0_MAX_VOLTAGE 127

    #define E0_CHAIN_POS -1

    #define E0_SLEW_RATE 1

  #endif

  #if AXIS_IS_L64XX(E1)

    #define E1_MICROSTEPS 128

    #define E1_OVERCURRENT 2000

    #define E1_STALLCURRENT 1500

    #define E1_MAX_VOLTAGE 127

    #define E1_CHAIN_POS -1

    #define E1_SLEW_RATE 1

  #endif

  #if AXIS_IS_L64XX(E2)

    #define E2_MICROSTEPS 128

    #define E2_OVERCURRENT 2000

    #define E2_STALLCURRENT 1500

    #define E2_MAX_VOLTAGE 127

    #define E2_CHAIN_POS -1

    #define E2_SLEW_RATE 1

  #endif

  #if AXIS_IS_L64XX(E3)

    #define E3_MICROSTEPS 128

    #define E3_OVERCURRENT 2000

    #define E3_STALLCURRENT 1500

    #define E3_MAX_VOLTAGE 127

    #define E3_CHAIN_POS -1

    #define E3_SLEW_RATE 1

  #endif

  #if AXIS_IS_L64XX(E4)

    #define E4_MICROSTEPS 128

    #define E4_OVERCURRENT 2000

    #define E4_STALLCURRENT 1500

    #define E4_MAX_VOLTAGE 127

    #define E4_CHAIN_POS -1

    #define E4_SLEW_RATE 1

  #endif

  #if AXIS_IS_L64XX(E5)

    #define E5_MICROSTEPS 128

    #define E5_OVERCURRENT 2000

    #define E5_STALLCURRENT 1500

    #define E5_MAX_VOLTAGE 127

    #define E5_CHAIN_POS -1

    #define E5_SLEW_RATE 1

  #endif

  #if AXIS_IS_L64XX(E6)

    #define E6_MICROSTEPS 128

    #define E6_OVERCURRENT 2000

    #define E6_STALLCURRENT 1500

    #define E6_MAX_VOLTAGE 127

    #define E6_CHAIN_POS -1

    #define E6_SLEW_RATE 1

  #endif

  #if AXIS_IS_L64XX(E7)

    #define E7_MICROSTEPS 128

    #define E7_OVERCURRENT 2000

    #define E7_STALLCURRENT 1500

    #define E7_MAX_VOLTAGE 127

    #define E7_CHAIN_POS -1

    #define E7_SLEW_RATE 1

  #endif

  /**

   * Monitor L6470 drivers for error conditions like over temperature and over current.

   * In the case of over temperature Marlin can decrease the drive until the error condition clears.

   * Other detected conditions can be used to stop the current print.

   * Relevant g-codes:

   * M906 - I1/2/3/4/5 Set or get motor drive level using axis codes X, Y, Z, E. Report values if no axis codes given.

   * I not present or I0 or I1 - X, Y, Z or E0

   * I2 - X2, Y2, Z2 or E1

   * I3 - Z3 or E3

   * I4 - Z4 or E4

   * I5 - E5

   * M916 - Increase drive level until get thermal warning

   * M917 - Find minimum current thresholds

   * M918 - Increase speed until max or error

   * M122 S0/1 - Report driver parameters

   */

  //#define MONITOR_L6470_DRIVER_STATUS

  #if ENABLED(MONITOR_L6470_DRIVER_STATUS)

    #define KVAL_HOLD_STEP_DOWN 1

    //#define L6470_STOP_ON_ERROR

  #endif

#endif // HAS_L64XX

// @section i2cbus

//

// I2C Master ID for LPC176x LCD and Digital Current control

// Does not apply to other peripherals based on the Wire library.

//

//#define I2C_MASTER_ID 1 // Set a value from 0 to 2

/**

 * TWI/I2C BUS

 *

 * This feature is an EXPERIMENTAL feature so it shall not be used on production

 * machines. Enabling this will allow you to send and receive I2C data from slave

 * devices on the bus.

 *

 * ; Example #1

 * ; This macro send the string "Marlin" to the slave device with address 0x63 (99)

 * ; It uses multiple M260 commands with one B arg

 * M260 A99 ; Target slave address

 * M260 B77 ; M

 * M260 B97 ; a

 * M260 B114 ; r

 * M260 B108 ; l

 * M260 B105 ; i

 * M260 B110 ; n

 * M260 S1 ; Send the current buffer

 *

 * ; Example #2

 * ; Request 6 bytes from slave device with address 0x63 (99)

 * M261 A99 B5

 *

 * ; Example #3

 * ; Example serial output of a M261 request

 * echo:i2c-reply: from:99 bytes:5 data:hello

 */

//#define EXPERIMENTAL_I2CBUS

#if ENABLED(EXPERIMENTAL_I2CBUS)

  #define I2C_SLAVE_ADDRESS 0 // Set a value from 8 to 127 to act as a slave

#endif

// @section extras

/**

 * Photo G-code

 * Add the M240 G-code to take a photo.

 * The photo can be triggered by a digital pin or a physical movement.

 */

//#define PHOTO_GCODE

#if ENABLED(PHOTO_GCODE)

  // A position to move to (and raise Z) before taking the photo

  //#define PHOTO_POSITION { X_MAX_POS - 5, Y_MAX_POS, 0 } // { xpos, ypos, zraise } (M240 X Y Z)

  //#define PHOTO_DELAY_MS 100 // (ms) Duration to pause before moving back (M240 P)

  //#define PHOTO_RETRACT_MM 6.5 // (mm) E retract/recover for the photo move (M240 R S)

  // Canon RC-1 or homebrew digital camera trigger

  // Data from: http://www.doc-diy.net/photo/rc-1_hacked/

  //#define PHOTOGRAPH_PIN 23

  // Canon Hack Development Kit

  // http://captain-slow.dk/2014/03/09/3d-printing-timelapses/

  //#define CHDK_PIN 4

  // Optional second move with delay to trigger the camera shutter

  //#define PHOTO_SWITCH_POSITION { X_MAX_POS, Y_MAX_POS } // { xpos, ypos } (M240 I J)

  // Duration to hold the switch or keep CHDK_PIN high

  //#define PHOTO_SWITCH_MS 50 // (ms) (M240 D)

  /**

   * PHOTO_PULSES_US may need adjustment depending on board and camera model.

   * Pin must be running at 48.4kHz.

   * Be sure to use a PHOTOGRAPH_PIN which can rise and fall quick enough.

   * (e.g., MKS SBase temp sensor pin was too slow, so used P1.23 on J8.)

   *

   * Example pulse data for Nikon: https://bit.ly/2FKD0Aq

   * IR Wiring: https://git.io/JvJf7

   */

  //#define PHOTO_PULSES_US { 2000, 27850, 400, 1580, 400, 3580, 400 } // (µs) Durations for each 48.4kHz oscillation

  #ifdef PHOTO_PULSES_US

    #define PHOTO_PULSE_DELAY_US 13 // (µs) Approximate duration of each HIGH and LOW pulse in the oscillation

  #endif

#endif

/**

 * Spindle & Laser control

 *

 * Add the M3, M4, and M5 commands to turn the spindle/laser on and off, and

 * to set spindle speed, spindle direction, and laser power.

 *

 * SuperPid is a router/spindle speed controller used in the CNC milling community.

 * Marlin can be used to turn the spindle on and off. It can also be used to set

 * the spindle speed from 5,000 to 30,000 RPM.

 *

 * You'll need to select a pin for the ON/OFF function and optionally choose a 0-5V

 * hardware PWM pin for the speed control and a pin for the rotation direction.

 *

 * See http://marlinfw.org/docs/configuration/laser_spindle.html for more config details.

 */

//#define SPINDLE_FEATURE

//#define LASER_FEATURE

#if EITHER(SPINDLE_FEATURE, LASER_FEATURE)

  #define SPINDLE_LASER_ACTIVE_HIGH false // Set to "true" if the on/off function is active HIGH

  #define SPINDLE_LASER_PWM true // Set to "true" if your controller supports setting the speed/power

  #define SPINDLE_LASER_PWM_INVERT true // Set to "true" if the speed/power goes up when you want it to go slower

  #define SPINDLE_LASER_POWERUP_DELAY 5000 // (ms) Delay to allow the spindle/laser to come up to speed/power

  #define SPINDLE_LASER_POWERDOWN_DELAY 5000 // (ms) Delay to allow the spindle to stop

  #if ENABLED(SPINDLE_FEATURE)

    //#define SPINDLE_CHANGE_DIR // Enable if your spindle controller can change spindle direction

    #define SPINDLE_CHANGE_DIR_STOP // Enable if the spindle should stop before changing spin direction

    #define SPINDLE_INVERT_DIR false // Set to "true" if the spin direction is reversed

    /**

     * The M3 & M4 commands use the following equation to convert PWM duty cycle to speed/power

     *

     * SPEED/POWER = PWM duty cycle * SPEED_POWER_SLOPE + SPEED_POWER_INTERCEPT

     * where PWM duty cycle varies from 0 to 255

     *

     * set the following for your controller (ALL MUST BE SET)

     */

    #define SPEED_POWER_SLOPE 118.4

    #define SPEED_POWER_INTERCEPT 0

    #define SPEED_POWER_MIN 5000

    #define SPEED_POWER_MAX 30000 // SuperPID router controller 0 - 30,000 RPM

  #else

    #define SPEED_POWER_SLOPE 0.3922

    #define SPEED_POWER_INTERCEPT 0

    #define SPEED_POWER_MIN 10

    #define SPEED_POWER_MAX 100 // 0-100%

  #endif

#endif

/**

 * Coolant Control

 *

 * Add the M7, M8, and M9 commands to turn mist or flood coolant on and off.

 *

 * Note: COOLANT_MIST_PIN and/or COOLANT_FLOOD_PIN must also be defined.

 */

//#define COOLANT_CONTROL

#if ENABLED(COOLANT_CONTROL)

  #define COOLANT_MIST // Enable if mist coolant is present

  #define COOLANT_FLOOD // Enable if flood coolant is present

  #define COOLANT_MIST_INVERT false // Set "true" if the on/off function is reversed

  #define COOLANT_FLOOD_INVERT false // Set "true" if the on/off function is reversed

#endif

/**

 * Filament Width Sensor

 *

 * Measures the filament width in real-time and adjusts

 * flow rate to compensate for any irregularities.

 *

 * Also allows the measured filament diameter to set the

 * extrusion rate, so the slicer only has to specify the

 * volume.

 *

 * Only a single extruder is supported at this time.

 *

 * 34 RAMPS_14 : Analog input 5 on the AUX2 connector

 * 81 PRINTRBOARD : Analog input 2 on the Exp1 connector (version B,C,D,E)

 * 301 RAMBO : Analog input 3

 *

 * Note: May require analog pins to be defined for other boards.

 */

//#define FILAMENT_WIDTH_SENSOR

#if ENABLED(FILAMENT_WIDTH_SENSOR)

  #define FILAMENT_SENSOR_EXTRUDER_NUM 0 // Index of the extruder that has the filament sensor. :[0,1,2,3,4]

  #define MEASUREMENT_DELAY_CM 14 // (cm) The distance from the filament sensor to the melting chamber

  #define FILWIDTH_ERROR_MARGIN 1.0 // (mm) If a measurement differs too much from nominal width ignore it

  #define MAX_MEASUREMENT_DELAY 20 // (bytes) Buffer size for stored measurements (1 byte per cm). Must be larger than MEASUREMENT_DELAY_CM.

  #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA // Set measured to nominal initially

  // Display filament width on the LCD status line. Status messages will expire after 5 seconds.

  //#define FILAMENT_LCD_DISPLAY

#endif

/**

 * CNC Coordinate Systems

 *

 * Enables G53 and G54-G59.3 commands to select coordinate systems

 * and G92.1 to reset the workspace to native machine space.

 */

//#define CNC_COORDINATE_SYSTEMS

/**

 * Auto-report temperatures with M155 S

 */

#define AUTO_REPORT_TEMPERATURES

/**

 * Include capabilities in M115 output

 */

#define EXTENDED_CAPABILITIES_REPORT

/**

 * Expected Printer Check

 * Add the M16 G-code to compare a string to the MACHINE_NAME.

 * M16 with a non-matching string causes the printer to halt.

 */

//#define EXPECTED_PRINTER_CHECK

/**

 * Disable all Volumetric extrusion options

 */

//#define NO_VOLUMETRICS

#if DISABLED(NO_VOLUMETRICS)

  /**

   * Volumetric extrusion default state

   * Activate to make volumetric extrusion the default method,

   * with DEFAULT_NOMINAL_FILAMENT_DIA as the default diameter.

   *

   * M200 D0 to disable, M200 Dn to set a new diameter.

   */

  //#define VOLUMETRIC_DEFAULT_ON

#endif

/**

 * Enable this option for a leaner build of Marlin that removes all

 * workspace offsets, simplifying coordinate transformations, leveling, etc.

 *

 * - M206 and M428 are disabled.

 * - G92 will revert to its behavior from Marlin 1.0.

 */

//#define NO_WORKSPACE_OFFSETS

/**

 * Set the number of proportional font spaces required to fill up a typical character space.

 * This can help to better align the output of commands like `G29 O` Mesh Output.

 *

 * For clients that use a fixed-width font (like OctoPrint), leave this set to 1.0.

 * Otherwise, adjust according to your client and font.

 */

#define PROPORTIONAL_FONT_RATIO 1.0

/**

 * Spend 28 bytes of SRAM to optimize the GCode parser

 */

#define FASTER_GCODE_PARSER

#if ENABLED(FASTER_GCODE_PARSER)

  //#define GCODE_QUOTED_STRINGS // Support for quoted string parameters

#endif

//#define GCODE_CASE_INSENSITIVE // Accept G-code sent to the firmware in lowercase

/**

 * CNC G-code options

 * Support CNC-style G-code dialects used by laser cutters, drawing machine cams, etc.

 * Note that G0 feedrates should be used with care for 3D printing (if used at all).

 * High feedrates may cause ringing and harm print quality.

 */

//#define PAREN_COMMENTS // Support for parentheses-delimited comments

//#define GCODE_MOTION_MODES // Remember the motion mode (G0 G1 G2 G3 G5 G38.X) and apply for X Y Z E F, etc.

// Enable and set a (default) feedrate for all G0 moves

//#define G0_FEEDRATE 3000 // (mm/m)

#ifdef G0_FEEDRATE

  //#define VARIABLE_G0_FEEDRATE // The G0 feedrate is set by F in G0 motion mode

#endif

/**

 * Startup commands

 *

 * Execute certain G-code commands immediately after power-on.

 */

//#define STARTUP_COMMANDS "M17 Z"

/**

 * G-code Macros

 *

 * Add G-codes M810-M819 to define and run G-code macros.

 * Macros are not saved to EEPROM.

 */

//#define GCODE_MACROS

#if ENABLED(GCODE_MACROS)

  #define GCODE_MACROS_SLOTS 5 // Up to 10 may be used

  #define GCODE_MACROS_SLOT_SIZE 50 // Maximum length of a single macro

#endif

/**

 * User-defined menu items that execute custom GCode

 */

//#define CUSTOM_USER_MENUS

#if ENABLED(CUSTOM_USER_MENUS)

  //#define CUSTOM_USER_MENU_TITLE "Custom Commands"

  #define USER_SCRIPT_DONE "M117 User Script Done"

  #define USER_SCRIPT_AUDIBLE_FEEDBACK

  //#define USER_SCRIPT_RETURN // Return to status screen after a script

  #define USER_DESC_1 "Home & UBL Info"

  #define USER_GCODE_1 "G28\nG29 W"

  #define USER_DESC_2 "Preheat for " PREHEAT_1_LABEL

  #define USER_GCODE_2 "M140 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND)

  #define USER_DESC_3 "Preheat for " PREHEAT_2_LABEL

  #define USER_GCODE_3 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND)

  #define USER_DESC_4 "Heat Bed/Home/Level"

  #define USER_GCODE_4 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nG28\nG29"

  #define USER_DESC_5 "Home & Info"

  #define USER_GCODE_5 "G28\nM503"

#endif

/**

 * Host Action Commands

 *

 * Define host streamer action commands in compliance with the standard.

 *

 * See https://reprap.org/wiki/G-code#Action_commands

 * Common commands ........ poweroff, pause, paused, resume, resumed, cancel

 * G29_RETRY_AND_RECOVER .. probe_rewipe, probe_failed

 *

 * Some features add reason codes to extend these commands.

 *

 * Host Prompt Support enables Marlin to use the host for user prompts so

 * filament runout and other processes can be managed from the host side.

 */

//#define HOST_ACTION_COMMANDS

#if ENABLED(HOST_ACTION_COMMANDS)

  //#define HOST_PROMPT_SUPPORT

#endif

/**

 * Cancel Objects

 *

 * Implement M486 to allow Marlin to skip objects

 */

//#define CANCEL_OBJECTS

/**

 * I2C position encoders for closed loop control.

 * Developed by Chris Barr at Aus3D.

 *

 * Wiki: http://wiki.aus3d.com.au/Magnetic_Encoder

 * Github: https://github.com/Aus3D/MagneticEncoder

 *

 * Supplier: http://aus3d.com.au/magnetic-encoder-module

 * Alternative Supplier: http://reliabuild3d.com/

 *

 * Reliabuild encoders have been modified to improve reliability.

 */

//#define I2C_POSITION_ENCODERS

#if ENABLED(I2C_POSITION_ENCODERS)

  #define I2CPE_ENCODER_CNT 1 // The number of encoders installed; max of 5

                                                            // encoders supported currently.

  #define I2CPE_ENC_1_ADDR I2CPE_PRESET_ADDR_X // I2C address of the encoder. 30-200.

  #define I2CPE_ENC_1_AXIS X_AXIS // Axis the encoder module is installed on. _AXIS.

  #define I2CPE_ENC_1_TYPE I2CPE_ENC_TYPE_LINEAR // Type of encoder: I2CPE_ENC_TYPE_LINEAR -or-

                                                            // I2CPE_ENC_TYPE_ROTARY.

  #define I2CPE_ENC_1_TICKS_UNIT 2048 // 1024 for magnetic strips with 2mm poles; 2048 for

                                                            // 1mm poles. For linear encoders this is ticks / mm,

                                                            // for rotary encoders this is ticks / revolution.

  //#define I2CPE_ENC_1_TICKS_REV (16 * 200) // Only needed for rotary encoders; number of stepper

                                                            // steps per full revolution (motor steps/rev * microstepping)

  //#define I2CPE_ENC_1_INVERT // Invert the direction of axis travel.

  #define I2CPE_ENC_1_EC_METHOD I2CPE_ECM_MICROSTEP // Type of error error correction.

  #define I2CPE_ENC_1_EC_THRESH 0.10 // Threshold size for error (in mm) above which the

                                                            // printer will attempt to correct the error; errors

                                                            // smaller than this are ignored to minimize effects of

                                                            // measurement noise / latency (filter).

  #define I2CPE_ENC_2_ADDR I2CPE_PRESET_ADDR_Y // Same as above, but for encoder 2.

  #define I2CPE_ENC_2_AXIS Y_AXIS

  #define I2CPE_ENC_2_TYPE I2CPE_ENC_TYPE_LINEAR

  #define I2CPE_ENC_2_TICKS_UNIT 2048

  //#define I2CPE_ENC_2_TICKS_REV (16 * 200)

  //#define I2CPE_ENC_2_INVERT

  #define I2CPE_ENC_2_EC_METHOD I2CPE_ECM_MICROSTEP

  #define I2CPE_ENC_2_EC_THRESH 0.10

  #define I2CPE_ENC_3_ADDR I2CPE_PRESET_ADDR_Z // Encoder 3. Add additional configuration options

  #define I2CPE_ENC_3_AXIS Z_AXIS // as above, or use defaults below.

  #define I2CPE_ENC_4_ADDR I2CPE_PRESET_ADDR_E // Encoder 4.

  #define I2CPE_ENC_4_AXIS E_AXIS

  #define I2CPE_ENC_5_ADDR 34 // Encoder 5.

  #define I2CPE_ENC_5_AXIS E_AXIS

  // Default settings for encoders which are enabled, but without settings configured above.

  #define I2CPE_DEF_TYPE I2CPE_ENC_TYPE_LINEAR

  #define I2CPE_DEF_ENC_TICKS_UNIT 2048

  #define I2CPE_DEF_TICKS_REV (16 * 200)

  #define I2CPE_DEF_EC_METHOD I2CPE_ECM_NONE

  #define I2CPE_DEF_EC_THRESH 0.1

  //#define I2CPE_ERR_THRESH_ABORT 100.0 // Threshold size for error (in mm) error on any given

                                                            // axis after which the printer will abort. Comment out to

                                                            // disable abort behavior.

  #define I2CPE_TIME_TRUSTED 10000 // After an encoder fault, there must be no further fault

                                                            // for this amount of time (in ms) before the encoder

                                                            // is trusted again.

  /**

   * Position is checked every time a new command is executed from the buffer but during long moves,

   * this setting determines the minimum update time between checks. A value of 100 works well with

   * error rolling average when attempting to correct only for skips and not for vibration.

   */

  #define I2CPE_MIN_UPD_TIME_MS 4 // (ms) Minimum time between encoder checks.

  // Use a rolling average to identify persistant errors that indicate skips, as opposed to vibration and noise.

  #define I2CPE_ERR_ROLLING_AVERAGE

#endif // I2C_POSITION_ENCODERS

/**

 * Analog Joystick(s)

 */

//#define JOYSTICK

#if ENABLED(JOYSTICK)

  #define JOY_X_PIN 5 // RAMPS: Suggested pin A5 on AUX2

  #define JOY_Y_PIN 10 // RAMPS: Suggested pin A10 on AUX2

  #define JOY_Z_PIN 12 // RAMPS: Suggested pin A12 on AUX2

  #define JOY_EN_PIN 44 // RAMPS: Suggested pin D44 on AUX2

  //#define INVERT_JOY_X // Enable if X direction is reversed

  //#define INVERT_JOY_Y // Enable if Y direction is reversed

  //#define INVERT_JOY_Z // Enable if Z direction is reversed

  // Use M119 with JOYSTICK_DEBUG to find reasonable values after connecting:

  #define JOY_X_LIMITS { 5600, 8190-100, 8190+100, 10800 } // min, deadzone start, deadzone end, max

  #define JOY_Y_LIMITS { 5600, 8250-100, 8250+100, 11000 }

  #define JOY_Z_LIMITS { 4800, 8080-100, 8080+100, 11550 }

#endif

/**

 * MAX7219 Debug Matrix

 *

 * Add support for a low-cost 8x8 LED Matrix based on the Max7219 chip as a realtime status display.

 * Requires 3 signal wires. Some useful debug options are included to demonstrate its usage.

 */

//#define MAX7219_DEBUG

#if ENABLED(MAX7219_DEBUG)

  #define MAX7219_CLK_PIN 64

  #define MAX7219_DIN_PIN 57

  #define MAX7219_LOAD_PIN 44

  //#define MAX7219_GCODE // Add the M7219 G-code to control the LED matrix

  #define MAX7219_INIT_TEST 2 // Test pattern at startup: 0=none, 1=sweep, 2=spiral

  #define MAX7219_NUMBER_UNITS 1 // Number of Max7219 units in chain.

  #define MAX7219_ROTATE 0 // Rotate the display clockwise (in multiples of +/- 90°)

                                   // connector at: right=0 bottom=-90 top=90 left=180

  //#define MAX7219_REVERSE_ORDER // The individual LED matrix units may be in reversed order

  //#define MAX7219_SIDE_BY_SIDE // Big chip+matrix boards can be chained side-by-side

  /**

   * Sample debug features

   * If you add more debug displays, be careful to avoid conflicts!

   */

  #define MAX7219_DEBUG_PRINTER_ALIVE // Blink corner LED of 8x8 matrix to show that the firmware is functioning

  #define MAX7219_DEBUG_PLANNER_HEAD 3 // Show the planner queue head position on this and the next LED matrix row

  #define MAX7219_DEBUG_PLANNER_TAIL 5 // Show the planner queue tail position on this and the next LED matrix row

  #define MAX7219_DEBUG_PLANNER_QUEUE 0 // Show the current planner queue depth on this and the next LED matrix row

                                         // If you experience stuttering, reboots, etc. this option can reveal how

                                         // tweaks made to the configuration are affecting the printer in real-time.

#endif

/**

 * NanoDLP Sync support

 *

 * Add support for Synchronized Z moves when using with NanoDLP. G0/G1 axis moves will output "Z_move_comp"

 * string to enable synchronization with DLP projector exposure. This change will allow to use

 * [[WaitForDoneMessage]] instead of populating your gcode with M400 commands

 */

//#define NANODLP_Z_SYNC

#if ENABLED(NANODLP_Z_SYNC)

  //#define NANODLP_ALL_AXIS // Enables "Z_move_comp" output on any axis move.

                              // Default behavior is limited to Z axis only.

#endif

/**

 * WiFi Support (Espressif ESP32 WiFi)

 */

//#define WIFISUPPORT // Marlin embedded WiFi managenent

//#define ESP3D_WIFISUPPORT // ESP3D Library WiFi management (https://github.com/luc-github/ESP3DLib)

#if EITHER(WIFISUPPORT, ESP3D_WIFISUPPORT)

  //#define WEBSUPPORT // Start a webserver (which may include auto-discovery)

  //#define OTASUPPORT // Support over-the-air firmware updates

  //#define WIFI_CUSTOM_COMMAND // Accept feature config commands (e.g., WiFi ESP3D) from the host

  /**

   * To set a default WiFi SSID / Password, create a file called Configuration_Secure.h with

   * the following defines, customized for your network. This specific file is excluded via

   * .gitignore to prevent it from accidentally leaking to the public.

   *

   * #define WIFI_SSID "WiFi SSID"

   * #define WIFI_PWD "WiFi Password"

   */

  //#include "Configuration_Secure.h" // External file with WiFi SSID / Password

#endif

/**

 * Prusa Multi-Material Unit v2

 * Enable in Configuration.h

 */

#if ENABLED(PRUSA_MMU2)

  // Serial port used for communication with MMU2.

  // For AVR enable the UART port used for the MMU. (e.g., internalSerial)

  // For 32-bit boards check your HAL for available serial ports. (e.g., Serial2)

  #define INTERNAL_SERIAL_PORT 2

  #define MMU2_SERIAL internalSerial

  // Use hardware reset for MMU if a pin is defined for it

  //#define MMU2_RST_PIN 23

  // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up)

  //#define MMU2_MODE_12V

  // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout

  #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600"

  // Add an LCD menu for MMU2

  //#define MMU2_MENUS

  #if ENABLED(MMU2_MENUS)

    // Settings for filament load / unload from the LCD menu.

    // This is for Prusa MK3-style extruders. Customize for your hardware.

    #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0

    #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \

      { 7.2, 562 }, \

      { 14.4, 871 }, \

      { 36.0, 1393 }, \

      { 14.4, 871 }, \

      { 50.0, 198 }

    #define MMU2_RAMMING_SEQUENCE \

      { 1.0, 1000 }, \

      { 1.0, 1500 }, \

      { 2.0, 2000 }, \

      { 1.5, 3000 }, \

      { 2.5, 4000 }, \

      { -15.0, 5000 }, \

      { -14.0, 1200 }, \

      { -6.0, 600 }, \

      { 10.0, 700 }, \

      { -10.0, 400 }, \

      { -50.0, 2000 }

  #endif

  //#define MMU2_DEBUG // Write debug info to serial output

#endif // PRUSA_MMU2

/**

 * Advanced Print Counter settings

 */

#if ENABLED(PRINTCOUNTER)

  #define SERVICE_WARNING_BUZZES 3

  // Activate up to 3 service interval watchdogs

  //#define SERVICE_NAME_1 "Service S"

  //#define SERVICE_INTERVAL_1 100 // print hours

  //#define SERVICE_NAME_2 "Service L"

  //#define SERVICE_INTERVAL_2 200 // print hours

  //#define SERVICE_NAME_3 "Service 3"

  //#define SERVICE_INTERVAL_3 1 // print hours

#endif

// @section develop

//

// M100 Free Memory Watcher to debug memory usage

//

//#define M100_FREE_MEMORY_WATCHER

//

// M43 - display pin status, toggle pins, watch pins, watch endstops & toggle LED, test servo probe

//

//#define PINS_DEBUGGING

// Enable Marlin dev mode which adds some special commands

//#define MARLIN_DEV_MODE

Ответы на вопросы
Металлообработка 2025 Реклама
Металлообработка 2025 Реклама