|
@@ -76,9 +76,9 @@
|
76
|
76
|
|
77
|
77
|
#if HAS_SERVOS
|
78
|
78
|
#include "servo.h"
|
|
79
|
+ #define EEPROM_NUM_SERVOS NUM_SERVOS
|
79
|
80
|
#else
|
80
|
|
- #undef NUM_SERVOS
|
81
|
|
- #define NUM_SERVOS NUM_SERVO_PLUGS
|
|
81
|
+ #define EEPROM_NUM_SERVOS NUM_SERVO_PLUGS
|
82
|
82
|
#endif
|
83
|
83
|
|
84
|
84
|
#if HAS_BED_PROBE
|
|
@@ -187,7 +187,7 @@ typedef struct SettingsDataStruct {
|
187
|
187
|
//
|
188
|
188
|
// SERVO_ANGLES
|
189
|
189
|
//
|
190
|
|
- uint16_t servo_angles[NUM_SERVOS][2]; // M281 P L U
|
|
190
|
+ uint16_t servo_angles[EEPROM_NUM_SERVOS][2]; // M281 P L U
|
191
|
191
|
|
192
|
192
|
//
|
193
|
193
|
// DELTA / [XYZ]_DUAL_ENDSTOPS
|
|
@@ -632,36 +632,11 @@ void MarlinSettings::postprocess() {
|
632
|
632
|
// Servo Angles
|
633
|
633
|
//
|
634
|
634
|
{
|
635
|
|
- #if !(HAS_SERVOS && ENABLED(EDITABLE_SERVO_ANGLES))
|
636
|
|
-
|
637
|
|
- uint16_t servo_angles[NUM_SERVOS][2] = { { 0, 0 } };
|
638
|
|
-
|
639
|
|
- #if ENABLED(SWITCHING_EXTRUDER)
|
640
|
|
-
|
641
|
|
- constexpr uint16_t sesa[][2] = SWITCHING_EXTRUDER_SERVO_ANGLES;
|
642
|
|
- servo_angles[SWITCHING_EXTRUDER_SERVO_NR][0] = sesa[0][0];
|
643
|
|
- servo_angles[SWITCHING_EXTRUDER_SERVO_NR][1] = sesa[0][1];
|
644
|
|
- #if EXTRUDERS > 3
|
645
|
|
- servo_angles[SWITCHING_EXTRUDER_E23_SERVO_NR][0] = sesa[1][0];
|
646
|
|
- servo_angles[SWITCHING_EXTRUDER_E23_SERVO_NR][1] = sesa[1][1];
|
647
|
|
- #endif
|
648
|
|
-
|
649
|
|
- #elif ENABLED(SWITCHING_NOZZLE)
|
650
|
|
-
|
651
|
|
- constexpr uint16_t snsa[] = SWITCHING_NOZZLE_SERVO_ANGLES;
|
652
|
|
- servo_angles[SWITCHING_NOZZLE_SERVO_NR][0] = snsa[0];
|
653
|
|
- servo_angles[SWITCHING_NOZZLE_SERVO_NR][1] = snsa[1];
|
654
|
|
-
|
655
|
|
- #elif defined(Z_SERVO_ANGLES) && defined(Z_PROBE_SERVO_NR)
|
656
|
|
-
|
657
|
|
- constexpr uint16_t zsa[] = Z_SERVO_ANGLES;
|
658
|
|
- servo_angles[Z_PROBE_SERVO_NR][0] = zsa[0];
|
659
|
|
- servo_angles[Z_PROBE_SERVO_NR][1] = zsa[1];
|
660
|
|
-
|
661
|
|
- #endif
|
662
|
|
-
|
663
|
|
- #endif // !HAS_SERVOS || !EDITABLE_SERVO_ANGLES
|
|
635
|
+ _FIELD_TEST(servo_angles);
|
664
|
636
|
|
|
637
|
+ #if !HAS_SERVOS
|
|
638
|
+ uint16_t servo_angles[NUM_SERVO_PLUGS][2] = { { 0, 0 } };
|
|
639
|
+ #endif
|
665
|
640
|
EEPROM_WRITE(servo_angles);
|
666
|
641
|
}
|
667
|
642
|
|
|
@@ -1311,10 +1286,14 @@ void MarlinSettings::postprocess() {
|
1311
|
1286
|
// SERVO_ANGLES
|
1312
|
1287
|
//
|
1313
|
1288
|
{
|
1314
|
|
- #if !(HAS_SERVOS && ENABLED(EDITABLE_SERVO_ANGLES))
|
1315
|
|
- uint16_t servo_angles[NUM_SERVOS][2];
|
|
1289
|
+ _FIELD_TEST(servo_angles);
|
|
1290
|
+
|
|
1291
|
+ #if ENABLED(EDITABLE_SERVO_ANGLES)
|
|
1292
|
+ uint16_t (&servo_angles_arr)[EEPROM_NUM_SERVOS][2] = servo_angles;
|
|
1293
|
+ #else
|
|
1294
|
+ uint16_t servo_angles_arr[EEPROM_NUM_SERVOS][2];
|
1316
|
1295
|
#endif
|
1317
|
|
- EEPROM_READ(servo_angles);
|
|
1296
|
+ EEPROM_READ(servo_angles_arr);
|
1318
|
1297
|
}
|
1319
|
1298
|
|
1320
|
1299
|
//
|
|
@@ -1992,39 +1971,13 @@ void MarlinSettings::reset(PORTARG_SOLO) {
|
1992
|
1971
|
// Servo Angles
|
1993
|
1972
|
//
|
1994
|
1973
|
|
1995
|
|
- #if HAS_SERVOS && ENABLED(EDITABLE_SERVO_ANGLES)
|
1996
|
|
-
|
1997
|
|
- #if ENABLED(SWITCHING_EXTRUDER)
|
1998
|
|
-
|
1999
|
|
- #if EXTRUDERS > 3
|
2000
|
|
- #define REQ_ANGLES 4
|
2001
|
|
- #else
|
2002
|
|
- #define REQ_ANGLES 2
|
2003
|
|
- #endif
|
2004
|
|
- constexpr uint16_t sesa[] = SWITCHING_EXTRUDER_SERVO_ANGLES;
|
2005
|
|
- static_assert(COUNT(sesa) == REQ_ANGLES, "SWITCHING_EXTRUDER_SERVO_ANGLES needs " STRINGIFY(REQ_ANGLES) " angles.");
|
2006
|
|
- servo_angles[SWITCHING_EXTRUDER_SERVO_NR][0] = sesa[0];
|
2007
|
|
- servo_angles[SWITCHING_EXTRUDER_SERVO_NR][1] = sesa[1];
|
2008
|
|
- #if EXTRUDERS > 3
|
2009
|
|
- servo_angles[SWITCHING_EXTRUDER_E23_SERVO_NR][0] = sesa[2];
|
2010
|
|
- servo_angles[SWITCHING_EXTRUDER_E23_SERVO_NR][1] = sesa[3];
|
2011
|
|
- #endif
|
2012
|
|
-
|
2013
|
|
- #elif ENABLED(SWITCHING_NOZZLE)
|
2014
|
|
-
|
2015
|
|
- constexpr uint16_t snsa[2] = SWITCHING_NOZZLE_SERVO_ANGLES;
|
2016
|
|
- servo_angles[SWITCHING_NOZZLE_SERVO_NR][0] = snsa[0];
|
2017
|
|
- servo_angles[SWITCHING_NOZZLE_SERVO_NR][1] = snsa[1];
|
2018
|
|
-
|
2019
|
|
- #elif defined(Z_SERVO_ANGLES) && defined(Z_PROBE_SERVO_NR)
|
2020
|
|
-
|
2021
|
|
- constexpr uint16_t zsa[2] = Z_SERVO_ANGLES;
|
2022
|
|
- servo_angles[Z_PROBE_SERVO_NR][0] = zsa[0];
|
2023
|
|
- servo_angles[Z_PROBE_SERVO_NR][1] = zsa[1];
|
2024
|
|
-
|
2025
|
|
- #endif
|
|
1974
|
+ #if ENABLED(EDITABLE_SERVO_ANGLES)
|
|
1975
|
+ COPY(servo_angles, base_servo_angles);
|
|
1976
|
+ #endif
|
2026
|
1977
|
|
2027
|
|
- #endif // HAS_SERVOS && EDITABLE_SERVO_ANGLES
|
|
1978
|
+ //
|
|
1979
|
+ // Endstop Adjustments
|
|
1980
|
+ //
|
2028
|
1981
|
|
2029
|
1982
|
#if ENABLED(DELTA)
|
2030
|
1983
|
const float adj[ABC] = DELTA_ENDSTOP_ADJ, dta[ABC] = DELTA_TOWER_ANGLE_TRIM;
|
|
@@ -2083,6 +2036,10 @@ void MarlinSettings::reset(PORTARG_SOLO) {
|
2083
|
2036
|
|
2084
|
2037
|
#endif
|
2085
|
2038
|
|
|
2039
|
+ //
|
|
2040
|
+ // Preheat parameters
|
|
2041
|
+ //
|
|
2042
|
+
|
2086
|
2043
|
#if HAS_LCD_MENU
|
2087
|
2044
|
ui.preheat_hotend_temp[0] = PREHEAT_1_TEMP_HOTEND;
|
2088
|
2045
|
ui.preheat_hotend_temp[1] = PREHEAT_2_TEMP_HOTEND;
|
|
@@ -2092,6 +2049,10 @@ void MarlinSettings::reset(PORTARG_SOLO) {
|
2092
|
2049
|
ui.preheat_fan_speed[1] = PREHEAT_2_FAN_SPEED;
|
2093
|
2050
|
#endif
|
2094
|
2051
|
|
|
2052
|
+ //
|
|
2053
|
+ // Hotend PID
|
|
2054
|
+ //
|
|
2055
|
+
|
2095
|
2056
|
#if ENABLED(PIDTEMP)
|
2096
|
2057
|
HOTEND_LOOP() {
|
2097
|
2058
|
PID_PARAM(Kp, e) = float(DEFAULT_Kp);
|
|
@@ -2101,10 +2062,19 @@ void MarlinSettings::reset(PORTARG_SOLO) {
|
2101
|
2062
|
PID_PARAM(Kc, e) = DEFAULT_Kc;
|
2102
|
2063
|
#endif
|
2103
|
2064
|
}
|
2104
|
|
- #if ENABLED(PID_EXTRUSION_SCALING)
|
2105
|
|
- thermalManager.lpq_len = 20; // default last-position-queue size
|
2106
|
|
- #endif
|
2107
|
|
- #endif // PIDTEMP
|
|
2065
|
+ #endif
|
|
2066
|
+
|
|
2067
|
+ //
|
|
2068
|
+ // PID Extrusion Scaling
|
|
2069
|
+ //
|
|
2070
|
+
|
|
2071
|
+ #if ENABLED(PID_EXTRUSION_SCALING)
|
|
2072
|
+ thermalManager.lpq_len = 20; // Default last-position-queue size
|
|
2073
|
+ #endif
|
|
2074
|
+
|
|
2075
|
+ //
|
|
2076
|
+ // Heated Bed PID
|
|
2077
|
+ //
|
2108
|
2078
|
|
2109
|
2079
|
#if ENABLED(PIDTEMPBED)
|
2110
|
2080
|
thermalManager.bed_pid.Kp = DEFAULT_bedKp;
|
|
@@ -2112,18 +2082,34 @@ void MarlinSettings::reset(PORTARG_SOLO) {
|
2112
|
2082
|
thermalManager.bed_pid.Kd = scalePID_d(DEFAULT_bedKd);
|
2113
|
2083
|
#endif
|
2114
|
2084
|
|
|
2085
|
+ //
|
|
2086
|
+ // LCD Contrast
|
|
2087
|
+ //
|
|
2088
|
+
|
2115
|
2089
|
#if HAS_LCD_CONTRAST
|
2116
|
2090
|
ui.set_contrast(DEFAULT_LCD_CONTRAST);
|
2117
|
2091
|
#endif
|
2118
|
2092
|
|
|
2093
|
+ //
|
|
2094
|
+ // Power-Loss Recovery
|
|
2095
|
+ //
|
|
2096
|
+
|
2119
|
2097
|
#if ENABLED(POWER_LOSS_RECOVERY)
|
2120
|
2098
|
recovery.enable(true);
|
2121
|
2099
|
#endif
|
2122
|
2100
|
|
|
2101
|
+ //
|
|
2102
|
+ // Firmware Retraction
|
|
2103
|
+ //
|
|
2104
|
+
|
2123
|
2105
|
#if ENABLED(FWRETRACT)
|
2124
|
2106
|
fwretract.reset();
|
2125
|
2107
|
#endif
|
2126
|
2108
|
|
|
2109
|
+ //
|
|
2110
|
+ // Volumetric & Filament Size
|
|
2111
|
+ //
|
|
2112
|
+
|
2127
|
2113
|
#if DISABLED(NO_VOLUMETRICS)
|
2128
|
2114
|
|
2129
|
2115
|
parser.volumetric_enabled =
|
|
@@ -2148,16 +2134,36 @@ void MarlinSettings::reset(PORTARG_SOLO) {
|
2148
|
2134
|
|
2149
|
2135
|
reset_stepper_drivers();
|
2150
|
2136
|
|
|
2137
|
+ //
|
|
2138
|
+ // Linear Advance
|
|
2139
|
+ //
|
|
2140
|
+
|
2151
|
2141
|
#if ENABLED(LIN_ADVANCE)
|
2152
|
2142
|
LOOP_L_N(i, EXTRUDERS) planner.extruder_advance_K[i] = LIN_ADVANCE_K;
|
2153
|
2143
|
#endif
|
2154
|
2144
|
|
|
2145
|
+ //
|
|
2146
|
+ // Motor Current PWM
|
|
2147
|
+ //
|
|
2148
|
+
|
2155
|
2149
|
#if HAS_MOTOR_CURRENT_PWM
|
2156
|
2150
|
uint32_t tmp_motor_current_setting[3] = PWM_MOTOR_CURRENT;
|
2157
|
2151
|
for (uint8_t q = 3; q--;)
|
2158
|
2152
|
stepper.digipot_current(q, (stepper.motor_current_setting[q] = tmp_motor_current_setting[q]));
|
2159
|
2153
|
#endif
|
2160
|
2154
|
|
|
2155
|
+ //
|
|
2156
|
+ // CNC Coordinate System
|
|
2157
|
+ //
|
|
2158
|
+
|
|
2159
|
+ #if ENABLED(CNC_COORDINATE_SYSTEMS)
|
|
2160
|
+ (void)gcode.select_coordinate_system(-1); // Go back to machine space
|
|
2161
|
+ #endif
|
|
2162
|
+
|
|
2163
|
+ //
|
|
2164
|
+ // Skew Correction
|
|
2165
|
+ //
|
|
2166
|
+
|
2161
|
2167
|
#if ENABLED(SKEW_CORRECTION_GCODE)
|
2162
|
2168
|
planner.skew_factor.xy = XY_SKEW_FACTOR;
|
2163
|
2169
|
#if ENABLED(SKEW_CORRECTION_FOR_Z)
|
|
@@ -2166,6 +2172,10 @@ void MarlinSettings::reset(PORTARG_SOLO) {
|
2166
|
2172
|
#endif
|
2167
|
2173
|
#endif
|
2168
|
2174
|
|
|
2175
|
+ //
|
|
2176
|
+ // Advanced Pause filament load & unload lengths
|
|
2177
|
+ //
|
|
2178
|
+
|
2169
|
2179
|
#if ENABLED(ADVANCED_PAUSE_FEATURE)
|
2170
|
2180
|
for (uint8_t e = 0; e < EXTRUDERS; e++) {
|
2171
|
2181
|
fc_settings[e].unload_length = FILAMENT_CHANGE_UNLOAD_LENGTH;
|
|
@@ -2491,7 +2501,7 @@ void MarlinSettings::reset(PORTARG_SOLO) {
|
2491
|
2501
|
|
2492
|
2502
|
#endif // HAS_LEVELING
|
2493
|
2503
|
|
2494
|
|
- #if HAS_SERVOS && ENABLED(EDITABLE_SERVO_ANGLES)
|
|
2504
|
+ #if ENABLED(EDITABLE_SERVO_ANGLES)
|
2495
|
2505
|
|
2496
|
2506
|
CONFIG_ECHO_HEADING("Servo Angles:");
|
2497
|
2507
|
for (uint8_t i = 0; i < NUM_SERVOS; i++) {
|
|
@@ -2515,7 +2525,7 @@ void MarlinSettings::reset(PORTARG_SOLO) {
|
2515
|
2525
|
}
|
2516
|
2526
|
}
|
2517
|
2527
|
|
2518
|
|
- #endif // HAS_SERVOS && EDITABLE_SERVO_ANGLES
|
|
2528
|
+ #endif // EDITABLE_SERVO_ANGLES
|
2519
|
2529
|
|
2520
|
2530
|
#if HAS_SCARA_OFFSET
|
2521
|
2531
|
|