diff --git a/.github/lock.yml b/.github/lock.yml deleted file mode 100644 index c5ceff66b0a7..000000000000 --- a/.github/lock.yml +++ /dev/null @@ -1,40 +0,0 @@ -# -# Configuration for Lock Threads - /~https://github.com/dessant/lock-threads-app -# - -# Number of days of inactivity before a closed issue or pull request is locked -daysUntilLock: 60 - -# Skip issues and pull requests created before a given timestamp. Timestamp must -# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable -skipCreatedBefore: false - -# Issues and pull requests with these labels will be ignored. Set to `[]` to disable -exemptLabels: [ 'no-locking' ] - -# Label to add before locking, such as `outdated`. Set to `false` to disable -lockLabel: false - -# Comment to post before locking. Set to `false` to disable -lockComment: > - This thread has been automatically locked since there has not been - any recent activity after it was closed. Please open a new issue for - related bugs. - -# Assign `resolved` as the reason for locking. Set to `false` to disable -setLockReason: true - -# Limit to only `issues` or `pulls` -# only: issues - -# Optionally, specify configuration settings just for `issues` or `pulls` -# issues: -# exemptLabels: -# - help-wanted -# lockLabel: outdated - -# pulls: -# daysUntilLock: 30 - -# Repository to extend settings from -# _extends: repo diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index c66ca4e9e8b9..db20efcf3801 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -59,9 +59,99 @@ // @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) +// #define ENDER_3S1_PLUS +#define ENDER_3S1_PRO + +// 主控芯片 +#ifdef MCU_STM32F401RC + #define USER_STM32F401 1 +#else + #define USER_STM32F103 1 +#endif + +#if ENABLED(ENDER_3S1_PRO) + /** + * Release version. Leave the Marlin version or apply a custom scheme. + */ + #ifndef SHORT_BUILD_VERSION + #if ENABLED(USER_STM32F103) + #define SHORT_BUILD_VERSION "2.1.2.24F1-SMS" //F103版本 + #elif ENABLED(USER_STM32F401) + #define SHORT_BUILD_VERSION "2.1.2.24F4-SMS" // F401版本 + #endif + #endif + + // Author info of this build printed to the host during boot and M115 + #define STRING_CONFIG_H_AUTHOR "Synman" // Who made the changes. + //#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes) + #define MACVERSION STRING_CONFIG_H_AUTHOR + #define SOFTVERSION SHORT_BUILD_VERSION + #define MACHINE_TYPE "Ender-3 S1 Pro" + #define FIRMWARE_VERSION "2.1.2" + #define SCREEN_VERSION "UI20" + #define SCREEN_HW_VERSION "DWIN2021" + #define HARDWARE_VERSION "CR-FDM-v24S1_301" + #define PRINT_SIZE "220 * 220 * 270" + #define CORP_WEBSITE_C "www.cxsw3d.com " + #define CORP_WEBSITE_E "marlinfw.org" +#endif + +#if ENABLED(ENDER_3S1_PLUS) + + /** + * Release version. Leave the Marlin version or apply a custom scheme. + */ + #ifndef SHORT_BUILD_VERSION + #if ENABLED(USER_STM32F103) + #define SHORT_BUILD_VERSION "2.1.2.24F1-SMS" //F103版本 + #elif ENABLED(USER_STM32F401) + #define SHORT_BUILD_VERSION "2.1.2.24F4-SMS" // F401版本 + #endif + #endif + + // Author info of this build printed to the host during boot and M115 + #define STRING_CONFIG_H_AUTHOR "Synman" // Who made the changes. + //#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes) + #define MACVERSION STRING_CONFIG_H_AUTHOR + #define SOFTVERSION SHORT_BUILD_VERSION + #define MACHINE_TYPE "Ender-3 S1 Plus" + #define FIRMWARE_VERSION "2.1.2" + #define SCREEN_VERSION "UI20" + #define SCREEN_HW_VERSION "DWIN2021" + #define HARDWARE_VERSION "CR-FDM-v24S1_301" + #define PRINT_SIZE "300 * 300 * 300" + #define CORP_WEBSITE_C "www.cxsw3d.com " + #define CORP_WEBSITE_E "marlinfw.org" +#endif + +#if ENABLED(ENDER_3S1) + + /** + * Release version. Leave the Marlin version or apply a custom scheme. + */ + #ifndef SHORT_BUILD_VERSION + #if ENABLED(USER_STM32F103) + #define SHORT_BUILD_VERSION "2.1.2.24F1-SMS" //F103版本 + #elif ENABLED(USER_STM32F401) + #define SHORT_BUILD_VERSION "2.1.2.24F4-SMS" // F401版本 + #endif + + #endif + + // Author info of this build printed to the host during boot and M115 + #define STRING_CONFIG_H_AUTHOR "Synman" // Who made the changes. + //#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes) + #define MACVERSION STRING_CONFIG_H_AUTHOR + #define SOFTVERSION SHORT_BUILD_VERSION + #define MACHINE_TYPE "Ender-3 S1" + #define FIRMWARE_VERSION "2.1.2" + #define SCREEN_VERSION "UI20" + #define SCREEN_HW_VERSION "DWIN2021" + #define HARDWARE_VERSION "CR-FDM-v24S1_301" + #define PRINT_SIZE "220 * 220 * 270" + #define CORP_WEBSITE_C "www.cxsw3d.com " + #define CORP_WEBSITE_E "marlinfw.org" +#endif /** * *** VENDORS PLEASE READ *** @@ -75,7 +165,7 @@ */ // Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION ** -#define SHOW_BOOTSCREEN +// #define SHOW_BOOTSCREEN // Show the bitmap in Marlin/_Bootscreen.h on startup. //#define SHOW_CUSTOM_BOOTSCREEN @@ -87,7 +177,11 @@ // Choose the name from boards.h that matches your setup #ifndef MOTHERBOARD - #define MOTHERBOARD BOARD_RAMPS_14_EFB + #if ENABLED(USER_STM32F401) + #define MOTHERBOARD BOARD_CREALITY_V24S1_301F4 + #elif ENABLED(USER_STM32F103) + #define MOTHERBOARD BOARD_CREALITY_V24S1_301 + #endif #endif /** @@ -98,7 +192,7 @@ * * :[-1, 0, 1, 2, 3, 4, 5, 6, 7] */ -#define SERIAL_PORT 0 +#define SERIAL_PORT 1 /** * Serial Port Baud Rate @@ -111,32 +205,43 @@ * * :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000] */ -#define BAUDRATE 250000 +#define BAUDRATE 115200 //#define BAUD_RATE_GCODE // Enable G-code M575 to set the baud rate /** - * Select a secondary serial port on the board to use for communication with the host. - * Currently Ethernet (-2) is only supported on Teensy 4.1 boards. - * :[-2, -1, 0, 1, 2, 3, 4, 5, 6, 7] - */ -//#define SERIAL_PORT_2 -1 -//#define BAUDRATE_2 250000 // :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000] Enable to override BAUDRATE - -/** - * Select a third serial port on the board to use for communication with the host. - * Currently only supported for AVR, DUE, LPC1768/9 and STM32/STM32F1 - * :[-1, 0, 1, 2, 3, 4, 5, 6, 7] + * Serial Port Baud Rate + * This is the default communication speed for all serial ports. + * Set the baud rate defaults for additional serial ports below. + * + * 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 SERIAL_PORT_3 1 //#define BAUDRATE_3 250000 // :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000] Enable to override BAUDRATE +#define LCD_SERIAL_PORT 2 +#define LCD_BAUDRATE 115200 + // Enable the Bluetooth serial interface on AT90USB devices //#define BLUETOOTH // Name displayed in the LCD "Ready" message and Info menu //#define CUSTOM_MACHINE_NAME "3D Printer" +#if ENABLED(ENDER_3S1_PRO) + // Name displayed in the LCD "Ready" message and Info menu + #define CUSTOM_MACHINE_NAME "Ender-3 S1 Pro" +#elif ENABLED(ENDER_3S1_PLUS) + // Name displayed in the LCD "Ready" message and Info menu + #define CUSTOM_MACHINE_NAME "Ender-3 S1 Plus" +#elif ENABLED(ENDER_3S1) + #define CUSTOM_MACHINE_NAME "Ender-3 S1" +#endif + // Printer's unique ID, used by some programs to differentiate between machines. // Choose your own or use a service like https://www.uuidgenerator.net/version4 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000" @@ -158,21 +263,15 @@ * TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE * :['A4988', 'A5984', 'DRV8825', 'LV8729', '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 A4988 -#define Y_DRIVER_TYPE A4988 -#define Z_DRIVER_TYPE A4988 +#define X_DRIVER_TYPE TMC2208_STANDALONE +#define Y_DRIVER_TYPE TMC2208_STANDALONE +#define Z_DRIVER_TYPE TMC2208_STANDALONE //#define X2_DRIVER_TYPE A4988 //#define Y2_DRIVER_TYPE A4988 //#define Z2_DRIVER_TYPE A4988 //#define Z3_DRIVER_TYPE A4988 //#define Z4_DRIVER_TYPE A4988 -//#define I_DRIVER_TYPE A4988 -//#define J_DRIVER_TYPE A4988 -//#define K_DRIVER_TYPE A4988 -//#define U_DRIVER_TYPE A4988 -//#define V_DRIVER_TYPE A4988 -//#define W_DRIVER_TYPE A4988 -#define E0_DRIVER_TYPE A4988 +#define E0_DRIVER_TYPE TMC2208_STANDALONE //#define E1_DRIVER_TYPE A4988 //#define E2_DRIVER_TYPE A4988 //#define E3_DRIVER_TYPE A4988 @@ -544,7 +643,7 @@ #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_6 0 #define TEMP_SENSOR_7 0 -#define TEMP_SENSOR_BED 0 +#define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_PROBE 0 #define TEMP_SENSOR_CHAMBER 0 #define TEMP_SENSOR_COOLER 0 @@ -605,7 +704,7 @@ // Below this temperature the heater will be switched off // because it probably indicates a broken thermistor wire. -#define HEATER_0_MINTEMP 5 +#define HEATER_0_MINTEMP 0 #define HEATER_1_MINTEMP 5 #define HEATER_2_MINTEMP 5 #define HEATER_3_MINTEMP 5 @@ -613,13 +712,13 @@ #define HEATER_5_MINTEMP 5 #define HEATER_6_MINTEMP 5 #define HEATER_7_MINTEMP 5 -#define BED_MINTEMP 5 +#define BED_MINTEMP 0 #define CHAMBER_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_0_MAXTEMP 320 #define HEATER_1_MAXTEMP 275 #define HEATER_2_MAXTEMP 275 #define HEATER_3_MAXTEMP 275 @@ -627,7 +726,7 @@ #define HEATER_5_MAXTEMP 275 #define HEATER_6_MAXTEMP 275 #define HEATER_7_MAXTEMP 275 -#define BED_MAXTEMP 150 +#define BED_MAXTEMP 160 #define CHAMBER_MAXTEMP 60 /** @@ -659,6 +758,8 @@ //#define PID_DEBUG // Print PID debug data to the serial port. Use 'M303 D' to toggle activation. //#define PID_PARAMS_PER_HOTEND // Use separate PID parameters for each extruder (useful for mismatched extruders) // Set/get with G-code: M301 E[extruder number, 0-2] + #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) #if ENABLED(PID_PARAMS_PER_HOTEND) // Specify up to one value per hotend here, according to your setup. @@ -667,9 +768,9 @@ #define DEFAULT_Ki_LIST { 1.08, 1.08 } #define DEFAULT_Kd_LIST { 114.00, 114.00 } #else - #define DEFAULT_Kp 22.20 - #define DEFAULT_Ki 1.08 - #define DEFAULT_Kd 114.00 + #define DEFAULT_Kp 14.49 + #define DEFAULT_Ki 0.96 + #define DEFAULT_Kd 54.59 #endif #endif @@ -734,7 +835,7 @@ * the issues involved, don't use bed PID until someone else verifies that your hardware works. * @section bed temp */ -//#define PIDTEMPBED +#define PIDTEMPBED //#define BED_LIMIT_SWITCHING @@ -752,9 +853,9 @@ // 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 + #define DEFAULT_bedKp 54.86 + #define DEFAULT_bedKi 10.06 + #define DEFAULT_bedKd 199.38 // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles. #endif // PIDTEMPBED @@ -852,8 +953,8 @@ #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 -#define THERMAL_PROTECTION_COOLER // Enable thermal protection for the laser cooling +// #define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber +// #define THERMAL_PROTECTION_COOLER // Enable thermal protection for the laser cooling //=========================================================================== //============================= Mechanical Settings ========================= @@ -1106,12 +1207,12 @@ //#define USE_WMAX_PLUG // Enable pullup for all endstops to prevent a floating state -#define ENDSTOPPULLUPS +// #define ENDSTOPPULLUPS #if DISABLED(ENDSTOPPULLUPS) // Disable ENDSTOPPULLUPS to set pullups individually //#define ENDSTOPPULLUP_XMIN //#define ENDSTOPPULLUP_YMIN - //#define ENDSTOPPULLUP_ZMIN + #define ENDSTOPPULLUP_ZMIN //#define ENDSTOPPULLUP_IMIN //#define ENDSTOPPULLUP_JMIN //#define ENDSTOPPULLUP_KMIN @@ -1127,7 +1228,7 @@ //#define ENDSTOPPULLUP_UMAX //#define ENDSTOPPULLUP_VMAX //#define ENDSTOPPULLUP_WMAX - //#define ENDSTOPPULLUP_ZMIN_PROBE + #define ENDSTOPPULLUP_ZMIN_PROBE #endif // Enable pulldown for all endstops to prevent a floating state @@ -1156,8 +1257,8 @@ #endif // Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup). -#define X_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. -#define Y_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. +#define X_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop. +#define Y_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop. #define Z_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. #define I_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. #define J_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. @@ -1178,7 +1279,7 @@ // 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 +#define ENDSTOP_INTERRUPTS_FEATURE /** * Endstop Noise Threshold @@ -1222,7 +1323,8 @@ * Override with M92 * X, Y, Z [, I [, J [, K...]]], E0 [, E1[, E2...]] */ -#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 500 } +// #define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 500 } +#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 424.9} /** * Default Max Feed Rate (linear=mm/s, rotational=°/s) @@ -1231,7 +1333,7 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } -//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#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 @@ -1242,11 +1344,11 @@ * Override with M201 * X, Y, Z [, I [, J [, K...]]], E0 [, E1[, E2...]] */ -#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +#define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 1000 } //加速度//{ 500, 500, 100, 1000 } //加速度 -//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#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 + #define MAX_ACCEL_EDIT_VALUES { 3000, 3000, 100, 10000 } // ...or, set your own edit limits #endif /** @@ -1257,9 +1359,9 @@ * 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 +#define DEFAULT_ACCELERATION 500 // X, Y, Z and E acceleration for printing moves +#define DEFAULT_RETRACT_ACCELERATION 800 // E acceleration for retracts +#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves /** * Default Jerk limits (mm/s) @@ -1269,10 +1371,10 @@ * When changing speed and direction, if the difference is less than the * value set here, it may happen instantaneously. */ -//#define CLASSIC_JERK +#define CLASSIC_JERK //转弯时最小速度变化(抖动) #if ENABLED(CLASSIC_JERK) - #define DEFAULT_XJERK 10.0 - #define DEFAULT_YJERK 10.0 + #define DEFAULT_XJERK 5.0 + #define DEFAULT_YJERK 5.0 #define DEFAULT_ZJERK 0.3 //#define DEFAULT_IJERK 0.3 //#define DEFAULT_JJERK 0.3 @@ -1312,7 +1414,7 @@ * * See /~https://github.com/synthetos/TinyG/wiki/Jerk-Controlled-Motion-Explained */ -//#define S_CURVE_ACCELERATION +#define S_CURVE_ACCELERATION //=========================================================================== //============================= Z Probe Options ============================= @@ -1331,7 +1433,7 @@ #define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN // Force the use of the probe for Z-axis homing -//#define USE_PROBE_FOR_Z_HOMING +#define USE_PROBE_FOR_Z_HOMING /** * Z_MIN_PROBE_PIN @@ -1385,7 +1487,7 @@ /** * The BLTouch probe uses a Hall effect sensor and emulates a servo. */ -//#define BLTOUCH +#define BLTOUCH /** * MagLev V4 probe by MDD @@ -1537,17 +1639,22 @@ * | [-] | * O-- FRONT --+ */ -#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } +#define NOZZLE_TO_PROBE_OFFSET { -31.5, -41.8, 0 } // Most probes should stay away from the edges of the bed, but // with NOZZLE_AS_PROBE this can be negative for a wider probing area. -#define PROBING_MARGIN 10 +#define PROBING_MARGIN 5 // X and Y axis travel speed (mm/min) between probes -#define XY_PROBE_FEEDRATE (133*60) +// #define XY_PROBE_FEEDRATE (133*60) +#if ENABLED(ENDER_3S1_PLUS) + #define XY_PROBE_FEEDRATE (50*60) +#else + #define XY_PROBE_FEEDRATE (200*60) +#endif // Feedrate (mm/min) for the first approach when double-probing (MULTIPLE_PROBING == 2) -#define Z_PROBE_FEEDRATE_FAST (4*60) +#define Z_PROBE_FEEDRATE_FAST (8*60) // Feedrate (mm/min) for the "accurate" probe of each point #define Z_PROBE_FEEDRATE_SLOW (Z_PROBE_FEEDRATE_FAST / 2) @@ -1597,8 +1704,8 @@ * A total of 2 does fast/slow probes with a weighted average. * A total of 3 or more adds more slow probes, taking the average. */ -//#define MULTIPLE_PROBING 2 -//#define EXTRA_PROBING 1 +#define MULTIPLE_PROBING 3 +#define EXTRA_PROBING 1 /** * Z probes require clearance when deploying, stowing, and moving between @@ -1622,8 +1729,8 @@ #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 +#define Z_PROBE_OFFSET_RANGE_MIN -5 // -10 20210713_rock +#define Z_PROBE_OFFSET_RANGE_MAX 10 // Enable the M48 repeatability test to test probe accuracy //#define Z_MIN_PROBE_REPEATABILITY_TEST @@ -1641,15 +1748,15 @@ * 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 +#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) - //#define WAIT_FOR_HOTEND // Wait for hotend to heat back up between probes (to improve accuracy & prevent cold extrude) + // #define WAIT_FOR_BED_HEATER // Wait for bed to heat back up between probes (to improve accuracy) + // #define WAIT_FOR_HOTEND // Wait for hotend to heat back up between probes (to improve accuracy & prevent cold extrude) #endif -//#define PROBING_FANS_OFF // Turn fans off when probing +#define PROBING_FANS_OFF // Turn fans off when probing //#define PROBING_ESTEPPERS_OFF // Turn all extruder steppers off when probing //#define PROBING_STEPPERS_OFF // Turn all steppers off (unless needed to hold position) when probing (including extruders) -//#define DELAY_BEFORE_PROBING 200 // (ms) To prevent vibrations from triggering piezo sensors +#define DELAY_BEFORE_PROBING 200 // (ms) To prevent vibrations from triggering piezo sensors // Require minimum nozzle and/or bed temperature for probing //#define PREHEAT_BEFORE_PROBING @@ -1695,8 +1802,8 @@ // Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way. #define INVERT_X_DIR false -#define INVERT_Y_DIR true -#define INVERT_Z_DIR false +#define INVERT_Y_DIR false +#define INVERT_Z_DIR true //#define INVERT_I_DIR false //#define INVERT_J_DIR false //#define INVERT_K_DIR false @@ -1728,10 +1835,10 @@ */ //#define Z_IDLE_HEIGHT Z_HOME_POS -//#define Z_HOMING_HEIGHT 4 // (mm) Minimal Z height before homing (G28) for Z clearance above the bed, clamps, ... +#define Z_HOMING_HEIGHT 5 // (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 +#define Z_AFTER_HOMING 10 // (mm) Height to move to after homing Z // Direction of endstops when homing; 1=MAX, -1=MIN // :[-1,1] @@ -1747,29 +1854,47 @@ // @section geometry -// The size of the printable area -#define X_BED_SIZE 200 -#define Y_BED_SIZE 200 - -// Travel limits (linear=mm, rotational=°) 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 200 -//#define I_MIN_POS 0 -//#define I_MAX_POS 50 -//#define J_MIN_POS 0 -//#define J_MAX_POS 50 -//#define K_MIN_POS 0 -//#define K_MAX_POS 50 -//#define U_MIN_POS 0 -//#define U_MAX_POS 50 -//#define V_MIN_POS 0 -//#define V_MAX_POS 50 -//#define W_MIN_POS 0 -//#define W_MAX_POS 50 +#if ENABLED(ENDER_3S1_PRO) + // The size of the printable area + #define X_BED_SIZE 220 + #define Y_BED_SIZE 220 + + // Travel limits (mm) after homing, corresponding to endstop positions. + #define X_MIN_POS -9 + #define Y_MIN_POS -6 + #define Z_MIN_POS 0 + #define X_MAX_POS X_BED_SIZE + #define Y_MAX_POS Y_BED_SIZE + #define Z_MAX_POS 270 +#endif + +#if ENABLED(ENDER_3S1_PLUS) + // The size of the printable area + #define X_BED_SIZE 300 + #define Y_BED_SIZE 300 + + // Travel limits (mm) after homing, corresponding to endstop positions. + #define X_MIN_POS -6 + #define Y_MIN_POS -4 + #define Z_MIN_POS 0 + #define X_MAX_POS X_BED_SIZE + #define Y_MAX_POS Y_BED_SIZE + #define Z_MAX_POS 300 +#endif + +#if ENABLED(ENDER_3S1) + // The size of the printable area + #define X_BED_SIZE 220 + #define Y_BED_SIZE 220 + + // Travel limits (mm) after homing, corresponding to endstop positions. + #define X_MIN_POS -9 + #define Y_MIN_POS -6 + #define Z_MIN_POS 0 + #define X_MAX_POS X_BED_SIZE + #define Y_MAX_POS Y_BED_SIZE + #define Z_MAX_POS 270 +#endif /** * Software Endstops @@ -1785,7 +1910,7 @@ #if ENABLED(MIN_SOFTWARE_ENDSTOPS) #define MIN_SOFTWARE_ENDSTOP_X #define MIN_SOFTWARE_ENDSTOP_Y - #define MIN_SOFTWARE_ENDSTOP_Z + // #define MIN_SOFTWARE_ENDSTOP_Z #define MIN_SOFTWARE_ENDSTOP_I #define MIN_SOFTWARE_ENDSTOP_J #define MIN_SOFTWARE_ENDSTOP_K @@ -1825,12 +1950,12 @@ * 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. */ -//#define FILAMENT_RUNOUT_SENSOR +#define FILAMENT_RUNOUT_SENSOR #if ENABLED(FILAMENT_RUNOUT_SENSOR) #define FIL_RUNOUT_ENABLED_DEFAULT true // Enable the sensor on startup. Override with M412 followed by M500. #define NUM_RUNOUT_SENSORS 1 // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each. - #define FIL_RUNOUT_STATE LOW // Pin state indicating that filament is NOT present. + #define FIL_RUNOUT_STATE HIGH // Pin state indicating that filament is NOT present. #define FIL_RUNOUT_PULLUP // Use internal pullup for filament runout pins. //#define FIL_RUNOUT_PULLDOWN // Use internal pulldown for filament runout pins. //#define WATCH_ALL_RUNOUT_SENSORS // Execute runout script on any triggering sensor, not only for the active extruder. @@ -1927,7 +2052,7 @@ */ //#define AUTO_BED_LEVELING_3POINT //#define AUTO_BED_LEVELING_LINEAR -//#define AUTO_BED_LEVELING_BILINEAR +#define AUTO_BED_LEVELING_BILINEAR //#define AUTO_BED_LEVELING_UBL //#define MESH_BED_LEVELING @@ -1936,16 +2061,26 @@ * these options to restore the prior leveling state or to always enable * leveling immediately after G28. */ -//#define RESTORE_LEVELING_AFTER_G28 +#define RESTORE_LEVELING_AFTER_G28 //#define ENABLE_LEVELING_AFTER_G28 +#if ENABLED(ENDER_3S1_PRO) + // X0,Y0 X1,Y1 X2,Y2 X3,Y3 X4 Y4 + #define MANUALL_BED_LEVEING_5POSITION {110,110, 30,30, 190,30, 190,190, 30,190} +#elif ENABLED(ENDER_3S1) + #define MANUALL_BED_LEVEING_5POSITION {110,110, 30,30, 190,30, 190,190, 30,190} +#elif ENABLED(ENDER_3S1_PLUS) + // X0,Y0 X1,Y1 X2,Y2 X3,Y3 X4 Y4 + #define MANUALL_BED_LEVEING_5POSITION {150,150, 30,30, 270,30, 270,270, 30,270} +#endif + /** * Auto-leveling needs preheating */ -//#define PREHEAT_BEFORE_LEVELING +#define PREHEAT_BEFORE_LEVELING #if ENABLED(PREHEAT_BEFORE_LEVELING) - #define LEVELING_NOZZLE_TEMP 120 // (°C) Only applies to E0 at this time - #define LEVELING_BED_TEMP 50 + #define LEVELING_NOZZLE_TEMP 70 // (°C) Only applies to E0 at this time + #define LEVELING_BED_TEMP 70 #endif /** @@ -1991,7 +2126,7 @@ /** * Enable the G26 Mesh Validation Pattern tool. */ - //#define G26_MESH_VALIDATION + #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 G26. @@ -2007,7 +2142,7 @@ #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_X 5 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X // Probe along the Y axis, advancing X after each column @@ -2017,16 +2152,16 @@ // Beyond the probed grid, continue the implied tilt? // Default is to maintain the height of the nearest edge. - //#define EXTRAPOLATE_BEYOND_GRID + #define EXTRAPOLATE_BEYOND_GRID // // Subdivision of the grid by Catmull-Rom method. // Synthesizes intermediate points to produce a more detailed mesh. // - //#define ABL_BILINEAR_SUBDIVISION + #define ABL_BILINEAR_SUBDIVISION #if ENABLED(ABL_BILINEAR_SUBDIVISION) // Number of subdivisions between probe points - #define BILINEAR_SUBDIVISIONS 3 + #define BILINEAR_SUBDIVISIONS 5 #endif #endif @@ -2144,7 +2279,7 @@ * - Allows Z homing only when XY positions are known and trusted. * - If stepper drivers sleep, XY homing may be required again before Z homing. */ -//#define Z_SAFE_HOMING +#define Z_SAFE_HOMING #if ENABLED(Z_SAFE_HOMING) #define Z_SAFE_HOMING_X_POINT X_CENTER // X point for Z homing @@ -2152,7 +2287,7 @@ #endif // Homing speeds (linear=mm/min, rotational=°/min) -#define HOMING_FEEDRATE_MM_M { (50*60), (50*60), (4*60) } +#define HOMING_FEEDRATE_MM_M { (50*60), (50*60), (10*60) } // Validate that endstops are triggered on homing moves #define VALIDATE_HOMING_ENDSTOPS @@ -2230,17 +2365,19 @@ * 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 EEPROM_SETTINGS // Persistent storage with M500 and M501 //#define DISABLE_M503 // Saves ~2700 bytes of flash. 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. + #define EEPROM_AUTO_INIT // Init EEPROM automatically on any errors. //#define EEPROM_INIT_NOW // Init EEPROM on first boot after a new build. #endif // @section host +// @section host + // // Host Keepalive // @@ -2253,6 +2390,8 @@ // @section units +// @section units + // // G20/G21 Inch mode support // @@ -2268,17 +2407,32 @@ // // Preheat Constants - Up to 10 are supported without changes // -#define PREHEAT_1_LABEL "PLA" -#define PREHEAT_1_TEMP_HOTEND 180 -#define PREHEAT_1_TEMP_BED 70 -#define PREHEAT_1_TEMP_CHAMBER 35 -#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_TEMP_CHAMBER 35 -#define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255 +// ender-3s1 plus 为低温版本 +#if ENABLED(ENDER_3S1_PLUS) || ENABLED(ENDER_3S1) + #define PREHEAT_1_LABEL "PLA" + #define PREHEAT_1_TEMP_HOTEND 200 + #define PREHEAT_1_TEMP_BED 60 + #define PREHEAT_1_TEMP_CHAMBER 35 + #define PREHEAT_1_FAN_SPEED 255 // Value from 0 to 255 + + #define PREHEAT_2_LABEL "ABS" + #define PREHEAT_2_TEMP_HOTEND 240 + #define PREHEAT_2_TEMP_BED 100 + #define PREHEAT_2_TEMP_CHAMBER 35 + #define PREHEAT_2_FAN_SPEED 255 // Value from 0 to 255 +#else + #define PREHEAT_1_LABEL "PLA" + #define PREHEAT_1_TEMP_HOTEND 200 + #define PREHEAT_1_TEMP_BED 60 + #define PREHEAT_1_TEMP_CHAMBER 35 + #define PREHEAT_1_FAN_SPEED 255 // 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_TEMP_CHAMBER 35 + #define PREHEAT_2_FAN_SPEED 255 // Value from 0 to 255 +#endif // @section motion @@ -2293,7 +2447,7 @@ * 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 +#define NOZZLE_PARK_FEATURE #if ENABLED(NOZZLE_PARK_FEATURE) // Specify a park position as { X, Y, Z_raise } @@ -2340,7 +2494,7 @@ * * Caveats: The ending Z should be the same as starting Z. */ -//#define NOZZLE_CLEAN_FEATURE +#define NOZZLE_CLEAN_FEATURE #if ENABLED(NOZZLE_CLEAN_FEATURE) // Default number of pattern repetitions @@ -2421,7 +2575,7 @@ * * View the current statistics with M78. */ -//#define PRINTCOUNTER +#define PRINTCOUNTER #if ENABLED(PRINTCOUNTER) #define PRINTCOUNTER_SAVE_INTERVAL 60 // (minutes) EEPROM save interval during print. A value of 0 will save stats at end of print. #endif @@ -2514,7 +2668,7 @@ * 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 +#define SDSUPPORT /** * SD CARD: ENABLE CRC @@ -2538,13 +2692,13 @@ // 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 +#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 +#define ENCODER_STEPS_PER_MENU_ITEM 1 /** * Encoder Direction Options @@ -2594,7 +2748,7 @@ // // Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu. // -//#define INDIVIDUAL_AXIS_HOMING_MENU +#define INDIVIDUAL_AXIS_HOMING_MENU //#define INDIVIDUAL_AXIS_HOMING_SUBMENU // @@ -2603,7 +2757,7 @@ // 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 +#define SPEAKER // // The duration and frequency for the UI feedback sound. @@ -2612,8 +2766,8 @@ // Note: Test audio output with the G-Code: // M300 S P // -//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 2 -//#define LCD_FEEDBACK_FREQUENCY_HZ 5000 +#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 2 +#define LCD_FEEDBACK_FREQUENCY_HZ 5000 //============================================================================= //======================== LCD / Controller Selection ========================= @@ -3225,6 +3379,14 @@ //#define DWIN_MARLINUI_PORTRAIT // MarlinUI (portrait orientation) //#define DWIN_MARLINUI_LANDSCAPE // MarlinUI (landscape orientation) +// +// Creality V4.2.5 display. Creality board but retain the display. +// +#define RET6_12864_LCD + +// resistive touch screen +#define RTS_AVAILABLE + // // Touch Screen Settings // @@ -3278,7 +3440,7 @@ // 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 +#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. @@ -3410,7 +3572,7 @@ * Set this manually if there are extra servos needing manual control. * Set to 0 to turn off servo support. */ -//#define NUM_SERVOS 3 // Note: Servo index starts with 0 for M280-M282 commands +#define NUM_SERVOS 1 // Note: Servo index starts with 0 for M280-M282 commands // (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. diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 16f8bdee1adf..50817b75663c 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -300,7 +300,7 @@ * THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD */ #if ENABLED(THERMAL_PROTECTION_HOTENDS) - #define THERMAL_PROTECTION_PERIOD 40 // Seconds + #define THERMAL_PROTECTION_PERIOD 60 // Seconds #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius //#define ADAPTIVE_FAN_SLOWING // Slow part cooling fan if temperature drops @@ -334,7 +334,7 @@ /** * As described above, except for the bed (M140/M190/M303). */ - #define WATCH_BED_TEMP_PERIOD 60 // Seconds + #define WATCH_BED_TEMP_PERIOD 180 // Seconds #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius #endif @@ -464,7 +464,7 @@ // Show Temperature ADC value // Enable for M105 to include ADC values read from temperature sensors. -//#define SHOW_TEMP_ADC_VALUES +#define SHOW_TEMP_ADC_VALUES /** * High Temperature Thermistor Support @@ -498,6 +498,11 @@ // @section extruder +/** + * Extruder runout prevention. + * If the machine is idle and the temperature over MINTEMP + * then extrude some filament every couple of SECONDS. + */ /** * Extruder runout prevention. * If the machine is idle and the temperature over MINTEMP @@ -583,7 +588,7 @@ * * Define one or both of these to override the default 0-255 range. */ -//#define FAN_MIN_PWM 50 +#define FAN_MIN_PWM 50 //#define FAN_MAX_PWM 128 /** @@ -643,7 +648,7 @@ * Multiple extruders can be assigned to the same pin in which case * the fan will turn on when any selected extruder is above the threshold. */ -#define E0_AUTO_FAN_PIN -1 +#define E0_AUTO_FAN_PIN PC0 #define E1_AUTO_FAN_PIN -1 #define E2_AUTO_FAN_PIN -1 #define E3_AUTO_FAN_PIN -1 @@ -654,7 +659,7 @@ #define CHAMBER_AUTO_FAN_PIN -1 #define COOLER_AUTO_FAN_PIN -1 -#define EXTRUDER_AUTO_FAN_TEMPERATURE 50 +#define EXTRUDER_AUTO_FAN_TEMPERATURE 80 #define EXTRUDER_AUTO_FAN_SPEED 255 // 255 == full speed #define CHAMBER_AUTO_FAN_TEMPERATURE 30 #define CHAMBER_AUTO_FAN_SPEED 255 @@ -912,7 +917,7 @@ // Safety: The probe needs time to recognize the command. // Minimum command delay (ms). Enable and increase if needed. - //#define BLTOUCH_DELAY 500 + #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: @@ -956,7 +961,7 @@ * * Set the default state here, change with 'M401 S' or UI, use M500 to save, M502 to reset. */ - //#define BLTOUCH_HS_MODE true + #define BLTOUCH_HS_MODE true // Safety: Enable voltage mode settings in the LCD menu. //#define BLTOUCH_LCD_VOLTAGE_MENU @@ -1121,10 +1126,10 @@ * Set DISABLE_INACTIVE_? 'true' to shut down axis steppers after an idle period. * The Deactive Time can be overridden with M18 and M84. Set to 0 for No Timeout. */ -#define DEFAULT_STEPPER_DEACTIVE_TIME 120 -#define DISABLE_INACTIVE_X true -#define DISABLE_INACTIVE_Y true -#define DISABLE_INACTIVE_Z true // Set 'false' if the nozzle could fall onto your printed part! +#define DEFAULT_STEPPER_DEACTIVE_TIME 1200 +#define DISABLE_INACTIVE_X false +#define DISABLE_INACTIVE_Y false +#define DISABLE_INACTIVE_Z false // Set 'false' if the nozzle could fall onto your printed part! #define DISABLE_INACTIVE_I true #define DISABLE_INACTIVE_J true #define DISABLE_INACTIVE_K true @@ -1274,7 +1279,7 @@ * vibration and surface artifacts. The algorithm adapts to provide the best possible step smoothing at the * lowest stepping frequencies. */ -//#define ADAPTIVE_STEP_SMOOTHING +#define ADAPTIVE_STEP_SMOOTHING /** * Custom Microstepping @@ -1360,8 +1365,11 @@ // Change values more rapidly when the encoder is rotated faster #define ENCODER_RATE_MULTIPLIER #if ENABLED(ENCODER_RATE_MULTIPLIER) - #define ENCODER_10X_STEPS_PER_SEC 30 // (steps/s) Encoder rate for 10x speed - #define ENCODER_100X_STEPS_PER_SEC 80 // (steps/s) Encoder rate for 100x speed + // #define ENCODER_10X_STEPS_PER_SEC 30 // (steps/s) Encoder rate for 10x speed + // #define ENCODER_100X_STEPS_PER_SEC 80 // (steps/s) Encoder rate for 100x speed + #define ENCODER_5X_STEPS_PER_SEC 30 // Creality Ender3v2 Config + #define ENCODER_10X_STEPS_PER_SEC 80 // (steps/s) Encoder rate for 10x speed // Creality Ender3v2 Config + #define ENCODER_100X_STEPS_PER_SEC 130 // (steps/s) Encoder rate for 100x speed // Creality Ender3v2 Config #endif // Play a beep when the feedrate is changed from the Status Screen @@ -1483,6 +1491,17 @@ #endif // HAS_DISPLAY +// Add 'M73' to set print job progress, overrides Marlin's built-in estimate +//#define SET_PROGRESS_MANUALLY +#if ENABLED(SET_PROGRESS_MANUALLY) + #define SET_PROGRESS_PERCENT // Add 'P' parameter to set percentage done + #define SET_REMAINING_TIME // Add 'R' parameter to set remaining time + //#define SET_INTERACTION_TIME // Add 'C' parameter to set time until next filament change or other user interaction + //#define M73_REPORT // Report M73 values to host + #if BOTH(M73_REPORT, SDSUPPORT) + #define M73_REPORT_SD_ONLY // Report only when printing from SD + #endif +#endif // Add 'M73' to set print job progress, overrides Marlin's built-in estimate //#define SET_PROGRESS_MANUALLY #if ENABLED(SET_PROGRESS_MANUALLY) @@ -1511,6 +1530,7 @@ #define PROGRESS_BAR_BAR_TIME 2000 // (ms) Amount of time to show the bar #define PROGRESS_BAR_MSG_TIME 3000 // (ms) Amount of time to show the status message #define PROGRESS_MSG_EXPIRE 0 // (ms) Amount of time to retain the status message (0=forever) + #define PROGRESS_MSG_EXPIRE 0 // (ms) Amount of time to retain the status message (0=forever) //#define PROGRESS_MSG_ONCE // Show the message for MSG_TIME then clear it //#define LCD_PROGRESS_BAR_TEST // Add a menu item to test the progress bar #endif @@ -1541,7 +1561,8 @@ #define SD_PROCEDURE_DEPTH 1 // Increase if you need more nested M32 calls #define SD_FINISHED_STEPPERRELEASE true // Disable steppers when SD Print is finished - #define SD_FINISHED_RELEASECOMMAND "M84" // Use "M84XYE" to keep Z enabled so your bed stays in place + // #define SD_FINISHED_RELEASECOMMAND "M84" // Use "M84XYE" to keep Z enabled so your bed stays in place +#define SD_FINISHED_RELEASECOMMAND "G1 X0 Y145\nM84" //"M84 X Y Z E" //rock_20210730 // Reverse SD sort to show "more recent" files first, according to the card's FAT. // Since the FAT gets out of order with usage, SDCARD_SORT_ALPHA is recommended. @@ -1570,7 +1591,7 @@ * an option on the LCD screen to continue the print from the last-known * point in the file. */ - //#define POWER_LOSS_RECOVERY + #define POWER_LOSS_RECOVERY #if ENABLED(POWER_LOSS_RECOVERY) #define PLR_ENABLED_DEFAULT false // Power Loss Recovery enabled by default. (Set with 'M413 Sn' & M500) //#define BACKUP_POWER_SUPPLY // Backup power / UPS to move the steppers on power loss @@ -1635,11 +1656,11 @@ // LCD's font must contain the characters. Check your selected LCD language. //#define UTF_FILENAME_SUPPORT - //#define LONG_FILENAME_HOST_SUPPORT // Get the long filename of a file/folder with 'M33 ' and list long filenames with 'M20 L' + #define LONG_FILENAME_HOST_SUPPORT // Get the long filename of a file/folder with 'M33 ' and list long filenames with 'M20 L' //#define LONG_FILENAME_WRITE_SUPPORT // Create / delete files with long filenames via M28, M30, and Binary Transfer Protocol //#define M20_TIMESTAMP_SUPPORT // Include timestamps by adding the 'T' flag to M20 commands - //#define SCROLL_LONG_FILENAMES // Scroll long filenames in the SD card menu + #define SCROLL_LONG_FILENAMES // Scroll long filenames in the SD card menu //#define SD_ABORT_NO_COOLDOWN // Leave the heaters on after Stop Print (not recommended!) @@ -2063,15 +2084,15 @@ * * Warning: Does not respect endstops! */ -//#define BABYSTEPPING +#define BABYSTEPPING #if ENABLED(BABYSTEPPING) //#define INTEGRATED_BABYSTEPPING // EXPERIMENTAL integration of babystepping into the Stepper ISR //#define BABYSTEP_WITHOUT_HOMING - //#define BABYSTEP_ALWAYS_AVAILABLE // Allow babystepping at all times (not just during movement). + #define BABYSTEP_ALWAYS_AVAILABLE // Allow babystepping at all times (not just during movement). //#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_MILLIMETER_UNITS // Specify BABYSTEP_MULTIPLICATOR_(XY|Z) in mm instead of micro-steps - #define BABYSTEP_MULTIPLICATOR_Z 1 // (steps or mm) Steps or millimeter distance for each Z babystep + #define BABYSTEP_MULTIPLICATOR_Z 40 // (steps or mm) Steps or millimeter distance for each Z babystep #define BABYSTEP_MULTIPLICATOR_XY 1 // (steps or mm) Steps or millimeter distance for each XY babystep //#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping. @@ -2084,9 +2105,9 @@ #endif #endif - //#define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28 + #define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28 - //#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping + #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 @@ -2195,7 +2216,7 @@ * Repeatedly attempt G29 leveling until it succeeds. * Stop after G29_MAX_RETRIES attempts. */ -//#define G29_RETRY_AND_RECOVER +#define G29_RETRY_AND_RECOVER #if ENABLED(G29_RETRY_AND_RECOVER) #define G29_MAX_RETRIES 3 #define G29_HALT_ON_FAILURE @@ -2406,7 +2427,7 @@ // 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 +#define TX_BUFFER_SIZE 32 // Host Receive Buffer Size // Without XON/XOFF flow control (see SERIAL_XON_XOFF below) 32 bytes should be enough. @@ -2444,7 +2465,7 @@ * Currently handles M108, M112, M410, M876 * NOTE: Not yet implemented for all platforms. */ -//#define EMERGENCY_PARSER +#define EMERGENCY_PARSER /** * Realtime Reporting (requires EMERGENCY_PARSER) @@ -2637,7 +2658,7 @@ * * Enable PARK_HEAD_ON_PAUSE to add the G-code M125 Pause and Park. */ -//#define ADVANCED_PAUSE_FEATURE +#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. @@ -3322,7 +3343,7 @@ * See https://marlinfw.org/docs/configuration/2.0.9/laser_spindle.html for more config details. */ //#define SPINDLE_FEATURE -//#define LASER_FEATURE +// #define LASER_FEATURE #if EITHER(SPINDLE_FEATURE, LASER_FEATURE) #define SPINDLE_LASER_ACTIVE_STATE LOW // Set to "HIGH" if SPINDLE_LASER_ENA_PIN is active HIGH @@ -3606,6 +3627,14 @@ //#define AUTO_REPORT_REDUNDANT // Include the "R" sensor in the auto-report #endif +/** + * Auto-report position with M154 S + */ +//#define AUTO_REPORT_POSITION +#if ENABLED(AUTO_REPORT_TEMPERATURES) && TEMP_SENSOR_REDUNDANT + //#define AUTO_REPORT_REDUNDANT // Include the "R" sensor in the auto-report +#endif + /** * Auto-report position with M154 S */ @@ -3849,12 +3878,12 @@ * 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 +#define HOST_ACTION_COMMANDS #if ENABLED(HOST_ACTION_COMMANDS) - //#define HOST_PAUSE_M76 // Tell the host to pause in response to M76 - //#define HOST_PROMPT_SUPPORT // Initiate host prompts to get user feedback + #define HOST_PAUSE_M76 // Tell the host to pause in response to M76 + #define HOST_PROMPT_SUPPORT // Initiate host prompts to get user feedback #if ENABLED(HOST_PROMPT_SUPPORT) - //#define HOST_STATUS_NOTIFICATIONS // Send some status messages to the host as notifications + #define HOST_STATUS_NOTIFICATIONS // Send some status messages to the host as notifications #endif //#define HOST_START_MENU_ITEM // Add a menu item that tells the host to start //#define HOST_SHUTDOWN_MENU_ITEM // Add a menu item that tells the host to shut down @@ -3867,7 +3896,7 @@ * * Implement M486 to allow Marlin to skip objects */ -//#define CANCEL_OBJECTS +#define CANCEL_OBJECTS #if ENABLED(CANCEL_OBJECTS) #define CANCEL_OBJECTS_REPORTING // Emit the current object as a status message #endif diff --git a/Marlin/src/HAL/SAMD21/timers.cpp b/Marlin/src/HAL/SAMD21/timers.cpp index b5f1d4f7bd80..cebf7f625e80 100644 --- a/Marlin/src/HAL/SAMD21/timers.cpp +++ b/Marlin/src/HAL/SAMD21/timers.cpp @@ -135,7 +135,6 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { } else if (timer_config[timer_num].type==TimerType::tcc) { - Tcc * const tc = timer_config[timer_num].pTcc; PM->APBCMASK.reg |= PM_APBCMASK_TCC0; diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index ed892ac8132a..b33d4b5e140f 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -77,6 +77,10 @@ #endif #endif +#if ENABLED(RTS_AVAILABLE) + #include "lcd/e3v2/creality/lcd_rts.h" +#endif + #if HAS_ETHERNET #include "feature/ethernet.h" #endif @@ -254,6 +258,18 @@ #include "tests/marlin_tests.h" #endif +#if ENABLED(PSU_CONTROL) + #include "feature/power.h" +#endif + +#if ENABLED(EASYTHREED_UI) + #include "feature/easythreed_ui.h" +#endif + +#if ENABLED(MARLIN_TEST_BUILD) + #include "tests/marlin_tests.h" +#endif + PGMSTR(M112_KILL_STR, "M112 Shutdown"); MarlinState marlin_state = MF_INITIALIZING; @@ -261,6 +277,11 @@ MarlinState marlin_state = MF_INITIALIZING; // For M109 and M190, this flag may be cleared (by M108) to exit the wait loop bool wait_for_heatup = true; +uint8_t language_change_font = 2; //语言选择标志位 + // translates to language selection flag + // I swear Creality has some kind of twisted + // AI or a college intern writing their code + // For M0/M1, this flag may be cleared (by M108) to exit the wait-for-user loop #if HAS_RESUME_CONTINUE bool wait_for_user; // = false; @@ -422,7 +443,15 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) { SERIAL_ERROR_START(); SERIAL_ECHOPGM(STR_KILL_PRE); SERIAL_ECHOLNPGM(STR_KILL_INACTIVE_TIME, parser.command_ptr); - kill(); + #ifdef RTS_AVAILABLE + waitway = 0; + rtscheck.RTS_SndData(ExchangePageBase + 41, ExchangepageAddr); + change_page_font = 41; + rtscheck.RTS_SndData(Error_201, ABNORMAL_PAGE_TEXT_VP); + errorway = 1; + #else + kill(); + #endif } const bool has_blocks = planner.has_blocks_queued(); // Any moves in the planner? @@ -843,6 +872,15 @@ void idle(bool no_stepper_sleep/*=false*/) { // Handle UI input / draw events TERN(DWIN_CREALITY_LCD, DWIN_Update(), ui.update()); + #if HAS_CUTTER + if(laser_device.is_laser_device()) + { + TERN(RTS_AVAILABLE, RTSUpdateLaser(),ui.update()); + }else + #endif + { + TERN(RTS_AVAILABLE, RTSUpdate(),ui.update()); + } // Run i2c Position Encoders #if ENABLED(I2C_POSITION_ENCODERS) @@ -1316,7 +1354,13 @@ void setup() { // UI must be initialized before EEPROM // (because EEPROM code calls the UI). - SETUP_RUN(ui.init()); + #if ENABLED(RTS_AVAILABLE) + #ifdef LCD_SERIAL_PORT + LCD_SERIAL.begin(LCD_BAUDRATE); + #endif + #else + SETUP_RUN(ui.init()); + #endif #if PIN_EXISTS(SAFE_POWER) #if HAS_DRIVER_SAFE_POWER_PROTECT @@ -1334,6 +1378,11 @@ void setup() { SETUP_RUN(settings.first_load()); // Load data from EEPROM if available (or use defaults) // This also updates variables in the planner, elsewhere + #if ENABLED(RTS_AVAILABLE) + // TERN_(HAS_M414_COMMAND, lang = language_change_font); + lang = language_change_font; + #endif + #if BOTH(HAS_WIRED_LCD, SHOW_BOOTSCREEN) SETUP_RUN(ui.show_bootscreen()); const millis_t bootscreen_ms = millis(); @@ -1598,6 +1647,11 @@ void setup() { SETUP_RUN(DWIN_InitScreen()); #endif + #if ENABLED(RTS_AVAILABLE) + delay(500); + SETUP_RUN(rtscheck.RTS_Init()); + #endif + #if HAS_SERVICE_INTERVALS && !HAS_DWIN_E3V2_BASIC SETUP_RUN(ui.reset_status(true)); // Show service messages or keep current status #endif diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index 83d149fa09e7..dfa41c688daa 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -74,6 +74,10 @@ #include "powerloss.h" #endif +#if ENABLED(RTS_AVAILABLE) + #include "../lcd/e3v2/creality/lcd_rts.h" +#endif + #include "../libs/nozzle.h" #include "pause.h" @@ -411,6 +415,11 @@ bool pause_print(const_float_t retract, const xyz_pos_t &park_point, const bool TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_open(PROMPT_INFO, F("Pause"), FPSTR(DISMISS_STR))); + #if ENABLED(RTS_AVAILABLE) + rtscheck.RTS_SndData(ExchangePageBase + 7, ExchangepageAddr); + change_page_font = 7; + #endif + // Indicate that the printer is paused ++did_pause_print; @@ -527,58 +536,97 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep KEEPALIVE_STATE(PAUSED_FOR_USER); TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_NOZZLE_PARKED), FPSTR(CONTINUE_STR))); TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_NOZZLE_PARKED))); - wait_for_user = true; // LCD click or M108 will clear this - while (wait_for_user) { - impatient_beep(max_beep_count); - // If the nozzle has timed out... - if (!nozzle_timed_out) - HOTEND_LOOP() nozzle_timed_out |= thermalManager.heater_idle[e].timed_out; + #if ENABLED(RTS_AVAILABLE) + while (runout.filament_ran_out) + { + // SERIAL_ECHOLNPAIR("\r\nwait_for_confirmation_2..."); + // If the nozzle has timed out... + if (!nozzle_timed_out) + HOTEND_LOOP() nozzle_timed_out |= thermalManager.heater_idle[e].timed_out; + // Wait for the user to press the button to re-heat the nozzle, then + // re-heat the nozzle, re-show the continue prompt, restart idle timers, start over + if (nozzle_timed_out) { + SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_HEAT)); - // Wait for the user to press the button to re-heat the nozzle, then - // re-heat the nozzle, re-show the continue prompt, restart idle timers, start over - if (nozzle_timed_out) { - ui.pause_show_message(PAUSE_MESSAGE_HEAT); - SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_HEAT)); + // wait_for_user_response(0, true); // Wait for LCD click or M108 - TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_HEATER_TIMEOUT), GET_TEXT_F(MSG_REHEAT))); + // Re-enable the heaters if they timed out + HOTEND_LOOP() thermalManager.reset_hotend_idle_timer(e); - TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_HEATER_TIMEOUT))); + // Wait for the heaters to reach the target temperatures + ensure_safe_temperature(false); - TERN_(HAS_RESUME_CONTINUE, wait_for_user_response(0, true)); // Wait for LCD click or M108 + // Start the heater idle timers + const millis_t nozzle_timeout = SEC_TO_MS(PAUSE_PARK_NOZZLE_TIMEOUT); - TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_INFO, GET_TEXT_F(MSG_REHEATING))); + HOTEND_LOOP() thermalManager.heater_idle[e].start(nozzle_timeout); + // wait_for_user = true; + nozzle_timed_out = false; + } + else if(card.flag.abort_sd_printing) + { + runout.reset(); + return; + } - TERN_(EXTENSIBLE_UI, ExtUI::onStatusChanged(GET_TEXT_F(MSG_REHEATING))); + idle_no_sleep(); + } + #else + wait_for_user = true; // LCD click or M108 will clear this + while (wait_for_user) { + impatient_beep(max_beep_count); - TERN_(DWIN_LCD_PROUI, LCD_MESSAGE(MSG_REHEATING)); + // If the nozzle has timed out... + if (!nozzle_timed_out) + HOTEND_LOOP() nozzle_timed_out |= thermalManager.heater_idle[e].timed_out; - // Re-enable the heaters if they timed out - HOTEND_LOOP() thermalManager.reset_hotend_idle_timer(e); + // Wait for the user to press the button to re-heat the nozzle, then + // re-heat the nozzle, re-show the continue prompt, restart idle timers, start over + if (nozzle_timed_out) { + ui.pause_show_message(PAUSE_MESSAGE_HEAT); + SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_HEAT)); - // Wait for the heaters to reach the target temperatures - ensure_safe_temperature(false); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_HEATER_TIMEOUT), GET_TEXT_F(MSG_REHEAT))); - // Show the prompt to continue - show_continue_prompt(is_reload); + TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_HEATER_TIMEOUT))); - // Start the heater idle timers - const millis_t nozzle_timeout = SEC_TO_MS(PAUSE_PARK_NOZZLE_TIMEOUT); + TERN_(HAS_RESUME_CONTINUE, wait_for_user_response(0, true)); // Wait for LCD click or M108 - HOTEND_LOOP() thermalManager.heater_idle[e].start(nozzle_timeout); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_INFO, GET_TEXT_F(MSG_REHEATING))); - TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_REHEATDONE), FPSTR(CONTINUE_STR))); - TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_REHEATDONE))); - TERN_(DWIN_LCD_PROUI, LCD_MESSAGE(MSG_REHEATDONE)); + TERN_(EXTENSIBLE_UI, ExtUI::onStatusChanged(GET_TEXT_F(MSG_REHEATING))); - IF_DISABLED(PAUSE_REHEAT_FAST_RESUME, wait_for_user = true); + TERN_(DWIN_LCD_PROUI, LCD_MESSAGE(MSG_REHEATING)); - nozzle_timed_out = false; - first_impatient_beep(max_beep_count); - } - idle_no_sleep(); - } - TERN_(DUAL_X_CARRIAGE, set_duplication_enabled(saved_ext_dup_mode, saved_ext)); + // Re-enable the heaters if they timed out + HOTEND_LOOP() thermalManager.reset_hotend_idle_timer(e); + + // Wait for the heaters to reach the target temperatures + ensure_safe_temperature(false); + + // Show the prompt to continue + show_continue_prompt(is_reload); + + // Start the heater idle timers + const millis_t nozzle_timeout = SEC_TO_MS(PAUSE_PARK_NOZZLE_TIMEOUT); + + HOTEND_LOOP() thermalManager.heater_idle[e].start(nozzle_timeout); + + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_REHEATDONE), FPSTR(CONTINUE_STR))); + TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_REHEATDONE))); + TERN_(DWIN_LCD_PROUI, LCD_MESSAGE(MSG_REHEATDONE)); + + IF_DISABLED(PAUSE_REHEAT_FAST_RESUME, wait_for_user = true); + + nozzle_timed_out = false; + first_impatient_beep(max_beep_count); + } + idle_no_sleep(); + } + #endif + + TERN_(DUAL_X_CARRIAGE, set_duplication_enabled(saved_ext_dup_mode, saved_ext)); } /** diff --git a/Marlin/src/feature/powerloss.cpp b/Marlin/src/feature/powerloss.cpp index d4450adcd853..c58c7279a4fc 100644 --- a/Marlin/src/feature/powerloss.cpp +++ b/Marlin/src/feature/powerloss.cpp @@ -65,6 +65,10 @@ uint32_t PrintJobRecovery::cmd_sdpos, // = 0 #define DEBUG_OUT ENABLED(DEBUG_POWER_LOSS_RECOVERY) #include "../core/debug_out.h" +#if ENABLED(RTS_AVAILABLE) + #include "../lcd/e3v2/creality/lcd_rts.h" +#endif + PrintJobRecovery recovery; #ifndef POWER_LOSS_PURGE_LEN @@ -239,6 +243,12 @@ void PrintJobRecovery::save(const bool force/*=false*/, const float zraise/*=POW info.flag.dryrun = !!(marlin_debug_flags & MARLIN_DEBUG_DRYRUN); info.flag.allow_cold_extrusion = TERN0(PREVENT_COLD_EXTRUSION, thermalManager.allow_cold_extrude); + #if ENABLED(RTS_AVAILABLE) + //recovery flag + // info.recovery_flag = true; + info.recovery_flag = PoweroffContinue; + #endif + write(); } } diff --git a/Marlin/src/feature/powerloss.h b/Marlin/src/feature/powerloss.h index 4bf0c06e2d7e..b79819c1fe16 100644 --- a/Marlin/src/feature/powerloss.h +++ b/Marlin/src/feature/powerloss.h @@ -105,6 +105,11 @@ typedef struct { #endif #endif + #if ENABLED(RTS_AVAILABLE) + //recovery flag + uint8_t recovery_flag; + #endif + // SD Filename and position char sd_filename[MAXPATHNAMELENGTH]; volatile uint32_t sdpos; diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index 0fef5ad68374..6074a121ace8 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -52,6 +52,10 @@ #include "../../../lcd/e3v2/proui/dwin.h" #endif +#if ENABLED(RTS_AVAILABLE) + #include "../../../lcd/e3v2/creality/lcd_rts.h" +#endif + #if HAS_MULTI_HOTEND #include "../../../module/tool_change.h" #endif @@ -734,6 +738,16 @@ G29_TYPE GcodeSuite::G29() { #endif + #if ENABLED(RTS_AVAILABLE) + if(!IS_SD_PRINTING()) + { + rtscheck.RTS_SndData((uint16_t)((100.0 / (GRID_MAX_POINTS_X * GRID_MAX_POINTS_Y) * pt_index) / 2) , AUTO_BED_LEVEL_TITLE_VP); + rtscheck.RTS_SndData((uint16_t)(100.0 / (GRID_MAX_POINTS_X * GRID_MAX_POINTS_Y) * pt_index), AUTO_LEVELING_PERCENT_DATA_VP); + rtscheck.RTS_SndData(ExchangePageBase + 26, ExchangepageAddr); + change_page_font = 26; + } + #endif + abl.reenable = false; // Don't re-enable after modifying the mesh idle_no_sleep(); @@ -949,6 +963,10 @@ G29_TYPE GcodeSuite::G29() { process_subcommands_now(F(Z_PROBE_END_SCRIPT)); #endif + #if ENABLED(RTS_AVAILABLE) + RTS_AutoBedLevelPage(); + #endif + TERN_(HAS_MULTI_HOTEND, if (abl.tool_index != 0) tool_change(abl.tool_index)); report_current_position(); diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index 0b6548a3e3fa..40f568e9813b 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -64,6 +64,10 @@ #include "../../feature/spindle_laser.h" #endif +#if ENABLED(RTS_AVAILABLE) + #include "../../lcd/e3v2/creality/lcd_rts.h" +#endif + #define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE) #include "../../core/debug_out.h" @@ -241,6 +245,10 @@ void GcodeSuite::G28() { set_and_report_grblstate(M_HOMING); #endif + #if ENABLED(RTS_AVAILABLE) + home_flag = true; + #endif + TERN_(HAS_DWIN_E3V2_BASIC, DWIN_HomingStart()); TERN_(EXTENSIBLE_UI, ExtUI::onHomingStart()); @@ -604,6 +612,15 @@ void GcodeSuite::G28() { TERN_(HAS_DWIN_E3V2_BASIC, DWIN_HomingDone()); TERN_(EXTENSIBLE_UI, ExtUI::onHomingDone()); + TERN_(RTS_AVAILABLE, RTS_MoveAxisHoming()); + TERN_(RTS_AVAILABLE, rtscheck.RTS_SndData(0, MOTOR_FREE_ICON_VP)); + + #if ENABLED(RTS_AVAILABLE) + home_flag = false; + // home_count = true; + // endstops.enable_z_probe(false); + #endif + report_current_position(); if (ENABLED(NANODLP_Z_SYNC) && (doZ || ENABLED(NANODLP_ALL_AXIS))) diff --git a/Marlin/src/gcode/lcd/M0_M1.cpp b/Marlin/src/gcode/lcd/M0_M1.cpp index 35afea0f6ecd..58c87b71f22d 100644 --- a/Marlin/src/gcode/lcd/M0_M1.cpp +++ b/Marlin/src/gcode/lcd/M0_M1.cpp @@ -44,11 +44,16 @@ #include "../../feature/host_actions.h" #endif +#if ENABLED(RTS_AVAILABLE) + #include "../../lcd/e3v2/creality/lcd_rts.h" +#endif + /** * M0: Unconditional stop - Wait for user button press on LCD * M1: Conditional stop - Wait for user button press on LCD */ void GcodeSuite::M0_M1() { + TERN_(RTS_AVAILABLE, RTS_CommandPause()); millis_t ms = 0; if (parser.seenval('P')) ms = parser.value_millis(); // Milliseconds to wait if (parser.seenval('S')) ms = parser.value_millis_from_seconds(); // Seconds to wait diff --git a/Marlin/src/gcode/motion/G0_G1.cpp b/Marlin/src/gcode/motion/G0_G1.cpp index b10f1ac920d6..c5e198a852ab 100644 --- a/Marlin/src/gcode/motion/G0_G1.cpp +++ b/Marlin/src/gcode/motion/G0_G1.cpp @@ -35,6 +35,10 @@ #include "../../module/planner.h" #endif +#if ENABLED(RTS_AVAILABLE) + #include "../../lcd/e3v2/creality/lcd_rts.h" +#endif + extern xyze_pos_t destination; #if ENABLED(VARIABLE_G0_FEEDRATE) @@ -131,5 +135,9 @@ void GcodeSuite::G0_G1(TERN_(HAS_FAST_MOVES, const bool fast_move/*=false*/)) { #else TERN_(FULL_REPORT_TO_HOST_FEATURE, report_current_grblstate_moving()); #endif + + #if ENABLED(RTS_AVAILABLE) + RTS_PauseMoveAxisPage(); + #endif } } diff --git a/Marlin/src/gcode/queue.cpp b/Marlin/src/gcode/queue.cpp index c951fc633364..f27d7b6e9be8 100644 --- a/Marlin/src/gcode/queue.cpp +++ b/Marlin/src/gcode/queue.cpp @@ -57,6 +57,10 @@ GCodeQueue queue; #include "../feature/repeat.h" #endif +#if ENABLED(RTS_AVAILABLE) + #include "../lcd/e3v2/creality/lcd_rts.h" +#endif + // Frequently used G-code strings PGMSTR(G28_STR, "G28"); @@ -138,6 +142,21 @@ bool GCodeQueue::enqueue_one(const char * const cmd) { return false; } +/** + * Attempt to enqueue a single G-code command + * and return 'true' if successful. + */ +bool GCodeQueue::enqueue_one_P(PGM_P const pgcode) { + size_t i = 0; + PGM_P p = pgcode; + char c; + while ((c = pgm_read_byte(&p[i])) && c != '\n') i++; + char cmd[i + 1]; + memcpy_P(cmd, p, i); + cmd[i] = '\0'; + return ring_buffer.enqueue(cmd); +} + /** * Process the next "immediate" command from PROGMEM. * Return 'true' if any commands were processed. @@ -594,6 +613,34 @@ void GCodeQueue::get_serial_commands() { } else process_stream_char(sd_char, sd_input_state, command.buffer, sd_count); + + #if ENABLED(RTS_AVAILABLE) + // the printing results + if (card_eof) + { + rtscheck.RTS_SndData(100, PRINT_PROCESS_VP); + delay(1); + rtscheck.RTS_SndData(100, PRINT_PROCESS_ICON_VP); + delay(1); + + #if HAS_CUTTER + if(laser_device.is_laser_device()){ + // rtscheck.RTS_SndData(ExchangePageBase + 60, ExchangepageAddr); + // change_page_font = 60; + }else + #endif + { + rtscheck.RTS_SndData(ExchangePageBase + 9, ExchangepageAddr); + change_page_font = 9; + } + + // if(flag_over_shutdown) + // { + // // Start the automatic shutdown timer after printing + // flag_counter_printover_to_shutdown = true; + // } + } + #endif } } diff --git a/Marlin/src/gcode/queue.h b/Marlin/src/gcode/queue.h index 142283008001..834311ee9781 100644 --- a/Marlin/src/gcode/queue.h +++ b/Marlin/src/gcode/queue.h @@ -155,6 +155,12 @@ class GCodeQueue { */ static bool enqueue_one(const char *cmd); +/** + * Attempt to enqueue a single G-code command + * and return 'true' if successful. + */ + static bool enqueue_one_P(PGM_P const pgcode); + /** * Enqueue from program memory and return only when commands are actually enqueued */ diff --git a/Marlin/src/gcode/sd/M1001.cpp b/Marlin/src/gcode/sd/M1001.cpp index c7728a5a477f..9c6ce20090e1 100644 --- a/Marlin/src/gcode/sd/M1001.cpp +++ b/Marlin/src/gcode/sd/M1001.cpp @@ -57,6 +57,10 @@ #include "../../feature/host_actions.h" #endif +#if ENABLED(RTS_AVAILABLE) + #include "../../lcd/e3v2/creality/lcd_rts.h" +#endif + #ifndef PE_LEDS_COMPLETED_TIME #define PE_LEDS_COMPLETED_TIME (30*60) #endif @@ -112,6 +116,13 @@ void GcodeSuite::M1001() { // Re-select the last printed file in the UI TERN_(SD_REPRINT_LAST_SELECTED_FILE, ui.reselect_last_file()); + + #if BOTH(HAS_CUTTER, RTS_AVAILABLE) + if(laser_device.is_laser_device()){ + rtscheck.RTS_SndData(ExchangePageBase + 60, ExchangepageAddr); + change_page_font = 60; + } +#endif } #endif // SDSUPPORT diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index cf6c560b5cc7..73af3e579399 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -2943,7 +2943,7 @@ #define HAS_TEMPERATURE 1 #endif -#if HAS_TEMPERATURE && ANY(HAS_MARLINUI_MENU, HAS_DWIN_E3V2, HAS_DGUS_LCD_CLASSIC) +#if HAS_TEMPERATURE && ANY(HAS_MARLINUI_MENU, HAS_DWIN_E3V2, HAS_DGUS_LCD_CLASSIC, RTS_AVAILABLE) #ifdef PREHEAT_10_LABEL #define PREHEAT_COUNT 10 #elif defined(PREHEAT_9_LABEL) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index dc8c8a22cc36..865ca277691e 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1718,6 +1718,13 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #error "Bed Leveling is not compatible with BELTPRINTER." #endif +/** + * Some things should not be used on Belt Printers + */ +#if BOTH(BELTPRINTER, HAS_LEVELING) + #error "Bed Leveling is not compatible with BELTPRINTER." +#endif + /** * Probes */ diff --git a/Marlin/src/lcd/e3v2/creality/lcd_rts.cpp b/Marlin/src/lcd/e3v2/creality/lcd_rts.cpp new file mode 100644 index 000000000000..485e6a51abd2 --- /dev/null +++ b/Marlin/src/lcd/e3v2/creality/lcd_rts.cpp @@ -0,0 +1,3454 @@ +#include +#include +#include +#include +// #include +#include "lcd_rts.h" +#include "../../../MarlinCore.h" +#include "../../../inc/MarlinConfig.h" +#include "../../../module/settings.h" +#include "../../../core/serial.h" +#include "../../../core/macros.h" +#include "../../fontutils.h" +#include "../../marlinui.h" +#include "../../../sd/cardreader.h" +#include "../../../feature/babystep.h" +#include "../../../module/temperature.h" +#include "../../../module/printcounter.h" +#include "../../../module/motion.h" +#include "../../../module/planner.h" +#include "../../../gcode/queue.h" +#include "../../../gcode/gcode.h" +#include "../../../module/probe.h" + +#include "../../../feature/bedlevel/bedlevel.h" + +#include "../../../libs/duration_t.h" + +#if ENABLED(BLTOUCH) + #include "../../../module/endstops.h" +#endif + +#if ENABLED(FILAMENT_RUNOUT_SENSOR) + #include "../../../feature/runout.h" +#endif + +#if ENABLED(POWER_LOSS_RECOVERY) + #include "../../../feature/powerloss.h" +#elif ENABLED(CREALITY_POWER_LOSS) + #include "../../feature/PRE01_Power_loss/PRE01_Power_loss.h" +#endif + +#if HAS_CUTTER +#include "../../../src/feature/spindle_laser.h" +#endif + + +#ifdef LCD_SERIAL_PORT + #define LCDSERIAL LCD_SERIAL +#elif SERIAL_PORT_2 + #define LCDSERIAL MYSERIAL2 +#endif + +#if ENABLED(RTS_AVAILABLE) +/*******************************类定义*********************************/ +RTSSHOW rtscheck; +/********************************END***********************************/ + + +/*******************************外部声明*****************************/ +extern CardReader card; + +/**********************************END**********************************/ + + +/*******************************可选择性功能*****************************/ +#if ENABLED(HAS_MENU_RESET_WIFI) + //WIFI状态 + unsigned char WIFI_STATE = INITIAL; +#endif + + +//错误状态 +char errorway = 0; +char errornum = 0; +char home_errornum = 0; +char error_sd_num = 0; + +//开始打印状态标志位 +bool StartPrint_flag = false; + +//babystep偏移参数,Z轴偏移参数 +#if ENABLED(BABYSTEPPING) + float zprobe_zoffset; + float last_zoffset = 0.0; +#endif + +int power_off_type_yes = 0; + +//运动相关参数设置 +const float manual_feedrate_mm_m[] = {50 * 60, 50 * 60, 4 * 60, 60}; +// const float manual_feedrate_mm_m[] = DEFAULT_MAX_FEEDRATE; +constexpr float default_max_feedrate[] = DEFAULT_MAX_FEEDRATE; +constexpr float default_max_acceleration[] = DEFAULT_MAX_ACCELERATION; +constexpr float default_max_jerk[] = { DEFAULT_XJERK, DEFAULT_YJERK, DEFAULT_ZJERK, DEFAULT_EJERK }; +constexpr float default_axis_steps_per_unit[] = DEFAULT_AXIS_STEPS_PER_UNIT; + +//喷头默认PID +float default_nozzle_ptemp = DEFAULT_Kp; +float default_nozzle_itemp = DEFAULT_Ki; +float default_nozzle_dtemp = DEFAULT_Kd; + +//热床默认PID +float default_hotbed_ptemp = DEFAULT_bedKp; +float default_hotbed_itemp = DEFAULT_bedKi; +float default_hotbed_dtemp = DEFAULT_bedKd; + +//打印进度条 +uint8_t startprogress = 0; +//读取SD卡GCODE文件名的结构体参数 +CRec CardRecbuf; +// float pause_e = 0; +//SD卡打印是否暂停,true需要检测暂停,false已经暂停完成 +bool sdcard_pause_check = true; +//暂停的动作就是回到 X0,Y0处 +bool pause_action_flag = false; +// bool print_preheat_check = false; +// bool probe_offset_flag = false; + +//更换耗材时的设定温度 +float ChangeFilamentTemp = 200; +int heatway = 0; + +//下一次更新数据的时间 +millis_t next_rts_update_ms = 0; +// millis_t next_shutdown_update_ms = 0; +// unsigned int count_ms = 0; +// unsigned long count_lcd_down = 0; +// bool flag_lcd_down = false; + +//上一次喷头的温度 +int last_target_temperature[4] = {0}; +//上一次热床的温度 +int last_target_temperature_bed; + +char waitway = 0; + +//当前的页面序列 +int change_page_font = 1; +// int recnum = 0; +unsigned char Percentrecord = 0; //SD卡打印百分比 +// represents to update file list +//SD卡文件列表更新,标志位 +bool CardUpdate = false; + +//当前的语言标志位 +uint8_t lang = 2; +// represents SD-card status, true means SD is available, false means opposite. +//表示 SD 卡状态,true 表示 SD 可用,false 表示相反。 +bool lcd_sd_status; + +// char Checkfilenum = 0; +int FilenamesCount = 0; + +char cmdbuf[20] = {0}; + +//耗材加载的默认长度 +float FilamentLOAD = 10; + +//耗材卸载的默认长度 +float FilamentUnLOAD = 10; + +// 1 for 10mm, 2 for 1mm, 3 for 0.1mm +//移动轴的单位选择标志 1 代表 10mm,2 代表 1mm,3 代表 0.1mm +unsigned char AxisUnitMode; + +//移动轴的每个单位参数 +float axis_unit = 10.0; +// bool LEDStatus = true; +//更新迪文屏幕的数据变量时间间隔 +int Update_Time_Value = 0; +//断电续打,迪文屏显示逻辑标志位 +bool PoweroffContinue = false; +char commandbuf[30]; + +// uint16_t remain_time = 0; + +bool home_flag = false; +// bool G29_flag = false; +// bool AutohomeZflag = false; +// bool home_count = true; +// unsigned char Count_first = 0; +// unsigned char Count_probe = 0; +// bool flag_over_shutdown = false; +// bool flag_counter_printover_to_shutdown = false; + +//保存暂停时喷头的温度 +int temphot = 0; +//选中文件开始打印标志位 +bool rts_start_print = false; + +//辅助调平的点 +const int manual_level_5position[5][2] = MANUALL_BED_LEVEING_5POSITION; + +enum{ + PREHEAT_PLA = 0, + PREHEAT_ABS = 1, +}; + +int temp_preheat_nozzle = 0, temp_preheat_bed = 0; +uint8_t preheat_flag = PREHEAT_PLA; // 0=PLA, 1=ABS + + +/*************************************END***************************************/ + +//以manual_feedrate_mm_m的默认设置速度,移动到current_position的位置 +inline void RTS_line_to_current(AxisEnum axis) +{ + if (!planner.is_full()) + { + planner.buffer_line(current_position, MMM_TO_MMS(manual_feedrate_mm_m[(int8_t)axis]), active_extruder); + } +} + +//设置发送和接收串口屏的帧头数据 +RTSSHOW::RTSSHOW(void) +{ + recdat.head[0] = snddat.head[0] = FHONE; + recdat.head[1] = snddat.head[1] = FHTWO; + memset(databuf, 0, sizeof(databuf)); +} + +//SD卡的检测引脚,具有防抖功能 +bool RTSSHOW::RTS_SD_Detected(void) +{ + static bool last; + static bool state; + static bool flag_stable; + static uint32_t stable_point_time; + + bool tmp = IS_SD_INSERTED(); + + if(tmp != last) + { + flag_stable = false; + } + else + { + if(!flag_stable) + { + flag_stable = true; + stable_point_time = millis(); + } + } + + if(flag_stable) + { + if(millis() - stable_point_time > 30) + { + state = tmp; + } + } + + last = tmp; + + return state; +} + +//迪文屏初始化SD卡 +void RTSSHOW::RTS_SDCardInit(void) +{ + if(RTS_SD_Detected()) + { + if(!card.isMounted()) card.mount(); + } + if(CardReader::flag.mounted) + { + uint16_t fileCnt = card.get_num_Files(); //获取SD卡中Gcode的总数 + card.getWorkDirName(); //获取当前的SD卡目录,如果不是根文件目录则,返回上一级目录 + if(card.filename[0] != '/') + { + card.cdup(); + } + + int addrnum = 0; + int num = 0; //当前SD卡的文件序列号 + for(uint16_t i = 0;(i < fileCnt) && (i < (MaxFileNumber + addrnum));i ++) + { + card.selectFileByIndex(fileCnt - 1 - i); //返回对应序列号的SD卡文件的长文件名和短文件名 + char *pointFilename = card.longFilename; //长文件名 + int filenamelen = strlen(card.longFilename); //长文件名的长度 + int j = 1; + //轮询长文件名的整个长度,是否包含.gcode 或者 .GCODE 结尾的文件 + while((strncmp(&pointFilename[j], ".gcode", 6) && strncmp(&pointFilename[j], ".GCODE", 6)) && ((j ++) < filenamelen)); + if(j >= filenamelen) + { + addrnum++; + continue; + } + + if (j >= TEXTBYTELEN) + { + strncpy(&card.longFilename[TEXTBYTELEN - 3], "..", 2); + card.longFilename[TEXTBYTELEN - 1] = '\0'; + j = TEXTBYTELEN - 1; + } + + strncpy(CardRecbuf.Cardshowfilename[num], card.longFilename, j); //复制长文件保存到CardRecbuf结构体变量中 + + strcpy(CardRecbuf.Cardfilename[num], card.filename); //复制短文件名并保存到CardRecbuf结构体变量中 + CardRecbuf.addr[num] = FILE1_TEXT_VP + (num * 20); + RTS_SndData(CardRecbuf.Cardshowfilename[num], CardRecbuf.addr[num]); + CardRecbuf.Filesum = (++num); + } + //清除剩下的文件名显示地址的数据 + for(int j = CardRecbuf.Filesum;j < MaxFileNumber;j ++) + { + CardRecbuf.addr[j] = FILE1_TEXT_VP + (j * 20); + RTS_SndData(0, CardRecbuf.addr[j]); + } + //清除打印主界面的文件名显示 + for(int j = 0;j < 20;j ++) + { + // clean print file + RTS_SndData(0, PRINT_FILE_TEXT_VP + j); + } + // lcd_sd_status = IS_SD_INSERTED(); + lcd_sd_status = RTS_SD_Detected(); //SD卡当前的状态 + } + else //SD卡挂在失败 + { + // clean filename Icon + for(int j = 0;j < MaxFileNumber;j ++) + { + // clean filename Icon + for(int i = 0;i < TEXTBYTELEN;i ++) + { + RTS_SndData(0, CardRecbuf.addr[j] + i); + } + } + memset(&CardRecbuf, 0, sizeof(CardRecbuf)); + } +} + +void RTSSHOW::RTS_SDCardUpate(void) +{ + const bool sd_status = RTS_SD_Detected(); + if (sd_status != lcd_sd_status) + { + if (sd_status) + { + // SD card power on + RTS_SDCardInit(); + } + else + { + // SERIAL_ECHOLNPAIR("\r\ncard 3"); + // if(PoweroffContinue == true) + // { + // return; + // } + // else + // { + // SERIAL_ECHOLNPAIR("\r\ncard 4"); + card.release(); + for(int i = 0;i < CardRecbuf.Filesum;i ++) + { + for(int j = 0;j < 20;j ++) + { + RTS_SndData(0, CardRecbuf.addr[i] + j); + } + RTS_SndData((unsigned long)0xFFFF, FilenameNature + (i + 1) * 16); + } + + for(int j = 0;j < 20;j ++) + { + // clean screen. + RTS_SndData(0, PRINT_FILE_TEXT_VP + j); + RTS_SndData(0, SELECT_FILE_TEXT_VP + j); + } + memset(&CardRecbuf, 0, sizeof(CardRecbuf)); + // } + } + lcd_sd_status = sd_status; + } + + // represents to update file list + if(CardUpdate && lcd_sd_status && RTS_SD_Detected()) + { + for(uint16_t i = 0;i < CardRecbuf.Filesum;i ++) + { + // delay(1); + RTS_SndData(CardRecbuf.Cardshowfilename[i], CardRecbuf.addr[i]); + RTS_SndData((unsigned long)0xFFFF, FilenameNature + (i + 1) * 16); + } + CardUpdate = false; + } +} + +void RTSSHOW::RTS_Init(void) +{ + // LCDSERIAL.begin(LCD_BAUDRATE); + + AxisUnitMode = 1; + lang = language_change_font; + #if ENABLED(AUTO_BED_LEVELING_BILINEAR) + // bool zig = true; + // int8_t inStart, inStop, inInc, showcount; + // showcount = 0; + // settings.load(); + // for (int y = 0; y < GRID_MAX_POINTS_Y; y++) + // { + // // away from origin + // if (zig) + // { + // inStart = 0; + // inStop = GRID_MAX_POINTS_X; + // inInc = 1; + // } + // else + // { + // // towards origin + // inStart = GRID_MAX_POINTS_X - 1; + // inStop = -1; + // inInc = -1; + // } + // zig ^= true; + // for (int x = inStart; x != inStop; x += inInc) + // { + // RTS_SndData(z_values[x][y] * 1000, AUTO_BED_LEVEL_1POINT_VP + showcount * 2); + // showcount++; + // } + // } + #endif + last_zoffset = zprobe_zoffset = probe.offset.z; + RTS_SndData(zprobe_zoffset * 100, AUTO_BED_LEVEL_ZOFFSET_VP); + + //显示语言选择界面图标 + for(int i = 0;i < 9;i ++) + { + RTS_SndData(0, LANGUAGE_CHINESE_TITLE_VP + i); + } + //选中当前的语言 + RTS_SndData(1, LANGUAGE_CHINESE_TITLE_VP + (language_change_font - 1)); + languagedisplayUpdate(); + // delay(100); + + last_target_temperature[0] = thermalManager.temp_hotend[0].target; + last_target_temperature_bed = thermalManager.temp_bed.target; + feedrate_percentage = 100; + RTS_SndData(feedrate_percentage, PRINT_SPEED_RATE_VP); + + /***************turn off motor*****************/ + RTS_SndData(1, MOTOR_FREE_ICON_VP); + + /***************transmit temperature to screen*****************/ + RTS_SndData(0, HEAD_SET_TEMP_VP); + RTS_SndData(0, BED_SET_TEMP_VP); + RTS_SndData(thermalManager.temp_hotend[0].celsius, HEAD_CURRENT_TEMP_VP); + // delay(20); + RTS_SndData(thermalManager.temp_bed.celsius, BED_CURRENT_TEMP_VP); + // delay(20); + RTS_SndData(ui.material_preset[0].hotend_temp, PREHEAT_PLA_SET_NOZZLE_TEMP_VP); + RTS_SndData(ui.material_preset[0].bed_temp, PREHEAT_PLA_SET_BED_TEMP_VP); + RTS_SndData(ui.material_preset[1].hotend_temp, PREHEAT_ABS_SET_NOZZLE_TEMP_VP); + RTS_SndData(ui.material_preset[1].bed_temp, PREHEAT_ABS_SET_BED_TEMP_VP); + + RTS_SndData(planner.settings.max_feedrate_mm_s[0], MAX_VELOCITY_XAXIS_DATA_VP); + RTS_SndData(planner.settings.max_feedrate_mm_s[1], MAX_VELOCITY_YAXIS_DATA_VP); + RTS_SndData(planner.settings.max_feedrate_mm_s[2], MAX_VELOCITY_ZAXIS_DATA_VP); + RTS_SndData(planner.settings.max_feedrate_mm_s[3], MAX_VELOCITY_EAXIS_DATA_VP); + + RTS_SndData(planner.settings.max_acceleration_mm_per_s2[0], MAX_ACCEL_XAXIS_DATA_VP); + RTS_SndData(planner.settings.max_acceleration_mm_per_s2[1], MAX_ACCEL_YAXIS_DATA_VP); + RTS_SndData(planner.settings.max_acceleration_mm_per_s2[2], MAX_ACCEL_ZAXIS_DATA_VP); + RTS_SndData(planner.settings.max_acceleration_mm_per_s2[3], MAX_ACCEL_EAXIS_DATA_VP); + + RTS_SndData(planner.max_jerk.x * 100, MAX_JERK_XAXIS_DATA_VP); + RTS_SndData(planner.max_jerk.y * 100, MAX_JERK_YAXIS_DATA_VP); + RTS_SndData(planner.max_jerk.z * 100, MAX_JERK_ZAXIS_DATA_VP); + RTS_SndData(planner.max_jerk.e * 100, MAX_JERK_EAXIS_DATA_VP); + + RTS_SndData(planner.settings.axis_steps_per_mm[0] * 10, MAX_STEPSMM_XAXIS_DATA_VP); + RTS_SndData(planner.settings.axis_steps_per_mm[1] * 10, MAX_STEPSMM_YAXIS_DATA_VP); + RTS_SndData(planner.settings.axis_steps_per_mm[2] * 10, MAX_STEPSMM_ZAXIS_DATA_VP); + RTS_SndData(planner.settings.axis_steps_per_mm[3] * 10, MAX_STEPSMM_EAXIS_DATA_VP); + + RTS_SndData(PID_PARAM(Kp, 0) * 100, NOZZLE_TEMP_P_DATA_VP); + RTS_SndData(unscalePID_i(PID_PARAM(Ki, 0)) * 100, NOZZLE_TEMP_I_DATA_VP); + RTS_SndData(unscalePID_d(PID_PARAM(Kd, 0)) * 100, NOZZLE_TEMP_D_DATA_VP); + RTS_SndData(thermalManager.temp_bed.pid.Kp * 100, HOTBED_TEMP_P_DATA_VP); + RTS_SndData(unscalePID_i(thermalManager.temp_bed.pid.Ki) * 100, HOTBED_TEMP_I_DATA_VP); + RTS_SndData(unscalePID_d(thermalManager.temp_bed.pid.Kd) * 10, HOTBED_TEMP_D_DATA_VP); + + RTS_SndData( thermalManager.fan_speed[0] , PRINTER_FAN_SPEED_DATA_VP); + + /***************transmit Fan speed to screen*****************/ + // turn off fans + thermalManager.set_fan_speed(0, 0); + // RTS_SndData(1, PRINTER_FANOPEN_TITLE_VP); + // RTS_SndData(1, PRINTER_LEDOPEN_TITLE_VP); + // LEDStatus = true; + // delay(5); + // if(flag_over_shutdown) + // { + // rtscheck.RTS_SndData(0, PRINTER_AUTO_SHUTDOWN_ICON_VP); + // } + // else + // { + // rtscheck.RTS_SndData(1, PRINTER_AUTO_SHUTDOWN_ICON_VP); + // } + + /*********transmit SD card filename to screen***************/ + // delay(200); + RTS_SDCardInit(); + + /***************transmit Printer information to screen*****************/ + RTS_SndData(MACVERSION, MACHINE_TYPE_ABOUT_TEXT_VP); + RTS_SndData(SOFTVERSION, FIREWARE_VERSION_ABOUT_TEXT_VP); + RTS_SndData(PRINT_SIZE, PRINTER_PRINTSIZE_TEXT_VP); + if(1 == lang) + { + RTS_SndData(CORP_WEBSITE_C, WEBSITE_ABOUT_TEXT_VP); + } + else + { + RTS_SndData(CORP_WEBSITE_E, WEBSITE_ABOUT_TEXT_VP); + } + + // if(wifi_enable_flag) + // { + // RTS_SndData(0, ADV_SETTING_WIFI_ICON_VP); + // } + // else + // { + // RTS_SndData(1, ADV_SETTING_WIFI_ICON_VP); + // } + + /**************************some info init*******************************/ + RTS_SndData(0, PRINT_PROCESS_ICON_VP); + RTS_SndData(0, PRINT_REMAIN_TIME_HOUR_VP); + RTS_SndData(0, PRINT_REMAIN_TIME_MIN_VP); + + RTS_SndData(1, PREHAEAT_NOZZLE_ICON_VP); + RTS_SndData(1, PREHAEAT_HOTBED_ICON_VP); + //rtscheck.RTS_SndData(1, FILAMENT_CONTROL_ICON_VP); + + rtscheck.RTS_SndData(ExchangePageBase, ExchangepageAddr); + change_page_font = 0; + hal.watchdog_refresh(); + for(startprogress = 0; startprogress <= 100; startprogress++) + { + rtscheck.RTS_SndData(startprogress, START_PROCESS_ICON_VP); + hal.watchdog_refresh(); + delay(100); + } + hal.watchdog_refresh(); + delay(500); + // delay(500); + // delay(500); + // delay(500); + + Update_Time_Value = RTS_UPDATE_VALUE; +} + + +int RTSSHOW::RTS_RecData(void) +{ + static int recnum = 0; //当前接收的数据偏移 + while((LCDSERIAL.available() > 0) && (recnum < SizeofDatabuf)) + { + delay(1); + databuf[recnum] = LCDSERIAL.read(); + if(databuf[0] == FHONE) + { + recnum++; + } + else if(databuf[0] == FHTWO) + { + databuf[0] = FHONE; + databuf[1] = FHTWO; + recnum += 2; + } + else if(databuf[0] == FHLENG) + { + databuf[0] = FHONE; + databuf[1] = FHTWO; + databuf[2] = FHLENG; + recnum += 3; + } + else if(databuf[0] == VarAddr_R) + { + databuf[0] = FHONE; + databuf[1] = FHTWO; + databuf[2] = FHLENG; + databuf[3] = VarAddr_R; + recnum += 4; + } + else + { + recnum = 0; + } + } + + // receive nothing + if(recnum < 1) + { + return -1; + } + else if((recdat.head[0] == databuf[0]) && (recdat.head[1] == databuf[1]) && (recnum > 2)) + { + recdat.len = databuf[2]; + recdat.command = databuf[3]; + // response for writing byte + if((recdat.len == 0x03) && ((recdat.command == 0x82) || (recdat.command == 0x80)) && (databuf[4] == 0x4F) && (databuf[5] == 0x4B)) + { + memset(databuf, 0, sizeof(databuf)); + recnum = 0; + return -1; + } + else if(recdat.command == 0x83) + { + // response for reading the data from the variate + recdat.addr = databuf[4]; + recdat.addr = (recdat.addr << 8) | databuf[5]; + recdat.bytelen = databuf[6]; + for(unsigned int i = 0; i < recdat.bytelen; i += 2) + { + recdat.data[i / 2] = databuf[7 + i]; + recdat.data[i / 2] = (recdat.data[i / 2] << 8) | databuf[8 + i]; + } + } + else if(recdat.command == 0x81) + { + // response for reading the page from the register + recdat.addr = databuf[4]; + recdat.bytelen = databuf[5]; + for(unsigned int i = 0; i < recdat.bytelen; i ++) + { + recdat.data[i] = databuf[6 + i]; + // recdat.data[i] = (recdat.data[i] << 8 )| databuf[7 + i]; + } + } + } + else + { + memset(databuf, 0, sizeof(databuf)); + recnum = 0; + // receive the wrong data + return -1; + } + memset(databuf, 0, sizeof(databuf)); + recnum = 0; + return 2; +} + +void RTSSHOW::RTS_SndData(void) +{ + if((snddat.head[0] == FHONE) && (snddat.head[1] == FHTWO) && (snddat.len >= 3)) + { + databuf[0] = snddat.head[0]; + databuf[1] = snddat.head[1]; + databuf[2] = snddat.len; + databuf[3] = snddat.command; + + // to write data to the register + if(snddat.command == 0x80) + { + databuf[4] = snddat.addr; + for(int i = 0;i <(snddat.len - 2);i ++) + { + databuf[5 + i] = snddat.data[i]; + } + } + else if((snddat.len == 3) && (snddat.command == 0x81)) + { + // to read data from the register + databuf[4] = snddat.addr; + databuf[5] = snddat.bytelen; + } + else if(snddat.command == 0x82) + { + // to write data to the variate + databuf[4] = snddat.addr >> 8; + databuf[5] = snddat.addr & 0xFF; + for(int i =0;i <(snddat.len - 3);i += 2) + { + databuf[6 + i] = snddat.data[i/2] >> 8; + databuf[7 + i] = snddat.data[i/2] & 0xFF; + } + } + else if((snddat.len == 4) && (snddat.command == 0x83)) + { + // to read data from the variate + databuf[4] = snddat.addr >> 8; + databuf[5] = snddat.addr & 0xFF; + databuf[6] = snddat.bytelen; + } + // usart_tx(LCDSERIAL.c_dev(), databuf, snddat.len + 3); + // LCDSERIAL.flush(); + for(int i = 0;i < (snddat.len + 3); i ++) + { + LCDSERIAL.write(databuf[i]); + delayMicroseconds(1); + } + + memset(&snddat, 0, sizeof(snddat)); + memset(databuf, 0, sizeof(databuf)); + snddat.head[0] = FHONE; + snddat.head[1] = FHTWO; + } +} + +void RTSSHOW::RTS_SndData(const String &s, unsigned long addr, unsigned char cmd /*= VarAddr_W*/) +{ + if(s.length() < 1) + { + return; + } + RTS_SndData(s.c_str(), addr, cmd); +} + +void RTSSHOW::RTS_SndData(const char *str, unsigned long addr, unsigned char cmd/*= VarAddr_W*/) +{ + int len = strlen(str); + if(len > 0) + { + databuf[0] = FHONE; + databuf[1] = FHTWO; + databuf[2] = 3 + len; + databuf[3] = cmd; + databuf[4] = addr >> 8; + databuf[5] = addr & 0x00FF; + for(int i = 0;i < len;i ++) + { + databuf[6 + i] = str[i]; + } + for(int i = 0;i < (len + 6);i ++) + { + LCDSERIAL.write(databuf[i]); + delayMicroseconds(1); + } + memset(databuf, 0, sizeof(databuf)); + } +} + +void RTSSHOW::RTS_SndData(char c, unsigned long addr, unsigned char cmd /*= VarAddr_W*/) +{ + snddat.command = cmd; + snddat.addr = addr; + snddat.data[0] = (unsigned long)c; + snddat.data[0] = snddat.data[0] << 8; + snddat.len = 5; + RTS_SndData(); +} + +void RTSSHOW::RTS_SndData(unsigned char *str, unsigned long addr, unsigned char cmd) { RTS_SndData((char *)str, addr, cmd); } + +void RTSSHOW::RTS_SndData(int n, unsigned long addr, unsigned char cmd /*= VarAddr_W*/) +{ + if (cmd == VarAddr_W) + { + if (n > 0xFFFF) + { + snddat.data[0] = n >> 16; + snddat.data[1] = n & 0xFFFF; + snddat.len = 7; + } + else + { + snddat.data[0] = n; + snddat.len = 5; + } + } + else if (cmd == RegAddr_W) + { + snddat.data[0] = n; + snddat.len = 3; + } + else if (cmd == VarAddr_R) + { + snddat.bytelen = n; + snddat.len = 4; + } + snddat.command = cmd; + snddat.addr = addr; + RTS_SndData(); +} + +void RTSSHOW::RTS_SndData(unsigned int n, unsigned long addr, unsigned char cmd) { RTS_SndData((int)n, addr, cmd); } + +void RTSSHOW::RTS_SndData(float n, unsigned long addr, unsigned char cmd) { RTS_SndData((int)n, addr, cmd); } + +void RTSSHOW::RTS_SndData(long n, unsigned long addr, unsigned char cmd) { RTS_SndData((unsigned long)n, addr, cmd); } + +void RTSSHOW::RTS_SndData(unsigned long n, unsigned long addr, unsigned char cmd /*= VarAddr_W*/) +{ + if (cmd == VarAddr_W) + { + if (n > 0xFFFF) + { + snddat.data[0] = n >> 16; + snddat.data[1] = n & 0xFFFF; + snddat.len = 7; + } + else + { + snddat.data[0] = n; + snddat.len = 5; + } + } + else if (cmd == VarAddr_R) + { + snddat.bytelen = n; + snddat.len = 4; + } + snddat.command = cmd; + snddat.addr = addr; + RTS_SndData(); +} + +void RTSSHOW::RTS_SDcard_Stop(void) +{ + // planner.synchronize(); + // card.endFilePrintNow(); + card.flag.abort_sd_printing = true; //card.flag.abort_sd_printing + queue.clear(); + if(home_flag) planner.synchronize(); + quickstop_stepper(); + // card.abortFilePrintNow(); + print_job_timer.stop(); + #if DISABLED(SD_ABORT_NO_COOLDOWN) + thermalManager.disable_all_heaters(); + #endif + print_job_timer.reset(); + thermalManager.setTargetHotend(0, 0); + RTS_SndData(0, HEAD_SET_TEMP_VP); + thermalManager.setTargetBed(0); + RTS_SndData(0, BED_SET_TEMP_VP); + temphot = 0; + thermalManager.zero_fan_speeds(); + wait_for_heatup = wait_for_user = false; + PoweroffContinue = false; + + // sd_printing_autopause = false; + if(CardReader::flag.mounted) + { + #if ENABLED(SDSUPPORT) && ENABLED(POWER_LOSS_RECOVERY) + card.removeJobRecoveryFile(); + #endif + } + + // shut down the stepper motor. + // queue.enqueue_now_P(PSTR("M84")); + RTS_SndData(1, MOTOR_FREE_ICON_VP); + + RTS_SndData(0, PRINT_PROCESS_ICON_VP); + RTS_SndData(0, PRINT_PROCESS_VP); + delay(2); + RTS_SndData(0, PRINT_REMAIN_TIME_HOUR_VP); + RTS_SndData(0, PRINT_REMAIN_TIME_MIN_VP); + + RTS_SndData(0, PRINT_TIME_HOUR_VP); + RTS_SndData(0, PRINT_TIME_MIN_VP); + + for(int j = 0;j < 20;j ++) + { + // clean screen. + RTS_SndData(0, PRINT_FILE_TEXT_VP + j); + // clean filename + RTS_SndData(0, SELECT_FILE_TEXT_VP + j); + } + planner.synchronize(); + RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + card.flag.abort_sd_printing = true; //card.flag.abort_sd_printing +} + + +void RTSSHOW::RTS_HandleData(void) +{ + int Checkkey = -1; + // for waiting + if(waitway > 0) + { + memset(&recdat, 0, sizeof(recdat)); + recdat.head[0] = FHONE; + recdat.head[1] = FHTWO; + return; + } + for(int i = 0;Addrbuf[i] != 0;i++) + { + if(recdat.addr == Addrbuf[i]) + { + if(Addrbuf[i] >= ChangePageKey) + { + Checkkey = i; + } + break; + } + } + + if(Checkkey < 0) + { + memset(&recdat, 0, sizeof(recdat)); + recdat.head[0] = FHONE; + recdat.head[1] = FHTWO; + return; + } + // SERIAL_ECHOPAIR("\nCheckkey=", Checkkey, "recdat.data[0]=", recdat.data[0]); + + switch(Checkkey) + { + case MainEnterKey: + if(recdat.data[0] == 1) + { + CardUpdate = true; + CardRecbuf.recordcount = -1; + RTS_SDCardUpate(); + RTS_SndData(ExchangePageBase + 2, ExchangepageAddr); + change_page_font = 2; + } + else if(recdat.data[0] == 2) + { + AxisUnitMode = 1; + axis_unit = 10.0; + + // if((!axis_is_trusted(X_AXIS)) || (!axis_is_trusted(Y_AXIS))){// + if(axes_should_home()) { + waitway = 4; + queue.enqueue_one_P(PSTR("G28")); + RTS_SndData(ExchangePageBase + 40, ExchangepageAddr); + change_page_font = 40; + }else{ + RTS_SndData(ExchangePageBase + 16, ExchangepageAddr); + change_page_font = 16; + RTS_SndData(10 * current_position[X_AXIS], AXIS_X_COORD_VP); + RTS_SndData(10 * current_position[Y_AXIS], AXIS_Y_COORD_VP); + RTS_SndData(10 * current_position[Z_AXIS], AXIS_Z_COORD_VP); + } + //RTS_SndData(1, FILAMENT_CONTROL_ICON_VP); + } + else if(recdat.data[0] == 3) + { + RTS_SndData(ExchangePageBase + 21, ExchangepageAddr); + change_page_font = 21; + } + else if(recdat.data[0] == 4) + { + RTS_SndData(ExchangePageBase + 25, ExchangepageAddr); + change_page_font = 25; + planner.synchronize(); + queue.enqueue_now_P(PSTR("G28\nG1 F200 Z0.0")); + //RTS_SndData(1, AUTO_BED_LEVEL_TITLE_VP); + RTS_SndData(0, MOTOR_FREE_ICON_VP); + } + else if(recdat.data[0] == 5) + { + // card.flag.abort_sd_printing = true; + queue.clear(); + quickstop_stepper(); + print_job_timer.stop(); + RTS_SndData(1, MOTOR_FREE_ICON_VP); + RTS_SndData(0, PRINT_PROCESS_ICON_VP); + RTS_SndData(0, PRINT_PROCESS_VP); + delay(2); + RTS_SndData(0, PRINT_TIME_HOUR_VP); + RTS_SndData(0, PRINT_TIME_MIN_VP); + RTS_SndData(0, PRINT_REMAIN_TIME_HOUR_VP); + RTS_SndData(0, PRINT_REMAIN_TIME_MIN_VP); + + print_job_timer.reset(); + // sd_printing_autopause = false; + for(int j = 0;j < 20;j ++) + { + // clean screen. + RTS_SndData(0, PRINT_FILE_TEXT_VP + j); + // clean filename + RTS_SndData(0, SELECT_FILE_TEXT_VP + j); + } + RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + } + else if(recdat.data[0] == 6) + { + waitway = 3; + RTS_SndData(1, AUTO_BED_LEVEL_TITLE_VP); + RTS_SndData(AUTO_BED_LEVEL_PREHEAT, AUTO_BED_PREHEAT_HEAD_DATA_VP); + // RTS_SndData(ExchangePageBase + 26, ExchangepageAddr); + // change_page_font = 26; + rtscheck.RTS_SndData(0 , AUTO_LEVELING_PERCENT_DATA_VP); + // thermalManager.setTargetHotend(AUTO_BED_LEVEL_PREHEAT, 0); + // //thermalManager.disable_all_heaters(); + // RTS_SndData(AUTO_BED_LEVEL_PREHEAT, HEAD_SET_TEMP_VP); + if(thermalManager.temp_hotend[0].celsius < (AUTO_BED_LEVEL_PREHEAT - 5)) + { + queue.enqueue_now_P(PSTR("G4 S40")); + } + + if(axes_should_home()) queue.enqueue_one_P(PSTR("G28")); + queue.enqueue_one_P(PSTR("G29")); + //queue.enqueue_one_P(PSTR("G28\nG29")); + + RTS_SndData(0, MOTOR_FREE_ICON_VP); + } + else if(recdat.data[0] == 7) + { + if(errorway == 1) + { + + } + else if(errorway == 2) + { + // auto home fail + } + else if(errorway == 3) + { + // bed leveling fail + } + else if(errorway == 4) + { + + } + } + else if(recdat.data[0] == 8) + { + RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + } + else if(recdat.data[0] == 9)// 暂停/停止 + { + RTS_SndData(ExchangePageBase + 11, ExchangepageAddr); + change_page_font = 11; + }else if(recdat.data[0] == 0x0A)// 继续/停止 + { + RTS_SndData(ExchangePageBase + 13, ExchangepageAddr); + change_page_font = 13; + } + break; + + case AdjustEnterKey: + if(recdat.data[0] == 1) + { + // thermalManager.fan_speed[0] ? RTS_SndData(1, PRINTER_FANOPEN_TITLE_VP) : RTS_SndData(0, PRINTER_FANOPEN_TITLE_VP); + + RTS_SndData(ExchangePageBase + 14, ExchangepageAddr); + change_page_font = 14; + } + else if(recdat.data[0] == 2) + { + // RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + // change_page_font = 10; + if(card.isPrinting()) + { + RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + change_page_font = 10; + } + else + { + RTS_SndData(ExchangePageBase + 12, ExchangepageAddr); + change_page_font = 12; + } + // settings.save(); + } + // else if(recdat.data[0] == 3) + // { + // if(thermalManager.fan_speed[0]) + // { + // RTS_SndData(1, PRINTER_FANOPEN_TITLE_VP); + // thermalManager.set_fan_speed(0, 0); + // } + // else + // { + // RTS_SndData(0, PRINTER_FANOPEN_TITLE_VP); + // thermalManager.set_fan_speed(0, 255); + // } + // } + // else if(recdat.data[0] == 4) + // { + // if(LEDStatus) + // { + // RTS_SndData(0, PRINTER_LEDOPEN_TITLE_VP); + // digitalWrite(LED_CONTROL_PIN, HIGH); + // LEDStatus = false; + // } + // else + // { + // RTS_SndData(1, PRINTER_LEDOPEN_TITLE_VP); + // digitalWrite(LED_CONTROL_PIN, LOW); + // LEDStatus = true; + // } + // } + else if(recdat.data[0] == 5) + { + RTS_SndData(ExchangePageBase + 15, ExchangepageAddr); + change_page_font = 15; + } + // else if(recdat.data[0] == 6) + // { + // if(flag_over_shutdown) + // { + // RTS_SndData(1, PRINTER_AUTO_SHUTDOWN_ICON_VP); + // flag_over_shutdown = false; + // } + // else + // { + // RTS_SndData(0, PRINTER_AUTO_SHUTDOWN_ICON_VP); + // flag_over_shutdown = true; + // } + // } + else if(recdat.data[0] == 7) + { + RTS_SndData(ExchangePageBase + 14, ExchangepageAddr); + change_page_font = 14; + settings.save(); + } + //���ӵĶ��ϼ�⿪��ʹ�ܰ�ť���� + // else if(recdat.data[0] == 8) + // { + // if(runout.enabled) + // { + // RTS_SndData(1, FILAMENT_CONTROL_ICON_VP); + // runout.enabled = false; + // } + // else + // { + // RTS_SndData(0, FILAMENT_CONTROL_ICON_VP); + // runout.enabled = true; + // } + // } + //���ӵĶϵ�����ʹ�ܰ�ť���� + // else if(recdat.data[0] == 9) + // { + // if(recovery.enabled) + // { + // RTS_SndData(1, POWERCONTINUE_CONTROL_ICON_VP); + // recovery.enabled = false; + // } + // else + // { + // RTS_SndData(0, POWERCONTINUE_CONTROL_ICON_VP); + // recovery.enabled = true; + // } + // } + break; + + case PrintSpeedEnterKey: + feedrate_percentage = recdat.data[0]; + RTS_SndData(feedrate_percentage, PRINT_SPEED_RATE_VP); + break; + + case StopPrintKey: + if(recdat.data[0] == 1) + { + RTS_SndData(ExchangePageBase + 13, ExchangepageAddr); + change_page_font = 13; + } + else if(recdat.data[0] == 2) + { + RTS_SndData(0, PRINT_TIME_HOUR_VP); + RTS_SndData(0, PRINT_TIME_MIN_VP); + Update_Time_Value = 0; + temphot = 0; + + runout.reset(); + wait_for_user = false; + + RTS_SndData(ExchangePageBase + 40, ExchangepageAddr); + change_page_font = 40; + RTS_SDcard_Stop(); + } + else if(recdat.data[0] == 3) + { + if(card.isPrinting()) + { + RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + change_page_font = 10; + } + else + { + RTS_SndData(ExchangePageBase + 12, ExchangepageAddr); + change_page_font = 12; + } + } + break; + + case PausePrintKey: + if(recdat.data[0] == 1) + { + if(card.isPrinting() && (thermalManager.temp_hotend[0].celsius > (thermalManager.temp_hotend[0].target - 5)) && (thermalManager.temp_bed.celsius > (thermalManager.temp_bed.target - 3))) + { + RTS_SndData(ExchangePageBase + 11, ExchangepageAddr); + change_page_font = 11; + } + else + { + RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + change_page_font = 10; + } + } + else if(recdat.data[0] == 2) + { + if(card.isPrinting() && (thermalManager.temp_hotend[0].celsius > (thermalManager.temp_hotend[0].target - 5)) && (thermalManager.temp_bed.celsius > (thermalManager.temp_bed.target - 3))) + { + } + else + { + RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + change_page_font = 10; + break; + } + + waitway = 1; + // pause_e = current_position[E_AXIS]; + if(!temphot) + { + temphot = thermalManager.temp_hotend[0].target; + } + // card.pauseSDPrint(); + // print_job_timer.pause(); + queue.inject_P(PSTR("M25")); + pause_action_flag = true; + Update_Time_Value = 0; + RTS_SndData(ExchangePageBase + 40, ExchangepageAddr); + change_page_font = 40; + planner.synchronize(); + sdcard_pause_check = false; + } + else if(recdat.data[0] == 3) + { + if(card.isPrinting()) + { + RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + change_page_font = 10; + } + else + { + RTS_SndData(ExchangePageBase + 12, ExchangepageAddr); + change_page_font = 12; + } + } + break; + + case ResumePrintKey: + if(recdat.data[0] == 1) + { + #if ENABLED(FILAMENT_RUNOUT_SENSOR) + if(1 == READ(FIL_RUNOUT_PIN)) + // if(runout.filament_ran_out) + { + RTS_SndData(ExchangePageBase + 7, ExchangepageAddr); + change_page_font = 7; + break; + } + #endif + + RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + change_page_font = 10; + + #if ENABLED(HAS_RESUME_CONTINUE) + if(wait_for_user) + { + wait_for_user = false; + } + else + #endif + { + planner.synchronize(); + memset(commandbuf, 0, sizeof(commandbuf)); + sprintf_P(commandbuf, PSTR("M109 S%i"), temphot); + queue.enqueue_one_now(commandbuf); + // card.startOrResumeFilePrinting(); + // print_job_timer.start(); + queue.inject_P(PSTR("M24")); + Update_Time_Value = 0; + sdcard_pause_check = true; + } + } + else if(recdat.data[0] == 2) + { + if(thermalManager.temp_hotend[0].target >= EXTRUDE_MINTEMP) + { + thermalManager.setTargetHotend(thermalManager.temp_hotend[0].target, 0); + } + else + { + thermalManager.setTargetHotend(200, 0); + } + #if ENABLED(FILAMENT_RUNOUT_SENSOR) + if(1 == READ(FIL_RUNOUT_PIN)) + // if(runout.filament_ran_out) + { + RTS_SndData(ExchangePageBase + 7, ExchangepageAddr); + change_page_font = 7; + } + else + { + #if ENABLED(FILAMENT_RUNOUT_SENSOR_DEBUG) + SERIAL_ECHOLNPAIR("\r\ncontinu run filament ", pause_menu_response); + #endif + RTS_SndData(ExchangePageBase + 8, ExchangepageAddr); + change_page_font = 8; + } + #endif + } + else if(recdat.data[0] == 3) + { + #if ENABLED(FILAMENT_RUNOUT_SENSOR) + if(1 == READ(FIL_RUNOUT_PIN)) + // if(runout.filament_ran_out) + { + RTS_SndData(ExchangePageBase + 7, ExchangepageAddr); + change_page_font = 7; + break; + } + #endif + + // pause_menu_response = PAUSE_RESPONSE_RESUME_PRINT; + // ui.pause_show_message(PAUSE_MESSAGE_RESUME); + // queue.inject_P(PSTR("M108")); + wait_for_user = false; + // runout.filament_ran_out = false; + runout.reset(); + + RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + change_page_font = 10; + + // card.startFileprint(); + print_job_timer.start(); + Update_Time_Value = 0; + sdcard_pause_check = true; + } + // else if(recdat.data[0] == 4) + // { + // if(!CardReader::flag.mounted) + // { + // CardUpdate = true; + // RTS_SDCardUpate(); + // // card.mount(); + // RTS_SndData(ExchangePageBase + 47, ExchangepageAddr); + // change_page_font = 47; + // } + // else + // { + // card.startFileprint(); + // print_job_timer.start(); + // Update_Time_Value = 0; + // sdcard_pause_check = true; + // sd_printing_autopause = false; + // RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + // change_page_font = 10; + // } + // } + break; + + case ZoffsetEnterKey: + last_zoffset = zprobe_zoffset; + if(recdat.data[0] >= 32768) + { + zprobe_zoffset = ((float)recdat.data[0] - 65536) / 100; + zprobe_zoffset -= 0.001; + } + else + { + zprobe_zoffset = ((float)recdat.data[0]) / 100; + zprobe_zoffset += 0.001; + } + if(WITHIN((zprobe_zoffset), Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) + { + babystep.add_mm(Z_AXIS, zprobe_zoffset - last_zoffset); + } + probe.offset.z = zprobe_zoffset; + // settings.save(); + break; + + case TempControlKey: + if(recdat.data[0] == 2) + { + RTS_SndData(ExchangePageBase + 20, ExchangepageAddr); + change_page_font = 20; + } + else if(recdat.data[0] == 3) + { + preheat_flag = PREHEAT_PLA; + temp_preheat_nozzle = ui.material_preset[0].hotend_temp; + temp_preheat_bed = ui.material_preset[0].bed_temp; + + RTS_SndData(ui.material_preset[0].hotend_temp, PREHEAT_PLA_SET_NOZZLE_TEMP_VP); + RTS_SndData(ui.material_preset[0].bed_temp, PREHEAT_PLA_SET_BED_TEMP_VP); + delay(2); + RTS_SndData(ExchangePageBase + 22, ExchangepageAddr); + change_page_font = 22; + } + else if(recdat.data[0] == 4) + { + preheat_flag = PREHEAT_ABS; + temp_preheat_nozzle = ui.material_preset[1].hotend_temp; + temp_preheat_bed = ui.material_preset[1].bed_temp; + + RTS_SndData(ui.material_preset[1].hotend_temp, PREHEAT_ABS_SET_NOZZLE_TEMP_VP); + RTS_SndData(ui.material_preset[1].bed_temp, PREHEAT_ABS_SET_BED_TEMP_VP); + delay(2); + RTS_SndData(ExchangePageBase + 23, ExchangepageAddr); + change_page_font = 23; + } + else if(recdat.data[0] == 5) + { + thermalManager.temp_hotend[0].target = ui.material_preset[0].hotend_temp; + thermalManager.setTargetHotend(thermalManager.temp_hotend[0].target, 0); + RTS_SndData(thermalManager.temp_hotend[0].target, HEAD_SET_TEMP_VP); + thermalManager.temp_bed.target = ui.material_preset[0].bed_temp; + thermalManager.setTargetBed(thermalManager.temp_bed.target); + RTS_SndData(thermalManager.temp_bed.target, BED_SET_TEMP_VP); + } + else if(recdat.data[0] == 6) + { + thermalManager.temp_hotend[0].target = ui.material_preset[1].hotend_temp; + thermalManager.setTargetHotend(thermalManager.temp_hotend[0].target, 0); + RTS_SndData(thermalManager.temp_hotend[0].target, HEAD_SET_TEMP_VP); + thermalManager.temp_bed.target = ui.material_preset[1].bed_temp; + thermalManager.setTargetBed(thermalManager.temp_bed.target); + RTS_SndData(thermalManager.temp_bed.target, BED_SET_TEMP_VP); + } + else if(recdat.data[0] == 7) + { + RTS_SndData(ExchangePageBase + 21, ExchangepageAddr); + change_page_font = 21; + } + else if(recdat.data[0] == 8) + { + RTS_SndData(ExchangePageBase + 20, ExchangepageAddr); + change_page_font = 20; + } + break; + + case CoolDownKey: + if(recdat.data[0] == 1) + { + thermalManager.setTargetHotend(0, 0); + RTS_SndData(0, HEAD_SET_TEMP_VP); + thermalManager.setTargetBed(0); + RTS_SndData(0, BED_SET_TEMP_VP); + thermalManager.fan_speed[0] = 255; + // RTS_SndData(0, PRINTER_FANOPEN_TITLE_VP); + } + else if(recdat.data[0] == 2) + { + RTS_SndData(ExchangePageBase + 21, ExchangepageAddr); + change_page_font = 21; + } + break; + + case HeaterTempEnterKey: + thermalManager.temp_hotend[0].target = recdat.data[0]; + thermalManager.setTargetHotend(thermalManager.temp_hotend[0].target, 0); + RTS_SndData(thermalManager.temp_hotend[0].target, HEAD_SET_TEMP_VP); + break; + + case HotBedTempEnterKey: + thermalManager.temp_bed.target = recdat.data[0]; + thermalManager.setTargetBed(thermalManager.temp_bed.target); + RTS_SndData(thermalManager.temp_bed.target, BED_SET_TEMP_VP); + break; + + case PrepareEnterKey: + if(recdat.data[0] == 1) + { + RTS_SndData(ExchangePageBase + 28, ExchangepageAddr); + change_page_font = 28; + } + else if(recdat.data[0] == 2) + { + RTS_SndData(ExchangePageBase + 33, ExchangepageAddr); + change_page_font = 33; + } + else if(recdat.data[0] == 3) + { + rtscheck.RTS_SndData(10 * current_position[X_AXIS], AXIS_X_COORD_VP); + rtscheck.RTS_SndData(10 * current_position[Y_AXIS], AXIS_Y_COORD_VP); + rtscheck.RTS_SndData(10 * current_position[Z_AXIS], AXIS_Z_COORD_VP); + delay(2); + RTS_SndData(ExchangePageBase + 16, ExchangepageAddr); + change_page_font = 16; + } + // else if(recdat.data[0] == 4) + // { + // OUT_WRITE(SHUTIDOWN_PIN, LOW); + // delay(2000); + // } + else if(recdat.data[0] == 5) + { + RTS_SndData(MACHINE_TYPE, MACHINE_TYPE_ABOUT_TEXT_VP); + RTS_SndData(FIRMWARE_VERSION, FIREWARE_VERSION_ABOUT_TEXT_VP); + // // 激光的版本已经在屏幕中写入UI版本号 + // #if ENABLED(LASER_FEATURE) + // // 20220223 屏幕版本改由屏幕工程设定 + // #else + // RTS_SndData(SCREEN_VERSION, PRINTER_DISPLAY_VERSION_TEXT_VP); + // #endif + RTS_SndData(HARDWARE_VERSION, HARDWARE_VERSION_ABOUT_TEXT_VP); + RTS_SndData(PRINT_SIZE, PRINTER_PRINTSIZE_TEXT_VP); + delay(5); + if(1 == lang) + { + RTS_SndData(CORP_WEBSITE_C, WEBSITE_ABOUT_TEXT_VP); + } + else + { + RTS_SndData(CORP_WEBSITE_E, WEBSITE_ABOUT_TEXT_VP); + } + RTS_SndData(ExchangePageBase + 24, ExchangepageAddr); + change_page_font = 24; + } + else if(recdat.data[0] == 6) + { + queue.enqueue_now_P(PSTR("M84")); + queue.enqueue_now_P(PSTR("G92.9Z0")); //rock_20211224 解决人为下降Z轴,导致撞平台的问题。 + RTS_SndData(1, MOTOR_FREE_ICON_VP); + } + else if(recdat.data[0] == 7) + { + RTS_SndData(ExchangePageBase + 43, ExchangepageAddr); + change_page_font = 43; + } + else if(recdat.data[0] == 8) + { + ui.material_preset[preheat_flag].hotend_temp = temp_preheat_nozzle; + ui.material_preset[preheat_flag].bed_temp = temp_preheat_bed; + + settings.save(); + RTS_SndData(ExchangePageBase + 21, ExchangepageAddr); + change_page_font = 21; + } + else if(recdat.data[0] == 9) + { + RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + } + else if(recdat.data[0] == 0xA) + { + RTS_SndData(ExchangePageBase + 42, ExchangepageAddr); + change_page_font = 42; + } + else if(recdat.data[0] == 0xB) + { + #if ENABLED(HAS_MENU_RESET_WIFI) + WIFI_STATE = PRESSED; + OUT_WRITE(RESET_WIFI_PIN, LOW); + #endif + (void)settings.reset(); + (void)settings.save(); + RTS_Init(); + RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + } + else if(recdat.data[0] == 0xC) + { + RTS_SndData(ExchangePageBase + 44, ExchangepageAddr); + change_page_font = 44; + } + else if(recdat.data[0] == 0xD) + { + settings.reset(); + settings.save(); + RTS_SndData(ExchangePageBase + 33, ExchangepageAddr); + change_page_font = 33; + } + else if(recdat.data[0] == 0xE) + { + if(!planner.has_blocks_queued()) + { + RTS_SndData(ExchangePageBase + 33, ExchangepageAddr); + change_page_font = 33; + } + } + else if(recdat.data[0] == 0xF) + { + RTS_SndData(ExchangePageBase + 21, ExchangepageAddr); + change_page_font = 21; + settings.save();delay(100); + } + else if(recdat.data[0] == 0x10) + { + RTS_SndData(ExchangePageBase + 25, ExchangepageAddr); + change_page_font = 25; + } + else if(recdat.data[0] == 0x11) + { + RTS_SndData(ExchangePageBase + 21, ExchangepageAddr); + change_page_font = 21; + } + break; + + case BedLevelKey: + if(recdat.data[0] == 1) + { + planner.synchronize(); + waitway = 6; + RTS_SndData(ExchangePageBase + 26, ExchangepageAddr); + change_page_font = 26; + + // 此处造成屏幕显示的位置与实际位置不符,注释掉 //20220310 zhangguanghua + // if((!axis_is_trusted(X_AXIS)) || (!axis_is_trusted(Y_AXIS))) //axis_is_trusted((AxisEnum)axis) if((!TEST(axis_known_position, X_AXIS)) || (!TEST(axis_known_position, Y_AXIS))) + // { + // queue.enqueue_now_P(PSTR("G28")); + // } + // else + // { + // queue.enqueue_now_P(PSTR("G28 Z10")); + // } + //queue.enqueue_now_P(PSTR("G1 F200 Z10.0")); + + // queue.enqueue_now_P(PSTR("G28")); + queue.enqueue_now_P(PSTR("G28")); + + // rtscheck.RTS_SndData(0, AXIS_Z_COORD_VP); + // queue.enqueue_now_P(PSTR("G28 Z10")); + + // RTS_SndData(0, MOTOR_FREE_ICON_VP); + rtscheck.RTS_SndData(0 , AUTO_LEVELING_PERCENT_DATA_VP); + Update_Time_Value = 0; + } + else if(recdat.data[0] == 2) + { + last_zoffset = zprobe_zoffset; + if(WITHIN((zprobe_zoffset + 0.01), -10.01, 10.01)) + { + #if ENABLED(HAS_LEVELING) + zprobe_zoffset = (zprobe_zoffset + 0.01); + zprobe_zoffset = zprobe_zoffset - 0.0001; + #endif + babystep.add_mm(Z_AXIS, zprobe_zoffset - last_zoffset); + probe.offset.z = zprobe_zoffset; + } + RTS_SndData(zprobe_zoffset * 100, AUTO_BED_LEVEL_ZOFFSET_VP); + } + else if(recdat.data[0] == 3) + { + last_zoffset = zprobe_zoffset; + if (WITHIN((zprobe_zoffset - 0.01), -10.01, 10.01)) + { + #if ENABLED(HAS_LEVELING) + zprobe_zoffset = (zprobe_zoffset - 0.01); + zprobe_zoffset = zprobe_zoffset + 0.0001; + #endif + babystep.add_mm(Z_AXIS, zprobe_zoffset - last_zoffset); + probe.offset.z = zprobe_zoffset; + } + RTS_SndData(zprobe_zoffset * 100, AUTO_BED_LEVEL_ZOFFSET_VP); + } + else if(recdat.data[0] == 4) + { + if(!planner.has_blocks_queued()) + { + RTS_SndData(ExchangePageBase + 25, ExchangepageAddr); + change_page_font = 25; + } + } + else if(recdat.data[0] == 5) + { + char cmd[20]; + + // Assitant Level , Centre 1 + if(!planner.has_blocks_queued()) + { + waitway = 4; + queue.enqueue_now_P(PSTR("G1 F600 Z3")); + // queue.enqueue_now_P(PSTR("G1 X110 Y110 F3000")); + + sprintf_P(cmd, "G1 X%d Y%d F3000", manual_level_5position[0][0],manual_level_5position[0][1]); + queue.enqueue_now_P(cmd); + // 提前提交轴数据到屏幕 + rtscheck.RTS_SndData(10 * manual_level_5position[0][0], AXIS_X_COORD_VP); + rtscheck.RTS_SndData(10 * manual_level_5position[0][1], AXIS_Y_COORD_VP); + + queue.enqueue_now_P(PSTR("G1 F600 Z0")); + rtscheck.RTS_SndData(10 * 0, AXIS_Z_COORD_VP); + + waitway = 0; + } + } + else if (recdat.data[0] == 6) + { + char cmd[20]; + // Assitant Level , Front Left 2 + if(!planner.has_blocks_queued()) + { + waitway = 4; + queue.enqueue_now_P(PSTR("G1 F600 Z3")); + + // queue.enqueue_now_P(PSTR("G1 X30 Y30 F3000")); + sprintf_P(cmd, "G1 X%d Y%d F3000", manual_level_5position[1][0],manual_level_5position[1][1]); + queue.enqueue_now_P(cmd); + // 提前提交轴数据到屏幕 + rtscheck.RTS_SndData(10 * manual_level_5position[1][0], AXIS_X_COORD_VP); + rtscheck.RTS_SndData(10 * manual_level_5position[1][1], AXIS_Y_COORD_VP); + + queue.enqueue_now_P(PSTR("G1 F600 Z0")); + rtscheck.RTS_SndData(10 * 0, AXIS_Z_COORD_VP); + waitway = 0; + } + } + else if (recdat.data[0] == 7) + { + char cmd[20]; + // Assitant Level , Front Right 3 + if(!planner.has_blocks_queued()) + { + waitway = 4; + queue.enqueue_now_P(PSTR("G1 F600 Z3")); + + // queue.enqueue_now_P(PSTR("G1 X190 Y30 F3000")); + sprintf_P(cmd, "G1 X%d Y%d F3000", manual_level_5position[2][0],manual_level_5position[2][1]); + queue.enqueue_now_P(cmd); + // 提前提交轴数据到屏幕 + rtscheck.RTS_SndData(10 * manual_level_5position[2][0], AXIS_X_COORD_VP); + rtscheck.RTS_SndData(10 * manual_level_5position[2][1], AXIS_Y_COORD_VP); + + queue.enqueue_now_P(PSTR("G1 F600 Z0")); + rtscheck.RTS_SndData(10 * 0, AXIS_Z_COORD_VP); + waitway = 0; + } + } + else if (recdat.data[0] == 8) + { + char cmd[20]; + // Assitant Level , Back Right 4 + if(!planner.has_blocks_queued()) + { + waitway = 4; + queue.enqueue_now_P(PSTR("G1 F600 Z3")); + // queue.enqueue_now_P(PSTR("G1 X190 Y190 F3000")); + sprintf_P(cmd, "G1 X%d Y%d F3000", manual_level_5position[3][0],manual_level_5position[3][1]); + queue.enqueue_now_P(cmd); + // 提前提交轴数据到屏幕 + rtscheck.RTS_SndData(10 * manual_level_5position[3][0], AXIS_X_COORD_VP); + rtscheck.RTS_SndData(10 * manual_level_5position[3][1], AXIS_Y_COORD_VP); + queue.enqueue_now_P(PSTR("G1 F600 Z0")); + rtscheck.RTS_SndData(10 * 0, AXIS_Z_COORD_VP); + + waitway = 0; + } + } + else if (recdat.data[0] == 9) + { + char cmd[20]; + // Assitant Level , Back Left 5 + if(!planner.has_blocks_queued()) + { + waitway = 4; + queue.enqueue_now_P(PSTR("G1 F600 Z3")); + + // queue.enqueue_now_P(PSTR("G1 X30 Y190 F3000")); + sprintf_P(cmd, "G1 X%d Y%d F3000", manual_level_5position[4][0],manual_level_5position[4][1]); + queue.enqueue_now_P(cmd); + // 提前提交轴数据到屏幕 + rtscheck.RTS_SndData(10 * manual_level_5position[4][0], AXIS_X_COORD_VP); + rtscheck.RTS_SndData(10 * manual_level_5position[4][1], AXIS_Y_COORD_VP); + + queue.enqueue_now_P(PSTR("G1 F600 Z0")); + rtscheck.RTS_SndData(10 * 0, AXIS_Z_COORD_VP); + + waitway = 0; + } + } + else if(recdat.data[0] == 0x0A) + { + if(!planner.has_blocks_queued()) + { + RTS_SndData(ExchangePageBase + 26, ExchangepageAddr); + change_page_font = 26; + } + } + RTS_SndData(0, MOTOR_FREE_ICON_VP); + break; + + case AutoHomeKey: + if(recdat.data[0] == 1) + { + AxisUnitMode = 1; + axis_unit = 10.0; + RTS_SndData(ExchangePageBase + 16, ExchangepageAddr); + change_page_font = 16; + RTS_SndData(3, MOVEAXIS_UNIT_ICON_VP); + } + else if(recdat.data[0] == 2) + { + AxisUnitMode = 2; + axis_unit = 1.0; + RTS_SndData(ExchangePageBase + 17, ExchangepageAddr); + change_page_font = 17; + RTS_SndData(2, MOVEAXIS_UNIT_ICON_VP); + } + else if(recdat.data[0] == 3) + { + AxisUnitMode = 3; + axis_unit = 0.1; + RTS_SndData(ExchangePageBase + 18, ExchangepageAddr); + change_page_font = 18; + RTS_SndData(1, MOVEAXIS_UNIT_ICON_VP); + } + else if(recdat.data[0] == 4) + { + waitway = 4; + RTS_SndData(ExchangePageBase + 40, ExchangepageAddr); + change_page_font = 40; + + queue.enqueue_now_P(PSTR("G28 X Y")); + Update_Time_Value = 0; + RTS_SndData(0, MOTOR_FREE_ICON_VP); + } + else if(recdat.data[0] == 5) + { + waitway = 4; + RTS_SndData(ExchangePageBase + 40, ExchangepageAddr); + change_page_font = 40; + + queue.enqueue_now_P(PSTR("G28")); + RTS_SndData(0, MOTOR_FREE_ICON_VP); + Update_Time_Value = 0; + } + break; + + case XaxismoveKey: + float x_min, x_max; + waitway = 4; + x_min = 0; + x_max = X_MAX_POS; + current_position[X_AXIS] = ((float)recdat.data[0]) / 10; + if(current_position[X_AXIS] < x_min) + { + current_position[X_AXIS] = x_min; + } + else if(current_position[X_AXIS] > x_max) + { + current_position[X_AXIS] = x_max; + } + RTS_line_to_current(X_AXIS); + RTS_SndData(10 * current_position[X_AXIS], AXIS_X_COORD_VP); + delay(1); + RTS_SndData(0, MOTOR_FREE_ICON_VP); + waitway = 0; + break; + + case YaxismoveKey: + float y_min, y_max; + waitway = 4; + y_min = 0; + y_max = Y_MAX_POS; + current_position[Y_AXIS] = ((float)recdat.data[0]) / 10; + if(current_position[Y_AXIS] < y_min) + { + current_position[Y_AXIS] = y_min; + } + else if(current_position[Y_AXIS] > y_max) + { + current_position[Y_AXIS] = y_max; + } + RTS_line_to_current(Y_AXIS); + RTS_SndData(10 * current_position[Y_AXIS], AXIS_Y_COORD_VP); + delay(1); + RTS_SndData(0, MOTOR_FREE_ICON_VP); + waitway = 0; + break; + + case ZaxismoveKey: + float z_min, z_max; + waitway = 4; + z_min = Z_MIN_POS; + z_max = Z_MAX_POS; + current_position[Z_AXIS] = ((float)recdat.data[0])/10; + if (current_position[Z_AXIS] < z_min) + { + current_position[Z_AXIS] = z_min; + } + else if (current_position[Z_AXIS] > z_max) + { + current_position[Z_AXIS] = z_max; + } + RTS_line_to_current(Z_AXIS); + RTS_SndData(10 * current_position[Z_AXIS], AXIS_Z_COORD_VP); + delay(1); + RTS_SndData(0, MOTOR_FREE_ICON_VP); + waitway = 0; + break; + + case HeaterLoadEnterKey: + FilamentLOAD = ((float)recdat.data[0]) / 10; + RTS_SndData(10 * FilamentLOAD, HEAD_FILAMENT_LOAD_DATA_VP); + if(!planner.has_blocks_queued()) + { + #if ENABLED(FILAMENT_RUNOUT_SENSOR) + if(1 == READ(FIL_RUNOUT_PIN)) + // if(runout.filament_ran_out) + { + RTS_SndData(ExchangePageBase + 46, ExchangepageAddr); + change_page_font = 46; + break; + } + #endif + current_position[E_AXIS] += FilamentLOAD; + + if((thermalManager.temp_hotend[0].target > EXTRUDE_MINTEMP) && (thermalManager.temp_hotend[0].celsius < (thermalManager.temp_hotend[0].celsius - 5))) + { + thermalManager.setTargetHotend(thermalManager.temp_hotend[0].target, 0); + RTS_SndData(thermalManager.temp_hotend[0].target, HEAD_SET_TEMP_VP); + // break; + } + else if((thermalManager.temp_hotend[0].target < EXTRUDE_MINTEMP) && (thermalManager.temp_hotend[0].celsius < (ChangeFilamentTemp - 5))) + { + thermalManager.setTargetHotend(ChangeFilamentTemp, 0); + RTS_SndData(ChangeFilamentTemp, HEAD_SET_TEMP_VP); + // break; + } + + while(ABS(thermalManager.degHotend(0) - thermalManager.degTargetHotend(0)) > TEMP_WINDOW) + { + idle(); + } + + //else + { + RTS_line_to_current(E_AXIS); + RTS_SndData(10 * FilamentLOAD, HEAD_FILAMENT_LOAD_DATA_VP); + planner.synchronize(); + } + } + break; + + case HeaterUnLoadEnterKey: + FilamentUnLOAD = ((float)recdat.data[0]) / 10; + RTS_SndData(10 * FilamentUnLOAD, HEAD_FILAMENT_UNLOAD_DATA_VP); + if(!planner.has_blocks_queued()) + { + #if ENABLED(FILAMENT_RUNOUT_SENSOR) + if(1 == READ(FIL_RUNOUT_PIN)) + // if(runout.filament_ran_out) + { + RTS_SndData(ExchangePageBase + 46, ExchangepageAddr); + change_page_font = 46; + break; + } + #endif + + current_position[E_AXIS] -= FilamentUnLOAD; + + if((thermalManager.temp_hotend[0].target > EXTRUDE_MINTEMP) && (thermalManager.temp_hotend[0].celsius < (thermalManager.temp_hotend[0].celsius - 5))) + { + thermalManager.setTargetHotend(thermalManager.temp_hotend[0].target, 0); + RTS_SndData(thermalManager.temp_hotend[0].target, HEAD_SET_TEMP_VP); + // break; + } + else if((thermalManager.temp_hotend[0].target < EXTRUDE_MINTEMP) && (thermalManager.temp_hotend[0].celsius < (ChangeFilamentTemp - 5))) + { + thermalManager.setTargetHotend(ChangeFilamentTemp, 0); + RTS_SndData(ChangeFilamentTemp, HEAD_SET_TEMP_VP); + // break; + } + // else + while(ABS(thermalManager.degHotend(0) - thermalManager.degTargetHotend(0)) > TEMP_WINDOW) + { + idle(); + } + + { + RTS_line_to_current(E_AXIS); + RTS_SndData(10 * FilamentUnLOAD, HEAD_FILAMENT_UNLOAD_DATA_VP); + planner.synchronize(); + } + } + break; + + case HeaterLoadStartKey: + if(recdat.data[0] == 1) + { + if(!planner.has_blocks_queued()) + { + #if ENABLED(FILAMENT_RUNOUT_SENSOR) + if(1 == READ(FIL_RUNOUT_PIN)) + // if(runout.filament_ran_out) + { + RTS_SndData(ExchangePageBase + 46, ExchangepageAddr); + change_page_font = 46; + break; + } + else if(rts_start_print) + { + RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + break; + } + #endif + + if((thermalManager.temp_hotend[0].target > EXTRUDE_MINTEMP) && (thermalManager.temp_hotend[0].celsius < (thermalManager.temp_hotend[0].celsius - 5))) + { + thermalManager.setTargetHotend(thermalManager.temp_hotend[0].target, 0); + RTS_SndData(thermalManager.temp_hotend[0].target, HEAD_SET_TEMP_VP); + break; + } + else if((thermalManager.temp_hotend[0].target < EXTRUDE_MINTEMP) && (thermalManager.temp_hotend[0].celsius < (ChangeFilamentTemp - 5))) + { + thermalManager.setTargetHotend(ChangeFilamentTemp, 0); + RTS_SndData(ChangeFilamentTemp, HEAD_SET_TEMP_VP); + break; + } + else + { + RTS_line_to_current(E_AXIS); + planner.synchronize(); + } + RTS_SndData(ExchangePageBase + 19, ExchangepageAddr); + change_page_font = 19; + } + } + else if(recdat.data[0] == 2) + { + if(!planner.has_blocks_queued()) + { + RTS_SndData(ExchangePageBase + 19, ExchangepageAddr); + change_page_font = 19; + } + } + else if(recdat.data[0] == 3) + { + RTS_SndData(ExchangePageBase + 19, ExchangepageAddr); + change_page_font = 19; + } + break; + + case SelectLanguageKey: + if(recdat.data[0] != 0) + { + lang = recdat.data[0]; + } + language_change_font = lang; + for(int i = 0;i < 9;i ++) + { + RTS_SndData(0, LANGUAGE_CHINESE_TITLE_VP + i); + } + RTS_SndData(1, LANGUAGE_CHINESE_TITLE_VP + (language_change_font - 1)); + languagedisplayUpdate(); + // settings.save(); + break; + + case PowerContinuePrintKey: + if(recdat.data[0] == 1) + { + + #if ENABLED(POWER_LOSS_RECOVERY) + if(recovery.info.recovery_flag) + { + power_off_type_yes = 1; + Update_Time_Value = 0; + RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + change_page_font = 10; + // recovery.resume(); + queue.enqueue_now_P(PSTR("M1000")); + + PoweroffContinue = true; + sdcard_pause_check = true; + zprobe_zoffset = probe.offset.z; + RTS_SndData(zprobe_zoffset * 100, AUTO_BED_LEVEL_ZOFFSET_VP); + RTS_SndData(feedrate_percentage, PRINT_SPEED_RATE_VP); + } + #elif ENABLED(CREALITY_POWER_LOSS) + if(pre01_power_loss.info.recovery_flag) + { + power_off_type_yes = 1; + Update_Time_Value = 0; + RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + change_page_font = 10; + pre01_power_loss.resume(); //�ָ�SD����ӡ + // queue.enqueue_now_P(PSTR("M1000")); + + PoweroffContinue = true; + sdcard_pause_check = true; + zprobe_zoffset = probe.offset.z; + RTS_SndData(zprobe_zoffset * 100, AUTO_BED_LEVEL_ZOFFSET_VP); + RTS_SndData(feedrate_percentage, PRINT_SPEED_RATE_VP); + } + #endif + } + else if(recdat.data[0] == 2) + { + Update_Time_Value = RTS_UPDATE_VALUE; + RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + RTS_SndData(0, PRINT_TIME_HOUR_VP); + RTS_SndData(0, PRINT_TIME_MIN_VP); + RTS_SndData(0, PRINT_REMAIN_TIME_HOUR_VP); + RTS_SndData(0, PRINT_REMAIN_TIME_MIN_VP); + + Update_Time_Value = 0; + RTS_SDcard_Stop(); + } + break; + + case PLAHeadSetEnterKey: + // ui.material_preset[0].hotend_temp = recdat.data[0]; + // RTS_SndData(ui.material_preset[0].hotend_temp, PREHEAT_PLA_SET_NOZZLE_TEMP_VP); + //int temp_preheat_nozzle = 0, temp_preheat__bed = 0; + temp_preheat_nozzle = recdat.data[0]; + RTS_SndData(temp_preheat_nozzle, PREHEAT_PLA_SET_NOZZLE_TEMP_VP); + break; + + case PLABedSetEnterKey: + // ui.material_preset[0].bed_temp = recdat.data[0]; + // RTS_SndData(ui.material_preset[0].bed_temp, PREHEAT_PLA_SET_BED_TEMP_VP); + temp_preheat_bed = recdat.data[0]; + RTS_SndData(temp_preheat_bed, PREHEAT_PLA_SET_BED_TEMP_VP); + + break; + + case ABSHeadSetEnterKey: + // ui.material_preset[1].hotend_temp = recdat.data[0]; + // RTS_SndData(ui.material_preset[1].hotend_temp, PREHEAT_ABS_SET_NOZZLE_TEMP_VP); + temp_preheat_nozzle = recdat.data[0]; + RTS_SndData(temp_preheat_nozzle, PREHEAT_ABS_SET_NOZZLE_TEMP_VP); + break; + + case ABSBedSetEnterKey: + // ui.material_preset[1].bed_temp = recdat.data[0]; + // RTS_SndData(ui.material_preset[1].bed_temp, PREHEAT_ABS_SET_BED_TEMP_VP); + + temp_preheat_bed = recdat.data[0]; + RTS_SndData(temp_preheat_bed, PREHEAT_ABS_SET_BED_TEMP_VP); + break; + + case StoreMemoryKey: + if(recdat.data[0] == 1) + { + rtscheck.RTS_SndData(ExchangePageBase + 37, ExchangepageAddr); + change_page_font = 37; + } + if(recdat.data[0] == 2) + { + queue.enqueue_now_P(PSTR("M502")); + rtscheck.RTS_SndData(ExchangePageBase + 33, ExchangepageAddr); + change_page_font = 33; + settings.save(); + RTS_SndData(default_max_feedrate[X_AXIS], MAX_VELOCITY_XAXIS_DATA_VP); + RTS_SndData(default_max_feedrate[Y_AXIS], MAX_VELOCITY_YAXIS_DATA_VP); + RTS_SndData(default_max_feedrate[Z_AXIS], MAX_VELOCITY_ZAXIS_DATA_VP); + RTS_SndData(default_max_feedrate[E_AXIS], MAX_VELOCITY_EAXIS_DATA_VP); + // delay(20); + + RTS_SndData(default_max_acceleration[X_AXIS], MAX_ACCEL_XAXIS_DATA_VP); + RTS_SndData(default_max_acceleration[Y_AXIS], MAX_ACCEL_YAXIS_DATA_VP); + RTS_SndData(default_max_acceleration[Z_AXIS], MAX_ACCEL_ZAXIS_DATA_VP); + RTS_SndData(default_max_acceleration[E_AXIS], MAX_ACCEL_EAXIS_DATA_VP); + // delay(20); + + RTS_SndData(default_max_jerk[X_AXIS] * 100, MAX_JERK_XAXIS_DATA_VP); + RTS_SndData(default_max_jerk[Y_AXIS] * 100, MAX_JERK_YAXIS_DATA_VP); + RTS_SndData(default_max_jerk[Z_AXIS] * 100, MAX_JERK_ZAXIS_DATA_VP); + RTS_SndData(default_max_jerk[E_AXIS] * 100, MAX_JERK_EAXIS_DATA_VP); + // delay(20); + + RTS_SndData(default_axis_steps_per_unit[X_AXIS] * 10, MAX_STEPSMM_XAXIS_DATA_VP); + RTS_SndData(default_axis_steps_per_unit[Y_AXIS] * 10, MAX_STEPSMM_YAXIS_DATA_VP); + RTS_SndData(default_axis_steps_per_unit[Z_AXIS] * 10, MAX_STEPSMM_ZAXIS_DATA_VP); + RTS_SndData(default_axis_steps_per_unit[E_AXIS] * 10, MAX_STEPSMM_EAXIS_DATA_VP); + // delay(20); + + RTS_SndData(default_nozzle_ptemp * 100, NOZZLE_TEMP_P_DATA_VP); + RTS_SndData(default_nozzle_itemp * 100, NOZZLE_TEMP_I_DATA_VP); + RTS_SndData(default_nozzle_dtemp * 100, NOZZLE_TEMP_D_DATA_VP); + delay(20); + RTS_SndData(default_hotbed_ptemp * 100, HOTBED_TEMP_P_DATA_VP); + RTS_SndData(default_hotbed_itemp * 100, HOTBED_TEMP_I_DATA_VP); + RTS_SndData(default_hotbed_dtemp * 10, HOTBED_TEMP_D_DATA_VP); + // delay(100); + } + else if(recdat.data[0] == 3) + { + rtscheck.RTS_SndData(ExchangePageBase + 33, ExchangepageAddr); + change_page_font = 33; + } + else if(recdat.data[0] == 4) + { + rtscheck.RTS_SndData(ExchangePageBase + 34, ExchangepageAddr); + change_page_font = 34; + } + else if(recdat.data[0] == 5) + { + rtscheck.RTS_SndData(ExchangePageBase + 39, ExchangepageAddr); + change_page_font = 39; + } + // else if(recdat.data[0] == 6) + // { + // if(wifi_enable_flag) + // { + // wifi_enable_flag = 0; + // queue.inject_P(PSTR("M115")); + // RTS_SndData(1, ADV_SETTING_WIFI_ICON_VP); + // settings.save(); + // } + // else + // { + // wifi_enable_flag = 1; + // queue.inject_P(PSTR("M115")); + // RTS_SndData(0, ADV_SETTING_WIFI_ICON_VP); + // settings.save(); + // } + // } + else if(recdat.data[0] == 7) + { + rtscheck.RTS_SndData(ExchangePageBase + 38, ExchangepageAddr); + change_page_font = 38; + } + else if(recdat.data[0] == 8) + { + rtscheck.RTS_SndData(ExchangePageBase + 36, ExchangepageAddr); + change_page_font = 36; + } + else if(recdat.data[0] == 9) + { + rtscheck.RTS_SndData(ExchangePageBase + 37, ExchangepageAddr); + change_page_font = 37; + } + else if(recdat.data[0] == 0x0A) + { + rtscheck.RTS_SndData(ExchangePageBase + 35, ExchangepageAddr); + change_page_font = 35; + } + else if(recdat.data[0] == 0x0B) + { + rtscheck.RTS_SndData(ExchangePageBase + 33, ExchangepageAddr); + change_page_font = 33; + settings.save(); + delay(100); + } + else if(recdat.data[0] == 0x0C) + { + rtscheck.RTS_SndData(ExchangePageBase + 34, ExchangepageAddr); + change_page_font = 34; + settings.save(); + delay(100); + } + else if(recdat.data[0] == 0x0D) + { + rtscheck.RTS_SndData(ExchangePageBase + 33, ExchangepageAddr); + change_page_font = 33; + // settings.save(); + // delay(100); + } + break; + + case FanSpeedEnterKey: + thermalManager.fan_speed[0] = recdat.data[0]; + RTS_SndData(thermalManager.fan_speed[0], FAN_SPEED_CONTROL_DATA_VP); + break; + + case VelocityXaxisEnterKey: + float velocity_xaxis; + velocity_xaxis = planner.settings.max_feedrate_mm_s[0]; + velocity_xaxis = recdat.data[0]; + RTS_SndData(velocity_xaxis, MAX_VELOCITY_XAXIS_DATA_VP); + planner.set_max_feedrate(X_AXIS, velocity_xaxis); + break; + + case VelocityYaxisEnterKey: + float velocity_yaxis; + velocity_yaxis = planner.settings.max_feedrate_mm_s[1]; + velocity_yaxis = recdat.data[0]; + RTS_SndData(velocity_yaxis, MAX_VELOCITY_YAXIS_DATA_VP); + planner.set_max_feedrate(Y_AXIS, velocity_yaxis); + break; + + case VelocityZaxisEnterKey: + float velocity_zaxis; + velocity_zaxis = planner.settings.max_feedrate_mm_s[2]; + velocity_zaxis = recdat.data[0]; + RTS_SndData(velocity_zaxis, MAX_VELOCITY_ZAXIS_DATA_VP); + planner.set_max_feedrate(Z_AXIS, velocity_zaxis); + break; + + case VelocityEaxisEnterKey: + float velocity_eaxis; + velocity_eaxis = planner.settings.max_feedrate_mm_s[3]; + velocity_eaxis = recdat.data[0]; + RTS_SndData(velocity_eaxis, MAX_VELOCITY_EAXIS_DATA_VP); + planner.set_max_feedrate(E_AXIS, velocity_eaxis); + break; + + + case AccelXaxisEnterKey: + float accel_xaxis; + accel_xaxis = planner.settings.max_acceleration_mm_per_s2[0]; + accel_xaxis = recdat.data[0]; + RTS_SndData(accel_xaxis, MAX_ACCEL_XAXIS_DATA_VP); + planner.set_max_acceleration(X_AXIS, accel_xaxis); + break; + + case AccelYaxisEnterKey: + float accel_yaxis; + accel_yaxis = planner.settings.max_acceleration_mm_per_s2[1]; + accel_yaxis = recdat.data[0]; + RTS_SndData(accel_yaxis, MAX_ACCEL_YAXIS_DATA_VP); + planner.set_max_acceleration(Y_AXIS, accel_yaxis); + break; + + case AccelZaxisEnterKey: + float accel_zaxis; + accel_zaxis = planner.settings.max_acceleration_mm_per_s2[2]; + accel_zaxis = recdat.data[0]; + RTS_SndData(accel_zaxis, MAX_ACCEL_ZAXIS_DATA_VP); + planner.set_max_acceleration(Z_AXIS, accel_zaxis); + break; + + case AccelEaxisEnterKey: + float accel_eaxis; + accel_eaxis = planner.settings.max_acceleration_mm_per_s2[3]; + accel_eaxis = recdat.data[0]; + RTS_SndData(accel_eaxis, MAX_ACCEL_EAXIS_DATA_VP); + planner.set_max_acceleration(E_AXIS, accel_eaxis); + break; + + case JerkXaxisEnterKey: + float jerk_xaxis; + jerk_xaxis = planner.max_jerk.x; + jerk_xaxis = (float)recdat.data[0] / 100; + RTS_SndData(jerk_xaxis * 100, MAX_JERK_XAXIS_DATA_VP); + planner.set_max_jerk(X_AXIS, jerk_xaxis); + break; + + case JerkYaxisEnterKey: + float jerk_yaxis; + jerk_yaxis = planner.max_jerk.y; + jerk_yaxis = (float)recdat.data[0] / 100; + RTS_SndData(jerk_yaxis * 100, MAX_JERK_YAXIS_DATA_VP); + planner.set_max_jerk(Y_AXIS, jerk_yaxis); + break; + + case JerkZaxisEnterKey: + float jerk_zaxis; + jerk_zaxis = planner.max_jerk.z; + jerk_zaxis = (float)recdat.data[0] / 100; + RTS_SndData(jerk_zaxis * 100, MAX_JERK_ZAXIS_DATA_VP); + planner.set_max_jerk(Z_AXIS, jerk_zaxis); + break; + + case JerkEaxisEnterKey: + float jerk_eaxis; + jerk_eaxis = planner.max_jerk.e; + jerk_eaxis = (float)recdat.data[0] / 100; + RTS_SndData(jerk_eaxis * 100, MAX_JERK_EAXIS_DATA_VP); + planner.set_max_jerk(E_AXIS, jerk_eaxis); + break; + + case StepsmmXaxisEnterKey: + float stepsmm_xaxis; + stepsmm_xaxis = planner.settings.axis_steps_per_mm[0]; + stepsmm_xaxis = (float)recdat.data[0] / 10; + RTS_SndData(stepsmm_xaxis * 10, MAX_STEPSMM_XAXIS_DATA_VP); + planner.settings.axis_steps_per_mm[X_AXIS] = stepsmm_xaxis; + break; + + case StepsmmYaxisEnterKey: + float stepsmm_yaxis; + stepsmm_yaxis = planner.settings.axis_steps_per_mm[1]; + stepsmm_yaxis = (float)recdat.data[0] / 10; + RTS_SndData(stepsmm_yaxis * 10, MAX_STEPSMM_YAXIS_DATA_VP); + planner.settings.axis_steps_per_mm[Y_AXIS] = stepsmm_yaxis; + break; + + case StepsmmZaxisEnterKey: + float stepsmm_zaxis; + stepsmm_zaxis = planner.settings.axis_steps_per_mm[2]; + stepsmm_zaxis = (float)recdat.data[0] / 10; + RTS_SndData(stepsmm_zaxis * 10, MAX_STEPSMM_ZAXIS_DATA_VP); + planner.settings.axis_steps_per_mm[Z_AXIS] = stepsmm_zaxis; + break; + + case StepsmmEaxisEnterKey: + float stepsmm_eaxis; + stepsmm_eaxis = planner.settings.axis_steps_per_mm[3]; + stepsmm_eaxis = (float)recdat.data[0] / 10; + RTS_SndData(stepsmm_eaxis * 10, MAX_STEPSMM_EAXIS_DATA_VP); + planner.settings.axis_steps_per_mm[E_AXIS] = stepsmm_eaxis; + break; + + case NozzlePTempEnterKey: + float nozzle_ptemp; + nozzle_ptemp = (float)recdat.data[0] / 100; + RTS_SndData(nozzle_ptemp * 100, NOZZLE_TEMP_P_DATA_VP); + PID_PARAM(Kp, 0) = nozzle_ptemp; + break; + + case NozzleITempEnterKey: + float nozzle_itemp; + nozzle_itemp = (float)recdat.data[0] / 100; + RTS_SndData(nozzle_itemp * 100, NOZZLE_TEMP_I_DATA_VP); + PID_PARAM(Ki, 0) = scalePID_i(nozzle_itemp); + break; + + case NozzleDTempEnterKey: + float nozzle_dtemp; + nozzle_dtemp = (float)recdat.data[0] / 100; + RTS_SndData(nozzle_dtemp * 100, NOZZLE_TEMP_D_DATA_VP); + PID_PARAM(Kd, 0) = scalePID_d(nozzle_dtemp); + break; + + case HotbedPTempEnterKey: + float hotbed_ptemp; + hotbed_ptemp = (float)recdat.data[0] / 100; + RTS_SndData(hotbed_ptemp * 100, HOTBED_TEMP_P_DATA_VP); + thermalManager.temp_bed.pid.Kp = hotbed_ptemp; + break; + + case HotbedITempEnterKey: + float hotbed_itemp; + hotbed_itemp = (float)recdat.data[0] / 100; + RTS_SndData(hotbed_itemp * 100, HOTBED_TEMP_I_DATA_VP); + thermalManager.temp_bed.pid.Ki = scalePID_i(hotbed_itemp); + break; + + case HotbedDTempEnterKey: + float hotbed_dtemp; + hotbed_dtemp = (float)recdat.data[0] / 10; + RTS_SndData(hotbed_dtemp * 10, HOTBED_TEMP_D_DATA_VP); + thermalManager.temp_bed.pid.Kd = scalePID_d(hotbed_dtemp); + break; + + case PrintFanSpeedkey: + uint8_t fan_speed; + fan_speed = (uint8_t)recdat.data[0]; + RTS_SndData(fan_speed , PRINTER_FAN_SPEED_DATA_VP); + thermalManager.set_fan_speed(0, fan_speed); + break; + + case SelectFileKey: + if (RTS_SD_Detected()) + { + if (recdat.data[0] > CardRecbuf.Filesum) + { + break; + } + + CardRecbuf.recordcount = recdat.data[0] - 1; + + for(int j = 0; j < 10; j ++) + { + RTS_SndData(0, SELECT_FILE_TEXT_VP + j); + } + delay(2); + for(int j = 1;j <= CardRecbuf.Filesum;j ++) + { + RTS_SndData((unsigned long)0x073F, FilenameNature + j * 16); + RTS_SndData(0, FILE1_SELECT_ICON_VP - 1 + j); + } + RTS_SndData((unsigned long)0xFFFF, FilenameNature + recdat.data[0] * 16); + RTS_SndData(1, FILE1_SELECT_ICON_VP + (recdat.data[0] - 1)); + } + + RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + rts_start_print = true; + delay(20); + RTS_SndData(CardRecbuf.Cardshowfilename[CardRecbuf.recordcount], SELECT_FILE_TEXT_VP); + break; + + case StartFileKey: + if((recdat.data[0] == 1) && RTS_SD_Detected()) + { + if(CardRecbuf.recordcount < 0) + { + break; + } + if(!rts_start_print) + { + //SERIAL_ECHOLNPAIR("\r\nrts_start_print: ", rts_start_print); + break; + } + + char cmd[30]; + char *c; + sprintf_P(cmd, PSTR("M23 %s"), CardRecbuf.Cardfilename[CardRecbuf.recordcount]); + for (c = &cmd[4]; *c; c++) + { + *c = tolower(*c); + } + + memset(cmdbuf, 0, sizeof(cmdbuf)); + strcpy(cmdbuf, cmd); + FilenamesCount = CardRecbuf.recordcount; + #if ENABLED(FILAMENT_RUNOUT_SENSOR) + if(1 == READ(FIL_RUNOUT_PIN)) + // if(runout.filament_ran_out) + { + RTS_SndData(ExchangePageBase + 46, ExchangepageAddr); + change_page_font = 46; + sdcard_pause_check = false; + break; + } + #endif + + rts_start_print = false; + + queue.enqueue_one_now(cmd); + delay(20); + queue.enqueue_now_P(PSTR("M24")); + // clean screen. + for (int j = 0; j < 20; j ++) + { + RTS_SndData(0, PRINT_FILE_TEXT_VP + j); + } + + RTS_SndData(CardRecbuf.Cardshowfilename[CardRecbuf.recordcount], PRINT_FILE_TEXT_VP); + + delay(2); + + #if ENABLED(BABYSTEPPING) + RTS_SndData(0, AUTO_BED_LEVEL_ZOFFSET_VP); + #endif + feedrate_percentage = 100; + RTS_SndData(feedrate_percentage, PRINT_SPEED_RATE_VP); + // zprobe_zoffset = last_zoffset; + zprobe_zoffset = probe.offset.z; + RTS_SndData(zprobe_zoffset * 100, AUTO_BED_LEVEL_ZOFFSET_VP); + PoweroffContinue = true; + RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + Update_Time_Value = 0; + } + else if(recdat.data[0] == 2) + { + RTS_SndData(ExchangePageBase + 3, ExchangepageAddr); + change_page_font = 3; + } + else if(recdat.data[0] == 3) + { + RTS_SndData(ExchangePageBase + 2, ExchangepageAddr); + change_page_font = 2; + } + else if(recdat.data[0] == 4) + { + RTS_SndData(ExchangePageBase + 4, ExchangepageAddr); + change_page_font = 4; + } + else if(recdat.data[0] == 5) + { + RTS_SndData(ExchangePageBase + 3, ExchangepageAddr); + change_page_font = 3; + } + else if(recdat.data[0] == 6) + { + RTS_SndData(ExchangePageBase + 5, ExchangepageAddr); + change_page_font = 5; + } + else if(recdat.data[0] == 7) + { + RTS_SndData(ExchangePageBase + 4, ExchangepageAddr); + change_page_font = 4; + } + else if(recdat.data[0] == 8) + { + RTS_SndData(ExchangePageBase + 5, ExchangepageAddr); //by jankin 20210731 + change_page_font = 5; + } + else if(recdat.data[0] == 9) + { + RTS_SndData(ExchangePageBase + 2, ExchangepageAddr); + change_page_font = 2; + } + else if(recdat.data[0] == 0x0A) + { + RTS_SndData(ExchangePageBase + 5, ExchangepageAddr); + change_page_font = 5; + } + break; + + case ChangePageKey: + for(int i = 0; i < MaxFileNumber; i ++) + { + for (int j = 0; j < 20; j ++) + { + RTS_SndData(0, FILE1_TEXT_VP + i * 20 + j); + } + } + + for (int i = 0; i < CardRecbuf.Filesum; i++) + { + for (int j = 0; j < 20; j++) + { + RTS_SndData(0, CardRecbuf.addr[i] + j); + } + RTS_SndData((unsigned long)0xFFFF, FilenameNature + (i + 1) * 16); + } + + for (int j = 0; j < 20; j ++) + { + // clean screen. + RTS_SndData(0, PRINT_FILE_TEXT_VP + j); + // clean filename + RTS_SndData(0, SELECT_FILE_TEXT_VP + j); + } + // clean filename Icon + for (int j = 0; j < 20; j ++) + { + RTS_SndData(0, FILE1_SELECT_ICON_VP + j); + } + + RTS_SndData(CardRecbuf.Cardshowfilename[CardRecbuf.recordcount], PRINT_FILE_TEXT_VP); + + // represents to update file list + // if (CardUpdate && lcd_sd_status && IS_SD_INSERTED()) + if (CardUpdate && lcd_sd_status && RTS_SD_Detected()) + { + for (uint16_t i = 0; i < CardRecbuf.Filesum; i++) + { + delay(3); + RTS_SndData(CardRecbuf.Cardshowfilename[i], CardRecbuf.addr[i]); + RTS_SndData((unsigned long)0xFFFF, FilenameNature + (i + 1) * 16); + RTS_SndData(0, FILE1_SELECT_ICON_VP + i); + } + } + + RTS_SndData(MACVERSION, MACHINE_TYPE_ABOUT_TEXT_VP); + RTS_SndData(SOFTVERSION, FIREWARE_VERSION_ABOUT_TEXT_VP); + RTS_SndData(PRINT_SIZE, PRINTER_PRINTSIZE_TEXT_VP); + + if(1 == lang) + { + RTS_SndData(CORP_WEBSITE_C, WEBSITE_ABOUT_TEXT_VP); + } + else + { + RTS_SndData(CORP_WEBSITE_E, WEBSITE_ABOUT_TEXT_VP); + } + + // if(thermalManager.fan_speed[0] == 0) + // { + // RTS_SndData(0, PRINTER_FANOPEN_TITLE_VP); + // } + // else + // { + // RTS_SndData(1, PRINTER_FANOPEN_TITLE_VP); + // } + + // if(LEDStatus) + // { + // RTS_SndData(1, PRINTER_LEDOPEN_TITLE_VP); + // } + // else + // { + // RTS_SndData(0, PRINTER_LEDOPEN_TITLE_VP); + // } + // Percentrecord = card.percentDone() + 1; + // if (Percentrecord <= 100) + // { + // rtscheck.RTS_SndData((unsigned char)Percentrecord, PRINT_PROCESS_ICON_VP); + + // } + rtscheck.RTS_SndData((unsigned char)card.percentDone(), PRINT_PROCESS_VP); + + RTS_SndData(zprobe_zoffset * 100, AUTO_BED_LEVEL_ZOFFSET_VP); + + RTS_SndData(feedrate_percentage, PRINT_SPEED_RATE_VP); + RTS_SndData(thermalManager.temp_hotend[0].target, HEAD_SET_TEMP_VP); + RTS_SndData(thermalManager.temp_bed.target, BED_SET_TEMP_VP); + languagedisplayUpdate(); + + RTS_SndData(change_page_font + ExchangePageBase, ExchangepageAddr); + break; + + #if HAS_CUTTER + case SwitchDeviceKey: + if(recdat.data[0] == 1)// FDM + { + RTS_SndData(ExchangePageBase + 57, ExchangepageAddr); + //change_page_font = 57; + }else if(recdat.data[0] == 2) // Laser + { + RTS_SndData(ExchangePageBase + 56, ExchangepageAddr); + //change_page_font = 56; + }else if(recdat.data[0] == 0x03)// 切换到FDM 确认 + { + if(change_page_font == 64) + { + RTS_SndData(ExchangePageBase + 33, ExchangepageAddr); + change_page_font = 33; + }else{ + RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + } + laser_device.set_current_device(DEVICE_FDM); + }else if(recdat.data[0] == 0x04)// 切换到FDM 取消 + { + if(change_page_font == 64) + { + RTS_SndData(ExchangePageBase + 64, ExchangepageAddr); + change_page_font = 64; + }else{ + RTS_SndData(ExchangePageBase + 50, ExchangepageAddr); + } + }else if(recdat.data[0] == 0x05)// 切换到激光 确定 + { + uint8_t language; // 此处不改变语言 + RTS_SndData(ExchangePageBase + 77, ExchangepageAddr); + //change_page_font = 77; + laser_device.set_current_device(DEVICE_LASER); + language = language_change_font; + settings.reset(); + language_change_font = language; + settings.save(); + probe.offset.z = zprobe_zoffset = 0; + RTS_SndData(zprobe_zoffset * 100, AUTO_BED_LEVEL_ZOFFSET_VP); + + // queue.inject_P(PSTR("M999")); + queue.enqueue_now_P(PSTR("M999\nG92.9 Z0")); + + planner.synchronize(); + // 同步当前位置到 显示控件 + RTS_SndData(0, SW_FOCUS_Z_VP); + laser_device.laser_power_open(); + }else if(recdat.data[0] == 0x06)// 切换到激光 取消 + { + if(change_page_font == 33){ + RTS_SndData(ExchangePageBase + 33, ExchangepageAddr); + change_page_font = 33; + }else{ + RTS_SndData(ExchangePageBase + 50, ExchangepageAddr); + change_page_font = 50; + } + } + // else if(recdat.data[0] == 8) //调整焦距 √ + // { + // queue.inject_P(PSTR("G92.9 Z0")); + // RTS_SndData(0, AXIS_Z_COORD_VP); + // RTS_SndData(0, SW_FOCUS_Z_VP); + // SERIAL_ECHOPAIR("\nchange_page_font=",change_page_font); + // if(change_page_font == 64){ + // RTS_SndData(ExchangePageBase + 64, ExchangepageAddr); + // change_page_font = 64; + // }else{ + // RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); + // change_page_font = 51; + // } + // } + else if(recdat.data[0] == 0x0B)// 切换到激光 + { + RTS_SndData(ExchangePageBase + 56, ExchangepageAddr); + //change_page_font = 56; + } + break; + #endif + case ErrorKey: + { + if(recdat.data[0] == 1) + { + if(printingIsActive()) + { + RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + change_page_font = 10; + } + else if(printingIsPaused()) + { + SERIAL_ECHOPGM("\ncase ErrorKey:", recdat.data[0]); + RTS_SndData(ExchangePageBase + 12, ExchangepageAddr); + change_page_font = 12; + } + else + { + RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + } + + if(errorway == 4) + { + // reboot + SERIAL_ECHOPGM("\ncase ErrorKey:", "LCD wants a reboot"); + hal.reboot(); + } + } + } + break; + + default: + break; + } + memset(&recdat, 0, sizeof(recdat)); + recdat.head[0] = FHONE; + recdat.head[1] = FHTWO; +} + +void EachMomentUpdate(void) +{ + millis_t ms = millis(); + if(ms > next_rts_update_ms) + { + #if ENABLED(POWER_LOSS_RECOVERY) + // print the file before the power is off. + if((power_off_type_yes == 0) && lcd_sd_status && (recovery.info.recovery_flag == true)) + { + rtscheck.RTS_SndData(ExchangePageBase, ExchangepageAddr); + if(startprogress < 100) + { + rtscheck.RTS_SndData(startprogress, START_PROCESS_ICON_VP); + } + // delay(30); + if((startprogress += 1) > 100) + { + rtscheck.RTS_SndData(StartSoundSet, SoundAddr); + power_off_type_yes = 1; + for(uint16_t i = 0;i < CardRecbuf.Filesum;i ++) + { + if(!strcmp(CardRecbuf.Cardfilename[i], &recovery.info.sd_filename[1])) + { + rtscheck.RTS_SndData(CardRecbuf.Cardshowfilename[i], PRINT_FILE_TEXT_VP); + rtscheck.RTS_SndData(CardRecbuf.Cardshowfilename[i], SELECT_FILE_TEXT_VP); + rtscheck.RTS_SndData(ExchangePageBase + 27, ExchangepageAddr); + change_page_font = 27; + break; + } + } + } + return; + } + #elif ENABLED(CREALITY_POWER_LOSS) + // print the file before the power is off. + if((power_off_type_yes == 0) && lcd_sd_status && (pre01_power_loss.info.recovery_flag == true)) + { + rtscheck.RTS_SndData(ExchangePageBase, ExchangepageAddr); + if(startprogress < 100) + { + rtscheck.RTS_SndData(startprogress, START_PROCESS_ICON_VP); + } + // delay(30); + if((startprogress += 1) > 100) + { + rtscheck.RTS_SndData(StartSoundSet, SoundAddr); + power_off_type_yes = 1; + for(uint16_t i = 0;i < CardRecbuf.Filesum;i ++) + { + if(!strcmp(CardRecbuf.Cardfilename[i], &pre01_power_loss.info.sd_filename[1])) + { + rtscheck.RTS_SndData(CardRecbuf.Cardshowfilename[i], PRINT_FILE_TEXT_VP); + rtscheck.RTS_SndData(CardRecbuf.Cardshowfilename[i], SELECT_FILE_TEXT_VP); + rtscheck.RTS_SndData(ExchangePageBase + 27, ExchangepageAddr); + change_page_font = 27; + break; + } + } + } + return; + } + #endif + + #if ENABLED(POWER_LOSS_RECOVERY) + else if((power_off_type_yes == 0) && (recovery.info.recovery_flag == false)) + { + rtscheck.RTS_SndData(ExchangePageBase, ExchangepageAddr); + if(startprogress < 100) + { + rtscheck.RTS_SndData(startprogress, START_PROCESS_ICON_VP); + } + // delay(30); + if((startprogress += 1) > 100) + { + rtscheck.RTS_SndData(StartSoundSet, SoundAddr); + power_off_type_yes = 1; + Update_Time_Value = RTS_UPDATE_VALUE; + + #if HAS_CUTTER + if(laser_device.is_laser_device()){ + rtscheck.RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); + change_page_font = 51; + }else if(laser_device.get_current_device()== DEVICE_UNKNOWN){ + rtscheck.RTS_SndData(ExchangePageBase + 50, ExchangepageAddr); + change_page_font = 50; + }else + #endif + { + rtscheck.RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + } + } + + return; + } + else + { + // need to optimize + // if(recovery.info.print_job_elapsed != 0) + // { + // duration_t elapsed = print_job_timer.duration(); + // static unsigned char last_cardpercentValue = 100; + // rtscheck.RTS_SndData(elapsed.value / 3600, PRINT_TIME_HOUR_VP); + // rtscheck.RTS_SndData((elapsed.value % 3600) / 60, PRINT_TIME_MIN_VP); + static unsigned char last_cardpercentValue = 100; + if(card.isPrinting() && (last_cardpercentValue != card.percentDone())) + { + // duration_t elapsed = print_job_timer.duration(); + // rtscheck.RTS_SndData(elapsed.value / 3600, PRINT_TIME_HOUR_VP); + // rtscheck.RTS_SndData((elapsed.value % 3600) / 60, PRINT_TIME_MIN_VP); + if((unsigned char) card.percentDone() > 0) + { + Percentrecord = card.percentDone(); + if(Percentrecord <= 100) + { + rtscheck.RTS_SndData((unsigned char)Percentrecord, PRINT_PROCESS_ICON_VP); + } + } + else + { + rtscheck.RTS_SndData(0, PRINT_PROCESS_ICON_VP); + } + rtscheck.RTS_SndData((unsigned char)card.percentDone(), PRINT_PROCESS_VP); + last_cardpercentValue = card.percentDone(); + rtscheck.RTS_SndData(10 * current_position[Z_AXIS], AXIS_Z_COORD_VP); + } + else if(card.isPrinting()) + { + duration_t elapsed = print_job_timer.duration(); + Percentrecord = card.percentDone(); + + rtscheck.RTS_SndData(elapsed.value / 3600, PRINT_TIME_HOUR_VP); + rtscheck.RTS_SndData((elapsed.value % 3600) / 60, PRINT_TIME_MIN_VP); + + //剩余时间计算 + if(Percentrecord<2) //使用gcode中 读取到的时间 - 已打印时间 + { + //文件中- elapsed + rtscheck.RTS_SndData(0, PRINT_REMAIN_TIME_HOUR_VP); + rtscheck.RTS_SndData(0, PRINT_REMAIN_TIME_MIN_VP); + }else{ + int _remain_time = 0; + _remain_time = ((elapsed.value) * ((float)card.getFileSize() / (float)card.getIndex())) - (elapsed.value); + + if(_remain_time < 0) _remain_time = 0; + rtscheck.RTS_SndData(_remain_time / 3600, PRINT_REMAIN_TIME_HOUR_VP); + rtscheck.RTS_SndData((_remain_time % 3600) / 60, PRINT_REMAIN_TIME_MIN_VP); + } + } + // } + + if(pause_action_flag && (false == sdcard_pause_check) && printingIsPaused() && !planner.has_blocks_queued()) + { + pause_action_flag = false; + queue.enqueue_now_P(PSTR("G0 F3000 X0 Y0")); + thermalManager.setTargetHotend(0, 0); + rtscheck.RTS_SndData(0, HEAD_SET_TEMP_VP); + } + + rtscheck.RTS_SndData(thermalManager.temp_hotend[0].celsius, HEAD_CURRENT_TEMP_VP); + rtscheck.RTS_SndData(thermalManager.temp_bed.celsius, BED_CURRENT_TEMP_VP); + + #if ENABLED(SDSUPPORT) + // if(PoweroffContinue == true) + // { + // if(true == sdcard_pause_check) + // { + // if(!CardReader::flag.mounted) + // { + // card.pauseSDPrint(); + // print_job_timer.pause(); + // Update_Time_Value = 0; + // rtscheck.RTS_SndData(ExchangePageBase + 47, ExchangepageAddr); + // change_page_font = 47; + // sdcard_pause_check = false; + // } + // } + // } + + if((false == sdcard_pause_check) && (false == card.isPrinting()) && !planner.has_blocks_queued()) + { + if(CardReader::flag.mounted) + { + rtscheck.RTS_SndData(1, CHANGE_SDCARD_ICON_VP); + } + else + { + rtscheck.RTS_SndData(0, CHANGE_SDCARD_ICON_VP); + } + } + #endif + + if((last_target_temperature[0] != thermalManager.temp_hotend[0].target) || (last_target_temperature_bed != thermalManager.temp_bed.target)) + { + thermalManager.setTargetHotend(thermalManager.temp_hotend[0].target, 0); + thermalManager.setTargetBed(thermalManager.temp_bed.target); + rtscheck.RTS_SndData(thermalManager.temp_hotend[0].target, HEAD_SET_TEMP_VP); + rtscheck.RTS_SndData(thermalManager.temp_bed.target, BED_SET_TEMP_VP); + last_target_temperature[0] = thermalManager.temp_hotend[0].target; + last_target_temperature_bed = thermalManager.temp_bed.target; + } + + if((thermalManager.temp_hotend[0].celsius >= thermalManager.temp_hotend[0].target) && (heatway == 1)) + { + rtscheck.RTS_SndData(ExchangePageBase + 19, ExchangepageAddr); + change_page_font = 19; + heatway = 0; + rtscheck.RTS_SndData(10 * FilamentLOAD, HEAD_FILAMENT_LOAD_DATA_VP); + rtscheck.RTS_SndData(10 * FilamentUnLOAD, HEAD_FILAMENT_UNLOAD_DATA_VP); + } + #if ENABLED(FILAMENT_RUNOUT_SENSOR) + if(1 == READ(FIL_RUNOUT_PIN)) + // if(runout.filament_ran_out) + { + rtscheck.RTS_SndData(0, FILAMENT_LOAD_ICON_VP); + } + else + { + rtscheck.RTS_SndData(1, FILAMENT_LOAD_ICON_VP); + } + #endif + rtscheck.RTS_SndData(thermalManager.fan_speed[0] , PRINTER_FAN_SPEED_DATA_VP); + } + #elif ENABLED(CREALITY_POWER_LOSS) + else if((power_off_type_yes == 0) && (pre01_power_loss.info.recovery_flag == false)) + { + rtscheck.RTS_SndData(ExchangePageBase, ExchangepageAddr); + if(startprogress < 100) + { + rtscheck.RTS_SndData(startprogress, START_PROCESS_ICON_VP); + } + // delay(30); + if((startprogress += 1) > 100) + { + rtscheck.RTS_SndData(StartSoundSet, SoundAddr); + power_off_type_yes = 1; + Update_Time_Value = RTS_UPDATE_VALUE; + + if(laser_device.is_laser_device()){ + rtscheck.RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); + change_page_font = 51; + }else if(laser_device.get_current_device()== DEVICE_UNKNOWN){ + rtscheck.RTS_SndData(ExchangePageBase + 50, ExchangepageAddr); + change_page_font = 0; + }else{ + rtscheck.RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + } + // rtscheck.RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); + // change_page_font = 51; + } + return; + } + else + { + // need to optimize + // if(pre01_power_loss.info.print_job_elapsed != 0) + // { + // duration_t elapsed = print_job_timer.duration(); + // static unsigned char last_cardpercentValue = 100; + // rtscheck.RTS_SndData(elapsed.value / 3600, PRINT_TIME_HOUR_VP); + // rtscheck.RTS_SndData((elapsed.value % 3600) / 60, PRINT_TIME_MIN_VP); + static unsigned char last_cardpercentValue = 100; + if(card.isPrinting() && (last_cardpercentValue != card.percentDone())) + { + duration_t elapsed = print_job_timer.duration(); + + rtscheck.RTS_SndData(elapsed.value / 3600, PRINT_TIME_HOUR_VP); + rtscheck.RTS_SndData((elapsed.value % 3600) / 60, PRINT_TIME_MIN_VP); + if((unsigned char) card.percentDone() > 0) + { + Percentrecord = card.percentDone(); + if(Percentrecord <= 100) + { + rtscheck.RTS_SndData((unsigned char)Percentrecord, PRINT_PROCESS_ICON_VP); + } + } + else + { + rtscheck.RTS_SndData(0, PRINT_PROCESS_ICON_VP); + } + rtscheck.RTS_SndData((unsigned char)card.percentDone(), PRINT_PROCESS_VP); + last_cardpercentValue = card.percentDone(); + rtscheck.RTS_SndData(10 * current_position[Z_AXIS], AXIS_Z_COORD_VP); + } + // } + + if(pause_action_flag && (false == sdcard_pause_check) && printingIsPaused() && !planner.has_blocks_queued()) + { + pause_action_flag = false; + queue.enqueue_now_P(PSTR("G0 F3000 X0 Y0")); + thermalManager.setTargetHotend(0, 0); + rtscheck.RTS_SndData(0, HEAD_SET_TEMP_VP); + } + + rtscheck.RTS_SndData(thermalManager.temp_hotend[0].celsius, HEAD_CURRENT_TEMP_VP); + rtscheck.RTS_SndData(thermalManager.temp_bed.celsius, BED_CURRENT_TEMP_VP); + + #if ENABLED(SDSUPPORT) + // if(PoweroffContinue == true) + // { + // if(true == sdcard_pause_check) + // { + // if(!CardReader::flag.mounted) + // { + // card.pauseSDPrint(); + // print_job_timer.pause(); + // Update_Time_Value = 0; + // rtscheck.RTS_SndData(ExchangePageBase + 47, ExchangepageAddr); + // change_page_font = 47; + // sdcard_pause_check = false; + // } + // } + // } + + if((false == sdcard_pause_check) && (false == card.isPrinting()) && !planner.has_blocks_queued()) + { + if(CardReader::flag.mounted) + { + rtscheck.RTS_SndData(1, CHANGE_SDCARD_ICON_VP); + } + else + { + rtscheck.RTS_SndData(0, CHANGE_SDCARD_ICON_VP); + } + } + #endif + + if((last_target_temperature[0] != thermalManager.temp_hotend[0].target) || (last_target_temperature_bed != thermalManager.temp_bed.target)) + { + thermalManager.setTargetHotend(thermalManager.temp_hotend[0].target, 0); + thermalManager.setTargetBed(thermalManager.temp_bed.target); + rtscheck.RTS_SndData(thermalManager.temp_hotend[0].target, HEAD_SET_TEMP_VP); + rtscheck.RTS_SndData(thermalManager.temp_bed.target, BED_SET_TEMP_VP); + last_target_temperature[0] = thermalManager.temp_hotend[0].target; + last_target_temperature_bed = thermalManager.temp_bed.target; + } + + if((thermalManager.temp_hotend[0].celsius >= thermalManager.temp_hotend[0].target) && (heatway == 1)) + { + rtscheck.RTS_SndData(ExchangePageBase + 19, ExchangepageAddr); + change_page_font = 19; + heatway = 0; + rtscheck.RTS_SndData(10 * FilamentLOAD, HEAD_FILAMENT_LOAD_DATA_VP); + rtscheck.RTS_SndData(10 * FilamentUnLOAD, HEAD_FILAMENT_UNLOAD_DATA_VP); + } + #if ENABLED(FILAMENT_RUNOUT_SENSOR) + if(1 == READ(FIL_RUNOUT_PIN)) + // if(runout.filament_ran_out) + { + rtscheck.RTS_SndData(0, FILAMENT_LOAD_ICON_VP); + } + else + { + rtscheck.RTS_SndData(1, FILAMENT_LOAD_ICON_VP); + } + #endif + rtscheck.RTS_SndData(thermalManager.fan_speed[0] , PRINTER_FAN_SPEED_DATA_VP); + } + #endif + + next_rts_update_ms = ms + RTS_UPDATE_INTERVAL + Update_Time_Value; + } +} + +void RTSSHOW::languagedisplayUpdate(void) +{ + RTS_SndData(lang, MAIN_PAGE_BLUE_TITLE_VP); + RTS_SndData(lang, SELECT_FILE_BLUE_TITLE_VP); + RTS_SndData(lang, PREPARE_PAGE_BLUE_TITLE_VP); + RTS_SndData(lang, SETTING_PAGE_BLUE_TITLE_VP); + RTS_SndData(lang, MAIN_PAGE_BLACK_TITLE_VP); + RTS_SndData(lang, SELECT_FILE_BLACK_TITLE_VP); + RTS_SndData(lang, PREPARE_PAGE_BLACK_TITLE_VP); + RTS_SndData(lang, SETTING_PAGE_BLACK_TITLE_VP); + + RTS_SndData(lang, PRINT_ADJUST_MENT_TITLE_VP); + RTS_SndData(lang, PRINT_SPEED_TITLE_VP); + RTS_SndData(lang, HEAD_SET_TITLE_VP); + RTS_SndData(lang, BED_SET_TITLE_VP); + RTS_SndData(lang, LEVEL_ZOFFSET_TITLE_VP); + RTS_SndData(lang, FAN_CONTROL_TITLE_VP); + RTS_SndData(lang, LED_CONTROL_TITLE_VP); + + RTS_SndData(lang, MOVE_AXIS_ENTER_GREY_TITLE_VP); + RTS_SndData(lang, CHANGE_FILAMENT_GREY_TITLE_VP); + RTS_SndData(lang, PREHAET_PAGE_GREY_TITLE_VP); + RTS_SndData(lang, MOVE_AXIS_ENTER_BLACK_TITLE_VP); + RTS_SndData(lang, CHANGE_FILAMENT_BLACK_TITLE_VP); + RTS_SndData(lang, PREHAET_PAGE_BLACK_TITLE_VP); + + RTS_SndData(lang, PREHEAT_PLA_BUTTON_TITLE_VP); + RTS_SndData(lang, PREHEAT_ABS_BUTTON_TITLE_VP); + RTS_SndData(lang, COOL_DOWN_BUTTON_TITLE_VP); + + RTS_SndData(lang, FILAMENT_LOAD_BUTTON_TITLE_VP); + RTS_SndData(lang, FILAMENT_UNLOAD_BUTTON_TITLE_VP); + + RTS_SndData(lang, LANGUAGE_SELECT_ENTER_VP); + RTS_SndData(lang, FACTORY_DEFAULT_ENTER_TITLE_VP); + RTS_SndData(lang, LEVELING_PAGE_TITLE_VP); + + RTS_SndData(lang, PRINTER_DEVICE_GREY_TITLE_VP); + RTS_SndData(lang, PRINTER_ADVINFO_GREY_TITLE_VP); + RTS_SndData(lang, PRINTER_INFO_ENTER_GREY_TITLE_VP); + RTS_SndData(lang, PRINTER_DEVICE_BLACK_TITLE_VP); + RTS_SndData(lang, PRINTER_ADVINFO_BLACK_TITLE_VP); + RTS_SndData(lang, PRINTER_INFO_ENTER_BLACK_TITLE_VP); + + RTS_SndData(lang, PREHEAT_PLA_SET_TITLE_VP); + RTS_SndData(lang, PREHEAT_ABS_SET_TITLE_VP); + + RTS_SndData(lang, STORE_MEMORY_CONFIRM_TITLE_VP); + RTS_SndData(lang, STORE_MEMORY_CANCEL_TITLE_VP); + + RTS_SndData(lang, FILAMENT_UNLOAD_IGNORE_TITLE_VP); + RTS_SndData(lang, FILAMENT_USEUP_TITLE_VP); + RTS_SndData(lang, BUTTON_CHECK_CONFIRM_TITLE_VP); + RTS_SndData(lang, BUTTON_CHECK_CANCEL_TITLE_VP); + RTS_SndData(lang, FILAMENT_LOAD_TITLE_VP); + RTS_SndData(lang, FILAMENT_LOAD_RESUME_TITLE_VP); + RTS_SndData(lang, PAUSE_PRINT_POP_TITLE_VP); + RTS_SndData(lang, STOP_PRINT_POP_TITLE_VP); + RTS_SndData(lang, POWERCONTINUE_POP_TITLE_VP); + RTS_SndData(lang, AUTO_HOME_WAITING_POP_TITLE_VP); + + RTS_SndData(lang, BEDLEVELING_WAIT_TITLE_VP); + RTS_SndData(lang, RESTORE_FACTORY_TITLE_VP); + RTS_SndData(lang, RESET_WIFI_SETTING_TITLE_VP); + RTS_SndData(lang, KILL_THERMAL_RUNAWAY_TITLE_VP); + RTS_SndData(lang, KILL_HEATING_FAIL_TITLE_VP); + RTS_SndData(lang, KILL_THERMISTOR_ERROR_TITLE_VP); + RTS_SndData(lang, WIND_AUTO_SHUTDOWN_TITLE_VP); + RTS_SndData(lang, RESET_WIFI_SETTING_BUTTON_VP); + RTS_SndData(lang, PRINTER_AUTO_SHUTDOWN_TITLE_VP); + RTS_SndData(lang, WIND_AUTO_SHUTDOWN_PAGE_VP); + RTS_SndData(lang, AUTO_LEVELING_START_TITLE_VP); + RTS_SndData(lang, AUX_LEVELING_GREY_TITLE_VP); + RTS_SndData(lang, AUTO_LEVELING_GREY_TITLE_VP); + RTS_SndData(lang, AUX_LEVELING_BLACK_TITLE_VP); + RTS_SndData(lang, AUTO_LEVELING_BLACK_TITLE_VP); + RTS_SndData(lang, LANGUAGE_SELECT_PAGE_TITLE_VP); + RTS_SndData(lang, ADV_SETTING_MOTION_TITLE_VP); + RTS_SndData(lang, ADV_SETTING_PID_TITLE_VP); + RTS_SndData(lang, ADV_SETTING_WIFI_TITLE_VP); + + RTS_SndData(lang, MOTION_SETTING_TITLE_VP); + RTS_SndData(lang, MOTION_SETTING_STEPSMM_TITLE_VP); + RTS_SndData(lang, MOTION_SETTING_ACCEL_TITLE_VP); + RTS_SndData(lang, MOTION_SETTING_JERK_TITLE_VP); + RTS_SndData(lang, MOTION_SETTING_VELOCITY_TITLE_VP); + + RTS_SndData(lang, MAX_VELOCITY_SETTING_TITLE_VP); + RTS_SndData(lang, MAX_VELOCITY_XAXIS_TITLE_VP); + RTS_SndData(lang, MAX_VELOCITY_YAXIS_TITLE_VP); + RTS_SndData(lang, MAX_VELOCITY_ZAXIS_TITLE_VP); + RTS_SndData(lang, MAX_VELOCITY_EAXIS_TITLE_VP); + + RTS_SndData(lang, MAX_ACCEL_SETTING_TITLE_VP); + RTS_SndData(lang, MAX_ACCEL_XAXIS_TITLE_VP); + RTS_SndData(lang, MAX_ACCEL_YAXIS_TITLE_VP); + RTS_SndData(lang, MAX_ACCEL_ZAXIS_TITLE_VP); + RTS_SndData(lang, MAX_ACCEL_EAXIS_TITLE_VP); + + RTS_SndData(lang, MAX_JERK_SETTING_TITLE_VP); + RTS_SndData(lang, MAX_JERK_XAXIS_TITLE_VP); + RTS_SndData(lang, MAX_JERK_YAXIS_TITLE_VP); + RTS_SndData(lang, MAX_JERK_ZAXIS_TITLE_VP); + RTS_SndData(lang, MAX_JERK_EAXIS_TITLE_VP); + + RTS_SndData(lang, MAX_STEPSMM_SETTING_TITLE_VP); + RTS_SndData(lang, MAX_STEPSMM_XAXIS_TITLE_VP); + RTS_SndData(lang, MAX_STEPSMM_YAXIS_TITLE_VP); + RTS_SndData(lang, MAX_STEPSMM_ZAXIS_TITLE_VP); + RTS_SndData(lang, MAX_STEPSMM_EAXIS_TITLE_VP); + + RTS_SndData(lang, TEMP_PID_SETTING_TITLE_VP); + RTS_SndData(lang, NOZZLE_TEMP_P_TITLE_VP); + RTS_SndData(lang, NOZZLE_TEMP_I_TITLE_VP); + RTS_SndData(lang, NOZZLE_TEMP_D_TITLE_VP); + RTS_SndData(lang, HOTBED_TEMP_P_TITLE_VP); + RTS_SndData(lang, HOTBED_TEMP_I_TITLE_VP); + RTS_SndData(lang, HOTBED_TEMP_D_TITLE_VP); + + RTS_SndData(lang, FILAMENT_CONTROL_TITLE_VP); + RTS_SndData(lang, POWERCONTINUE_CONTROL_TITLE_VP); + RTS_SndData(lang, MACHINE_TYPE_ABOUT_CHAR_VP); + RTS_SndData(lang, FIREWARE_VERSION_ABOUT_CHAR_VP); + RTS_SndData(lang, PRINTER_DISPLAY_VERSION_TITLE_VP); + RTS_SndData(lang, HARDWARE_VERSION_ABOUT_TITLE_VP); + RTS_SndData(lang, WIFI_DN_CODE_CHAR_VP); + RTS_SndData(lang, WEBSITE_ABOUT_CHAR_VP); + RTS_SndData(lang, PRINTER_PRINTSIZE_TITLE_VP); + + RTS_SndData(lang, PRINT_FINISH_ICON_VP); + + #if HAS_CUTTER // 新增激光 20220208 + + RTS_SndData(lang, SELECT_LASER_WARNING_TIPS_VP); + RTS_SndData(lang, SELECT_FDM_WARNING_TIPS_VP); + RTS_SndData(lang, PRINT_MOVE_AXIS_VP); + RTS_SndData(lang, PRINT_DIRECT_ENGRAV_VP); + RTS_SndData(lang, PRINT_RUN_RANGE_VP); + RTS_SndData(lang, PRINT_RETURN_VP); + RTS_SndData(lang, PRINT_WARNING_TIPS_VP); + RTS_SndData(lang, DEVICE_SWITCH_LASER_VP); + RTS_SndData(lang, FIRST_SELECT_DEVICE_TYPE); + RTS_SndData(lang, HOME_LASER_ENGRAVE_VP); + RTS_SndData(lang, PREPARE_ADJUST_FOCUS_VP); + RTS_SndData(lang, PREPARE_SWITCH_FDM_VP); + RTS_SndData(lang, FIRST_DEVICE_FDM); + RTS_SndData(lang, FIRST_DEVICE_LASER); + RTS_SndData(lang, FOCUS_SET_FOCUS_TIPS); + + #endif + +} + +// looping at the loop function +void RTSUpdate(void) +{ + // Check the status of card + rtscheck.RTS_SDCardUpate(); + + EachMomentUpdate(); + // wait to receive massage and response + if (rtscheck.RTS_RecData() > 0) + { + rtscheck.RTS_HandleData(); + } +} + +void RTS_PauseMoveAxisPage(void) +{ + #if HAS_CUTTER + if(laser_device.is_laser_device()) return; + #endif + + if(waitway == 1) + { + rtscheck.RTS_SndData(ExchangePageBase + 12, ExchangepageAddr); + change_page_font = 12; + waitway = 0; + } + else if(waitway == 5) + { + rtscheck.RTS_SndData(ExchangePageBase + 7, ExchangepageAddr); + change_page_font = 7; + waitway = 0; + } +} + +void RTS_AutoBedLevelPage(void) +{ + if(waitway == 3) + { + rtscheck.RTS_SndData(0, AXIS_Z_COORD_VP);// G29 最后的位置为Z0 + rtscheck.RTS_SndData(ExchangePageBase + 26, ExchangepageAddr); + change_page_font = 26; + waitway = 0; + } +} + +void RTS_MoveAxisHoming(void) +{ + if(waitway == 4) + { + rtscheck.RTS_SndData(ExchangePageBase + 16 + (AxisUnitMode - 1), ExchangepageAddr); + change_page_font = 16; + waitway = 0; + } + else if(waitway == 6) + { + // rtscheck.RTS_SndData(ExchangePageBase + 25, ExchangepageAddr); + // change_page_font = 25; + waitway = 0; + } + else if(waitway == 7) + { + // Click Print finish + rtscheck.RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + waitway = 0; + }else if(waitway == 8)// 雕刻警告界面的轴移动 + { + rtscheck.RTS_SndData(ExchangePageBase + 78 + (AxisUnitMode - 1), ExchangepageAddr); + change_page_font = 78 + (AxisUnitMode - 1); + waitway = 0; + }else if(waitway == 9)// 激光的轴移动 + { + rtscheck.RTS_SndData(ExchangePageBase + 70 + (AxisUnitMode - 1), ExchangepageAddr); + change_page_font = 70 + (AxisUnitMode - 1); + waitway = 0; + }else if(waitway == 10){ + rtscheck.RTS_SndData(ExchangePageBase + 51 , ExchangepageAddr); + change_page_font = 51; + waitway = 0; + } + + #if HAS_CUTTER + if(laser_device.is_laser_device()) + { + + }else + #endif + { + rtscheck.RTS_SndData(10 * current_position[X_AXIS], AXIS_X_COORD_VP); + rtscheck.RTS_SndData(10 * current_position[Y_AXIS], AXIS_Y_COORD_VP); + } + rtscheck.RTS_SndData(10 * current_position[Z_AXIS], AXIS_Z_COORD_VP); +} + +void RTS_CommandPause(void) +{ + if(printingIsActive()) + { + rtscheck.RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + change_page_font = 10; + // card.pauseSDPrint(); + // print_job_timer.pause(); + // pause_action_flag = true; + } +} + +void ErrorHanding(void) +{ + // No more operations + if(errorway == 1) + { + errorway = errornum = 0; + } + else if(errorway == 2) + { + // Z axis home failed + home_errornum ++; + if(home_errornum <= 3) + { + errorway = 0; + waitway = 4; + queue.enqueue_now_P(PSTR("G28")); + rtscheck.RTS_SndData(0, MOTOR_FREE_ICON_VP); + Update_Time_Value = 0; + } + else + { + // After three failed returns to home, it will report the failure interface + home_errornum = 0; + errorway = 0; + rtscheck.RTS_SndData(ExchangePageBase + 41, ExchangepageAddr); + change_page_font = 41; + // Z axis home failed + rtscheck.RTS_SndData(Error_202, ABNORMAL_PAGE_TEXT_VP); + + if(printingIsActive()) + { + rtscheck.RTS_SndData(0, PRINT_TIME_HOUR_VP); + rtscheck.RTS_SndData(0, PRINT_TIME_MIN_VP); + rtscheck.RTS_SndData(0, PRINT_REMAIN_TIME_HOUR_VP); + rtscheck.RTS_SndData(0, PRINT_REMAIN_TIME_MIN_VP); + + Update_Time_Value = 0; + + rtscheck.RTS_SDcard_Stop(); + } + } + } + else if(errorway == 3) + { + // No more operations + reset_bed_level(); + errorway = 0; + errornum = 0; + } + else if(errorway == 4) + { + + } +} + +#endif diff --git a/Marlin/src/lcd/e3v2/creality/lcd_rts.h b/Marlin/src/lcd/e3v2/creality/lcd_rts.h new file mode 100644 index 000000000000..28481702050e --- /dev/null +++ b/Marlin/src/lcd/e3v2/creality/lcd_rts.h @@ -0,0 +1,680 @@ +#ifndef LCD_RTS_H +#define LCD_RTS_H + +#include "string.h" +#include + +#include "../../../inc/MarlinConfig.h" + +// #pragma once + +// #include "../../../inc/MarlinConfigPre.h" +// #include "../../../feature/bedlevel/bedlevel.h" + +// #if ENABLED(AUTO_BED_LEVELING_BILINEAR) + +// extern xy_pos_t bilinear_grid_spacing, bilinear_start; +// extern xy_float_t bilinear_grid_factor; +// extern bed_mesh_t z_values; +// float bilinear_z_offset(const xy_pos_t &raw); + +// void extrapolate_unprobed_bed_level(); +// void print_bilinear_leveling_grid(); +// void refresh_bed_level(); +// #if ENABLED(ABL_BILINEAR_SUBDIVISION) +// void print_bilinear_leveling_grid_virt(); +// void bed_level_virt_interpolate(); +// #endif + +// #if IS_CARTESIAN && DISABLED(SEGMENT_LEVELED_MOVES) +// void bilinear_line_to_destination(const_feedRate_t scaled_fr_mm_s, uint16_t x_splits=0xFFFF, uint16_t y_splits=0xFFFF); +// #endif + +// #define _GET_MESH_X(I) float(bilinear_start.x + (I) * bilinear_grid_spacing.x) +// #define _GET_MESH_Y(J) float(bilinear_start.y + (J) * bilinear_grid_spacing.y) +// #define Z_VALUES_ARR z_values + +// #endif + +// extern int power_off_type_yes; + +/*********************************/ + +#define PID_PARAM(F,H) _PID_##F(TERN(PID_PARAMS_PER_HOTEND, H, 0 & H)) // Always use 'H' to suppress warning +#define _PID_Kp(H) TERN(PIDTEMP, Temperature::temp_hotend[H].pid.Kp, NAN) +#define _PID_Ki(H) TERN(PIDTEMP, Temperature::temp_hotend[H].pid.Ki, NAN) +#define _PID_Kd(H) TERN(PIDTEMP, Temperature::temp_hotend[H].pid.Kd, NAN) +#if ENABLED(PIDTEMP) + #define _PID_Kc(H) TERN(PID_EXTRUSION_SCALING, Temperature::temp_hotend[H].pid.Kc, 1) + #define _PID_Kf(H) TERN(PID_FAN_SCALING, Temperature::temp_hotend[H].pid.Kf, 0) +#else + #define _PID_Kc(H) 1 + #define _PID_Kf(H) 0 +#endif + + +#define FHONE (0x5A) +#define FHTWO (0xA5) +#define FHLENG (0x06) +#define TEXTBYTELEN 20 +#define MaxFileNumber 20 + +#define AUTO_BED_LEVEL_PREHEAT 0 + +#define FileNum MaxFileNumber +#define FileNameLen TEXTBYTELEN +#define RTS_UPDATE_INTERVAL 500 +#define RTS_UPDATE_VALUE RTS_UPDATE_INTERVAL + +#define SizeofDatabuf 26 + +/*************Register and Variable addr*****************/ +#define RegAddr_W 0x80 +#define RegAddr_R 0x81 +#define VarAddr_W 0x82 +#define VarAddr_R 0x83 +#define ExchangePageBase ((unsigned long)0x5A010000) +#define StartSoundSet ((unsigned long)0x060480A0) + +/*Error value*/ +#define Error_201 "201 (Command Timeout)" // The command too much inactive time +#define Error_202 "202 (Homing Failed)" // Homing Failed +#define Error_203 "203 (Probing Failed)" // Probing Failed +#define Error_204 "204 (Click Reboot)" // SD Read Error + +/*variable addr*/ +#define ExchangepageAddr 0x0084 +#define SoundAddr 0x00A0 + +#define START_PROCESS_ICON_VP 0x1000 +#define PRINT_SPEED_RATE_VP 0x1006 +#define PRINT_PROCESS_ICON_VP 0x100E +#define PRINT_TIME_HOUR_VP 0x1010 +#define PRINT_TIME_MIN_VP 0x1012 +#define PRINT_PROCESS_VP 0x1016 +// #define PRINTER_FANOPEN_TITLE_VP 0x101E +#define PRINTER_LEDOPEN_TITLE_VP 0x101F +#define PRINTER_AUTO_SHUTDOWN_ICON_VP 0x1020 +#define ADV_SETTING_WIFI_ICON_VP 0x1021 +#define AUTO_BED_LEVEL_ZOFFSET_VP 0x1026 + +#define HEAD_SET_TEMP_VP 0x1034 +#define HEAD_CURRENT_TEMP_VP 0x1036 +#define BED_SET_TEMP_VP 0x103A +#define BED_CURRENT_TEMP_VP 0x103C +#define AXIS_X_COORD_VP 0x1048 +#define AXIS_Y_COORD_VP 0x104A +#define AXIS_Z_COORD_VP 0x104C +#define HEAD_FILAMENT_LOAD_DATA_VP 0x1052 +#define HEAD_FILAMENT_UNLOAD_DATA_VP 0x1054 +#define AUTO_BED_PREHEAT_HEAD_DATA_VP 0x108A +#define AUTO_BED_LEVEL_TITLE_VP 0x108D +#define FILAMENT_LOAD_ICON_VP 0x108E +#define PREHEAT_PLA_SET_NOZZLE_TEMP_VP 0x1090 +#define PREHEAT_PLA_SET_BED_TEMP_VP 0x1092 +#define PREHEAT_ABS_SET_NOZZLE_TEMP_VP 0x1094 +#define PREHEAT_ABS_SET_BED_TEMP_VP 0x1096 +#define FAN_SPEED_CONTROL_DATA_VP 0x109A +#define AUTO_LEVELING_PERCENT_DATA_VP 0x109C + +#define MAX_VELOCITY_XAXIS_DATA_VP 0x109E +#define MAX_VELOCITY_YAXIS_DATA_VP 0x10A0 +#define MAX_VELOCITY_ZAXIS_DATA_VP 0x10A2 +#define MAX_VELOCITY_EAXIS_DATA_VP 0x10A4 + +#define MAX_ACCEL_XAXIS_DATA_VP 0x10A6 +#define MAX_ACCEL_YAXIS_DATA_VP 0x10A8 +#define MAX_ACCEL_ZAXIS_DATA_VP 0x10AA +#define MAX_ACCEL_EAXIS_DATA_VP 0x10AC + +#define MAX_JERK_XAXIS_DATA_VP 0x10AE +#define MAX_JERK_YAXIS_DATA_VP 0x10B0 +#define MAX_JERK_ZAXIS_DATA_VP 0x10B2 +#define MAX_JERK_EAXIS_DATA_VP 0x10B4 + +#define MAX_STEPSMM_XAXIS_DATA_VP 0x10B6 +#define MAX_STEPSMM_YAXIS_DATA_VP 0x10B8 +#define MAX_STEPSMM_ZAXIS_DATA_VP 0x10BA +#define MAX_STEPSMM_EAXIS_DATA_VP 0x10BC + +#define NOZZLE_TEMP_P_DATA_VP 0x10BE +#define NOZZLE_TEMP_I_DATA_VP 0x10C0 +#define NOZZLE_TEMP_D_DATA_VP 0x10C2 +#define HOTBED_TEMP_P_DATA_VP 0x10C4 +#define HOTBED_TEMP_I_DATA_VP 0x10C6 +#define HOTBED_TEMP_D_DATA_VP 0x10C8 +#define PRINTER_FAN_SPEED_DATA_VP 0x10CA // + +#define AUTO_BED_LEVEL_1POINT_VP 0x1100 +#define AUTO_BED_LEVEL_2POINT_VP 0x1102 +#define AUTO_BED_LEVEL_3POINT_VP 0x1104 +#define AUTO_BED_LEVEL_4POINT_VP 0x1106 +#define AUTO_BED_LEVEL_5POINT_VP 0x1108 +#define AUTO_BED_LEVEL_6POINT_VP 0x110A +#define AUTO_BED_LEVEL_7POINT_VP 0x110C +#define AUTO_BED_LEVEL_8POINT_VP 0x110E +#define AUTO_BED_LEVEL_9POINT_VP 0x1110 +#define AUTO_BED_LEVEL_10POINT_VP 0x1112 +#define AUTO_BED_LEVEL_11POINT_VP 0x1114 +#define AUTO_BED_LEVEL_12POINT_VP 0x1116 +#define AUTO_BED_LEVEL_13POINT_VP 0x1118 +#define AUTO_BED_LEVEL_14POINT_VP 0x111A +#define AUTO_BED_LEVEL_15POINT_VP 0x111C +#define AUTO_BED_LEVEL_16POINT_VP 0x111E + +#define CHANGE_SDCARD_ICON_VP 0x1168 +#define MOVEAXIS_UNIT_ICON_VP 0x116A +#define PREHAEAT_NOZZLE_ICON_VP 0x116B +#define PREHAEAT_HOTBED_ICON_VP 0x116C +#define FILAMENT_CONTROL_ICON_VP 0x116D +#define POWERCONTINUE_CONTROL_ICON_VP 0x116E + +#define PRINT_FINISH_ICON_VP 0x1170 // 打印完成 +#define PRINT_REMAIN_TIME_HOUR_VP 0x1171 //剩余时间, 小时数 +#define PRINT_REMAIN_TIME_MIN_VP 0x1173 //剩余时间, 分钟数 +//#define PRINT_FINISH_ICON_VP 0x1174 // 占用 +// #define PRINT_MAIN_PAGE_TIME_VP 0x1175 // + +#define MOTOR_FREE_ICON_VP 0x1200 +#define FILE1_SELECT_ICON_VP 0x1221 +#define FILE2_SELECT_ICON_VP 0x1222 +#define FILE3_SELECT_ICON_VP 0x1223 +#define FILE4_SELECT_ICON_VP 0x1224 +#define FILE5_SELECT_ICON_VP 0x1225 +#define FILE6_SELECT_ICON_VP 0x1226 +#define FILE7_SELECT_ICON_VP 0x1227 +#define FILE8_SELECT_ICON_VP 0x1228 +#define FILE9_SELECT_ICON_VP 0x1229 +#define FILE10_SELECT_ICON_VP 0x122A +#define FILE11_SELECT_ICON_VP 0x122B +#define FILE12_SELECT_ICON_VP 0x122C +#define FILE13_SELECT_ICON_VP 0x122D +#define FILE14_SELECT_ICON_VP 0x122E +#define FILE15_SELECT_ICON_VP 0x122F +#define FILE16_SELECT_ICON_VP 0x1230 +#define FILE17_SELECT_ICON_VP 0x1231 +#define FILE18_SELECT_ICON_VP 0x1232 +#define FILE19_SELECT_ICON_VP 0x1233 +#define FILE20_SELECT_ICON_VP 0x1234 + +#define FILE1_TEXT_VP 0x200A +#define FILE2_TEXT_VP 0x201E +#define FILE3_TEXT_VP 0x2032 +#define FILE4_TEXT_VP 0x2046 +#define FILE5_TEXT_VP 0x205A +#define FILE6_TEXT_VP 0x206E +#define FILE7_TEXT_VP 0x2082 +#define FILE8_TEXT_VP 0x2096 +#define FILE9_TEXT_VP 0x20AA +#define FILE10_TEXT_VP 0x20BE +#define FILE11_TEXT_VP 0x20D2 +#define FILE12_TEXT_VP 0x20E6 +#define FILE13_TEXT_VP 0x20FA +#define FILE14_TEXT_VP 0x210E +#define FILE15_TEXT_VP 0x2122 +#define FILE16_TEXT_VP 0x2136 +#define FILE17_TEXT_VP 0x214A +#define FILE18_TEXT_VP 0x215E +#define FILE19_TEXT_VP 0x2172 +#define FILE20_TEXT_VP 0x2186 + +#define SELECT_FILE_TEXT_VP 0x219A +#define PRINT_FILE_TEXT_VP 0x21C0 +#define ABNORMAL_PAGE_TEXT_VP 0x21D4 + +#define MAIN_PAGE_BLUE_TITLE_VP 0x1300 +#define SELECT_FILE_BLUE_TITLE_VP 0x1301 +#define PREPARE_PAGE_BLUE_TITLE_VP 0x1302 +#define SETTING_PAGE_BLUE_TITLE_VP 0x1303 +#define MAIN_PAGE_BLACK_TITLE_VP 0x1304 +#define SELECT_FILE_BLACK_TITLE_VP 0x1305 +#define PREPARE_PAGE_BLACK_TITLE_VP 0x1306 +#define SETTING_PAGE_BLACK_TITLE_VP 0x1307 + +#define PRINT_ADJUST_MENT_TITLE_VP 0x130D +#define PRINT_SPEED_TITLE_VP 0x130E +#define HEAD_SET_TITLE_VP 0x130F +#define BED_SET_TITLE_VP 0x1310 +#define LEVEL_ZOFFSET_TITLE_VP 0x1311 +#define FAN_CONTROL_TITLE_VP 0x1312 +#define LED_CONTROL_TITLE_VP 0x1313 + +#define MOVE_AXIS_ENTER_GREY_TITLE_VP 0x1314 +#define CHANGE_FILAMENT_GREY_TITLE_VP 0x1315 +#define PREHAET_PAGE_GREY_TITLE_VP 0x1316 +#define MOVE_AXIS_ENTER_BLACK_TITLE_VP 0x1317 +#define CHANGE_FILAMENT_BLACK_TITLE_VP 0x1318 +#define PREHAET_PAGE_BLACK_TITLE_VP 0x1319 + +#define PREHEAT_PLA_BUTTON_TITLE_VP 0x131A +#define PREHEAT_ABS_BUTTON_TITLE_VP 0x131B +#define COOL_DOWN_BUTTON_TITLE_VP 0x131C + +#define FILAMENT_LOAD_BUTTON_TITLE_VP 0x1321 +#define FILAMENT_UNLOAD_BUTTON_TITLE_VP 0x1322 + +#define LANGUAGE_SELECT_ENTER_VP 0x1323 +#define FACTORY_DEFAULT_ENTER_TITLE_VP 0x1324 +#define LEVELING_PAGE_TITLE_VP 0x1325 + +#define PRINTER_DEVICE_GREY_TITLE_VP 0x1326 +#define PRINTER_ADVINFO_GREY_TITLE_VP 0x1327 +#define PRINTER_INFO_ENTER_GREY_TITLE_VP 0x1328 +#define PRINTER_DEVICE_BLACK_TITLE_VP 0x1329 +#define PRINTER_ADVINFO_BLACK_TITLE_VP 0x132A +#define PRINTER_INFO_ENTER_BLACK_TITLE_VP 0x132B + +#define PREHEAT_PLA_SET_TITLE_VP 0x132D +#define PREHEAT_ABS_SET_TITLE_VP 0x132E + +#define STORE_MEMORY_CONFIRM_TITLE_VP 0x1332 +#define STORE_MEMORY_CANCEL_TITLE_VP 0x1333 + +#define FILAMENT_UNLOAD_IGNORE_TITLE_VP 0x133E +#define FILAMENT_USEUP_TITLE_VP 0x133F +#define BUTTON_CHECK_CONFIRM_TITLE_VP 0x1340 +#define BUTTON_CHECK_CANCEL_TITLE_VP 0x1341 +#define FILAMENT_LOAD_TITLE_VP 0x1342 +#define FILAMENT_LOAD_RESUME_TITLE_VP 0x1343 +#define PAUSE_PRINT_POP_TITLE_VP 0x1344 +#define STOP_PRINT_POP_TITLE_VP 0x1347 +#define POWERCONTINUE_POP_TITLE_VP 0x1348 +#define AUTO_HOME_WAITING_POP_TITLE_VP 0x1349 + +#define BEDLEVELING_WAIT_TITLE_VP 0x134B +#define RESTORE_FACTORY_TITLE_VP 0x134D +#define RESET_WIFI_SETTING_TITLE_VP 0x134E +#define KILL_THERMAL_RUNAWAY_TITLE_VP 0x134F +#define KILL_HEATING_FAIL_TITLE_VP 0x1350 +#define KILL_THERMISTOR_ERROR_TITLE_VP 0x1351 +#define WIND_AUTO_SHUTDOWN_TITLE_VP 0x1352 +#define RESET_WIFI_SETTING_BUTTON_VP 0x1353 +#define PRINTER_AUTO_SHUTDOWN_TITLE_VP 0x1354 +#define WIND_AUTO_SHUTDOWN_PAGE_VP 0x1355 +#define AUTO_LEVELING_START_TITLE_VP 0x1356 +#define AUX_LEVELING_GREY_TITLE_VP 0x1357 +#define AUTO_LEVELING_GREY_TITLE_VP 0x1358 +#define AUX_LEVELING_BLACK_TITLE_VP 0x1359 +#define AUTO_LEVELING_BLACK_TITLE_VP 0x135A +#define LANGUAGE_SELECT_PAGE_TITLE_VP 0x135B +#define ADV_SETTING_MOTION_TITLE_VP 0x135C +#define ADV_SETTING_PID_TITLE_VP 0x135D +#define ADV_SETTING_WIFI_TITLE_VP 0x135E + +#define MOTION_SETTING_TITLE_VP 0x135F +#define MOTION_SETTING_STEPSMM_TITLE_VP 0x1360 +#define MOTION_SETTING_ACCEL_TITLE_VP 0x1361 +#define MOTION_SETTING_JERK_TITLE_VP 0x1362 +#define MOTION_SETTING_VELOCITY_TITLE_VP 0x1363 + +#define MAX_VELOCITY_SETTING_TITLE_VP 0x1364 +#define MAX_VELOCITY_XAXIS_TITLE_VP 0x1365 +#define MAX_VELOCITY_YAXIS_TITLE_VP 0x1366 +#define MAX_VELOCITY_ZAXIS_TITLE_VP 0x1367 +#define MAX_VELOCITY_EAXIS_TITLE_VP 0x1368 + +#define MAX_ACCEL_SETTING_TITLE_VP 0x1369 +#define MAX_ACCEL_XAXIS_TITLE_VP 0x136A +#define MAX_ACCEL_YAXIS_TITLE_VP 0x136B +#define MAX_ACCEL_ZAXIS_TITLE_VP 0x136C +#define MAX_ACCEL_EAXIS_TITLE_VP 0x136D + +#define MAX_JERK_SETTING_TITLE_VP 0x136E +#define MAX_JERK_XAXIS_TITLE_VP 0x136F +#define MAX_JERK_YAXIS_TITLE_VP 0x1370 +#define MAX_JERK_ZAXIS_TITLE_VP 0x1371 +#define MAX_JERK_EAXIS_TITLE_VP 0x1372 + +#define MAX_STEPSMM_SETTING_TITLE_VP 0x1373 +#define MAX_STEPSMM_XAXIS_TITLE_VP 0x1374 +#define MAX_STEPSMM_YAXIS_TITLE_VP 0x1375 +#define MAX_STEPSMM_ZAXIS_TITLE_VP 0x1376 +#define MAX_STEPSMM_EAXIS_TITLE_VP 0x1377 + +#define TEMP_PID_SETTING_TITLE_VP 0x1378 +#define NOZZLE_TEMP_P_TITLE_VP 0x1379 +#define NOZZLE_TEMP_I_TITLE_VP 0x137A +#define NOZZLE_TEMP_D_TITLE_VP 0x137B +#define HOTBED_TEMP_P_TITLE_VP 0x137C +#define HOTBED_TEMP_I_TITLE_VP 0x137D +#define HOTBED_TEMP_D_TITLE_VP 0x137E + +#define FILAMENT_CONTROL_TITLE_VP 0x137F +#define POWERCONTINUE_CONTROL_TITLE_VP 0x1380 + +#define MACHINE_TYPE_ABOUT_CHAR_VP 0x1400 +#define FIREWARE_VERSION_ABOUT_CHAR_VP 0x1401 +#define PRINTER_DISPLAY_VERSION_TITLE_VP 0x1402 +#define HARDWARE_VERSION_ABOUT_TITLE_VP 0x1403 +#define WIFI_DN_CODE_CHAR_VP 0x1404 +#define WEBSITE_ABOUT_CHAR_VP 0x1405 +#define PRINTER_PRINTSIZE_TITLE_VP 0x1406 + +#define LANGUAGE_CHINESE_TITLE_VP 0x1411 +#define LANGUAGE_ENGLISH_TITLE_VP 0x1412 +#define LANGUAGE_GERMAN_TITLE_VP 0x1413 +#define LANGUAGE_SPANISH_TITLE_VP 0x1414 +#define LANGUAGE_FRENCH_TITLE_VP 0x1415 +#define LANGUAGE_ITALIAN_TITLE_VP 0x1416 +#define LANGUAGE_PORTUGUESE_TITLE_VP 0x1417 +#define LANGUAGE_RUSSIAN_TITLE_VP 0x1418 +#define LANGUAGE_TURKISH_TITLE_VP 0x1419 + +#define MACHINE_TYPE_ABOUT_TEXT_VP 0x17B0 +#define FIREWARE_VERSION_ABOUT_TEXT_VP 0x17C4 +#define PRINTER_DISPLAY_VERSION_TEXT_VP 0x17D8 +#define HARDWARE_VERSION_ABOUT_TEXT_VP 0x17EC +#define PRINTER_PRINTSIZE_TEXT_VP 0x1800 +#define WEBSITE_ABOUT_TEXT_VP 0x1814 + +#define FilenameNature 0x6003 + +#define LCD_LED_CONFIG_REGISTER 0x0082 +#define LCD_TP_STATUS_REGISTER 0x0016 +#define LCD_SHUTDOWN_LIGHT_LEVEL 0x0A +#define LCD_OPEN_LIGHT_LEVEL 0x64 + +#define TIME_PRINT_OVER_SHUTDOWN 300 + +#if HAS_CUTTER // 增加激光 + + #define SELECT_LASER_WARNING_TIPS_VP 0x1381 + #define SELECT_FDM_WARNING_TIPS_VP 0x1382 + // 打印警告界面 + #define PRINT_MOVE_AXIS_VP 0x1383 + #define PRINT_DIRECT_ENGRAV_VP 0x1384 + #define PRINT_RUN_RANGE_VP 0x1385 + #define PRINT_RETURN_VP 0x1386 + #define PRINT_WARNING_TIPS_VP 0x1387 + //切换激光雕刻 + #define DEVICE_SWITCH_LASER_VP 0x1388 //FDM->设备->切换激光雕刻 + // 首次启动 的设备选择界面 + #define FIRST_SELECT_DEVICE_TYPE 0x1389 //选择打印头类型 + #define HOME_LASER_ENGRAVE_VP 0x138A //主页 激光雕刻 标题 + // + #define PREPARE_ADJUST_FOCUS_VP 0x138B + #define PREPARE_SWITCH_FDM_VP 0x138C + + #define FIRST_DEVICE_FDM 0x138D + #define FIRST_DEVICE_LASER 0x138E + #define FOCUS_SET_FOCUS_TIPS 0x138F + + #define SW_FOCUS_Z_VP 0x2207 +//#define SW_FOCUS_Z_VP 0x138E 占用 + +#endif + +/************struct**************/ +typedef struct DataBuf +{ + unsigned char len; + unsigned char head[2]; + unsigned char command; + unsigned long addr; + unsigned long bytelen; + unsigned short data[32]; + unsigned char reserv[4]; +} DB; + +typedef struct CardRecord +{ + int recordcount; //当前选中的文件序列 + int Filesum; //文件总数目 + unsigned long addr[FileNum]; //迪文屏上显示对应文件名的地址 + char Cardshowfilename[FileNum][FileNameLen]; //长文件名 + char Cardfilename[FileNum][FileNameLen]; //短文件名 +}CRec; + +// extern CRec CardRecbuf; + +class RTSSHOW +{ + public: + RTSSHOW(void); + int RTS_RecData(void); + void RTS_SDCardInit(void); + bool RTS_SD_Detected(void); + void RTS_SDCardUpate(void); + void languagedisplayUpdate(void); + void RTS_SndData(void); + void RTS_SndData(const String &, unsigned long, unsigned char = VarAddr_W); + void RTS_SndData(const char[], unsigned long, unsigned char = VarAddr_W); + void RTS_SndData(char, unsigned long, unsigned char = VarAddr_W); + void RTS_SndData(unsigned char*, unsigned long, unsigned char = VarAddr_W); + void RTS_SndData(int, unsigned long, unsigned char = VarAddr_W); + void RTS_SndData(float, unsigned long, unsigned char = VarAddr_W); + void RTS_SndData(unsigned int,unsigned long, unsigned char = VarAddr_W); + void RTS_SndData(long,unsigned long, unsigned char = VarAddr_W); + void RTS_SndData(unsigned long,unsigned long, unsigned char = VarAddr_W); + void RTS_SDcard_Stop(void); + void RTS_HandleData(void); + void RTS_Init(void); + + #if HAS_CUTTER + void RTS_HandleData_Laser(void); + void RTS_SDcard_Stop_laser(void); + #endif + + DB recdat; + DB snddat; + private: + unsigned char databuf[SizeofDatabuf]; +}; + +extern RTSSHOW rtscheck; + +#if ENABLED(HAS_MENU_RESET_WIFI) + enum sWIFI_STATE + { + INITIAL = 0, + PRESSED, + RECORDTIME, + }; +#endif + +#if ENABLED(HAS_MENU_RESET_WIFI) + extern unsigned char WIFI_STATE; +#endif + +enum PROC_COM +{ + MainEnterKey = 0, + AdjustEnterKey = 1, + PrintSpeedEnterKey = 2, + StopPrintKey = 3, + PausePrintKey = 4, + ResumePrintKey = 5, + ZoffsetEnterKey = 6, + TempControlKey = 7, + CoolDownKey = 8, + HeaterTempEnterKey = 9, + HotBedTempEnterKey = 10, + PrepareEnterKey = 11, + BedLevelKey = 12, + AutoHomeKey = 13, + XaxismoveKey = 14, + YaxismoveKey = 15, + ZaxismoveKey = 16, + HeaterLoadEnterKey = 17, + HeaterUnLoadEnterKey = 18, + HeaterLoadStartKey = 19, + SelectLanguageKey = 20, + PowerContinuePrintKey = 21, + PLAHeadSetEnterKey = 22, + PLABedSetEnterKey = 23, + ABSHeadSetEnterKey = 24, + ABSBedSetEnterKey = 25, + StoreMemoryKey = 26, + FanSpeedEnterKey = 27, + VelocityXaxisEnterKey = 28, + VelocityYaxisEnterKey = 29, + VelocityZaxisEnterKey = 30, + VelocityEaxisEnterKey = 31, + AccelXaxisEnterKey = 32, + AccelYaxisEnterKey = 33, + AccelZaxisEnterKey = 34, + AccelEaxisEnterKey = 35, + JerkXaxisEnterKey = 36, + JerkYaxisEnterKey = 37, + JerkZaxisEnterKey = 38, + JerkEaxisEnterKey = 39, + StepsmmXaxisEnterKey = 40, + StepsmmYaxisEnterKey = 41, + StepsmmZaxisEnterKey = 42, + StepsmmEaxisEnterKey = 43, + NozzlePTempEnterKey = 44, + NozzleITempEnterKey = 45, + NozzleDTempEnterKey = 46, + HotbedPTempEnterKey = 47, + HotbedITempEnterKey = 48, + HotbedDTempEnterKey = 49, + PrintFanSpeedkey = 50, + ChangePageKey = 51, + ErrorKey = 52, + StartFileKey = 53, + SelectFileKey = 54, + + //新增激光 + #if HAS_CUTTER + SwitchDeviceKey = 55, + PauseEngraveingKey = 56, + EngraveWarningKey = 57, + AdjustFocusKey = 58, + SwAdjustFocusKey = 59, + LaserMoveAxis = 60, + FocusZAxisKey = 61, + //FocusZAxisKey = 62, //被占用 + #endif + +}; + +const unsigned long Addrbuf[] = +{ + 0x1002, + 0x1004, + 0x1006, + 0x1008, + 0x100A, // 4 + 0x100C, + 0x1026, + 0x1030, + 0x1032, + 0x1034, // 9 + 0x103A, + 0x103E, + 0x1044, + 0x1046, + 0x1048, // 14 + 0x104A, + 0x104C, + 0x1052, + 0x1054, + 0x1056, // 19 + 0x105C, + 0x105F, + 0x1090, + 0x1092, + 0x1094, // 24 + 0x1096, + 0x1098, + 0x109A, + 0x109E, + 0x10A0, // 29 + 0x10A2, + 0x10A4, + 0x10A6, + 0x10A8, + 0x10AA, // 34 + 0x10AC, + 0x10AE, + 0x10B0, + 0x10B2, + 0x10B4, // 39 + 0x10B6, + 0x10B8, + 0x10BA, + 0x10BC, + 0x10BE, // 44 + 0x10C0, + 0x10C2, + 0x10C4, + 0x10C6, + 0x10C8, // 49 + 0x10CA, + 0x110E, + 0x111A, + 0x2198, + 0x2199, // 54 + + //新增激光 + #if HAS_CUTTER + 0x2201, //SwitchDeviceKey + 0x2202, + 0x2203, //EngraveWarningKey + 0x2204, + 0x2205, // 调整激光焦距 + 0x2206, // 移动轴 + 0x2207, // 调整焦距 + //0x2208, 被占用 + #endif + 0 +}; + +void ErrorHanding(void); +extern void RTSUpdate(void); +extern void RTSInit(void); + +#if HAS_CUTTER + extern void RTSUpdateLaser(void); +#endif + +extern float zprobe_zoffset; +extern char waitway; +extern int change_page_font; +extern uint8_t language_change_font; +extern uint8_t lang; +// extern uint8_t wifi_enable_flag; +extern int Update_Time_Value; +extern bool PoweroffContinue; +// extern bool sdcard_pause_check; +// extern bool sd_printing_autopause; + +// extern unsigned char AxisUnitMode; +extern bool home_flag; +// extern bool G29_flag; +extern bool heat_flag; +// extern bool AutohomeZflag; +extern char commandbuf[30]; + +extern bool StartPrint_flag; +// extern bool pause_action_flag; + +extern char errorway; +extern char errornum; +extern char error_sd_num; + +// extern bool home_count; + +extern unsigned char Count_first; + +extern unsigned char Count_probe; + +extern float z_offset; + +extern bool eeprom_save_flag; + +#define EEPROM_SAVE_LANGUAGE() {if(eeprom_save_flag) { settings.save(); eeprom_save_flag = false; }} + +// extern bool flag_over_shutdown; +// extern bool flag_counter_printover_to_shutdown; + +void Read_lcd_Register(unsigned char len, unsigned int addr); +void Write_lcd_Register(unsigned int addr,unsigned char data); +void lcd_eight_language(void); + +void RTS_PauseMoveAxisPage(void); +void RTS_AutoBedLevelPage(void); +void RTS_MoveAxisHoming(void); +void RTS_MoveParkNozzle(void); +void RTS_CommandPause(void); +#endif diff --git a/Marlin/src/lcd/e3v2/creality/lcd_rts_laser.cpp b/Marlin/src/lcd/e3v2/creality/lcd_rts_laser.cpp new file mode 100644 index 000000000000..4d37b98884a4 --- /dev/null +++ b/Marlin/src/lcd/e3v2/creality/lcd_rts_laser.cpp @@ -0,0 +1,1849 @@ +#include +#include +#include +#include +// #include +#include "lcd_rts.h" +#include "../../../MarlinCore.h" +#include "../../../inc/MarlinConfig.h" +#include "../../../module/settings.h" +#include "../../../core/serial.h" +#include "../../../core/macros.h" +#include "../../fontutils.h" +#include "../../marlinui.h" +#include "../../../sd/cardreader.h" +#include "../../../feature/babystep.h" +#include "../../../module/temperature.h" +#include "../../../module/printcounter.h" +#include "../../../module/motion.h" +#include "../../../module/planner.h" +#include "../../../gcode/queue.h" +#include "../../../gcode/gcode.h" +#include "../../../module/probe.h" + +// #include "../../../feature/bedlevel/abl/bbl.h" + +#include "../../../libs/duration_t.h" + +#if ENABLED(BLTOUCH) + #include "../../../module/endstops.h" +#endif + +#if ENABLED(FILAMENT_RUNOUT_SENSOR) + #include "../../../feature/runout.h" +#endif + +#if ENABLED(POWER_LOSS_RECOVERY) + #include "../../../feature/powerloss.h" +#elif ENABLED(CREALITY_POWER_LOSS) + #include "../../feature/PRE01_Power_loss/PRE01_Power_loss.h" +#endif + +#if ENABLED(LASER_FEATURE) + +#if HAS_CUTTER + #include "lcd_rts_laser.h" + #include "../../../src/feature/spindle_laser.h" +#endif + +#ifdef LCD_SERIAL_PORT + #define LCDSERIAL LCD_SERIAL +#elif SERIAL_PORT_2 + #define LCDSERIAL MYSERIAL2 +#endif + +#if ENABLED(RTS_AVAILABLE) + + + +extern void RTS_line_to_current(AxisEnum axis); + +constexpr float default_max_feedrate[] = DEFAULT_MAX_FEEDRATE; +constexpr float default_max_acceleration[] = DEFAULT_MAX_ACCELERATION; +constexpr float default_max_jerk[] = { DEFAULT_XJERK, DEFAULT_YJERK, DEFAULT_ZJERK, DEFAULT_EJERK }; +constexpr float default_axis_steps_per_unit[] = DEFAULT_AXIS_STEPS_PER_UNIT; + +static bool first_start_laser = true; +bool laser_axes_should_home = false; + +void RTSSHOW::RTS_SDcard_Stop_laser(void) +{ + card.flag.abort_sd_printing = true; //card.flag.abort_sd_printing + queue.clear(); + if(home_flag) planner.synchronize(); + + quickstop_stepper(); + print_job_timer.stop(); + + print_job_timer.reset(); + laser_device.quick_stop(); + + PoweroffContinue = false; + // sd_printing_autopause = false; + if(CardReader::flag.mounted) + { + #if ENABLED(SDSUPPORT) && ENABLED(POWER_LOSS_RECOVERY) + card.removeJobRecoveryFile(); + #endif + } + + RTS_SndData(1, MOTOR_FREE_ICON_VP); + RTS_SndData(0, PRINT_PROCESS_ICON_VP); + RTS_SndData(0, PRINT_PROCESS_VP); + delay(2); + for(int j = 0;j < 20;j ++) + { + // clean screen. + RTS_SndData(0, PRINT_FILE_TEXT_VP + j); + // clean filename + RTS_SndData(0, SELECT_FILE_TEXT_VP + j); + } + planner.synchronize(); + + // RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); + // change_page_font = 51; +} + + +void RTSSHOW::RTS_HandleData_Laser(void) +{ + int Checkkey = -1; + // for waiting + if(waitway > 0) + { + memset(&recdat, 0, sizeof(recdat)); + recdat.head[0] = FHONE; + recdat.head[1] = FHTWO; + return; + } + for(int i = 0;Addrbuf[i] != 0;i++) + { + if(recdat.addr == Addrbuf[i]) + { + if(Addrbuf[i] >= ChangePageKey) + { + Checkkey = i; + } + break; + } + } + + if(Checkkey < 0) + { + memset(&recdat, 0, sizeof(recdat)); + recdat.head[0] = FHONE; + recdat.head[1] = FHTWO; + return; + } + + // SERIAL_ECHOPAIR("\nCheckkey=", Checkkey, " recdat.data[0]=", recdat.data[0]); + + switch(Checkkey) + { + case MainEnterKey: + if(recdat.data[0] == 1) + { + CardUpdate = true; + CardRecbuf.recordcount = -1; + RTS_SDCardUpate(); + RTS_SndData(ExchangePageBase + 52, ExchangepageAddr); + change_page_font = 52; + EEPROM_SAVE_LANGUAGE(); + } + else if(recdat.data[0] == 2) + { + AxisUnitMode = 1; + axis_unit = 10.0; + + if(!laser_axes_should_home) { + laser_axes_should_home = true; + waitway = 9; + queue.enqueue_now_P(HOME_LASER); + RTS_SndData(ExchangePageBase + 40, ExchangepageAddr); + change_page_font = 40; + + RTS_SndData(0, AXIS_X_COORD_VP); + RTS_SndData(10*10, AXIS_Y_COORD_VP); + + }else{ + RTS_SndData(ExchangePageBase + 70, ExchangepageAddr); + change_page_font = 70; + RTS_SndData(10 * current_position[Y_AXIS], AXIS_Y_COORD_VP); + RTS_SndData(10 * current_position[Z_AXIS], AXIS_Z_COORD_VP); + } + EEPROM_SAVE_LANGUAGE(); + //RTS_SndData(1, FILAMENT_CONTROL_ICON_VP); + } + else if(recdat.data[0] == 3) + { + RTS_SndData(ExchangePageBase + 64, ExchangepageAddr); + change_page_font = 64; + EEPROM_SAVE_LANGUAGE(); + } + else if(recdat.data[0] == 4) + { + RTS_SndData(ExchangePageBase + 25, ExchangepageAddr); + change_page_font = 25; + planner.synchronize(); + queue.enqueue_now_P(PSTR("G28\nG1 F200 Z0.0")); + //RTS_SndData(1, AUTO_BED_LEVEL_TITLE_VP); + RTS_SndData(0, MOTOR_FREE_ICON_VP); + } + else if(recdat.data[0] == 5) + { + // card.flag.abort_sd_printing = true; + queue.clear(); + quickstop_stepper(); + print_job_timer.stop(); + RTS_SndData(0, MOTOR_FREE_ICON_VP); // 激光时锁定 + RTS_SndData(0, PRINT_PROCESS_ICON_VP); + RTS_SndData(0, PRINT_PROCESS_VP); + delay(2); + RTS_SndData(0, PRINT_TIME_HOUR_VP); + RTS_SndData(0, PRINT_TIME_MIN_VP); + print_job_timer.reset(); + // sd_printing_autopause = false; + for(int j = 0;j < 20;j ++) + { + // clean screen. + RTS_SndData(0, PRINT_FILE_TEXT_VP + j); + // clean filename + RTS_SndData(0, SELECT_FILE_TEXT_VP + j); + } + RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); + change_page_font = 51; + } + else if(recdat.data[0] == 6) + { + waitway = 3; + RTS_SndData(1, AUTO_BED_LEVEL_TITLE_VP); + RTS_SndData(AUTO_BED_LEVEL_PREHEAT, AUTO_BED_PREHEAT_HEAD_DATA_VP); + // RTS_SndData(ExchangePageBase + 26, ExchangepageAddr); + // change_page_font = 26; + rtscheck.RTS_SndData(0 , AUTO_LEVELING_PERCENT_DATA_VP); + thermalManager.setTargetHotend(AUTO_BED_LEVEL_PREHEAT, 0); + RTS_SndData(AUTO_BED_LEVEL_PREHEAT, HEAD_SET_TEMP_VP); + if(thermalManager.temp_hotend[0].celsius < (AUTO_BED_LEVEL_PREHEAT - 5)) + { + queue.enqueue_now_P(PSTR("G4 S40")); + } + + if(axes_should_home()) queue.enqueue_one_P(PSTR("G28")); + queue.enqueue_one_P(PSTR("G29")); + RTS_SndData(0, MOTOR_FREE_ICON_VP); + } + else if(recdat.data[0] == 7) + { + if(errorway == 1) + { + + } + else if(errorway == 2) + { + // auto home fail + } + else if(errorway == 3) + { + // bed leveling fail + } + else if(errorway == 4) + { + + } + } + else if(recdat.data[0] == 8) + { + RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); + change_page_font = 51; + EEPROM_SAVE_LANGUAGE(); + } + break; + + case AdjustEnterKey: + if(recdat.data[0] == 1) + { + RTS_SndData(ExchangePageBase + 74, ExchangepageAddr); + change_page_font = 74; + } + else if(recdat.data[0] == 2) + { + if(card.isPrinting()) + { + RTS_SndData(ExchangePageBase + 59, ExchangepageAddr); + change_page_font = 59; + } + else + { + RTS_SndData(ExchangePageBase + 61, ExchangepageAddr); + change_page_font = 61; + } + // settings.save(); + } + else if(recdat.data[0] == 5) + { + RTS_SndData(ExchangePageBase + 15, ExchangepageAddr); + change_page_font = 15; + } + else if(recdat.data[0] == 7) + { + RTS_SndData(ExchangePageBase + 74, ExchangepageAddr); + change_page_font = 74; + settings.save(); + } + break; + + case PrintSpeedEnterKey: + feedrate_percentage = recdat.data[0]; + RTS_SndData(feedrate_percentage, PRINT_SPEED_RATE_VP); + break; + + case StopPrintKey: + if(recdat.data[0] == 1) + { + RTS_SndData(ExchangePageBase + 58, ExchangepageAddr); + change_page_font = 58; + } + else if(recdat.data[0] == 2) + { + waitway = 10; + + //card.flag.abort_sd_printing = true; //card.flag.abort_sd_printing + RTS_SndData(0, PRINT_TIME_HOUR_VP); + RTS_SndData(0, PRINT_TIME_MIN_VP); + Update_Time_Value = 0; + + runout.reset(); + + RTS_SndData(ExchangePageBase + 40, ExchangepageAddr); + change_page_font = 40; + RTS_SDcard_Stop_laser(); + cutter.apply_power(0);//关闭激光 + } + else if(recdat.data[0] == 3) + { + if(card.isPrinting()) + { + RTS_SndData(ExchangePageBase + 59, ExchangepageAddr); + change_page_font = 59; + } + else + { + RTS_SndData(ExchangePageBase + 61, ExchangepageAddr); + change_page_font = 61; + } + } + break; + + case PausePrintKey: + if(recdat.data[0] == 1) + { + if(card.isPrinting())// && (thermalManager.temp_hotend[0].celsius > (thermalManager.temp_hotend[0].target - 5)) && (thermalManager.temp_bed.celsius > (thermalManager.temp_bed.target - 3))) + { + RTS_SndData(ExchangePageBase + 62, ExchangepageAddr); + change_page_font = 62; + } + else + { + RTS_SndData(ExchangePageBase + 59, ExchangepageAddr); + change_page_font = 59; + } + } + else if(recdat.data[0] == 2) + { + waitway = 1; + // pause_e = current_position[E_AXIS]; + card.pauseSDPrint(); + print_job_timer.pause(); + pause_action_flag = true; + Update_Time_Value = 0; + RTS_SndData(ExchangePageBase + 61, ExchangepageAddr); + change_page_font = 61; + planner.synchronize(); + sdcard_pause_check = false; + // queue.inject((char*)"M25"); + } + else if(recdat.data[0] == 3) + { + if(card.isPrinting()) + { + RTS_SndData(ExchangePageBase + 59, ExchangepageAddr); + change_page_font = 59; + } + else + { + RTS_SndData(ExchangePageBase + 61, ExchangepageAddr); + change_page_font = 61; + } + } + break; + + case ResumePrintKey: + if(recdat.data[0] == 1) + { + RTS_SndData(ExchangePageBase + 59, ExchangepageAddr); + change_page_font = 59; + cutter.apply_power(laser_device.power); + card.startOrResumeFilePrinting(); + print_job_timer.start(); + Update_Time_Value = 0; + sdcard_pause_check = true; + //queue.inject((char*)"M24"); + } + else if(recdat.data[0] == 2) + { + + } + else if(recdat.data[0] == 3) + { + // queue.inject_P(PSTR("M108")); + wait_for_user = false; + // runout.filament_ran_out = false; + runout.reset(); + + RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + change_page_font = 10; + + // card.startFileprint(); + print_job_timer.start(); + Update_Time_Value = 0; + sdcard_pause_check = true; + } + break; + + case ZoffsetEnterKey: + + last_zoffset = zprobe_zoffset; + if(recdat.data[0] >= 32768) + { + //zprobe_zoffset = ((float)recdat.data[0] - 65536) / 100; + zprobe_zoffset = (signed short)recdat.data[0]/100.0; + zprobe_zoffset -= 0.001; + } + else + { + zprobe_zoffset = ((float)recdat.data[0]) / 100; + zprobe_zoffset += 0.001; + } + if(WITHIN((zprobe_zoffset), Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) + { + babystep.add_mm_laser(Z_AXIS, zprobe_zoffset - last_zoffset); + //SERIAL_ECHOPAIR("\nZoffset=", zprobe_zoffset - last_zoffset); + } + probe.offset.z = zprobe_zoffset; + // settings.save(); + break; + + case PrepareEnterKey: + //SERIAL_ECHOPAIR("PrepareEnterKey=", recdat.data[0]); + if(recdat.data[0] == 1) + { + RTS_SndData(ExchangePageBase + 28, ExchangepageAddr); + change_page_font = 28; + } + else if(recdat.data[0] == 2) //语言选择 + { + RTS_SndData(ExchangePageBase + 65, ExchangepageAddr); + change_page_font = 65; + EEPROM_SAVE_LANGUAGE(); + } + else if(recdat.data[0] == 3) + { + rtscheck.RTS_SndData(10 * current_position[X_AXIS], AXIS_X_COORD_VP); + rtscheck.RTS_SndData(10 * current_position[Y_AXIS], AXIS_Y_COORD_VP); + rtscheck.RTS_SndData(10 * current_position[Z_AXIS], AXIS_Z_COORD_VP); + delay(2); + RTS_SndData(ExchangePageBase + 70, ExchangepageAddr); + change_page_font = 70; + } + else if(recdat.data[0] == 4) + { + RTS_SndData(ExchangePageBase + 58, ExchangepageAddr); + change_page_font = 58; + } + else if(recdat.data[0] == 5) + { + RTS_SndData(MACHINE_TYPE, MACHINE_TYPE_ABOUT_TEXT_VP); + RTS_SndData(FIRMWARE_VERSION, FIREWARE_VERSION_ABOUT_TEXT_VP); + //RTS_SndData(SCREEN_VERSION, PRINTER_DISPLAY_VERSION_TEXT_VP); // 20220223 屏幕版本改由屏幕工程设定 + RTS_SndData(HARDWARE_VERSION, HARDWARE_VERSION_ABOUT_TEXT_VP); + RTS_SndData(PRINT_SIZE, PRINTER_PRINTSIZE_TEXT_VP); + delay(5); + if(1 == lang) + { + RTS_SndData(CORP_WEBSITE_C, WEBSITE_ABOUT_TEXT_VP); + } + else + { + RTS_SndData(CORP_WEBSITE_E, WEBSITE_ABOUT_TEXT_VP); + } + RTS_SndData(ExchangePageBase + 66, ExchangepageAddr); + change_page_font = 66; + EEPROM_SAVE_LANGUAGE(); + } + else if(recdat.data[0] == 6) + { + queue.enqueue_now_P(PSTR("M84")); + RTS_SndData(1, MOTOR_FREE_ICON_VP); + } + else if(recdat.data[0] == 7) + { + RTS_SndData(ExchangePageBase + 43, ExchangepageAddr); + change_page_font = 43; + } + else if(recdat.data[0] == 8) + { + settings.save(); + RTS_SndData(ExchangePageBase + 21, ExchangepageAddr); + change_page_font = 21; + } + else if(recdat.data[0] == 9) + { + RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + } + else if(recdat.data[0] == 0xA) + { + RTS_SndData(ExchangePageBase + 42, ExchangepageAddr); + change_page_font = 42; + } + else if(recdat.data[0] == 0xB)// 恢复出厂设置 确定 + { + #if ENABLED(HAS_MENU_RESET_WIFI) + WIFI_STATE = PRESSED; + OUT_WRITE(RESET_WIFI_PIN, LOW); + #endif + (void)settings.reset(); + (void)settings.save(); + RTS_Init(); + RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); + change_page_font = 51; + } + else if(recdat.data[0] == 0xC) + { + RTS_SndData(ExchangePageBase + 44, ExchangepageAddr); + change_page_font = 44; + } + else if(recdat.data[0] == 0xD) + { + settings.reset(); + settings.save(); + RTS_SndData(ExchangePageBase + 33, ExchangepageAddr); + change_page_font = 33; + } + else if(recdat.data[0] == 0xE) // 恢复出厂设置 取消 + { + if(!planner.has_blocks_queued()) + { + RTS_SndData(ExchangePageBase + 64, ExchangepageAddr); + change_page_font = 64; + } + } + else if(recdat.data[0] == 0xF)//高级设置 + { + RTS_SndData(ExchangePageBase + 64, ExchangepageAddr); + change_page_font = 64; + settings.save();//delay(100); + } + else if(recdat.data[0] == 0x10) + { + RTS_SndData(ExchangePageBase + 25, ExchangepageAddr); + change_page_font = 25; + } + else if(recdat.data[0] == 0x11) + { + RTS_SndData(ExchangePageBase + 21, ExchangepageAddr); + change_page_font = 21; + } + break; + + case AutoHomeKey: + if(recdat.data[0] == 1) + { + AxisUnitMode = 1; + axis_unit = 10.0; + RTS_SndData(ExchangePageBase + 70, ExchangepageAddr); + change_page_font = 70; + RTS_SndData(3, MOVEAXIS_UNIT_ICON_VP); + } + else if(recdat.data[0] == 2) + { + AxisUnitMode = 2; + axis_unit = 1.0; + RTS_SndData(ExchangePageBase + 71, ExchangepageAddr); + change_page_font = 71; + RTS_SndData(2, MOVEAXIS_UNIT_ICON_VP); + } + else if(recdat.data[0] == 3) + { + AxisUnitMode = 3; + axis_unit = 0.1; + RTS_SndData(ExchangePageBase + 72, ExchangepageAddr); + change_page_font = 72; + RTS_SndData(1, MOVEAXIS_UNIT_ICON_VP); + } + else if(recdat.data[0] == 4) + { + waitway = 4; + queue.enqueue_now_P(PSTR("G28 X Y")); + Update_Time_Value = 0; + RTS_SndData(0, MOTOR_FREE_ICON_VP); + } + else if(recdat.data[0] == 5) + { + waitway = 4; + queue.enqueue_now_P(PSTR("G28 Z")); + RTS_SndData(0, MOTOR_FREE_ICON_VP); + Update_Time_Value = 0; + } + break; + + case XaxismoveKey: + float x_min, x_max; + waitway = 4; + x_min = 0; + x_max = X_MAX_POS; + current_position[X_AXIS] = ((float)recdat.data[0]) / 10; + if(current_position[X_AXIS] < x_min) + { + current_position[X_AXIS] = x_min; + } + else if(current_position[X_AXIS] > x_max) + { + current_position[X_AXIS] = x_max; + } + RTS_line_to_current(X_AXIS); + RTS_SndData(10 * current_position[X_AXIS], AXIS_X_COORD_VP); + delay(1); + RTS_SndData(0, MOTOR_FREE_ICON_VP); + waitway = 0; + break; + + case YaxismoveKey: + float y_min, y_max; + waitway = 4; + y_min = 0; + y_max = Y_MAX_POS; + current_position[Y_AXIS] = ((float)recdat.data[0]) / 10; + if(current_position[Y_AXIS] < y_min) + { + current_position[Y_AXIS] = y_min; + } + else if(current_position[Y_AXIS] > y_max) + { + current_position[Y_AXIS] = y_max; + } + RTS_line_to_current(Y_AXIS); + RTS_SndData(10 * current_position[Y_AXIS], AXIS_Y_COORD_VP); + delay(1); + RTS_SndData(0, MOTOR_FREE_ICON_VP); + waitway = 0; + break; + + case ZaxismoveKey: + float z_min, z_max; + waitway = 4; + z_min = Z_MIN_POS; + z_max = Z_MAX_POS; + + current_position[Z_AXIS] = ((float)recdat.data[0])/10; + if (current_position[Z_AXIS] < z_min) + { + current_position[Z_AXIS] = z_min; + } + else if (current_position[Z_AXIS] > z_max) + { + current_position[Z_AXIS] = z_max; + } + + RTS_line_to_current(Z_AXIS); + RTS_SndData(10 * current_position[Z_AXIS], AXIS_Z_COORD_VP); + delay(1); + RTS_SndData(0, MOTOR_FREE_ICON_VP); + waitway = 0; + break; + + case SelectLanguageKey: + if(recdat.data[0] != 0) + { + lang = recdat.data[0]; + } + language_change_font = lang; + for(int i = 0;i < 9;i ++) + { + RTS_SndData(0, LANGUAGE_CHINESE_TITLE_VP + i); + } + RTS_SndData(1, LANGUAGE_CHINESE_TITLE_VP + (language_change_font - 1)); + languagedisplayUpdate(); + // settings.save(); + eeprom_save_flag = true; + break; + + case PowerContinuePrintKey: + if(recdat.data[0] == 1) + { + + #if ENABLED(POWER_LOSS_RECOVERY) + if(recovery.info.recovery_flag) + { + power_off_type_yes = 1; + Update_Time_Value = 0; + RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + change_page_font = 10; + // recovery.resume(); + queue.enqueue_now_P(PSTR("M1000")); + + PoweroffContinue = true; + sdcard_pause_check = true; + zprobe_zoffset = probe.offset.z; + RTS_SndData(zprobe_zoffset * 100, AUTO_BED_LEVEL_ZOFFSET_VP); + RTS_SndData(feedrate_percentage, PRINT_SPEED_RATE_VP); + } + #elif ENABLED(CREALITY_POWER_LOSS) + if(pre01_power_loss.info.recovery_flag) + { + power_off_type_yes = 1; + Update_Time_Value = 0; + RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + change_page_font = 10; + pre01_power_loss.resume(); //�ָ�SD����ӡ + // queue.enqueue_now_P(PSTR("M1000")); + + PoweroffContinue = true; + sdcard_pause_check = true; + zprobe_zoffset = probe.offset.z; + RTS_SndData(zprobe_zoffset * 100, AUTO_BED_LEVEL_ZOFFSET_VP); + RTS_SndData(feedrate_percentage, PRINT_SPEED_RATE_VP); + } + #endif + } + else if(recdat.data[0] == 2) + { + Update_Time_Value = RTS_UPDATE_VALUE; + RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); + change_page_font = 51; + RTS_SndData(0, PRINT_TIME_HOUR_VP); + RTS_SndData(0, PRINT_TIME_MIN_VP); + Update_Time_Value = 0; + RTS_SDcard_Stop_laser(); + } + break; + + case StoreMemoryKey: + if(recdat.data[0] == 1) + { + rtscheck.RTS_SndData(ExchangePageBase + 37, ExchangepageAddr); + change_page_font = 37; + } + if(recdat.data[0] == 2) + { + queue.enqueue_now_P(PSTR("M502")); + rtscheck.RTS_SndData(ExchangePageBase + 33, ExchangepageAddr); + change_page_font = 33; + settings.save(); + RTS_SndData(default_max_feedrate[X_AXIS], MAX_VELOCITY_XAXIS_DATA_VP); + RTS_SndData(default_max_feedrate[Y_AXIS], MAX_VELOCITY_YAXIS_DATA_VP); + RTS_SndData(default_max_feedrate[Z_AXIS], MAX_VELOCITY_ZAXIS_DATA_VP); + RTS_SndData(default_max_feedrate[E_AXIS], MAX_VELOCITY_EAXIS_DATA_VP); + // delay(20); + + RTS_SndData(default_max_acceleration[X_AXIS], MAX_ACCEL_XAXIS_DATA_VP); + RTS_SndData(default_max_acceleration[Y_AXIS], MAX_ACCEL_YAXIS_DATA_VP); + RTS_SndData(default_max_acceleration[Z_AXIS], MAX_ACCEL_ZAXIS_DATA_VP); + RTS_SndData(default_max_acceleration[E_AXIS], MAX_ACCEL_EAXIS_DATA_VP); + // delay(20); + + RTS_SndData(default_max_jerk[X_AXIS] * 100, MAX_JERK_XAXIS_DATA_VP); + RTS_SndData(default_max_jerk[Y_AXIS] * 100, MAX_JERK_YAXIS_DATA_VP); + RTS_SndData(default_max_jerk[Z_AXIS] * 100, MAX_JERK_ZAXIS_DATA_VP); + RTS_SndData(default_max_jerk[E_AXIS] * 100, MAX_JERK_EAXIS_DATA_VP); + // delay(20); + + RTS_SndData(default_axis_steps_per_unit[X_AXIS] * 10, MAX_STEPSMM_XAXIS_DATA_VP); + RTS_SndData(default_axis_steps_per_unit[Y_AXIS] * 10, MAX_STEPSMM_YAXIS_DATA_VP); + RTS_SndData(default_axis_steps_per_unit[Z_AXIS] * 10, MAX_STEPSMM_ZAXIS_DATA_VP); + RTS_SndData(default_axis_steps_per_unit[E_AXIS] * 10, MAX_STEPSMM_EAXIS_DATA_VP); + // delay(20); + + RTS_SndData(default_nozzle_ptemp * 100, NOZZLE_TEMP_P_DATA_VP); + RTS_SndData(default_nozzle_itemp * 100, NOZZLE_TEMP_I_DATA_VP); + RTS_SndData(default_nozzle_dtemp * 100, NOZZLE_TEMP_D_DATA_VP); + delay(20); + RTS_SndData(default_hotbed_ptemp * 100, HOTBED_TEMP_P_DATA_VP); + RTS_SndData(default_hotbed_itemp * 100, HOTBED_TEMP_I_DATA_VP); + RTS_SndData(default_hotbed_dtemp * 10, HOTBED_TEMP_D_DATA_VP); + // delay(100); + } + else if(recdat.data[0] == 3) + { + rtscheck.RTS_SndData(ExchangePageBase + 33, ExchangepageAddr); + change_page_font = 33; + } + else if(recdat.data[0] == 4) + { + rtscheck.RTS_SndData(ExchangePageBase + 34, ExchangepageAddr); + change_page_font = 34; + } + else if(recdat.data[0] == 5) + { + rtscheck.RTS_SndData(ExchangePageBase + 39, ExchangepageAddr); + change_page_font = 39; + } + // else if(recdat.data[0] == 6) + // { + // if(wifi_enable_flag) + // { + // wifi_enable_flag = 0; + // queue.inject_P(PSTR("M115")); + // RTS_SndData(1, ADV_SETTING_WIFI_ICON_VP); + // settings.save(); + // } + // else + // { + // wifi_enable_flag = 1; + // queue.inject_P(PSTR("M115")); + // RTS_SndData(0, ADV_SETTING_WIFI_ICON_VP); + // settings.save(); + // } + // } + else if(recdat.data[0] == 7) //传动比 + { + rtscheck.RTS_SndData(ExchangePageBase + 76, ExchangepageAddr); + change_page_font = 76; + } + else if(recdat.data[0] == 8) //最大加速度 + { + rtscheck.RTS_SndData(ExchangePageBase + 67, ExchangepageAddr); + change_page_font = 67; + } + else if(recdat.data[0] == 9) //最大拐角速度 + { + rtscheck.RTS_SndData(ExchangePageBase + 68, ExchangepageAddr); + change_page_font = 68; + } + else if(recdat.data[0] == 0x0A) //最大速度 + { + rtscheck.RTS_SndData(ExchangePageBase + 69, ExchangepageAddr); + change_page_font = 69; + } + else if(recdat.data[0] == 0x0B) + { + rtscheck.RTS_SndData(ExchangePageBase + 33, ExchangepageAddr); + change_page_font = 33; + settings.save(); + delay(100); + } + else if(recdat.data[0] == 0x0C) + { + rtscheck.RTS_SndData(ExchangePageBase + 34, ExchangepageAddr); + change_page_font = 34; + settings.save(); + delay(100); + } + else if(recdat.data[0] == 0x0D)//返回按钮 + { + rtscheck.RTS_SndData(ExchangePageBase + 64, ExchangepageAddr); + change_page_font = 64; + // settings.save(); + // delay(100); + } + break; + + + case VelocityXaxisEnterKey: + float velocity_xaxis; + velocity_xaxis = planner.settings.max_feedrate_mm_s[0]; + velocity_xaxis = recdat.data[0]; + RTS_SndData(velocity_xaxis, MAX_VELOCITY_XAXIS_DATA_VP); + planner.set_max_feedrate(X_AXIS, velocity_xaxis); + break; + + case VelocityYaxisEnterKey: + float velocity_yaxis; + velocity_yaxis = planner.settings.max_feedrate_mm_s[1]; + velocity_yaxis = recdat.data[0]; + RTS_SndData(velocity_yaxis, MAX_VELOCITY_YAXIS_DATA_VP); + planner.set_max_feedrate(Y_AXIS, velocity_yaxis); + break; + + case VelocityZaxisEnterKey: + float velocity_zaxis; + velocity_zaxis = planner.settings.max_feedrate_mm_s[2]; + velocity_zaxis = recdat.data[0]; + RTS_SndData(velocity_zaxis, MAX_VELOCITY_ZAXIS_DATA_VP); + planner.set_max_feedrate(Z_AXIS, velocity_zaxis); + break; + + case VelocityEaxisEnterKey: + float velocity_eaxis; + velocity_eaxis = planner.settings.max_feedrate_mm_s[3]; + velocity_eaxis = recdat.data[0]; + RTS_SndData(velocity_eaxis, MAX_VELOCITY_EAXIS_DATA_VP); + planner.set_max_feedrate(E_AXIS, velocity_eaxis); + break; + + + case AccelXaxisEnterKey: + float accel_xaxis; + accel_xaxis = planner.settings.max_acceleration_mm_per_s2[0]; + accel_xaxis = recdat.data[0]; + RTS_SndData(accel_xaxis, MAX_ACCEL_XAXIS_DATA_VP); + planner.set_max_acceleration(X_AXIS, accel_xaxis); + break; + + case AccelYaxisEnterKey: + float accel_yaxis; + accel_yaxis = planner.settings.max_acceleration_mm_per_s2[1]; + accel_yaxis = recdat.data[0]; + RTS_SndData(accel_yaxis, MAX_ACCEL_YAXIS_DATA_VP); + planner.set_max_acceleration(Y_AXIS, accel_yaxis); + break; + + case AccelZaxisEnterKey: + float accel_zaxis; + accel_zaxis = planner.settings.max_acceleration_mm_per_s2[2]; + accel_zaxis = recdat.data[0]; + RTS_SndData(accel_zaxis, MAX_ACCEL_ZAXIS_DATA_VP); + planner.set_max_acceleration(Z_AXIS, accel_zaxis); + break; + + case AccelEaxisEnterKey: + float accel_eaxis; + accel_eaxis = planner.settings.max_acceleration_mm_per_s2[3]; + accel_eaxis = recdat.data[0]; + RTS_SndData(accel_eaxis, MAX_ACCEL_EAXIS_DATA_VP); + planner.set_max_acceleration(E_AXIS, accel_eaxis); + break; + + case JerkXaxisEnterKey: + float jerk_xaxis; + jerk_xaxis = planner.max_jerk.x; + jerk_xaxis = (float)recdat.data[0] / 100; + RTS_SndData(jerk_xaxis * 100, MAX_JERK_XAXIS_DATA_VP); + planner.set_max_jerk(X_AXIS, jerk_xaxis); + break; + + case JerkYaxisEnterKey: + float jerk_yaxis; + jerk_yaxis = planner.max_jerk.y; + jerk_yaxis = (float)recdat.data[0] / 100; + RTS_SndData(jerk_yaxis * 100, MAX_JERK_YAXIS_DATA_VP); + planner.set_max_jerk(Y_AXIS, jerk_yaxis); + break; + + case JerkZaxisEnterKey: + float jerk_zaxis; + jerk_zaxis = planner.max_jerk.z; + jerk_zaxis = (float)recdat.data[0] / 100; + RTS_SndData(jerk_zaxis * 100, MAX_JERK_ZAXIS_DATA_VP); + planner.set_max_jerk(Z_AXIS, jerk_zaxis); + break; + + case JerkEaxisEnterKey: + float jerk_eaxis; + jerk_eaxis = planner.max_jerk.e; + jerk_eaxis = (float)recdat.data[0] / 100; + RTS_SndData(jerk_eaxis * 100, MAX_JERK_EAXIS_DATA_VP); + planner.set_max_jerk(E_AXIS, jerk_eaxis); + break; + + case StepsmmXaxisEnterKey: + float stepsmm_xaxis; + stepsmm_xaxis = planner.settings.axis_steps_per_mm[0]; + stepsmm_xaxis = (float)recdat.data[0] / 10; + RTS_SndData(stepsmm_xaxis * 10, MAX_STEPSMM_XAXIS_DATA_VP); + planner.settings.axis_steps_per_mm[X_AXIS] = stepsmm_xaxis; + break; + + case StepsmmYaxisEnterKey: + float stepsmm_yaxis; + stepsmm_yaxis = planner.settings.axis_steps_per_mm[1]; + stepsmm_yaxis = (float)recdat.data[0] / 10; + RTS_SndData(stepsmm_yaxis * 10, MAX_STEPSMM_YAXIS_DATA_VP); + planner.settings.axis_steps_per_mm[Y_AXIS] = stepsmm_yaxis; + break; + + case StepsmmZaxisEnterKey: + float stepsmm_zaxis; + stepsmm_zaxis = planner.settings.axis_steps_per_mm[2]; + stepsmm_zaxis = (float)recdat.data[0] / 10; + RTS_SndData(stepsmm_zaxis * 10, MAX_STEPSMM_ZAXIS_DATA_VP); + planner.settings.axis_steps_per_mm[Z_AXIS] = stepsmm_zaxis; + break; + + case StepsmmEaxisEnterKey: + float stepsmm_eaxis; + stepsmm_eaxis = planner.settings.axis_steps_per_mm[3]; + stepsmm_eaxis = (float)recdat.data[0] / 10; + RTS_SndData(stepsmm_eaxis * 10, MAX_STEPSMM_EAXIS_DATA_VP); + planner.settings.axis_steps_per_mm[E_AXIS] = stepsmm_eaxis; + break; + + case NozzlePTempEnterKey: + float nozzle_ptemp; + nozzle_ptemp = (float)recdat.data[0] / 100; + RTS_SndData(nozzle_ptemp * 100, NOZZLE_TEMP_P_DATA_VP); + PID_PARAM(Kp, 0) = nozzle_ptemp; + break; + + case NozzleITempEnterKey: + float nozzle_itemp; + nozzle_itemp = (float)recdat.data[0] / 100; + RTS_SndData(nozzle_itemp * 100, NOZZLE_TEMP_I_DATA_VP); + PID_PARAM(Ki, 0) = scalePID_i(nozzle_itemp); + break; + + case NozzleDTempEnterKey: + float nozzle_dtemp; + nozzle_dtemp = (float)recdat.data[0] / 100; + RTS_SndData(nozzle_dtemp * 100, NOZZLE_TEMP_D_DATA_VP); + PID_PARAM(Kd, 0) = scalePID_d(nozzle_dtemp); + break; + + case HotbedPTempEnterKey: + float hotbed_ptemp; + hotbed_ptemp = (float)recdat.data[0] / 100; + RTS_SndData(hotbed_ptemp * 100, HOTBED_TEMP_P_DATA_VP); + thermalManager.temp_bed.pid.Kp = hotbed_ptemp; + break; + + case HotbedITempEnterKey: + float hotbed_itemp; + hotbed_itemp = (float)recdat.data[0] / 100; + RTS_SndData(hotbed_itemp * 100, HOTBED_TEMP_I_DATA_VP); + thermalManager.temp_bed.pid.Ki = scalePID_i(hotbed_itemp); + break; + + case HotbedDTempEnterKey: + float hotbed_dtemp; + hotbed_dtemp = (float)recdat.data[0] / 10; + RTS_SndData(hotbed_dtemp * 10, HOTBED_TEMP_D_DATA_VP); + thermalManager.temp_bed.pid.Kd = scalePID_d(hotbed_dtemp); + break; + + case PrintFanSpeedkey: + uint8_t fan_speed; + fan_speed = (uint8_t)recdat.data[0]; + RTS_SndData(fan_speed , PRINTER_FAN_SPEED_DATA_VP); + thermalManager.set_fan_speed(0, fan_speed); + break; + + case SelectFileKey: + if (RTS_SD_Detected()) + { + if (recdat.data[0] > CardRecbuf.Filesum) + { + break; + } + + CardRecbuf.recordcount = recdat.data[0] - 1; + + for(int j = 0; j < 10; j ++) + { + RTS_SndData(0, SELECT_FILE_TEXT_VP + j); + } + delay(2); + for(int j = 1;j <= CardRecbuf.Filesum;j ++) + { + RTS_SndData((unsigned long)0x073F, FilenameNature + j * 16); + RTS_SndData(0, FILE1_SELECT_ICON_VP - 1 + j); + } + RTS_SndData((unsigned long)0xFFFF, FilenameNature + recdat.data[0] * 16); + RTS_SndData(1, FILE1_SELECT_ICON_VP + (recdat.data[0] - 1)); + } + + RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); + change_page_font = 51; + rts_start_print = true; + delay(20); + RTS_SndData(CardRecbuf.Cardshowfilename[CardRecbuf.recordcount], SELECT_FILE_TEXT_VP); + break; + + case StartFileKey: + if((recdat.data[0] == 1) && RTS_SD_Detected()) + { + if(CardRecbuf.recordcount < 0) + { + break; + } + if(!rts_start_print) + { + //SERIAL_ECHOLNPAIR("\r\nrts_start_print: ", rts_start_print); + break; + } + + RTS_SndData(ExchangePageBase + 75, ExchangepageAddr); + change_page_font = 75; + + card.openAndPausePrintFile(CardRecbuf.Cardfilename[CardRecbuf.recordcount]); + + laser_device.reset_data(); + laser_device.set_read_gcode_range_on(); + laser_device.power = 0; + } + else if(recdat.data[0] == 2) + { + RTS_SndData(ExchangePageBase + 53, ExchangepageAddr); + change_page_font = 53; + } + else if(recdat.data[0] == 3) + { + RTS_SndData(ExchangePageBase + 52, ExchangepageAddr); + change_page_font = 52; + } + else if(recdat.data[0] == 4) + { + RTS_SndData(ExchangePageBase + 54, ExchangepageAddr); + change_page_font = 54; + } + else if(recdat.data[0] == 5) + { + RTS_SndData(ExchangePageBase + 53, ExchangepageAddr); + change_page_font = 53; + } + else if(recdat.data[0] == 6) + { + RTS_SndData(ExchangePageBase + 55, ExchangepageAddr); + change_page_font = 55; + } + else if(recdat.data[0] == 7) + { + RTS_SndData(ExchangePageBase + 54, ExchangepageAddr); + change_page_font = 54; + } + else if(recdat.data[0] == 8) + { + RTS_SndData(ExchangePageBase + 55, ExchangepageAddr); //by jankin 20210731 + change_page_font = 55; + } + else if(recdat.data[0] == 9) + { + RTS_SndData(ExchangePageBase + 52, ExchangepageAddr); + change_page_font = 52; + } + else if(recdat.data[0] == 0x0A) + { + RTS_SndData(ExchangePageBase + 55, ExchangepageAddr); + change_page_font = 55; + } + break; + + case ChangePageKey: + for(int i = 0; i < MaxFileNumber; i ++) + { + for (int j = 0; j < 20; j ++) + { + RTS_SndData(0, FILE1_TEXT_VP + i * 20 + j); + } + } + + for (int i = 0; i < CardRecbuf.Filesum; i++) + { + for (int j = 0; j < 20; j++) + { + RTS_SndData(0, CardRecbuf.addr[i] + j); + } + RTS_SndData((unsigned long)0xFFFF, FilenameNature + (i + 1) * 16); + } + + for (int j = 0; j < 20; j ++) + { + // clean screen. + RTS_SndData(0, PRINT_FILE_TEXT_VP + j); + // clean filename + RTS_SndData(0, SELECT_FILE_TEXT_VP + j); + } + // clean filename Icon + for (int j = 0; j < 20; j ++) + { + RTS_SndData(0, FILE1_SELECT_ICON_VP + j); + } + + RTS_SndData(CardRecbuf.Cardshowfilename[CardRecbuf.recordcount], PRINT_FILE_TEXT_VP); + + // represents to update file list + // if (CardUpdate && lcd_sd_status && IS_SD_INSERTED()) + if (CardUpdate && lcd_sd_status && RTS_SD_Detected()) + { + for (uint16_t i = 0; i < CardRecbuf.Filesum; i++) + { + delay(3); + RTS_SndData(CardRecbuf.Cardshowfilename[i], CardRecbuf.addr[i]); + RTS_SndData((unsigned long)0xFFFF, FilenameNature + (i + 1) * 16); + RTS_SndData(0, FILE1_SELECT_ICON_VP + i); + } + } + + RTS_SndData(MACVERSION, MACHINE_TYPE_ABOUT_TEXT_VP); + RTS_SndData(SOFTVERSION, FIREWARE_VERSION_ABOUT_TEXT_VP); + RTS_SndData(PRINT_SIZE, PRINTER_PRINTSIZE_TEXT_VP); + + if(1 == lang) + { + RTS_SndData(CORP_WEBSITE_C, WEBSITE_ABOUT_TEXT_VP); + } + else + { + RTS_SndData(CORP_WEBSITE_E, WEBSITE_ABOUT_TEXT_VP); + } + + Percentrecord = card.percentDone() + 1; + if (Percentrecord <= 100) + { + rtscheck.RTS_SndData((unsigned char)Percentrecord, PRINT_PROCESS_ICON_VP); + } + rtscheck.RTS_SndData((unsigned char)card.percentDone(), PRINT_PROCESS_VP); + + RTS_SndData(zprobe_zoffset * 100, AUTO_BED_LEVEL_ZOFFSET_VP); + + RTS_SndData(feedrate_percentage, PRINT_SPEED_RATE_VP); + RTS_SndData(thermalManager.temp_hotend[0].target, HEAD_SET_TEMP_VP); + RTS_SndData(thermalManager.temp_bed.target, BED_SET_TEMP_VP); + languagedisplayUpdate(); + + RTS_SndData(change_page_font + ExchangePageBase, ExchangepageAddr); + break; + + case FocusZAxisKey: + { + waitway = 4; + current_position[Z_AXIS] = ((signed short)recdat.data[0])/10.0; + RTS_line_to_current(Z_AXIS); + RTS_SndData(10 * current_position[Z_AXIS], AXIS_Z_COORD_VP); + delay(1); + RTS_SndData(0, MOTOR_FREE_ICON_VP); + waitway = 0; + } + break; + + case AdjustFocusKey: + if(recdat.data[0] == 1)//调节激光焦距 + { + RTS_SndData(10*current_position[Z_AXIS], SW_FOCUS_Z_VP); + RTS_SndData(ExchangePageBase + 63, ExchangepageAddr); + change_page_font = 63; + // }else if(recdat.data[0] == 2)// Z+ + // { + + // }else if(recdat.data[0] == 3)// Z- + // { + + }else if(recdat.data[0] == 4)// 返回 + { + RTS_SndData(ExchangePageBase + 64, ExchangepageAddr); + change_page_font = 64; + }else if(recdat.data[0] == 5)// √ + { + queue.inject_P(PSTR("G92.9 Z0")); + RTS_SndData(0, AXIS_Z_COORD_VP); + RTS_SndData(0, SW_FOCUS_Z_VP); + + RTS_SndData(ExchangePageBase + 64, ExchangepageAddr); + change_page_font = 64; + }else if(recdat.data[0] == 6)// x + { + // queue.inject_P(PSTR("G92.9 Z0")); + // RTS_SndData(0, AXIS_Z_COORD_VP); + // RTS_SndData(0, SW_FOCUS_Z_VP); + RTS_SndData(ExchangePageBase + 64, ExchangepageAddr); + change_page_font = 64; + } + break; + case SwAdjustFocusKey: + + break; + + case EngraveWarningKey: + if(recdat.data[0] == 1) + { + + }else if(recdat.data[0] == 2)// 轴移动 + { + AxisUnitMode = 1; + axis_unit = 10.0; + RTS_SndData(ExchangePageBase + 78, ExchangepageAddr); + change_page_font = 78; + }else if(recdat.data[0] == 3) // 直接雕刻 + { + char cmd[30]; + laser_device.laser_printing = true; // 雕刻中 + strcat_P(cmd, M24_STR); + queue.inject((char*)"M24");//cmd); + + RTS_SndData(ExchangePageBase + 59, ExchangepageAddr); + change_page_font = 59; + + }else if(recdat.data[0] == 4) //跑边框 + { + HMI_Area_Move(); + }else if(recdat.data[0] == 5) //返回 + { + CardRecbuf.recordcount = -1; + print_job_timer.stop(); + //RTS_SndData(1, MOTOR_FREE_ICON_VP); + RTS_SndData(0, PRINT_PROCESS_ICON_VP); + RTS_SndData(0, PRINT_PROCESS_VP); + delay(2); + RTS_SndData(0, PRINT_TIME_HOUR_VP); + RTS_SndData(0, PRINT_TIME_MIN_VP); + print_job_timer.reset(); + // sd_printing_autopause = false; + for(int j = 0;j < 20;j ++) + { + // clean screen. + RTS_SndData(0, PRINT_FILE_TEXT_VP + j); + // clean filename + RTS_SndData(0, SELECT_FILE_TEXT_VP + j); + } + + // RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); + // change_page_font = 51; + + CardUpdate = true; + CardRecbuf.recordcount = -1; + RTS_SDCardUpate(); + RTS_SndData(ExchangePageBase + 52, ExchangepageAddr); + change_page_font = 52; + + + } + break; + + case SwitchDeviceKey: + if(recdat.data[0] == 1)// FDM + { + + }else if(recdat.data[0] == 2)// 激光 + { + + }else if(recdat.data[0] == 3)// 切到FDM 确定 + { + uint8_t language; + + RTS_SndData(ExchangePageBase + 33, ExchangepageAddr); + change_page_font = 33; + laser_device.set_current_device(DEVICE_FDM); + + language = language_change_font; + settings.reset(); + language_change_font = language; + settings.save(); + probe.offset.z = zprobe_zoffset = 0; + RTS_SndData(zprobe_zoffset * 100, AUTO_BED_LEVEL_ZOFFSET_VP); + laser_device.laser_power_close(); + }else if(recdat.data[0] == 4)// 切到FDM 取消 + { + RTS_SndData(ExchangePageBase + 64, ExchangepageAddr); + change_page_font = 64; + // }else if(recdat.data[0] == 5)// 切到激光 确定 + // { + // RTS_SndData(10*current_position[Z_AXIS], SW_FOCUS_Z_VP); + // RTS_SndData(ExchangePageBase + 77, ExchangepageAddr); + // change_page_font = 77; + // laser_device.set_current_device(DEVICE_LASER); + // }else if(recdat.data[0] == 6)// 切到激光 取消 + // { + // RTS_SndData(ExchangePageBase + 33, ExchangepageAddr); + // change_page_font = 33; + }else if(recdat.data[0] == 7)// 切到熔积打印 + { + RTS_SndData(ExchangePageBase + 57, ExchangepageAddr); + change_page_font = 57; + }else if(recdat.data[0] == 8) //调整焦距 √ + { + queue.inject_P(PSTR("G92.9 Z0")); + RTS_SndData(0, AXIS_Z_COORD_VP); + RTS_SndData(0, SW_FOCUS_Z_VP); + + if(change_page_font == 33){ + RTS_SndData(ExchangePageBase + 64, ExchangepageAddr); + change_page_font = 64; + }else{ + RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); + change_page_font = 51; + } + // RTS_SndData(ExchangePageBase + 64, ExchangepageAddr); + // change_page_font = 64; + // }else if(recdat.data[0] == 9) //调整焦距 Z+ + // { + + // }else if(recdat.data[0] == 0x0A) //调整焦距 Z- + // { + + } + // else if(recdat.data[0] == 0x0B) // 切换激光雕刻 + // { + // RTS_SndData(ExchangePageBase + 56, ExchangepageAddr); + // change_page_font = 56; + // } + break; + + case LaserMoveAxis: + if(recdat.data[0] == 1)// + { + AxisUnitMode = 1; + axis_unit = 10.0; + RTS_SndData(ExchangePageBase + 78, ExchangepageAddr); + change_page_font = 78; + }else if(recdat.data[0] == 2)// + { + AxisUnitMode = 2; + axis_unit = 1.0; + RTS_SndData(ExchangePageBase + 79, ExchangepageAddr); + change_page_font = 79; + }else if(recdat.data[0] == 3) + { + AxisUnitMode = 3; + axis_unit = 0.1; + RTS_SndData(ExchangePageBase + 80, ExchangepageAddr); + change_page_font = 80; + }else if(recdat.data[0] == 4)// 返回 + { + RTS_SndData(ExchangePageBase + 75, ExchangepageAddr); + change_page_font = 75; + }else if(recdat.data[0] == 5)// 雕刻警告界面 xy home + { + waitway = 8; + RTS_SndData(ExchangePageBase + 40, ExchangepageAddr); + change_page_font = 40; + + queue.enqueue_now_P(HOME_LASER);//PSTR("G28 XY\nG0 X0 Y5")); + Update_Time_Value = 0; + RTS_SndData(0, AXIS_X_COORD_VP); + RTS_SndData(10*10, AXIS_Y_COORD_VP); + delay(1); + RTS_SndData(0, MOTOR_FREE_ICON_VP); + }else if(recdat.data[0] == 6)// 雕刻警告界面z home + { + queue.enqueue_now_P(PSTR("G0 Z0")); + }else if(recdat.data[0] == 7)// 激光 xy home + { + waitway = 9; + RTS_SndData(ExchangePageBase + 40, ExchangepageAddr); + change_page_font = 40; + queue.enqueue_now_P(HOME_LASER);//"G28 XY\n G1 X0 Y10 F3000");//EVENT_HOME_LASER);//PSTR("G28 XY\nG0 X0 Y5")); + Update_Time_Value = 0; + + RTS_SndData(0, AXIS_X_COORD_VP); + RTS_SndData(10*10, AXIS_Y_COORD_VP); + delay(1); + RTS_SndData(0, MOTOR_FREE_ICON_VP); + }else if(recdat.data[0] == 8)// 激光 z home + { + queue.enqueue_now_P(PSTR("G0 Z0")); + RTS_SndData(0, AXIS_Z_COORD_VP); + delay(1); + RTS_SndData(0, MOTOR_FREE_ICON_VP); + } + + + break; + + case ErrorKey: + { + if(recdat.data[0] == 1) + { + if(printingIsActive()) + { + RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + change_page_font = 10; + } + else if(printingIsPaused()) + { + RTS_SndData(ExchangePageBase + 12, ExchangepageAddr); + change_page_font = 12; + } + else + { + RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + } + + if(errorway == 4) + { + // reboot + HAL_reboot(); + } + } + } + break; + + default: + break; + } + + memset(&recdat, 0, sizeof(recdat)); + recdat.head[0] = FHONE; + recdat.head[1] = FHTWO; + +} + +void EachMomentUpdateLaser(void) +{ + millis_t ms = millis(); + if(ms > next_rts_update_ms) + { + #if ENABLED(POWER_LOSS_RECOVERY) + // print the file before the power is off. + if((power_off_type_yes == 0) && lcd_sd_status && (recovery.info.recovery_flag == true)) + { + rtscheck.RTS_SndData(ExchangePageBase, ExchangepageAddr); + if(startprogress < 100) + { + rtscheck.RTS_SndData(startprogress, START_PROCESS_ICON_VP); + } + // delay(30); + if((startprogress += 1) > 100) + { + rtscheck.RTS_SndData(StartSoundSet, SoundAddr); + power_off_type_yes = 1; + for(uint16_t i = 0;i < CardRecbuf.Filesum;i ++) + { + if(!strcmp(CardRecbuf.Cardfilename[i], &recovery.info.sd_filename[1])) + { + rtscheck.RTS_SndData(CardRecbuf.Cardshowfilename[i], PRINT_FILE_TEXT_VP); + rtscheck.RTS_SndData(CardRecbuf.Cardshowfilename[i], SELECT_FILE_TEXT_VP); + rtscheck.RTS_SndData(ExchangePageBase + 27, ExchangepageAddr); + change_page_font = 27; + break; + } + } + } + return; + } + #elif ENABLED(CREALITY_POWER_LOSS) + // print the file before the power is off. + if((power_off_type_yes == 0) && lcd_sd_status && (pre01_power_loss.info.recovery_flag == true)) + { + rtscheck.RTS_SndData(ExchangePageBase, ExchangepageAddr); + if(startprogress < 100) + { + rtscheck.RTS_SndData(startprogress, START_PROCESS_ICON_VP); + } + // delay(30); + if((startprogress += 1) > 100) + { + rtscheck.RTS_SndData(StartSoundSet, SoundAddr); + power_off_type_yes = 1; + for(uint16_t i = 0;i < CardRecbuf.Filesum;i ++) + { + if(!strcmp(CardRecbuf.Cardfilename[i], &pre01_power_loss.info.sd_filename[1])) + { + rtscheck.RTS_SndData(CardRecbuf.Cardshowfilename[i], PRINT_FILE_TEXT_VP); + rtscheck.RTS_SndData(CardRecbuf.Cardshowfilename[i], SELECT_FILE_TEXT_VP); + rtscheck.RTS_SndData(ExchangePageBase + 27, ExchangepageAddr); + change_page_font = 27; + break; + } + } + } + return; + } + #endif + + #if ENABLED(POWER_LOSS_RECOVERY) + else if((power_off_type_yes == 0) && (recovery.info.recovery_flag == false)) + { + rtscheck.RTS_SndData(ExchangePageBase, ExchangepageAddr); + if(startprogress < 100) + { + rtscheck.RTS_SndData(startprogress, START_PROCESS_ICON_VP); + } + // delay(30); + if((startprogress += 1) > 100) + { + rtscheck.RTS_SndData(StartSoundSet, SoundAddr); + power_off_type_yes = 1; + Update_Time_Value = RTS_UPDATE_VALUE; + + if(laser_device.is_laser_device()){ + rtscheck.RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); + change_page_font = 51; + }else{ + rtscheck.RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + } + // rtscheck.RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); + // change_page_font = 51; + } + return; + } + else + { + // need to optimize + static unsigned char last_cardpercentValue = 100; + if(card.isPrinting() && (last_cardpercentValue != card.percentDone())) + { + duration_t elapsed = print_job_timer.duration(); + + rtscheck.RTS_SndData(elapsed.value / 3600, PRINT_TIME_HOUR_VP); + rtscheck.RTS_SndData((elapsed.value % 3600) / 60, PRINT_TIME_MIN_VP); + if((unsigned char) card.percentDone() > 0) + { + Percentrecord = card.percentDone(); + if(Percentrecord <= 100) + { + rtscheck.RTS_SndData((unsigned char)Percentrecord, PRINT_PROCESS_ICON_VP); + } + } + else + { + rtscheck.RTS_SndData(0, PRINT_PROCESS_ICON_VP); + } + rtscheck.RTS_SndData((unsigned char)card.percentDone(), PRINT_PROCESS_VP); + last_cardpercentValue = card.percentDone(); + rtscheck.RTS_SndData(10 * current_position[Z_AXIS], AXIS_Z_COORD_VP); + } + + if(pause_action_flag && (false == sdcard_pause_check) && printingIsPaused() && !planner.has_blocks_queued()) + { + pause_action_flag = false; + //queue.enqueue_now_P(PSTR("G0 F3000 X0 Y0")); + laser_device.power = cutter.power; + //SERIAL_ECHOPAIR("laser_device.power=", laser_device.power); + cutter.apply_power(0); + + rtscheck.RTS_SndData(ExchangePageBase + 61, ExchangepageAddr); + change_page_font = 61; + waitway = 0; + } + + #if ENABLED(SDSUPPORT) + if((false == sdcard_pause_check) && (false == card.isPrinting()) && !planner.has_blocks_queued()) + { + if(CardReader::flag.mounted) + { + rtscheck.RTS_SndData(51, CHANGE_SDCARD_ICON_VP); + } + else + { + rtscheck.RTS_SndData(0, CHANGE_SDCARD_ICON_VP); + } + } + #endif + + if( marlin_state == MF_RUNNING && first_start_laser == true) + { + char str_1[7],cmd[20]={0}; + first_start_laser = false; + sprintf_P(cmd, "G92.9 Z%s\n", dtostrf(laser_device.laser_z_axis_high, 1, 2, str_1)); + //SERIAL_ECHOPGM(cmd); + queue.inject(cmd); + + rtscheck.RTS_SndData((float)(10 * laser_device.laser_z_axis_high), AXIS_Z_COORD_VP); + delay(1); + + }else if(laser_device.laser_z_axis_high != current_position.z && first_start_laser == false) + { + laser_device.save_z_axis_high_to_eeprom(current_position.z); + } + + } + #elif ENABLED(CREALITY_POWER_LOSS) + else if((power_off_type_yes == 0) && (pre01_power_loss.info.recovery_flag == false)) + { + rtscheck.RTS_SndData(ExchangePageBase, ExchangepageAddr); + if(startprogress < 100) + { + rtscheck.RTS_SndData(startprogress, START_PROCESS_ICON_VP); + } + // delay(30); + if((startprogress += 1) > 100) + { + rtscheck.RTS_SndData(StartSoundSet, SoundAddr); + power_off_type_yes = 1; + Update_Time_Value = RTS_UPDATE_VALUE; + + if(laser_device.is_laser_device()){ + rtscheck.RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); + change_page_font = 51; + }else{ + rtscheck.RTS_SndData(ExchangePageBase + 1, ExchangepageAddr); + change_page_font = 1; + } + // rtscheck.RTS_SndData(ExchangePageBase + 51, ExchangepageAddr); + // change_page_font = 51; + } + return; + } + else + { + // need to optimize + static unsigned char last_cardpercentValue = 100; + if(card.isPrinting() && (last_cardpercentValue != card.percentDone())) + { + duration_t elapsed = print_job_timer.duration(); + + rtscheck.RTS_SndData(elapsed.value / 3600, PRINT_TIME_HOUR_VP); + rtscheck.RTS_SndData((elapsed.value % 3600) / 60, PRINT_TIME_MIN_VP); + if((unsigned char) card.percentDone() > 0) + { + Percentrecord = card.percentDone(); + if(Percentrecord <= 100) + { + rtscheck.RTS_SndData((unsigned char)Percentrecord, PRINT_PROCESS_ICON_VP); + } + } + else + { + rtscheck.RTS_SndData(0, PRINT_PROCESS_ICON_VP); + } + rtscheck.RTS_SndData((unsigned char)card.percentDone(), PRINT_PROCESS_VP); + last_cardpercentValue = card.percentDone(); + rtscheck.RTS_SndData(10 * current_position[Z_AXIS], AXIS_Z_COORD_VP); + } + + if(pause_action_flag && (false == sdcard_pause_check) && printingIsPaused() && !planner.has_blocks_queued()) + { + pause_action_flag = false; + //queue.enqueue_now_P(PSTR("G0 F3000 X0 Y0")); + laser_device.power = cutter.power; + //SERIAL_ECHOPAIR("laser_device.power=", laser_device.power); + cutter.apply_power(0); + + rtscheck.RTS_SndData(ExchangePageBase + 61, ExchangepageAddr); + change_page_font = 61; + waitway = 0; + } + + #if ENABLED(SDSUPPORT) + if((false == sdcard_pause_check) && (false == card.isPrinting()) && !planner.has_blocks_queued()) + { + if(CardReader::flag.mounted) + { + rtscheck.RTS_SndData(51, CHANGE_SDCARD_ICON_VP); + } + else + { + rtscheck.RTS_SndData(0, CHANGE_SDCARD_ICON_VP); + } + } + #endif + + if( marlin_state == MF_RUNNING && first_start_laser == true) + { + char str_1[7],cmd[20]={0}; + first_start_laser = false; + sprintf_P(cmd, "G92.9 Z%s\n", dtostrf(laser_device.laser_z_axis_high, 1, 2, str_1)); + //SERIAL_ECHOPGM(cmd); + queue.inject(cmd); + + rtscheck.RTS_SndData((float)(10 * laser_device.laser_z_axis_high), AXIS_Z_COORD_VP); + delay(1); + + }else if(laser_device.laser_z_axis_high != current_position.z && first_start_laser == false) + { + laser_device.save_z_axis_high_to_eeprom(current_position.z); + } + + } + #endif + + next_rts_update_ms = ms + RTS_UPDATE_INTERVAL + Update_Time_Value; + } +} + +void RTSUpdateLaser(void) +{ + // Check the status of card + rtscheck.RTS_SDCardUpate(); + + EachMomentUpdateLaser(); + // wait to receive massage and response + if (rtscheck.RTS_RecData() > 0) + { + rtscheck.RTS_HandleData_Laser(); + } +} + +// 激光模式,跑边框 +void HMI_Area_Move(void) +{ + static uint8_t MINUNITMULT = 10; + uint16_t Move_X_scaled=0, Move_Y_scaled=0; + + laser_device.is_run_range =true; //标志正在跑边框 + + float y = laser_device.get_laser_range(LASER_MAX_Y) - laser_device.get_laser_range(LASER_MIN_Y); + float x = laser_device.get_laser_range(LASER_MAX_X) - laser_device.get_laser_range(LASER_MIN_X); + float origin_position_x = current_position.x, origin_position_y = current_position.y; // 记录当前位置 + + + Move_X_scaled = current_position.x*MINUNITMULT; + Move_Y_scaled = current_position.y*MINUNITMULT; + + Move_X_scaled += laser_device.get_laser_range(LASER_MIN_X)*MINUNITMULT; + Move_Y_scaled += laser_device.get_laser_range(LASER_MIN_Y)*MINUNITMULT; + + LIMIT(Move_X_scaled, (X_MIN_POS)*MINUNITMULT, (X_MAX_POS)*MINUNITMULT); + LIMIT(Move_Y_scaled, (Y_MIN_POS)*MINUNITMULT, (Y_MAX_POS)*MINUNITMULT); + current_position.x = Move_X_scaled / MINUNITMULT; + current_position.y = Move_Y_scaled / MINUNITMULT; + + // 超出打印区域 + if(current_position.x+x > X_MAX_POS) x = X_MAX_POS - current_position.x; + if(current_position.y+y > Y_MAX_POS) y = Y_MAX_POS - current_position.y; + + //先跑到最小位置 + // current_position.x += laser_device.get_laser_range(LASER_MIN_X); + // current_position.y += laser_device.get_laser_range(LASER_MIN_Y); + + //HMI_Plan_Move(homing_feedrate(Y_AXIS)); + RTS_line_to_current(Y_AXIS); + planner.synchronize(); + + //current_position.y += y; + Move_Y_scaled += y*MINUNITMULT; + LIMIT(Move_Y_scaled, (Y_MIN_POS)*MINUNITMULT, (Y_MAX_POS)*MINUNITMULT); + current_position.y = Move_Y_scaled / MINUNITMULT; + + laser_device.laser_power_start(5); + RTS_line_to_current(Y_AXIS);//HMI_Plan_Move(homing_feedrate(Y_AXIS)); + planner.synchronize(); + + //current_position.x += x; + Move_X_scaled += x*MINUNITMULT; + LIMIT(Move_X_scaled, (X_MIN_POS)*MINUNITMULT, (X_MAX_POS)*MINUNITMULT); + current_position.x = Move_X_scaled / MINUNITMULT; + + RTS_line_to_current(X_AXIS);//HMI_Plan_Move(homing_feedrate(X_AXIS)); + planner.synchronize(); + + //current_position.y -= y; + Move_Y_scaled -= y*MINUNITMULT; + LIMIT(Move_Y_scaled, (Y_MIN_POS)*MINUNITMULT, (Y_MAX_POS)*MINUNITMULT); + current_position.y = Move_Y_scaled / MINUNITMULT; + + RTS_line_to_current(Y_AXIS);//HMI_Plan_Move(homing_feedrate(Y_AXIS)); + planner.synchronize(); + + + //current_position.x -= x; + Move_X_scaled -= x*MINUNITMULT; + LIMIT(Move_X_scaled, (X_MIN_POS)*MINUNITMULT, (X_MAX_POS)*MINUNITMULT); + current_position.x = Move_X_scaled / MINUNITMULT; + + RTS_line_to_current(X_AXIS);//HMI_Plan_Move(homing_feedrate(X_AXIS)); + planner.synchronize(); + + + laser_device.laser_power_stop(); //关闭激光 + + //回到原点位置 107011 -20211009 + // current_position.x = origin_position_x; + // current_position.y = origin_position_y; + Move_X_scaled = origin_position_x*MINUNITMULT; + Move_Y_scaled = origin_position_y*MINUNITMULT; + LIMIT(Move_X_scaled, (X_MIN_POS)*MINUNITMULT, (X_MAX_POS)*MINUNITMULT); + LIMIT(Move_Y_scaled, (Y_MIN_POS)*MINUNITMULT, (Y_MAX_POS)*MINUNITMULT); + + current_position.x = Move_X_scaled / MINUNITMULT; + current_position.y = Move_Y_scaled / MINUNITMULT; + + RTS_line_to_current(X_AXIS);//HMI_Plan_Move(homing_feedrate(X_AXIS)); + planner.synchronize(); + + laser_device.is_run_range =false; + +} +#endif +#endif// #if ENABLE(LASER_FEATURE) diff --git a/Marlin/src/lcd/e3v2/creality/lcd_rts_laser.h b/Marlin/src/lcd/e3v2/creality/lcd_rts_laser.h new file mode 100644 index 000000000000..3e5294efaba5 --- /dev/null +++ b/Marlin/src/lcd/e3v2/creality/lcd_rts_laser.h @@ -0,0 +1,205 @@ +#ifndef LCD_RTS_LASER_H +#define LCD_RTS_LASER_H + +#include "string.h" +#include + +#include "../../../inc/MarlinConfig.h" + + +/*********************************/ +#define FHONE (0x5A) +#define FHTWO (0xA5) +#define FHLENG (0x06) +#define TEXTBYTELEN 20 +#define MaxFileNumber 20 + +#define AUTO_BED_LEVEL_PREHEAT 0 + +#define FileNum MaxFileNumber +#define FileNameLen TEXTBYTELEN +#define RTS_UPDATE_INTERVAL 500 +#define RTS_UPDATE_VALUE RTS_UPDATE_INTERVAL + +#define SizeofDatabuf 26 + + +// extern CRec CardRecbuf; + +extern RTSSHOW rtscheck; + +#if ENABLED(HAS_MENU_RESET_WIFI) + enum sWIFI_STATE + { + INITIAL = 0, + PRESSED, + RECORDTIME, + }; +#endif + +#if ENABLED(HAS_MENU_RESET_WIFI) + extern unsigned char WIFI_STATE; +#endif + +extern const unsigned long Addrbuf[]; + +void ErrorHanding(void); +extern void RTSUpdate(void); +extern void RTSInit(void); + +extern float zprobe_zoffset; +extern char waitway; +extern int change_page_font; +extern uint8_t language_change_font; +extern uint8_t lang; +// extern uint8_t wifi_enable_flag; +extern int Update_Time_Value; +extern bool PoweroffContinue; +// extern bool sdcard_pause_check; +// extern bool sd_printing_autopause; + +// extern unsigned char AxisUnitMode; +// extern bool home_flag; +// extern bool G29_flag; +extern bool heat_flag; +// extern bool AutohomeZflag; +extern char commandbuf[30]; + +extern bool StartPrint_flag; +// extern bool pause_action_flag; + +extern char errorway; +extern char errornum; +extern char error_sd_num; + +// extern bool home_count; + +extern unsigned char Count_first; + +extern unsigned char Count_probe; + +extern float z_offset; + +/*******************************类定义*********************************/ +extern RTSSHOW rtscheck; + +extern CardReader card; + +#if ENABLED(HAS_MENU_RESET_WIFI) + //WIFI状态 + extern unsigned char WIFI_STATE; +#endif + + +//错误状态 +extern char errorway; +extern char errornum; +extern char home_errornum; +extern char error_sd_num; + +//开始打印状态标志位 +extern bool StartPrint_flag; + +//babystep偏移参数,Z轴偏移参数 +#if ENABLED(BABYSTEPPING) + extern float zprobe_zoffset; + extern float last_zoffset; +#endif + +extern int power_off_type_yes; + +//运动相关参数设置 +// extern const float manual_feedrate_mm_m[]; +// extern float default_max_feedrate[]; +// extern float default_max_acceleration[]; +// extern float default_max_jerk[]; +// extern float default_axis_steps_per_unit[]; + +//喷头默认PID +extern float default_nozzle_ptemp; +extern float default_nozzle_itemp; +extern float default_nozzle_dtemp; + +//热床默认PID +extern float default_hotbed_ptemp; +extern float default_hotbed_itemp; +extern float default_hotbed_dtemp; + +//打印进度条 +extern uint8_t startprogress; +//读取SD卡GCODE文件名的结构体参数 +extern CRec CardRecbuf; +// float pause_e = 0; +//SD卡打印是否暂停,true需要检测暂停,false已经暂停完成 +extern bool sdcard_pause_check; +//暂停的动作就是回到 X0,Y0处 +extern bool pause_action_flag; + +//更换耗材时的设定温度 +extern float ChangeFilamentTemp; +extern int heatway; + +//下一次更新数据的时间 +extern millis_t next_rts_update_ms; + +//上一次喷头的温度 +extern int last_target_temperature[4]; +//上一次热床的温度 +extern int last_target_temperature_bed; + +extern char waitway; + +//当前的页面序列 +extern int change_page_font; +// int recnum = 0; +extern unsigned char Percentrecord; //SD卡打印百分比 +// represents to update file list +//SD卡文件列表更新,标志位 +extern bool CardUpdate; + +//当前的语言标志位 +extern uint8_t lang; +// represents SD-card status, true means SD is available, false means opposite. +//表示 SD 卡状态,true 表示 SD 可用,false 表示相反。 +extern bool lcd_sd_status; + + +extern char cmdbuf[20]; + + +// 1 for 10mm, 2 for 1mm, 3 for 0.1mm +//移动轴的单位选择标志 1 代表 10mm,2 代表 1mm,3 代表 0.1mm +extern unsigned char AxisUnitMode; + +//移动轴的每个单位参数 +extern float axis_unit; +// bool LEDStatus = true; +//更新迪文屏幕的数据变量时间间隔 +extern int Update_Time_Value; +//断电续打,迪文屏显示逻辑标志位 +extern bool PoweroffContinue; +extern char commandbuf[30]; + +//保存暂停时喷头的温度 +extern int temphot; +//选中文件开始打印标志位 +extern bool rts_start_print; + +// extern bool flag_over_shutdown; +// extern bool flag_counter_printover_to_shutdown; + +void Read_lcd_Register(unsigned char len, unsigned int addr); +void Write_lcd_Register(unsigned int addr,unsigned char data); +void lcd_eight_language(void); + +void RTS_PauseMoveAxisPage(void); +void RTS_AutoBedLevelPage(void); +void RTS_MoveAxisHoming(void); +void RTS_MoveParkNozzle(void); +void RTS_CommandPause(void); + + +void HMI_Area_Move(void); + + +#endif diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index e8430d591c98..deb38075f0eb 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -1883,7 +1883,6 @@ void DWIN_RedrawScreen() { #endif // ADVANCED_PAUSE_FEATURE #if HAS_MESH - void DWIN_MeshViewer() { if (!leveling_is_valid()) DWIN_Popup_Continue(ICON_BLTouch, GET_TEXT_F(MSG_MESH_VIEWER), GET_TEXT_F(MSG_NO_VALID_MESH)); @@ -1961,7 +1960,6 @@ void Goto_ConfirmToPrint() { // Tool functions #if ENABLED(EEPROM_SETTINGS) - void WriteEeprom() { DWIN_DrawStatusLine(GET_TEXT_F(MSG_STORE_EEPROM)); DWIN_UpdateLCD(); @@ -2938,7 +2936,6 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) { } #if HAS_HOTEND - void onDrawMaxJerkE(MenuItemClass* menuitem, int8_t line) { if (HMI_IsChinese()) { menuitem->SetFrame(1, 173, 133, 200, 147); @@ -2948,7 +2945,6 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) { } onDrawPFloatMenu(menuitem, line); } - #endif #endif // HAS_CLASSIC_JERK @@ -2978,7 +2974,6 @@ void onDrawStepsZ(MenuItemClass* menuitem, int8_t line) { } #if HAS_HOTEND - void onDrawStepsE(MenuItemClass* menuitem, int8_t line) { if (HMI_IsChinese()) { menuitem->SetFrame(1, 153, 148, 194, 161); @@ -2986,7 +2981,6 @@ void onDrawStepsZ(MenuItemClass* menuitem, int8_t line) { } onDrawPFloatMenu(menuitem, line); } - #endif #if HAS_ONESTEP_LEVELING @@ -3160,7 +3154,6 @@ void Draw_Move_Menu() { } #if HAS_HOME_OFFSET - void Draw_HomeOffset_Menu() { checkkey = Menu; if (SET_MENU(HomeOffMenu, MSG_SET_HOME_OFFSETS, 4)) { @@ -3195,7 +3188,6 @@ void Draw_Move_Menu() { } UpdateMenu(ProbeSetMenu); } - #endif void Draw_FilSet_Menu() { @@ -3263,7 +3255,6 @@ void Draw_GetColor_Menu() { } #if BOTH(CASE_LIGHT_MENU, CASELIGHT_USES_BRIGHTNESS) - void Draw_CaseLight_Menu() { checkkey = Menu; if (SET_MENU(CaseLightMenu, MSG_CASE_LIGHT, 3)) { @@ -3371,7 +3362,6 @@ void Draw_Motion_Menu() { } #if ENABLED(ADVANCED_PAUSE_FEATURE) - void Draw_FilamentMan_Menu() { checkkey = Menu; if (SET_MENU(FilamentMenu, MSG_FILAMENT_MAN, 5)) { @@ -3488,7 +3478,6 @@ void Draw_MaxAccel_Menu() { } #if HAS_CLASSIC_JERK - void Draw_MaxJerk_Menu() { checkkey = Menu; if (SET_MENU_R(MaxJerkMenu, selrect({1, 16, 28, 13}), MSG_JERK, 5)) { @@ -3520,7 +3509,6 @@ void Draw_Steps_Menu() { } #if ENABLED(PIDTEMP) - void Draw_HotendPID_Menu() { checkkey = Menu; if (SET_MENU_F(HotendPIDMenu, STR_HOTEND_PID " Settings", 8)) { @@ -3642,7 +3630,6 @@ void Draw_Steps_Menu() { } UpdateMenu(FWRetractMenu); } - #endif //============================================================================= diff --git a/Marlin/src/lcd/menu/menu_filament.cpp b/Marlin/src/lcd/menu/menu_filament.cpp index 122f0c405099..1a4b7845563c 100644 --- a/Marlin/src/lcd/menu/menu_filament.cpp +++ b/Marlin/src/lcd/menu/menu_filament.cpp @@ -39,6 +39,10 @@ #include "../../MarlinCore.h" #endif +#if ENABLED(RTS_AVAILABLE) + #include "../../lcd/e3v2/creality/lcd_rts.h" +#endif + // // Change Filament > Change/Unload/Load Filament // @@ -266,7 +270,13 @@ void menu_pause_option() { if (!still_out) ACTION_ITEM(MSG_FILAMENT_CHANGE_OPTION_RESUME, []{ pause_menu_response = PAUSE_RESPONSE_RESUME_PRINT; }); - + #if ENABLED(RTS_AVAILABLE) + rtscheck.RTS_SndData(ExchangePageBase + 8, ExchangepageAddr); + change_page_font = 8; + #if ENABLED(FILAMENT_RUNOUT_SENSOR_DEBUG) + SERIAL_ECHOLNPAIR("\r\npause_menu_response: ", pause_menu_response); + #endif + #endif END_MENU(); } diff --git a/Marlin/src/lcd/tft/tft_string.h b/Marlin/src/lcd/tft/tft_string.h index 85966670477b..f87865c793e8 100644 --- a/Marlin/src/lcd/tft/tft_string.h +++ b/Marlin/src/lcd/tft/tft_string.h @@ -21,6 +21,8 @@ */ #pragma once +// TODO: Make AVR-compatible with separate ROM / RAM string methods + #include #include "../fontutils.h" diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp index f4fbda747bad..2f92b8b570c8 100644 --- a/Marlin/src/module/endstops.cpp +++ b/Marlin/src/module/endstops.cpp @@ -54,6 +54,10 @@ #include "probe.h" #endif +#if ENABLED(RTS_AVAILABLE) + #include "../lcd/e3v2/creality/lcd_rts.h" +#endif + Endstops endstops; // private: @@ -453,8 +457,26 @@ void Endstops::not_homing() { #if ENABLED(VALIDATE_HOMING_ENDSTOPS) // If the last move failed to trigger an endstop, call kill void Endstops::validate_homing_move() { - if (trigger_state()) hit_on_purpose(); - else kill(GET_TEXT_F(MSG_KILL_HOMING_FAILED)); + if (trigger_state()) { + hit_on_purpose(); + } else { + + #if ENABLED(RTS_AVAILABLE) + waitway = 0; + + // Displays the exception interface after 3 failures + // jump2page_num(PG_ABNORMAL); + // change_page_font = PG_ABNORMAL; + // Failed to homing move + // rtscheck.RTS_SndData(Error_202, ABNORMAL_PAGE_TEXT_VP); + // rtscheck.RTS_SndData(0, Window_fault_probe_VP); + // rtscheck.RTS_SndData(0, Window_fault_home_VP); + + errorway = 2; + #endif + + kill(GET_TEXT_F(MSG_KILL_HOMING_FAILED)); + } } #endif diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index fa92ae1fb597..1456793da527 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -100,6 +100,10 @@ #include "../lcd/e3v2/proui/dwin.h" #endif +#if ENABLED(RTS_AVAILABLE) + #include "../lcd/e3v2/creality/lcd_rts.h" +#endif + #define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE) #include "../core/debug_out.h" @@ -445,31 +449,33 @@ FORCE_INLINE void probe_specific_action(const bool deploy) { LCD_MESSAGE(MSG_PREHEATING); - DEBUG_ECHOPGM("Preheating "); + if (hotend_temp > thermalManager.wholeDegHotend(0) + 5 || bed_temp > thermalManager.wholeDegBed() + 5) { + DEBUG_ECHOPGM("Preheating "); - #if ENABLED(WAIT_FOR_NOZZLE_HEAT) - const celsius_t hotendPreheat = hotend_temp > thermalManager.degTargetHotend(0) ? hotend_temp : 0; - if (hotendPreheat) { - DEBUG_ECHOPGM("hotend (", hotendPreheat, ")"); - thermalManager.setTargetHotend(hotendPreheat, 0); - } - #elif ENABLED(WAIT_FOR_BED_HEAT) - constexpr celsius_t hotendPreheat = 0; - #endif + #if ENABLED(WAIT_FOR_NOZZLE_HEAT) + const celsius_t hotendPreheat = hotend_temp > thermalManager.degTargetHotend(0) ? hotend_temp : 0; + if (hotendPreheat) { + DEBUG_ECHOPGM("hotend (", hotendPreheat, ")"); + thermalManager.setTargetHotend(hotendPreheat, 0); + } + #elif ENABLED(WAIT_FOR_BED_HEAT) + constexpr celsius_t hotendPreheat = 0; + #endif - #if ENABLED(WAIT_FOR_BED_HEAT) - const celsius_t bedPreheat = bed_temp > thermalManager.degTargetBed() ? bed_temp : 0; - if (bedPreheat) { - if (hotendPreheat) DEBUG_ECHOPGM(" and "); - DEBUG_ECHOPGM("bed (", bedPreheat, ")"); - thermalManager.setTargetBed(bedPreheat); - } - #endif + #if ENABLED(WAIT_FOR_BED_HEAT) + const celsius_t bedPreheat = bed_temp > thermalManager.degTargetBed() ? bed_temp : 0; + if (bedPreheat) { + if (hotendPreheat) DEBUG_ECHOPGM(" and "); + DEBUG_ECHOPGM("bed (", bedPreheat, ")"); + thermalManager.setTargetBed(bedPreheat); + } + #endif - DEBUG_EOL(); + DEBUG_EOL(); - TERN_(WAIT_FOR_NOZZLE_HEAT, if (hotend_temp > thermalManager.wholeDegHotend(0) + (TEMP_WINDOW)) thermalManager.wait_for_hotend(0)); - TERN_(WAIT_FOR_BED_HEAT, if (bed_temp > thermalManager.wholeDegBed() + (TEMP_BED_WINDOW)) thermalManager.wait_for_bed_heating()); + TERN_(WAIT_FOR_NOZZLE_HEAT, if (hotend_temp > thermalManager.wholeDegHotend(0) + (TEMP_WINDOW)) thermalManager.wait_for_hotend(0)); + TERN_(WAIT_FOR_BED_HEAT, if (bed_temp > thermalManager.wholeDegBed() + (TEMP_BED_WINDOW)) thermalManager.wait_for_bed_heating()); + } } #endif @@ -904,6 +910,15 @@ float Probe::probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRai } if (isnan(measured_z)) { + + #if ENABLED(RTS_AVAILABLE) + waitway = 0; + rtscheck.RTS_SndData(ExchangePageBase + 41, ExchangepageAddr); + change_page_font = 41; + rtscheck.RTS_SndData(Error_203, ABNORMAL_PAGE_TEXT_VP); + errorway = 3; + #endif + stow(); LCD_MESSAGE(MSG_LCD_PROBING_FAILED); #if DISABLED(G29_RETRY_AND_RECOVER) diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 8b615f2faf14..30789801ff81 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -166,11 +166,15 @@ #include "../feature/fancheck.h" #endif -#if DGUS_LCD_UI_MKS +#if ENABLED(DGUS_LCD_UI_MKS) #include "../lcd/extui/dgus/DGUSScreenHandler.h" #include "../lcd/extui/dgus/DGUSDisplayDef.h" #endif +#if ENABLED(RTS_AVAILABLE) + #include "../lcd/e3v2/creality/lcd_rts.h" +#endif + #pragma pack(push, 1) // No padding between variables #if HAS_ETHERNET @@ -528,6 +532,10 @@ typedef struct SettingsDataStruct { uint8_t caselight_brightness; // M355 P #endif + #if ENABLED(RTS_AVAILABLE) + uint8_t language_change_font; + #endif + // // PASSWORD_FEATURE // @@ -1563,6 +1571,10 @@ void MarlinSettings::postprocess() { EEPROM_WRITE(caselight.brightness); #endif + #if ENABLED(RTS_AVAILABLE) + EEPROM_WRITE(language_change_font); + #endif + // // Password feature // @@ -2552,6 +2564,22 @@ void MarlinSettings::postprocess() { EEPROM_READ(caselight.brightness); #endif + #if ENABLED(RTS_AVAILABLE) + EEPROM_READ(language_change_font); + if((language_change_font != 1) && + (language_change_font != 2) && + (language_change_font != 3) && + (language_change_font != 4) && + (language_change_font != 5) && + (language_change_font != 6) && + (language_change_font != 7) && + (language_change_font != 8) && + (language_change_font != 9)) + { + language_change_font = 2; + } + #endif + // // Password feature // @@ -3007,6 +3035,10 @@ void MarlinSettings::reset() { // TERN_(CASELIGHT_USES_BRIGHTNESS, caselight.brightness = CASE_LIGHT_DEFAULT_BRIGHTNESS); + #if ENABLED(RTS_AVAILABLE) + language_change_font = 2; + #endif + // // TOUCH_SCREEN_CALIBRATION // diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 4b0ee355d4cf..6f560c84a7ba 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -100,6 +100,10 @@ #endif #endif +#if ENABLED(RTS_AVAILABLE) + #include "../lcd/e3v2/creality/lcd_rts.h" +#endif + #if HAS_MAX6675_LIBRARY || HAS_MAX31855_LIBRARY || HAS_MAX31865 #define HAS_MAXTC_LIBRARIES 1 #endif @@ -785,11 +789,25 @@ volatile bool Temperature::raw_temps_ready = false; temp_change_ms = ms + SEC_TO_MS(watch_temp_period); // - move the expiration timer up if (current_temp > watch_temp_target) heated = true; // - Flag if target temperature reached } - else if (ELAPSED(ms, temp_change_ms)) // Watch timer expired + else if (ELAPSED(ms, temp_change_ms)) { // Watch timer expired + + #if ENABLED(RTS_AVAILABLE) + rtscheck.RTS_SndData(ExchangePageBase + 31, ExchangepageAddr); + change_page_font = 31; + #endif + _temp_error(heater_id, FPSTR(str_t_heating_failed), GET_TEXT_F(MSG_HEATING_FAILED_LCD)); + } } - else if (current_temp < target - (MAX_OVERSHOOT_PID_AUTOTUNE)) // Heated, then temperature fell too far? + else if (current_temp < target - (MAX_OVERSHOOT_PID_AUTOTUNE)) { // Heated, then temperature fell too far? + + #if ENABLED(RTS_AVAILABLE) + rtscheck.RTS_SndData(ExchangePageBase + 31, ExchangepageAddr); + change_page_font = 31; + #endif + _temp_error(heater_id, FPSTR(str_t_thermal_runaway), GET_TEXT_F(MSG_THERMAL_RUNAWAY)); + } } #endif } // every 2 seconds @@ -804,6 +822,12 @@ volatile bool Temperature::raw_temps_ready = false; TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_TUNING_TIMEOUT)); TERN_(HOST_PROMPT_SUPPORT, hostui.notify(GET_TEXT_F(MSG_PID_TIMEOUT))); SERIAL_ECHOPGM(STR_PID_AUTOTUNE); + + #if ENABLED(RTS_AVAILABLE) + rtscheck.RTS_SndData(ExchangePageBase + 31, ExchangepageAddr); + change_page_font = 31; + #endif + SERIAL_ECHOLNPGM(STR_PID_TIMEOUT); break; } @@ -865,6 +889,7 @@ volatile bool Temperature::raw_temps_ready = false; // Run UI update TERN(DWIN_CREALITY_LCD, DWIN_Update(), ui.update()); + TERN(RTS_AVAILABLE, RTSUpdate(), ui.update()); } wait_for_heatup = false; @@ -1343,6 +1368,12 @@ void Temperature::maxtemp_error(const heater_id_t heater_id) { #if HAS_DWIN_E3V2_BASIC && (HAS_HOTEND || HAS_HEATED_BED) DWIN_Popup_Temperature(1); #endif + + #if ENABLED(RTS_AVAILABLE) && (HAS_HOTEND || HAS_HEATED_BED) + rtscheck.RTS_SndData(ExchangePageBase + 31, ExchangepageAddr); + change_page_font = 31; + #endif + _temp_error(heater_id, F(STR_T_MAXTEMP), GET_TEXT_F(MSG_ERR_MAXTEMP)); } @@ -1350,6 +1381,12 @@ void Temperature::mintemp_error(const heater_id_t heater_id) { #if HAS_DWIN_E3V2_BASIC && (HAS_HOTEND || HAS_HEATED_BED) DWIN_Popup_Temperature(0); #endif + + #if ENABLED(RTS_AVAILABLE) && (HAS_HOTEND || HAS_HEATED_BED) + rtscheck.RTS_SndData(ExchangePageBase + 31, ExchangepageAddr); + change_page_font = 31; + #endif + _temp_error(heater_id, F(STR_T_MINTEMP), GET_TEXT_F(MSG_ERR_MINTEMP)); } @@ -1550,7 +1587,15 @@ void Temperature::mintemp_error(const heater_id_t heater_id) { void Temperature::manage_hotends(const millis_t &ms) { HOTEND_LOOP() { #if ENABLED(THERMAL_PROTECTION_HOTENDS) - if (degHotend(e) > temp_range[e].maxtemp) maxtemp_error((heater_id_t)e); + if (degHotend(e) > temp_range[e].maxtemp) { + + #if ENABLED(RTS_AVAILABLE) + rtscheck.RTS_SndData(ExchangePageBase + 31, ExchangepageAddr); + change_page_font = 31; + #endif + + maxtemp_error((heater_id_t)e); + } #endif TERN_(HEATER_IDLE_HANDLER, heater_idle[e].update(ms)); @@ -1569,6 +1614,12 @@ void Temperature::mintemp_error(const heater_id_t heater_id) { start_watching_hotend(e); // If temp reached, turn off elapsed check else { TERN_(HAS_DWIN_E3V2_BASIC, DWIN_Popup_Temperature(0)); + + #if ENABLED(RTS_AVAILABLE) + rtscheck.RTS_SndData(ExchangePageBase + 31, ExchangepageAddr); + change_page_font = 31; + #endif + _temp_error((heater_id_t)e, FPSTR(str_t_heating_failed), GET_TEXT_F(MSG_HEATING_FAILED_LCD)); } } @@ -1584,7 +1635,15 @@ void Temperature::mintemp_error(const heater_id_t heater_id) { void Temperature::manage_heated_bed(const millis_t &ms) { #if ENABLED(THERMAL_PROTECTION_BED) - if (degBed() > BED_MAXTEMP) maxtemp_error(H_BED); + if (degBed() > BED_MAXTEMP) { + + #if ENABLED(RTS_AVAILABLE) + rtscheck.RTS_SndData(ExchangePageBase + 31, ExchangepageAddr); + change_page_font = 31; + #endif + + maxtemp_error(H_BED); + } #endif #if WATCH_BED @@ -1594,6 +1653,12 @@ void Temperature::mintemp_error(const heater_id_t heater_id) { start_watching_bed(); // If temp reached, turn off elapsed check else { TERN_(HAS_DWIN_E3V2_BASIC, DWIN_Popup_Temperature(0)); + + #if ENABLED(RTS_AVAILABLE) + rtscheck.RTS_SndData(ExchangePageBase + 31, ExchangepageAddr); + change_page_font = 31; + #endif + _temp_error(H_BED, FPSTR(str_t_heating_failed), GET_TEXT_F(MSG_HEATING_FAILED_LCD)); } } @@ -2942,12 +3007,24 @@ void Temperature::init() { } // fall through case TRRunaway: + #if ENABLED(RTS_AVAILABLE) + rtscheck.RTS_SndData(ExchangePageBase + 31, ExchangepageAddr); + change_page_font = 31; + #endif + TERN_(HAS_DWIN_E3V2_BASIC, DWIN_Popup_Temperature(0)); + _temp_error(heater_id, FPSTR(str_t_thermal_runaway), GET_TEXT_F(MSG_THERMAL_RUNAWAY)); #if ENABLED(THERMAL_PROTECTION_VARIANCE_MONITOR) case TRMalfunction: TERN_(HAS_DWIN_E3V2_BASIC, DWIN_Popup_Temperature(0)); + + #if ENABLED(RTS_AVAILABLE) + rtscheck.RTS_SndData(ExchangePageBase + 31, ExchangepageAddr); + change_page_font = 31; + #endif + _temp_error(heater_id, FPSTR(str_t_temp_malfunction), GET_TEXT_F(MSG_TEMP_MALFUNCTION)); #endif } @@ -4275,6 +4352,12 @@ void Temperature::isr() { // If wait_for_heatup is set, temperature was reached, no cancel if (wait_for_heatup) { wait_for_heatup = false; + + #if ENABLED(RTS_AVAILABLE) + Update_Time_Value = RTS_UPDATE_VALUE; + rtscheck.RTS_SndData(ExchangePageBase + 10, ExchangepageAddr); + #endif + ui.reset_status(); return true; } @@ -4563,4 +4646,4 @@ void Temperature::isr() { #endif // HAS_COOLER -#endif // HAS_TEMP_SENSOR +#endif // HAS_TEMP_SENSOR \ No newline at end of file diff --git a/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h b/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h index 437ba35eeadc..3b3ada5cd4cf 100644 --- a/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h +++ b/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h @@ -63,7 +63,6 @@ #define BEEPER_PIN 27 #define LCD_PINS_DEFINED - #endif #include "pins_MELZI.h" // ... SANGUINOLOLU_12 ... SANGUINOLOLU_11 diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1_301.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1_301.h index 53953f9ebccc..22bddd496e65 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1_301.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1_301.h @@ -32,15 +32,21 @@ #error "Creality v24S1 only supports 1 hotend / E stepper." #endif -#if BOTH(BLTOUCH, Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) - #error "Disable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN when using BLTOUCH with Creality V24S1-301." -#endif +// #if BOTH(BLTOUCH, Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) +// #error "Disable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN when using BLTOUCH with Creality V24S1-301." +// #endif #ifndef BOARD_INFO_NAME #define BOARD_INFO_NAME "Creality V24S1-301" #endif #ifndef DEFAULT_MACHINE_NAME - #define DEFAULT_MACHINE_NAME "Ender 3 S1" + #if ENABLED(ENDER_3S1_PRO) + #define DEFAULT_MACHINE_NAME "Ender 3 S1 Pro" + #elif ENABLED(ENDER_3S1_PLUS) + #define DEFAULT_MACHINE_NAME "Ender 3 S1+" + #else + #define DEFAULT_MACHINE_NAME "Ender 3 S1" + #endif #endif // @@ -53,7 +59,8 @@ // // Limit Switches // -#define Z_STOP_PIN PA15 +// #define Z_STOP_PIN PA15 +#define Z_STOP_PIN PC14 #ifndef Z_MIN_PROBE_PIN #define Z_MIN_PROBE_PIN PC14 // BLTouch IN diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h index cd4989d73d49..0782e2b06bf1 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h @@ -159,6 +159,9 @@ #define FSMC_CS_PIN TFT_CS_PIN // NE4 #define FSMC_RS_PIN TFT_RS_PIN // A0 + #define TFT_CS_PIN FSMC_CS_PIN + #define TFT_RS_PIN FSMC_RS_PIN + #define LCD_USE_DMA_FSMC // Use DMA transfers to send data to the TFT #define FSMC_DMA_DEV DMA2 #define FSMC_DMA_CHANNEL DMA_CH5 diff --git a/ini/features.ini b/ini/features.ini index c9c752865808..df471e2db16e 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -47,6 +47,7 @@ SOFT_I2C_EEPROM = SlowSoftI2CMaster, SlowSoftWire=https:/ SPI_EEPROM = src_filter=+ HAS_DWIN_E3V2|IS_DWIN_MARLINUI = src_filter=+ DWIN_CREALITY_LCD = src_filter=+ +RTS_AVAILABLE = src_filter=+ DWIN_LCD_PROUI = src_filter=+ DWIN_CREALITY_LCD_JYERSUI = src_filter=+ IS_DWIN_MARLINUI = src_filter=+ diff --git a/platformio.ini b/platformio.ini index 991c17b2ff7c..afb8fb791b9f 100644 --- a/platformio.ini +++ b/platformio.ini @@ -79,17 +79,15 @@ default_src_filter = + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - + - - - - + - + - + - + - - + - - + - - - - - -