Browse Source

Merge branch 'RCBugFix' into translations

Michael Conradt 8 years ago
parent
commit
f3a7a5c99b
85 changed files with 2520 additions and 913 deletions
  1. 92
    20
      .travis.yml
  2. 72
    13
      Marlin/Conditionals.h
  3. 18
    3
      Marlin/Configuration.h
  4. 33
    3
      Marlin/Configuration_adv.h
  5. 15
    11
      Marlin/M100_Free_Mem_Chk.cpp
  6. 13
    11
      Marlin/Marlin.h
  7. 338
    243
      Marlin/Marlin_main.cpp
  8. 32
    17
      Marlin/SanityCheck.h
  9. 1
    0
      Marlin/Sd2Card.cpp
  10. 4
    4
      Marlin/cardreader.cpp
  11. 14
    14
      Marlin/configuration_store.cpp
  12. 3
    4
      Marlin/dogm_lcd_implementation.h
  13. 18
    3
      Marlin/example_configurations/Felix/Configuration.h
  14. 18
    3
      Marlin/example_configurations/Felix/Configuration_DUAL.h
  15. 33
    3
      Marlin/example_configurations/Felix/Configuration_adv.h
  16. 18
    3
      Marlin/example_configurations/Hephestos/Configuration.h
  17. 33
    3
      Marlin/example_configurations/Hephestos/Configuration_adv.h
  18. 18
    3
      Marlin/example_configurations/Hephestos_2/Configuration.h
  19. 33
    3
      Marlin/example_configurations/Hephestos_2/Configuration_adv.h
  20. 18
    3
      Marlin/example_configurations/K8200/Configuration.h
  21. 33
    3
      Marlin/example_configurations/K8200/Configuration_adv.h
  22. 18
    3
      Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h
  23. 18
    3
      Marlin/example_configurations/RigidBot/Configuration.h
  24. 33
    3
      Marlin/example_configurations/RigidBot/Configuration_adv.h
  25. 18
    3
      Marlin/example_configurations/SCARA/Configuration.h
  26. 33
    3
      Marlin/example_configurations/SCARA/Configuration_adv.h
  27. 18
    3
      Marlin/example_configurations/TAZ4/Configuration.h
  28. 33
    3
      Marlin/example_configurations/TAZ4/Configuration_adv.h
  29. 18
    3
      Marlin/example_configurations/WITBOX/Configuration.h
  30. 33
    3
      Marlin/example_configurations/WITBOX/Configuration_adv.h
  31. 18
    3
      Marlin/example_configurations/adafruit/ST7565/Configuration.h
  32. 18
    3
      Marlin/example_configurations/delta/biv2.5/Configuration.h
  33. 33
    3
      Marlin/example_configurations/delta/biv2.5/Configuration_adv.h
  34. 18
    3
      Marlin/example_configurations/delta/generic/Configuration.h
  35. 33
    3
      Marlin/example_configurations/delta/generic/Configuration_adv.h
  36. 18
    3
      Marlin/example_configurations/delta/kossel_mini/Configuration.h
  37. 33
    3
      Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h
  38. 18
    3
      Marlin/example_configurations/delta/kossel_pro/Configuration.h
  39. 33
    3
      Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h
  40. 18
    3
      Marlin/example_configurations/delta/kossel_xl/Configuration.h
  41. 33
    3
      Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h
  42. 18
    3
      Marlin/example_configurations/makibox/Configuration.h
  43. 33
    3
      Marlin/example_configurations/makibox/Configuration_adv.h
  44. 18
    3
      Marlin/example_configurations/tvrrug/Round2/Configuration.h
  45. 33
    3
      Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h
  46. 0
    3
      Marlin/fonts/README.fonts
  47. 7
    1
      Marlin/language.h
  48. 1
    0
      Marlin/language_an.h
  49. 1
    0
      Marlin/language_bg.h
  50. 1
    0
      Marlin/language_ca.h
  51. 1
    0
      Marlin/language_cn.h
  52. 5
    3
      Marlin/language_cz.h
  53. 11
    10
      Marlin/language_da.h
  54. 20
    10
      Marlin/language_de.h
  55. 3
    0
      Marlin/language_en.h
  56. 43
    29
      Marlin/language_es.h
  57. 1
    0
      Marlin/language_eu.h
  58. 1
    0
      Marlin/language_fi.h
  59. 29
    14
      Marlin/language_fr.h
  60. 51
    36
      Marlin/language_it.h
  61. 4
    3
      Marlin/language_kana.h
  62. 4
    3
      Marlin/language_kana_utf8.h
  63. 24
    5
      Marlin/language_nl.h
  64. 1
    0
      Marlin/language_pl.h
  65. 1
    0
      Marlin/language_pt-br.h
  66. 1
    0
      Marlin/language_pt-br_utf8.h
  67. 15
    1
      Marlin/language_pt.h
  68. 16
    2
      Marlin/language_pt_utf8.h
  69. 1
    0
      Marlin/language_ru.h
  70. 2
    2
      Marlin/macros.h
  71. 14
    32
      Marlin/pins.h
  72. 0
    2
      Marlin/pins_FELIX2.h
  73. 1
    1
      Marlin/pins_MEGATRONICS_3.h
  74. 23
    14
      Marlin/planner.cpp
  75. 14
    0
      Marlin/scripts/findMissingTranslations.sh
  76. 4
    4
      Marlin/stepper.cpp
  77. 77
    0
      Marlin/stopwatch.cpp
  78. 99
    0
      Marlin/stopwatch.h
  79. 4
    4
      Marlin/temperature.cpp
  80. 1
    1
      Marlin/temperature.h
  81. 104
    0
      Marlin/twibus.cpp
  82. 122
    0
      Marlin/twibus.h
  83. 313
    240
      Marlin/ultralcd.cpp
  84. 39
    22
      Marlin/ultralcd.h
  85. 7
    29
      Marlin/ultralcd_implementation_hitachi_HD44780.h

+ 92
- 20
.travis.yml View File

1
 ---
1
 ---
2
 language: c
2
 language: c
3
-
3
+  #
4
 before_install:
4
 before_install:
5
   # Travis runs a detached head. We need to find the current branch
5
   # Travis runs a detached head. We need to find the current branch
6
   - git checkout `git branch --contains HEAD | grep -v '*'`
6
   - git checkout `git branch --contains HEAD | grep -v '*'`
7
   # Also tags for the root(s) of the minor version(s)
7
   # Also tags for the root(s) of the minor version(s)
8
   - git fetch origin --tags
8
   - git fetch origin --tags
9
   - mkdir ~/bin
9
   - mkdir ~/bin
10
+  #
10
 install:
11
 install:
11
   # Install arduino 1.6.4
12
   # Install arduino 1.6.4
12
   - wget http://downloads-02.arduino.cc/arduino-1.6.4-linux64.tar.xz
13
   - wget http://downloads-02.arduino.cc/arduino-1.6.4-linux64.tar.xz
26
   - mv LiquidCrystal_I2C/LiquidCrystal_I2C /usr/local/share/arduino/libraries/LiquidCrystal_I2C
27
   - mv LiquidCrystal_I2C/LiquidCrystal_I2C /usr/local/share/arduino/libraries/LiquidCrystal_I2C
27
   - git clone https://github.com/lincomatic/LiquidTWI2.git
28
   - git clone https://github.com/lincomatic/LiquidTWI2.git
28
   - mv LiquidTWI2 /usr/local/share/arduino/libraries/LiquidTWI2
29
   - mv LiquidTWI2 /usr/local/share/arduino/libraries/LiquidTWI2
30
+  #
29
 before_script:
31
 before_script:
30
   # arduino requires an X server even with command line
32
   # arduino requires an X server even with command line
31
   # https://github.com/arduino/Arduino/issues/1981
33
   # https://github.com/arduino/Arduino/issues/1981
32
   - Xvfb :1 -screen 0 1024x768x16 &> xvfb.log &
34
   - Xvfb :1 -screen 0 1024x768x16 &> xvfb.log &
33
   # change back to home directory for compiling
35
   # change back to home directory for compiling
34
   - cd $TRAVIS_BUILD_DIR
36
   - cd $TRAVIS_BUILD_DIR
37
+  #
35
 script:
38
 script:
36
-  # build default config
37
-  - build_marlin
39
+  #
38
   # Backup Configuration.h, Configuration_adv.h, and pins_RAMPS_14.h
40
   # Backup Configuration.h, Configuration_adv.h, and pins_RAMPS_14.h
41
+  #
39
   - cp Marlin/Configuration.h Marlin/Configuration.h.backup
42
   - cp Marlin/Configuration.h Marlin/Configuration.h.backup
40
   - cp Marlin/Configuration_adv.h Marlin/Configuration_adv.h.backup
43
   - cp Marlin/Configuration_adv.h Marlin/Configuration_adv.h.backup
41
   - cp Marlin/pins_RAMPS_14.h Marlin/pins_RAMPS_14.h.backup
44
   - cp Marlin/pins_RAMPS_14.h Marlin/pins_RAMPS_14.h.backup
42
-  # add sensor for bed
45
+  #
46
+  # Build with the default configurations
47
+  #
48
+  - build_marlin
49
+  #
50
+  # Test heated bed temperature sensor
51
+  #
43
   - opt_set TEMP_SENSOR_BED 1
52
   - opt_set TEMP_SENSOR_BED 1
44
   - build_marlin
53
   - build_marlin
45
-  # change extruder numbers from 1 to 2
54
+  #
55
+  # Test 2 extruders on basic RAMPS 1.4
56
+  #
46
   - opt_set MOTHERBOARD BOARD_RAMPS_14_EEB
57
   - opt_set MOTHERBOARD BOARD_RAMPS_14_EEB
47
   - opt_set EXTRUDERS 2
58
   - opt_set EXTRUDERS 2
48
   - opt_set TEMP_SENSOR_1 1
59
   - opt_set TEMP_SENSOR_1 1
49
-  #- cat Marlin/Configuration.h
50
   - build_marlin
60
   - build_marlin
51
-  # change extruder numbers from 2 to 3, needs to be a board with 3 extruders defined in pins.h 
61
+  #
62
+  # Test 3 extruders on RUMBA (can use any board with >=3 extruders defined)
63
+  #
52
   - opt_set MOTHERBOARD BOARD_RUMBA
64
   - opt_set MOTHERBOARD BOARD_RUMBA
53
   - opt_set EXTRUDERS 3
65
   - opt_set EXTRUDERS 3
54
   - opt_set TEMP_SENSOR_2 1
66
   - opt_set TEMP_SENSOR_2 1
55
   - build_marlin
67
   - build_marlin
56
-  # enable PIDTEMPBED 
68
+  #
69
+  # Test PIDTEMPBED
70
+  #
57
   - restore_configs
71
   - restore_configs
58
   - opt_enable PIDTEMPBED
72
   - opt_enable PIDTEMPBED
59
   - build_marlin
73
   - build_marlin
60
-  # enable AUTO_BED_LEVELING
74
+  #
75
+  # Test AUTO_BED_LEVELING & DEBUG_LEVELING_FEATURE
76
+  #
61
   - restore_configs
77
   - restore_configs
62
-  - opt_enable ENABLE_AUTO_BED_LEVELING
78
+  - opt_enable ENABLE_AUTO_BED_LEVELING DEBUG_LEVELING_FEATURE
63
   - build_marlin
79
   - build_marlin
64
-  # enable AUTO_BED_LEVELING with servos
65
-  - restore_configs
66
-  - opt_enable ENABLE_AUTO_BED_LEVELING NUM_SERVOS Z_ENDSTOP_SERVO_NR SERVO_ENDSTOP_ANGLES DEACTIVATE_SERVOS_AFTER_MOVE
80
+  #
81
+  # Test AUTO_BED_LEVELING & DEBUG_LEVELING_FEATURE with Servos
82
+  #
83
+  - opt_enable NUM_SERVOS Z_ENDSTOP_SERVO_NR SERVO_ENDSTOP_ANGLES DEACTIVATE_SERVOS_AFTER_MOVE
67
   - build_marlin
84
   - build_marlin
68
-  # enable EEPROM_SETTINGS & EEPROM_CHITCHAT
85
+  #
86
+  # Test EEPROM_SETTINGS & EEPROM_CHITCHAT
87
+  #
69
   - restore_configs
88
   - restore_configs
70
   - opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT
89
   - opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT
71
   - build_marlin
90
   - build_marlin
91
+  #
72
   ### LCDS ###
92
   ### LCDS ###
93
+  #
94
+  #
73
   # ULTIMAKERCONTROLLER
95
   # ULTIMAKERCONTROLLER
96
+  #
74
   - restore_configs
97
   - restore_configs
75
   - opt_enable ULTIMAKERCONTROLLER
98
   - opt_enable ULTIMAKERCONTROLLER
76
   - build_marlin
99
   - build_marlin
100
+  #
77
   # MAKRPANEL
101
   # MAKRPANEL
78
-  # Needs to use melzi and sanguino hardware
102
+  # Needs to use Melzi and Sanguino hardware
103
+  #
79
   #- restore_configs
104
   #- restore_configs
80
   #- opt_enable MAKRPANEL
105
   #- opt_enable MAKRPANEL
81
   #- build_marlin
106
   #- build_marlin
107
+  #
82
   # REPRAP_DISCOUNT_SMART_CONTROLLER
108
   # REPRAP_DISCOUNT_SMART_CONTROLLER
109
+  #
83
   - restore_configs
110
   - restore_configs
84
   - opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT
111
   - opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT
85
   - build_marlin
112
   - build_marlin
113
+  #
86
   # G3D_PANEL
114
   # G3D_PANEL
115
+  #
87
   - restore_configs
116
   - restore_configs
88
   - opt_enable G3D_PANEL SDSUPPORT
117
   - opt_enable G3D_PANEL SDSUPPORT
89
   - build_marlin
118
   - build_marlin
119
+  #
90
   # REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
120
   # REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
121
+  #
91
   - restore_configs
122
   - restore_configs
92
-  - opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
123
+  - opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SDSUPPORT
93
   - build_marlin
124
   - build_marlin
125
+  #
94
   # REPRAPWORLD_KEYPAD
126
   # REPRAPWORLD_KEYPAD
127
+  #
95
   # Cant find configuration details to get it to compile
128
   # Cant find configuration details to get it to compile
96
   #- restore_configs
129
   #- restore_configs
97
   #- opt_enable ULTRA_LCD REPRAPWORLD_KEYPAD REPRAPWORLD_KEYPAD_MOVE_STEP
130
   #- opt_enable ULTRA_LCD REPRAPWORLD_KEYPAD REPRAPWORLD_KEYPAD_MOVE_STEP
98
   #- build_marlin
131
   #- build_marlin
132
+  #
99
   # RA_CONTROL_PANEL
133
   # RA_CONTROL_PANEL
134
+  #
100
   - restore_configs
135
   - restore_configs
101
   - opt_enable RA_CONTROL_PANEL
136
   - opt_enable RA_CONTROL_PANEL
102
   - build_marlin
137
   - build_marlin
138
+  #
103
   ### I2C PANELS ###
139
   ### I2C PANELS ###
140
+  #
104
   # LCD_I2C_SAINSMART_YWROBOT
141
   # LCD_I2C_SAINSMART_YWROBOT
105
   # Failing at the moment needs different library 
142
   # Failing at the moment needs different library 
106
   #- restore_configs
143
   #- restore_configs
107
   #- opt_enable LCD_I2C_SAINSMART_YWROBOT
144
   #- opt_enable LCD_I2C_SAINSMART_YWROBOT
108
   #- build_marlin
145
   #- build_marlin
146
+  #
109
   # LCD_I2C_PANELOLU2
147
   # LCD_I2C_PANELOLU2
148
+  #
110
   - restore_configs
149
   - restore_configs
111
   - opt_enable LCD_I2C_PANELOLU2
150
   - opt_enable LCD_I2C_PANELOLU2
112
   - build_marlin
151
   - build_marlin
152
+  #
113
   # LCD_I2C_VIKI
153
   # LCD_I2C_VIKI
154
+  #
114
   - restore_configs
155
   - restore_configs
115
   - opt_enable LCD_I2C_VIKI
156
   - opt_enable LCD_I2C_VIKI
116
   - build_marlin
157
   - build_marlin
158
+  #
117
   # LCM1602
159
   # LCM1602
160
+  #
118
   - restore_configs
161
   - restore_configs
119
   - opt_enable LCM1602
162
   - opt_enable LCM1602
120
   - build_marlin
163
   - build_marlin
164
+  #
121
   # Enable FILAMENTCHANGEENABLE
165
   # Enable FILAMENTCHANGEENABLE
166
+  #
122
   - restore_configs
167
   - restore_configs
123
-  - opt_enable FILAMENTCHANGEENABLE
168
+  - opt_enable FILAMENTCHANGEENABLE ULTIMAKERCONTROLLER
124
   - build_marlin
169
   - build_marlin
170
+  #
125
   # Enable filament sensor
171
   # Enable filament sensor
172
+  #
126
   - restore_configs
173
   - restore_configs
127
   - opt_enable FILAMENT_WIDTH_SENSOR
174
   - opt_enable FILAMENT_WIDTH_SENSOR
128
   - build_marlin
175
   - build_marlin
176
+  #
129
   # Enable filament sensor with LCD display
177
   # Enable filament sensor with LCD display
130
-  - restore_configs
131
-  - opt_enable ULTIMAKERCONTROLLER FILAMENT_WIDTH_SENSOR FILAMENT_LCD_DISPLAY
178
+  #
179
+  - opt_enable ULTIMAKERCONTROLLER FILAMENT_LCD_DISPLAY
132
   - build_marlin
180
   - build_marlin
181
+  #
133
   # Enable COREXY
182
   # Enable COREXY
183
+  #
134
   - restore_configs
184
   - restore_configs
135
   - opt_enable COREXY
185
   - opt_enable COREXY
136
   - build_marlin
186
   - build_marlin
187
+  #
137
   # Enable COREXZ
188
   # Enable COREXZ
189
+  #
138
   - restore_configs
190
   - restore_configs
139
   - opt_enable COREXZ
191
   - opt_enable COREXZ
140
   - build_marlin
192
   - build_marlin
193
+  #
141
   # Enable Z_DUAL_STEPPER_DRIVERS, Z_DUAL_ENDSTOPS
194
   # Enable Z_DUAL_STEPPER_DRIVERS, Z_DUAL_ENDSTOPS
195
+  #
142
   - restore_configs
196
   - restore_configs
143
   - opt_enable_adv Z_DUAL_STEPPER_DRIVERS Z_DUAL_ENDSTOPS
197
   - opt_enable_adv Z_DUAL_STEPPER_DRIVERS Z_DUAL_ENDSTOPS
144
   - pins_set RAMPS_14 X_MAX_PIN -1
198
   - pins_set RAMPS_14 X_MAX_PIN -1
145
   - opt_set_adv Z2_MAX_PIN 2
199
   - opt_set_adv Z2_MAX_PIN 2
146
   - build_marlin
200
   - build_marlin
147
-  - restore_configs
201
+  #
202
+  #
148
   ######## Example Configurations ##############
203
   ######## Example Configurations ##############
204
+  #
149
   # Delta Config (generic)
205
   # Delta Config (generic)
206
+  - restore_configs
150
   - use_example_configs delta/generic
207
   - use_example_configs delta/generic
151
   - build_marlin
208
   - build_marlin
209
+  #
152
   # Delta Config (generic) + ABL + ALLEN_KEY
210
   # Delta Config (generic) + ABL + ALLEN_KEY
211
+  #
153
   - use_example_configs delta/generic
212
   - use_example_configs delta/generic
154
   - opt_disable DISABLE_MIN_ENDSTOPS
213
   - opt_disable DISABLE_MIN_ENDSTOPS
155
   - opt_enable AUTO_BED_LEVELING_FEATURE Z_PROBE_ALLEN_KEY
214
   - opt_enable AUTO_BED_LEVELING_FEATURE Z_PROBE_ALLEN_KEY
156
   - build_marlin
215
   - build_marlin
216
+  #
157
   # Delta Config (Mini Kossel)
217
   # Delta Config (Mini Kossel)
218
+  #
158
   - use_example_configs delta/kossel_mini
219
   - use_example_configs delta/kossel_mini
159
   - build_marlin
220
   - build_marlin
221
+  #
160
   # Makibox Config  need to check board type for Teensy++ 2.0
222
   # Makibox Config  need to check board type for Teensy++ 2.0
223
+  #
161
   #- use_example_configs makibox
224
   #- use_example_configs makibox
162
   #- build_marlin
225
   #- build_marlin
226
+  #
163
   # SCARA Config
227
   # SCARA Config
228
+  #
164
   - use_example_configs SCARA
229
   - use_example_configs SCARA
165
   - build_marlin
230
   - build_marlin
231
+  #
166
   # tvrrug Config need to check board type for sanguino atmega644p
232
   # tvrrug Config need to check board type for sanguino atmega644p
233
+  #
167
   #- use_example_configs tvrrug/Round2
234
   #- use_example_configs tvrrug/Round2
168
   #- build_marlin
235
   #- build_marlin
236
+  #
237
+  #
169
   ######## Board Types #############
238
   ######## Board Types #############
239
+  #
240
+  # To be added in nightly test branch
241
+  #

+ 72
- 13
Marlin/Conditionals.h View File

275
   #include "Arduino.h"
275
   #include "Arduino.h"
276
 
276
 
277
   /**
277
   /**
278
-   * ENDSTOPPULLUPS
278
+   * Set ENDSTOPPULLUPS for unused endstop switches
279
    */
279
    */
280
   #if ENABLED(ENDSTOPPULLUPS)
280
   #if ENABLED(ENDSTOPPULLUPS)
281
-    #if DISABLED(DISABLE_MAX_ENDSTOPS)
281
+    #if ENABLED(USE_XMAX_PLUG)
282
       #define ENDSTOPPULLUP_XMAX
282
       #define ENDSTOPPULLUP_XMAX
283
+    #endif
284
+    #if ENABLED(USE_YMAX_PLUG)
283
       #define ENDSTOPPULLUP_YMAX
285
       #define ENDSTOPPULLUP_YMAX
286
+    #endif
287
+    #if ENABLED(USE_ZMAX_PLUG)
284
       #define ENDSTOPPULLUP_ZMAX
288
       #define ENDSTOPPULLUP_ZMAX
285
     #endif
289
     #endif
286
-    #if DISABLED(DISABLE_MIN_ENDSTOPS)
290
+    #if ENABLED(USE_XMIN_PLUG)
287
       #define ENDSTOPPULLUP_XMIN
291
       #define ENDSTOPPULLUP_XMIN
292
+    #endif
293
+    #if ENABLED(USE_YMIN_PLUG)
288
       #define ENDSTOPPULLUP_YMIN
294
       #define ENDSTOPPULLUP_YMIN
295
+    #endif
296
+    #if ENABLED(USE_ZMIN_PLUG)
289
       #define ENDSTOPPULLUP_ZMIN
297
       #define ENDSTOPPULLUP_ZMIN
290
     #endif
298
     #endif
291
-    #if DISABLED(DISABLE_Z_MIN_PROBE_ENDSTOP)
299
+    #if ENABLED(DISABLE_Z_MIN_PROBE_ENDSTOP)
292
       #define ENDSTOPPULLUP_ZMIN_PROBE
300
       #define ENDSTOPPULLUP_ZMIN_PROBE
293
     #endif
301
     #endif
294
   #endif
302
   #endif
440
     #define HEATER_0_USES_THERMISTOR
448
     #define HEATER_0_USES_THERMISTOR
441
   #endif
449
   #endif
442
 
450
 
443
-  #if TEMP_SENSOR_1 == -1
451
+  #if TEMP_SENSOR_1 <= -2
452
+    #error MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_1
453
+  #elif TEMP_SENSOR_1 == -1
444
     #define HEATER_1_USES_AD595
454
     #define HEATER_1_USES_AD595
445
   #elif TEMP_SENSOR_1 == 0
455
   #elif TEMP_SENSOR_1 == 0
446
     #undef HEATER_1_MINTEMP
456
     #undef HEATER_1_MINTEMP
450
     #define HEATER_1_USES_THERMISTOR
460
     #define HEATER_1_USES_THERMISTOR
451
   #endif
461
   #endif
452
 
462
 
453
-  #if TEMP_SENSOR_2 == -1
463
+  #if TEMP_SENSOR_2 <= -2
464
+    #error MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_2
465
+  #elif TEMP_SENSOR_2 == -1
454
     #define HEATER_2_USES_AD595
466
     #define HEATER_2_USES_AD595
455
   #elif TEMP_SENSOR_2 == 0
467
   #elif TEMP_SENSOR_2 == 0
456
     #undef HEATER_2_MINTEMP
468
     #undef HEATER_2_MINTEMP
460
     #define HEATER_2_USES_THERMISTOR
472
     #define HEATER_2_USES_THERMISTOR
461
   #endif
473
   #endif
462
 
474
 
463
-  #if TEMP_SENSOR_3 == -1
475
+  #if TEMP_SENSOR_3 <= -2
476
+    #error MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_3
477
+  #elif TEMP_SENSOR_3 == -1
464
     #define HEATER_3_USES_AD595
478
     #define HEATER_3_USES_AD595
465
   #elif TEMP_SENSOR_3 == 0
479
   #elif TEMP_SENSOR_3 == 0
466
     #undef HEATER_3_MINTEMP
480
     #undef HEATER_3_MINTEMP
470
     #define HEATER_3_USES_THERMISTOR
484
     #define HEATER_3_USES_THERMISTOR
471
   #endif
485
   #endif
472
 
486
 
473
-  #if TEMP_SENSOR_BED == -1
487
+  #if TEMP_SENSOR_BED <= -2
488
+    #error MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_BED
489
+  #elif TEMP_SENSOR_BED == -1
474
     #define BED_USES_AD595
490
     #define BED_USES_AD595
475
   #elif TEMP_SENSOR_BED == 0
491
   #elif TEMP_SENSOR_BED == 0
476
     #undef BED_MINTEMP
492
     #undef BED_MINTEMP
496
   #define ARRAY_BY_EXTRUDERS1(v1) ARRAY_BY_EXTRUDERS(v1, v1, v1, v1)
512
   #define ARRAY_BY_EXTRUDERS1(v1) ARRAY_BY_EXTRUDERS(v1, v1, v1, v1)
497
 
513
 
498
   /**
514
   /**
515
+   * Z_DUAL_ENDSTOPS endstop reassignment
516
+   */
517
+  #if ENABLED(Z_DUAL_ENDSTOPS)
518
+    #define _XMIN_ 100
519
+    #define _YMIN_ 200
520
+    #define _ZMIN_ 300
521
+    #define _XMAX_ 101
522
+    #define _YMAX_ 201
523
+    #define _ZMAX_ 301
524
+    const bool Z2_MAX_ENDSTOP_INVERTING =
525
+      #if Z2_USE_ENDSTOP == _XMAX_
526
+        X_MAX_ENDSTOP_INVERTING
527
+        #define Z2_MAX_PIN X_MAX_PIN
528
+        #undef USE_XMAX_PLUG
529
+      #elif Z2_USE_ENDSTOP == _YMAX_
530
+        Y_MAX_ENDSTOP_INVERTING
531
+        #define Z2_MAX_PIN Y_MAX_PIN
532
+        #undef USE_YMAX_PLUG
533
+      #elif Z2_USE_ENDSTOP == _ZMAX_
534
+        Z_MAX_ENDSTOP_INVERTING
535
+        #define Z2_MAX_PIN Z_MAX_PIN
536
+        #undef USE_ZMAX_PLUG
537
+      #elif Z2_USE_ENDSTOP == _XMIN_
538
+        X_MIN_ENDSTOP_INVERTING
539
+        #define Z2_MAX_PIN X_MIN_PIN
540
+        #undef USE_XMIN_PLUG
541
+      #elif Z2_USE_ENDSTOP == _YMIN_
542
+        Y_MIN_ENDSTOP_INVERTING
543
+        #define Z2_MAX_PIN Y_MIN_PIN
544
+        #undef USE_YMIN_PLUG
545
+      #elif Z2_USE_ENDSTOP == _ZMIN_
546
+        Z_MIN_ENDSTOP_INVERTING
547
+        #define Z2_MAX_PIN Z_MIN_PIN
548
+        #undef USE_ZMIN_PLUG
549
+      #else
550
+        0
551
+      #endif
552
+    ;
553
+  #endif
554
+
555
+  /**
499
    * Shorthand for pin tests, used wherever needed
556
    * Shorthand for pin tests, used wherever needed
500
    */
557
    */
501
-  #define HAS_TEMP_0 (PIN_EXISTS(TEMP_0) && TEMP_SENSOR_0 != 0 && TEMP_SENSOR_0 != -2)
502
-  #define HAS_TEMP_1 (PIN_EXISTS(TEMP_1) && TEMP_SENSOR_1 != 0)
503
-  #define HAS_TEMP_2 (PIN_EXISTS(TEMP_2) && TEMP_SENSOR_2 != 0)
504
-  #define HAS_TEMP_3 (PIN_EXISTS(TEMP_3) && TEMP_SENSOR_3 != 0)
505
-  #define HAS_TEMP_BED (PIN_EXISTS(TEMP_BED) && TEMP_SENSOR_BED != 0)
558
+  #define HAS_TEMP_0 (PIN_EXISTS(TEMP_0) && TEMP_SENSOR_0 != 0 && TEMP_SENSOR_0 > -2)
559
+  #define HAS_TEMP_1 (PIN_EXISTS(TEMP_1) && TEMP_SENSOR_1 != 0 && TEMP_SENSOR_1 > -2)
560
+  #define HAS_TEMP_2 (PIN_EXISTS(TEMP_2) && TEMP_SENSOR_2 != 0 && TEMP_SENSOR_2 > -2)
561
+  #define HAS_TEMP_3 (PIN_EXISTS(TEMP_3) && TEMP_SENSOR_3 != 0 && TEMP_SENSOR_3 > -2)
562
+  #define HAS_TEMP_BED (PIN_EXISTS(TEMP_BED) && TEMP_SENSOR_BED != 0 && TEMP_SENSOR_BED > -2)
506
   #define HAS_HEATER_0 (PIN_EXISTS(HEATER_0))
563
   #define HAS_HEATER_0 (PIN_EXISTS(HEATER_0))
507
   #define HAS_HEATER_1 (PIN_EXISTS(HEATER_1))
564
   #define HAS_HEATER_1 (PIN_EXISTS(HEATER_1))
508
   #define HAS_HEATER_2 (PIN_EXISTS(HEATER_2))
565
   #define HAS_HEATER_2 (PIN_EXISTS(HEATER_2))
581
 
638
 
582
   #define HAS_MOTOR_CURRENT_PWM (PIN_EXISTS(MOTOR_CURRENT_PWM_XY) || PIN_EXISTS(MOTOR_CURRENT_PWM_Z) || PIN_EXISTS(MOTOR_CURRENT_PWM_E))
639
   #define HAS_MOTOR_CURRENT_PWM (PIN_EXISTS(MOTOR_CURRENT_PWM_XY) || PIN_EXISTS(MOTOR_CURRENT_PWM_Z) || PIN_EXISTS(MOTOR_CURRENT_PWM_E))
583
 
640
 
641
+  #define HAS_TEMP_HOTEND (HAS_TEMP_0 || ENABLED(HEATER_0_USES_MAX6675))
642
+
584
   /**
643
   /**
585
    * Helper Macros for heaters and extruder fan
644
    * Helper Macros for heaters and extruder fan
586
    */
645
    */

+ 18
- 3
Marlin/Configuration.h View File

346
 // Enable this option for Toshiba steppers
346
 // Enable this option for Toshiba steppers
347
 //#define CONFIG_STEPPERS_TOSHIBA
347
 //#define CONFIG_STEPPERS_TOSHIBA
348
 
348
 
349
+//===========================================================================
350
+//============================== Endstop Settings ===========================
351
+//===========================================================================
352
+
349
 // @section homing
353
 // @section homing
350
 
354
 
355
+// Specify here all the endstop connectors that are connected to any endstop or probe.
356
+// Almost all printers will be using one per axis. Probes will use one or more of the
357
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
358
+#define USE_XMIN_PLUG
359
+#define USE_YMIN_PLUG
360
+#define USE_ZMIN_PLUG
361
+//#define USE_XMAX_PLUG
362
+//#define USE_YMAX_PLUG
363
+//#define USE_ZMAX_PLUG
364
+
351
 // coarse Endstop Settings
365
 // coarse Endstop Settings
352
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
366
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
353
 
367
 
370
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
384
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
371
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
385
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
372
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
386
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
373
-//#define DISABLE_MAX_ENDSTOPS
374
-//#define DISABLE_MIN_ENDSTOPS
375
 
387
 
376
 //===========================================================================
388
 //===========================================================================
377
 //============================= Z Probe Options =============================
389
 //============================= Z Probe Options =============================
709
 // Host Keepalive
721
 // Host Keepalive
710
 //
722
 //
711
 // By default Marlin will send a busy status message to the host
723
 // By default Marlin will send a busy status message to the host
712
-// every 10 seconds when it can't accept commands.
724
+// every couple of seconds when it can't accept commands.
713
 //
725
 //
714
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
726
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
727
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
728
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
729
+#endif
715
 
730
 
716
 //
731
 //
717
 // M100 Free Memory Watcher
732
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/Configuration_adv.h View File

201
   //#define Z_DUAL_ENDSTOPS
201
   //#define Z_DUAL_ENDSTOPS
202
 
202
 
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207
   #endif
205
   #endif
208
 
206
 
209
 #endif // Z_DUAL_STEPPER_DRIVERS
207
 #endif // Z_DUAL_STEPPER_DRIVERS
655
 
653
 
656
 #endif
654
 #endif
657
 
655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658
 #include "Conditionals.h"
688
 #include "Conditionals.h"
659
 #include "SanityCheck.h"
689
 #include "SanityCheck.h"
660
 
690
 

+ 15
- 11
Marlin/M100_Free_Mem_Chk.cpp View File

137
   // other vital statistics that define the memory pool.
137
   // other vital statistics that define the memory pool.
138
   //
138
   //
139
   if (code_seen('F')) {
139
   if (code_seen('F')) {
140
-    int max_addr = (int) __brkval;
141
-    int max_cnt = 0;
140
+    #if 0
141
+      int max_addr = (int) __brkval;
142
+      int max_cnt = 0;
143
+    #endif
142
     int block_cnt = 0;
144
     int block_cnt = 0;
143
     ptr = (unsigned char*) __brkval;
145
     ptr = (unsigned char*) __brkval;
144
     sp = top_of_stack();
146
     sp = top_of_stack();
155
           i += j;
157
           i += j;
156
           block_cnt++;
158
           block_cnt++;
157
         }
159
         }
158
-        if (j > max_cnt) {      // We don't do anything with this information yet
159
-          max_cnt  = j;     // but we do know where the biggest free memory block is.
160
-          max_addr = (int) ptr + i;
161
-        }
160
+        #if 0
161
+          if (j > max_cnt) {      // We don't do anything with this information yet
162
+            max_cnt  = j;     // but we do know where the biggest free memory block is.
163
+            max_addr = (int) ptr + i;
164
+          }
165
+        #endif
162
       }
166
       }
163
     }
167
     }
164
     if (block_cnt > 1)
168
     if (block_cnt > 1)
176
     x = code_value();
180
     x = code_value();
177
     SERIAL_ECHOLNPGM("Corrupting free memory block.\n");
181
     SERIAL_ECHOLNPGM("Corrupting free memory block.\n");
178
     ptr = (unsigned char*) __brkval;
182
     ptr = (unsigned char*) __brkval;
179
-    SERIAL_ECHOPAIR("\n__brkval : ", (long) ptr);
183
+    SERIAL_ECHOPAIR("\n__brkval : ", ptr);
180
     ptr += 8;
184
     ptr += 8;
181
     sp = top_of_stack();
185
     sp = top_of_stack();
182
-    SERIAL_ECHOPAIR("\nStack Pointer : ", (long) sp);
186
+    SERIAL_ECHOPAIR("\nStack Pointer : ", sp);
183
     SERIAL_ECHOLNPGM("\n");
187
     SERIAL_ECHOLNPGM("\n");
184
     n = sp - ptr - 64;    // -64 just to keep us from finding interrupt activity that
188
     n = sp - ptr - 64;    // -64 just to keep us from finding interrupt activity that
185
     // has altered the stack.
189
     // has altered the stack.
200
   if (m100_not_initialized || code_seen('I')) {       // If no sub-command is specified, the first time
204
   if (m100_not_initialized || code_seen('I')) {       // If no sub-command is specified, the first time
201
     SERIAL_ECHOLNPGM("Initializing free memory block.\n");    // this happens, it will Initialize.
205
     SERIAL_ECHOLNPGM("Initializing free memory block.\n");    // this happens, it will Initialize.
202
     ptr = (unsigned char*) __brkval;        // Repeated M100 with no sub-command will not destroy the
206
     ptr = (unsigned char*) __brkval;        // Repeated M100 with no sub-command will not destroy the
203
-    SERIAL_ECHOPAIR("\n__brkval : ", (long) ptr);     // state of the initialized free memory pool.
207
+    SERIAL_ECHOPAIR("\n__brkval : ", ptr);     // state of the initialized free memory pool.
204
     ptr += 8;
208
     ptr += 8;
205
     sp = top_of_stack();
209
     sp = top_of_stack();
206
-    SERIAL_ECHOPAIR("\nStack Pointer : ", (long) sp);
210
+    SERIAL_ECHOPAIR("\nStack Pointer : ", sp);
207
     SERIAL_ECHOLNPGM("\n");
211
     SERIAL_ECHOLNPGM("\n");
208
     n = sp - ptr - 64;    // -64 just to keep us from finding interrupt activity that
212
     n = sp - ptr - 64;    // -64 just to keep us from finding interrupt activity that
209
     // has altered the stack.
213
     // has altered the stack.
213
       *(ptr + i) = (unsigned char) 0xe5;
217
       *(ptr + i) = (unsigned char) 0xe5;
214
     for (i = 0; i < n; i++) {
218
     for (i = 0; i < n; i++) {
215
       if (*(ptr + i) != (unsigned char) 0xe5) {
219
       if (*(ptr + i) != (unsigned char) 0xe5) {
216
-        SERIAL_ECHOPAIR("? address : ", (unsigned long) ptr + i);
220
+        SERIAL_ECHOPAIR("? address : ", ptr + i);
217
         SERIAL_ECHOPAIR("=", *(ptr + i));
221
         SERIAL_ECHOPAIR("=", *(ptr + i));
218
         SERIAL_ECHOLNPGM("\n");
222
         SERIAL_ECHOLNPGM("\n");
219
       }
223
       }

+ 13
- 11
Marlin/Marlin.h View File

65
 
65
 
66
 #include "WString.h"
66
 #include "WString.h"
67
 
67
 
68
+#include "stopwatch.h"
69
+
68
 #ifdef USBCON
70
 #ifdef USBCON
69
   #if ENABLED(BLUETOOTH)
71
   #if ENABLED(BLUETOOTH)
70
     #define MYSERIAL bluetoothSerial
72
     #define MYSERIAL bluetoothSerial
101
 #define SERIAL_ECHOLN(x) SERIAL_PROTOCOLLN(x)
103
 #define SERIAL_ECHOLN(x) SERIAL_PROTOCOLLN(x)
102
 #define SERIAL_ECHOLNPGM(x) SERIAL_PROTOCOLLNPGM(x)
104
 #define SERIAL_ECHOLNPGM(x) SERIAL_PROTOCOLLNPGM(x)
103
 
105
 
104
-#define SERIAL_ECHOPAIR(name,value) do{ serial_echopair_P(PSTR(name),(value)); }while(0)
106
+#define SERIAL_ECHOPAIR(name,value) (serial_echopair_P(PSTR(name),(value)))
105
 
107
 
106
 void serial_echopair_P(const char* s_P, int v);
108
 void serial_echopair_P(const char* s_P, int v);
107
 void serial_echopair_P(const char* s_P, long v);
109
 void serial_echopair_P(const char* s_P, long v);
108
 void serial_echopair_P(const char* s_P, float v);
110
 void serial_echopair_P(const char* s_P, float v);
109
 void serial_echopair_P(const char* s_P, double v);
111
 void serial_echopair_P(const char* s_P, double v);
110
 void serial_echopair_P(const char* s_P, unsigned long v);
112
 void serial_echopair_P(const char* s_P, unsigned long v);
113
+FORCE_INLINE void serial_echopair_P(const char* s_P, bool v) { serial_echopair_P(s_P, (int)v); }
114
+FORCE_INLINE void serial_echopair_P(const char* s_P, void *v) { serial_echopair_P(s_P, (unsigned long)v); }
111
 
115
 
112
 // Things to write to serial from Program memory. Saves 400 to 2k of RAM.
116
 // Things to write to serial from Program memory. Saves 400 to 2k of RAM.
113
 FORCE_INLINE void serialprintPGM(const char* str) {
117
 FORCE_INLINE void serialprintPGM(const char* str) {
323
   extern float zprobe_zoffset;
327
   extern float zprobe_zoffset;
324
 #endif
328
 #endif
325
 
329
 
330
+#if ENABLED(HOST_KEEPALIVE_FEATURE)
331
+  extern uint8_t host_keepalive_interval;
332
+#endif
333
+
326
 #if ENABLED(PREVENT_DANGEROUS_EXTRUDE)
334
 #if ENABLED(PREVENT_DANGEROUS_EXTRUDE)
327
   extern float extrude_min_temp;
335
   extern float extrude_min_temp;
328
 #endif
336
 #endif
341
   extern bool filament_sensor;  //indicates that filament sensor readings should control extrusion
349
   extern bool filament_sensor;  //indicates that filament sensor readings should control extrusion
342
   extern float filament_width_meas; //holds the filament diameter as accurately measured
350
   extern float filament_width_meas; //holds the filament diameter as accurately measured
343
   extern int8_t measurement_delay[];  //ring buffer to delay measurement
351
   extern int8_t measurement_delay[];  //ring buffer to delay measurement
344
-  extern int delay_index1, delay_index2;  //ring buffer index. used by planner, temperature, and main code
345
-  extern float delay_dist; //delay distance counter
352
+  extern int filwidth_delay_index1, filwidth_delay_index2;  //ring buffer index. used by planner, temperature, and main code
346
   extern int meas_delay_cm; //delay distance
353
   extern int meas_delay_cm; //delay distance
347
 #endif
354
 #endif
348
 
355
 
357
   extern float retract_recover_length, retract_recover_length_swap, retract_recover_feedrate;
364
   extern float retract_recover_length, retract_recover_length_swap, retract_recover_feedrate;
358
 #endif
365
 #endif
359
 
366
 
360
-extern millis_t print_job_start_ms;
361
-extern millis_t print_job_stop_ms;
367
+// Print job timer
368
+extern Stopwatch print_job_timer;
362
 
369
 
363
 // Handling multiple extruders pins
370
 // Handling multiple extruders pins
364
 extern uint8_t active_extruder;
371
 extern uint8_t active_extruder;
368
   extern void digipot_i2c_init();
375
   extern void digipot_i2c_init();
369
 #endif
376
 #endif
370
 
377
 
371
-#if HAS_TEMP_0 || HAS_TEMP_BED || ENABLED(HEATER_0_USES_MAX6675)
378
+#if HAS_TEMP_HOTEND || HAS_TEMP_BED
372
   void print_heaterstates();
379
   void print_heaterstates();
373
 #endif
380
 #endif
374
 
381
 
375
 extern void calculate_volumetric_multipliers();
382
 extern void calculate_volumetric_multipliers();
376
 
383
 
377
-// Print job timer related functions
378
-millis_t print_job_timer();
379
-bool print_job_start(millis_t t = 0);
380
-bool print_job_stop(bool force = false);
381
-
382
 #endif //MARLIN_H
384
 #endif //MARLIN_H

+ 338
- 243
Marlin/Marlin_main.cpp
File diff suppressed because it is too large
View File


+ 32
- 17
Marlin/SanityCheck.h View File

368
  * Test Heater, Temp Sensor, and Extruder Pins; Sensor Type must also be set.
368
  * Test Heater, Temp Sensor, and Extruder Pins; Sensor Type must also be set.
369
  */
369
  */
370
 #if EXTRUDERS > 3
370
 #if EXTRUDERS > 3
371
-  #if !HAS_HEATER_3
371
+  #if TEMP_SENSOR_3 == 0
372
+    #error TEMP_SENSOR_3 is required with 4 EXTRUDERS.
373
+  #elif !HAS_HEATER_3
372
     #error HEATER_3_PIN not defined for this board.
374
     #error HEATER_3_PIN not defined for this board.
373
   #elif !PIN_EXISTS(TEMP_3)
375
   #elif !PIN_EXISTS(TEMP_3)
374
     #error TEMP_3_PIN not defined for this board.
376
     #error TEMP_3_PIN not defined for this board.
375
   #elif !PIN_EXISTS(E3_STEP) || !PIN_EXISTS(E3_DIR) || !PIN_EXISTS(E3_ENABLE)
377
   #elif !PIN_EXISTS(E3_STEP) || !PIN_EXISTS(E3_DIR) || !PIN_EXISTS(E3_ENABLE)
376
     #error E3_STEP_PIN, E3_DIR_PIN, or E3_ENABLE_PIN not defined for this board.
378
     #error E3_STEP_PIN, E3_DIR_PIN, or E3_ENABLE_PIN not defined for this board.
377
-  #elif TEMP_SENSOR_3 == 0
378
-    #error TEMP_SENSOR_3 is required with 4 EXTRUDERS.
379
   #endif
379
   #endif
380
 #elif EXTRUDERS > 2
380
 #elif EXTRUDERS > 2
381
-  #if !HAS_HEATER_2
381
+  #if TEMP_SENSOR_2 == 0
382
+    #error TEMP_SENSOR_2 is required with 3 or more EXTRUDERS.
383
+  #elif !HAS_HEATER_2
382
     #error HEATER_2_PIN not defined for this board.
384
     #error HEATER_2_PIN not defined for this board.
383
   #elif !PIN_EXISTS(TEMP_2)
385
   #elif !PIN_EXISTS(TEMP_2)
384
     #error TEMP_2_PIN not defined for this board.
386
     #error TEMP_2_PIN not defined for this board.
385
   #elif !PIN_EXISTS(E2_STEP) || !PIN_EXISTS(E2_DIR) || !PIN_EXISTS(E2_ENABLE)
387
   #elif !PIN_EXISTS(E2_STEP) || !PIN_EXISTS(E2_DIR) || !PIN_EXISTS(E2_ENABLE)
386
     #error E2_STEP_PIN, E2_DIR_PIN, or E2_ENABLE_PIN not defined for this board.
388
     #error E2_STEP_PIN, E2_DIR_PIN, or E2_ENABLE_PIN not defined for this board.
387
-  #elif TEMP_SENSOR_2 == 0
388
-    #error TEMP_SENSOR_2 is required with 3 or more EXTRUDERS.
389
   #endif
389
   #endif
390
 #elif EXTRUDERS > 1
390
 #elif EXTRUDERS > 1
391
-  #if !PIN_EXISTS(TEMP_1)
391
+  #if TEMP_SENSOR_1 == 0
392
+    #error TEMP_SENSOR_1 is required with 2 or more EXTRUDERS.
393
+  #elif !PIN_EXISTS(TEMP_1)
392
     #error TEMP_1_PIN not defined for this board.
394
     #error TEMP_1_PIN not defined for this board.
393
   #elif !PIN_EXISTS(E1_STEP) || !PIN_EXISTS(E1_DIR) || !PIN_EXISTS(E1_ENABLE)
395
   #elif !PIN_EXISTS(E1_STEP) || !PIN_EXISTS(E1_DIR) || !PIN_EXISTS(E1_ENABLE)
394
     #error E1_STEP_PIN, E1_DIR_PIN, or E1_ENABLE_PIN not defined for this board.
396
     #error E1_STEP_PIN, E1_DIR_PIN, or E1_ENABLE_PIN not defined for this board.
401
   #endif
403
   #endif
402
 #endif
404
 #endif
403
 
405
 
404
-#if TEMP_SENSOR_1 == 0
405
-  #if EXTRUDERS > 1
406
-    #error TEMP_SENSOR_1 is required with 2 or more EXTRUDERS.
407
-  #elif ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
408
-    #error TEMP_SENSOR_1 is required with TEMP_SENSOR_1_AS_REDUNDANT.
409
-  #endif
406
+#if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT) && TEMP_SENSOR_1 == 0
407
+  #error TEMP_SENSOR_1 is required with TEMP_SENSOR_1_AS_REDUNDANT.
410
 #endif
408
 #endif
411
 
409
 
412
 #if !HAS_HEATER_0
410
 #if !HAS_HEATER_0
420
 #endif
418
 #endif
421
 
419
 
422
 /**
420
 /**
421
+ * Endstops
422
+ */
423
+#if DISABLED(USE_XMIN_PLUG) && DISABLED(USE_XMAX_PLUG) && !(ENABLED(Z_DUAL_ENDSTOPS) && Z2_USE_ENDSTOP >= _XMAX_ && Z2_USE_ENDSTOP <= _XMIN_)
424
+ #error You must enable USE_XMIN_PLUG or USE_XMAX_PLUG
425
+#elif DISABLED(USE_YMIN_PLUG) && DISABLED(USE_YMAX_PLUG) && !(ENABLED(Z_DUAL_ENDSTOPS) && Z2_USE_ENDSTOP >= _YMAX_ && Z2_USE_ENDSTOP <= _YMIN_)
426
+ #error You must enable USE_YMIN_PLUG or USE_YMAX_PLUG
427
+#elif DISABLED(USE_ZMIN_PLUG) && DISABLED(USE_ZMAX_PLUG) && !(ENABLED(Z_DUAL_ENDSTOPS) && Z2_USE_ENDSTOP >= _ZMAX_ && Z2_USE_ENDSTOP <= _ZMIN_)
428
+ #error You must enable USE_ZMIN_PLUG or USE_ZMAX_PLUG
429
+#elif ENABLED(Z_DUAL_ENDSTOPS) && !Z2_USE_ENDSTOP
430
+ #error You must set Z2_USE_ENDSTOP with Z_DUAL_ENDSTOPS
431
+#endif
432
+
433
+/**
423
  * Warnings for old configurations
434
  * Warnings for old configurations
424
  */
435
  */
425
 #if WATCH_TEMP_PERIOD > 500
436
 #if WATCH_TEMP_PERIOD > 500
445
 #elif defined(CUSTOM_MENDEL_NAME)
456
 #elif defined(CUSTOM_MENDEL_NAME)
446
   #error CUSTOM_MENDEL_NAME is now CUSTOM_MACHINE_NAME. Please update your configuration.
457
   #error CUSTOM_MENDEL_NAME is now CUSTOM_MACHINE_NAME. Please update your configuration.
447
 #elif defined(HAS_AUTOMATIC_VERSIONING)
458
 #elif defined(HAS_AUTOMATIC_VERSIONING)
448
-  #error HAS_AUTOMATIC_VERSIONING deprecated - use USE_AUTOMATIC_VERSIONING instead
459
+  #error HAS_AUTOMATIC_VERSIONING is now USE_AUTOMATIC_VERSIONING. Please update your configuration.
449
 #elif defined(ENABLE_AUTO_BED_LEVELING)
460
 #elif defined(ENABLE_AUTO_BED_LEVELING)
450
-  #error ENABLE_AUTO_BED_LEVELING deprecated - use AUTO_BED_LEVELING_FEATURE instead
461
+  #error ENABLE_AUTO_BED_LEVELING is now AUTO_BED_LEVELING_FEATURE. Please update your configuration.
451
 #elif defined(SDSLOW)
462
 #elif defined(SDSLOW)
452
-  #error SDSLOW deprecated - set SPI_SPEED to SPI_HALF_SPEED instead
463
+  #error SDSLOW deprecated. Set SPI_SPEED to SPI_HALF_SPEED instead.
453
 #elif defined(SDEXTRASLOW)
464
 #elif defined(SDEXTRASLOW)
454
-  #error SDEXTRASLOW deprecated - set SPI_SPEED to SPI_QUARTER_SPEED instead
465
+  #error SDEXTRASLOW deprecated. Set SPI_SPEED to SPI_QUARTER_SPEED instead.
455
 #elif defined(Z_RAISE_BEFORE_HOMING)
466
 #elif defined(Z_RAISE_BEFORE_HOMING)
456
   #error Z_RAISE_BEFORE_HOMING is deprecated. Use MIN_Z_HEIGHT_FOR_HOMING instead.
467
   #error Z_RAISE_BEFORE_HOMING is deprecated. Use MIN_Z_HEIGHT_FOR_HOMING instead.
457
 #elif defined(FILAMENT_SENSOR)
468
 #elif defined(FILAMENT_SENSOR)
458
   #error FILAMENT_SENSOR is deprecated. Use FILAMENT_WIDTH_SENSOR instead.
469
   #error FILAMENT_SENSOR is deprecated. Use FILAMENT_WIDTH_SENSOR instead.
470
+#elif defined(DISABLE_MAX_ENDSTOPS) || defined(DISABLE_MIN_ENDSTOPS)
471
+  #error DISABLE_MAX_ENDSTOPS and DISABLE_MIN_ENDSTOPS deprecated. Use individual USE_*_PLUG options instead.
472
+#elif ENABLED(Z_DUAL_ENDSTOPS) && !defined(Z2_USE_ENDSTOP)
473
+  #error Z_DUAL_ENDSTOPS settings are simplified. Just set Z2_USE_ENDSTOP to the endstop you want to repurpose for Z2
459
 #endif
474
 #endif
460
 
475
 
461
 #endif //SANITYCHECK_H
476
 #endif //SANITYCHECK_H

+ 1
- 0
Marlin/Sd2Card.cpp View File

365
   #if DISABLED(SOFTWARE_SPI)
365
   #if DISABLED(SOFTWARE_SPI)
366
     return setSckRate(sckRateID);
366
     return setSckRate(sckRateID);
367
   #else  // SOFTWARE_SPI
367
   #else  // SOFTWARE_SPI
368
+    UNUSED(sckRateID);
368
     return true;
369
     return true;
369
   #endif  // SOFTWARE_SPI
370
   #endif  // SOFTWARE_SPI
370
 
371
 

+ 4
- 4
Marlin/cardreader.cpp View File

348
   char *dirname_start, *dirname_end;
348
   char *dirname_start, *dirname_end;
349
   if (name[0] == '/') {
349
   if (name[0] == '/') {
350
     dirname_start = &name[1];
350
     dirname_start = &name[1];
351
-    while (dirname_start > 0) {
351
+    while (dirname_start != NULL) {
352
       dirname_end = strchr(dirname_start, '/');
352
       dirname_end = strchr(dirname_start, '/');
353
       //SERIAL_ECHO("start:");SERIAL_ECHOLN((int)(dirname_start - name));
353
       //SERIAL_ECHO("start:");SERIAL_ECHOLN((int)(dirname_start - name));
354
       //SERIAL_ECHO("end  :");SERIAL_ECHOLN((int)(dirname_end - name));
354
       //SERIAL_ECHO("end  :");SERIAL_ECHOLN((int)(dirname_end - name));
355
-      if (dirname_end > 0 && dirname_end > dirname_start) {
355
+      if (dirname_end != NULL && dirname_end > dirname_start) {
356
         char subdirname[FILENAME_LENGTH];
356
         char subdirname[FILENAME_LENGTH];
357
         strncpy(subdirname, dirname_start, dirname_end - dirname_start);
357
         strncpy(subdirname, dirname_start, dirname_end - dirname_start);
358
         subdirname[dirname_end - dirname_start] = 0;
358
         subdirname[dirname_end - dirname_start] = 0;
429
   char *dirname_start, *dirname_end;
429
   char *dirname_start, *dirname_end;
430
   if (name[0] == '/') {
430
   if (name[0] == '/') {
431
     dirname_start = strchr(name, '/') + 1;
431
     dirname_start = strchr(name, '/') + 1;
432
-    while (dirname_start > 0) {
432
+    while (dirname_start != NULL) {
433
       dirname_end = strchr(dirname_start, '/');
433
       dirname_end = strchr(dirname_start, '/');
434
       //SERIAL_ECHO("start:");SERIAL_ECHOLN((int)(dirname_start - name));
434
       //SERIAL_ECHO("start:");SERIAL_ECHOLN((int)(dirname_start - name));
435
       //SERIAL_ECHO("end  :");SERIAL_ECHOLN((int)(dirname_end - name));
435
       //SERIAL_ECHO("end  :");SERIAL_ECHOLN((int)(dirname_end - name));
436
-      if (dirname_end > 0 && dirname_end > dirname_start) {
436
+      if (dirname_end != NULL && dirname_end > dirname_start) {
437
         char subdirname[FILENAME_LENGTH];
437
         char subdirname[FILENAME_LENGTH];
438
         strncpy(subdirname, dirname_start, dirname_end - dirname_start);
438
         strncpy(subdirname, dirname_start, dirname_end - dirname_start);
439
         subdirname[dirname_end - dirname_start] = 0;
439
         subdirname[dirname_end - dirname_start] = 0;

+ 14
- 14
Marlin/configuration_store.cpp View File

328
 
328
 
329
   // Report storage size
329
   // Report storage size
330
   SERIAL_ECHO_START;
330
   SERIAL_ECHO_START;
331
-  SERIAL_ECHOPAIR("Settings Stored (", (unsigned long)i);
331
+  SERIAL_ECHOPAIR("Settings Stored (", i);
332
   SERIAL_ECHOLNPGM(" bytes)");
332
   SERIAL_ECHOLNPGM(" bytes)");
333
 }
333
 }
334
 
334
 
507
     // Report settings retrieved and length
507
     // Report settings retrieved and length
508
     SERIAL_ECHO_START;
508
     SERIAL_ECHO_START;
509
     SERIAL_ECHO(ver);
509
     SERIAL_ECHO(ver);
510
-    SERIAL_ECHOPAIR(" stored settings retrieved (", (unsigned long)i);
510
+    SERIAL_ECHOPAIR(" stored settings retrieved (", i);
511
     SERIAL_ECHOLNPGM(" bytes)");
511
     SERIAL_ECHOLNPGM(" bytes)");
512
   }
512
   }
513
 
513
 
730
       SERIAL_ECHOLNPGM("Mesh bed leveling:");
730
       SERIAL_ECHOLNPGM("Mesh bed leveling:");
731
       CONFIG_ECHO_START;
731
       CONFIG_ECHO_START;
732
     }
732
     }
733
-    SERIAL_ECHOPAIR("  M420 S", (unsigned long)mbl.active);
734
-    SERIAL_ECHOPAIR(" X", (unsigned long)MESH_NUM_X_POINTS);
735
-    SERIAL_ECHOPAIR(" Y", (unsigned long)MESH_NUM_Y_POINTS);
733
+    SERIAL_ECHOPAIR("  M420 S", mbl.active);
734
+    SERIAL_ECHOPAIR(" X", MESH_NUM_X_POINTS);
735
+    SERIAL_ECHOPAIR(" Y", MESH_NUM_Y_POINTS);
736
     SERIAL_EOL;
736
     SERIAL_EOL;
737
     for (uint8_t y = 0; y < MESH_NUM_Y_POINTS; y++) {
737
     for (uint8_t y = 0; y < MESH_NUM_Y_POINTS; y++) {
738
       for (uint8_t x = 0; x < MESH_NUM_X_POINTS; x++) {
738
       for (uint8_t x = 0; x < MESH_NUM_X_POINTS; x++) {
783
       SERIAL_ECHOLNPGM("Material heatup parameters:");
783
       SERIAL_ECHOLNPGM("Material heatup parameters:");
784
       CONFIG_ECHO_START;
784
       CONFIG_ECHO_START;
785
     }
785
     }
786
-    SERIAL_ECHOPAIR("  M145 S0 H", (unsigned long)plaPreheatHotendTemp);
787
-    SERIAL_ECHOPAIR(" B", (unsigned long)plaPreheatHPBTemp);
788
-    SERIAL_ECHOPAIR(" F", (unsigned long)plaPreheatFanSpeed);
786
+    SERIAL_ECHOPAIR("  M145 S0 H", plaPreheatHotendTemp);
787
+    SERIAL_ECHOPAIR(" B", plaPreheatHPBTemp);
788
+    SERIAL_ECHOPAIR(" F", plaPreheatFanSpeed);
789
     SERIAL_EOL;
789
     SERIAL_EOL;
790
     CONFIG_ECHO_START;
790
     CONFIG_ECHO_START;
791
-    SERIAL_ECHOPAIR("  M145 S1 H", (unsigned long)absPreheatHotendTemp);
792
-    SERIAL_ECHOPAIR(" B", (unsigned long)absPreheatHPBTemp);
793
-    SERIAL_ECHOPAIR(" F", (unsigned long)absPreheatFanSpeed);
791
+    SERIAL_ECHOPAIR("  M145 S1 H", absPreheatHotendTemp);
792
+    SERIAL_ECHOPAIR(" B", absPreheatHPBTemp);
793
+    SERIAL_ECHOPAIR(" F", absPreheatFanSpeed);
794
     SERIAL_EOL;
794
     SERIAL_EOL;
795
   #endif // ULTIPANEL
795
   #endif // ULTIPANEL
796
 
796
 
805
         if (forReplay) {
805
         if (forReplay) {
806
           for (uint8_t i = 0; i < EXTRUDERS; i++) {
806
           for (uint8_t i = 0; i < EXTRUDERS; i++) {
807
             CONFIG_ECHO_START;
807
             CONFIG_ECHO_START;
808
-            SERIAL_ECHOPAIR("  M301 E", (unsigned long)i);
808
+            SERIAL_ECHOPAIR("  M301 E", i);
809
             SERIAL_ECHOPAIR(" P", PID_PARAM(Kp, i));
809
             SERIAL_ECHOPAIR(" P", PID_PARAM(Kp, i));
810
             SERIAL_ECHOPAIR(" I", unscalePID_i(PID_PARAM(Ki, i)));
810
             SERIAL_ECHOPAIR(" I", unscalePID_i(PID_PARAM(Ki, i)));
811
             SERIAL_ECHOPAIR(" D", unscalePID_d(PID_PARAM(Kd, i)));
811
             SERIAL_ECHOPAIR(" D", unscalePID_d(PID_PARAM(Kd, i)));
848
       SERIAL_ECHOLNPGM("LCD Contrast:");
848
       SERIAL_ECHOLNPGM("LCD Contrast:");
849
       CONFIG_ECHO_START;
849
       CONFIG_ECHO_START;
850
     }
850
     }
851
-    SERIAL_ECHOPAIR("  M250 C", (unsigned long)lcd_contrast);
851
+    SERIAL_ECHOPAIR("  M250 C", lcd_contrast);
852
     SERIAL_EOL;
852
     SERIAL_EOL;
853
   #endif
853
   #endif
854
 
854
 
882
       SERIAL_ECHOLNPGM("Auto-Retract: S=0 to disable, 1 to interpret extrude-only moves as retracts or recoveries");
882
       SERIAL_ECHOLNPGM("Auto-Retract: S=0 to disable, 1 to interpret extrude-only moves as retracts or recoveries");
883
       CONFIG_ECHO_START;
883
       CONFIG_ECHO_START;
884
     }
884
     }
885
-    SERIAL_ECHOPAIR("  M209 S", (unsigned long)(autoretract_enabled ? 1 : 0));
885
+    SERIAL_ECHOPAIR("  M209 S", (autoretract_enabled ? 1 : 0));
886
     SERIAL_EOL;
886
     SERIAL_EOL;
887
 
887
 
888
   #endif // FWRETRACT
888
   #endif // FWRETRACT

+ 3
- 4
Marlin/dogm_lcd_implementation.h View File

334
     }
334
     }
335
 
335
 
336
     u8g.setPrintPos(80,48);
336
     u8g.setPrintPos(80,48);
337
-    if (print_job_start_ms != 0) {
338
-      uint16_t time = (((print_job_stop_ms > print_job_start_ms)
339
-                       ? print_job_stop_ms : millis()) - print_job_start_ms) / 60000;
337
+    uint16_t time = print_job_timer.duration() / 60;
338
+    if (time != 0) {
340
       lcd_print(itostr2(time/60));
339
       lcd_print(itostr2(time/60));
341
       lcd_print(':');
340
       lcd_print(':');
342
       lcd_print(itostr2(time%60));
341
       lcd_print(itostr2(time%60));
599
 
598
 
600
 #endif //SDSUPPORT
599
 #endif //SDSUPPORT
601
 
600
 
602
-#define lcd_implementation_drawmenu_back(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0])
601
+#define lcd_implementation_drawmenu_back(sel, row, pstr) lcd_implementation_drawmenu_generic(sel, row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0])
603
 #define lcd_implementation_drawmenu_submenu(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', LCD_STR_ARROW_RIGHT[0])
602
 #define lcd_implementation_drawmenu_submenu(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', LCD_STR_ARROW_RIGHT[0])
604
 #define lcd_implementation_drawmenu_gcode(sel, row, pstr, gcode) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')
603
 #define lcd_implementation_drawmenu_gcode(sel, row, pstr, gcode) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')
605
 #define lcd_implementation_drawmenu_function(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')
604
 #define lcd_implementation_drawmenu_function(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')

+ 18
- 3
Marlin/example_configurations/Felix/Configuration.h View File

328
 // Enable this option for Toshiba steppers
328
 // Enable this option for Toshiba steppers
329
 //#define CONFIG_STEPPERS_TOSHIBA
329
 //#define CONFIG_STEPPERS_TOSHIBA
330
 
330
 
331
+//===========================================================================
332
+//============================== Endstop Settings ===========================
333
+//===========================================================================
334
+
331
 // @section homing
335
 // @section homing
332
 
336
 
337
+// Specify here all the endstop connectors that are connected to any endstop or probe.
338
+// Almost all printers will be using one per axis. Probes will use one or more of the
339
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
340
+#define USE_XMIN_PLUG
341
+#define USE_YMIN_PLUG
342
+#define USE_ZMIN_PLUG
343
+//#define USE_XMAX_PLUG
344
+//#define USE_YMAX_PLUG
345
+//#define USE_ZMAX_PLUG
346
+
333
 // coarse Endstop Settings
347
 // coarse Endstop Settings
334
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
348
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
335
 
349
 
352
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
366
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
353
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
367
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
354
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
368
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
355
-#define DISABLE_MAX_ENDSTOPS
356
-//#define DISABLE_MIN_ENDSTOPS
357
 
369
 
358
 //===========================================================================
370
 //===========================================================================
359
 //============================= Z Probe Options =============================
371
 //============================= Z Probe Options =============================
692
 // Host Keepalive
704
 // Host Keepalive
693
 //
705
 //
694
 // By default Marlin will send a busy status message to the host
706
 // By default Marlin will send a busy status message to the host
695
-// every 10 seconds when it can't accept commands.
707
+// every couple of seconds when it can't accept commands.
696
 //
708
 //
697
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
709
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
710
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
711
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
712
+#endif
698
 
713
 
699
 //
714
 //
700
 // M100 Free Memory Watcher
715
 // M100 Free Memory Watcher

+ 18
- 3
Marlin/example_configurations/Felix/Configuration_DUAL.h View File

325
 // Enable this option for Toshiba steppers
325
 // Enable this option for Toshiba steppers
326
 //#define CONFIG_STEPPERS_TOSHIBA
326
 //#define CONFIG_STEPPERS_TOSHIBA
327
 
327
 
328
+//===========================================================================
329
+//============================== Endstop Settings ===========================
330
+//===========================================================================
331
+
328
 // @section homing
332
 // @section homing
329
 
333
 
334
+// Specify here all the endstop connectors that are connected to any endstop or probe.
335
+// Almost all printers will be using one per axis. Probes will use one or more of the
336
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
337
+#define USE_XMIN_PLUG
338
+#define USE_YMIN_PLUG
339
+#define USE_ZMIN_PLUG
340
+//#define USE_XMAX_PLUG
341
+//#define USE_YMAX_PLUG
342
+//#define USE_ZMAX_PLUG
343
+
330
 // coarse Endstop Settings
344
 // coarse Endstop Settings
331
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
345
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
332
 
346
 
349
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
363
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
350
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
364
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
351
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
365
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
352
-#define DISABLE_MAX_ENDSTOPS
353
-//#define DISABLE_MIN_ENDSTOPS
354
 
366
 
355
 //===========================================================================
367
 //===========================================================================
356
 //============================= Z Probe Options =============================
368
 //============================= Z Probe Options =============================
689
 // Host Keepalive
701
 // Host Keepalive
690
 //
702
 //
691
 // By default Marlin will send a busy status message to the host
703
 // By default Marlin will send a busy status message to the host
692
-// every 10 seconds when it can't accept commands.
704
+// every couple of seconds when it can't accept commands.
693
 //
705
 //
694
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
706
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
707
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
708
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
709
+#endif
695
 
710
 
696
 //
711
 //
697
 // M100 Free Memory Watcher
712
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/Felix/Configuration_adv.h View File

201
   //#define Z_DUAL_ENDSTOPS
201
   //#define Z_DUAL_ENDSTOPS
202
 
202
 
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207
   #endif
205
   #endif
208
 
206
 
209
 #endif // Z_DUAL_STEPPER_DRIVERS
207
 #endif // Z_DUAL_STEPPER_DRIVERS
655
 
653
 
656
 #endif
654
 #endif
657
 
655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658
 #include "Conditionals.h"
688
 #include "Conditionals.h"
659
 #include "SanityCheck.h"
689
 #include "SanityCheck.h"
660
 
690
 

+ 18
- 3
Marlin/example_configurations/Hephestos/Configuration.h View File

338
 // Enable this option for Toshiba steppers
338
 // Enable this option for Toshiba steppers
339
 //#define CONFIG_STEPPERS_TOSHIBA
339
 //#define CONFIG_STEPPERS_TOSHIBA
340
 
340
 
341
+//===========================================================================
342
+//============================== Endstop Settings ===========================
343
+//===========================================================================
344
+
341
 // @section homing
345
 // @section homing
342
 
346
 
347
+// Specify here all the endstop connectors that are connected to any endstop or probe.
348
+// Almost all printers will be using one per axis. Probes will use one or more of the
349
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
350
+#define USE_XMIN_PLUG
351
+#define USE_YMIN_PLUG
352
+#define USE_ZMIN_PLUG
353
+//#define USE_XMAX_PLUG
354
+//#define USE_YMAX_PLUG
355
+//#define USE_ZMAX_PLUG
356
+
343
 // coarse Endstop Settings
357
 // coarse Endstop Settings
344
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
358
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
345
 
359
 
362
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
376
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
363
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
377
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
364
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
378
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
365
-#define DISABLE_MAX_ENDSTOPS
366
-//#define DISABLE_MIN_ENDSTOPS
367
 
379
 
368
 //===========================================================================
380
 //===========================================================================
369
 //============================= Z Probe Options =============================
381
 //============================= Z Probe Options =============================
701
 // Host Keepalive
713
 // Host Keepalive
702
 //
714
 //
703
 // By default Marlin will send a busy status message to the host
715
 // By default Marlin will send a busy status message to the host
704
-// every 10 seconds when it can't accept commands.
716
+// every couple of seconds when it can't accept commands.
705
 //
717
 //
706
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
718
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
719
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
720
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
721
+#endif
707
 
722
 
708
 //
723
 //
709
 // M100 Free Memory Watcher
724
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/Hephestos/Configuration_adv.h View File

201
   //#define Z_DUAL_ENDSTOPS
201
   //#define Z_DUAL_ENDSTOPS
202
 
202
 
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207
   #endif
205
   #endif
208
 
206
 
209
 #endif // Z_DUAL_STEPPER_DRIVERS
207
 #endif // Z_DUAL_STEPPER_DRIVERS
655
 
653
 
656
 #endif
654
 #endif
657
 
655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658
 #include "Conditionals.h"
688
 #include "Conditionals.h"
659
 #include "SanityCheck.h"
689
 #include "SanityCheck.h"
660
 
690
 

+ 18
- 3
Marlin/example_configurations/Hephestos_2/Configuration.h View File

340
 // Enable this option for Toshiba steppers
340
 // Enable this option for Toshiba steppers
341
 //#define CONFIG_STEPPERS_TOSHIBA
341
 //#define CONFIG_STEPPERS_TOSHIBA
342
 
342
 
343
+//===========================================================================
344
+//============================== Endstop Settings ===========================
345
+//===========================================================================
346
+
343
 // @section homing
347
 // @section homing
344
 
348
 
349
+// Specify here all the endstop connectors that are connected to any endstop or probe.
350
+// Almost all printers will be using one per axis. Probes will use one or more of the
351
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
352
+#define USE_XMIN_PLUG
353
+#define USE_YMIN_PLUG
354
+#define USE_ZMIN_PLUG
355
+//#define USE_XMAX_PLUG
356
+//#define USE_YMAX_PLUG
357
+//#define USE_ZMAX_PLUG
358
+
345
 // coarse Endstop Settings
359
 // coarse Endstop Settings
346
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
360
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
347
 
361
 
364
 const bool Y_MAX_ENDSTOP_INVERTING = true;  // set to true to invert the logic of the endstop.
378
 const bool Y_MAX_ENDSTOP_INVERTING = true;  // set to true to invert the logic of the endstop.
365
 const bool Z_MAX_ENDSTOP_INVERTING = true;  // set to true to invert the logic of the endstop.
379
 const bool Z_MAX_ENDSTOP_INVERTING = true;  // set to true to invert the logic of the endstop.
366
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
380
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
367
-#define DISABLE_MAX_ENDSTOPS
368
-//#define DISABLE_MIN_ENDSTOPS
369
 
381
 
370
 //===========================================================================
382
 //===========================================================================
371
 //============================= Z Probe Options =============================
383
 //============================= Z Probe Options =============================
703
 // Host Keepalive
715
 // Host Keepalive
704
 //
716
 //
705
 // By default Marlin will send a busy status message to the host
717
 // By default Marlin will send a busy status message to the host
706
-// every 10 seconds when it can't accept commands.
718
+// every couple of seconds when it can't accept commands.
707
 //
719
 //
708
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
720
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
721
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
722
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
723
+#endif
709
 
724
 
710
 //
725
 //
711
 // M100 Free Memory Watcher
726
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/Hephestos_2/Configuration_adv.h View File

201
   //#define Z_DUAL_ENDSTOPS
201
   //#define Z_DUAL_ENDSTOPS
202
 
202
 
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207
   #endif
205
   #endif
208
 
206
 
209
 #endif // Z_DUAL_STEPPER_DRIVERS
207
 #endif // Z_DUAL_STEPPER_DRIVERS
655
 
653
 
656
 #endif
654
 #endif
657
 
655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658
 #include "Conditionals.h"
688
 #include "Conditionals.h"
659
 #include "SanityCheck.h"
689
 #include "SanityCheck.h"
660
 
690
 

+ 18
- 3
Marlin/example_configurations/K8200/Configuration.h View File

363
 // Enable this option for Toshiba steppers
363
 // Enable this option for Toshiba steppers
364
 //#define CONFIG_STEPPERS_TOSHIBA
364
 //#define CONFIG_STEPPERS_TOSHIBA
365
 
365
 
366
+//===========================================================================
367
+//============================== Endstop Settings ===========================
368
+//===========================================================================
369
+
366
 // @section homing
370
 // @section homing
367
 
371
 
372
+// Specify here all the endstop connectors that are connected to any endstop or probe.
373
+// Almost all printers will be using one per axis. Probes will use one or more of the
374
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
375
+#define USE_XMIN_PLUG
376
+#define USE_YMIN_PLUG
377
+#define USE_ZMIN_PLUG
378
+//#define USE_XMAX_PLUG
379
+//#define USE_YMAX_PLUG
380
+//#define USE_ZMAX_PLUG
381
+
368
 // coarse Endstop Settings
382
 // coarse Endstop Settings
369
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
383
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
370
 
384
 
387
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
401
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
388
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
402
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
389
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
403
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
390
-#define DISABLE_MAX_ENDSTOPS
391
-//#define DISABLE_MIN_ENDSTOPS
392
 
404
 
393
 //===========================================================================
405
 //===========================================================================
394
 //============================= Z Probe Options =============================
406
 //============================= Z Probe Options =============================
726
 // Host Keepalive
738
 // Host Keepalive
727
 //
739
 //
728
 // By default Marlin will send a busy status message to the host
740
 // By default Marlin will send a busy status message to the host
729
-// every 10 seconds when it can't accept commands.
741
+// every couple of seconds when it can't accept commands.
730
 //
742
 //
731
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
743
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
744
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
745
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
746
+#endif
732
 
747
 
733
 //
748
 //
734
 // M100 Free Memory Watcher
749
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/K8200/Configuration_adv.h View File

207
   //#define Z_DUAL_ENDSTOPS
207
   //#define Z_DUAL_ENDSTOPS
208
 
208
 
209
   #if ENABLED(Z_DUAL_ENDSTOPS)
209
   #if ENABLED(Z_DUAL_ENDSTOPS)
210
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
211
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
212
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
210
+    #define Z2_USE_ENDSTOP _XMAX_
213
   #endif
211
   #endif
214
 
212
 
215
 #endif // Z_DUAL_STEPPER_DRIVERS
213
 #endif // Z_DUAL_STEPPER_DRIVERS
661
 
659
 
662
 #endif
660
 #endif
663
 
661
 
662
+/**
663
+ * TWI/I2C BUS
664
+ *
665
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
666
+ * machines. Enabling this will allow you to send and receive I2C data from slave
667
+ * devices on the bus.
668
+ *
669
+ * ; Example #1
670
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
671
+ * ; It uses multiple M155 commands with one B<base 10> arg
672
+ * M155 A63  ; Target slave address
673
+ * M155 B77  ; M
674
+ * M155 B97  ; a
675
+ * M155 B114 ; r
676
+ * M155 B108 ; l
677
+ * M155 B105 ; i
678
+ * M155 B110 ; n
679
+ * M155 S1   ; Send the current buffer
680
+ *
681
+ * ; Example #2
682
+ * ; Request 6 bytes from slave device with address 0x63
683
+ * M156 A63 B5
684
+ *
685
+ * ; Example #3
686
+ * ; Example serial output of a M156 request
687
+ * echo:i2c-reply: from:63 bytes:5 data:hello
688
+ */
689
+
690
+// @section i2cbus
691
+
692
+//#define EXPERIMENTAL_I2CBUS
693
+
664
 #include "Conditionals.h"
694
 #include "Conditionals.h"
665
 #include "SanityCheck.h"
695
 #include "SanityCheck.h"
666
 
696
 

+ 18
- 3
Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h View File

346
 // Enable this option for Toshiba steppers
346
 // Enable this option for Toshiba steppers
347
 //#define CONFIG_STEPPERS_TOSHIBA
347
 //#define CONFIG_STEPPERS_TOSHIBA
348
 
348
 
349
+//===========================================================================
350
+//============================== Endstop Settings ===========================
351
+//===========================================================================
352
+
349
 // @section homing
353
 // @section homing
350
 
354
 
355
+// Specify here all the endstop connectors that are connected to any endstop or probe.
356
+// Almost all printers will be using one per axis. Probes will use one or more of the
357
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
358
+#define USE_XMIN_PLUG
359
+#define USE_YMIN_PLUG
360
+#define USE_ZMIN_PLUG
361
+//#define USE_XMAX_PLUG
362
+//#define USE_YMAX_PLUG
363
+//#define USE_ZMAX_PLUG
364
+
351
 // coarse Endstop Settings
365
 // coarse Endstop Settings
352
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
366
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
353
 
367
 
370
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
384
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
371
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
385
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
372
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
386
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
373
-//#define DISABLE_MAX_ENDSTOPS
374
-//#define DISABLE_MIN_ENDSTOPS
375
 
387
 
376
 //===========================================================================
388
 //===========================================================================
377
 //============================= Z Probe Options =============================
389
 //============================= Z Probe Options =============================
709
 // Host Keepalive
721
 // Host Keepalive
710
 //
722
 //
711
 // By default Marlin will send a busy status message to the host
723
 // By default Marlin will send a busy status message to the host
712
-// every 10 seconds when it can't accept commands.
724
+// every couple of seconds when it can't accept commands.
713
 //
725
 //
714
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
726
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
727
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
728
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
729
+#endif
715
 
730
 
716
 //
731
 //
717
 // M100 Free Memory Watcher
732
 // M100 Free Memory Watcher

+ 18
- 3
Marlin/example_configurations/RigidBot/Configuration.h View File

340
 // Enable this option for Toshiba steppers
340
 // Enable this option for Toshiba steppers
341
 //#define CONFIG_STEPPERS_TOSHIBA
341
 //#define CONFIG_STEPPERS_TOSHIBA
342
 
342
 
343
+//===========================================================================
344
+//============================== Endstop Settings ===========================
345
+//===========================================================================
346
+
343
 // @section homing
347
 // @section homing
344
 
348
 
349
+// Specify here all the endstop connectors that are connected to any endstop or probe.
350
+// Almost all printers will be using one per axis. Probes will use one or more of the
351
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
352
+#define USE_XMIN_PLUG
353
+#define USE_YMIN_PLUG
354
+#define USE_ZMIN_PLUG
355
+//#define USE_XMAX_PLUG
356
+//#define USE_YMAX_PLUG
357
+//#define USE_ZMAX_PLUG
358
+
345
 // coarse Endstop Settings
359
 // coarse Endstop Settings
346
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
360
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
347
 
361
 
364
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
378
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
365
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
379
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
366
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
380
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
367
-//#define DISABLE_MAX_ENDSTOPS
368
-//#define DISABLE_MIN_ENDSTOPS
369
 
381
 
370
 //===========================================================================
382
 //===========================================================================
371
 //============================= Z Probe Options =============================
383
 //============================= Z Probe Options =============================
704
 // Host Keepalive
716
 // Host Keepalive
705
 //
717
 //
706
 // By default Marlin will send a busy status message to the host
718
 // By default Marlin will send a busy status message to the host
707
-// every 10 seconds when it can't accept commands.
719
+// every couple of seconds when it can't accept commands.
708
 //
720
 //
709
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
721
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
722
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
723
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
724
+#endif
710
 
725
 
711
 //
726
 //
712
 // M100 Free Memory Watcher
727
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/RigidBot/Configuration_adv.h View File

201
   //#define Z_DUAL_ENDSTOPS
201
   //#define Z_DUAL_ENDSTOPS
202
 
202
 
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207
   #endif
205
   #endif
208
 
206
 
209
 #endif // Z_DUAL_STEPPER_DRIVERS
207
 #endif // Z_DUAL_STEPPER_DRIVERS
655
 
653
 
656
 #endif
654
 #endif
657
 
655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658
 #include "Conditionals.h"
688
 #include "Conditionals.h"
659
 #include "SanityCheck.h"
689
 #include "SanityCheck.h"
660
 
690
 

+ 18
- 3
Marlin/example_configurations/SCARA/Configuration.h View File

354
 // Enable this option for Toshiba steppers
354
 // Enable this option for Toshiba steppers
355
 //#define CONFIG_STEPPERS_TOSHIBA
355
 //#define CONFIG_STEPPERS_TOSHIBA
356
 
356
 
357
+//===========================================================================
358
+//============================== Endstop Settings ===========================
359
+//===========================================================================
360
+
357
 // @section homing
361
 // @section homing
358
 
362
 
363
+// Specify here all the endstop connectors that are connected to any endstop or probe.
364
+// Almost all printers will be using one per axis. Probes will use one or more of the
365
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
366
+#define USE_XMIN_PLUG
367
+#define USE_YMIN_PLUG
368
+//#define USE_ZMIN_PLUG
369
+//#define USE_XMAX_PLUG
370
+//#define USE_YMAX_PLUG
371
+#define USE_ZMAX_PLUG
372
+
359
 // coarse Endstop Settings
373
 // coarse Endstop Settings
360
 //#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
374
 //#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
361
 
375
 
378
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
392
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
379
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
393
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
380
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
394
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
381
-//#define DISABLE_MAX_ENDSTOPS
382
-//#define DISABLE_MIN_ENDSTOPS
383
 
395
 
384
 //===========================================================================
396
 //===========================================================================
385
 //============================= Z Probe Options =============================
397
 //============================= Z Probe Options =============================
717
 // Host Keepalive
729
 // Host Keepalive
718
 //
730
 //
719
 // By default Marlin will send a busy status message to the host
731
 // By default Marlin will send a busy status message to the host
720
-// every 10 seconds when it can't accept commands.
732
+// every couple of seconds when it can't accept commands.
721
 //
733
 //
722
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
734
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
735
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
736
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
737
+#endif
723
 
738
 
724
 //
739
 //
725
 // M100 Free Memory Watcher
740
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/SCARA/Configuration_adv.h View File

201
   //#define Z_DUAL_ENDSTOPS
201
   //#define Z_DUAL_ENDSTOPS
202
 
202
 
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207
   #endif
205
   #endif
208
 
206
 
209
 #endif // Z_DUAL_STEPPER_DRIVERS
207
 #endif // Z_DUAL_STEPPER_DRIVERS
655
 
653
 
656
 #endif
654
 #endif
657
 
655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658
 #include "Conditionals.h"
688
 #include "Conditionals.h"
659
 #include "SanityCheck.h"
689
 #include "SanityCheck.h"
660
 
690
 

+ 18
- 3
Marlin/example_configurations/TAZ4/Configuration.h View File

367
 // Enable this option for Toshiba steppers
367
 // Enable this option for Toshiba steppers
368
 //#define CONFIG_STEPPERS_TOSHIBA
368
 //#define CONFIG_STEPPERS_TOSHIBA
369
 
369
 
370
+//===========================================================================
371
+//============================== Endstop Settings ===========================
372
+//===========================================================================
373
+
370
 // @section homing
374
 // @section homing
371
 
375
 
376
+// Specify here all the endstop connectors that are connected to any endstop or probe.
377
+// Almost all printers will be using one per axis. Probes will use one or more of the
378
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
379
+#define USE_XMIN_PLUG
380
+#define USE_YMIN_PLUG
381
+#define USE_ZMIN_PLUG
382
+//#define USE_XMAX_PLUG
383
+//#define USE_YMAX_PLUG
384
+//#define USE_ZMAX_PLUG
385
+
372
 // coarse Endstop Settings
386
 // coarse Endstop Settings
373
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
387
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
374
 
388
 
391
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
405
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
392
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
406
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
393
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
407
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
394
-#define DISABLE_MAX_ENDSTOPS
395
-//#define DISABLE_MIN_ENDSTOPS
396
 
408
 
397
 //===========================================================================
409
 //===========================================================================
398
 //============================= Z Probe Options =============================
410
 //============================= Z Probe Options =============================
730
 // Host Keepalive
742
 // Host Keepalive
731
 //
743
 //
732
 // By default Marlin will send a busy status message to the host
744
 // By default Marlin will send a busy status message to the host
733
-// every 10 seconds when it can't accept commands.
745
+// every couple of seconds when it can't accept commands.
734
 //
746
 //
735
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
747
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
748
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
749
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
750
+#endif
736
 
751
 
737
 //
752
 //
738
 // M100 Free Memory Watcher
753
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/TAZ4/Configuration_adv.h View File

209
   //#define Z_DUAL_ENDSTOPS
209
   //#define Z_DUAL_ENDSTOPS
210
 
210
 
211
   #if ENABLED(Z_DUAL_ENDSTOPS)
211
   #if ENABLED(Z_DUAL_ENDSTOPS)
212
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
213
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
214
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
212
+    #define Z2_USE_ENDSTOP _XMAX_
215
   #endif
213
   #endif
216
 
214
 
217
 #endif // Z_DUAL_STEPPER_DRIVERS
215
 #endif // Z_DUAL_STEPPER_DRIVERS
663
 
661
 
664
 #endif
662
 #endif
665
 
663
 
664
+/**
665
+ * TWI/I2C BUS
666
+ *
667
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
668
+ * machines. Enabling this will allow you to send and receive I2C data from slave
669
+ * devices on the bus.
670
+ *
671
+ * ; Example #1
672
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
673
+ * ; It uses multiple M155 commands with one B<base 10> arg
674
+ * M155 A63  ; Target slave address
675
+ * M155 B77  ; M
676
+ * M155 B97  ; a
677
+ * M155 B114 ; r
678
+ * M155 B108 ; l
679
+ * M155 B105 ; i
680
+ * M155 B110 ; n
681
+ * M155 S1   ; Send the current buffer
682
+ *
683
+ * ; Example #2
684
+ * ; Request 6 bytes from slave device with address 0x63
685
+ * M156 A63 B5
686
+ *
687
+ * ; Example #3
688
+ * ; Example serial output of a M156 request
689
+ * echo:i2c-reply: from:63 bytes:5 data:hello
690
+ */
691
+
692
+// @section i2cbus
693
+
694
+//#define EXPERIMENTAL_I2CBUS
695
+
666
 #include "Conditionals.h"
696
 #include "Conditionals.h"
667
 #include "SanityCheck.h"
697
 #include "SanityCheck.h"
668
 
698
 

+ 18
- 3
Marlin/example_configurations/WITBOX/Configuration.h View File

338
 // Enable this option for Toshiba steppers
338
 // Enable this option for Toshiba steppers
339
 //#define CONFIG_STEPPERS_TOSHIBA
339
 //#define CONFIG_STEPPERS_TOSHIBA
340
 
340
 
341
+//===========================================================================
342
+//============================== Endstop Settings ===========================
343
+//===========================================================================
344
+
341
 // @section homing
345
 // @section homing
342
 
346
 
347
+// Specify here all the endstop connectors that are connected to any endstop or probe.
348
+// Almost all printers will be using one per axis. Probes will use one or more of the
349
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
350
+#define USE_XMIN_PLUG
351
+#define USE_YMIN_PLUG
352
+#define USE_ZMIN_PLUG
353
+//#define USE_XMAX_PLUG
354
+//#define USE_YMAX_PLUG
355
+//#define USE_ZMAX_PLUG
356
+
343
 // coarse Endstop Settings
357
 // coarse Endstop Settings
344
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
358
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
345
 
359
 
362
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
376
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
363
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
377
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
364
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
378
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
365
-//#define DISABLE_MAX_ENDSTOPS
366
-//#define DISABLE_MIN_ENDSTOPS
367
 
379
 
368
 //===========================================================================
380
 //===========================================================================
369
 //============================= Z Probe Options =============================
381
 //============================= Z Probe Options =============================
701
 // Host Keepalive
713
 // Host Keepalive
702
 //
714
 //
703
 // By default Marlin will send a busy status message to the host
715
 // By default Marlin will send a busy status message to the host
704
-// every 10 seconds when it can't accept commands.
716
+// every couple of seconds when it can't accept commands.
705
 //
717
 //
706
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
718
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
719
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
720
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
721
+#endif
707
 
722
 
708
 //
723
 //
709
 // M100 Free Memory Watcher
724
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/WITBOX/Configuration_adv.h View File

201
   //#define Z_DUAL_ENDSTOPS
201
   //#define Z_DUAL_ENDSTOPS
202
 
202
 
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207
   #endif
205
   #endif
208
 
206
 
209
 #endif // Z_DUAL_STEPPER_DRIVERS
207
 #endif // Z_DUAL_STEPPER_DRIVERS
655
 
653
 
656
 #endif
654
 #endif
657
 
655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658
 #include "Conditionals.h"
688
 #include "Conditionals.h"
659
 #include "SanityCheck.h"
689
 #include "SanityCheck.h"
660
 
690
 

+ 18
- 3
Marlin/example_configurations/adafruit/ST7565/Configuration.h View File

346
 // Enable this option for Toshiba steppers
346
 // Enable this option for Toshiba steppers
347
 //#define CONFIG_STEPPERS_TOSHIBA
347
 //#define CONFIG_STEPPERS_TOSHIBA
348
 
348
 
349
+//===========================================================================
350
+//============================== Endstop Settings ===========================
351
+//===========================================================================
352
+
349
 // @section homing
353
 // @section homing
350
 
354
 
355
+// Specify here all the endstop connectors that are connected to any endstop or probe.
356
+// Almost all printers will be using one per axis. Probes will use one or more of the
357
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
358
+#define USE_XMIN_PLUG
359
+#define USE_YMIN_PLUG
360
+#define USE_ZMIN_PLUG
361
+//#define USE_XMAX_PLUG
362
+//#define USE_YMAX_PLUG
363
+//#define USE_ZMAX_PLUG
364
+
351
 // coarse Endstop Settings
365
 // coarse Endstop Settings
352
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
366
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
353
 
367
 
370
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
384
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
371
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
385
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
372
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
386
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
373
-//#define DISABLE_MAX_ENDSTOPS
374
-//#define DISABLE_MIN_ENDSTOPS
375
 
387
 
376
 //===========================================================================
388
 //===========================================================================
377
 //============================= Z Probe Options =============================
389
 //============================= Z Probe Options =============================
709
 // Host Keepalive
721
 // Host Keepalive
710
 //
722
 //
711
 // By default Marlin will send a busy status message to the host
723
 // By default Marlin will send a busy status message to the host
712
-// every 10 seconds when it can't accept commands.
724
+// every couple of seconds when it can't accept commands.
713
 //
725
 //
714
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
726
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
727
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
728
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
729
+#endif
715
 
730
 
716
 //
731
 //
717
 // M100 Free Memory Watcher
732
 // M100 Free Memory Watcher

+ 18
- 3
Marlin/example_configurations/delta/biv2.5/Configuration.h View File

381
 // Enable this option for Toshiba steppers
381
 // Enable this option for Toshiba steppers
382
 //#define CONFIG_STEPPERS_TOSHIBA
382
 //#define CONFIG_STEPPERS_TOSHIBA
383
 
383
 
384
+//===========================================================================
385
+//============================== Endstop Settings ===========================
386
+//===========================================================================
387
+
384
 // @section homing
388
 // @section homing
385
 
389
 
390
+// Specify here all the endstop connectors that are connected to any endstop or probe.
391
+// Almost all printers will be using one per axis. Probes will use one or more of the
392
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
393
+//#define USE_XMIN_PLUG
394
+//#define USE_YMIN_PLUG
395
+//#define USE_ZMIN_PLUG
396
+#define USE_XMAX_PLUG
397
+#define USE_YMAX_PLUG
398
+#define USE_ZMAX_PLUG
399
+
386
 // coarse Endstop Settings
400
 // coarse Endstop Settings
387
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
401
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
388
 
402
 
405
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
419
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
406
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
420
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
407
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
421
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
408
-//#define DISABLE_MAX_ENDSTOPS
409
-#define DISABLE_MIN_ENDSTOPS // Deltas only use min endstops for probing.
410
 
422
 
411
 //===========================================================================
423
 //===========================================================================
412
 //============================= Z Probe Options =============================
424
 //============================= Z Probe Options =============================
831
 // Host Keepalive
843
 // Host Keepalive
832
 //
844
 //
833
 // By default Marlin will send a busy status message to the host
845
 // By default Marlin will send a busy status message to the host
834
-// every 10 seconds when it can't accept commands.
846
+// every couple of seconds when it can't accept commands.
835
 //
847
 //
836
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
848
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
849
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
850
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
851
+#endif
837
 
852
 
838
 //
853
 //
839
 // M100 Free Memory Watcher
854
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/delta/biv2.5/Configuration_adv.h View File

201
   //#define Z_DUAL_ENDSTOPS
201
   //#define Z_DUAL_ENDSTOPS
202
 
202
 
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207
   #endif
205
   #endif
208
 
206
 
209
 #endif // Z_DUAL_STEPPER_DRIVERS
207
 #endif // Z_DUAL_STEPPER_DRIVERS
657
 
655
 
658
 #endif
656
 #endif
659
 
657
 
658
+/**
659
+ * TWI/I2C BUS
660
+ *
661
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
662
+ * machines. Enabling this will allow you to send and receive I2C data from slave
663
+ * devices on the bus.
664
+ *
665
+ * ; Example #1
666
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
667
+ * ; It uses multiple M155 commands with one B<base 10> arg
668
+ * M155 A63  ; Target slave address
669
+ * M155 B77  ; M
670
+ * M155 B97  ; a
671
+ * M155 B114 ; r
672
+ * M155 B108 ; l
673
+ * M155 B105 ; i
674
+ * M155 B110 ; n
675
+ * M155 S1   ; Send the current buffer
676
+ *
677
+ * ; Example #2
678
+ * ; Request 6 bytes from slave device with address 0x63
679
+ * M156 A63 B5
680
+ *
681
+ * ; Example #3
682
+ * ; Example serial output of a M156 request
683
+ * echo:i2c-reply: from:63 bytes:5 data:hello
684
+ */
685
+
686
+// @section i2cbus
687
+
688
+//#define EXPERIMENTAL_I2CBUS
689
+
660
 #include "Conditionals.h"
690
 #include "Conditionals.h"
661
 #include "SanityCheck.h"
691
 #include "SanityCheck.h"
662
 
692
 

+ 18
- 3
Marlin/example_configurations/delta/generic/Configuration.h View File

381
 // Enable this option for Toshiba steppers
381
 // Enable this option for Toshiba steppers
382
 //#define CONFIG_STEPPERS_TOSHIBA
382
 //#define CONFIG_STEPPERS_TOSHIBA
383
 
383
 
384
+//===========================================================================
385
+//============================== Endstop Settings ===========================
386
+//===========================================================================
387
+
384
 // @section homing
388
 // @section homing
385
 
389
 
390
+// Specify here all the endstop connectors that are connected to any endstop or probe.
391
+// Almost all printers will be using one per axis. Probes will use one or more of the
392
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
393
+//#define USE_XMIN_PLUG
394
+//#define USE_YMIN_PLUG
395
+#define USE_ZMIN_PLUG // a Z probe
396
+#define USE_XMAX_PLUG
397
+#define USE_YMAX_PLUG
398
+#define USE_ZMAX_PLUG
399
+
386
 // coarse Endstop Settings
400
 // coarse Endstop Settings
387
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
401
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
388
 
402
 
405
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
419
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
406
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
420
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
407
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
421
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
408
-//#define DISABLE_MAX_ENDSTOPS
409
-#define DISABLE_MIN_ENDSTOPS // Deltas only use min endstops for probing.
410
 
422
 
411
 //===========================================================================
423
 //===========================================================================
412
 //============================= Z Probe Options =============================
424
 //============================= Z Probe Options =============================
831
 // Host Keepalive
843
 // Host Keepalive
832
 //
844
 //
833
 // By default Marlin will send a busy status message to the host
845
 // By default Marlin will send a busy status message to the host
834
-// every 10 seconds when it can't accept commands.
846
+// every couple of seconds when it can't accept commands.
835
 //
847
 //
836
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
848
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
849
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
850
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
851
+#endif
837
 
852
 
838
 //
853
 //
839
 // M100 Free Memory Watcher
854
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/delta/generic/Configuration_adv.h View File

201
   //#define Z_DUAL_ENDSTOPS
201
   //#define Z_DUAL_ENDSTOPS
202
 
202
 
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207
   #endif
205
   #endif
208
 
206
 
209
 #endif // Z_DUAL_STEPPER_DRIVERS
207
 #endif // Z_DUAL_STEPPER_DRIVERS
657
 
655
 
658
 #endif
656
 #endif
659
 
657
 
658
+/**
659
+ * TWI/I2C BUS
660
+ *
661
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
662
+ * machines. Enabling this will allow you to send and receive I2C data from slave
663
+ * devices on the bus.
664
+ *
665
+ * ; Example #1
666
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
667
+ * ; It uses multiple M155 commands with one B<base 10> arg
668
+ * M155 A63  ; Target slave address
669
+ * M155 B77  ; M
670
+ * M155 B97  ; a
671
+ * M155 B114 ; r
672
+ * M155 B108 ; l
673
+ * M155 B105 ; i
674
+ * M155 B110 ; n
675
+ * M155 S1   ; Send the current buffer
676
+ *
677
+ * ; Example #2
678
+ * ; Request 6 bytes from slave device with address 0x63
679
+ * M156 A63 B5
680
+ *
681
+ * ; Example #3
682
+ * ; Example serial output of a M156 request
683
+ * echo:i2c-reply: from:63 bytes:5 data:hello
684
+ */
685
+
686
+// @section i2cbus
687
+
688
+//#define EXPERIMENTAL_I2CBUS
689
+
660
 #include "Conditionals.h"
690
 #include "Conditionals.h"
661
 #include "SanityCheck.h"
691
 #include "SanityCheck.h"
662
 
692
 

+ 18
- 3
Marlin/example_configurations/delta/kossel_mini/Configuration.h View File

381
 // Enable this option for Toshiba steppers
381
 // Enable this option for Toshiba steppers
382
 //#define CONFIG_STEPPERS_TOSHIBA
382
 //#define CONFIG_STEPPERS_TOSHIBA
383
 
383
 
384
+//===========================================================================
385
+//============================== Endstop Settings ===========================
386
+//===========================================================================
387
+
384
 // @section homing
388
 // @section homing
385
 
389
 
390
+// Specify here all the endstop connectors that are connected to any endstop or probe.
391
+// Almost all printers will be using one per axis. Probes will use one or more of the
392
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
393
+//#define USE_XMIN_PLUG
394
+//#define USE_YMIN_PLUG
395
+//#define USE_ZMIN_PLUG
396
+#define USE_XMAX_PLUG
397
+#define USE_YMAX_PLUG
398
+#define USE_ZMAX_PLUG
399
+
386
 // coarse Endstop Settings
400
 // coarse Endstop Settings
387
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
401
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
388
 
402
 
405
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
419
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
406
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
420
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
407
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
421
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
408
-//#define DISABLE_MAX_ENDSTOPS
409
-//#define DISABLE_MIN_ENDSTOPS // Deltas only use min endstops for probing.
410
 
422
 
411
 //===========================================================================
423
 //===========================================================================
412
 //============================= Z Probe Options =============================
424
 //============================= Z Probe Options =============================
835
 // Host Keepalive
847
 // Host Keepalive
836
 //
848
 //
837
 // By default Marlin will send a busy status message to the host
849
 // By default Marlin will send a busy status message to the host
838
-// every 10 seconds when it can't accept commands.
850
+// every couple of seconds when it can't accept commands.
839
 //
851
 //
840
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
852
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
853
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
854
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
855
+#endif
841
 
856
 
842
 //
857
 //
843
 // M100 Free Memory Watcher
858
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h View File

201
   //#define Z_DUAL_ENDSTOPS
201
   //#define Z_DUAL_ENDSTOPS
202
 
202
 
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207
   #endif
205
   #endif
208
 
206
 
209
 #endif // Z_DUAL_STEPPER_DRIVERS
207
 #endif // Z_DUAL_STEPPER_DRIVERS
656
 
654
 
657
 #endif
655
 #endif
658
 
656
 
657
+/**
658
+ * TWI/I2C BUS
659
+ *
660
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
661
+ * machines. Enabling this will allow you to send and receive I2C data from slave
662
+ * devices on the bus.
663
+ *
664
+ * ; Example #1
665
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
666
+ * ; It uses multiple M155 commands with one B<base 10> arg
667
+ * M155 A63  ; Target slave address
668
+ * M155 B77  ; M
669
+ * M155 B97  ; a
670
+ * M155 B114 ; r
671
+ * M155 B108 ; l
672
+ * M155 B105 ; i
673
+ * M155 B110 ; n
674
+ * M155 S1   ; Send the current buffer
675
+ *
676
+ * ; Example #2
677
+ * ; Request 6 bytes from slave device with address 0x63
678
+ * M156 A63 B5
679
+ *
680
+ * ; Example #3
681
+ * ; Example serial output of a M156 request
682
+ * echo:i2c-reply: from:63 bytes:5 data:hello
683
+ */
684
+
685
+// @section i2cbus
686
+
687
+//#define EXPERIMENTAL_I2CBUS
688
+
659
 #include "Conditionals.h"
689
 #include "Conditionals.h"
660
 #include "SanityCheck.h"
690
 #include "SanityCheck.h"
661
 
691
 

+ 18
- 3
Marlin/example_configurations/delta/kossel_pro/Configuration.h View File

370
 // Enable this option for Toshiba steppers
370
 // Enable this option for Toshiba steppers
371
 //#define CONFIG_STEPPERS_TOSHIBA
371
 //#define CONFIG_STEPPERS_TOSHIBA
372
 
372
 
373
+//===========================================================================
374
+//============================== Endstop Settings ===========================
375
+//===========================================================================
376
+
373
 // @section homing
377
 // @section homing
374
 
378
 
379
+// Specify here all the endstop connectors that are connected to any endstop or probe.
380
+// Almost all printers will be using one per axis. Probes will use one or more of the
381
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
382
+//#define USE_XMIN_PLUG
383
+//#define USE_YMIN_PLUG
384
+#define USE_ZMIN_PLUG // a Z probe
385
+#define USE_XMAX_PLUG
386
+#define USE_YMAX_PLUG
387
+#define USE_ZMAX_PLUG
388
+
375
 // coarse Endstop Settings
389
 // coarse Endstop Settings
376
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
390
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
377
 
391
 
394
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
408
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
395
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
409
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
396
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
410
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
397
-//#define DISABLE_MAX_ENDSTOPS
398
-//#define DISABLE_MIN_ENDSTOPS // Deltas only use min endstops for probing.
399
 
411
 
400
 //===========================================================================
412
 //===========================================================================
401
 //============================= Z Probe Options =============================
413
 //============================= Z Probe Options =============================
828
 // Host Keepalive
840
 // Host Keepalive
829
 //
841
 //
830
 // By default Marlin will send a busy status message to the host
842
 // By default Marlin will send a busy status message to the host
831
-// every 10 seconds when it can't accept commands.
843
+// every couple of seconds when it can't accept commands.
832
 //
844
 //
833
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
845
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
846
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
847
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
848
+#endif
834
 
849
 
835
 //
850
 //
836
 // M100 Free Memory Watcher
851
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h View File

206
   //#define Z_DUAL_ENDSTOPS
206
   //#define Z_DUAL_ENDSTOPS
207
 
207
 
208
   #if ENABLED(Z_DUAL_ENDSTOPS)
208
   #if ENABLED(Z_DUAL_ENDSTOPS)
209
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
210
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
211
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
209
+    #define Z2_USE_ENDSTOP _XMAX_
212
   #endif
210
   #endif
213
 
211
 
214
 #endif // Z_DUAL_STEPPER_DRIVERS
212
 #endif // Z_DUAL_STEPPER_DRIVERS
661
 
659
 
662
 #endif
660
 #endif
663
 
661
 
662
+/**
663
+ * TWI/I2C BUS
664
+ *
665
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
666
+ * machines. Enabling this will allow you to send and receive I2C data from slave
667
+ * devices on the bus.
668
+ *
669
+ * ; Example #1
670
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
671
+ * ; It uses multiple M155 commands with one B<base 10> arg
672
+ * M155 A63  ; Target slave address
673
+ * M155 B77  ; M
674
+ * M155 B97  ; a
675
+ * M155 B114 ; r
676
+ * M155 B108 ; l
677
+ * M155 B105 ; i
678
+ * M155 B110 ; n
679
+ * M155 S1   ; Send the current buffer
680
+ *
681
+ * ; Example #2
682
+ * ; Request 6 bytes from slave device with address 0x63
683
+ * M156 A63 B5
684
+ *
685
+ * ; Example #3
686
+ * ; Example serial output of a M156 request
687
+ * echo:i2c-reply: from:63 bytes:5 data:hello
688
+ */
689
+
690
+// @section i2cbus
691
+
692
+//#define EXPERIMENTAL_I2CBUS
693
+
664
 #include "Conditionals.h"
694
 #include "Conditionals.h"
665
 #include "SanityCheck.h"
695
 #include "SanityCheck.h"
666
 
696
 

+ 18
- 3
Marlin/example_configurations/delta/kossel_xl/Configuration.h View File

374
 // Enable this option for Toshiba steppers
374
 // Enable this option for Toshiba steppers
375
 //#define CONFIG_STEPPERS_TOSHIBA
375
 //#define CONFIG_STEPPERS_TOSHIBA
376
 
376
 
377
+//===========================================================================
378
+//============================== Endstop Settings ===========================
379
+//===========================================================================
380
+
377
 // @section homing
381
 // @section homing
378
 
382
 
383
+// Specify here all the endstop connectors that are connected to any endstop or probe.
384
+// Almost all printers will be using one per axis. Probes will use one or more of the
385
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
386
+//#define USE_XMIN_PLUG
387
+//#define USE_YMIN_PLUG
388
+#define USE_ZMIN_PLUG // a Z probe
389
+#define USE_XMAX_PLUG
390
+#define USE_YMAX_PLUG
391
+#define USE_ZMAX_PLUG
392
+
379
 // coarse Endstop Settings
393
 // coarse Endstop Settings
380
 //#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
394
 //#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
381
 
395
 
398
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
412
 const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
399
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
413
 const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
400
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
414
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
401
-//#define DISABLE_MAX_ENDSTOPS
402
-//#define DISABLE_MIN_ENDSTOPS
403
 
415
 
404
 //===========================================================================
416
 //===========================================================================
405
 //============================= Z Probe Options =============================
417
 //============================= Z Probe Options =============================
745
 // Host Keepalive
757
 // Host Keepalive
746
 //
758
 //
747
 // By default Marlin will send a busy status message to the host
759
 // By default Marlin will send a busy status message to the host
748
-// every 10 seconds when it can't accept commands.
760
+// every couple of seconds when it can't accept commands.
749
 //
761
 //
750
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
762
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
763
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
764
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
765
+#endif
751
 
766
 
752
 //
767
 //
753
 // M100 Free Memory Watcher
768
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h View File

201
   //#define Z_DUAL_ENDSTOPS
201
   //#define Z_DUAL_ENDSTOPS
202
 
202
 
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207
   #endif
205
   #endif
208
 
206
 
209
 #endif // Z_DUAL_STEPPER_DRIVERS
207
 #endif // Z_DUAL_STEPPER_DRIVERS
655
 
653
 
656
 #endif
654
 #endif
657
 
655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658
 #include "Conditionals.h"
688
 #include "Conditionals.h"
659
 #include "SanityCheck.h"
689
 #include "SanityCheck.h"
660
 
690
 

+ 18
- 3
Marlin/example_configurations/makibox/Configuration.h View File

349
 // Enable this option for Toshiba steppers
349
 // Enable this option for Toshiba steppers
350
 //#define CONFIG_STEPPERS_TOSHIBA
350
 //#define CONFIG_STEPPERS_TOSHIBA
351
 
351
 
352
+//===========================================================================
353
+//============================== Endstop Settings ===========================
354
+//===========================================================================
355
+
352
 // @section homing
356
 // @section homing
353
 
357
 
358
+// Specify here all the endstop connectors that are connected to any endstop or probe.
359
+// Almost all printers will be using one per axis. Probes will use one or more of the
360
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
361
+#define USE_XMIN_PLUG
362
+#define USE_YMIN_PLUG
363
+#define USE_ZMIN_PLUG
364
+//#define USE_XMAX_PLUG
365
+//#define USE_YMAX_PLUG
366
+//#define USE_ZMAX_PLUG
367
+
354
 // coarse Endstop Settings
368
 // coarse Endstop Settings
355
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
369
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
356
 
370
 
373
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
387
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
374
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
388
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
375
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
389
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
376
-//#define DISABLE_MAX_ENDSTOPS
377
-//#define DISABLE_MIN_ENDSTOPS
378
 
390
 
379
 //===========================================================================
391
 //===========================================================================
380
 //============================= Z Probe Options =============================
392
 //============================= Z Probe Options =============================
712
 // Host Keepalive
724
 // Host Keepalive
713
 //
725
 //
714
 // By default Marlin will send a busy status message to the host
726
 // By default Marlin will send a busy status message to the host
715
-// every 10 seconds when it can't accept commands.
727
+// every couple of seconds when it can't accept commands.
716
 //
728
 //
717
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
729
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
730
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
731
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
732
+#endif
718
 
733
 
719
 //
734
 //
720
 // M100 Free Memory Watcher
735
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/makibox/Configuration_adv.h View File

201
   //#define Z_DUAL_ENDSTOPS
201
   //#define Z_DUAL_ENDSTOPS
202
 
202
 
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207
   #endif
205
   #endif
208
 
206
 
209
 #endif // Z_DUAL_STEPPER_DRIVERS
207
 #endif // Z_DUAL_STEPPER_DRIVERS
655
 
653
 
656
 #endif
654
 #endif
657
 
655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658
 #include "Conditionals.h"
688
 #include "Conditionals.h"
659
 #include "SanityCheck.h"
689
 #include "SanityCheck.h"
660
 
690
 

+ 18
- 3
Marlin/example_configurations/tvrrug/Round2/Configuration.h View File

336
 // Enable this option for Toshiba steppers
336
 // Enable this option for Toshiba steppers
337
 #define CONFIG_STEPPERS_TOSHIBA
337
 #define CONFIG_STEPPERS_TOSHIBA
338
 
338
 
339
+//===========================================================================
340
+//============================== Endstop Settings ===========================
341
+//===========================================================================
342
+
339
 // @section homing
343
 // @section homing
340
 
344
 
345
+// Specify here all the endstop connectors that are connected to any endstop or probe.
346
+// Almost all printers will be using one per axis. Probes will use one or more of the
347
+// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
348
+#define USE_XMIN_PLUG
349
+#define USE_YMIN_PLUG
350
+#define USE_ZMIN_PLUG
351
+//#define USE_XMAX_PLUG
352
+//#define USE_YMAX_PLUG
353
+//#define USE_ZMAX_PLUG
354
+
341
 // coarse Endstop Settings
355
 // coarse Endstop Settings
342
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
356
 #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
343
 
357
 
360
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
374
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
361
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
375
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
362
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
376
 const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
363
-//#define DISABLE_MAX_ENDSTOPS
364
-//#define DISABLE_MIN_ENDSTOPS
365
 
377
 
366
 //===========================================================================
378
 //===========================================================================
367
 //============================= Z Probe Options =============================
379
 //============================= Z Probe Options =============================
703
 // Host Keepalive
715
 // Host Keepalive
704
 //
716
 //
705
 // By default Marlin will send a busy status message to the host
717
 // By default Marlin will send a busy status message to the host
706
-// every 10 seconds when it can't accept commands.
718
+// every couple of seconds when it can't accept commands.
707
 //
719
 //
708
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
720
 //#define DISABLE_HOST_KEEPALIVE // Enable this option if your host doesn't like keepalive messages.
721
+#if DISABLED(DISABLE_HOST_KEEPALIVE)
722
+  #define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between "busy" messages. Set with M113.
723
+#endif
709
 
724
 
710
 //
725
 //
711
 // M100 Free Memory Watcher
726
 // M100 Free Memory Watcher

+ 33
- 3
Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h View File

201
   //#define Z_DUAL_ENDSTOPS
201
   //#define Z_DUAL_ENDSTOPS
202
 
202
 
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
203
   #if ENABLED(Z_DUAL_ENDSTOPS)
204
-    #define Z2_MAX_PIN 36                     //Endstop used for Z2 axis. In this case I'm using XMAX in a Rumba Board (pin 36)
205
-    const bool Z2_MAX_ENDSTOP_INVERTING = false;
206
-    #define DISABLE_XMAX_ENDSTOP              //Better to disable the XMAX to avoid conflict. Just rename "XMAX_ENDSTOP" by the endstop you are using for Z2 axis.
204
+    #define Z2_USE_ENDSTOP _XMAX_
207
   #endif
205
   #endif
208
 
206
 
209
 #endif // Z_DUAL_STEPPER_DRIVERS
207
 #endif // Z_DUAL_STEPPER_DRIVERS
655
 
653
 
656
 #endif
654
 #endif
657
 
655
 
656
+/**
657
+ * TWI/I2C BUS
658
+ *
659
+ * This feature is an EXPERIMENTAL feature so it shall not be used on production
660
+ * machines. Enabling this will allow you to send and receive I2C data from slave
661
+ * devices on the bus.
662
+ *
663
+ * ; Example #1
664
+ * ; This macro send the string "Marlin" to the slave device with address 0x63
665
+ * ; It uses multiple M155 commands with one B<base 10> arg
666
+ * M155 A63  ; Target slave address
667
+ * M155 B77  ; M
668
+ * M155 B97  ; a
669
+ * M155 B114 ; r
670
+ * M155 B108 ; l
671
+ * M155 B105 ; i
672
+ * M155 B110 ; n
673
+ * M155 S1   ; Send the current buffer
674
+ *
675
+ * ; Example #2
676
+ * ; Request 6 bytes from slave device with address 0x63
677
+ * M156 A63 B5
678
+ *
679
+ * ; Example #3
680
+ * ; Example serial output of a M156 request
681
+ * echo:i2c-reply: from:63 bytes:5 data:hello
682
+ */
683
+
684
+// @section i2cbus
685
+
686
+//#define EXPERIMENTAL_I2CBUS
687
+
658
 #include "Conditionals.h"
688
 #include "Conditionals.h"
659
 #include "SanityCheck.h"
689
 #include "SanityCheck.h"
660
 
690
 

+ 0
- 3
Marlin/fonts/README.fonts View File

21
     #else // fall-back
21
     #else // fall-back
22
  * Add your font to the list of permitted fonts in 'language_en.h'
22
  * Add your font to the list of permitted fonts in 'language_en.h'
23
     ... || ENABLED(DISPLAY_CHARSET_YOUR_NEW_FONT) ... )
23
     ... || ENABLED(DISPLAY_CHARSET_YOUR_NEW_FONT) ... )
24
-
25
-
26
-Especially the Kana font should be revised by someone who knows what he/she does. I am only a west-European with very little knowledge about this script.

+ 7
- 1
Marlin/language.h View File

82
 #endif
82
 #endif
83
 
83
 
84
 #ifndef DEFAULT_SOURCE_URL
84
 #ifndef DEFAULT_SOURCE_URL
85
+  /**
86
+   * The SOURCE_CODE_URL is the location where users will find the Marlin Source
87
+   * Code which is installed on the device. In most cases —unless the manufacturer
88
+   * has a distinct Github fork— the Source Code URL should just be the main
89
+   * Marlin repository.
90
+   */
85
   #define DEFAULT_SOURCE_URL "https://github.com/MarlinFirmware/Marlin"
91
   #define DEFAULT_SOURCE_URL "https://github.com/MarlinFirmware/Marlin"
86
 #endif
92
 #endif
87
 
93
 
225
 #define MSG_T_MINTEMP                       "MINTEMP triggered"
231
 #define MSG_T_MINTEMP                       "MINTEMP triggered"
226
 
232
 
227
 // Debug
233
 // Debug
228
-#define MSG_DEBUG_PREFIX                    "DEBUG: "
234
+#define MSG_DEBUG_PREFIX                    "DEBUG:"
229
 #define MSG_DEBUG_OFF                       "off"
235
 #define MSG_DEBUG_OFF                       "off"
230
 #define MSG_DEBUG_ECHO                      "ECHO"
236
 #define MSG_DEBUG_ECHO                      "ECHO"
231
 #define MSG_DEBUG_INFO                      "INFO"
237
 #define MSG_DEBUG_INFO                      "INFO"

+ 1
- 0
Marlin/language_an.h View File

45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48
 #define MSG_SET_HOME_OFFSETS                "Set home offsets"
49
 #define MSG_SET_HOME_OFFSETS                "Set home offsets"
49
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_SET_ORIGIN                      "Establir zero"
51
 #define MSG_SET_ORIGIN                      "Establir zero"

+ 1
- 0
Marlin/language_bg.h View File

45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48
 #define MSG_SET_HOME_OFFSETS                "Задай Начало"
49
 #define MSG_SET_HOME_OFFSETS                "Задай Начало"
49
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_SET_ORIGIN                      "Изходна точка"
51
 #define MSG_SET_ORIGIN                      "Изходна точка"

+ 1
- 0
Marlin/language_ca.h View File

46
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
47
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
48
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
49
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
49
 #define MSG_SET_HOME_OFFSETS                "Set home offsets"
50
 #define MSG_SET_HOME_OFFSETS                "Set home offsets"
50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
51
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
51
 #define MSG_SET_ORIGIN                      "Establir origen"
52
 #define MSG_SET_ORIGIN                      "Establir origen"

+ 1
- 0
Marlin/language_cn.h View File

43
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
43
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
44
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
44
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
45
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
45
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
46
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
46
 #define MSG_SET_HOME_OFFSETS                "\xbe\xbf\xbb\xbc\xbd\xc0\xc1"
47
 #define MSG_SET_HOME_OFFSETS                "\xbe\xbf\xbb\xbc\xbd\xc0\xc1"
47
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
48
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
48
 #define MSG_SET_ORIGIN                      "\xbe\xbf\xbc\xbd"
49
 #define MSG_SET_ORIGIN                      "\xbe\xbf\xbc\xbd"

+ 5
- 3
Marlin/language_cz.h View File

47
 #define MSG_DISABLE_STEPPERS                "Uvolnit motory"
47
 #define MSG_DISABLE_STEPPERS                "Uvolnit motory"
48
 #define MSG_AUTO_HOME                       "Domovska pozice"
48
 #define MSG_AUTO_HOME                       "Domovska pozice"
49
 #define MSG_LEVEL_BED_HOMING                "Mereni podlozky"
49
 #define MSG_LEVEL_BED_HOMING                "Mereni podlozky"
50
-#define MSG_LEVEL_BED_WAITING               "Click to Begin"
51
-#define MSG_LEVEL_BED_DONE                  "Leveling Done!"
50
+#define MSG_LEVEL_BED_WAITING               "Kliknutim spustte"
51
+#define MSG_LEVEL_BED_DONE                  "Mereni hotovo!"
52
+#define MSG_LEVEL_BED_CANCEL                "Storno"
52
 #define MSG_SET_HOME_OFFSETS                "Nastavit ofsety"
53
 #define MSG_SET_HOME_OFFSETS                "Nastavit ofsety"
53
-#define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
54
+#define MSG_HOME_OFFSETS_APPLIED            "Ofsety nastaveny"
54
 #define MSG_SET_ORIGIN                      "Nastavit pocatek"
55
 #define MSG_SET_ORIGIN                      "Nastavit pocatek"
55
 #define MSG_PREHEAT_PLA                     "Zahrat PLA"
56
 #define MSG_PREHEAT_PLA                     "Zahrat PLA"
56
 #define MSG_PREHEAT_PLA_N                   MSG_PREHEAT_PLA " "
57
 #define MSG_PREHEAT_PLA_N                   MSG_PREHEAT_PLA " "
77
 #define MSG_MOVE_1MM                        "Posunout o 1mm"
78
 #define MSG_MOVE_1MM                        "Posunout o 1mm"
78
 #define MSG_MOVE_10MM                       "Posunout o 10mm"
79
 #define MSG_MOVE_10MM                       "Posunout o 10mm"
79
 #define MSG_SPEED                           "Rychlost"
80
 #define MSG_SPEED                           "Rychlost"
81
+#define MSG_BED_Z                           "Vyska podl."
80
 #define MSG_NOZZLE                          "Tryska"
82
 #define MSG_NOZZLE                          "Tryska"
81
 #define MSG_BED                             "Podlozka"
83
 #define MSG_BED                             "Podlozka"
82
 #define MSG_FAN_SPEED                       "Rychlost vent."
84
 #define MSG_FAN_SPEED                       "Rychlost vent."

+ 11
- 10
Marlin/language_da.h View File

44
 #define MSG_COOLDOWN                        "Afkøl"
44
 #define MSG_COOLDOWN                        "Afkøl"
45
 #define MSG_DISABLE_STEPPERS                "Slå stepper fra"
45
 #define MSG_DISABLE_STEPPERS                "Slå stepper fra"
46
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
47
-#define MSG_LEVEL_BED_WAITING               "Click to Begin"
48
-#define MSG_LEVEL_BED_DONE                  "Leveling Done!"
49
-#define MSG_SET_HOME_OFFSETS                "Sæt home offsets"
50
-#define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
47
+#define MSG_LEVEL_BED_WAITING               "Tryk for at starte"
48
+#define MSG_LEVEL_BED_DONE                  "Justering er færdig!"
49
+#define MSG_LEVEL_BED_CANCEL                "Annuller"
50
+#define MSG_SET_HOME_OFFSETS                "Sæt forskyding til udgangsposition"
51
+#define MSG_HOME_OFFSETS_APPLIED            "Forskydninger er tilføjet"
51
 #define MSG_SET_ORIGIN                      "Sæt origin"
52
 #define MSG_SET_ORIGIN                      "Sæt origin"
52
 #define MSG_SWITCH_PS_ON                    "Slå strøm til"
53
 #define MSG_SWITCH_PS_ON                    "Slå strøm til"
53
 #define MSG_SWITCH_PS_OFF                   "Slå strøm fra"
54
 #define MSG_SWITCH_PS_OFF                   "Slå strøm fra"
83
 #define MSG_MAX                             " \002 Max"
84
 #define MSG_MAX                             " \002 Max"
84
 #define MSG_FACTOR                          " \002 Fact"
85
 #define MSG_FACTOR                          " \002 Fact"
85
 #define MSG_AUTOTEMP                        "Autotemp"
86
 #define MSG_AUTOTEMP                        "Autotemp"
86
-#define MSG_ON                              "On "
87
-#define MSG_OFF                             "Off"
87
+#define MSG_ON                              "Til "
88
+#define MSG_OFF                             "Fra"
88
 #define MSG_PID_P                           "PID-P"
89
 #define MSG_PID_P                           "PID-P"
89
 #define MSG_PID_I                           "PID-I"
90
 #define MSG_PID_I                           "PID-I"
90
 #define MSG_PID_D                           "PID-D"
91
 #define MSG_PID_D                           "PID-D"
127
 #define MSG_DWELL                           "Dvale..."
128
 #define MSG_DWELL                           "Dvale..."
128
 #define MSG_USERWAIT                        "Venter på bruger..."
129
 #define MSG_USERWAIT                        "Venter på bruger..."
129
 #define MSG_RESUMING                        "Forsætter printet"
130
 #define MSG_RESUMING                        "Forsætter printet"
130
-#define MSG_PRINT_ABORTED                   "Print annuleret"
131
-#define MSG_NO_MOVE                         "No move."
132
-#define MSG_KILLED                          "KILLED. "
133
-#define MSG_STOPPED                         "STOPPED. "
131
+#define MSG_PRINT_ABORTED                   "Print annulleret"
132
+#define MSG_NO_MOVE                         "Ingen bevægelse."
133
+#define MSG_KILLED                          "DRÆBT. "
134
+#define MSG_STOPPED                         "STOPPET. "
134
 #define MSG_CONTROL_RETRACT                 "Tilbagetraek mm"
135
 #define MSG_CONTROL_RETRACT                 "Tilbagetraek mm"
135
 #define MSG_CONTROL_RETRACT_SWAP            "Skift Re.mm"
136
 #define MSG_CONTROL_RETRACT_SWAP            "Skift Re.mm"
136
 #define MSG_CONTROL_RETRACTF                "Tilbagetræk V"
137
 #define MSG_CONTROL_RETRACTF                "Tilbagetræk V"

+ 20
- 10
Marlin/language_de.h View File

43
 #define MSG_DISABLE_STEPPERS                "Motoren Aus" // M84
43
 #define MSG_DISABLE_STEPPERS                "Motoren Aus" // M84
44
 #define MSG_AUTO_HOME                       "Home" // G28
44
 #define MSG_AUTO_HOME                       "Home" // G28
45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46
-#define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
-#define MSG_LEVEL_BED_DONE                  "Leveling Done!"
46
+#define MSG_LEVEL_BED_WAITING               "Klick für Start"
47
+#define MSG_LEVEL_BED_DONE                  "Fertig"
48
+#define MSG_LEVEL_BED_CANCEL                "Abbruch"
48
 #define MSG_SET_HOME_OFFSETS                "Setze Home hier"
49
 #define MSG_SET_HOME_OFFSETS                "Setze Home hier"
49
-#define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
+#define MSG_HOME_OFFSETS_APPLIED            "Offsets aktiv"
50
 #define MSG_SET_ORIGIN                      "Setze Null hier" //"G92 X0 Y0 Z0" commented out in ultralcd.cpp
51
 #define MSG_SET_ORIGIN                      "Setze Null hier" //"G92 X0 Y0 Z0" commented out in ultralcd.cpp
51
 #define MSG_PREHEAT_PLA                     "Vorwärmen PLA"
52
 #define MSG_PREHEAT_PLA                     "Vorwärmen PLA"
52
 #define MSG_PREHEAT_PLA_N                   "Vorwärmen PLA "
53
 #define MSG_PREHEAT_PLA_N                   "Vorwärmen PLA "
61
 #define MSG_COOLDOWN                        "Abkühlen"
62
 #define MSG_COOLDOWN                        "Abkühlen"
62
 #define MSG_SWITCH_PS_ON                    "Netzteil Ein"
63
 #define MSG_SWITCH_PS_ON                    "Netzteil Ein"
63
 #define MSG_SWITCH_PS_OFF                   "Netzteil Aus"
64
 #define MSG_SWITCH_PS_OFF                   "Netzteil Aus"
65
+#define MSG_EXTRUDE                         "Extrude"
64
 #define MSG_RETRACT                         "Retract"
66
 #define MSG_RETRACT                         "Retract"
65
 #define MSG_MOVE_AXIS                       "Bewegen"
67
 #define MSG_MOVE_AXIS                       "Bewegen"
68
+#define MSG_LEVEL_BED                       "Bett Korrektur"
66
 #define MSG_MOVE_X                          "X"
69
 #define MSG_MOVE_X                          "X"
67
 #define MSG_MOVE_Y                          "Y"
70
 #define MSG_MOVE_Y                          "Y"
68
 #define MSG_MOVE_Z                          "Z"
71
 #define MSG_MOVE_Z                          "Z"
71
 #define MSG_MOVE_1MM                        " 1.0 mm"
74
 #define MSG_MOVE_1MM                        " 1.0 mm"
72
 #define MSG_MOVE_10MM                       "10.0 mm"
75
 #define MSG_MOVE_10MM                       "10.0 mm"
73
 #define MSG_SPEED                           "Geschw."
76
 #define MSG_SPEED                           "Geschw."
77
+#define MSG_BED_Z                           "Bett Z"
74
 #define MSG_NOZZLE                          "Düse"
78
 #define MSG_NOZZLE                          "Düse"
75
 #define MSG_BED                             "Bett"
79
 #define MSG_BED                             "Bett"
76
 #define MSG_FAN_SPEED                       "Lüftergeschw."
80
 #define MSG_FAN_SPEED                       "Lüftergeschw."
99
 #define MSG_VTRAV_MIN                       "VTrav min"
103
 #define MSG_VTRAV_MIN                       "VTrav min"
100
 #define MSG_AMAX                            "A max " // space by purpose
104
 #define MSG_AMAX                            "A max " // space by purpose
101
 #define MSG_A_RETRACT                       "A Retract"
105
 #define MSG_A_RETRACT                       "A Retract"
106
+#define MSG_A_TRAVEL                        "A Travel"
102
 #define MSG_XSTEPS                          "X steps/mm"
107
 #define MSG_XSTEPS                          "X steps/mm"
103
 #define MSG_YSTEPS                          "Y steps/mm"
108
 #define MSG_YSTEPS                          "Y steps/mm"
104
 #define MSG_ZSTEPS                          "Z steps/mm"
109
 #define MSG_ZSTEPS                          "Z steps/mm"
146
 #define MSG_BABYSTEP_Y                      "Babystep Y"
151
 #define MSG_BABYSTEP_Y                      "Babystep Y"
147
 #define MSG_BABYSTEP_Z                      "Babystep Z"
152
 #define MSG_BABYSTEP_Z                      "Babystep Z"
148
 #define MSG_ENDSTOP_ABORT                   "Endstop Abbr. Ein"
153
 #define MSG_ENDSTOP_ABORT                   "Endstop Abbr. Ein"
154
+#define MSG_HEATING_FAILED_LCD              "Err: Heizt langsam"
155
+#define MSG_ERR_REDUNDANT_TEMP              "Err: Temp. Redundanz"
156
+#define MSG_THERMAL_RUNAWAY                 "Err: Temp. Messung"
157
+#define MSG_ERR_MAXTEMP                     "Err: Max-Temp."
158
+#define MSG_ERR_MINTEMP                     "Err: Min-Temp."
159
+#define MSG_ERR_MAXTEMP_BED                 "Err: Max-Temp. Bett"
160
+#define MSG_ERR_MINTEMP_BED                 "Err: Min-Temp. Bett"
149
 #define MSG_END_HOUR                        "Stunden"
161
 #define MSG_END_HOUR                        "Stunden"
150
 #define MSG_END_MINUTE                      "Minuten"
162
 #define MSG_END_MINUTE                      "Minuten"
151
 #define MSG_HEATING                         "Aufheizen..."
163
 #define MSG_HEATING                         "Aufheizen..."
163
 #define MSG_ERR_MAXTEMP_BED                 "Temp. Bett ueberschr."
175
 #define MSG_ERR_MAXTEMP_BED                 "Temp. Bett ueberschr."
164
 #define MSG_ERR_MAXTEMP_BED                 "Temp. Bett unterschr."
176
 #define MSG_ERR_MAXTEMP_BED                 "Temp. Bett unterschr."
165
 
177
 
166
-#if ENABLED(DELTA_CALIBRATION_MENU)
167
-  #define MSG_DELTA_CALIBRATE               "Delta kalibrieren"
168
-  #define MSG_DELTA_CALIBRATE_X             "Kalibriere X"
169
-  #define MSG_DELTA_CALIBRATE_Y             "Kalibriere Y"
170
-  #define MSG_DELTA_CALIBRATE_Z             "Kalibriere Z"
171
-  #define MSG_DELTA_CALIBRATE_CENTER        "Kalibriere Mitte"
172
-#endif // DELTA_CALIBRATION_MENU
178
+#define MSG_DELTA_CALIBRATE                 "Delta kalibrieren"
179
+#define MSG_DELTA_CALIBRATE_X               "Kalibriere X"
180
+#define MSG_DELTA_CALIBRATE_Y               "Kalibriere Y"
181
+#define MSG_DELTA_CALIBRATE_Z               "Kalibriere Z"
182
+#define MSG_DELTA_CALIBRATE_CENTER          "Kalibriere Mitte"
173
 
183
 
174
 #endif // LANGUAGE_DE_H
184
 #endif // LANGUAGE_DE_H

+ 3
- 0
Marlin/language_en.h View File

70
 #ifndef MSG_LEVEL_BED_DONE
70
 #ifndef MSG_LEVEL_BED_DONE
71
   #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
71
   #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
72
 #endif
72
 #endif
73
+#ifndef MSG_LEVEL_BED_CANCEL
74
+  #define MSG_LEVEL_BED_CANCEL                "Cancel"
75
+#endif
73
 #ifndef MSG_SET_HOME_OFFSETS
76
 #ifndef MSG_SET_HOME_OFFSETS
74
   #define MSG_SET_HOME_OFFSETS                "Set home offsets"
77
   #define MSG_SET_HOME_OFFSETS                "Set home offsets"
75
 #endif
78
 #endif

+ 43
- 29
Marlin/language_es.h View File

39
 #define MSG_SD_INSERTED                     "Tarjeta colocada"
39
 #define MSG_SD_INSERTED                     "Tarjeta colocada"
40
 #define MSG_SD_REMOVED                      "Tarjeta retirada"
40
 #define MSG_SD_REMOVED                      "Tarjeta retirada"
41
 #define MSG_MAIN                            "Menu principal"
41
 #define MSG_MAIN                            "Menu principal"
42
-#define MSG_AUTOSTART                       "Autostart"
42
+#define MSG_AUTOSTART                       "Inicio automatico"
43
 #define MSG_DISABLE_STEPPERS                "Apagar motores"
43
 #define MSG_DISABLE_STEPPERS                "Apagar motores"
44
 #define MSG_AUTO_HOME                       "Llevar al origen"
44
 #define MSG_AUTO_HOME                       "Llevar al origen"
45
-#define MSG_LEVEL_BED_HOMING                "Homing XYZ"
45
+#define MSG_LEVEL_BED_HOMING                "Origen XYZ"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
-#define MSG_SET_HOME_OFFSETS                "Ajustar offsets"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
49
+#define MSG_SET_HOME_OFFSETS                "Ajustar desfases"
49
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
-#define MSG_SET_ORIGIN                      "Establecer cero"
51
+#define MSG_SET_ORIGIN                      "Establecer origen"
51
 #define MSG_PREHEAT_PLA                     "Precalentar PLA"
52
 #define MSG_PREHEAT_PLA                     "Precalentar PLA"
52
-#define MSG_PREHEAT_PLA_N                   "Precalentar PLA "
53
-#define MSG_PREHEAT_PLA_ALL                 "Precal. PLA Todo"
54
-#define MSG_PREHEAT_PLA_BEDONLY             "Precal. PLA Base"
55
-#define MSG_PREHEAT_PLA_SETTINGS            "Ajustar temp. PLA"
53
+#define MSG_PREHEAT_PLA_N                   MSG_PREHEAT_PLA " "
54
+#define MSG_PREHEAT_PLA_ALL                 MSG_PREHEAT_PLA "Todo"
55
+#define MSG_PREHEAT_PLA_BEDONLY             MSG_PREHEAT_PLA"Plataforma"
56
+#define MSG_PREHEAT_PLA_SETTINGS            MSG_PREHEAT_PLA "Config"
56
 #define MSG_PREHEAT_ABS                     "Precalentar ABS"
57
 #define MSG_PREHEAT_ABS                     "Precalentar ABS"
57
-#define MSG_PREHEAT_ABS_N                   "Precalentar ABS "
58
-#define MSG_PREHEAT_ABS_ALL                 "Precal. ABS Todo"
59
-#define MSG_PREHEAT_ABS_BEDONLY             "Precal. ABS Base"
60
-#define MSG_PREHEAT_ABS_SETTINGS            "Ajustar temp. ABS"
58
+#define MSG_PREHEAT_ABS_N                   MSG_PREHEAT_ABS " "
59
+#define MSG_PREHEAT_ABS_ALL                 MSG_PREHEAT_ABS "Todo"
60
+#define MSG_PREHEAT_ABS_BEDONLY             MSG_PREHEAT_ABS "Plataforma"
61
+#define MSG_PREHEAT_ABS_SETTINGS            MSG_PREHEAT_ABS "Config"
61
 #define MSG_COOLDOWN                        "Enfriar"
62
 #define MSG_COOLDOWN                        "Enfriar"
62
 #define MSG_SWITCH_PS_ON                    "Encender"
63
 #define MSG_SWITCH_PS_ON                    "Encender"
63
 #define MSG_SWITCH_PS_OFF                   "Apagar"
64
 #define MSG_SWITCH_PS_OFF                   "Apagar"
64
 #define MSG_EXTRUDE                         "Extruir"
65
 #define MSG_EXTRUDE                         "Extruir"
65
 #define MSG_RETRACT                         "Retraer"
66
 #define MSG_RETRACT                         "Retraer"
66
 #define MSG_MOVE_AXIS                       "Mover ejes"
67
 #define MSG_MOVE_AXIS                       "Mover ejes"
67
-#define MSG_LEVEL_BED                       "Nivelar cama"
68
+#define MSG_LEVEL_BED                       "Nivelar plataforma"
68
 #define MSG_MOVE_X                          "Mover X"
69
 #define MSG_MOVE_X                          "Mover X"
69
 #define MSG_MOVE_Y                          "Mover Y"
70
 #define MSG_MOVE_Y                          "Mover Y"
70
 #define MSG_MOVE_Z                          "Mover Z"
71
 #define MSG_MOVE_Z                          "Mover Z"
73
 #define MSG_MOVE_1MM                        "Mover 1mm"
74
 #define MSG_MOVE_1MM                        "Mover 1mm"
74
 #define MSG_MOVE_10MM                       "Mover 10mm"
75
 #define MSG_MOVE_10MM                       "Mover 10mm"
75
 #define MSG_SPEED                           "Velocidad"
76
 #define MSG_SPEED                           "Velocidad"
76
-#define MSG_NOZZLE                          "Fusor"
77
-#define MSG_BED                             "Base"
77
+#define MSG_NOZZLE                          "Boquilla"
78
+#define MSG_BED                             "Plataforma"
78
 #define MSG_FAN_SPEED                       "Ventilador"
79
 #define MSG_FAN_SPEED                       "Ventilador"
79
 #define MSG_FLOW                            "Flujo"
80
 #define MSG_FLOW                            "Flujo"
80
 #define MSG_CONTROL                         "Control"
81
 #define MSG_CONTROL                         "Control"
81
 #define MSG_MIN                             LCD_STR_THERMOMETER " Min"
82
 #define MSG_MIN                             LCD_STR_THERMOMETER " Min"
82
 #define MSG_MAX                             LCD_STR_THERMOMETER " Max"
83
 #define MSG_MAX                             LCD_STR_THERMOMETER " Max"
83
 #define MSG_FACTOR                          LCD_STR_THERMOMETER " Fact"
84
 #define MSG_FACTOR                          LCD_STR_THERMOMETER " Fact"
84
-#define MSG_AUTOTEMP                        "Autotemp"
85
-#define MSG_ON                              "On"
86
-#define MSG_OFF                             "Off"
85
+#define MSG_AUTOTEMP                        "Temperatura Automatica"
86
+#define MSG_ON                              "Encender"
87
+#define MSG_OFF                             "Apagar"
87
 #define MSG_PID_P                           "PID-P"
88
 #define MSG_PID_P                           "PID-P"
88
 #define MSG_PID_I                           "PID-I"
89
 #define MSG_PID_I                           "PID-I"
89
 #define MSG_PID_D                           "PID-D"
90
 #define MSG_PID_D                           "PID-D"
90
 #define MSG_PID_C                           "PID-C"
91
 #define MSG_PID_C                           "PID-C"
91
-#define MSG_ACC                             "Acel"
92
+#define MSG_ACC                             "Aceleracion"
92
 #define MSG_VXY_JERK                        "Vxy-jerk"
93
 #define MSG_VXY_JERK                        "Vxy-jerk"
93
 #define MSG_VZ_JERK                         "Vz-jerk"
94
 #define MSG_VZ_JERK                         "Vz-jerk"
94
 #define MSG_VE_JERK                         "Ve-jerk"
95
 #define MSG_VE_JERK                         "Ve-jerk"
98
 #define MSG_Z                               "z"
99
 #define MSG_Z                               "z"
99
 #define MSG_E                               "e"
100
 #define MSG_E                               "e"
100
 #define MSG_VMIN                            "Vmin"
101
 #define MSG_VMIN                            "Vmin"
101
-#define MSG_VTRAV_MIN                       "Vvacio min"
102
-#define MSG_AMAX                            "Amax"
103
-#define MSG_A_RETRACT                       "A-retrac."
102
+#define MSG_VTRAV_MIN                       "Vel. viaje min"
103
+#define MSG_AMAX                            "Acel. max"
104
+#define MSG_A_RETRACT                       "Acel. retrac."
104
 #define MSG_XSTEPS                          "X pasos/mm"
105
 #define MSG_XSTEPS                          "X pasos/mm"
105
 #define MSG_YSTEPS                          "Y pasos/mm"
106
 #define MSG_YSTEPS                          "Y pasos/mm"
106
 #define MSG_ZSTEPS                          "Z pasos/mm"
107
 #define MSG_ZSTEPS                          "Z pasos/mm"
113
 #define MSG_CONTRAST                        "Contraste"
114
 #define MSG_CONTRAST                        "Contraste"
114
 #define MSG_STORE_EPROM                     "Guardar memoria"
115
 #define MSG_STORE_EPROM                     "Guardar memoria"
115
 #define MSG_LOAD_EPROM                      "Cargar memoria"
116
 #define MSG_LOAD_EPROM                      "Cargar memoria"
116
-#define MSG_RESTORE_FAILSAFE                "Rest. de emergen."
117
+#define MSG_RESTORE_FAILSAFE                "Restaurar memoria."
117
 #define MSG_REFRESH                         "Volver a cargar"
118
 #define MSG_REFRESH                         "Volver a cargar"
118
 #define MSG_WATCH                           "Monitorizar"
119
 #define MSG_WATCH                           "Monitorizar"
119
 #define MSG_PREPARE                         "Preparar"
120
 #define MSG_PREPARE                         "Preparar"
120
 #define MSG_TUNE                            "Ajustar"
121
 #define MSG_TUNE                            "Ajustar"
121
 #define MSG_PAUSE_PRINT                     "Pausar impresion"
122
 #define MSG_PAUSE_PRINT                     "Pausar impresion"
122
-#define MSG_RESUME_PRINT                    "Reanudar impres."
123
+#define MSG_RESUME_PRINT                    "Reanudar impresion"
123
 #define MSG_STOP_PRINT                      "Detener impresion"
124
 #define MSG_STOP_PRINT                      "Detener impresion"
124
 #define MSG_CARD_MENU                       "Menu de SD"
125
 #define MSG_CARD_MENU                       "Menu de SD"
125
 #define MSG_NO_CARD                         "No hay tarjeta SD"
126
 #define MSG_NO_CARD                         "No hay tarjeta SD"
126
 #define MSG_DWELL                           "Reposo..."
127
 #define MSG_DWELL                           "Reposo..."
127
 #define MSG_USERWAIT                        "Esperando ordenes"
128
 #define MSG_USERWAIT                        "Esperando ordenes"
128
 #define MSG_RESUMING                        "Resumiendo impre."
129
 #define MSG_RESUMING                        "Resumiendo impre."
129
-#define MSG_PRINT_ABORTED                   "Print aborted"
130
+#define MSG_PRINT_ABORTED                   "Impresion cancelada"
130
 #define MSG_NO_MOVE                         "Sin movimiento"
131
 #define MSG_NO_MOVE                         "Sin movimiento"
131
-#define MSG_KILLED                          "PARADA DE EMERG."
132
-#define MSG_STOPPED                         "PARADA"
132
+#define MSG_KILLED                          "Parada de emergencia."
133
+#define MSG_STOPPED                         "Detenida"
133
 #define MSG_CONTROL_RETRACT                 "Retraer mm"
134
 #define MSG_CONTROL_RETRACT                 "Retraer mm"
134
 #define MSG_CONTROL_RETRACT_SWAP            "Interc. Retraer mm"
135
 #define MSG_CONTROL_RETRACT_SWAP            "Interc. Retraer mm"
135
 #define MSG_CONTROL_RETRACTF                "Retraer  V"
136
 #define MSG_CONTROL_RETRACTF                "Retraer  V"
137
 #define MSG_CONTROL_RETRACT_RECOVER         "DesRet +mm"
138
 #define MSG_CONTROL_RETRACT_RECOVER         "DesRet +mm"
138
 #define MSG_CONTROL_RETRACT_RECOVER_SWAP    "Interc. DesRet +mm"
139
 #define MSG_CONTROL_RETRACT_RECOVER_SWAP    "Interc. DesRet +mm"
139
 #define MSG_CONTROL_RETRACT_RECOVERF        "DesRet V"
140
 #define MSG_CONTROL_RETRACT_RECOVERF        "DesRet V"
140
-#define MSG_AUTORETRACT                     "AutoRetr."
141
+#define MSG_AUTORETRACT                     "Retraccion Auto."
141
 #define MSG_FILAMENTCHANGE                  "Cambiar filamento"
142
 #define MSG_FILAMENTCHANGE                  "Cambiar filamento"
142
 #define MSG_INIT_SDCARD                     "Iniciando tarjeta"
143
 #define MSG_INIT_SDCARD                     "Iniciando tarjeta"
143
 #define MSG_CNG_SDCARD                      "Cambiar tarjeta"
144
 #define MSG_CNG_SDCARD                      "Cambiar tarjeta"
144
 #define MSG_ZPROBE_OUT                      "Sonda Z fuera"
145
 #define MSG_ZPROBE_OUT                      "Sonda Z fuera"
145
 #define MSG_YX_UNHOMED                      "Reiniciar X/Y y Z"
146
 #define MSG_YX_UNHOMED                      "Reiniciar X/Y y Z"
146
-#define MSG_ZPROBE_ZOFFSET                  "Offset Z"
147
+#define MSG_ZPROBE_ZOFFSET                  "Desfase Z"
147
 #define MSG_BABYSTEP_X                      "Micropaso X"
148
 #define MSG_BABYSTEP_X                      "Micropaso X"
148
 #define MSG_BABYSTEP_Y                      "Micropaso Y"
149
 #define MSG_BABYSTEP_Y                      "Micropaso Y"
149
 #define MSG_BABYSTEP_Z                      "Micropaso Z"
150
 #define MSG_BABYSTEP_Z                      "Micropaso Z"
150
 #define MSG_ENDSTOP_ABORT                   "Endstop abort"
151
 #define MSG_ENDSTOP_ABORT                   "Endstop abort"
151
 #define MSG_END_HOUR                        "horas"
152
 #define MSG_END_HOUR                        "horas"
152
 #define MSG_END_MINUTE                      "minutos"
153
 #define MSG_END_MINUTE                      "minutos"
154
+#define MSG_BED_Z                           "Plataforma Z"
155
+#define MSG_A_TRAVEL                        "Acel. Viaje"
156
+#define MSG_HEATING_FAILED_LCD              "Error: al calentar"
157
+#define MSG_ERR_REDUNDANT_TEMP              "Error: temperatura redundante"
158
+#define MSG_THERMAL_RUNAWAY                 "Error de temperatura"
159
+#define MSG_ERR_MAXTEMP                     "Error: Temp Maxima"
160
+#define MSG_ERR_MINTEMP                     "Error: Temp Minima"
161
+#define MSG_ERR_MAXTEMP_BED                 "Error: Temp Max Plataforma"
162
+#define MSG_ERR_MINTEMP_BED                 "Error: Temp Min Plataforma"
163
+#define MSG_HEATING                         "Calentando..."
164
+#define MSG_HEATING_COMPLETE                "Calentamiento Completo"
165
+#define MSG_BED_HEATING                     "Calentando plataforma ..."
166
+#define MSG_BED_DONE                        "Plataforma Caliente"
153
 
167
 
154
 #if ENABLED(DELTA_CALIBRATION_MENU)
168
 #if ENABLED(DELTA_CALIBRATION_MENU)
155
   #define MSG_DELTA_CALIBRATE               "Calibracion Delta"
169
   #define MSG_DELTA_CALIBRATE               "Calibracion Delta"

+ 1
- 0
Marlin/language_eu.h View File

45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48
 #define MSG_SET_HOME_OFFSETS                "Set home offsets"
49
 #define MSG_SET_HOME_OFFSETS                "Set home offsets"
49
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_SET_ORIGIN                      "Hasiera ipini"
51
 #define MSG_SET_ORIGIN                      "Hasiera ipini"

+ 1
- 0
Marlin/language_fi.h View File

45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48
 #define MSG_SET_HOME_OFFSETS                "Set home offsets"
49
 #define MSG_SET_HOME_OFFSETS                "Set home offsets"
49
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_SET_ORIGIN                      "Aseta origo"
51
 #define MSG_SET_ORIGIN                      "Aseta origo"

+ 29
- 14
Marlin/language_fr.h View File

42
 #define MSG_MAIN                            "Menu principal"
42
 #define MSG_MAIN                            "Menu principal"
43
 #define MSG_AUTOSTART                       "Demarrage auto"
43
 #define MSG_AUTOSTART                       "Demarrage auto"
44
 #define MSG_DISABLE_STEPPERS                "Arreter moteurs"
44
 #define MSG_DISABLE_STEPPERS                "Arreter moteurs"
45
-#define MSG_AUTO_HOME                       "Home auto."
46
-#define MSG_LEVEL_BED_HOMING                "Homing XYZ"
47
-#define MSG_LEVEL_BED_WAITING               "Click to Begin"
48
-#define MSG_LEVEL_BED_DONE                  "Leveling Done!"
49
-#define MSG_SET_HOME_OFFSETS                "Set home offsets"
50
-#define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
45
+#define MSG_AUTO_HOME                       "Origine auto."
46
+#define MSG_LEVEL_BED_HOMING                "Origine XYZ"
47
+#define MSG_LEVEL_BED_WAITING               "Cliquer pour commencer"
48
+#define MSG_LEVEL_BED_DONE                  "Mise a niveau OK!"
49
+#define MSG_LEVEL_BED_CANCEL                "Annuler"
50
+#define MSG_SET_HOME_OFFSETS                "Regler decal. origine"
51
+#define MSG_HOME_OFFSETS_APPLIED            "Decalages appliques"
51
 #define MSG_SET_ORIGIN                      "Regler origine"
52
 #define MSG_SET_ORIGIN                      "Regler origine"
52
 #define MSG_PREHEAT_PLA                     "Prechauffage PLA"
53
 #define MSG_PREHEAT_PLA                     "Prechauffage PLA"
53
 #define MSG_PREHEAT_PLA_N                   "Prechauff. PLA "
54
 #define MSG_PREHEAT_PLA_N                   "Prechauff. PLA "
109
 #define MSG_TEMPERATURE                     "Temperature"
110
 #define MSG_TEMPERATURE                     "Temperature"
110
 #define MSG_MOTION                          "Mouvement"
111
 #define MSG_MOTION                          "Mouvement"
111
 #define MSG_VOLUMETRIC                      "Filament"
112
 #define MSG_VOLUMETRIC                      "Filament"
112
-#define MSG_VOLUMETRIC_ENABLED              "E in mm3"
113
-#define MSG_FILAMENT_DIAM                   "Fil. Dia."
113
+#define MSG_VOLUMETRIC_ENABLED              "E en mm3"
114
+#define MSG_FILAMENT_DIAM                   "Diam. Fil."
114
 #define MSG_CONTRAST                        "Contraste LCD"
115
 #define MSG_CONTRAST                        "Contraste LCD"
115
 #define MSG_STORE_EPROM                     "Sauver config"
116
 #define MSG_STORE_EPROM                     "Sauver config"
116
 #define MSG_LOAD_EPROM                      "Lire config"
117
 #define MSG_LOAD_EPROM                      "Lire config"
144
 #define MSG_CNG_SDCARD                      "Changer de carte"
145
 #define MSG_CNG_SDCARD                      "Changer de carte"
145
 #define MSG_ZPROBE_OUT                      "Z sonde exte. lit"
146
 #define MSG_ZPROBE_OUT                      "Z sonde exte. lit"
146
 #define MSG_YX_UNHOMED                      "Rev. dans XY av.Z"
147
 #define MSG_YX_UNHOMED                      "Rev. dans XY av.Z"
147
-#define MSG_ZPROBE_ZOFFSET                  "Offset Z"
148
+#define MSG_ZPROBE_ZOFFSET                  "Decalage Z"
148
 #define MSG_BABYSTEP_X                      "Babystep X"
149
 #define MSG_BABYSTEP_X                      "Babystep X"
149
 #define MSG_BABYSTEP_Y                      "Babystep Y"
150
 #define MSG_BABYSTEP_Y                      "Babystep Y"
150
 #define MSG_BABYSTEP_Z                      "Babystep Z"
151
 #define MSG_BABYSTEP_Z                      "Babystep Z"
151
 #define MSG_ENDSTOP_ABORT                   "Butee abandon"
152
 #define MSG_ENDSTOP_ABORT                   "Butee abandon"
152
 #define MSG_END_HOUR                        "heures"
153
 #define MSG_END_HOUR                        "heures"
153
 #define MSG_END_MINUTE                      "minutes"
154
 #define MSG_END_MINUTE                      "minutes"
155
+#define MSG_BED_Z                           "Plateau Z"
156
+#define MSG_A_TRAVEL                        "A-Depl."
157
+#define MSG_HEATING_FAILED_LCD              "Erreur de chauffe"
158
+#define MSG_ERR_REDUNDANT_TEMP              "Err: ERREUR TEMP. REDONDANTE"
159
+#define MSG_THERMAL_RUNAWAY                 "EMBALLEMENT THERMIQUE"
160
+#define MSG_ERR_MAXTEMP                     "Err: TEMP. MAX"
161
+#define MSG_ERR_MINTEMP                     "Err: TEMP. MIN"
162
+#define MSG_ERR_MAXTEMP_BED                 "Err: TEMP. MAX PLATEAU"
163
+#define MSG_ERR_MINTEMP_BED                 "Err: TEMP. MIN PLATEAU"
164
+#define MSG_HEATING                         "En chauffe..."
165
+#define MSG_HEATING_COMPLETE                "Chauffe terminee"
166
+#define MSG_BED_HEATING                     "Plateau en chauffe..."
167
+#define MSG_BED_DONE                        "Chauffe plateau terminee"
168
+
154
 
169
 
155
 #if ENABLED(DELTA_CALIBRATION_MENU)
170
 #if ENABLED(DELTA_CALIBRATION_MENU)
156
-  #define MSG_DELTA_CALIBRATE               "Delta Calibration"
157
-  #define MSG_DELTA_CALIBRATE_X             "Calibrate X"
158
-  #define MSG_DELTA_CALIBRATE_Y             "Calibrate Y"
159
-  #define MSG_DELTA_CALIBRATE_Z             "Calibrate Z"
160
-  #define MSG_DELTA_CALIBRATE_CENTER        "Calibrate Center"
171
+  #define MSG_DELTA_CALIBRATE               "Calibration Delta"
172
+  #define MSG_DELTA_CALIBRATE_X             "Calibrer X"
173
+  #define MSG_DELTA_CALIBRATE_Y             "Calibrer Y"
174
+  #define MSG_DELTA_CALIBRATE_Z             "Calibrer Z"
175
+  #define MSG_DELTA_CALIBRATE_CENTER        "Calibrer centre"
161
 #endif // DELTA_CALIBRATION_MENU
176
 #endif // DELTA_CALIBRATION_MENU
162
 
177
 
163
 #endif // LANGUAGE_FR_H
178
 #endif // LANGUAGE_FR_H

+ 51
- 36
Marlin/language_it.h View File

42
 #define MSG_AUTOSTART                       "Autostart"
42
 #define MSG_AUTOSTART                       "Autostart"
43
 #define MSG_DISABLE_STEPPERS                "Disabilita Motori"
43
 #define MSG_DISABLE_STEPPERS                "Disabilita Motori"
44
 #define MSG_AUTO_HOME                       "Auto Home"
44
 #define MSG_AUTO_HOME                       "Auto Home"
45
-#define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46
-#define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
-#define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
-#define MSG_SET_HOME_OFFSETS                "Setta offset home"
49
-#define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
45
+#define MSG_LEVEL_BED_HOMING                "Home assi XYZ"
46
+#define MSG_LEVEL_BED_WAITING               "Premi per Iniziare"
47
+#define MSG_LEVEL_BED_DONE                  "Livel. terminato!"
48
+#define MSG_LEVEL_BED_CANCEL                "Annulla"
49
+#define MSG_SET_HOME_OFFSETS                "Imp. offset home"
50
+#define MSG_HOME_OFFSETS_APPLIED            "Offset applicato"
50
 #define MSG_SET_ORIGIN                      "Imposta Origine"
51
 #define MSG_SET_ORIGIN                      "Imposta Origine"
51
 #define MSG_PREHEAT_PLA                     "Preriscalda PLA"
52
 #define MSG_PREHEAT_PLA                     "Preriscalda PLA"
52
-#define MSG_PREHEAT_PLA_N                   "Preriscalda PLA "
53
-#define MSG_PREHEAT_PLA_ALL                 "Prer. PLA Tutto"
54
-#define MSG_PREHEAT_PLA_BEDONLY             "Prer. PLA Piatto"
55
-#define MSG_PREHEAT_PLA_SETTINGS            "Config. prer. PLA"
53
+#define MSG_PREHEAT_PLA_N                   MSG_PREHEAT_PLA " "
54
+#define MSG_PREHEAT_PLA_ALL                 MSG_PREHEAT_PLA " Tutto"
55
+#define MSG_PREHEAT_PLA_BEDONLY             MSG_PREHEAT_PLA " Piatto"
56
+#define MSG_PREHEAT_PLA_SETTINGS            MSG_PREHEAT_PLA " conf"
56
 #define MSG_PREHEAT_ABS                     "Preriscalda ABS"
57
 #define MSG_PREHEAT_ABS                     "Preriscalda ABS"
57
-#define MSG_PREHEAT_ABS_N                   "Preriscalda ABS "
58
-#define MSG_PREHEAT_ABS_ALL                 "Prer. ABS Tutto"
59
-#define MSG_PREHEAT_ABS_BEDONLY             "Prer. ABS Piatto"
60
-#define MSG_PREHEAT_ABS_SETTINGS            "Config. prer. ABS"
58
+#define MSG_PREHEAT_ABS_N                   MSG_PREHEAT_ABS " "
59
+#define MSG_PREHEAT_ABS_ALL                 MSG_PREHEAT_ABS " Tutto"
60
+#define MSG_PREHEAT_ABS_BEDONLY             MSG_PREHEAT_ABS " Piatto"
61
+#define MSG_PREHEAT_ABS_SETTINGS            MSG_PREHEAT_ABS " conf"
61
 #define MSG_COOLDOWN                        "Raffredda"
62
 #define MSG_COOLDOWN                        "Raffredda"
62
 #define MSG_SWITCH_PS_ON                    "Accendi aliment."
63
 #define MSG_SWITCH_PS_ON                    "Accendi aliment."
63
 #define MSG_SWITCH_PS_OFF                   "Spegni aliment."
64
 #define MSG_SWITCH_PS_OFF                   "Spegni aliment."
64
 #define MSG_EXTRUDE                         "Estrudi"
65
 #define MSG_EXTRUDE                         "Estrudi"
65
 #define MSG_RETRACT                         "Ritrai"
66
 #define MSG_RETRACT                         "Ritrai"
66
 #define MSG_MOVE_AXIS                       "Muovi Asse"
67
 #define MSG_MOVE_AXIS                       "Muovi Asse"
67
-#define MSG_LEVEL_BED                       "Livellamento piano"
68
+#define MSG_LEVEL_BED                       "Livella piano"
68
 #define MSG_MOVE_X                          "Muovi X"
69
 #define MSG_MOVE_X                          "Muovi X"
69
 #define MSG_MOVE_Y                          "Muovi Y"
70
 #define MSG_MOVE_Y                          "Muovi Y"
70
 #define MSG_MOVE_Z                          "Muovi Z"
71
 #define MSG_MOVE_Z                          "Muovi Z"
72
 #define MSG_MOVE_01MM                       "Muovi di 0.1mm"
73
 #define MSG_MOVE_01MM                       "Muovi di 0.1mm"
73
 #define MSG_MOVE_1MM                        "Muovi di   1mm"
74
 #define MSG_MOVE_1MM                        "Muovi di   1mm"
74
 #define MSG_MOVE_10MM                       "Muovi di  10mm"
75
 #define MSG_MOVE_10MM                       "Muovi di  10mm"
75
-#define MSG_SPEED                           "Velcità"
76
+#define MSG_SPEED                           "Velocità"
76
 #define MSG_NOZZLE                          "Ugello"
77
 #define MSG_NOZZLE                          "Ugello"
77
 #define MSG_BED                             "Piatto"
78
 #define MSG_BED                             "Piatto"
78
-#define MSG_FAN_SPEED                       "Ventola"
79
+#define MSG_FAN_SPEED                       "Velocità ventola"
79
 #define MSG_FLOW                            "Flusso"
80
 #define MSG_FLOW                            "Flusso"
80
 #define MSG_CONTROL                         "Controllo"
81
 #define MSG_CONTROL                         "Controllo"
81
 #define MSG_MIN                             LCD_STR_THERMOMETER " Min"
82
 #define MSG_MIN                             LCD_STR_THERMOMETER " Min"
82
 #define MSG_MAX                             LCD_STR_THERMOMETER " Max"
83
 #define MSG_MAX                             LCD_STR_THERMOMETER " Max"
83
 #define MSG_FACTOR                          LCD_STR_THERMOMETER " Fact"
84
 #define MSG_FACTOR                          LCD_STR_THERMOMETER " Fact"
84
 #define MSG_AUTOTEMP                        "Autotemp"
85
 #define MSG_AUTOTEMP                        "Autotemp"
85
-#define MSG_ON                              "ON "
86
-#define MSG_OFF                             "OFF"
86
+#define MSG_ON                              "On "
87
+#define MSG_OFF                             "Off"
87
 #define MSG_PID_P                           "PID-P"
88
 #define MSG_PID_P                           "PID-P"
88
 #define MSG_PID_I                           "PID-I"
89
 #define MSG_PID_I                           "PID-I"
89
 #define MSG_PID_D                           "PID-D"
90
 #define MSG_PID_D                           "PID-D"
90
 #define MSG_PID_C                           "PID-C"
91
 #define MSG_PID_C                           "PID-C"
91
-#define MSG_ACC                             "Accel."
92
+#define MSG_ACC                             "Accel"
92
 #define MSG_VXY_JERK                        "Vxy-jerk"
93
 #define MSG_VXY_JERK                        "Vxy-jerk"
93
 #define MSG_VZ_JERK                         "Vz-jerk"
94
 #define MSG_VZ_JERK                         "Vz-jerk"
94
 #define MSG_VE_JERK                         "Ve-jerk"
95
 #define MSG_VE_JERK                         "Ve-jerk"
95
-#define MSG_VMAX                            "Vmax"
96
+#define MSG_VMAX                            "Vmax "
96
 #define MSG_X                               "x"
97
 #define MSG_X                               "x"
97
 #define MSG_Y                               "y"
98
 #define MSG_Y                               "y"
98
 #define MSG_Z                               "z"
99
 #define MSG_Z                               "z"
99
 #define MSG_E                               "e"
100
 #define MSG_E                               "e"
100
 #define MSG_VMIN                            "Vmin"
101
 #define MSG_VMIN                            "Vmin"
101
 #define MSG_VTRAV_MIN                       "VTrav min"
102
 #define MSG_VTRAV_MIN                       "VTrav min"
102
-#define MSG_AMAX                            "Amax"
103
+#define MSG_AMAX                            "Amax "
103
 #define MSG_A_RETRACT                       "A-retract"
104
 #define MSG_A_RETRACT                       "A-retract"
104
 #define MSG_XSTEPS                          "Xpassi/mm"
105
 #define MSG_XSTEPS                          "Xpassi/mm"
105
 #define MSG_YSTEPS                          "Ypassi/mm"
106
 #define MSG_YSTEPS                          "Ypassi/mm"
107
 #define MSG_ESTEPS                          "Epassi/mm"
108
 #define MSG_ESTEPS                          "Epassi/mm"
108
 #define MSG_TEMPERATURE                     "Temperatura"
109
 #define MSG_TEMPERATURE                     "Temperatura"
109
 #define MSG_MOTION                          "Movimento"
110
 #define MSG_MOTION                          "Movimento"
110
-#define MSG_VOLUMETRIC                      "Filament"
111
-#define MSG_VOLUMETRIC_ENABLED              "E in mm³"
111
+#define MSG_VOLUMETRIC                      "Filamento"
112
+#define MSG_VOLUMETRIC_ENABLED              "E in mm3"
112
 #define MSG_FILAMENT_DIAM                   "Diam. filo"
113
 #define MSG_FILAMENT_DIAM                   "Diam. filo"
113
 #define MSG_CONTRAST                        "Contrasto LCD"
114
 #define MSG_CONTRAST                        "Contrasto LCD"
114
-#define MSG_STORE_EPROM                     "Salva in EEPROM"
115
-#define MSG_LOAD_EPROM                      "Carica da EEPROM"
116
-#define MSG_RESTORE_FAILSAFE                "Impostaz. default"
115
+#define MSG_STORE_EPROM                     "Salva in memoria"
116
+#define MSG_LOAD_EPROM                      "Carica da memoria"
117
+#define MSG_RESTORE_FAILSAFE                "Ripristina imp."
117
 #define MSG_REFRESH                         "Aggiorna"
118
 #define MSG_REFRESH                         "Aggiorna"
118
 #define MSG_WATCH                           "Guarda"
119
 #define MSG_WATCH                           "Guarda"
119
 #define MSG_PREPARE                         "Prepara"
120
 #define MSG_PREPARE                         "Prepara"
120
-#define MSG_TUNE                            "Adatta"
121
+#define MSG_TUNE                            "Regola"
121
 #define MSG_PAUSE_PRINT                     "Pausa"
122
 #define MSG_PAUSE_PRINT                     "Pausa"
122
 #define MSG_RESUME_PRINT                    "Riprendi stampa"
123
 #define MSG_RESUME_PRINT                    "Riprendi stampa"
123
 #define MSG_STOP_PRINT                      "Arresta stampa"
124
 #define MSG_STOP_PRINT                      "Arresta stampa"
124
-#define MSG_CARD_MENU                       "SD Card Menu"
125
-#define MSG_NO_CARD                         "No SD Card"
125
+#define MSG_CARD_MENU                       "Stampa da SD"
126
+#define MSG_NO_CARD                         "SD non presente"
126
 #define MSG_DWELL                           "Sospensione..."
127
 #define MSG_DWELL                           "Sospensione..."
127
-#define MSG_USERWAIT                        "Attendi Utente..."
128
+#define MSG_USERWAIT                        "Attendi Utente.."
128
 #define MSG_RESUMING                        "Riprendi Stampa"
129
 #define MSG_RESUMING                        "Riprendi Stampa"
129
-#define MSG_PRINT_ABORTED                   "Stampa abortita"
130
+#define MSG_PRINT_ABORTED                   "Stampa annullata"
130
 #define MSG_NO_MOVE                         "Nessun Movimento"
131
 #define MSG_NO_MOVE                         "Nessun Movimento"
131
-#define MSG_KILLED                          "UCCISO "
132
-#define MSG_STOPPED                         "ARRESTATO "
132
+#define MSG_KILLED                          "UCCISO. "
133
+#define MSG_STOPPED                         "ARRESTATO. "
133
 #define MSG_CONTROL_RETRACT                 "Ritrai mm"
134
 #define MSG_CONTROL_RETRACT                 "Ritrai mm"
134
 #define MSG_CONTROL_RETRACT_SWAP            "Scamb. Ritrai mm"
135
 #define MSG_CONTROL_RETRACT_SWAP            "Scamb. Ritrai mm"
135
 #define MSG_CONTROL_RETRACTF                "Ritrai  V"
136
 #define MSG_CONTROL_RETRACTF                "Ritrai  V"
136
 #define MSG_CONTROL_RETRACT_ZLIFT           "Salta mm"
137
 #define MSG_CONTROL_RETRACT_ZLIFT           "Salta mm"
137
 #define MSG_CONTROL_RETRACT_RECOVER         "UnRet +mm"
138
 #define MSG_CONTROL_RETRACT_RECOVER         "UnRet +mm"
138
-#define MSG_CONTROL_RETRACT_RECOVER_SWAP    "Scamb. UnRet +mm"
139
+#define MSG_CONTROL_RETRACT_RECOVER_SWAP    "Scamb. UnRet+mm"
139
 #define MSG_CONTROL_RETRACT_RECOVERF        "UnRet  V"
140
 #define MSG_CONTROL_RETRACT_RECOVERF        "UnRet  V"
140
-#define MSG_AUTORETRACT                     "AutoArretramento"
141
+#define MSG_AUTORETRACT                     "AutoRitrai"
141
 #define MSG_FILAMENTCHANGE                  "Cambia filamento"
142
 #define MSG_FILAMENTCHANGE                  "Cambia filamento"
142
 #define MSG_INIT_SDCARD                     "Iniz. SD-Card"
143
 #define MSG_INIT_SDCARD                     "Iniz. SD-Card"
143
 #define MSG_CNG_SDCARD                      "Cambia SD-Card"
144
 #define MSG_CNG_SDCARD                      "Cambia SD-Card"
144
 #define MSG_ZPROBE_OUT                      "Z probe out. bed"
145
 #define MSG_ZPROBE_OUT                      "Z probe out. bed"
145
-#define MSG_YX_UNHOMED                      "Home X/Y before Z"
146
+#define MSG_YX_UNHOMED                      "Home X/Y prima di Z"
146
 #define MSG_ZPROBE_ZOFFSET                  "Z Offset"
147
 #define MSG_ZPROBE_ZOFFSET                  "Z Offset"
147
 #define MSG_BABYSTEP_X                      "Babystep X"
148
 #define MSG_BABYSTEP_X                      "Babystep X"
148
 #define MSG_BABYSTEP_Y                      "Babystep Y"
149
 #define MSG_BABYSTEP_Y                      "Babystep Y"
150
 #define MSG_ENDSTOP_ABORT                   "Finecorsa abort"
151
 #define MSG_ENDSTOP_ABORT                   "Finecorsa abort"
151
 #define MSG_END_HOUR                        "ore"
152
 #define MSG_END_HOUR                        "ore"
152
 #define MSG_END_MINUTE                      "minuti"
153
 #define MSG_END_MINUTE                      "minuti"
154
+#define MSG_BED_Z                           "piatto Z"
155
+#define MSG_A_TRAVEL                        "A-Spostamento"
156
+#define MSG_HEATING_FAILED_LCD              "Riscald. Fallito"
157
+#define MSG_ERR_REDUNDANT_TEMP              "Err: TEMP RIDONDANTI"
158
+#define MSG_THERMAL_RUNAWAY                 "TEMP FUORI CONTROLLO"
159
+#define MSG_ERR_MAXTEMP                     "Err: TEMP MASSIMA"
160
+#define MSG_ERR_MINTEMP                     "Err: TEMP MINIMA"
161
+#define MSG_ERR_MAXTEMP_BED                 "Err: TEMP MASSIMA PIATTO"
162
+#define MSG_ERR_MINTEMP_BED                 "Err: TEMP MINIMA PIATTO"
163
+#define MSG_HEATING                         "Riscaldamento.."
164
+#define MSG_HEATING_COMPLETE                "Risc. completato"
165
+#define MSG_BED_HEATING                     "Risc. Piatto.."
166
+#define MSG_BED_DONE                        "Piatto Pronto"
167
+
153
 
168
 
154
 #if ENABLED(DELTA_CALIBRATION_MENU)
169
 #if ENABLED(DELTA_CALIBRATION_MENU)
155
   #define MSG_DELTA_CALIBRATE               "Calibraz. Delta"
170
   #define MSG_DELTA_CALIBRATE               "Calibraz. Delta"

+ 4
- 3
Marlin/language_kana.h View File

45
 #define MSG_DISABLE_STEPPERS                "\xd3\xb0\xc0\xb0\xc3\xde\xdd\xb9\xde\xdd\x20\xb5\xcc"         // "Disable steppers"
45
 #define MSG_DISABLE_STEPPERS                "\xd3\xb0\xc0\xb0\xc3\xde\xdd\xb9\xde\xdd\x20\xb5\xcc"         // "Disable steppers"
46
 #define MSG_AUTO_HOME                       "\xb9\xde\xdd\xc3\xdd\xc6\xb2\xc4\xde\xb3"                     // "Auto home"
46
 #define MSG_AUTO_HOME                       "\xb9\xde\xdd\xc3\xdd\xc6\xb2\xc4\xde\xb3"                     // "Auto home"
47
 #define MSG_LEVEL_BED_HOMING                "\xb9\xde\xdd\xc3\xdd\xc6\xb2\xc4\xde\xb3"                     // "Homing XYZ"
47
 #define MSG_LEVEL_BED_HOMING                "\xb9\xde\xdd\xc3\xdd\xc6\xb2\xc4\xde\xb3"                     // "Homing XYZ"
48
-#define MSG_LEVEL_BED_WAITING               "Click to Begin"
49
-#define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_WAITING               "\xda\xcd\xde\xd8\xdd\xb8\xde\xb6\xb2\xbc"                     //"Click to Begin"
49
+#define MSG_LEVEL_BED_DONE                  "\xda\xcd\xde\xd8\xdd\xb8\xde\xb6\xdd\xd8\xae\xb3"             //"Leveling Done!"
50
+#define MSG_LEVEL_BED_CANCEL                "\xc4\xd8\xd4\xd2"                                             //"Cancel"
50
 #define MSG_SET_HOME_OFFSETS                "\xb7\xbc\xde\xad\xdd\xb5\xcc\xbe\xaf\xc4\xbe\xaf\xc3\xb2"     // "Set home offsets"
51
 #define MSG_SET_HOME_OFFSETS                "\xb7\xbc\xde\xad\xdd\xb5\xcc\xbe\xaf\xc4\xbe\xaf\xc3\xb2"     // "Set home offsets"
51
-#define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
52
+#define MSG_HOME_OFFSETS_APPLIED            "\xb5\xcc\xbe\xaf\xc4\x20\xc3\xb7\xd6\xb3\xbb\xda\xcf\xbc\xc0" //"Offsets applied"
52
 #define MSG_SET_ORIGIN                      "\xb7\xbc\xde\xad\xdd\xbe\xaf\xc4"                             // "Set origin"
53
 #define MSG_SET_ORIGIN                      "\xb7\xbc\xde\xad\xdd\xbe\xaf\xc4"                             // "Set origin"
53
 #define MSG_PREHEAT_PLA                     "PLA \xd6\xc8\xc2"                                             // "Preheat PLA"
54
 #define MSG_PREHEAT_PLA                     "PLA \xd6\xc8\xc2"                                             // "Preheat PLA"
54
 #define MSG_PREHEAT_PLA_N                   MSG_PREHEAT_PLA " "
55
 #define MSG_PREHEAT_PLA_N                   MSG_PREHEAT_PLA " "

+ 4
- 3
Marlin/language_kana_utf8.h View File

49
 #define MSG_DISABLE_STEPPERS                "モーターデンゲン オフ"            // "Disable steppers"
49
 #define MSG_DISABLE_STEPPERS                "モーターデンゲン オフ"            // "Disable steppers"
50
 #define MSG_AUTO_HOME                       "ゲンテンニイドウ"                // "Auto home"
50
 #define MSG_AUTO_HOME                       "ゲンテンニイドウ"                // "Auto home"
51
 #define MSG_LEVEL_BED_HOMING                "ゲンテンニイドウ"                // "Homing XYZ"
51
 #define MSG_LEVEL_BED_HOMING                "ゲンテンニイドウ"                // "Homing XYZ"
52
-#define MSG_LEVEL_BED_WAITING               "Click to Begin"
53
-#define MSG_LEVEL_BED_DONE                  "Leveling Done!"
52
+#define MSG_LEVEL_BED_WAITING               "レベリングカイシ"                //"Click to Begin"
53
+#define MSG_LEVEL_BED_DONE                  "レベリングカンリョウ"              //"Leveling Done!"
54
+#define MSG_LEVEL_BED_CANCEL                "トリヤメ"                      //"Cancel"
54
 #define MSG_SET_HOME_OFFSETS                "キジュンオフセットセッテイ"         // "Set home offsets"
55
 #define MSG_SET_HOME_OFFSETS                "キジュンオフセットセッテイ"         // "Set home offsets"
55
-#define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
56
+#define MSG_HOME_OFFSETS_APPLIED            "オフセット テキヨウサレマシタ"       //"Offsets applied"
56
 #define MSG_SET_ORIGIN                      "キジュンセット"                 // "Set origin"
57
 #define MSG_SET_ORIGIN                      "キジュンセット"                 // "Set origin"
57
 #define MSG_PREHEAT_PLA                     "PLA ヨネツ"                   // "Preheat PLA"
58
 #define MSG_PREHEAT_PLA                     "PLA ヨネツ"                   // "Preheat PLA"
58
 #define MSG_PREHEAT_PLA_N                   MSG_PREHEAT_PLA " "
59
 #define MSG_PREHEAT_PLA_N                   MSG_PREHEAT_PLA " "

+ 24
- 5
Marlin/language_nl.h View File

38
 #define WELCOME_MSG                         MACHINE_NAME " gereed."
38
 #define WELCOME_MSG                         MACHINE_NAME " gereed."
39
 #define MSG_SD_INSERTED                     "Kaart ingestoken"
39
 #define MSG_SD_INSERTED                     "Kaart ingestoken"
40
 #define MSG_SD_REMOVED                      "Kaart verwijderd"
40
 #define MSG_SD_REMOVED                      "Kaart verwijderd"
41
-#define MSG_MAIN                            "Main"
41
+#define MSG_MAIN                            "Hoofdmenu"
42
 #define MSG_AUTOSTART                       "Autostart"
42
 #define MSG_AUTOSTART                       "Autostart"
43
 #define MSG_DISABLE_STEPPERS                "Motoren uit"
43
 #define MSG_DISABLE_STEPPERS                "Motoren uit"
44
 #define MSG_AUTO_HOME                       "Auto home"
44
 #define MSG_AUTO_HOME                       "Auto home"
45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
-#define MSG_SET_HOME_OFFSETS                "Set home offsets"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
49
+#define MSG_SET_HOME_OFFSETS                "Zet home offsets"
49
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_SET_ORIGIN                      "Nulpunt instellen"
51
 #define MSG_SET_ORIGIN                      "Nulpunt instellen"
51
 #define MSG_PREHEAT_PLA                     "PLA voorverwarmen"
52
 #define MSG_PREHEAT_PLA                     "PLA voorverwarmen"
127
 #define MSG_RESUMING                        "Print hervatten"
128
 #define MSG_RESUMING                        "Print hervatten"
128
 #define MSG_PRINT_ABORTED                   "Print afgebroken"
129
 #define MSG_PRINT_ABORTED                   "Print afgebroken"
129
 #define MSG_NO_MOVE                         "Geen beweging."
130
 #define MSG_NO_MOVE                         "Geen beweging."
130
-#define MSG_KILLED                          "AFGEBROKEN. "
131
-#define MSG_STOPPED                         "GESTOPT. "
131
+#define MSG_KILLED                          "Afgebroken. "
132
+#define MSG_STOPPED                         "Gestopt. "
132
 #define MSG_CONTROL_RETRACT                 "Retract mm"
133
 #define MSG_CONTROL_RETRACT                 "Retract mm"
133
 #define MSG_CONTROL_RETRACT_SWAP            "Ruil Retract mm"
134
 #define MSG_CONTROL_RETRACT_SWAP            "Ruil Retract mm"
134
 #define MSG_CONTROL_RETRACTF                "Retract  F"
135
 #define MSG_CONTROL_RETRACTF                "Retract  F"
139
 #define MSG_AUTORETRACT                     "AutoRetr."
140
 #define MSG_AUTORETRACT                     "AutoRetr."
140
 #define MSG_FILAMENTCHANGE                  "Verv. Filament"
141
 #define MSG_FILAMENTCHANGE                  "Verv. Filament"
141
 #define MSG_INIT_SDCARD                     "Init. SD kaart"
142
 #define MSG_INIT_SDCARD                     "Init. SD kaart"
142
-#define MSG_CNG_SDCARD                      "Verv. SD card"
143
+#define MSG_CNG_SDCARD                      "Verv. SD Kaart"
143
 #define MSG_ZPROBE_OUT                      "Z probe uit. bed"
144
 #define MSG_ZPROBE_OUT                      "Z probe uit. bed"
144
 #define MSG_YX_UNHOMED                      "Home X/Y voor Z"
145
 #define MSG_YX_UNHOMED                      "Home X/Y voor Z"
145
 #define MSG_ZPROBE_ZOFFSET                  "Z Offset"
146
 #define MSG_ZPROBE_ZOFFSET                  "Z Offset"
149
 #define MSG_ENDSTOP_ABORT                   "Endstop afbr."
150
 #define MSG_ENDSTOP_ABORT                   "Endstop afbr."
150
 #define MSG_END_HOUR                        "uur"
151
 #define MSG_END_HOUR                        "uur"
151
 #define MSG_END_MINUTE                      "minuten"
152
 #define MSG_END_MINUTE                      "minuten"
153
+#define MSG_BED_Z                           "Bed Z"
154
+#define MSG_A_TRAVEL                        "A-travel"
155
+#define MSG_HEATING_FAILED_LCD              "voorverw. fout"
156
+#define MSG_ERR_REDUNDANT_TEMP              "Redun. temp fout"
157
+#define MSG_THERMAL_RUNAWAY                 "Therm. wegloop"
158
+#define MSG_ERR_MAXTEMP                     "Err: Max. temp"
159
+#define MSG_ERR_MINTEMP                     "Err: Min. temp"
160
+#define MSG_ERR_MAXTEMP_BED                 "Err: Max.tmp bed"
161
+#define MSG_ERR_MINTEMP_BED                 "Err: Min.tmp bed"
162
+#define MSG_HEATING                         "Voorwarmen..."
163
+#define MSG_HEATING_COMPLETE                "Voorverw. kompl."
164
+#define MSG_BED_HEATING                     "Bed voorverw."
165
+#define MSG_BED_DONE                        "Bed is voorverw."
166
+#define MSG_LEVEL_BED_HOMING                "Homing XYZ"
167
+#define MSG_LEVEL_BED_WAITING               "Klik voor begin"
168
+#define MSG_LEVEL_BED_DONE                  "Bed level kompl."
169
+#define MSG_LEVEL_BED_CANCEL                "Bed level afbr."
170
+#define MSG_HOME_OFFSETS_APPLIED            "H offset toegep."
152
 
171
 
153
 #if ENABLED(DELTA_CALIBRATION_MENU)
172
 #if ENABLED(DELTA_CALIBRATION_MENU)
154
   #define MSG_DELTA_CALIBRATE               "Delta Calibratie"
173
   #define MSG_DELTA_CALIBRATE               "Delta Calibratie"

+ 1
- 0
Marlin/language_pl.h View File

45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48
 #define MSG_SET_HOME_OFFSETS                "Set home offsets"
49
 #define MSG_SET_HOME_OFFSETS                "Set home offsets"
49
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_SET_ORIGIN                      "Ustaw punkt zero"
51
 #define MSG_SET_ORIGIN                      "Ustaw punkt zero"

+ 1
- 0
Marlin/language_pt-br.h View File

45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48
 #define MSG_SET_HOME_OFFSETS                "Ajustar Jogo"
49
 #define MSG_SET_HOME_OFFSETS                "Ajustar Jogo"
49
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_SET_ORIGIN                      "Ajustar orig."
51
 #define MSG_SET_ORIGIN                      "Ajustar orig."

+ 1
- 0
Marlin/language_pt-br_utf8.h View File

45
 #define MSG_LEVEL_BED_HOMING                "Indo para origem"
45
 #define MSG_LEVEL_BED_HOMING                "Indo para origem"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48
 #define MSG_SET_HOME_OFFSETS                "Ajustar Jogo"
49
 #define MSG_SET_HOME_OFFSETS                "Ajustar Jogo"
49
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_SET_ORIGIN                      "Ajustar orig."
51
 #define MSG_SET_ORIGIN                      "Ajustar orig."

+ 15
- 1
Marlin/language_pt.h View File

45
 #define MSG_LEVEL_BED_HOMING                "Indo para origem"
45
 #define MSG_LEVEL_BED_HOMING                "Indo para origem"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48
 #define MSG_SET_HOME_OFFSETS                "Definir desvio"
49
 #define MSG_SET_HOME_OFFSETS                "Definir desvio"
49
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_SET_ORIGIN                      "Definir origem"
51
 #define MSG_SET_ORIGIN                      "Definir origem"
72
 #define MSG_MOVE_1MM                        "Mover 1mm"
73
 #define MSG_MOVE_1MM                        "Mover 1mm"
73
 #define MSG_MOVE_10MM                       "Mover 10mm"
74
 #define MSG_MOVE_10MM                       "Mover 10mm"
74
 #define MSG_SPEED                           "Velocidade"
75
 #define MSG_SPEED                           "Velocidade"
76
+#define MSG_BED_Z                           "Base Z"
75
 #define MSG_NOZZLE                          LCD_STR_THERMOMETER " Bico"
77
 #define MSG_NOZZLE                          LCD_STR_THERMOMETER " Bico"
76
 #define MSG_BED                             LCD_STR_THERMOMETER " Base"
78
 #define MSG_BED                             LCD_STR_THERMOMETER " Base"
77
 #define MSG_FAN_SPEED                       "Vel. ventoinha"
79
 #define MSG_FAN_SPEED                       "Vel. ventoinha"
103
 #define MSG_VMIN                            "Vmin"
105
 #define MSG_VMIN                            "Vmin"
104
 #define MSG_VTRAV_MIN                       "VTrav min"
106
 #define MSG_VTRAV_MIN                       "VTrav min"
105
 #define MSG_AMAX                            "Amax "
107
 #define MSG_AMAX                            "Amax "
106
-#define MSG_A_RETRACT                       "A-retract"
108
+#define MSG_A_RETRACT                       "A-retraccao"
109
+#define MSG_A_TRAVEL                        "A-movimento"
107
 #define MSG_XSTEPS                          "X passo/mm"
110
 #define MSG_XSTEPS                          "X passo/mm"
108
 #define MSG_YSTEPS                          "Y passo/mm"
111
 #define MSG_YSTEPS                          "Y passo/mm"
109
 #define MSG_ZSTEPS                          "Z passo/mm"
112
 #define MSG_ZSTEPS                          "Z passo/mm"
151
 #define MSG_BABYSTEP_Y                      "Babystep Y"
154
 #define MSG_BABYSTEP_Y                      "Babystep Y"
152
 #define MSG_BABYSTEP_Z                      "Babystep Z"
155
 #define MSG_BABYSTEP_Z                      "Babystep Z"
153
 #define MSG_ENDSTOP_ABORT                   "Fim de curso"
156
 #define MSG_ENDSTOP_ABORT                   "Fim de curso"
157
+#define MSG_HEATING_FAILED_LCD              "Aquecimento falhou"
158
+#define MSG_ERR_REDUNDANT_TEMP              "Err: REDUNDANT TEMP ERROR"
159
+#define MSG_THERMAL_RUNAWAY                 "THERMAL RUNAWAY"
160
+#define MSG_ERR_MAXTEMP                     "Err: T Maxima"
161
+#define MSG_ERR_MINTEMP                     "Err: T Minima"
162
+#define MSG_ERR_MAXTEMP_BED                 "Err: T Base Maxima"
163
+#define MSG_ERR_MINTEMP_BED                 "Err: T Base Minima"
154
 #define MSG_END_HOUR                        "horas"
164
 #define MSG_END_HOUR                        "horas"
155
 #define MSG_END_MINUTE                      "minutos"
165
 #define MSG_END_MINUTE                      "minutos"
166
+#define MSG_HEATING                         "Aquecendo..."
167
+#define MSG_HEATING_COMPLETE                "Aquecida."
168
+#define MSG_BED_HEATING                     "Aquecendo base.."
169
+#define MSG_BED_DONE                        "Base aquecida."
156
 
170
 
157
 #if ENABLED(DELTA_CALIBRATION_MENU)
171
 #if ENABLED(DELTA_CALIBRATION_MENU)
158
   #define MSG_DELTA_CALIBRATE             "Calibracao Delta"
172
   #define MSG_DELTA_CALIBRATE             "Calibracao Delta"

+ 16
- 2
Marlin/language_pt_utf8.h View File

45
 #define MSG_LEVEL_BED_HOMING                "Indo para origem"
45
 #define MSG_LEVEL_BED_HOMING                "Indo para origem"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48
 #define MSG_SET_HOME_OFFSETS                "Definir desvio"
49
 #define MSG_SET_HOME_OFFSETS                "Definir desvio"
49
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_SET_ORIGIN                      "Definir origem"
51
 #define MSG_SET_ORIGIN                      "Definir origem"
72
 #define MSG_MOVE_1MM                        "Mover 1mm"
73
 #define MSG_MOVE_1MM                        "Mover 1mm"
73
 #define MSG_MOVE_10MM                       "Mover 10mm"
74
 #define MSG_MOVE_10MM                       "Mover 10mm"
74
 #define MSG_SPEED                           "Velocidade"
75
 #define MSG_SPEED                           "Velocidade"
76
+#define MSG_BED_Z                           "Base Z"
75
 #define MSG_NOZZLE                          LCD_STR_THERMOMETER " Bico"
77
 #define MSG_NOZZLE                          LCD_STR_THERMOMETER " Bico"
76
 #define MSG_BED                             LCD_STR_THERMOMETER " Base"
78
 #define MSG_BED                             LCD_STR_THERMOMETER " Base"
77
 #define MSG_FAN_SPEED                       "Vel. ventoinha"
79
 #define MSG_FAN_SPEED                       "Vel. ventoinha"
103
 #define MSG_VMIN                            "Vmin"
105
 #define MSG_VMIN                            "Vmin"
104
 #define MSG_VTRAV_MIN                       "VTrav min"
106
 #define MSG_VTRAV_MIN                       "VTrav min"
105
 #define MSG_AMAX                            "Amax "
107
 #define MSG_AMAX                            "Amax "
106
-#define MSG_A_RETRACT                       "A-retract"
108
+#define MSG_A_RETRACT                       "A-retracção"
109
+#define MSG_A_TRAVEL                        "A-movimento"
107
 #define MSG_XSTEPS                          "X passo/mm"
110
 #define MSG_XSTEPS                          "X passo/mm"
108
 #define MSG_YSTEPS                          "Y passo/mm"
111
 #define MSG_YSTEPS                          "Y passo/mm"
109
 #define MSG_ZSTEPS                          "Z passo/mm"
112
 #define MSG_ZSTEPS                          "Z passo/mm"
127
 #define MSG_CARD_MENU                       "Imprimir do SD"
130
 #define MSG_CARD_MENU                       "Imprimir do SD"
128
 #define MSG_NO_CARD                         "Sem cartão SD"
131
 #define MSG_NO_CARD                         "Sem cartão SD"
129
 #define MSG_DWELL                           "Em espera..."
132
 #define MSG_DWELL                           "Em espera..."
130
-#define MSG_USERWAIT                        "A espera de ordem"
133
+#define MSG_USERWAIT                        "Á espera de ordem"
131
 #define MSG_RESUMING                        "Retomando impressão"
134
 #define MSG_RESUMING                        "Retomando impressão"
132
 #define MSG_PRINT_ABORTED                   "Impressão cancelada"
135
 #define MSG_PRINT_ABORTED                   "Impressão cancelada"
133
 #define MSG_NO_MOVE                         "Sem movimento"
136
 #define MSG_NO_MOVE                         "Sem movimento"
151
 #define MSG_BABYSTEP_Y                      "Babystep Y"
154
 #define MSG_BABYSTEP_Y                      "Babystep Y"
152
 #define MSG_BABYSTEP_Z                      "Babystep Z"
155
 #define MSG_BABYSTEP_Z                      "Babystep Z"
153
 #define MSG_ENDSTOP_ABORT                   "Fim de curso"
156
 #define MSG_ENDSTOP_ABORT                   "Fim de curso"
157
+#define MSG_HEATING_FAILED_LCD              "Aquecimento falhou"
158
+#define MSG_ERR_REDUNDANT_TEMP              "Err: REDUNDANT TEMP ERROR"
159
+#define MSG_THERMAL_RUNAWAY                 "THERMAL RUNAWAY"
160
+#define MSG_ERR_MAXTEMP                     "Err: T Máxima"
161
+#define MSG_ERR_MINTEMP                     "Err: T Mínima"
162
+#define MSG_ERR_MAXTEMP_BED                 "Err: T Base Máxima"
163
+#define MSG_ERR_MINTEMP_BED                 "Err: T Base Mínima"
154
 #define MSG_END_HOUR                        "horas"
164
 #define MSG_END_HOUR                        "horas"
155
 #define MSG_END_MINUTE                      "minutos"
165
 #define MSG_END_MINUTE                      "minutos"
166
+#define MSG_HEATING                         "Aquecendo..."
167
+#define MSG_HEATING_COMPLETE                "Aquecida."
168
+#define MSG_BED_HEATING                     "Aquecendo base.."
169
+#define MSG_BED_DONE                        "Base aquecida."
156
 
170
 
157
 #if ENABLED(DELTA_CALIBRATION_MENU)
171
 #if ENABLED(DELTA_CALIBRATION_MENU)
158
   #define MSG_DELTA_CALIBRATE             "Calibração Delta"
172
   #define MSG_DELTA_CALIBRATE             "Calibração Delta"

+ 1
- 0
Marlin/language_ru.h View File

45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
45
 #define MSG_LEVEL_BED_HOMING                "Homing XYZ"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
46
 #define MSG_LEVEL_BED_WAITING               "Click to Begin"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
47
 #define MSG_LEVEL_BED_DONE                  "Leveling Done!"
48
+#define MSG_LEVEL_BED_CANCEL                "Cancel"
48
 #define MSG_SET_HOME_OFFSETS                "Запомнить парковку"
49
 #define MSG_SET_HOME_OFFSETS                "Запомнить парковку"
49
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_HOME_OFFSETS_APPLIED            "Offsets applied"
50
 #define MSG_SET_ORIGIN                      "Запомнить ноль"
51
 #define MSG_SET_ORIGIN                      "Запомнить ноль"

+ 2
- 2
Marlin/macros.h View File

24
 #define MACROS_H
24
 #define MACROS_H
25
 
25
 
26
 // Macros to make a string from a macro
26
 // Macros to make a string from a macro
27
-#define STRINGIFY_(n) #n
28
-#define STRINGIFY(n) STRINGIFY_(n)
27
+#define STRINGIFY_(M) #M
28
+#define STRINGIFY(M) STRINGIFY_(M)
29
 
29
 
30
 // Macros for bit masks
30
 // Macros for bit masks
31
 #define TEST(n,b) (((n)&_BV(b))!=0)
31
 #define TEST(n,b) (((n)&_BV(b))!=0)

+ 14
- 32
Marlin/pins.h View File

209
   #endif
209
   #endif
210
 #endif
210
 #endif
211
 
211
 
212
-#if ENABLED(DISABLE_MAX_ENDSTOPS)
213
-  #undef X_MAX_PIN
214
-  #undef Y_MAX_PIN
215
-  #undef Z_MAX_PIN
216
-  #define X_MAX_PIN          -1
217
-  #define Y_MAX_PIN          -1
218
-  #define Z_MAX_PIN          -1
219
-#endif
220
-
221
-#if ENABLED(DISABLE_MIN_ENDSTOPS)
222
-  #undef X_MIN_PIN
223
-  #undef Y_MIN_PIN
224
-  #undef Z_MIN_PIN
225
-  #define X_MIN_PIN          -1
226
-  #define Y_MIN_PIN          -1
227
-  #define Z_MIN_PIN          -1
228
-#endif
229
-
230
 #if ENABLED(DISABLE_Z_MIN_PROBE_ENDSTOP) || DISABLED(Z_MIN_PROBE_ENDSTOP) // Allow code to compile regardless of Z_MIN_PROBE_ENDSTOP setting.
212
 #if ENABLED(DISABLE_Z_MIN_PROBE_ENDSTOP) || DISABLED(Z_MIN_PROBE_ENDSTOP) // Allow code to compile regardless of Z_MIN_PROBE_ENDSTOP setting.
231
   #undef Z_MIN_PROBE_PIN
213
   #undef Z_MIN_PROBE_PIN
232
   #define Z_MIN_PROBE_PIN    -1
214
   #define Z_MIN_PROBE_PIN    -1
233
 #endif
215
 #endif
234
 
216
 
235
-#if ENABLED(DISABLE_XMAX_ENDSTOP)
217
+#if DISABLED(USE_XMAX_PLUG)
236
   #undef X_MAX_PIN
218
   #undef X_MAX_PIN
237
   #define X_MAX_PIN          -1
219
   #define X_MAX_PIN          -1
238
 #endif
220
 #endif
239
 
221
 
240
-#if ENABLED(DISABLE_XMIN_ENDSTOP)
241
-  #undef X_MIN_PIN
242
-  #define X_MIN_PIN          -1
243
-#endif
244
-
245
-#if ENABLED(DISABLE_YMAX_ENDSTOP)
222
+#if DISABLED(USE_YMAX_PLUG)
246
   #undef Y_MAX_PIN
223
   #undef Y_MAX_PIN
247
   #define Y_MAX_PIN          -1
224
   #define Y_MAX_PIN          -1
248
 #endif
225
 #endif
249
 
226
 
250
-#if ENABLED(DISABLE_YMIN_ENDSTOP)
251
-  #undef Y_MIN_PIN
252
-  #define Y_MIN_PIN          -1
253
-#endif
254
-
255
-#if ENABLED(DISABLE_ZMAX_ENDSTOP)
227
+#if DISABLED(USE_ZMAX_PLUG)
256
   #undef Z_MAX_PIN
228
   #undef Z_MAX_PIN
257
   #define Z_MAX_PIN          -1
229
   #define Z_MAX_PIN          -1
258
 #endif
230
 #endif
259
 
231
 
260
-#if ENABLED(DISABLE_ZMIN_ENDSTOP)
232
+#if DISABLED(USE_XMIN_PLUG)
233
+  #undef X_MIN_PIN
234
+  #define X_MIN_PIN          -1
235
+#endif
236
+
237
+#if DISABLED(USE_YMIN_PLUG)
238
+  #undef Y_MIN_PIN
239
+  #define Y_MIN_PIN          -1
240
+#endif
241
+
242
+#if DISABLED(USE_ZMIN_PLUG)
261
   #undef Z_MIN_PIN
243
   #undef Z_MIN_PIN
262
   #define Z_MIN_PIN          -1
244
   #define Z_MIN_PIN          -1
263
 #endif
245
 #endif

+ 0
- 2
Marlin/pins_FELIX2.h View File

29
 #undef HEATER_1_PIN
29
 #undef HEATER_1_PIN
30
 #define HEATER_1_PIN        7 // EXTRUDER 2
30
 #define HEATER_1_PIN        7 // EXTRUDER 2
31
 
31
 
32
-#define DISABLE_MAX_ENDSTOPS
33
-
34
 #undef SDPOWER
32
 #undef SDPOWER
35
 #define SDPOWER             1
33
 #define SDPOWER             1
36
 
34
 

+ 1
- 1
Marlin/pins_MEGATRONICS_3.h View File

39
 #define SERVO0_PIN         46 //AUX3-6
39
 #define SERVO0_PIN         46 //AUX3-6
40
 #define SERVO1_PIN         47 //AUX3-5
40
 #define SERVO1_PIN         47 //AUX3-5
41
 #define SERVO2_PIN         48 //AUX3-4
41
 #define SERVO2_PIN         48 //AUX3-4
42
-#define SERVO2_PIN         49 //AUX3-3
42
+#define SERVO3_PIN         49 //AUX3-3
43
 
43
 
44
 #define X_STEP_PIN         58
44
 #define X_STEP_PIN         58
45
 #define X_DIR_PIN          57
45
 #define X_DIR_PIN          57

+ 23
- 14
Marlin/planner.cpp View File

852
   block->nominal_rate = ceil(block->step_event_count * inverse_second); // (step/sec) Always > 0
852
   block->nominal_rate = ceil(block->step_event_count * inverse_second); // (step/sec) Always > 0
853
 
853
 
854
   #if ENABLED(FILAMENT_WIDTH_SENSOR)
854
   #if ENABLED(FILAMENT_WIDTH_SENSOR)
855
+    static float filwidth_e_count = 0, filwidth_delay_dist = 0;
856
+
855
     //FMM update ring buffer used for delay with filament measurements
857
     //FMM update ring buffer used for delay with filament measurements
856
-    if (extruder == FILAMENT_SENSOR_EXTRUDER_NUM && delay_index2 > -1) {  //only for extruder with filament sensor and if ring buffer is initialized
858
+    if (extruder == FILAMENT_SENSOR_EXTRUDER_NUM && filwidth_delay_index2 >= 0) {  //only for extruder with filament sensor and if ring buffer is initialized
859
+
860
+      const int MMD_CM = MAX_MEASUREMENT_DELAY + 1, MMD_MM = MMD_CM * 10;
861
+
862
+      // increment counters with next move in e axis
863
+      filwidth_e_count += delta_mm[E_AXIS];
864
+      filwidth_delay_dist += delta_mm[E_AXIS];
857
 
865
 
858
-      const int MMD = MAX_MEASUREMENT_DELAY + 1, MMD10 = MMD * 10;
866
+      // Only get new measurements on forward E movement
867
+      if (filwidth_e_count > 0.0001) {
859
 
868
 
860
-      delay_dist += delta_mm[E_AXIS];  // increment counter with next move in e axis
861
-      while (delay_dist >= MMD10) delay_dist -= MMD10; // loop around the buffer
862
-      while (delay_dist < 0) delay_dist += MMD10;
869
+        // Loop the delay distance counter (modulus by the mm length)
870
+        while (filwidth_delay_dist >= MMD_MM) filwidth_delay_dist -= MMD_MM;
863
 
871
 
864
-      delay_index1 = delay_dist / 10.0;  // calculate index
865
-      delay_index1 = constrain(delay_index1, 0, MAX_MEASUREMENT_DELAY); // (already constrained above)
872
+        // Convert into an index into the measurement array
873
+        filwidth_delay_index1 = (int)(filwidth_delay_dist / 10.0 + 0.0001);
866
 
874
 
867
-      if (delay_index1 != delay_index2) { // moved index
868
-        int8_t meas_sample = widthFil_to_size_ratio() - 100;  // Subtract 100 to reduce magnitude - to store in a signed char
869
-        while (delay_index1 != delay_index2) {
870
-          // Increment and loop around buffer
871
-          if (++delay_index2 >= MMD) delay_index2 -= MMD;
872
-          delay_index2 = constrain(delay_index2, 0, MAX_MEASUREMENT_DELAY);
873
-          measurement_delay[delay_index2] = meas_sample;
875
+        // If the index has changed (must have gone forward)...
876
+        if (filwidth_delay_index1 != filwidth_delay_index2) {
877
+          filwidth_e_count = 0; // Reset the E movement counter
878
+          int8_t meas_sample = widthFil_to_size_ratio() - 100; // Subtract 100 to reduce magnitude - to store in a signed char
879
+          do {
880
+            filwidth_delay_index2 = (filwidth_delay_index2 + 1) % MMD_CM; // The next unused slot
881
+            measurement_delay[filwidth_delay_index2] = meas_sample;       // Store the measurement
882
+          } while (filwidth_delay_index1 != filwidth_delay_index2);       // More slots to fill?
874
         }
883
         }
875
       }
884
       }
876
     }
885
     }

+ 14
- 0
Marlin/scripts/findMissingTranslations.sh View File

1
+#!/bin/bash
2
+IGNORE_DEFINES="LANGUAGE_EN_H MAPPER_NON SIMULATE_ROMFONT DISPLAY_CHARSET_ISO10646_1 MSG_H1 MSG_H2 MSG_H3 MSG_H4 MSG_MOVE_E1 MSG_MOVE_E2 MSG_MOVE_E3 MSG_MOVE_E4 MSG_N1 MSG_N2 MSG_N3 MSG_N4 MSG_DIAM_E1 MSG_DIAM_E2 MSG_DIAM_E3 MSG_DIAM_E4 MSG_E1 MSG_E2 MSG_E3 MSG_E4"
3
+
4
+for i in `awk '/#define/{print $2}' language_en.h`; do
5
+  for j in `ls language_*.h | grep -v language_en.h`; do
6
+    t=$(grep -c "${i}" ${j})
7
+    if [ "$t" -eq 0 ]; then
8
+      for k in ${IGNORE_DEFINES}; do
9
+        [ "${k}" == "${i}" ] && continue 2;
10
+      done
11
+      echo "${j},${i}"
12
+    fi
13
+  done
14
+done

+ 4
- 4
Marlin/stepper.cpp View File

294
     SERIAL_ECHO_START;
294
     SERIAL_ECHO_START;
295
     SERIAL_ECHOPGM(MSG_ENDSTOPS_HIT);
295
     SERIAL_ECHOPGM(MSG_ENDSTOPS_HIT);
296
     if (TEST(endstop_hit_bits, X_MIN)) {
296
     if (TEST(endstop_hit_bits, X_MIN)) {
297
-      SERIAL_ECHOPAIR(" X:", (float)endstops_trigsteps[X_AXIS] / axis_steps_per_unit[X_AXIS]);
297
+      SERIAL_ECHOPAIR(" X:", endstops_trigsteps[X_AXIS] / axis_steps_per_unit[X_AXIS]);
298
       LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "X");
298
       LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "X");
299
     }
299
     }
300
     if (TEST(endstop_hit_bits, Y_MIN)) {
300
     if (TEST(endstop_hit_bits, Y_MIN)) {
301
-      SERIAL_ECHOPAIR(" Y:", (float)endstops_trigsteps[Y_AXIS] / axis_steps_per_unit[Y_AXIS]);
301
+      SERIAL_ECHOPAIR(" Y:", endstops_trigsteps[Y_AXIS] / axis_steps_per_unit[Y_AXIS]);
302
       LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "Y");
302
       LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "Y");
303
     }
303
     }
304
     if (TEST(endstop_hit_bits, Z_MIN)) {
304
     if (TEST(endstop_hit_bits, Z_MIN)) {
305
-      SERIAL_ECHOPAIR(" Z:", (float)endstops_trigsteps[Z_AXIS] / axis_steps_per_unit[Z_AXIS]);
305
+      SERIAL_ECHOPAIR(" Z:", endstops_trigsteps[Z_AXIS] / axis_steps_per_unit[Z_AXIS]);
306
       LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "Z");
306
       LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "Z");
307
     }
307
     }
308
     #if ENABLED(Z_MIN_PROBE_ENDSTOP)
308
     #if ENABLED(Z_MIN_PROBE_ENDSTOP)
309
       if (TEST(endstop_hit_bits, Z_MIN_PROBE)) {
309
       if (TEST(endstop_hit_bits, Z_MIN_PROBE)) {
310
-        SERIAL_ECHOPAIR(" Z_MIN_PROBE:", (float)endstops_trigsteps[Z_AXIS] / axis_steps_per_unit[Z_AXIS]);
310
+        SERIAL_ECHOPAIR(" Z_MIN_PROBE:", endstops_trigsteps[Z_AXIS] / axis_steps_per_unit[Z_AXIS]);
311
         LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "ZP");
311
         LCD_MESSAGEPGM(MSG_ENDSTOPS_HIT "ZP");
312
       }
312
       }
313
     #endif
313
     #endif

+ 77
- 0
Marlin/stopwatch.cpp View File

1
+/*
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
4
+ *
5
+ * Based on Sprinter and grbl.
6
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
7
+ *
8
+ * This program is free software: you can redistribute it and/or modify
9
+ * it under the terms of the GNU General Public License as published by
10
+ * the Free Software Foundation, either version 3 of the License, or
11
+ * (at your option) any later version.
12
+ *
13
+ * This program is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
+ * GNU General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU General Public License
19
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
+ *
21
+ */
22
+
23
+#include "Marlin.h"
24
+#include "stopwatch.h"
25
+
26
+Stopwatch::Stopwatch() {
27
+   this->reset();
28
+ }
29
+
30
+void Stopwatch::stop() {
31
+  if (DEBUGGING(INFO)) SERIAL_ECHOLNPGM("Stopwatch::stop()");
32
+  if (!this->isRunning()) return;
33
+
34
+  this->status = STPWTCH_STOPPED;
35
+  this->stopTimestamp = millis();
36
+}
37
+
38
+void Stopwatch::pause() {
39
+  if (DEBUGGING(INFO)) SERIAL_ECHOLNPGM("Stopwatch::pause()");
40
+  if (!this->isRunning()) return;
41
+
42
+  this->status = STPWTCH_PAUSED;
43
+  this->stopTimestamp = millis();
44
+}
45
+
46
+void Stopwatch::start() {
47
+  if (DEBUGGING(INFO)) SERIAL_ECHOLNPGM("Stopwatch::start()");
48
+  if (this->isRunning()) return;
49
+
50
+  if (this->isPaused()) this->accumulator = this->duration();
51
+  else this->reset();
52
+
53
+  this->status = STPWTCH_RUNNING;
54
+  this->startTimestamp = millis();
55
+}
56
+
57
+void Stopwatch::reset() {
58
+  if (DEBUGGING(INFO)) SERIAL_ECHOLNPGM("Stopwatch::reset()");
59
+
60
+  this->status = STPWTCH_STOPPED;
61
+  this->startTimestamp = 0;
62
+  this->stopTimestamp = 0;
63
+  this->accumulator = 0;
64
+}
65
+
66
+bool Stopwatch::isRunning() {
67
+  return (this->status == STPWTCH_RUNNING) ? true : false;
68
+}
69
+
70
+bool Stopwatch::isPaused() {
71
+  return (this->status == STPWTCH_PAUSED) ? true : false;
72
+}
73
+
74
+uint16_t Stopwatch::duration() {
75
+  return (((this->isRunning()) ? millis() : this->stopTimestamp)
76
+          - this->startTimestamp) / 1000 + this->accumulator;
77
+}

+ 99
- 0
Marlin/stopwatch.h View File

1
+/*
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
4
+ *
5
+ * Based on Sprinter and grbl.
6
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
7
+ *
8
+ * This program is free software: you can redistribute it and/or modify
9
+ * it under the terms of the GNU General Public License as published by
10
+ * the Free Software Foundation, either version 3 of the License, or
11
+ * (at your option) any later version.
12
+ *
13
+ * This program is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
+ * GNU General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU General Public License
19
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
+ *
21
+ */
22
+
23
+#ifndef STOPWATCH_H
24
+#define STOPWATCH_H
25
+
26
+enum StopwatchStatus {
27
+  STPWTCH_STOPPED = 0x0,
28
+  STPWTCH_RUNNING = 0x1,
29
+  STPWTCH_PAUSED  = 0x2
30
+};
31
+
32
+/**
33
+ * @brief Stopwatch class
34
+ * @details This class acts as a timer proving stopwatch functionality including
35
+ * the ability to pause the running time counter.
36
+ */
37
+class Stopwatch {
38
+  private:
39
+    StopwatchStatus status;
40
+    uint16_t accumulator;
41
+    uint32_t startTimestamp;
42
+    uint32_t stopTimestamp;
43
+
44
+  public:
45
+    /**
46
+     * @brief Class constructor
47
+     */
48
+    Stopwatch();
49
+
50
+    /**
51
+     * @brief Stops the stopwatch
52
+     * @details Stops the running timer, it will silently ignore the request if
53
+     * no timer is currently running.
54
+     */
55
+    void stop();
56
+
57
+    /**
58
+     * @brief Pauses the stopwatch
59
+     * @details Pauses the running timer, it will silently ignore the request if
60
+     * no timer is currently running.
61
+     */
62
+    void pause();
63
+
64
+    /**
65
+     * @brief Starts the stopwatch
66
+     * @details Starts the timer, it will silently ignore the request if the
67
+     * timer is already running.
68
+     */
69
+    void start();
70
+
71
+    /**
72
+     * @brief Resets the stopwatch
73
+     * @details Resets all settings to their default values.
74
+     */
75
+    void reset();
76
+
77
+    /**
78
+     * @brief Checks if the timer is running
79
+     * @details Returns true if the timer is currently running, false otherwise.
80
+     * @return bool
81
+     */
82
+    bool isRunning();
83
+
84
+    /**
85
+     * @brief Checks if the timer is paused
86
+     * @details Returns true if the timer is currently paused, false otherwise.
87
+     * @return bool
88
+     */
89
+    bool isPaused();
90
+
91
+    /**
92
+     * @brief Gets the running time
93
+     * @details Returns the total number of seconds the timer has been running.
94
+     * @return uint16_t
95
+     */
96
+    uint16_t duration();
97
+};
98
+
99
+#endif //STOPWATCH_H

+ 4
- 4
Marlin/temperature.cpp View File

350
     }
350
     }
351
     // Every 2 seconds...
351
     // Every 2 seconds...
352
     if (ms > temp_ms + 2000) {
352
     if (ms > temp_ms + 2000) {
353
-      #if HAS_TEMP_0 || HAS_TEMP_BED || ENABLED(HEATER_0_USES_MAX6675)
353
+      #if HAS_TEMP_HOTEND || HAS_TEMP_BED
354
         print_heaterstates();
354
         print_heaterstates();
355
         SERIAL_EOL;
355
         SERIAL_EOL;
356
       #endif
356
       #endif
705
   // Control the extruder rate based on the width sensor
705
   // Control the extruder rate based on the width sensor
706
   #if ENABLED(FILAMENT_WIDTH_SENSOR)
706
   #if ENABLED(FILAMENT_WIDTH_SENSOR)
707
     if (filament_sensor) {
707
     if (filament_sensor) {
708
-      meas_shift_index = delay_index1 - meas_delay_cm;
708
+      meas_shift_index = filwidth_delay_index1 - meas_delay_cm;
709
       if (meas_shift_index < 0) meas_shift_index += MAX_MEASUREMENT_DELAY + 1;  //loop around buffer if needed
709
       if (meas_shift_index < 0) meas_shift_index += MAX_MEASUREMENT_DELAY + 1;  //loop around buffer if needed
710
 
710
 
711
       // Get the delayed info and add 100 to reconstitute to a percent of
711
       // Get the delayed info and add 100 to reconstitute to a percent of
1175
   setTargetBed(0);
1175
   setTargetBed(0);
1176
 
1176
 
1177
   // If all heaters go down then for sure our print job has stopped
1177
   // If all heaters go down then for sure our print job has stopped
1178
-  print_job_stop(true);
1178
+  print_job_timer.stop();
1179
 
1179
 
1180
   #define DISABLE_HEATER(NR) { \
1180
   #define DISABLE_HEATER(NR) { \
1181
     setTargetHotend(NR, 0); \
1181
     setTargetHotend(NR, 0); \
1183
     WRITE_HEATER_ ## NR (LOW); \
1183
     WRITE_HEATER_ ## NR (LOW); \
1184
   }
1184
   }
1185
 
1185
 
1186
-  #if HAS_TEMP_0 || ENABLED(HEATER_0_USES_MAX6675)
1186
+  #if HAS_TEMP_HOTEND
1187
     setTargetHotend(0, 0);
1187
     setTargetHotend(0, 0);
1188
     soft_pwm[0] = 0;
1188
     soft_pwm[0] = 0;
1189
     WRITE_HEATER_0P(LOW); // Should HEATERS_PARALLEL apply here? Then change to DISABLE_HEATER(0)
1189
     WRITE_HEATER_0P(LOW); // Should HEATERS_PARALLEL apply here? Then change to DISABLE_HEATER(0)

+ 1
- 1
Marlin/temperature.h View File

83
 
83
 
84
   #if ENABLED(PID_PARAMS_PER_EXTRUDER)
84
   #if ENABLED(PID_PARAMS_PER_EXTRUDER)
85
     extern float Kp[EXTRUDERS], Ki[EXTRUDERS], Kd[EXTRUDERS], Kc[EXTRUDERS]; // one param per extruder
85
     extern float Kp[EXTRUDERS], Ki[EXTRUDERS], Kd[EXTRUDERS], Kc[EXTRUDERS]; // one param per extruder
86
-    #define PID_PARAM(param,e) param[e] // use macro to point to array value
86
+    #define PID_PARAM(param, e) param[e] // use macro to point to array value
87
   #else
87
   #else
88
     extern float Kp, Ki, Kd, Kc; // one param per extruder - saves 20 or 36 bytes of ram (inc array pointer)
88
     extern float Kp, Ki, Kd, Kc; // one param per extruder - saves 20 or 36 bytes of ram (inc array pointer)
89
     #define PID_PARAM(param, e) param // use macro to point directly to value
89
     #define PID_PARAM(param, e) param // use macro to point directly to value

+ 104
- 0
Marlin/twibus.cpp View File

1
+/*
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
4
+ *
5
+ * Based on Sprinter and grbl.
6
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
7
+ *
8
+ * This program is free software: you can redistribute it and/or modify
9
+ * it under the terms of the GNU General Public License as published by
10
+ * the Free Software Foundation, either version 3 of the License, or
11
+ * (at your option) any later version.
12
+ *
13
+ * This program is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
+ * GNU General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU General Public License
19
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
+ *
21
+ */
22
+
23
+#include "Marlin.h"
24
+
25
+#if ENABLED(EXPERIMENTAL_I2CBUS)
26
+
27
+#include "twibus.h"
28
+
29
+#include <Wire.h>
30
+
31
+TWIBus::twibus() {
32
+  Wire.begin(); // We use no address so we will join the BUS as the master
33
+  this->reset();
34
+}
35
+
36
+void TWIBus::reset() {
37
+  this->addr = 0;
38
+  this->buffer_s = 0;
39
+  this->buffer[0] = 0x00;
40
+}
41
+
42
+void TWIBus::address(uint8_t addr) {
43
+  this->addr = addr;
44
+
45
+  if (DEBUGGING(INFO)) {
46
+    SERIAL_ECHOPAIR("TWIBus::sendto: ", this->addr);
47
+    SERIAL_EOL;
48
+  }
49
+}
50
+
51
+void TWIBus::addbyte(char c) {
52
+  if (buffer_s >= sizeof(this->buffer)) return;
53
+  this->buffer[this->buffer_s++] = c;
54
+
55
+  if (DEBUGGING(INFO)) {
56
+    SERIAL_ECHOPAIR("TWIBus::addbyte: ", this->buffer[this->buffer_s -1]);
57
+    SERIAL_EOL;
58
+  }
59
+}
60
+
61
+void TWIBus::send() {
62
+  if (!this->addr) return;
63
+  if (DEBUGGING(INFO)) SERIAL_ECHOLNPGM("TWIBus::send()");
64
+
65
+  Wire.beginTransmission(this->addr);
66
+  Wire.write(this->buffer, this->buffer_s);
67
+  Wire.endTransmission();
68
+
69
+    // Reset the buffer after sending the data
70
+  this->reset();
71
+}
72
+
73
+void TWIBus::reqbytes(uint8_t bytes) {
74
+  if (!this->addr) return;
75
+  if (DEBUGGING(INFO)) {
76
+    SERIAL_ECHOPAIR("TWIBus::reqbytes(): ", bytes);
77
+    SERIAL_EOL;
78
+  }
79
+
80
+  millis_t t = millis();
81
+  Wire.requestFrom(this->addr, bytes);
82
+
83
+    // requestFrom() is a blocking function
84
+  while (Wire.available() < bytes) {
85
+    if (millis() - t >= this->timeout) break;
86
+    else continue;
87
+  }
88
+
89
+  SERIAL_ECHO_START;
90
+  SERIAL_ECHOPAIR("i2c-reply: from:", this->addr);
91
+  SERIAL_ECHOPAIR(" bytes:", Wire.available());
92
+  SERIAL_ECHOPGM (" data:");
93
+
94
+    // Protect against buffer overflows if the number of received bytes
95
+    // is less than the number of requested bytes
96
+  uint8_t wba = Wire.available();
97
+  for (int i = 0; i < wba; i++) SERIAL_CHAR(Wire.read());
98
+  SERIAL_EOL;
99
+
100
+  // Reset the buffer after sending the data
101
+  this->reset();
102
+}
103
+
104
+#endif //EXPERIMENTAL_I2CBUS

+ 122
- 0
Marlin/twibus.h View File

1
+/*
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
4
+ *
5
+ * Based on Sprinter and grbl.
6
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
7
+ *
8
+ * This program is free software: you can redistribute it and/or modify
9
+ * it under the terms of the GNU General Public License as published by
10
+ * the Free Software Foundation, either version 3 of the License, or
11
+ * (at your option) any later version.
12
+ *
13
+ * This program is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
+ * GNU General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU General Public License
19
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
+ *
21
+ */
22
+
23
+#ifndef TWIBUS_H
24
+#define TWIBUS_H
25
+
26
+/**
27
+ * TWIBUS class
28
+ *
29
+ * This class implements a wrapper around the two wire (I2C) bus, it allows
30
+ * Marlin to send and request data from any slave device on the bus. This is
31
+ * an experimental feature and it's inner workings as well as public facing
32
+ * interface are prune to change in the future.
33
+ *
34
+ * The two main consumers of this class are M155 and M156, where M155 allows
35
+ * Marlin to send a I2C packet to a device (please be aware that no repeated
36
+ * starts are possible), this can be done in caching method by calling multiple
37
+ * times M155 B<byte-1 value in base 10> or a one liner M155, have a look at
38
+ * the gcode_M155() function for more information. M156 allows Marlin to
39
+ * request data from a device, the received data is then relayed into the serial
40
+ * line for host interpretation.
41
+ *
42
+ */
43
+class TWIBus {
44
+  private:
45
+    /**
46
+     * @brief Timeout value in milliseconds
47
+     * @details For blocking operations this constant value will set the max
48
+     * amount of time Marlin will keep waiting for a reply. Useful is something
49
+     * goes wrong on the bus and the SDA/SCL lines are held up by another device.
50
+     */
51
+    const int timeout = 5;
52
+
53
+    /**
54
+     * @brief Target device address
55
+     * @description This stores, until the buffer is flushed, the target device
56
+     * address, take not we do follow Arduino 7bit addressing.
57
+     */
58
+    uint8_t addr = 0;
59
+
60
+    /**
61
+     * @brief Number of bytes on buffer
62
+     * @description This var holds the total number of bytes on our buffer
63
+     * waiting to be flushed to the bus.
64
+     */
65
+    uint8_t buffer_s = 0;
66
+
67
+    /**
68
+     * @brief Internal buffer
69
+     * @details This is a fixed buffer, TWI command cannot be longer than this
70
+     */
71
+    char buffer[30];
72
+
73
+
74
+  public:
75
+    /**
76
+     * @brief Class constructor
77
+     * @details Initialized the TWI bus and clears the buffer
78
+     */
79
+    TWIBus();
80
+
81
+    /**
82
+     * @brief Reset the buffer
83
+     * @details Brings the internal buffer to a known-empty state
84
+     */
85
+    void reset();
86
+
87
+    /**
88
+     * @brief Send the buffer data to the bus
89
+     * @details Flushed the buffer into the bus targeting the cached slave device
90
+     * address.
91
+     */
92
+    void send();
93
+
94
+    /**
95
+     * @brief Add one byte to the buffer
96
+     * @details Adds the byte to the buffer in a sequential way, if buffer is full
97
+     * the request is silently ignored.
98
+     *
99
+     * @param c a data byte
100
+     */
101
+    void addbyte(char c);
102
+
103
+    /**
104
+     * @brief Sets the target slave address
105
+     * @details The target slave address is stored so it can be later used when
106
+     * the complete packet needs to be sent over the bus.
107
+     *
108
+     * @param addr 7-bit integer address
109
+     */
110
+    void address(uint8_t addr);
111
+
112
+    /**
113
+     * @brief Request data from slave device
114
+     * @details Requests data from a slave device, when the data is received it will
115
+     * be relayed to the serial line using a parser-friendly formatting.
116
+     *
117
+     * @param bytes the number of bytes to request
118
+     */
119
+    void reqbytes(uint8_t bytes);
120
+};
121
+
122
+#endif //TWIBUS_H

+ 313
- 240
Marlin/ultralcd.cpp View File

111
 
111
 
112
   #if ENABLED(MANUAL_BED_LEVELING)
112
   #if ENABLED(MANUAL_BED_LEVELING)
113
     #include "mesh_bed_leveling.h"
113
     #include "mesh_bed_leveling.h"
114
-    static void _lcd_level_bed();
115
-    static void _lcd_level_bed_homing();
116
-    static void lcd_level_bed();
117
   #endif
114
   #endif
118
 
115
 
119
   /* Different types of actions that can be used in menu items. */
116
   /* Different types of actions that can be used in menu items. */
120
-  static void menu_action_back(menuFunc_t data);
117
+  static void menu_action_back();
121
   static void menu_action_submenu(menuFunc_t data);
118
   static void menu_action_submenu(menuFunc_t data);
122
   static void menu_action_gcode(const char* pgcode);
119
   static void menu_action_gcode(const char* pgcode);
123
   static void menu_action_function(menuFunc_t data);
120
   static void menu_action_function(menuFunc_t data);
188
    *   menu_action_[type](arg3...)
185
    *   menu_action_[type](arg3...)
189
    *
186
    *
190
    * Examples:
187
    * Examples:
191
-   *   MENU_ITEM(back, MSG_WATCH, lcd_status_screen)
192
-   *     lcd_implementation_drawmenu_back(sel, row, PSTR(MSG_WATCH), lcd_status_screen)
193
-   *     menu_action_back(lcd_status_screen)
188
+   *   MENU_ITEM(back, MSG_WATCH)
189
+   *     lcd_implementation_drawmenu_back(sel, row, PSTR(MSG_WATCH))
190
+   *     menu_action_back()
194
    *
191
    *
195
    *   MENU_ITEM(function, MSG_PAUSE_PRINT, lcd_sdcard_pause)
192
    *   MENU_ITEM(function, MSG_PAUSE_PRINT, lcd_sdcard_pause)
196
    *     lcd_implementation_drawmenu_function(sel, row, PSTR(MSG_PAUSE_PRINT), lcd_sdcard_pause)
193
    *     lcd_implementation_drawmenu_function(sel, row, PSTR(MSG_PAUSE_PRINT), lcd_sdcard_pause)
267
   uint8_t currentMenuViewOffset;              /* scroll offset in the current menu */
264
   uint8_t currentMenuViewOffset;              /* scroll offset in the current menu */
268
   millis_t next_button_update_ms;
265
   millis_t next_button_update_ms;
269
   uint8_t lastEncoderBits;
266
   uint8_t lastEncoderBits;
270
-  uint32_t encoderPosition, prevEncoderPosition;
267
+  uint32_t encoderPosition;
271
   #if PIN_EXISTS(SD_DETECT)
268
   #if PIN_EXISTS(SD_DETECT)
272
     uint8_t lcd_sd_status;
269
     uint8_t lcd_sd_status;
273
   #endif
270
   #endif
274
 
271
 
275
 #endif // ULTIPANEL
272
 #endif // ULTIPANEL
276
 
273
 
277
-menuFunc_t currentMenu = lcd_status_screen; /* function pointer to the currently active menu */
274
+typedef struct {
275
+  menuFunc_t menu_function;
276
+  #if ENABLED(ULTIPANEL)
277
+    uint32_t encoder_position;
278
+  #endif
279
+} menuPosition;
280
+
281
+menuFunc_t currentMenu = lcd_status_screen; // pointer to the currently active menu handler
282
+
283
+menuPosition menu_history[10];
284
+uint8_t menu_history_depth = 0;
285
+
278
 millis_t next_lcd_update_ms;
286
 millis_t next_lcd_update_ms;
279
 uint8_t lcd_status_update_delay;
287
 uint8_t lcd_status_update_delay;
280
 bool ignore_click = false;
288
 bool ignore_click = false;
285
   LCD_DRAW_UPDATE_NONE,
293
   LCD_DRAW_UPDATE_NONE,
286
   LCD_DRAW_UPDATE_CALL_REDRAW,
294
   LCD_DRAW_UPDATE_CALL_REDRAW,
287
   LCD_DRAW_UPDATE_CLEAR_CALL_REDRAW,
295
   LCD_DRAW_UPDATE_CLEAR_CALL_REDRAW,
288
-  LCD_DRAW_UPDATE_CALL_NO_REDRAW,
296
+  LCD_DRAW_UPDATE_CALL_NO_REDRAW
289
 };
297
 };
290
 
298
 
291
 uint8_t lcdDrawUpdate = LCD_DRAW_UPDATE_CLEAR_CALL_REDRAW; // Set 1 or 2 when the LCD needs to draw, decrements after every draw. Set to 2 in LCD routines so the LCD gets at least 1 full redraw (first redraw is partial)
299
 uint8_t lcdDrawUpdate = LCD_DRAW_UPDATE_CLEAR_CALL_REDRAW; // Set 1 or 2 when the LCD needs to draw, decrements after every draw. Set to 2 in LCD routines so the LCD gets at least 1 full redraw (first redraw is partial)
294
 const char* editLabel;
302
 const char* editLabel;
295
 void* editValue;
303
 void* editValue;
296
 int32_t minEditValue, maxEditValue;
304
 int32_t minEditValue, maxEditValue;
297
-menuFunc_t prevMenu = NULL;           // return here after editing (also prevEncoderPosition)
298
 menuFunc_t callbackFunc;              // call this after editing
305
 menuFunc_t callbackFunc;              // call this after editing
299
 
306
 
300
 // place-holders for Ki and Kd edits
307
 // place-holders for Ki and Kd edits
302
 
309
 
303
 /**
310
 /**
304
  * General function to go directly to a menu
311
  * General function to go directly to a menu
312
+ * Remembers the previous position
305
  */
313
  */
306
 static void lcd_goto_menu(menuFunc_t menu, const bool feedback = false, const uint32_t encoder = 0) {
314
 static void lcd_goto_menu(menuFunc_t menu, const bool feedback = false, const uint32_t encoder = 0) {
307
   if (currentMenu != menu) {
315
   if (currentMenu != menu) {
311
       encoderPosition = encoder;
319
       encoderPosition = encoder;
312
       if (feedback) lcd_quick_feedback();
320
       if (feedback) lcd_quick_feedback();
313
     #endif
321
     #endif
314
-    // For LCD_PROGRESS_BAR re-initialize the custom characters
322
+    if (menu == lcd_status_screen) {
323
+      defer_return_to_status = false;
324
+      menu_history_depth = 0;
325
+    }
315
     #if ENABLED(LCD_PROGRESS_BAR)
326
     #if ENABLED(LCD_PROGRESS_BAR)
327
+      // For LCD_PROGRESS_BAR re-initialize custom characters
316
       lcd_set_custom_characters(menu == lcd_status_screen);
328
       lcd_set_custom_characters(menu == lcd_status_screen);
317
     #endif
329
     #endif
318
   }
330
   }
319
 }
331
 }
320
 
332
 
321
-inline void lcd_save_previous_menu() {
322
-  prevMenu = currentMenu;
323
-  #if ENABLED(ULTIPANEL)
324
-    prevEncoderPosition = encoderPosition;
325
-  #endif
326
-}
333
+static void lcd_return_to_status() { lcd_goto_menu(lcd_status_screen); }
327
 
334
 
328
-static void lcd_goto_previous_menu() {
329
-  lcd_goto_menu(prevMenu, true
335
+inline void lcd_save_previous_menu() {
336
+  if (menu_history_depth < COUNT(menu_history)) {
337
+    menu_history[menu_history_depth].menu_function = currentMenu;
330
     #if ENABLED(ULTIPANEL)
338
     #if ENABLED(ULTIPANEL)
331
-      , prevEncoderPosition
339
+      menu_history[menu_history_depth].encoder_position = encoderPosition;
332
     #endif
340
     #endif
333
-  );
341
+    ++menu_history_depth;
342
+  }
343
+}
344
+
345
+static void lcd_goto_previous_menu(bool feedback=false) {
346
+  if (menu_history_depth > 0) {
347
+    --menu_history_depth;
348
+    lcd_goto_menu(menu_history[menu_history_depth].menu_function, feedback
349
+      #if ENABLED(ULTIPANEL)
350
+        , menu_history[menu_history_depth].encoder_position
351
+      #endif
352
+    );
353
+  }
354
+  else
355
+    lcd_return_to_status();
334
 }
356
 }
335
 
357
 
336
 /**
358
 /**
410
     }
432
     }
411
 
433
 
412
     #if ENABLED(ULTIPANEL_FEEDMULTIPLY)
434
     #if ENABLED(ULTIPANEL_FEEDMULTIPLY)
435
+      int new_frm = feedrate_multiplier + int(encoderPosition);
413
       // Dead zone at 100% feedrate
436
       // Dead zone at 100% feedrate
414
-      if ((feedrate_multiplier < 100 && (feedrate_multiplier + int(encoderPosition)) > 100) ||
415
-          (feedrate_multiplier > 100 && (feedrate_multiplier + int(encoderPosition)) < 100)) {
416
-        encoderPosition = 0;
437
+      if ((feedrate_multiplier < 100 && new_frm > 100) || (feedrate_multiplier > 100 && new_frm < 100)) {
417
         feedrate_multiplier = 100;
438
         feedrate_multiplier = 100;
439
+        encoderPosition = 0;
418
       }
440
       }
419
-      if (feedrate_multiplier == 100) {
441
+      else if (feedrate_multiplier == 100) {
420
         if (int(encoderPosition) > ENCODER_FEEDRATE_DEADZONE) {
442
         if (int(encoderPosition) > ENCODER_FEEDRATE_DEADZONE) {
421
           feedrate_multiplier += int(encoderPosition) - (ENCODER_FEEDRATE_DEADZONE);
443
           feedrate_multiplier += int(encoderPosition) - (ENCODER_FEEDRATE_DEADZONE);
422
           encoderPosition = 0;
444
           encoderPosition = 0;
427
         }
449
         }
428
       }
450
       }
429
       else {
451
       else {
430
-        feedrate_multiplier += int(encoderPosition);
452
+        feedrate_multiplier = new_frm;
431
         encoderPosition = 0;
453
         encoderPosition = 0;
432
       }
454
       }
433
     #endif // ULTIPANEL_FEEDMULTIPLY
455
     #endif // ULTIPANEL_FEEDMULTIPLY
439
 
461
 
440
 #if ENABLED(ULTIPANEL)
462
 #if ENABLED(ULTIPANEL)
441
 
463
 
442
-static void lcd_return_to_status() {
443
-  defer_return_to_status = false;
444
-  lcd_goto_menu(lcd_status_screen);
464
+inline void line_to_current(AxisEnum axis) {
465
+  #if ENABLED(DELTA)
466
+    calculate_delta(current_position);
467
+    plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], current_position[E_AXIS], manual_feedrate[axis]/60, active_extruder);
468
+  #else
469
+    plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], manual_feedrate[axis]/60, active_extruder);
470
+  #endif
445
 }
471
 }
446
 
472
 
447
 #if ENABLED(SDSUPPORT)
473
 #if ENABLED(SDSUPPORT)
469
 
495
 
470
 static void lcd_main_menu() {
496
 static void lcd_main_menu() {
471
   START_MENU();
497
   START_MENU();
472
-  MENU_ITEM(back, MSG_WATCH, lcd_status_screen);
498
+  MENU_ITEM(back, MSG_WATCH);
473
   if (movesplanned() || IS_SD_PRINTING) {
499
   if (movesplanned() || IS_SD_PRINTING) {
474
     MENU_ITEM(submenu, MSG_TUNE, lcd_tune_menu);
500
     MENU_ITEM(submenu, MSG_TUNE, lcd_tune_menu);
475
   }
501
   }
508
   END_MENU();
534
   END_MENU();
509
 }
535
 }
510
 
536
 
511
-#if ENABLED(SDSUPPORT) && ENABLED(MENU_ADDAUTOSTART)
512
-  static void lcd_autostart_sd() {
513
-    card.autostart_index = 0;
514
-    card.setroot();
515
-    card.checkautostart(true);
516
-  }
517
-#endif
537
+/**
538
+ *
539
+ * "Tune" submenu items
540
+ *
541
+ */
518
 
542
 
519
 /**
543
 /**
520
  * Set the home offset based on the current_position
544
  * Set the home offset based on the current_position
529
 
553
 
530
   static void _lcd_babystep(const int axis, const char* msg) {
554
   static void _lcd_babystep(const int axis, const char* msg) {
531
     ENCODER_DIRECTION_NORMAL();
555
     ENCODER_DIRECTION_NORMAL();
532
-    if (encoderPosition != 0) {
556
+    if (encoderPosition) {
533
       int distance =  (int)encoderPosition * BABYSTEP_MULTIPLICATOR;
557
       int distance =  (int)encoderPosition * BABYSTEP_MULTIPLICATOR;
534
       encoderPosition = 0;
558
       encoderPosition = 0;
535
       lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_REDRAW;
559
       lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_REDRAW;
559
       #endif
583
       #endif
560
     }
584
     }
561
     if (lcdDrawUpdate) lcd_implementation_drawedit(msg, NULL);
585
     if (lcdDrawUpdate) lcd_implementation_drawedit(msg, NULL);
562
-    if (LCD_CLICKED) lcd_goto_previous_menu();
586
+    if (LCD_CLICKED) lcd_goto_previous_menu(true);
563
   }
587
   }
564
 
588
 
565
   #if ENABLED(BABYSTEP_XY)
589
   #if ENABLED(BABYSTEP_XY)
612
   //
636
   //
613
   // ^ Main
637
   // ^ Main
614
   //
638
   //
615
-  MENU_ITEM(back, MSG_MAIN, lcd_main_menu);
639
+  MENU_ITEM(back, MSG_MAIN);
616
 
640
 
617
   //
641
   //
618
   // Speed:
642
   // Speed:
722
   END_MENU();
746
   END_MENU();
723
 }
747
 }
724
 
748
 
749
+/**
750
+ *
751
+ * "Prepare" submenu items
752
+ *
753
+ */
725
 void _lcd_preheat(int endnum, const float temph, const float tempb, const int fan) {
754
 void _lcd_preheat(int endnum, const float temph, const float tempb, const int fan) {
726
   if (temph > 0) setTargetHotend(temph, endnum);
755
   if (temph > 0) setTargetHotend(temph, endnum);
727
   #if TEMP_SENSOR_BED != 0
756
   #if TEMP_SENSOR_BED != 0
728
     setTargetBed(tempb);
757
     setTargetBed(tempb);
758
+  #else
759
+    UNUSED(tempb);
729
   #endif
760
   #endif
730
   #if FAN_COUNT > 0
761
   #if FAN_COUNT > 0
731
     #if FAN_COUNT > 1
762
     #if FAN_COUNT > 1
733
     #else
764
     #else
734
       fanSpeeds[0] = fan;
765
       fanSpeeds[0] = fan;
735
     #endif
766
     #endif
767
+  #else
768
+    UNUSED(fan);
736
   #endif
769
   #endif
737
   lcd_return_to_status();
770
   lcd_return_to_status();
738
 }
771
 }
778
 
811
 
779
   static void lcd_preheat_pla_menu() {
812
   static void lcd_preheat_pla_menu() {
780
     START_MENU();
813
     START_MENU();
781
-    MENU_ITEM(back, MSG_PREPARE, lcd_prepare_menu);
814
+    MENU_ITEM(back, MSG_PREPARE);
782
     #if EXTRUDERS == 1
815
     #if EXTRUDERS == 1
783
       MENU_ITEM(function, MSG_PREHEAT_PLA, lcd_preheat_pla0);
816
       MENU_ITEM(function, MSG_PREHEAT_PLA, lcd_preheat_pla0);
784
     #else
817
     #else
800
 
833
 
801
   static void lcd_preheat_abs_menu() {
834
   static void lcd_preheat_abs_menu() {
802
     START_MENU();
835
     START_MENU();
803
-    MENU_ITEM(back, MSG_PREPARE, lcd_prepare_menu);
836
+    MENU_ITEM(back, MSG_PREPARE);
804
     #if EXTRUDERS == 1
837
     #if EXTRUDERS == 1
805
       MENU_ITEM(function, MSG_PREHEAT_ABS, lcd_preheat_abs0);
838
       MENU_ITEM(function, MSG_PREHEAT_ABS, lcd_preheat_abs0);
806
     #else
839
     #else
830
   lcd_return_to_status();
863
   lcd_return_to_status();
831
 }
864
 }
832
 
865
 
866
+#if ENABLED(SDSUPPORT) && ENABLED(MENU_ADDAUTOSTART)
867
+
868
+  static void lcd_autostart_sd() {
869
+    card.autostart_index = 0;
870
+    card.setroot();
871
+    card.checkautostart(true);
872
+  }
873
+
874
+#endif
875
+
876
+#if ENABLED(MANUAL_BED_LEVELING)
877
+
878
+  /**
879
+   *
880
+   * "Prepare" > "Bed Leveling" handlers
881
+   *
882
+   */
883
+
884
+  static int _lcd_level_bed_position;
885
+
886
+  /**
887
+   * MBL Wait for controller movement and clicks:
888
+   *   - Movement adjusts the Z axis
889
+   *   - Click saves the Z and goes to the next mesh point
890
+   */
891
+  static void _lcd_level_bed_procedure() {
892
+    static bool mbl_wait_for_move = false;
893
+    // Menu handlers may be called in a re-entrant fashion
894
+    // if they call st_synchronize or plan_buffer_line. So
895
+    // while waiting for a move we just ignore new input.
896
+    if (mbl_wait_for_move) {
897
+      lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
898
+      return;
899
+    }
900
+
901
+    ENCODER_DIRECTION_NORMAL();
902
+
903
+    // Encoder wheel adjusts the Z position
904
+    if (encoderPosition && movesplanned() <= 3) {
905
+      refresh_cmd_timeout();
906
+      current_position[Z_AXIS] += float((int)encoderPosition) * (MBL_Z_STEP);
907
+      if (min_software_endstops) NOLESS(current_position[Z_AXIS], Z_MIN_POS);
908
+      if (max_software_endstops) NOMORE(current_position[Z_AXIS], Z_MAX_POS);
909
+      encoderPosition = 0;
910
+      line_to_current(Z_AXIS);
911
+      lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
912
+    }
913
+
914
+    // Update on first display, then only on updates to Z position
915
+    if (lcdDrawUpdate) {
916
+      float v = current_position[Z_AXIS] - MESH_HOME_SEARCH_Z;
917
+      lcd_implementation_drawedit(PSTR(MSG_MOVE_Z), ftostr43(v + (v < 0 ? -0.0001 : 0.0001), '+'));
918
+    }
919
+
920
+    // We want subsequent calls, but don't force redraw
921
+    // Set here so it can be overridden by lcd_return_to_status below
922
+    lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
923
+
924
+    // Click sets the current Z and moves to the next position
925
+    static bool debounce_click = false;
926
+    if (LCD_CLICKED) {
927
+      if (!debounce_click) {
928
+        debounce_click = true; // ignore multiple "clicks" in a row
929
+        int ix = _lcd_level_bed_position % (MESH_NUM_X_POINTS),
930
+            iy = _lcd_level_bed_position / (MESH_NUM_X_POINTS);
931
+        if (iy & 1) ix = (MESH_NUM_X_POINTS - 1) - ix; // Zig zag
932
+        mbl.set_z(ix, iy, current_position[Z_AXIS]);
933
+        _lcd_level_bed_position++;
934
+        if (_lcd_level_bed_position == (MESH_NUM_X_POINTS) * (MESH_NUM_Y_POINTS)) {
935
+          lcd_return_to_status();
936
+          LCD_ALERTMESSAGEPGM(MSG_LEVEL_BED_DONE);
937
+          #if HAS_BUZZER
938
+            buzz(200, 659);
939
+            buzz(200, 698);
940
+          #endif
941
+          current_position[Z_AXIS] = MESH_HOME_SEARCH_Z;
942
+          line_to_current(Z_AXIS);
943
+          st_synchronize();
944
+          mbl.active = 1;
945
+          enqueue_and_echo_commands_P(PSTR("G28"));
946
+        }
947
+        else {
948
+          #if ENABLED(NEWPANEL)
949
+            lcd_quick_feedback();
950
+          #endif
951
+          mbl_wait_for_move = true;
952
+          current_position[Z_AXIS] = MESH_HOME_SEARCH_Z;
953
+          line_to_current(Z_AXIS);
954
+          ix = _lcd_level_bed_position % (MESH_NUM_X_POINTS);
955
+          iy = _lcd_level_bed_position / (MESH_NUM_X_POINTS);
956
+          if (iy & 1) ix = (MESH_NUM_X_POINTS - 1) - ix; // Zig zag
957
+          current_position[X_AXIS] = mbl.get_x(ix);
958
+          current_position[Y_AXIS] = mbl.get_y(iy);
959
+          line_to_current(manual_feedrate[X_AXIS] <= manual_feedrate[Y_AXIS] ? X_AXIS : Y_AXIS);
960
+          st_synchronize();
961
+          mbl_wait_for_move = false;
962
+          encoderPosition = 0;
963
+        }
964
+      }
965
+    }
966
+    else {
967
+      debounce_click = false;
968
+    }
969
+  }
970
+
971
+  static void _lcd_level_bed_homing_done() {
972
+    if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_WAITING), NULL);
973
+    lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
974
+    if (LCD_CLICKED) {
975
+      current_position[Z_AXIS] = MESH_HOME_SEARCH_Z;
976
+      plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
977
+      current_position[X_AXIS] = MESH_MIN_X;
978
+      current_position[Y_AXIS] = MESH_MIN_Y;
979
+      line_to_current(manual_feedrate[X_AXIS] <= manual_feedrate[Y_AXIS] ? X_AXIS : Y_AXIS);
980
+      _lcd_level_bed_position = 0;
981
+      lcd_goto_menu(_lcd_level_bed_procedure, true);
982
+    }
983
+  }
984
+
985
+  /**
986
+   * MBL Move to mesh starting point
987
+   */
988
+  static void _lcd_level_bed_homing() {
989
+    if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_HOMING), NULL);
990
+    lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
991
+    if (axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] && axis_known_position[Z_AXIS])
992
+      lcd_goto_menu(_lcd_level_bed_homing_done);
993
+  }
994
+
995
+  /**
996
+   * MBL Continue Bed Leveling...
997
+   */
998
+  static void _lcd_level_bed_continue() {
999
+    defer_return_to_status = true;
1000
+    axis_known_position[X_AXIS] = axis_known_position[Y_AXIS] = axis_known_position[Z_AXIS] = false;
1001
+    mbl.reset();
1002
+    enqueue_and_echo_commands_P(PSTR("G28"));
1003
+    lcd_goto_menu(_lcd_level_bed_homing);
1004
+  }
1005
+
1006
+  /**
1007
+   * MBL entry-point
1008
+   */
1009
+  static void lcd_level_bed() {
1010
+    START_MENU();
1011
+    MENU_ITEM(back, MSG_LEVEL_BED_CANCEL);
1012
+    MENU_ITEM(submenu, MSG_LEVEL_BED, _lcd_level_bed_continue);
1013
+    END_MENU();
1014
+  }
1015
+
1016
+#endif  // MANUAL_BED_LEVELING
1017
+
833
 /**
1018
 /**
834
  *
1019
  *
835
  * "Prepare" submenu
1020
  * "Prepare" submenu
842
   //
1027
   //
843
   // ^ Main
1028
   // ^ Main
844
   //
1029
   //
845
-  MENU_ITEM(back, MSG_MAIN, lcd_main_menu);
1030
+  MENU_ITEM(back, MSG_MAIN);
846
 
1031
 
847
   //
1032
   //
848
   // Auto Home
1033
   // Auto Home
918
 
1103
 
919
   static void lcd_delta_calibrate_menu() {
1104
   static void lcd_delta_calibrate_menu() {
920
     START_MENU();
1105
     START_MENU();
921
-    MENU_ITEM(back, MSG_MAIN, lcd_main_menu);
1106
+    MENU_ITEM(back, MSG_MAIN);
922
     MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28"));
1107
     MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28"));
923
     MENU_ITEM(gcode, MSG_DELTA_CALIBRATE_X, PSTR("G0 F8000 X-77.94 Y-45 Z0"));
1108
     MENU_ITEM(gcode, MSG_DELTA_CALIBRATE_X, PSTR("G0 F8000 X-77.94 Y-45 Z0"));
924
     MENU_ITEM(gcode, MSG_DELTA_CALIBRATE_Y, PSTR("G0 F8000 X77.94 Y-45 Z0"));
1109
     MENU_ITEM(gcode, MSG_DELTA_CALIBRATE_Y, PSTR("G0 F8000 X77.94 Y-45 Z0"));
929
 
1114
 
930
 #endif // DELTA_CALIBRATION_MENU
1115
 #endif // DELTA_CALIBRATION_MENU
931
 
1116
 
932
-inline void line_to_current(AxisEnum axis) {
933
-  #if ENABLED(DELTA)
934
-    calculate_delta(current_position);
935
-    plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], current_position[E_AXIS], manual_feedrate[axis]/60, active_extruder);
936
-  #else
937
-    plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], manual_feedrate[axis]/60, active_extruder);
938
-  #endif
939
-}
940
-
941
 /**
1117
 /**
942
  *
1118
  *
943
  * "Prepare" > "Move Axis" submenu
1119
  * "Prepare" > "Move Axis" submenu
945
  */
1121
  */
946
 
1122
 
947
 float move_menu_scale;
1123
 float move_menu_scale;
948
-static void lcd_move_menu_axis();
949
 
1124
 
950
-static void _lcd_move(const char* name, AxisEnum axis, int min, int max) {
1125
+static void _lcd_move(const char* name, AxisEnum axis, float min, float max) {
951
   ENCODER_DIRECTION_NORMAL();
1126
   ENCODER_DIRECTION_NORMAL();
952
-  if ((encoderPosition != 0) && (movesplanned() <= 3)) {
1127
+  if (encoderPosition && movesplanned() <= 3) {
953
     refresh_cmd_timeout();
1128
     refresh_cmd_timeout();
954
     current_position[axis] += float((int)encoderPosition) * move_menu_scale;
1129
     current_position[axis] += float((int)encoderPosition) * move_menu_scale;
955
     if (min_software_endstops) NOLESS(current_position[axis], min);
1130
     if (min_software_endstops) NOLESS(current_position[axis], min);
959
     lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_REDRAW;
1134
     lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_REDRAW;
960
   }
1135
   }
961
   if (lcdDrawUpdate) lcd_implementation_drawedit(name, ftostr31(current_position[axis]));
1136
   if (lcdDrawUpdate) lcd_implementation_drawedit(name, ftostr31(current_position[axis]));
962
-  if (LCD_CLICKED) lcd_goto_previous_menu();
1137
+  if (LCD_CLICKED) lcd_goto_previous_menu(true);
963
 }
1138
 }
964
 #if ENABLED(DELTA)
1139
 #if ENABLED(DELTA)
965
   static float delta_clip_radius_2 =  (DELTA_PRINTABLE_RADIUS) * (DELTA_PRINTABLE_RADIUS);
1140
   static float delta_clip_radius_2 =  (DELTA_PRINTABLE_RADIUS) * (DELTA_PRINTABLE_RADIUS);
966
   static int delta_clip( float a ) { return sqrt(delta_clip_radius_2 - a*a); }
1141
   static int delta_clip( float a ) { return sqrt(delta_clip_radius_2 - a*a); }
967
-  static void lcd_move_x() { int clip = delta_clip(current_position[Y_AXIS]); _lcd_move(PSTR(MSG_MOVE_X), X_AXIS, max(X_MIN_POS, -clip), min(X_MAX_POS, clip)); }
968
-  static void lcd_move_y() { int clip = delta_clip(current_position[X_AXIS]); _lcd_move(PSTR(MSG_MOVE_Y), Y_AXIS, max(Y_MIN_POS, -clip), min(Y_MAX_POS, clip)); }
1142
+  static void lcd_move_x() { int clip = delta_clip(current_position[Y_AXIS]); _lcd_move(PSTR(MSG_MOVE_X), X_AXIS, max(min_pos[X_AXIS], -clip), min(max_pos[X_AXIS], clip)); }
1143
+  static void lcd_move_y() { int clip = delta_clip(current_position[X_AXIS]); _lcd_move(PSTR(MSG_MOVE_Y), Y_AXIS, max(min_pos[Y_AXIS], -clip), min(max_pos[Y_AXIS], clip)); }
969
 #else
1144
 #else
970
-  static void lcd_move_x() { _lcd_move(PSTR(MSG_MOVE_X), X_AXIS, X_MIN_POS, X_MAX_POS); }
971
-  static void lcd_move_y() { _lcd_move(PSTR(MSG_MOVE_Y), Y_AXIS, Y_MIN_POS, Y_MAX_POS); }
1145
+  static void lcd_move_x() { _lcd_move(PSTR(MSG_MOVE_X), X_AXIS, min_pos[X_AXIS], max_pos[X_AXIS]); }
1146
+  static void lcd_move_y() { _lcd_move(PSTR(MSG_MOVE_Y), Y_AXIS, min_pos[Y_AXIS], max_pos[Y_AXIS]); }
972
 #endif
1147
 #endif
973
-static void lcd_move_z() { _lcd_move(PSTR(MSG_MOVE_Z), Z_AXIS, Z_MIN_POS, Z_MAX_POS); }
1148
+static void lcd_move_z() { _lcd_move(PSTR(MSG_MOVE_Z), Z_AXIS, min_pos[Z_AXIS], max_pos[Z_AXIS]); }
974
 static void lcd_move_e(
1149
 static void lcd_move_e(
975
   #if EXTRUDERS > 1
1150
   #if EXTRUDERS > 1
976
     uint8_t e
1151
     uint8_t e
981
     unsigned short original_active_extruder = active_extruder;
1156
     unsigned short original_active_extruder = active_extruder;
982
     active_extruder = e;
1157
     active_extruder = e;
983
   #endif
1158
   #endif
984
-  if ((encoderPosition != 0) && (movesplanned() <= 3)) {
1159
+  if (encoderPosition && movesplanned() <= 3) {
985
     current_position[E_AXIS] += float((int)encoderPosition) * move_menu_scale;
1160
     current_position[E_AXIS] += float((int)encoderPosition) * move_menu_scale;
986
     encoderPosition = 0;
1161
     encoderPosition = 0;
987
     line_to_current(E_AXIS);
1162
     line_to_current(E_AXIS);
1005
     #endif //EXTRUDERS > 1
1180
     #endif //EXTRUDERS > 1
1006
     lcd_implementation_drawedit(pos_label, ftostr31(current_position[E_AXIS]));
1181
     lcd_implementation_drawedit(pos_label, ftostr31(current_position[E_AXIS]));
1007
   }
1182
   }
1008
-  if (LCD_CLICKED) lcd_goto_previous_menu();
1183
+  if (LCD_CLICKED) lcd_goto_previous_menu(true);
1009
   #if EXTRUDERS > 1
1184
   #if EXTRUDERS > 1
1010
     active_extruder = original_active_extruder;
1185
     active_extruder = original_active_extruder;
1011
   #endif
1186
   #endif
1028
  *
1203
  *
1029
  */
1204
  */
1030
 
1205
 
1031
-static void lcd_move_menu_axis() {
1206
+#if ENABLED(DELTA) || ENABLED(SCARA)
1207
+  #define _MOVE_XYZ_ALLOWED (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
1208
+#else
1209
+  #define _MOVE_XYZ_ALLOWED true
1210
+#endif
1211
+
1212
+static void _lcd_move_menu_axis() {
1032
   START_MENU();
1213
   START_MENU();
1033
-  MENU_ITEM(back, MSG_MOVE_AXIS, lcd_move_menu);
1034
-  MENU_ITEM(submenu, MSG_MOVE_X, lcd_move_x);
1035
-  MENU_ITEM(submenu, MSG_MOVE_Y, lcd_move_y);
1214
+  MENU_ITEM(back, MSG_MOVE_AXIS);
1215
+
1216
+  if (_MOVE_XYZ_ALLOWED) {
1217
+    MENU_ITEM(submenu, MSG_MOVE_X, lcd_move_x);
1218
+    MENU_ITEM(submenu, MSG_MOVE_Y, lcd_move_y);
1219
+  }
1036
   if (move_menu_scale < 10.0) {
1220
   if (move_menu_scale < 10.0) {
1037
-    MENU_ITEM(submenu, MSG_MOVE_Z, lcd_move_z);
1221
+    if (_MOVE_XYZ_ALLOWED) MENU_ITEM(submenu, MSG_MOVE_Z, lcd_move_z);
1038
     #if EXTRUDERS == 1
1222
     #if EXTRUDERS == 1
1039
       MENU_ITEM(submenu, MSG_MOVE_E, lcd_move_e);
1223
       MENU_ITEM(submenu, MSG_MOVE_E, lcd_move_e);
1040
     #else
1224
     #else
1053
 
1237
 
1054
 static void lcd_move_menu_10mm() {
1238
 static void lcd_move_menu_10mm() {
1055
   move_menu_scale = 10.0;
1239
   move_menu_scale = 10.0;
1056
-  lcd_move_menu_axis();
1240
+  _lcd_move_menu_axis();
1057
 }
1241
 }
1058
 static void lcd_move_menu_1mm() {
1242
 static void lcd_move_menu_1mm() {
1059
   move_menu_scale = 1.0;
1243
   move_menu_scale = 1.0;
1060
-  lcd_move_menu_axis();
1244
+  _lcd_move_menu_axis();
1061
 }
1245
 }
1062
 static void lcd_move_menu_01mm() {
1246
 static void lcd_move_menu_01mm() {
1063
   move_menu_scale = 0.1;
1247
   move_menu_scale = 0.1;
1064
-  lcd_move_menu_axis();
1248
+  _lcd_move_menu_axis();
1065
 }
1249
 }
1066
 
1250
 
1067
 /**
1251
 /**
1072
 
1256
 
1073
 static void lcd_move_menu() {
1257
 static void lcd_move_menu() {
1074
   START_MENU();
1258
   START_MENU();
1075
-  MENU_ITEM(back, MSG_PREPARE, lcd_prepare_menu);
1076
-  MENU_ITEM(submenu, MSG_MOVE_10MM, lcd_move_menu_10mm);
1259
+  MENU_ITEM(back, MSG_PREPARE);
1260
+
1261
+  if (_MOVE_XYZ_ALLOWED)
1262
+    MENU_ITEM(submenu, MSG_MOVE_10MM, lcd_move_menu_10mm);
1263
+
1077
   MENU_ITEM(submenu, MSG_MOVE_1MM, lcd_move_menu_1mm);
1264
   MENU_ITEM(submenu, MSG_MOVE_1MM, lcd_move_menu_1mm);
1078
   MENU_ITEM(submenu, MSG_MOVE_01MM, lcd_move_menu_01mm);
1265
   MENU_ITEM(submenu, MSG_MOVE_01MM, lcd_move_menu_01mm);
1079
   //TODO:X,Y,Z,E
1266
   //TODO:X,Y,Z,E
1088
 
1275
 
1089
 static void lcd_control_menu() {
1276
 static void lcd_control_menu() {
1090
   START_MENU();
1277
   START_MENU();
1091
-  MENU_ITEM(back, MSG_MAIN, lcd_main_menu);
1278
+  MENU_ITEM(back, MSG_MAIN);
1092
   MENU_ITEM(submenu, MSG_TEMPERATURE, lcd_control_temperature_menu);
1279
   MENU_ITEM(submenu, MSG_TEMPERATURE, lcd_control_temperature_menu);
1093
   MENU_ITEM(submenu, MSG_MOTION, lcd_control_motion_menu);
1280
   MENU_ITEM(submenu, MSG_MOTION, lcd_control_motion_menu);
1094
   MENU_ITEM(submenu, MSG_VOLUMETRIC, lcd_control_volumetric_menu);
1281
   MENU_ITEM(submenu, MSG_VOLUMETRIC, lcd_control_volumetric_menu);
1146
   // Helpers for editing PID Ki & Kd values
1333
   // Helpers for editing PID Ki & Kd values
1147
   // grab the PID value out of the temp variable; scale it; then update the PID driver
1334
   // grab the PID value out of the temp variable; scale it; then update the PID driver
1148
   void copy_and_scalePID_i(int e) {
1335
   void copy_and_scalePID_i(int e) {
1336
+    #if DISABLED(PID_PARAMS_PER_EXTRUDER)
1337
+      UNUSED(e);
1338
+    #endif
1149
     PID_PARAM(Ki, e) = scalePID_i(raw_Ki);
1339
     PID_PARAM(Ki, e) = scalePID_i(raw_Ki);
1150
     updatePID();
1340
     updatePID();
1151
   }
1341
   }
1152
   void copy_and_scalePID_d(int e) {
1342
   void copy_and_scalePID_d(int e) {
1343
+    #if DISABLED(PID_PARAMS_PER_EXTRUDER)
1344
+      UNUSED(e);
1345
+    #endif
1153
     PID_PARAM(Kd, e) = scalePID_d(raw_Kd);
1346
     PID_PARAM(Kd, e) = scalePID_d(raw_Kd);
1154
     updatePID();
1347
     updatePID();
1155
   }
1348
   }
1191
   //
1384
   //
1192
   // ^ Control
1385
   // ^ Control
1193
   //
1386
   //
1194
-  MENU_ITEM(back, MSG_CONTROL, lcd_control_menu);
1387
+  MENU_ITEM(back, MSG_CONTROL);
1195
 
1388
 
1196
   //
1389
   //
1197
   // Nozzle:
1390
   // Nozzle:
1323
  */
1516
  */
1324
 static void lcd_control_temperature_preheat_pla_settings_menu() {
1517
 static void lcd_control_temperature_preheat_pla_settings_menu() {
1325
   START_MENU();
1518
   START_MENU();
1326
-  MENU_ITEM(back, MSG_TEMPERATURE, lcd_control_temperature_menu);
1519
+  MENU_ITEM(back, MSG_TEMPERATURE);
1327
   MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &plaPreheatFanSpeed, 0, 255);
1520
   MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &plaPreheatFanSpeed, 0, 255);
1328
   #if TEMP_SENSOR_0 != 0
1521
   #if TEMP_SENSOR_0 != 0
1329
     MENU_ITEM_EDIT(int3, MSG_NOZZLE, &plaPreheatHotendTemp, HEATER_0_MINTEMP, HEATER_0_MAXTEMP - 15);
1522
     MENU_ITEM_EDIT(int3, MSG_NOZZLE, &plaPreheatHotendTemp, HEATER_0_MINTEMP, HEATER_0_MAXTEMP - 15);
1344
  */
1537
  */
1345
 static void lcd_control_temperature_preheat_abs_settings_menu() {
1538
 static void lcd_control_temperature_preheat_abs_settings_menu() {
1346
   START_MENU();
1539
   START_MENU();
1347
-  MENU_ITEM(back, MSG_TEMPERATURE, lcd_control_temperature_menu);
1540
+  MENU_ITEM(back, MSG_TEMPERATURE);
1348
   MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &absPreheatFanSpeed, 0, 255);
1541
   MENU_ITEM_EDIT(int3, MSG_FAN_SPEED, &absPreheatFanSpeed, 0, 255);
1349
   #if TEMP_SENSOR_0 != 0
1542
   #if TEMP_SENSOR_0 != 0
1350
     MENU_ITEM_EDIT(int3, MSG_NOZZLE, &absPreheatHotendTemp, HEATER_0_MINTEMP, HEATER_0_MAXTEMP - 15);
1543
     MENU_ITEM_EDIT(int3, MSG_NOZZLE, &absPreheatHotendTemp, HEATER_0_MINTEMP, HEATER_0_MAXTEMP - 15);
1365
  */
1558
  */
1366
 static void lcd_control_motion_menu() {
1559
 static void lcd_control_motion_menu() {
1367
   START_MENU();
1560
   START_MENU();
1368
-  MENU_ITEM(back, MSG_CONTROL, lcd_control_menu);
1561
+  MENU_ITEM(back, MSG_CONTROL);
1369
   #if ENABLED(AUTO_BED_LEVELING_FEATURE)
1562
   #if ENABLED(AUTO_BED_LEVELING_FEATURE)
1370
     MENU_ITEM_EDIT(float32, MSG_ZPROBE_ZOFFSET, &zprobe_zoffset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
1563
     MENU_ITEM_EDIT(float32, MSG_ZPROBE_ZOFFSET, &zprobe_zoffset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
1371
   #endif
1564
   #endif
1418
  */
1611
  */
1419
 static void lcd_control_volumetric_menu() {
1612
 static void lcd_control_volumetric_menu() {
1420
   START_MENU();
1613
   START_MENU();
1421
-  MENU_ITEM(back, MSG_CONTROL, lcd_control_menu);
1614
+  MENU_ITEM(back, MSG_CONTROL);
1422
 
1615
 
1423
   MENU_ITEM_EDIT_CALLBACK(bool, MSG_VOLUMETRIC_ENABLED, &volumetric_enabled, calculate_volumetric_multipliers);
1616
   MENU_ITEM_EDIT_CALLBACK(bool, MSG_VOLUMETRIC_ENABLED, &volumetric_enabled, calculate_volumetric_multipliers);
1424
 
1617
 
1448
 #if ENABLED(HAS_LCD_CONTRAST)
1641
 #if ENABLED(HAS_LCD_CONTRAST)
1449
   static void lcd_set_contrast() {
1642
   static void lcd_set_contrast() {
1450
     ENCODER_DIRECTION_NORMAL();
1643
     ENCODER_DIRECTION_NORMAL();
1451
-    if (encoderPosition != 0) {
1644
+    if (encoderPosition) {
1452
       #if ENABLED(U8GLIB_LM6059_AF)
1645
       #if ENABLED(U8GLIB_LM6059_AF)
1453
         lcd_contrast += encoderPosition;
1646
         lcd_contrast += encoderPosition;
1454
         lcd_contrast &= 0xFF;
1647
         lcd_contrast &= 0xFF;
1467
         lcd_implementation_drawedit(PSTR(MSG_CONTRAST), itostr2(lcd_contrast));
1660
         lcd_implementation_drawedit(PSTR(MSG_CONTRAST), itostr2(lcd_contrast));
1468
       #endif
1661
       #endif
1469
     }
1662
     }
1470
-    if (LCD_CLICKED) lcd_goto_previous_menu();
1663
+    if (LCD_CLICKED) lcd_goto_previous_menu(true);
1471
   }
1664
   }
1472
 #endif // HAS_LCD_CONTRAST
1665
 #endif // HAS_LCD_CONTRAST
1473
 
1666
 
1479
 #if ENABLED(FWRETRACT)
1672
 #if ENABLED(FWRETRACT)
1480
   static void lcd_control_retract_menu() {
1673
   static void lcd_control_retract_menu() {
1481
     START_MENU();
1674
     START_MENU();
1482
-    MENU_ITEM(back, MSG_CONTROL, lcd_control_menu);
1675
+    MENU_ITEM(back, MSG_CONTROL);
1483
     MENU_ITEM_EDIT(bool, MSG_AUTORETRACT, &autoretract_enabled);
1676
     MENU_ITEM_EDIT(bool, MSG_AUTORETRACT, &autoretract_enabled);
1484
     MENU_ITEM_EDIT(float52, MSG_CONTROL_RETRACT, &retract_length, 0, 100);
1677
     MENU_ITEM_EDIT(float52, MSG_CONTROL_RETRACT, &retract_length, 0, 100);
1485
     #if EXTRUDERS > 1
1678
     #if EXTRUDERS > 1
1520
     if (lcdDrawUpdate == 0 && LCD_CLICKED == 0) return; // nothing to do (so don't thrash the SD card)
1713
     if (lcdDrawUpdate == 0 && LCD_CLICKED == 0) return; // nothing to do (so don't thrash the SD card)
1521
     uint16_t fileCnt = card.getnrfilenames();
1714
     uint16_t fileCnt = card.getnrfilenames();
1522
     START_MENU();
1715
     START_MENU();
1523
-    MENU_ITEM(back, MSG_MAIN, lcd_main_menu);
1716
+    MENU_ITEM(back, MSG_MAIN);
1524
     card.getWorkDirName();
1717
     card.getWorkDirName();
1525
     if (card.filename[0] == '/') {
1718
     if (card.filename[0] == '/') {
1526
       #if !PIN_EXISTS(SD_DETECT)
1719
       #if !PIN_EXISTS(SD_DETECT)
1589
       lcd_implementation_drawedit(editLabel, _strFunc(((_type)((int32_t)encoderPosition + minEditValue)) / scale)); \
1782
       lcd_implementation_drawedit(editLabel, _strFunc(((_type)((int32_t)encoderPosition + minEditValue)) / scale)); \
1590
     if (isClicked) { \
1783
     if (isClicked) { \
1591
       *((_type*)editValue) = ((_type)((int32_t)encoderPosition + minEditValue)) / scale; \
1784
       *((_type*)editValue) = ((_type)((int32_t)encoderPosition + minEditValue)) / scale; \
1592
-      lcd_goto_previous_menu(); \
1785
+      lcd_goto_previous_menu(true); \
1593
     } \
1786
     } \
1594
     return isClicked; \
1787
     return isClicked; \
1595
   } \
1788
   } \
1599
     lcd_save_previous_menu(); \
1792
     lcd_save_previous_menu(); \
1600
     \
1793
     \
1601
     lcdDrawUpdate = LCD_DRAW_UPDATE_CLEAR_CALL_REDRAW; \
1794
     lcdDrawUpdate = LCD_DRAW_UPDATE_CLEAR_CALL_REDRAW; \
1602
-    currentMenu = menu_edit_ ## _name; \
1603
     \
1795
     \
1604
     editLabel = pstr; \
1796
     editLabel = pstr; \
1605
     editValue = ptr; \
1797
     editValue = ptr; \
1616
     currentMenu = menu_edit_callback_ ## _name; \
1808
     currentMenu = menu_edit_callback_ ## _name; \
1617
     callbackFunc = callback; \
1809
     callbackFunc = callback; \
1618
   }
1810
   }
1619
-menu_edit_type(int, int3, itostr3, 1)
1620
-menu_edit_type(float, float3, ftostr3, 1)
1621
-menu_edit_type(float, float32, ftostr32, 100)
1622
-menu_edit_type(float, float43, ftostr43, 1000)
1623
-menu_edit_type(float, float5, ftostr5, 0.01)
1624
-menu_edit_type(float, float51, ftostr51, 10)
1625
-menu_edit_type(float, float52, ftostr52, 100)
1626
-menu_edit_type(unsigned long, long5, ftostr5, 0.01)
1811
+menu_edit_type(int, int3, itostr3, 1);
1812
+menu_edit_type(float, float3, ftostr3, 1);
1813
+menu_edit_type(float, float32, ftostr32, 100);
1814
+menu_edit_type(float, float43, ftostr43, 1000);
1815
+menu_edit_type(float, float5, ftostr5, 0.01);
1816
+menu_edit_type(float, float51, ftostr51, 10);
1817
+menu_edit_type(float, float52, ftostr52, 100);
1818
+menu_edit_type(unsigned long, long5, ftostr5, 0.01);
1627
 
1819
 
1628
 /**
1820
 /**
1629
  *
1821
  *
1662
     lcd_move_y();
1854
     lcd_move_y();
1663
   }
1855
   }
1664
   static void reprapworld_keypad_move_home() {
1856
   static void reprapworld_keypad_move_home() {
1665
-    enqueue_and_echo_commands_P((PSTR("G28"))); // move all axis home
1857
+    enqueue_and_echo_commands_P(PSTR("G28")); // move all axes home
1666
   }
1858
   }
1667
 #endif // REPRAPWORLD_KEYPAD
1859
 #endif // REPRAPWORLD_KEYPAD
1668
 
1860
 
1712
  * Menu actions
1904
  * Menu actions
1713
  *
1905
  *
1714
  */
1906
  */
1715
-static void menu_action_back(menuFunc_t func) { lcd_goto_menu(func); }
1907
+static void menu_action_back() { lcd_goto_previous_menu(); }
1716
 static void menu_action_submenu(menuFunc_t func) { lcd_save_previous_menu(); lcd_goto_menu(func); }
1908
 static void menu_action_submenu(menuFunc_t func) { lcd_save_previous_menu(); lcd_goto_menu(func); }
1717
 static void menu_action_gcode(const char* pgcode) { enqueue_and_echo_commands_P(pgcode); }
1909
 static void menu_action_gcode(const char* pgcode) { enqueue_and_echo_commands_P(pgcode); }
1718
 static void menu_action_function(menuFunc_t func) { (*func)(); }
1910
 static void menu_action_function(menuFunc_t func) { (*func)(); }
1720
 #if ENABLED(SDSUPPORT)
1912
 #if ENABLED(SDSUPPORT)
1721
 
1913
 
1722
   static void menu_action_sdfile(const char* filename, char* longFilename) {
1914
   static void menu_action_sdfile(const char* filename, char* longFilename) {
1915
+    UNUSED(longFilename);
1723
     card.openAndPrintFile(filename);
1916
     card.openAndPrintFile(filename);
1724
     lcd_return_to_status();
1917
     lcd_return_to_status();
1725
   }
1918
   }
1726
 
1919
 
1727
   static void menu_action_sddirectory(const char* filename, char* longFilename) {
1920
   static void menu_action_sddirectory(const char* filename, char* longFilename) {
1921
+    UNUSED(longFilename);
1728
     card.chdir(filename);
1922
     card.chdir(filename);
1729
     encoderPosition = 0;
1923
     encoderPosition = 0;
1730
   }
1924
   }
1731
 
1925
 
1732
 #endif //SDSUPPORT
1926
 #endif //SDSUPPORT
1733
 
1927
 
1734
-static void menu_action_setting_edit_bool(const char* pstr, bool* ptr) { *ptr = !(*ptr); }
1928
+static void menu_action_setting_edit_bool(const char* pstr, bool* ptr) {UNUSED(pstr); *ptr = !(*ptr); }
1735
 static void menu_action_setting_edit_callback_bool(const char* pstr, bool* ptr, menuFunc_t callback) {
1929
 static void menu_action_setting_edit_callback_bool(const char* pstr, bool* ptr, menuFunc_t callback) {
1736
   menu_action_setting_edit_bool(pstr, ptr);
1930
   menu_action_setting_edit_bool(pstr, ptr);
1737
   (*callback)();
1931
   (*callback)();
1909
     #if ENABLED(ULTIPANEL)
2103
     #if ENABLED(ULTIPANEL)
1910
 
2104
 
1911
       #if ENABLED(REPRAPWORLD_KEYPAD)
2105
       #if ENABLED(REPRAPWORLD_KEYPAD)
1912
-        if (REPRAPWORLD_KEYPAD_MOVE_Z_UP)     reprapworld_keypad_move_z_up();
1913
-        if (REPRAPWORLD_KEYPAD_MOVE_Z_DOWN)   reprapworld_keypad_move_z_down();
1914
-        if (REPRAPWORLD_KEYPAD_MOVE_X_LEFT)   reprapworld_keypad_move_x_left();
1915
-        if (REPRAPWORLD_KEYPAD_MOVE_X_RIGHT)  reprapworld_keypad_move_x_right();
1916
-        if (REPRAPWORLD_KEYPAD_MOVE_Y_DOWN)   reprapworld_keypad_move_y_down();
1917
-        if (REPRAPWORLD_KEYPAD_MOVE_Y_UP)     reprapworld_keypad_move_y_up();
1918
-        if (REPRAPWORLD_KEYPAD_MOVE_HOME)     reprapworld_keypad_move_home();
2106
+
2107
+        #if ENABLED(DELTA) || ENABLED(SCARA)
2108
+          #define _KEYPAD_MOVE_ALLOWED (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
2109
+        #else
2110
+          #define _KEYPAD_MOVE_ALLOWED true
2111
+        #endif
2112
+
2113
+        if (REPRAPWORLD_KEYPAD_MOVE_HOME)       reprapworld_keypad_move_home();
2114
+        if (_KEYPAD_MOVE_ALLOWED) {
2115
+          if (REPRAPWORLD_KEYPAD_MOVE_Z_UP)     reprapworld_keypad_move_z_up();
2116
+          if (REPRAPWORLD_KEYPAD_MOVE_Z_DOWN)   reprapworld_keypad_move_z_down();
2117
+          if (REPRAPWORLD_KEYPAD_MOVE_X_LEFT)   reprapworld_keypad_move_x_left();
2118
+          if (REPRAPWORLD_KEYPAD_MOVE_X_RIGHT)  reprapworld_keypad_move_x_right();
2119
+          if (REPRAPWORLD_KEYPAD_MOVE_Y_DOWN)   reprapworld_keypad_move_y_down();
2120
+          if (REPRAPWORLD_KEYPAD_MOVE_Y_UP)     reprapworld_keypad_move_y_up();
2121
+        }
1919
       #endif
2122
       #endif
1920
 
2123
 
1921
       bool encoderPastThreshold = (abs(encoderDiff) >= ENCODER_PULSES_PER_STEP);
2124
       bool encoderPastThreshold = (abs(encoderDiff) >= ENCODER_PULSES_PER_STEP);
2000
       // Return to Status Screen after a timeout
2203
       // Return to Status Screen after a timeout
2001
       if (defer_return_to_status)
2204
       if (defer_return_to_status)
2002
         return_to_status_ms = ms + LCD_TIMEOUT_TO_STATUS;
2205
         return_to_status_ms = ms + LCD_TIMEOUT_TO_STATUS;
2003
-      else if (currentMenu != lcd_status_screen && millis() > return_to_status_ms) {
2206
+      else if (currentMenu != lcd_status_screen && ms > return_to_status_ms) {
2004
         lcd_return_to_status();
2207
         lcd_return_to_status();
2005
       }
2208
       }
2006
 
2209
 
2031
 }
2234
 }
2032
 
2235
 
2033
 void lcd_finishstatus(bool persist=false) {
2236
 void lcd_finishstatus(bool persist=false) {
2237
+  #if !(ENABLED(LCD_PROGRESS_BAR) && (PROGRESS_MSG_EXPIRE > 0))
2238
+    UNUSED(persist);
2239
+  #endif
2240
+
2034
   #if ENABLED(LCD_PROGRESS_BAR)
2241
   #if ENABLED(LCD_PROGRESS_BAR)
2035
     progress_bar_ms = millis();
2242
     progress_bar_ms = millis();
2036
     #if PROGRESS_MSG_EXPIRE > 0
2243
     #if PROGRESS_MSG_EXPIRE > 0
2473
   return conv;
2680
   return conv;
2474
 }
2681
 }
2475
 
2682
 
2476
-#if ENABLED(MANUAL_BED_LEVELING)
2477
-
2478
-  static int _lcd_level_bed_position;
2479
-
2480
-  /**
2481
-   * MBL Wait for controller movement and clicks:
2482
-   *   - Movement adjusts the Z axis
2483
-   *   - Click saves the Z and goes to the next mesh point
2484
-   */
2485
-  static void _lcd_level_bed_procedure() {
2486
-    static bool mbl_wait_for_move = false;
2487
-    // Menu handlers may be called in a re-entrant fashion
2488
-    // if they call st_synchronize or plan_buffer_line. So
2489
-    // while waiting for a move we just ignore new input.
2490
-    if (mbl_wait_for_move) {
2491
-      lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
2492
-      return;
2493
-    }
2494
-
2495
-    ENCODER_DIRECTION_NORMAL();
2496
-
2497
-    // Encoder wheel adjusts the Z position
2498
-    if (encoderPosition != 0 && movesplanned() <= 3) {
2499
-      refresh_cmd_timeout();
2500
-      current_position[Z_AXIS] += float((int)encoderPosition) * (MBL_Z_STEP);
2501
-      if (min_software_endstops) NOLESS(current_position[Z_AXIS], Z_MIN_POS);
2502
-      if (max_software_endstops) NOMORE(current_position[Z_AXIS], Z_MAX_POS);
2503
-      encoderPosition = 0;
2504
-      line_to_current(Z_AXIS);
2505
-      lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
2506
-    }
2507
-
2508
-    // Update on first display, then only on updates to Z position
2509
-    if (lcdDrawUpdate) {
2510
-      float v = current_position[Z_AXIS] - MESH_HOME_SEARCH_Z;
2511
-      lcd_implementation_drawedit(PSTR(MSG_MOVE_Z), ftostr43(v + (v < 0 ? -0.0001 : 0.0001), '+'));
2512
-    }
2513
-
2514
-    // We want subsequent calls, but don't force redraw
2515
-    // Set here so it can be overridden by lcd_return_to_status below
2516
-    lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
2517
-
2518
-    // Click sets the current Z and moves to the next position
2519
-    static bool debounce_click = false;
2520
-    if (LCD_CLICKED) {
2521
-      if (!debounce_click) {
2522
-        debounce_click = true; // ignore multiple "clicks" in a row
2523
-        int ix = _lcd_level_bed_position % (MESH_NUM_X_POINTS),
2524
-            iy = _lcd_level_bed_position / (MESH_NUM_X_POINTS);
2525
-        if (iy & 1) ix = (MESH_NUM_X_POINTS - 1) - ix; // Zig zag
2526
-        mbl.set_z(ix, iy, current_position[Z_AXIS]);
2527
-        _lcd_level_bed_position++;
2528
-        if (_lcd_level_bed_position == (MESH_NUM_X_POINTS) * (MESH_NUM_Y_POINTS)) {
2529
-          current_position[Z_AXIS] = MESH_HOME_SEARCH_Z;
2530
-          mbl_wait_for_move = true;
2531
-          line_to_current(Z_AXIS);
2532
-          st_synchronize();
2533
-          mbl.active = 1;
2534
-          enqueue_and_echo_commands_P(PSTR("G28"));
2535
-          mbl_wait_for_move = false;
2536
-          lcd_return_to_status();
2537
-          #if ENABLED(NEWPANEL)
2538
-            lcd_quick_feedback();
2539
-          #endif
2540
-          LCD_ALERTMESSAGEPGM(MSG_LEVEL_BED_DONE);
2541
-          #if HAS_BUZZER
2542
-            buzz(200, 659);
2543
-            buzz(200, 698);
2544
-          #endif
2545
-        }
2546
-        else {
2547
-          current_position[Z_AXIS] = MESH_HOME_SEARCH_Z;
2548
-          line_to_current(Z_AXIS);
2549
-          ix = _lcd_level_bed_position % (MESH_NUM_X_POINTS);
2550
-          iy = _lcd_level_bed_position / (MESH_NUM_X_POINTS);
2551
-          if (iy & 1) ix = (MESH_NUM_X_POINTS - 1) - ix; // Zig zag
2552
-          current_position[X_AXIS] = mbl.get_x(ix);
2553
-          current_position[Y_AXIS] = mbl.get_y(iy);
2554
-          line_to_current(manual_feedrate[X_AXIS] <= manual_feedrate[Y_AXIS] ? X_AXIS : Y_AXIS);
2555
-        }
2556
-      }
2557
-    }
2558
-    else {
2559
-      debounce_click = false;
2560
-    }
2561
-  }
2562
-
2563
-  static void _lcd_level_bed_homing_done() {
2564
-    if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_WAITING), NULL);
2565
-    lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
2566
-    if (LCD_CLICKED) {
2567
-      current_position[Z_AXIS] = MESH_HOME_SEARCH_Z;
2568
-      plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
2569
-      current_position[X_AXIS] = MESH_MIN_X;
2570
-      current_position[Y_AXIS] = MESH_MIN_Y;
2571
-      line_to_current(manual_feedrate[X_AXIS] <= manual_feedrate[Y_AXIS] ? X_AXIS : Y_AXIS);
2572
-      _lcd_level_bed_position = 0;
2573
-      lcd_goto_menu(_lcd_level_bed_procedure, true);
2574
-    }
2575
-  }
2576
-
2577
-  /**
2578
-   * MBL Move to mesh starting point
2579
-   */
2580
-  static void _lcd_level_bed_homing() {
2581
-    if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_HOMING), NULL);
2582
-    lcdDrawUpdate = LCD_DRAW_UPDATE_CALL_NO_REDRAW;
2583
-    if (axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] && axis_known_position[Z_AXIS])
2584
-      lcd_goto_menu(_lcd_level_bed_homing_done);
2585
-  }
2586
-
2587
-  /**
2588
-   * MBL Continue Bed Leveling...
2589
-   */
2590
-  static void _lcd_level_bed_continue() {
2591
-    defer_return_to_status = true;
2592
-    axis_known_position[X_AXIS] = axis_known_position[Y_AXIS] = axis_known_position[Z_AXIS] = false;
2593
-    mbl.reset();
2594
-    enqueue_and_echo_commands_P(PSTR("G28"));
2595
-    lcd_goto_menu(_lcd_level_bed_homing, true);
2596
-  }
2597
-
2598
-  /**
2599
-   * MBL entry-point
2600
-   */
2601
-  static void lcd_level_bed() {
2602
-    START_MENU();
2603
-    MENU_ITEM(back, "Cancel", lcd_prepare_menu);
2604
-    MENU_ITEM(submenu, MSG_LEVEL_BED, _lcd_level_bed_continue);
2605
-    END_MENU();
2606
-  }
2607
-
2608
-#endif  // MANUAL_BED_LEVELING
2609
-
2610
 #endif // ULTRA_LCD
2683
 #endif // ULTRA_LCD

+ 39
- 22
Marlin/ultralcd.h View File

65
   #if ENABLED(ULTIPANEL)
65
   #if ENABLED(ULTIPANEL)
66
     void lcd_buttons_update();
66
     void lcd_buttons_update();
67
     extern volatile uint8_t buttons;  //the last checked buttons in a bit array.
67
     extern volatile uint8_t buttons;  //the last checked buttons in a bit array.
68
-    #if ENABLED(REPRAPWORLD_KEYPAD)
69
-      extern volatile uint8_t buttons_reprapworld_keypad; // to store the keypad shift register values
70
-    #endif
71
   #else
68
   #else
72
     FORCE_INLINE void lcd_buttons_update() {}
69
     FORCE_INLINE void lcd_buttons_update() {}
73
   #endif
70
   #endif
89
   void lcd_ignore_click(bool b=true);
86
   void lcd_ignore_click(bool b=true);
90
   bool lcd_blink();
87
   bool lcd_blink();
91
 
88
 
89
+  #if ENABLED(ULTIPANEL) && ENABLED(REPRAPWORLD_KEYPAD)
90
+
91
+    #define REPRAPWORLD_BTN_OFFSET 0 // bit offset into buttons for shift register values
92
+
93
+    #define BLEN_REPRAPWORLD_KEYPAD_F3     0
94
+    #define BLEN_REPRAPWORLD_KEYPAD_F2     1
95
+    #define BLEN_REPRAPWORLD_KEYPAD_F1     2
96
+    #define BLEN_REPRAPWORLD_KEYPAD_DOWN   3
97
+    #define BLEN_REPRAPWORLD_KEYPAD_RIGHT  4
98
+    #define BLEN_REPRAPWORLD_KEYPAD_MIDDLE 5
99
+    #define BLEN_REPRAPWORLD_KEYPAD_UP     6
100
+    #define BLEN_REPRAPWORLD_KEYPAD_LEFT   7
101
+
102
+    #define EN_REPRAPWORLD_KEYPAD_F3      (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F3))
103
+    #define EN_REPRAPWORLD_KEYPAD_F2      (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F2))
104
+    #define EN_REPRAPWORLD_KEYPAD_F1      (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F1))
105
+    #define EN_REPRAPWORLD_KEYPAD_DOWN    (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_DOWN))
106
+    #define EN_REPRAPWORLD_KEYPAD_RIGHT   (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_RIGHT))
107
+    #define EN_REPRAPWORLD_KEYPAD_MIDDLE  (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_MIDDLE))
108
+    #define EN_REPRAPWORLD_KEYPAD_UP      (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_UP))
109
+    #define EN_REPRAPWORLD_KEYPAD_LEFT    (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_LEFT))
110
+
111
+    #define REPRAPWORLD_KEYPAD_MOVE_Z_DOWN  (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_F3)
112
+    #define REPRAPWORLD_KEYPAD_MOVE_Z_UP    (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_F2)
113
+    #define REPRAPWORLD_KEYPAD_MOVE_Y_DOWN  (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_DOWN)
114
+    #define REPRAPWORLD_KEYPAD_MOVE_X_RIGHT (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_RIGHT)
115
+    #define REPRAPWORLD_KEYPAD_MOVE_HOME    (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_MIDDLE)
116
+    #define REPRAPWORLD_KEYPAD_MOVE_Y_UP    (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_UP)
117
+    #define REPRAPWORLD_KEYPAD_MOVE_X_LEFT  (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_LEFT)
118
+
119
+  #endif //ULTIPANEL && REPRAPWORLD_KEYPAD
120
+
92
   #if ENABLED(NEWPANEL)
121
   #if ENABLED(NEWPANEL)
122
+
93
     #define EN_C (_BV(BLEN_C))
123
     #define EN_C (_BV(BLEN_C))
94
     #define EN_B (_BV(BLEN_B))
124
     #define EN_B (_BV(BLEN_B))
95
     #define EN_A (_BV(BLEN_A))
125
     #define EN_A (_BV(BLEN_A))
96
 
126
 
97
     #if ENABLED(REPRAPWORLD_KEYPAD)
127
     #if ENABLED(REPRAPWORLD_KEYPAD)
98
-      #define EN_REPRAPWORLD_KEYPAD_F3 (_BV(BLEN_REPRAPWORLD_KEYPAD_F3))
99
-      #define EN_REPRAPWORLD_KEYPAD_F2 (_BV(BLEN_REPRAPWORLD_KEYPAD_F2))
100
-      #define EN_REPRAPWORLD_KEYPAD_F1 (_BV(BLEN_REPRAPWORLD_KEYPAD_F1))
101
-      #define EN_REPRAPWORLD_KEYPAD_UP (_BV(BLEN_REPRAPWORLD_KEYPAD_UP))
102
-      #define EN_REPRAPWORLD_KEYPAD_RIGHT (_BV(BLEN_REPRAPWORLD_KEYPAD_RIGHT))
103
-      #define EN_REPRAPWORLD_KEYPAD_MIDDLE (_BV(BLEN_REPRAPWORLD_KEYPAD_MIDDLE))
104
-      #define EN_REPRAPWORLD_KEYPAD_DOWN (_BV(BLEN_REPRAPWORLD_KEYPAD_DOWN))
105
-      #define EN_REPRAPWORLD_KEYPAD_LEFT (_BV(BLEN_REPRAPWORLD_KEYPAD_LEFT))
106
-
107
       #define LCD_CLICKED ((buttons&EN_C) || (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_F1))
128
       #define LCD_CLICKED ((buttons&EN_C) || (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_F1))
108
-      #define REPRAPWORLD_KEYPAD_MOVE_Z_UP (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_F2)
109
-      #define REPRAPWORLD_KEYPAD_MOVE_Z_DOWN (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_F3)
110
-      #define REPRAPWORLD_KEYPAD_MOVE_X_LEFT (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_LEFT)
111
-      #define REPRAPWORLD_KEYPAD_MOVE_X_RIGHT (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_RIGHT)
112
-      #define REPRAPWORLD_KEYPAD_MOVE_Y_DOWN (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_DOWN)
113
-      #define REPRAPWORLD_KEYPAD_MOVE_Y_UP (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_UP)
114
-      #define REPRAPWORLD_KEYPAD_MOVE_HOME (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_MIDDLE)
115
     #else
129
     #else
116
       #define LCD_CLICKED (buttons&EN_C)
130
       #define LCD_CLICKED (buttons&EN_C)
117
-    #endif //REPRAPWORLD_KEYPAD
118
-  #else
131
+    #endif
132
+
133
+  #else //!NEWPANEL
134
+
119
     //atomic, do not change
135
     //atomic, do not change
120
     #define B_LE (_BV(BL_LE))
136
     #define B_LE (_BV(BL_LE))
121
     #define B_UP (_BV(BL_UP))
137
     #define B_UP (_BV(BL_UP))
127
     #define EN_A (_BV(BLEN_A))
143
     #define EN_A (_BV(BLEN_A))
128
 
144
 
129
     #define LCD_CLICKED ((buttons&B_MI)||(buttons&B_ST))
145
     #define LCD_CLICKED ((buttons&B_MI)||(buttons&B_ST))
130
-  #endif//NEWPANEL
146
+
147
+  #endif //!NEWPANEL
131
 
148
 
132
 #else //no LCD
149
 #else //no LCD
133
   FORCE_INLINE void lcd_update() {}
150
   FORCE_INLINE void lcd_update() {}

+ 7
- 29
Marlin/ultralcd_implementation_hitachi_HD44780.h View File

98
     #endif
98
     #endif
99
 
99
 
100
   #elif ENABLED(REPRAPWORLD_KEYPAD)
100
   #elif ENABLED(REPRAPWORLD_KEYPAD)
101
-    // define register bit values, don't change it
102
-    #define BLEN_REPRAPWORLD_KEYPAD_F3 0
103
-    #define BLEN_REPRAPWORLD_KEYPAD_F2 1
104
-    #define BLEN_REPRAPWORLD_KEYPAD_F1 2
105
-    #define BLEN_REPRAPWORLD_KEYPAD_UP 6
106
-    #define BLEN_REPRAPWORLD_KEYPAD_RIGHT 4
107
-    #define BLEN_REPRAPWORLD_KEYPAD_MIDDLE 5
108
-    #define BLEN_REPRAPWORLD_KEYPAD_DOWN 3
109
-    #define BLEN_REPRAPWORLD_KEYPAD_LEFT 7
110
-
111
-    #define REPRAPWORLD_BTN_OFFSET 0 // bit offset into buttons for shift register values
112
-
113
-    #define EN_REPRAPWORLD_KEYPAD_F3 (_BV(BLEN_REPRAPWORLD_KEYPAD_F3+REPRAPWORLD_BTN_OFFSET))
114
-    #define EN_REPRAPWORLD_KEYPAD_F2 (_BV(BLEN_REPRAPWORLD_KEYPAD_F2+REPRAPWORLD_BTN_OFFSET))
115
-    #define EN_REPRAPWORLD_KEYPAD_F1 (_BV(BLEN_REPRAPWORLD_KEYPAD_F1+REPRAPWORLD_BTN_OFFSET))
116
-    #define EN_REPRAPWORLD_KEYPAD_UP (_BV(BLEN_REPRAPWORLD_KEYPAD_UP+REPRAPWORLD_BTN_OFFSET))
117
-    #define EN_REPRAPWORLD_KEYPAD_RIGHT (_BV(BLEN_REPRAPWORLD_KEYPAD_RIGHT+REPRAPWORLD_BTN_OFFSET))
118
-    #define EN_REPRAPWORLD_KEYPAD_MIDDLE (_BV(BLEN_REPRAPWORLD_KEYPAD_MIDDLE+REPRAPWORLD_BTN_OFFSET))
119
-    #define EN_REPRAPWORLD_KEYPAD_DOWN (_BV(BLEN_REPRAPWORLD_KEYPAD_DOWN+REPRAPWORLD_BTN_OFFSET))
120
-    #define EN_REPRAPWORLD_KEYPAD_LEFT (_BV(BLEN_REPRAPWORLD_KEYPAD_LEFT+REPRAPWORLD_BTN_OFFSET))
121
-
122
-    //#define LCD_CLICKED ((buttons&EN_C) || (buttons&EN_REPRAPWORLD_KEYPAD_F1))
123
-    //#define REPRAPWORLD_KEYPAD_MOVE_Y_DOWN (buttons&EN_REPRAPWORLD_KEYPAD_DOWN)
124
-    //#define REPRAPWORLD_KEYPAD_MOVE_Y_UP (buttons&EN_REPRAPWORLD_KEYPAD_UP)
125
-    //#define REPRAPWORLD_KEYPAD_MOVE_HOME (buttons&EN_REPRAPWORLD_KEYPAD_MIDDLE)
101
+
102
+    // REPRAPWORLD_KEYPAD defined in ultralcd.h
126
 
103
 
127
   #elif ENABLED(NEWPANEL)
104
   #elif ENABLED(NEWPANEL)
128
     #define LCD_CLICKED (buttons&EN_C)
105
     #define LCD_CLICKED (buttons&EN_C)
739
 
716
 
740
     lcd.setCursor(LCD_WIDTH - 6, 2);
717
     lcd.setCursor(LCD_WIDTH - 6, 2);
741
     lcd.print(LCD_STR_CLOCK[0]);
718
     lcd.print(LCD_STR_CLOCK[0]);
742
-    if (print_job_start_ms != 0) {
743
-      uint16_t time = (((print_job_stop_ms > print_job_start_ms)
744
-                       ? print_job_stop_ms : millis()) - print_job_start_ms) / 60000;
719
+
720
+    uint16_t time = print_job_timer.duration() / 60;
721
+    if (time != 0) {
745
       lcd.print(itostr2(time / 60));
722
       lcd.print(itostr2(time / 60));
746
       lcd.print(':');
723
       lcd.print(':');
747
       lcd.print(itostr2(time % 60));
724
       lcd.print(itostr2(time % 60));
873
 #if ENABLED(SDSUPPORT)
850
 #if ENABLED(SDSUPPORT)
874
 
851
 
875
   static void lcd_implementation_drawmenu_sd(bool sel, uint8_t row, const char* pstr, const char* filename, char* longFilename, uint8_t concat, char post_char) {
852
   static void lcd_implementation_drawmenu_sd(bool sel, uint8_t row, const char* pstr, const char* filename, char* longFilename, uint8_t concat, char post_char) {
853
+    UNUSED(pstr);
876
     char c;
854
     char c;
877
     uint8_t n = LCD_WIDTH - concat;
855
     uint8_t n = LCD_WIDTH - concat;
878
     lcd.setCursor(0, row);
856
     lcd.setCursor(0, row);
899
 
877
 
900
 #endif //SDSUPPORT
878
 #endif //SDSUPPORT
901
 
879
 
902
-#define lcd_implementation_drawmenu_back(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0])
880
+#define lcd_implementation_drawmenu_back(sel, row, pstr) lcd_implementation_drawmenu_generic(sel, row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0])
903
 #define lcd_implementation_drawmenu_submenu(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', LCD_STR_ARROW_RIGHT[0])
881
 #define lcd_implementation_drawmenu_submenu(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', LCD_STR_ARROW_RIGHT[0])
904
 #define lcd_implementation_drawmenu_gcode(sel, row, pstr, gcode) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')
882
 #define lcd_implementation_drawmenu_gcode(sel, row, pstr, gcode) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')
905
 #define lcd_implementation_drawmenu_function(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')
883
 #define lcd_implementation_drawmenu_function(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')

Loading…
Cancel
Save