Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
MarlinKimbra
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
machinery
MarlinKimbra
Commits
59733b03
Commit
59733b03
authored
Jun 16, 2015
by
MagoKimbra
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update
parent
002b9fbd
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
850 additions
and
759 deletions
+850
-759
GCodes.md
Documentation/GCodes.md
+6
-2
changelog.md
Documentation/changelog.md
+10
-0
Configuration_adv.h
MarlinKimbra/Configuration_adv.h
+4
-0
Marlin.h
MarlinKimbra/Marlin.h
+0
-1
Marlin_main.cpp
MarlinKimbra/Marlin_main.cpp
+95
-51
conditionals.h
MarlinKimbra/conditionals.h
+618
-625
language_en.h
MarlinKimbra/language_en.h
+8
-3
language_it.h
MarlinKimbra/language_it.h
+8
-3
temperature.cpp
MarlinKimbra/temperature.cpp
+19
-10
ultralcd.cpp
MarlinKimbra/ultralcd.cpp
+54
-52
ultralcd.h
MarlinKimbra/ultralcd.h
+4
-3
ultralcd_implementation_hitachi_HD44780.h
MarlinKimbra/ultralcd_implementation_hitachi_HD44780.h
+24
-9
No files found.
Documentation/GCodes.md
View file @
59733b03
...
...
@@ -16,8 +16,6 @@
Bed Probe and Delta geometry Autocalibration G30 A
*
G31 - Dock Z Probe sled (if enabled)
*
G32 - Undock Z Probe sled (if enabled)
*
G60 - Store in memory the actual position
*
G61 - Move X Y Z to position in memory
*
G90 - Use Absolute Coordinates
*
G91 - Use Relative Coordinates
*
G92 - Set current position to cordinates given
...
...
@@ -91,6 +89,12 @@
*
M302 - Allow cold extrudes
*
M303 - PID relay autotune S
[
temperature
]
sets the target temperature. (default target temperature = 150C)
*
M304 - Set bed PID parameters P I and D
*
M331 - Save current position coordinates (all axes, for active extruder).
*
S
<SLOT>
- specifies memory slot # (0-based) to save into (default 0).
*
M332 - Apply/restore saved coordinates to the active extruder.
*
X Y Z E - Value to add at stored coordinates.
*
F
<speed>
- Set Feedrate.
*
S
<SLOT>
- specifies memory slot # (0-based) to restore from (default 0).
*
M350 - Set microstepping mode.
*
M351 - Toggle MS1 MS2 pins directly.
*
M400 - Finish all moves
...
...
Documentation/changelog.md
View file @
59733b03
...
...
@@ -6,6 +6,16 @@
*
Add Acceleration retraction for extruder.
*
Add EJerk for extruder
*
Remove limit for virtual extruder to 4. Now width MKR4 or NPr2 is possible have infinite extruder...
*
Add M92 T
*
E (Set step per unit for any extruder)
*
Add M203 T
*
E (Set max feedrate for any extruder)
*
Add M204 T
*
R (Set acc retraction for any extruder)
*
Add M205 T
*
E (Set E Jerk for any extruder)
*
Add M331 Save current position coordinates (all axes, for active extruder).
S
<SLOT>
- specifies memory slot # (0-based) to save into (default 0).
*
Add M332 Apply/restore saved coordinates to the active extruder.
X Y Z E - Value to add at stored coordinates.
F
<speed>
- Set Feedrate.
S
<SLOT>
- specifies memory slot # (0-based) to save into (default 0).
### Version 4.1.2
*
Serial message function standardized for a better code style
...
...
MarlinKimbra/Configuration_adv.h
View file @
59733b03
...
...
@@ -381,6 +381,10 @@
#define MM_PER_ARC_SEGMENT 1
#define N_ARC_CORRECTION 25
// Defines the number of memory slots for saving/restoring position (M331/M332)
// The values should not be less than 1
#define NUM_POSITON_SLOTS 2
const
unsigned
int
dropsegments
=
5
;
// everything with less than this number of steps will be ignored as move and joined with the next movement
// Control heater 0 and heater 1 in parallel.
...
...
MarlinKimbra/Marlin.h
View file @
59733b03
...
...
@@ -262,7 +262,6 @@ extern float home_offset[3];
extern
float
min_pos
[
3
];
extern
float
max_pos
[
3
];
extern
bool
axis_known_position
[
3
];
extern
float
lastpos
[
4
];
extern
float
zprobe_zoffset
;
// Lifetime stats
...
...
MarlinKimbra/Marlin_main.cpp
View file @
59733b03
...
...
@@ -92,8 +92,6 @@
* G30 - Single Z Probe, probes bed at current XY location. - Bed Probe and Delta geometry Autocalibration
* G31 - Dock sled (Z_PROBE_SLED only)
* G32 - Undock sled (Z_PROBE_SLED only)
* G60 - Store in memory actual position
* G61 - Move X Y Z to position in memory
* G90 - Use Absolute Coordinates
* G91 - Use Relative Coordinates
* G92 - Set current position to coordinates given
...
...
@@ -181,6 +179,12 @@
* M302 - Allow cold extrudes, or set the minimum extrude S<temperature>.
* M303 - PID relay autotune S<temperature> sets the target temperature. (default target temperature = 150C)
* M304 - Set bed PID parameters P I and D
* M331 - Save current position coordinates (all axes, for active extruder).
* S<SLOT> - specifies memory slot # (0-based) to save into (default 0).
* M332 - Apply/restore saved coordinates to the active extruder.
* X Y Z E - Value to add at stored coordinates.
* F<speed> - Set Feedrate.
* S<SLOT> - specifies memory slot # (0-based) to restore from (default 0).
* M350 - Set microstepping mode.
* M351 - Toggle MS1 MS2 pins directly.
* M380 - Activate solenoid on active extruder
...
...
@@ -235,9 +239,11 @@ uint8_t debugLevel = DEBUG_INFO|DEBUG_ERRORS;
static
float
feedrate
=
1500.0
,
saved_feedrate
;
float
current_position
[
NUM_AXIS
]
=
{
0.0
};
float
destination
[
NUM_AXIS
]
=
{
0.0
};
float
lastpos
[
NUM_AXIS
]
=
{
0.0
};
bool
axis_known_position
[
3
]
=
{
false
};
bool
pos_saved
=
false
;
float
stored_position
[
NUM_POSITON_SLOTS
][
NUM_AXIS
];
static
long
gcode_N
,
gcode_LastN
,
Stopped_gcode_LastN
=
0
;
static
char
*
current_command
,
*
current_command_args
;
...
...
@@ -562,7 +568,7 @@ bool enqueuecommand(const char *cmd) {
SET_OUTPUT
(
EXP_VOLTAGE_LEVEL_PIN
);
WRITE
(
EXP_VOLTAGE_LEVEL_PIN
,
UI_VOLTAGE_LEVEL
);
ExternalDac
::
begin
();
//initialize ExternalDac
lcd_
buzz
(
10
,
10
);
buzz
(
10
,
10
);
}
#endif
...
...
@@ -3639,38 +3645,6 @@ inline void gcode_G28() {
}
#endif // DELTA && Z_PROBE_ENDSTOP
// G60: Store in memory actual position
inline
void
gcode_G60
()
{
memcpy
(
lastpos
,
current_position
,
sizeof
(
lastpos
));
//ECHO_SMV(DB, " Lastpos X: ", lastpos[X_AXIS]);
//ECHO_MV(" Lastpos Y: ", lastpos[Y_AXIS]);
//ECHO_MV(" Lastpos Z: ", lastpos[Z_AXIS]);
//ECHO_EMV(" Lastpos E: ", lastpos[E_AXIS]);
}
// G61: move to X Y Z in memory
inline
void
gcode_G61
()
{
for
(
int8_t
i
=
0
;
i
<
NUM_AXIS
;
i
++
)
{
if
(
code_seen
(
axis_codes
[
i
]))
{
destination
[
i
]
=
(
float
)
code_value
()
+
lastpos
[
i
];
}
else
{
destination
[
i
]
=
current_position
[
i
];
}
}
//ECHO_SMV(DB, " Move to X: ", destination[X_AXIS]);
//ECHO_MV(" Move to Y: ", destination[Y_AXIS]);
//ECHO_MV(" Move to Z: ", destination[Z_AXIS]);
//ECHO_EMV(" Move to E: ", destination[E_AXIS]);
if
(
code_seen
(
'F'
))
{
float
next_feedrate
=
code_value
();
if
(
next_feedrate
>
0.0
)
feedrate
=
next_feedrate
;
}
//finish moves
prepare_move
();
}
/**
* G92: Set current position to given X Y Z E
*/
...
...
@@ -5091,7 +5065,7 @@ inline void gcode_M226() {
}
#endif // NUM_SERVOS > 0
#if HAS_
LCD_BUZZ
#if HAS_
BUZZER
/**
* M300: Play beep sound S<frequency Hz> P<duration ms>
...
...
@@ -5100,10 +5074,10 @@ inline void gcode_M226() {
uint16_t
beepS
=
code_seen
(
'S'
)
?
code_value_short
()
:
100
;
uint32_t
beepP
=
code_seen
(
'P'
)
?
code_value_long
()
:
1000
;
if
(
beepP
>
5000
)
beepP
=
5000
;
// limit to 5 seconds
lcd_
buzz
(
beepP
,
beepS
);
buzz
(
beepP
,
beepS
);
}
#endif // HAS_
LCD_BUZZ
#endif // HAS_
BUZZER
#ifdef PIDTEMP
...
...
@@ -5175,6 +5149,73 @@ inline void gcode_M226() {
}
#endif // PIDTEMPBED
/**
* M331: save current position
* S<slot> specifies memory slot # (0-based) to save into (default 0)
*/
inline
void
gcode_M331
()
{
int
slot
=
0
;
if
(
code_seen
(
'S'
))
slot
=
code_value
();
if
(
slot
<
0
||
slot
>=
NUM_POSITON_SLOTS
)
{
ECHO_LMV
(
ER
,
MSG_INVALID_POS_SLOT
,
(
int
)
NUM_POSITON_SLOTS
);
return
;
}
memcpy
(
stored_position
[
slot
],
current_position
,
sizeof
(
*
stored_position
));
pos_saved
=
true
;
ECHO_SM
(
DB
,
MSG_SAVED_POS
);
ECHO_MV
(
" S"
,
slot
);
ECHO_MV
(
"<-X:"
,
stored_position
[
slot
][
X_AXIS
]);
ECHO_MV
(
" Y:"
,
stored_position
[
slot
][
Y_AXIS
]);
ECHO_MV
(
" Z:"
,
stored_position
[
slot
][
Z_AXIS
]);
ECHO_EMV
(
" E:"
,
stored_position
[
slot
][
E_AXIS
]);
}
/**
* M332: Apply/restore saved coordinates to the active extruder.
* X Y Z E - Value to add at stored coordinates.
* F<speed> - Set Feedrate.
* S<slot> specifies memory slot # (0-based) to save into (default 0).
*/
inline
void
gcode_M332
()
{
if
(
!
pos_saved
)
return
;
bool
make_move
=
false
;
int
slot
=
0
;
if
(
code_seen
(
'S'
))
slot
=
code_value
();
if
(
slot
<
0
||
slot
>=
NUM_POSITON_SLOTS
)
{
ECHO_LMV
(
ER
,
MSG_INVALID_POS_SLOT
,
(
int
)
NUM_POSITON_SLOTS
);
return
;
}
ECHO_SM
(
DB
,
MSG_RESTORING_POS
);
ECHO_MV
(
" S"
,
slot
);
ECHO_M
(
"->"
);
if
(
code_seen
(
'F'
))
{
float
next_feedrate
=
code_value
();
if
(
next_feedrate
>
0.0
)
feedrate
=
next_feedrate
;
}
for
(
int8_t
i
=
0
;
i
<
NUM_AXIS
;
i
++
)
{
if
(
code_seen
(
axis_codes
[
i
]))
{
destination
[
i
]
=
(
float
)
code_value
()
+
stored_position
[
slot
][
i
];
}
else
{
destination
[
i
]
=
current_position
[
i
];
}
ECHO_MV
(
" "
,
axis_codes
[
i
]);
ECHO_MV
(
":"
,
destination
[
i
]);
}
ECHO_E
;
//finish moves
prepare_move
();
st_synchronize
();
}
#if HAS_MICROSTEPS
// M350 Set microstepping mode. Warning: Steps per unit remains unchanged. S code sets stepping mode for all drivers.
inline
void
gcode_M350
()
{
...
...
@@ -5450,7 +5491,7 @@ inline void gcode_M428() {
else
{
ECHO_LM
(
ER
,
MSG_ERR_M428_TOO_FAR
);
LCD_ALERTMESSAGEPGM
(
"Err: Too far!"
);
#if HAS_
LCD_BUZZ
#if HAS_
BUZZER
enqueuecommands_P
(
PSTR
(
"M300 S40 P200"
));
#endif
err
=
true
;
...
...
@@ -5469,7 +5510,7 @@ inline void gcode_M428() {
#endif
ECHO_LM
(
DB
,
"Offset applied."
);
LCD_ALERTMESSAGEPGM
(
"Offset applied."
);
#if HAS_
LCD_BUZZ
#if HAS_
BUZZER
enqueuecommands_P
(
PSTR
(
"M300 S659 P200
\n
M300 S698 P200"
));
#endif
}
...
...
@@ -5528,7 +5569,7 @@ inline void gcode_M503() {
*
*/
inline
void
gcode_M600
()
{
float
target
[
NUM_AXIS
],
fr60
=
feedrate
/
60
;
float
lastpos
[
NUM_AXIS
],
target
[
NUM_AXIS
],
fr60
=
feedrate
/
60
;
filament_changing
=
true
;
for
(
int
i
=
0
;
i
<
NUM_AXIS
;
i
++
)
target
[
i
]
=
lastpos
[
i
]
=
current_position
[
i
];
...
...
@@ -5605,7 +5646,7 @@ inline void gcode_M503() {
LCD_ALERTMESSAGEPGM
(
"Zzzz Zzzz Zzzz"
);
}
if
(
beep
)
{
for
(
int8_t
i
=
0
;
i
<
3
;
i
++
)
lcd_
buzz
(
100
,
1000
);
for
(
int8_t
i
=
0
;
i
<
3
;
i
++
)
buzz
(
100
,
1000
);
last_set
=
millis
();
beep
=
false
;
++
cnt
;
...
...
@@ -6215,9 +6256,9 @@ void process_next_command() {
#endif // DELTA && Z_PROBE_ENDSTOP
case
60
:
// G60 Store in memory actual position
gcode_
G60
();
break
;
gcode_
M331
();
break
;
case
61
:
// G61 move to X Y Z in memory
gcode_
G61
();
break
;
gcode_
M332
();
break
;
case
90
:
// G90
relative_mode
=
false
;
break
;
case
91
:
// G91
...
...
@@ -6436,10 +6477,10 @@ void process_next_command() {
gcode_M280
();
break
;
#endif // NUM_SERVOS > 0
#if HAS_
LCD_BUZZ
#if HAS_
BUZZER
case
300
:
// M300 - Play beep tone
gcode_M300
();
break
;
#endif // HAS_
LCD_BUZZ
#endif // HAS_
BUZZER
#ifdef PIDTEMP
case
301
:
// M301
...
...
@@ -6461,13 +6502,16 @@ void process_next_command() {
gcode_M304
();
break
;
#endif // PIDTEMPBED
case
331
:
// M331 Saved Coordinated
gcode_M331
();
break
;
case
332
:
// M332 Restored Coordinates
gcode_M332
();
break
;
#if HAS_MICROSTEPS
case
350
:
// M350 Set microstepping mode. Warning: Steps per unit remains unchanged. S code sets stepping mode for all drivers.
gcode_M350
();
break
;
gcode_M350
();
break
;
case
351
:
// M351 Toggle MS1 MS2 pins directly, S# determines MS1 or MS2, X# sets the pin high/low.
gcode_M351
();
break
;
gcode_M351
();
break
;
#endif // HAS_MICROSTEPS
#ifdef SCARA
...
...
MarlinKimbra/conditionals.h
View file @
59733b03
...
...
@@ -4,648 +4,641 @@
*/
#ifndef CONDITIONALS_H
#ifndef CONFIGURATION_LCD // Get the LCD defines which are needed first
#define CONFIGURATION_LCD
#define PIN_EXISTS(PN) (defined(PN##_PIN) && PN##_PIN >= 0)
#ifdef MAKRPANEL
#define DOGLCD
#define SDSUPPORT
#define DEFAULT_LCD_CONTRAST 17
#define ULTIPANEL
#define NEWPANEL
#endif
#if defined(miniVIKI) || defined(VIKI2) || defined(ELB_FULL_GRAPHIC_CONTROLLER)
#define ULTRA_LCD //general LCD support, also 16x2
#define DOGLCD // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
#define ULTIMAKERCONTROLLER //as available from the Ultimaker online store.
#ifdef miniVIKI
#define DEFAULT_LCD_CONTRAST 95
#elif defined(VIKI2)
#define DEFAULT_LCD_CONTRAST 40
#elif defined(ELB_FULL_GRAPHIC_CONTROLLER)
#define DEFAULT_LCD_CONTRAST 110
#define U8GLIB_LM6059_AF
#endif
#ifndef CONFIGURATION_LCD // Get the LCD defines which are needed first
#define CONFIGURATION_LCD
#define PIN_EXISTS(PN) (defined(PN##_PIN) && PN##_PIN >= 0)
#ifdef MAKRPANEL
#define DOGLCD
#define SDSUPPORT
#define DEFAULT_LCD_CONTRAST 17
#define ULTIPANEL
#define NEWPANEL
#endif
#if defined(miniVIKI) || defined(VIKI2) || defined(ELB_FULL_GRAPHIC_CONTROLLER)
#define ULTRA_LCD //general LCD support, also 16x2
#define DOGLCD // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
#define ULTIMAKERCONTROLLER //as available from the Ultimaker online store.
#ifdef miniVIKI
#define DEFAULT_LCD_CONTRAST 95
#elif defined(VIKI2)
#define DEFAULT_LCD_CONTRAST 40
#elif defined(ELB_FULL_GRAPHIC_CONTROLLER)
#define DEFAULT_LCD_CONTRAST 110
#define U8GLIB_LM6059_AF
#endif
#define ENCODER_PULSES_PER_STEP 4
#define ENCODER_STEPS_PER_MENU_ITEM 1
#endif
// Generic support for SSD1306 OLED based LCDs.
#if defined(U8GLIB_SSD1306)
#define ULTRA_LCD //general LCD support, also 16x2
#define DOGLCD // Support for I2C LCD 128x64 (Controller SSD1306 graphic Display Family)
#endif
#ifdef PANEL_ONE
#define SDSUPPORT
#define ULTIMAKERCONTROLLER
#endif
#ifdef REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
#define DOGLCD
#define U8GLIB_ST7920
#define REPRAP_DISCOUNT_SMART_CONTROLLER
#endif
#if defined(ULTIMAKERCONTROLLER) || defined(REPRAP_DISCOUNT_SMART_CONTROLLER) || defined(G3D_PANEL)
#define ULTIPANEL
#define NEWPANEL
#endif
#ifdef RADDS_DISPLAY
#define ENCODER_PULSES_PER_STEP 2
#define ENCODER_STEPS_PER_MENU_ITEM 1
#define ULTIPANEL
#define NEWPANEL
#endif
#ifdef REPRAPWORLD_KEYPAD
#define ULTIPANEL
#define NEWPANEL
#endif
#ifdef RA_CONTROL_PANEL
#define LCD_I2C_TYPE_PCA8574
#define LCD_I2C_ADDRESS 0x27 // I2C Address of the port expander
#define ULTIPANEL
#define NEWPANEL
#endif
/**
* I2C PANELS
*/
#ifdef LCD_I2C_SAINSMART_YWROBOT
// This uses the LiquidCrystal_I2C library ( https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home )
// Make sure it is placed in the Arduino libraries directory.
#define LCD_I2C_TYPE_PCF8575
#define LCD_I2C_ADDRESS 0x27 // I2C Address of the port expander
#define ULTIPANEL
#define NEWPANEL
#endif
// PANELOLU2 LCD with status LEDs, separate encoder and click inputs
#ifdef LCD_I2C_PANELOLU2
// This uses the LiquidTWI2 library v1.2.3 or later ( https://github.com/lincomatic/LiquidTWI2 )
// Make sure the LiquidTWI2 directory is placed in the Arduino or Sketchbook libraries subdirectory.
// (v1.2.3 no longer requires you to define PANELOLU in the LiquidTWI2.h library header file)
// Note: The PANELOLU2 encoder click input can either be directly connected to a pin
// (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).
#define LCD_I2C_TYPE_MCP23017
#define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
#define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD
#ifndef ENCODER_PULSES_PER_STEP
#define ENCODER_PULSES_PER_STEP 4
#define ENCODER_STEPS_PER_MENU_ITEM 1
#endif
// Generic support for SSD1306 OLED based LCDs.
#if defined(U8GLIB_SSD1306)
#define ULTRA_LCD //general LCD support, also 16x2
#define DOGLCD // Support for I2C LCD 128x64 (Controller SSD1306 graphic Display Family)
#endif
#ifdef PANEL_ONE
#define SDSUPPORT
#define ULTIMAKERCONTROLLER
#endif
#ifdef REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
#define DOGLCD
#define U8GLIB_ST7920
#define REPRAP_DISCOUNT_SMART_CONTROLLER
#endif
#if defined(ULTIMAKERCONTROLLER) || defined(REPRAP_DISCOUNT_SMART_CONTROLLER) || defined(G3D_PANEL)
#define ULTIPANEL
#define NEWPANEL
#endif
#ifdef RADDS_DISPLAY
#define ENCODER_PULSES_PER_STEP 2
#ifndef ENCODER_STEPS_PER_MENU_ITEM
#define ENCODER_STEPS_PER_MENU_ITEM 1
#define ULTIPANEL
#define NEWPANEL
#endif
#ifdef REPRAPWORLD_KEYPAD
#define ULTIPANEL
#define NEWPANEL
#endif
#ifdef RA_CONTROL_PANEL
#define LCD_I2C_TYPE_PCA8574
#define LCD_I2C_ADDRESS 0x27 // I2C Address of the port expander
#define ULTIPANEL
#define NEWPANEL
#endif
/**
* I2C PANELS
*/
#ifdef LCD_I2C_SAINSMART_YWROBOT
// This uses the LiquidCrystal_I2C library ( https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home )
// Make sure it is placed in the Arduino libraries directory.
#define LCD_I2C_TYPE_PCF8575
#define LCD_I2C_ADDRESS 0x27 // I2C Address of the port expander
#define ULTIPANEL
#define NEWPANEL
#endif
// PANELOLU2 LCD with status LEDs, separate encoder and click inputs
#ifdef LCD_I2C_PANELOLU2
// This uses the LiquidTWI2 library v1.2.3 or later ( https://github.com/lincomatic/LiquidTWI2 )
// Make sure the LiquidTWI2 directory is placed in the Arduino or Sketchbook libraries subdirectory.
// (v1.2.3 no longer requires you to define PANELOLU in the LiquidTWI2.h library header file)
// Note: The PANELOLU2 encoder click input can either be directly connected to a pin
// (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).
#define LCD_I2C_TYPE_MCP23017
#define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
#define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD
#ifndef ENCODER_PULSES_PER_STEP
#define ENCODER_PULSES_PER_STEP 4
#endif
#ifndef ENCODER_STEPS_PER_MENU_ITEM
#define ENCODER_STEPS_PER_MENU_ITEM 1
#endif
#ifdef LCD_USE_I2C_BUZZER
#define LCD_FEEDBACK_FREQUENCY_HZ 1000
#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
#endif
#define ULTIPANEL
#define NEWPANEL
#endif
// Panucatt VIKI LCD with status LEDs, integrated click & L/R/U/P buttons, separate encoder inputs
#ifdef LCD_I2C_VIKI
// This uses the LiquidTWI2 library v1.2.3 or later ( https://github.com/lincomatic/LiquidTWI2 )
// Make sure the LiquidTWI2 directory is placed in the Arduino or Sketchbook libraries subdirectory.
// Note: The pause/stop/resume LCD button pin should be connected to the Arduino
// BTN_ENC pin (or set BTN_ENC to -1 if not used)
#define LCD_I2C_TYPE_MCP23017
#define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
#define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD (requires LiquidTWI2 v1.2.3 or later)
#define ULTIPANEL
#define NEWPANEL
#endif
// Shift register panels
// ---------------------
// 2 wire Non-latching LCD SR from:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection
#ifdef SAV_3DLCD
#define SR_LCD_2W_NL // Non latching 2 wire shiftregister
#define ULTIPANEL
#define NEWPANEL
#ifdef LCD_USE_I2C_BUZZER
#define LCD_FEEDBACK_FREQUENCY_HZ 1000
#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
#endif
#define ULTIPANEL
#define NEWPANEL
#endif
// Panucatt VIKI LCD with status LEDs, integrated click & L/R/U/P buttons, separate encoder inputs
#ifdef LCD_I2C_VIKI
// This uses the LiquidTWI2 library v1.2.3 or later ( https://github.com/lincomatic/LiquidTWI2 )
// Make sure the LiquidTWI2 directory is placed in the Arduino or Sketchbook libraries subdirectory.
// Note: The pause/stop/resume LCD button pin should be connected to the Arduino
// BTN_ENC pin (or set BTN_ENC to -1 if not used)
#define LCD_I2C_TYPE_MCP23017
#define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
#define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD (requires LiquidTWI2 v1.2.3 or later)
#define ULTIPANEL
#define NEWPANEL
#endif
// Shift register panels
// ---------------------
// 2 wire Non-latching LCD SR from:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection
#ifdef SAV_3DLCD
#define SR_LCD_2W_NL // Non latching 2 wire shiftregister
#define ULTIPANEL
#define NEWPANEL
#endif
#ifdef ULTIPANEL
#define NEWPANEL //enable this if you have a click-encoder panel
#define SDSUPPORT
#define ULTRA_LCD
#ifdef DOGLCD // Change number of lines to match the DOG graphic display
#define LCD_WIDTH 22
#define LCD_HEIGHT 5
#else
#define LCD_WIDTH 20
#define LCD_HEIGHT 4
#endif
#ifdef ULTIPANEL
#define NEWPANEL //enable this if you have a click-encoder panel
#define SDSUPPORT
#define ULTRA_LCD
#ifdef DOGLCD // Change number of lines to match the DOG graphic display
#else //no panel but just LCD
#ifdef ULTRA_LCD
#ifdef DOGLCD // Change number of lines to match the 128x64 graphics display
#define LCD_WIDTH 22
#define LCD_HEIGHT 5
#else
#define LCD_WIDTH 20
#define LCD_HEIGHT 4
#endif
#else //no panel but just LCD
#ifdef ULTRA_LCD
#ifdef DOGLCD // Change number of lines to match the 128x64 graphics display
#define LCD_WIDTH 22
#define LCD_HEIGHT 5
#else
#define LCD_WIDTH 16
#define LCD_HEIGHT 2
#endif
#endif
#endif
#ifdef DOGLCD
/* Custom characters defined in font font_6x10_marlin_symbols */
// \x00 intentionally skipped to avoid problems in strings
#define LCD_STR_REFRESH "\x01"
#define LCD_STR_FOLDER "\x02"
#define LCD_STR_ARROW_RIGHT "\x03"
#define LCD_STR_UPLEVEL "\x04"
#define LCD_STR_CLOCK "\x05"
#define LCD_STR_FEEDRATE "\x06"
#define LCD_STR_BEDTEMP "\x07"
#define LCD_STR_THERMOMETER "\x08"
#define LCD_STR_DEGREE "\x09"
#define LCD_STR_SPECIAL_MAX '\x09'
// Maximum here is 0x1f because 0x20 is ' ' (space) and the normal charsets begin.
// Better stay below 0x10 because DISPLAY_CHARSET_HD44780_WESTERN begins here.
#else
/* Custom characters defined in the first 8 characters of the LCD */
#define LCD_STR_BEDTEMP "\x00" // this will have 'unexpected' results when used in a string!
#define LCD_STR_DEGREE "\x01"
#define LCD_STR_THERMOMETER "\x02"
#define LCD_STR_UPLEVEL "\x03"
#define LCD_STR_REFRESH "\x04"
#define LCD_STR_FOLDER "\x05"
#define LCD_STR_FEEDRATE "\x06"
#define LCD_STR_CLOCK "\x07"
#define LCD_STR_ARROW_RIGHT ">"
/* from the default character set */
#endif
/**
* Default LCD contrast for dogm-like LCD displays
*/
#if defined(DOGLCD) && !defined(DEFAULT_LCD_CONTRAST)
#define DEFAULT_LCD_CONTRAST 32
#endif
#ifdef DOGLCD
#define HAS_LCD_CONTRAST
#ifdef U8GLIB_ST7920
#undef HAS_LCD_CONTRAST
#endif
#ifdef U8GLIB_SSD1306
#undef HAS_LCD_CONTRAST
#endif
#endif
/**
* LCD BUZZ
*/
#define HAS_LCD_BUZZ (defined(ULTRA_LCD) || (defined(BEEPER) && BEEPER >= 0) || defined(LCD_USE_I2C_BUZZER))
/**
* SPLASH_SCREEN_DURATION for no DOGLCD display
*/
#ifndef DOGLCD
#undef SPLASH_SCREEN_DURATION
#define SPLASH_SCREEN_DURATION 500
#endif
#else // CONFIGURATION_LCD
#define CONDITIONALS_H
/**
* SINGLENOZZLE
*/
#ifdef SINGLENOZZLE
#define HOTENDS 1
#undef TEMP_SENSOR_1_AS_REDUNDANT
#else
#define HOTENDS EXTRUDERS
#endif
/**
* DRIVER_EXTRUDERS
*/
#if !defined(MKR4) && !defined(NPR2)
#define DRIVER_EXTRUDERS EXTRUDERS // This defines the number of Driver extruder
#endif
#ifndef __SAM3X8E__
#ifndef AT90USB
#define HardwareSerial_h // trick to disable the standard HWserial
#endif
#endif
#if (ARDUINO >= 100)
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include "pins.h"
/**
* ENDSTOPPULLUPS
*/
#ifdef ENDSTOPPULLUPS
#define ENDSTOPPULLUP_XMAX
#define ENDSTOPPULLUP_YMAX
#define ENDSTOPPULLUP_ZMAX
#define ENDSTOPPULLUP_XMIN
#define ENDSTOPPULLUP_YMIN
#define ENDSTOPPULLUP_ZMIN
#define ENDSTOPPULLUP_EMIN
#define ENDSTOPPULLUP_ZPROBE
#endif
/**
* ENDSTOP LOGICAL
*/
#if MB(ALLIGATOR)
#define X_MIN_ENDSTOP_INVERTING !X_MIN_ENDSTOP_LOGIC
#define Y_MIN_ENDSTOP_INVERTING !Y_MIN_ENDSTOP_LOGIC
#define Z_MIN_ENDSTOP_INVERTING !Z_MIN_ENDSTOP_LOGIC
#define Z2_MIN_ENDSTOP_INVERTING !Z2_MIN_ENDSTOP_LOGIC
#define E_MIN_ENDSTOP_INVERTING !E_MIN_ENDSTOP_LOGIC
#define X_MAX_ENDSTOP_INVERTING !X_MAX_ENDSTOP_LOGIC
#define Y_MAX_ENDSTOP_INVERTING !Y_MAX_ENDSTOP_LOGIC
#define Z_MAX_ENDSTOP_INVERTING !Z_MAX_ENDSTOP_LOGIC
#define Z2_MAX_ENDSTOP_INVERTING !Z2_MAX_ENDSTOP_LOGIC
#define Z_PROBE_ENDSTOP_INVERTING !Z_PROBE_ENDSTOP_LOGIC
#else
#define X_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_LOGIC
#define Y_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_LOGIC
#define Z_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_LOGIC
#define Z2_MIN_ENDSTOP_INVERTING Z2_MIN_ENDSTOP_LOGIC
#define E_MIN_ENDSTOP_INVERTING E_MIN_ENDSTOP_LOGIC
#define X_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_LOGIC
#define Y_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_LOGIC
#define Z_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_LOGIC
#define Z2_MAX_ENDSTOP_INVERTING Z2_MAX_ENDSTOP_LOGIC
#define Z_PROBE_ENDSTOP_INVERTING Z_PROBE_ENDSTOP_LOGIC
#endif
/**
* Firmware Test
*/
#ifdef FIRMWARE_TEST
#undef BAUDRATE
#define BAUDRATE 115200 // Baudrate setting to 115200 because serial monitor arduino function at max 115200 baudrate.
#endif
/**
* Axis lengths
*/
#define X_MAX_LENGTH (X_MAX_POS - X_MIN_POS)
#define Y_MAX_LENGTH (Y_MAX_POS - Y_MIN_POS)
#define Z_MAX_LENGTH (Z_MAX_POS - Z_MIN_POS)
/**
* SCARA
*/
#ifdef SCARA
#undef SLOWDOWN
#define QUICK_HOME //SCARA needs Quickhome
#endif
/**
* DELTA
*/
#ifdef DELTA
#undef SLOWDOWN //DELTA not needs SLOWDOWN
#define AUTOLEVEL_GRID_MULTI 1/AUTOLEVEL_GRID
// DELTA must have same valour for 3 axis endstop hits
#undef Y_HOME_BUMP_MM
#undef Z_HOME_BUMP_MM
#define Y_HOME_BUMP_MM X_HOME_BUMP_MM
#define Z_HOME_BUMP_MM X_HOME_BUMP_MM
// Effective horizontal distance bridged by diagonal push rods.
#define DEFAULT_DELTA_RADIUS (DELTA_SMOOTH_ROD_OFFSET-DELTA_EFFECTOR_OFFSET-DELTA_CARRIAGE_OFFSET)
#define DELTA_PROBABLE_RADIUS (PRINTER_RADIUS - 10)
#define LEFT_PROBE_BED_POSITION -DELTA_PROBABLE_RADIUS
#define RIGHT_PROBE_BED_POSITION DELTA_PROBABLE_RADIUS
#define FRONT_PROBE_BED_POSITION -DELTA_PROBABLE_RADIUS
#define BACK_PROBE_BED_POSITION DELTA_PROBABLE_RADIUS
#endif
/**
* AUTOSET LOCATIONS OF LIMIT SWITCHES
* Added by ZetaPhoenix 09-15-2012
*/
#ifdef MANUAL_HOME_POSITIONS // Use manual limit switch locations
#define X_HOME_POS MANUAL_X_HOME_POS
#define Y_HOME_POS MANUAL_Y_HOME_POS
#define Z_HOME_POS MANUAL_Z_HOME_POS
#else //!MANUAL_HOME_POSITIONS – Use home switch positions based on homing direction and travel limits
#ifdef BED_CENTER_AT_0_0
#define X_HOME_POS X_MAX_LENGTH * X_HOME_DIR * 0.5
#define Y_HOME_POS Y_MAX_LENGTH * Y_HOME_DIR * 0.5
#else
#define X_HOME_POS (X_HOME_DIR < 0 ? X_MIN_POS : X_MAX_POS)
#define Y_HOME_POS (Y_HOME_DIR < 0 ? Y_MIN_POS : Y_MAX_POS)
#define LCD_WIDTH 16
#define LCD_HEIGHT 2
#endif
#define Z_HOME_POS (Z_HOME_DIR < 0 ? Z_MIN_POS : Z_MAX_POS)
#endif //!MANUAL_HOME_POSITIONS
/**
* Auto Bed Leveling
*/
#ifdef ENABLE_AUTO_BED_LEVELING
// Boundaries for probing based on set limits
#define MIN_PROBE_X (max(X_MIN_POS, X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
#define MAX_PROBE_X (min(X_MAX_POS, X_MAX_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
#define MIN_PROBE_Y (max(Y_MIN_POS, Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
#define MAX_PROBE_Y (min(Y_MAX_POS, Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
#endif
/**
* Sled Options
*/
#ifdef Z_PROBE_SLED
#define Z_SAFE_HOMING
#endif
#endif
#ifdef DOGLCD
/* Custom characters defined in font font_6x10_marlin_symbols */
// \x00 intentionally skipped to avoid problems in strings
#define LCD_STR_REFRESH "\x01"
#define LCD_STR_FOLDER "\x02"
#define LCD_STR_ARROW_RIGHT "\x03"
#define LCD_STR_UPLEVEL "\x04"
#define LCD_STR_CLOCK "\x05"
#define LCD_STR_FEEDRATE "\x06"
#define LCD_STR_BEDTEMP "\x07"
#define LCD_STR_THERMOMETER "\x08"
#define LCD_STR_DEGREE "\x09"
#define LCD_STR_SPECIAL_MAX '\x09'
// Maximum here is 0x1f because 0x20 is ' ' (space) and the normal charsets begin.
// Better stay below 0x10 because DISPLAY_CHARSET_HD44780_WESTERN begins here.
#else
/* Custom characters defined in the first 8 characters of the LCD */
#define LCD_STR_BEDTEMP "\x00" // this will have 'unexpected' results when used in a string!
#define LCD_STR_DEGREE "\x01"
#define LCD_STR_THERMOMETER "\x02"
#define LCD_STR_UPLEVEL "\x03"
#define LCD_STR_REFRESH "\x04"
#define LCD_STR_FOLDER "\x05"
#define LCD_STR_FEEDRATE "\x06"
#define LCD_STR_CLOCK "\x07"
#define LCD_STR_ARROW_RIGHT ">"
/* from the default character set */
#endif
/**
* Default LCD contrast for dogm-like LCD displays
*/
#if defined(DOGLCD) && !defined(DEFAULT_LCD_CONTRAST)
#define DEFAULT_LCD_CONTRAST 32
#endif
#ifdef DOGLCD
#define HAS_LCD_CONTRAST
#ifdef U8GLIB_ST7920
#undef HAS_LCD_CONTRAST
#endif
#ifdef U8GLIB_SSD1306
#undef HAS_LCD_CONTRAST
#endif
#endif
/**
* SPLASH_SCREEN_DURATION for no DOGLCD display
*/
#ifndef DOGLCD
#undef SPLASH_SCREEN_DURATION
#define SPLASH_SCREEN_DURATION 500
#endif
#else // CONFIGURATION_LCD
#define CONDITIONALS_H
/**
* SINGLENOZZLE
*/
#ifdef SINGLENOZZLE
#define HOTENDS 1
#undef TEMP_SENSOR_1_AS_REDUNDANT
#else
#define HOTENDS EXTRUDERS
#endif
/**
* DRIVER_EXTRUDERS
*/
#if !defined(MKR4) && !defined(NPR2)
#define DRIVER_EXTRUDERS EXTRUDERS // This defines the number of Driver extruder
#endif
#ifndef __SAM3X8E__
#ifndef AT90USB
#define HardwareSerial_h // trick to disable the standard HWserial
#endif
#endif
#include "Arduino.h"
#include "pins.h"
/**
* ENDSTOPPULLUPS
*/
#ifdef ENDSTOPPULLUPS
#define ENDSTOPPULLUP_XMAX
#define ENDSTOPPULLUP_YMAX
#define ENDSTOPPULLUP_ZMAX
#define ENDSTOPPULLUP_XMIN
#define ENDSTOPPULLUP_YMIN
#define ENDSTOPPULLUP_ZMIN
#define ENDSTOPPULLUP_EMIN
#define ENDSTOPPULLUP_ZPROBE
#endif
/**
* ENDSTOP LOGICAL
*/
#if MB(ALLIGATOR)
#define X_MIN_ENDSTOP_INVERTING !X_MIN_ENDSTOP_LOGIC
#define Y_MIN_ENDSTOP_INVERTING !Y_MIN_ENDSTOP_LOGIC
#define Z_MIN_ENDSTOP_INVERTING !Z_MIN_ENDSTOP_LOGIC
#define Z2_MIN_ENDSTOP_INVERTING !Z2_MIN_ENDSTOP_LOGIC
#define E_MIN_ENDSTOP_INVERTING !E_MIN_ENDSTOP_LOGIC
#define X_MAX_ENDSTOP_INVERTING !X_MAX_ENDSTOP_LOGIC
#define Y_MAX_ENDSTOP_INVERTING !Y_MAX_ENDSTOP_LOGIC
#define Z_MAX_ENDSTOP_INVERTING !Z_MAX_ENDSTOP_LOGIC
#define Z2_MAX_ENDSTOP_INVERTING !Z2_MAX_ENDSTOP_LOGIC
#define Z_PROBE_ENDSTOP_INVERTING !Z_PROBE_ENDSTOP_LOGIC
#else
#define X_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_LOGIC
#define Y_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_LOGIC
#define Z_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_LOGIC
#define Z2_MIN_ENDSTOP_INVERTING Z2_MIN_ENDSTOP_LOGIC
#define E_MIN_ENDSTOP_INVERTING E_MIN_ENDSTOP_LOGIC
#define X_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_LOGIC
#define Y_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_LOGIC
#define Z_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_LOGIC
#define Z2_MAX_ENDSTOP_INVERTING Z2_MAX_ENDSTOP_LOGIC
#define Z_PROBE_ENDSTOP_INVERTING Z_PROBE_ENDSTOP_LOGIC
#endif
/**
* Firmware Test
*/
#ifdef FIRMWARE_TEST
#undef BAUDRATE
#define BAUDRATE 115200 // Baudrate setting to 115200 because serial monitor arduino function at max 115200 baudrate.
#endif
/**
* Axis lengths
*/
#define X_MAX_LENGTH (X_MAX_POS - X_MIN_POS)
#define Y_MAX_LENGTH (Y_MAX_POS - Y_MIN_POS)
#define Z_MAX_LENGTH (Z_MAX_POS - Z_MIN_POS)
/**
* SCARA
*/
#ifdef SCARA
#undef SLOWDOWN
#define QUICK_HOME //SCARA needs Quickhome
#endif
/**
* DELTA
*/
#ifdef DELTA
#undef SLOWDOWN //DELTA not needs SLOWDOWN
#define AUTOLEVEL_GRID_MULTI 1/AUTOLEVEL_GRID
// DELTA must have same valour for 3 axis endstop hits
#undef Y_HOME_BUMP_MM
#undef Z_HOME_BUMP_MM
#define Y_HOME_BUMP_MM X_HOME_BUMP_MM
#define Z_HOME_BUMP_MM X_HOME_BUMP_MM
// Effective horizontal distance bridged by diagonal push rods.
#define DEFAULT_DELTA_RADIUS (DELTA_SMOOTH_ROD_OFFSET-DELTA_EFFECTOR_OFFSET-DELTA_CARRIAGE_OFFSET)
#define DELTA_PROBABLE_RADIUS (PRINTER_RADIUS - 10)
#define LEFT_PROBE_BED_POSITION -DELTA_PROBABLE_RADIUS
#define RIGHT_PROBE_BED_POSITION DELTA_PROBABLE_RADIUS
#define FRONT_PROBE_BED_POSITION -DELTA_PROBABLE_RADIUS
#define BACK_PROBE_BED_POSITION DELTA_PROBABLE_RADIUS
#endif
/**
* Servo Leveling
*/
#define SERVO_LEVELING (NUM_SERVOS > 0 && defined(ENABLE_AUTO_BED_LEVELING))
#define SERVO_LEVELING_DELAY (SERVO_LEVELING && PROBE_SERVO_DEACTIVATION_DELAY > 0)
/**
* MAX_STEP_FREQUENCY differs for TOSHIBA OR ARDUINO DUE OR ARDUINO MEGA
*/
#ifdef __SAM3X8E__
#if defined(CONFIG_STEPPERS_TOSHIBA) || !defined(ENABLE_HIGH_SPEED_STEPPING)
#define MAX_STEP_FREQUENCY 150000 // Max step frequency for Toshiba Stepper Controllers
#define DOUBLE_STEP_FREQUENCY MAX_STEP_FREQUENCY
#else
#define MAX_STEP_FREQUENCY 500000 // Max step frequency for the Due is approx. 330kHz
#define DOUBLE_STEP_FREQUENCY 120000 //96kHz is close to maximum for an Arduino Due
#endif
/**
* AUTOSET LOCATIONS OF LIMIT SWITCHES
* Added by ZetaPhoenix 09-15-2012
*/
#ifdef MANUAL_HOME_POSITIONS // Use manual limit switch locations
#define X_HOME_POS MANUAL_X_HOME_POS
#define Y_HOME_POS MANUAL_Y_HOME_POS
#define Z_HOME_POS MANUAL_Z_HOME_POS
#else //!MANUAL_HOME_POSITIONS – Use home switch positions based on homing direction and travel limits
#ifdef BED_CENTER_AT_0_0
#define X_HOME_POS X_MAX_LENGTH * X_HOME_DIR * 0.5
#define Y_HOME_POS Y_MAX_LENGTH * Y_HOME_DIR * 0.5
#else
#if defined(CONFIG_STEPPERS_TOSHIBA) || !defined(ENABLE_HIGH_SPEED_STEPPING)
#define MAX_STEP_FREQUENCY 10000 // Max step frequency for Toshiba Stepper Controllers
#define DOUBLE_STEP_FREQUENCY MAX_STEP_FREQUENCY
#else
#define MAX_STEP_FREQUENCY 40000 // Max step frequency for Arduino mega
#endif
#endif
// MS1 MS2 Stepper Driver Microstepping mode table
#define MICROSTEP1 LOW,LOW
#define MICROSTEP2 HIGH,LOW
#define MICROSTEP4 LOW,HIGH
#define MICROSTEP8 HIGH,HIGH
#if MB(ALLIGATOR)
#define MICROSTEP16 LOW,LOW
#define MICROSTEP32 HIGH,HIGH
#define X_HOME_POS (X_HOME_DIR < 0 ? X_MIN_POS : X_MAX_POS)
#define Y_HOME_POS (Y_HOME_DIR < 0 ? Y_MIN_POS : Y_MAX_POS)
#endif
#define Z_HOME_POS (Z_HOME_DIR < 0 ? Z_MIN_POS : Z_MAX_POS)
#endif //!MANUAL_HOME_POSITIONS
/**
* Auto Bed Leveling
*/
#ifdef ENABLE_AUTO_BED_LEVELING
// Boundaries for probing based on set limits
#define MIN_PROBE_X (max(X_MIN_POS, X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
#define MAX_PROBE_X (min(X_MAX_POS, X_MAX_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
#define MIN_PROBE_Y (max(Y_MIN_POS, Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
#define MAX_PROBE_Y (min(Y_MAX_POS, Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
#endif
/**
* Sled Options
*/
#ifdef Z_PROBE_SLED
#define Z_SAFE_HOMING
#endif
/**
* Servo Leveling
*/
#define SERVO_LEVELING (NUM_SERVOS > 0 && defined(ENABLE_AUTO_BED_LEVELING))
#define SERVO_LEVELING_DELAY (SERVO_LEVELING && PROBE_SERVO_DEACTIVATION_DELAY > 0)
/**
* MAX_STEP_FREQUENCY differs for TOSHIBA OR ARDUINO DUE OR ARDUINO MEGA
*/
#ifdef __SAM3X8E__
#if defined(CONFIG_STEPPERS_TOSHIBA) || !defined(ENABLE_HIGH_SPEED_STEPPING)
#define MAX_STEP_FREQUENCY 150000 // Max step frequency for Toshiba Stepper Controllers
#define DOUBLE_STEP_FREQUENCY MAX_STEP_FREQUENCY
#else
#define MICROSTEP16 HIGH,HIGH
#endif
/**
* Advance calculated values
*/
#ifdef ADVANCE
#define EXTRUSION_AREA (0.25 * D_FILAMENT * D_FILAMENT * M_PI)
#define STEPS_PER_CUBIC_MM_E (axis_steps_per_unit[E_AXIS + active_extruder] / EXTRUSION_AREA)
#define MAX_STEP_FREQUENCY 500000 // Max step frequency for the Due is approx. 330kHz
#define DOUBLE_STEP_FREQUENCY 120000 //96kHz is close to maximum for an Arduino Due
#endif
#ifdef ULTIPANEL
#undef SDCARDDETECTINVERTED
#endif
// Power Signal Control Definitions
// By default use Normal definition
#ifndef POWER_SUPPLY
#define POWER_SUPPLY 0
#endif
#if (POWER_SUPPLY == 1) // 1 = ATX
#define PS_ON_AWAKE LOW
#define PS_ON_ASLEEP HIGH
#elif (POWER_SUPPLY == 2) // 2 = X-Box 360 203W
#define PS_ON_AWAKE HIGH
#define PS_ON_ASLEEP LOW
#endif
#define HAS_POWER_SWITCH (POWER_SUPPLY > 0 && PIN_EXISTS(PS_ON))
/**
* Temp Sensor defines
*/
#if TEMP_SENSOR_0 == -2
#define HEATER_0_USES_MAX6675
#elif TEMP_SENSOR_0 == -1
#define HEATER_0_USES_AD595
#elif TEMP_SENSOR_0 == 0
#undef HEATER_0_MINTEMP
#undef HEATER_0_MAXTEMP
#elif TEMP_SENSOR_0 > 0
#define THERMISTORHEATER_0 TEMP_SENSOR_0
#define HEATER_0_USES_THERMISTOR
#endif
#if TEMP_SENSOR_1 == -1
#define HEATER_1_USES_AD595
#elif TEMP_SENSOR_1 == 0
#undef HEATER_1_MINTEMP
#undef HEATER_1_MAXTEMP
#elif TEMP_SENSOR_1 > 0
#define THERMISTORHEATER_1 TEMP_SENSOR_1
#define HEATER_1_USES_THERMISTOR
#endif
#if TEMP_SENSOR_2 == -1
#define HEATER_2_USES_AD595
#elif TEMP_SENSOR_2 == 0
#undef HEATER_2_MINTEMP
#undef HEATER_2_MAXTEMP
#elif TEMP_SENSOR_2 > 0
#define THERMISTORHEATER_2 TEMP_SENSOR_2
#define HEATER_2_USES_THERMISTOR
#endif
#if TEMP_SENSOR_3 == -1
#define HEATER_3_USES_AD595
#elif TEMP_SENSOR_3 == 0
#undef HEATER_3_MINTEMP
#undef HEATER_3_MAXTEMP
#elif TEMP_SENSOR_3 > 0
#define THERMISTORHEATER_3 TEMP_SENSOR_3
#define HEATER_3_USES_THERMISTOR
#endif
#if TEMP_SENSOR_BED == -1
#define BED_USES_AD595
#elif TEMP_SENSOR_BED == 0
#undef BED_MINTEMP
#undef BED_MAXTEMP
#undef THERMAL_PROTECTION_BED
#undef THERMAL_PROTECTION_BED_PERIOD
#elif TEMP_SENSOR_BED > 0
#define THERMISTORBED TEMP_SENSOR_BED
#define BED_USES_THERMISTOR
#endif
/**
* ARRAY_BY_EXTRUDERS based on EXTRUDERS
*/
#if EXTRUDERS > 3
#define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1, v2, v3, v4 }
#elif EXTRUDERS > 2
#define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1, v2, v3 }
#elif EXTRUDERS > 1
#define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1, v2 }
#else
#define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1 }
#endif
/**
* ARRAY_BY_HOTENDS based on HOTENDS
*/
#if HOTENDS > 3
#define ARRAY_BY_HOTENDS(v1, v2, v3, v4) { v1, v2, v3, v4 }
#elif HOTENDS > 2
#define ARRAY_BY_HOTENDS(v1, v2, v3, v4) { v1, v2, v3 }
#elif HOTENDS > 1
#define ARRAY_BY_HOTENDS(v1, v2, v3, v4) { v1, v2 }
#else
#define ARRAY_BY_HOTENDS(v1, v2, v3, v4) { v1 }
#endif
/**
* Shorthand for pin tests, used wherever needed
*/
#define HAS_TEMP_0 (PIN_EXISTS(TEMP_0) && TEMP_SENSOR_0 != 0 && TEMP_SENSOR_0 != -2)
#define HAS_TEMP_1 (PIN_EXISTS(TEMP_1) && TEMP_SENSOR_1 != 0)
#define HAS_TEMP_2 (PIN_EXISTS(TEMP_2) && TEMP_SENSOR_2 != 0)
#define HAS_TEMP_3 (PIN_EXISTS(TEMP_3) && TEMP_SENSOR_3 != 0)
#define HAS_TEMP_BED (PIN_EXISTS(TEMP_BED) && TEMP_SENSOR_BED != 0)
#define HAS_HEATER_0 (PIN_EXISTS(HEATER_0))
#define HAS_HEATER_1 (PIN_EXISTS(HEATER_1))
#define HAS_HEATER_2 (PIN_EXISTS(HEATER_2))
#define HAS_HEATER_3 (PIN_EXISTS(HEATER_3))
#define HAS_HEATER_BED (PIN_EXISTS(HEATER_BED))
#define HAS_AUTO_FAN_0 (PIN_EXISTS(EXTRUDER_0_AUTO_FAN))
#define HAS_AUTO_FAN_1 (PIN_EXISTS(EXTRUDER_1_AUTO_FAN))
#define HAS_AUTO_FAN_2 (PIN_EXISTS(EXTRUDER_2_AUTO_FAN))
#define HAS_AUTO_FAN_3 (PIN_EXISTS(EXTRUDER_3_AUTO_FAN))
#define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3)
#define HAS_FAN (PIN_EXISTS(FAN))
#define HAS_CONTROLLERFAN (PIN_EXISTS(CONTROLLERFAN))
#define HAS_SERVO_0 (PIN_EXISTS(SERVO0))
#define HAS_SERVO_1 (PIN_EXISTS(SERVO1))
#define HAS_SERVO_2 (PIN_EXISTS(SERVO2))
#define HAS_SERVO_3 (PIN_EXISTS(SERVO3))
#define HAS_FILAMENT_SENSOR (defined(FILAMENT_SENSOR) && PIN_EXISTS(FILWIDTH))
#define HAS_POWER_CONSUMPTION_SENSOR (defined(POWER_CONSUMPTION) && PIN_EXISTS(POWER_CONSUMPTION))
#define HAS_FILRUNOUT (defined(FILAMENT_RUNOUT_SENSOR) && PIN_EXISTS(FILRUNOUT))
#define HAS_HOME (PIN_EXISTS(HOME))
#define HAS_KILL (PIN_EXISTS(KILL))
#define HAS_SUICIDE (PIN_EXISTS(SUICIDE))
#define HAS_PHOTOGRAPH (PIN_EXISTS(PHOTOGRAPH))
#define HAS_X_MIN (PIN_EXISTS(X_MIN))
#define HAS_X_MAX (PIN_EXISTS(X_MAX))
#define HAS_Y_MIN (PIN_EXISTS(Y_MIN))
#define HAS_Y_MAX (PIN_EXISTS(Y_MAX))
#define HAS_Z_MIN (PIN_EXISTS(Z_MIN))
#define HAS_Z_MAX (PIN_EXISTS(Z_MAX))
#define HAS_Z2_MIN (PIN_EXISTS(Z2_MIN))
#define HAS_Z2_MAX (PIN_EXISTS(Z2_MAX))
#define HAS_Z_PROBE (PIN_EXISTS(Z_PROBE))
#define HAS_E_MIN (PIN_EXISTS(E_MIN))
#define HAS_SOLENOID_1 (PIN_EXISTS(SOL1))
#define HAS_SOLENOID_2 (PIN_EXISTS(SOL2))
#define HAS_SOLENOID_3 (PIN_EXISTS(SOL3))
#define HAS_MICROSTEPS (PIN_EXISTS(X_MS1))
#define HAS_MICROSTEPS_E0 (PIN_EXISTS(E0_MS1))
#define HAS_MICROSTEPS_E1 (PIN_EXISTS(E1_MS1))
#define HAS_MICROSTEPS_E2 (PIN_EXISTS(E2_MS1))
#define HAS_X_ENABLE (PIN_EXISTS(X_ENABLE))
#define HAS_X2_ENABLE (PIN_EXISTS(X2_ENABLE))
#define HAS_Y_ENABLE (PIN_EXISTS(Y_ENABLE))
#define HAS_Y2_ENABLE (PIN_EXISTS(Y2_ENABLE))
#define HAS_Z_ENABLE (PIN_EXISTS(Z_ENABLE))
#define HAS_Z2_ENABLE (PIN_EXISTS(Z2_ENABLE))
#define HAS_E0_ENABLE (PIN_EXISTS(E0_ENABLE))
#define HAS_E1_ENABLE (PIN_EXISTS(E1_ENABLE))
#define HAS_E2_ENABLE (PIN_EXISTS(E2_ENABLE))
#define HAS_E3_ENABLE (PIN_EXISTS(E3_ENABLE))
#define HAS_X_DIR (PIN_EXISTS(X_DIR))
#define HAS_X2_DIR (PIN_EXISTS(X2_DIR))
#define HAS_Y_DIR (PIN_EXISTS(Y_DIR))
#define HAS_Y2_DIR (PIN_EXISTS(Y2_DIR))
#define HAS_Z_DIR (PIN_EXISTS(Z_DIR))
#define HAS_Z2_DIR (PIN_EXISTS(Z2_DIR))
#define HAS_E0_DIR (PIN_EXISTS(E0_DIR))
#define HAS_E1_DIR (PIN_EXISTS(E1_DIR))
#define HAS_E2_DIR (PIN_EXISTS(E2_DIR))
#define HAS_E3_DIR (PIN_EXISTS(E3_DIR))
#define HAS_X_STEP (PIN_EXISTS(X_STEP))
#define HAS_X2_STEP (PIN_EXISTS(X2_STEP))
#define HAS_Y_STEP (PIN_EXISTS(Y_STEP))
#define HAS_Y2_STEP (PIN_EXISTS(Y2_STEP))
#define HAS_Z_STEP (PIN_EXISTS(Z_STEP))
#define HAS_Z2_STEP (PIN_EXISTS(Z2_STEP))
#define HAS_E0_STEP (PIN_EXISTS(E0_STEP))
#define HAS_E1_STEP (PIN_EXISTS(E1_STEP))
#define HAS_E2_STEP (PIN_EXISTS(E2_STEP))
#define HAS_E3_STEP (PIN_EXISTS(E3_STEP))
#define HAS_E0E1 (PIN_EXISTS(E0E1_CHOICE))
#define HAS_E0E2 (PIN_EXISTS(E0E2_CHOICE))
#define HAS_E0E3 (PIN_EXISTS(E0E3_CHOICE))
#define HAS_E0E4 (PIN_EXISTS(E0E4_CHOICE))
#define HAS_E1E3 (PIN_EXISTS(E1E3_CHOICE))
#define HAS_BTN_BACK (PIN_EXISTS(BTN_BACK))
/**
* Shorthand for filament sensor and power sensor for ultralcd.cpp, dogm_lcd_implementation.h, ultralcd_implementation_hitachi_HD44780.h
*/
#define HAS_LCD_FILAMENT_SENSOR (HAS_FILAMENT_SENSOR && defined(FILAMENT_LCD_DISPLAY))
#define HAS_LCD_POWER_SENSOR (HAS_POWER_CONSUMPTION_SENSOR && defined(POWER_CONSUMPTION_LCD_DISPLAY))
/**
* Helper Macros for heaters and extruder fan
*/
#ifdef INVERTED_HEATER_PINS
#define WRITE_HEATER(pin,value) WRITE(pin,!value)
#else
#if defined(CONFIG_STEPPERS_TOSHIBA) || !defined(ENABLE_HIGH_SPEED_STEPPING)
#define MAX_STEP_FREQUENCY 10000 // Max step frequency for Toshiba Stepper Controllers
#define DOUBLE_STEP_FREQUENCY MAX_STEP_FREQUENCY
#else
#define WRITE_HEATER(pin,value) WRITE(pin,value)
#endif
#define WRITE_HEATER_0P(v) WRITE_HEATER(HEATER_0_PIN, v)
#if HOTENDS > 1 || defined(HEATERS_PARALLEL)
#define WRITE_HEATER_1(v) WRITE_HEATER(HEATER_1_PIN, v)
#if HOTENDS > 2
#define WRITE_HEATER_2(v) WRITE_HEATER(HEATER_2_PIN, v)
#if HOTENDS > 3
#define WRITE_HEATER_3(v) WRITE_HEATER(HEATER_3_PIN, v)
#endif
#define MAX_STEP_FREQUENCY 40000 // Max step frequency for Arduino mega
#endif
#endif
// MS1 MS2 Stepper Driver Microstepping mode table
#define MICROSTEP1 LOW,LOW
#define MICROSTEP2 HIGH,LOW
#define MICROSTEP4 LOW,HIGH
#define MICROSTEP8 HIGH,HIGH
#if MB(ALLIGATOR)
#define MICROSTEP16 LOW,LOW
#define MICROSTEP32 HIGH,HIGH
#else
#define MICROSTEP16 HIGH,HIGH
#endif
/**
* Advance calculated values
*/
#ifdef ADVANCE
#define EXTRUSION_AREA (0.25 * D_FILAMENT * D_FILAMENT * M_PI)
#define STEPS_PER_CUBIC_MM_E (axis_steps_per_unit[E_AXIS + active_extruder] / EXTRUSION_AREA)
#endif
#if defined(ULTIPANEL) && !defined(ELB_FULL_GRAPHIC_CONTROLLER)
#undef SDCARDDETECTINVERTED
#endif
// Power Signal Control Definitions
// By default use Normal definition
#ifndef POWER_SUPPLY
#define POWER_SUPPLY 0
#endif
#if (POWER_SUPPLY == 1) // 1 = ATX
#define PS_ON_AWAKE LOW
#define PS_ON_ASLEEP HIGH
#elif (POWER_SUPPLY == 2) // 2 = X-Box 360 203W
#define PS_ON_AWAKE HIGH
#define PS_ON_ASLEEP LOW
#endif
#define HAS_POWER_SWITCH (POWER_SUPPLY > 0 && PIN_EXISTS(PS_ON))
/**
* Temp Sensor defines
*/
#if TEMP_SENSOR_0 == -2
#define HEATER_0_USES_MAX6675
#elif TEMP_SENSOR_0 == -1
#define HEATER_0_USES_AD595
#elif TEMP_SENSOR_0 == 0
#undef HEATER_0_MINTEMP
#undef HEATER_0_MAXTEMP
#elif TEMP_SENSOR_0 > 0
#define THERMISTORHEATER_0 TEMP_SENSOR_0
#define HEATER_0_USES_THERMISTOR
#endif
#if TEMP_SENSOR_1 == -1
#define HEATER_1_USES_AD595
#elif TEMP_SENSOR_1 == 0
#undef HEATER_1_MINTEMP
#undef HEATER_1_MAXTEMP
#elif TEMP_SENSOR_1 > 0
#define THERMISTORHEATER_1 TEMP_SENSOR_1
#define HEATER_1_USES_THERMISTOR
#endif
#if TEMP_SENSOR_2 == -1
#define HEATER_2_USES_AD595
#elif TEMP_SENSOR_2 == 0
#undef HEATER_2_MINTEMP
#undef HEATER_2_MAXTEMP
#elif TEMP_SENSOR_2 > 0
#define THERMISTORHEATER_2 TEMP_SENSOR_2
#define HEATER_2_USES_THERMISTOR
#endif
#if TEMP_SENSOR_3 == -1
#define HEATER_3_USES_AD595
#elif TEMP_SENSOR_3 == 0
#undef HEATER_3_MINTEMP
#undef HEATER_3_MAXTEMP
#elif TEMP_SENSOR_3 > 0
#define THERMISTORHEATER_3 TEMP_SENSOR_3
#define HEATER_3_USES_THERMISTOR
#endif
#if TEMP_SENSOR_BED == -1
#define BED_USES_AD595
#elif TEMP_SENSOR_BED == 0
#undef BED_MINTEMP
#undef BED_MAXTEMP
#elif TEMP_SENSOR_BED > 0
#define THERMISTORBED TEMP_SENSOR_BED
#define BED_USES_THERMISTOR
#endif
/**
* ARRAY_BY_EXTRUDERS based on EXTRUDERS
*/
#if EXTRUDERS > 3
#define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1, v2, v3, v4 }
#elif EXTRUDERS > 2
#define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1, v2, v3 }
#elif EXTRUDERS > 1
#define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1, v2 }
#else
#define ARRAY_BY_EXTRUDERS(v1, v2, v3, v4) { v1 }
#endif
/**
* ARRAY_BY_HOTENDS based on HOTENDS
*/
#if HOTENDS > 3
#define ARRAY_BY_HOTENDS(v1, v2, v3, v4) { v1, v2, v3, v4 }
#elif HOTENDS > 2
#define ARRAY_BY_HOTENDS(v1, v2, v3, v4) { v1, v2, v3 }
#elif HOTENDS > 1
#define ARRAY_BY_HOTENDS(v1, v2, v3, v4) { v1, v2 }
#else
#define ARRAY_BY_HOTENDS(v1, v2, v3, v4) { v1 }
#endif
/**
* Shorthand for pin tests, used wherever needed
*/
#define HAS_TEMP_0 (PIN_EXISTS(TEMP_0) && TEMP_SENSOR_0 != 0 && TEMP_SENSOR_0 != -2)
#define HAS_TEMP_1 (PIN_EXISTS(TEMP_1) && TEMP_SENSOR_1 != 0)
#define HAS_TEMP_2 (PIN_EXISTS(TEMP_2) && TEMP_SENSOR_2 != 0)
#define HAS_TEMP_3 (PIN_EXISTS(TEMP_3) && TEMP_SENSOR_3 != 0)
#define HAS_TEMP_BED (PIN_EXISTS(TEMP_BED) && TEMP_SENSOR_BED != 0)
#define HAS_HEATER_0 (PIN_EXISTS(HEATER_0))
#define HAS_HEATER_1 (PIN_EXISTS(HEATER_1))
#define HAS_HEATER_2 (PIN_EXISTS(HEATER_2))
#define HAS_HEATER_3 (PIN_EXISTS(HEATER_3))
#define HAS_HEATER_BED (PIN_EXISTS(HEATER_BED))
#define HAS_AUTO_FAN_0 (PIN_EXISTS(EXTRUDER_0_AUTO_FAN))
#define HAS_AUTO_FAN_1 (PIN_EXISTS(EXTRUDER_1_AUTO_FAN))
#define HAS_AUTO_FAN_2 (PIN_EXISTS(EXTRUDER_2_AUTO_FAN))
#define HAS_AUTO_FAN_3 (PIN_EXISTS(EXTRUDER_3_AUTO_FAN))
#define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3)
#define HAS_FAN (PIN_EXISTS(FAN))
#define HAS_CONTROLLERFAN (PIN_EXISTS(CONTROLLERFAN))
#define HAS_SERVO_0 (PIN_EXISTS(SERVO0))
#define HAS_SERVO_1 (PIN_EXISTS(SERVO1))
#define HAS_SERVO_2 (PIN_EXISTS(SERVO2))
#define HAS_SERVO_3 (PIN_EXISTS(SERVO3))
#define HAS_FILAMENT_SENSOR (defined(FILAMENT_SENSOR) && PIN_EXISTS(FILWIDTH))
#define HAS_POWER_CONSUMPTION_SENSOR (defined(POWER_CONSUMPTION) && PIN_EXISTS(POWER_CONSUMPTION))
#define HAS_FILRUNOUT (defined(FILAMENT_RUNOUT_SENSOR) && PIN_EXISTS(FILRUNOUT))
#define HAS_HOME (PIN_EXISTS(HOME))
#define HAS_KILL (PIN_EXISTS(KILL))
#define HAS_SUICIDE (PIN_EXISTS(SUICIDE))
#define HAS_PHOTOGRAPH (PIN_EXISTS(PHOTOGRAPH))
#define HAS_X_MIN (PIN_EXISTS(X_MIN))
#define HAS_X_MAX (PIN_EXISTS(X_MAX))
#define HAS_Y_MIN (PIN_EXISTS(Y_MIN))
#define HAS_Y_MAX (PIN_EXISTS(Y_MAX))
#define HAS_Z_MIN (PIN_EXISTS(Z_MIN))
#define HAS_Z_MAX (PIN_EXISTS(Z_MAX))
#define HAS_Z2_MIN (PIN_EXISTS(Z2_MIN))
#define HAS_Z2_MAX (PIN_EXISTS(Z2_MAX))
#define HAS_Z_PROBE (PIN_EXISTS(Z_PROBE))
#define HAS_E_MIN (PIN_EXISTS(E_MIN))
#define HAS_SOLENOID_1 (PIN_EXISTS(SOL1))
#define HAS_SOLENOID_2 (PIN_EXISTS(SOL2))
#define HAS_SOLENOID_3 (PIN_EXISTS(SOL3))
#define HAS_MICROSTEPS (PIN_EXISTS(X_MS1))
#define HAS_MICROSTEPS_E0 (PIN_EXISTS(E0_MS1))
#define HAS_MICROSTEPS_E1 (PIN_EXISTS(E1_MS1))
#define HAS_MICROSTEPS_E2 (PIN_EXISTS(E2_MS1))
#define HAS_X_ENABLE (PIN_EXISTS(X_ENABLE))
#define HAS_X2_ENABLE (PIN_EXISTS(X2_ENABLE))
#define HAS_Y_ENABLE (PIN_EXISTS(Y_ENABLE))
#define HAS_Y2_ENABLE (PIN_EXISTS(Y2_ENABLE))
#define HAS_Z_ENABLE (PIN_EXISTS(Z_ENABLE))
#define HAS_Z2_ENABLE (PIN_EXISTS(Z2_ENABLE))
#define HAS_E0_ENABLE (PIN_EXISTS(E0_ENABLE))
#define HAS_E1_ENABLE (PIN_EXISTS(E1_ENABLE))
#define HAS_E2_ENABLE (PIN_EXISTS(E2_ENABLE))
#define HAS_E3_ENABLE (PIN_EXISTS(E3_ENABLE))
#define HAS_X_DIR (PIN_EXISTS(X_DIR))
#define HAS_X2_DIR (PIN_EXISTS(X2_DIR))
#define HAS_Y_DIR (PIN_EXISTS(Y_DIR))
#define HAS_Y2_DIR (PIN_EXISTS(Y2_DIR))
#define HAS_Z_DIR (PIN_EXISTS(Z_DIR))
#define HAS_Z2_DIR (PIN_EXISTS(Z2_DIR))
#define HAS_E0_DIR (PIN_EXISTS(E0_DIR))
#define HAS_E1_DIR (PIN_EXISTS(E1_DIR))
#define HAS_E2_DIR (PIN_EXISTS(E2_DIR))
#define HAS_E3_DIR (PIN_EXISTS(E3_DIR))
#define HAS_X_STEP (PIN_EXISTS(X_STEP))
#define HAS_X2_STEP (PIN_EXISTS(X2_STEP))
#define HAS_Y_STEP (PIN_EXISTS(Y_STEP))
#define HAS_Y2_STEP (PIN_EXISTS(Y2_STEP))
#define HAS_Z_STEP (PIN_EXISTS(Z_STEP))
#define HAS_Z2_STEP (PIN_EXISTS(Z2_STEP))
#define HAS_E0_STEP (PIN_EXISTS(E0_STEP))
#define HAS_E1_STEP (PIN_EXISTS(E1_STEP))
#define HAS_E2_STEP (PIN_EXISTS(E2_STEP))
#define HAS_E3_STEP (PIN_EXISTS(E3_STEP))
#define HAS_E0E1 (PIN_EXISTS(E0E1_CHOICE))
#define HAS_E0E2 (PIN_EXISTS(E0E2_CHOICE))
#define HAS_E0E3 (PIN_EXISTS(E0E3_CHOICE))
#define HAS_E0E4 (PIN_EXISTS(E0E4_CHOICE))
#define HAS_E1E3 (PIN_EXISTS(E1E3_CHOICE))
#define HAS_BTN_BACK (PIN_EXISTS(BTN_BACK))
/**
* Shorthand for filament sensor and power sensor for ultralcd.cpp, dogm_lcd_implementation.h, ultralcd_implementation_hitachi_HD44780.h
*/
#define HAS_LCD_FILAMENT_SENSOR (HAS_FILAMENT_SENSOR && defined(FILAMENT_LCD_DISPLAY))
#define HAS_LCD_POWER_SENSOR (HAS_POWER_CONSUMPTION_SENSOR && defined(POWER_CONSUMPTION_LCD_DISPLAY))
/**
* Helper Macros for heaters and extruder fan
*/
#ifdef INVERTED_HEATER_PINS
#define WRITE_HEATER(pin,value) WRITE(pin,!value)
#else
#define WRITE_HEATER(pin,value) WRITE(pin,value)
#endif
#define WRITE_HEATER_0P(v) WRITE_HEATER(HEATER_0_PIN, v)
#if HOTENDS > 1 || defined(HEATERS_PARALLEL)
#define WRITE_HEATER_1(v) WRITE_HEATER(HEATER_1_PIN, v)
#if HOTENDS > 2
#define WRITE_HEATER_2(v) WRITE_HEATER(HEATER_2_PIN, v)
#if HOTENDS > 3
#define WRITE_HEATER_3(v) WRITE_HEATER(HEATER_3_PIN, v)
#endif
#endif
#ifdef HEATERS_PARALLEL
#define WRITE_HEATER_0(v) { WRITE_HEATER_0P(v); WRITE_HEATER_1(v); }
#else
#define WRITE_HEATER_0(v) WRITE_HEATER_0P(v)
#endif
#if HAS_HEATER_BED
#define WRITE_HEATER_BED(v) WRITE_HEATER(HEATER_BED_PIN, v)
#endif
#if HAS_FAN
#define WRITE_FAN(v) WRITE(FAN_PIN, v)
#endif
#endif //CONFIGURATION_LCD
#endif
#ifdef HEATERS_PARALLEL
#define WRITE_HEATER_0(v) { WRITE_HEATER_0P(v); WRITE_HEATER_1(v); }
#else
#define WRITE_HEATER_0(v) WRITE_HEATER_0P(v)
#endif
#if HAS_HEATER_BED
#define WRITE_HEATER_BED(v) WRITE_HEATER(HEATER_BED_PIN, v)
#endif
#if HAS_FAN
#define WRITE_FAN(v) WRITE(FAN_PIN, v)
#endif
/**
* LCD BUZZ
*/
#define HAS_BUZZER ((defined(BEEPER) && BEEPER >= 0) || defined(LCD_USE_I2C_BUZZER))
#endif //CONFIGURATION_LCD
#endif //CONDITIONALS_H
MarlinKimbra/language_en.h
View file @
59733b03
...
...
@@ -77,9 +77,9 @@
#define MSG_PID_P "PID-P"
#define MSG_PID_I "PID-I"
#define MSG_PID_D "PID-D"
#define MSG_
E2 " E2
"
#define MSG_
E3 " E3
"
#define MSG_
E4 " E4
"
#define MSG_
H1 " H1
"
#define MSG_
H2 " H2
"
#define MSG_
H3 " H3
"
#define MSG_ACC "Accel"
#define MSG_VXY_JERK "Vxy-jerk"
#define MSG_VZ_JERK "Vz-jerk"
...
...
@@ -176,13 +176,18 @@
#define MSG_YSCALE "Y Scale"
#endif
// Extra
#define MSG_LASER "Laser Preset"
#define MSG_CONFIG "Configuration"
#define MSG_E_BOWDEN_LENGTH "Extrude " STRINGIFY(BOWDEN_LENGTH) "mm"
#define MSG_R_BOWDEN_LENGTH "Retract " STRINGIFY(BOWDEN_LENGTH) "mm"
#define MSG_PURGE_XMM "Purge " STRINGIFY(LCD_PURGE_LENGTH) "mm"
#define MSG_RETRACT_XMM "Retract " STRINGIFY(LCD_RETRACT_LENGTH) "mm"
#define MSG_SAVED_POS "Saved position"
#define MSG_RESTORING_POS "Restoring position"
#define MSG_INVALID_POS_SLOT "Invalid slot, total slots: "
// Firmware Test
#ifdef FIRMWARE_TEST
#define MSG_FWTEST_YES "Put the Y command to go next"
#define MSG_FWTEST_NO "Put the N command to go next"
...
...
MarlinKimbra/language_it.h
View file @
59733b03
...
...
@@ -77,9 +77,9 @@
#define MSG_PID_P "PID-P"
#define MSG_PID_I "PID-I"
#define MSG_PID_D "PID-D"
#define MSG_
E2 " E2
"
#define MSG_
E3 " E3
"
#define MSG_
E4 " E4
"
#define MSG_
H1 " H1
"
#define MSG_
H2 " H2
"
#define MSG_
H3 " H3
"
#define MSG_ACC "Accel"
#define MSG_VXY_JERK "Vxy-jerk"
#define MSG_VZ_JERK "Vz-jerk"
...
...
@@ -176,13 +176,18 @@
#define MSG_YSCALE "Y Scale"
#endif
// Extra
#define MSG_LASER "Laser Preset"
#define MSG_CONFIG "Configurazione"
#define MSG_E_BOWDEN_LENGTH "Extrude " STRINGIFY(BOWDEN_LENGTH) "mm"
#define MSG_R_BOWDEN_LENGTH "Retract " STRINGIFY(BOWDEN_LENGTH) "mm"
#define MSG_PURGE_XMM "Purge " STRINGIFY(LCD_PURGE_LENGTH) "mm"
#define MSG_RETRACT_XMM "Retract " STRINGIFY(LCD_RETRACT_LENGTH) "mm"
#define MSG_SAVED_POS "Posizione Salvata"
#define MSG_RESTORING_POS "Restoring position"
#define MSG_INVALID_POS_SLOT "Invalid slot, total slots: "
// Firmware Test
#ifdef FIRMWARE_TEST
#define MSG_FWTEST_YES "Dai il comando Y per andare avanti"
#define MSG_FWTEST_NO "Dai il comando N per andare avanti"
...
...
MarlinKimbra/temperature.cpp
View file @
59733b03
...
...
@@ -36,7 +36,6 @@
#if defined(PIDTEMPBED) || defined(PIDTEMP)
#define PID_dT ((OVERSAMPLENR * 14.0)/(F_CPU / 64.0 / 256.0))
#define RECI_PID_dT ( 1 / PID_dT )
#endif
//===========================================================================
...
...
@@ -375,17 +374,14 @@ int getHeaterPower(int heater) {
#if HAS_AUTO_FAN
void
setExtruderAutoFanState
(
int
pin
,
bool
state
)
{
void
setExtruderAutoFanState
(
int
pin
,
bool
state
)
{
unsigned
char
newFanSpeed
=
(
state
!=
0
)
?
EXTRUDER_AUTO_FAN_SPEED
:
0
;
// this idiom allows both digital and PWM fan outputs (see M42 handling).
pinMode
(
pin
,
OUTPUT
);
digitalWrite
(
pin
,
newFanSpeed
);
analogWrite
(
pin
,
newFanSpeed
);
}
void
checkExtruderAutoFans
()
{
void
checkExtruderAutoFans
()
{
uint8_t
fanState
=
0
;
// which fan pins need to be turned on?
...
...
@@ -448,7 +444,7 @@ void checkExtruderAutoFans()
#endif
}
#endif //
any extruder auto fan pins set
#endif //
HAS_AUTO_FAN
//
// Temperature Error Handlers
...
...
@@ -740,7 +736,7 @@ static float analog2temp(int raw, uint8_t e) {
return
celsius
;
}
return
((
raw
*
((
5.0
*
100.0
)
/
1024.0
)
/
OVERSAMPLENR
)
*
TEMP_SENSOR_AD595_GAIN
)
+
TEMP_SENSOR_AD595_OFFSET
;
return
((
raw
*
((
5.0
*
100.0
)
/
1024.0
)
/
OVERSAMPLENR
)
*
TEMP_SENSOR_AD595_GAIN
)
+
TEMP_SENSOR_AD595_OFFSET
;
}
// Derived from RepRap FiveD extruder::getTemperature()
...
...
@@ -765,7 +761,7 @@ static float analog2tempBed(int raw) {
return
celsius
;
#elif defined BED_USES_AD595
return
((
raw
*
((
5.0
*
100.0
)
/
1024.0
)
/
OVERSAMPLENR
)
*
TEMP_SENSOR_AD595_GAIN
)
+
TEMP_SENSOR_AD595_OFFSET
;
return
((
raw
*
((
5.0
*
100.0
)
/
1024.0
)
/
OVERSAMPLENR
)
*
TEMP_SENSOR_AD595_GAIN
)
+
TEMP_SENSOR_AD595_OFFSET
;
#else
return
0
;
#endif
...
...
@@ -944,6 +940,20 @@ void tp_init() {
#if HAS_FILAMENT_SENSOR
ANALOG_SELECT
(
FILWIDTH_PIN
);
#endif
#if HAS_AUTO_FAN_0
pinMode
(
EXTRUDER_0_AUTO_FAN_PIN
,
OUTPUT
);
#endif
#if HAS_AUTO_FAN_1 && (EXTRUDER_1_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN)
pinMode
(
EXTRUDER_1_AUTO_FAN_PIN
,
OUTPUT
);
#endif
#if HAS_AUTO_FAN_2 && (EXTRUDER_2_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN) && (EXTRUDER_2_AUTO_FAN_PIN != EXTRUDER_1_AUTO_FAN_PIN)
pinMode
(
EXTRUDER_2_AUTO_FAN_PIN
,
OUTPUT
);
#endif
#if HAS_AUTO_FAN_3 && (EXTRUDER_3_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN) && (EXTRUDER_3_AUTO_FAN_PIN != EXTRUDER_1_AUTO_FAN_PIN) && (EXTRUDER_3_AUTO_FAN_PIN != EXTRUDER_2_AUTO_FAN_PIN)
pinMode
(
EXTRUDER_3_AUTO_FAN_PIN
,
OUTPUT
);
#endif
#if HAS_POWER_CONSUMPTION_SENSOR
ANALOG_SELECT
(
POWER_CONSUMPTION_PIN
);
#endif
...
...
@@ -979,7 +989,6 @@ void tp_init() {
#ifdef HEATER_0_MAXTEMP
TEMP_MAX_ROUTINE
(
0
);
#endif
#if HOTENDS > 1
#ifdef HEATER_1_MINTEMP
TEMP_MIN_ROUTINE
(
1
);
...
...
MarlinKimbra/ultralcd.cpp
View file @
59733b03
...
...
@@ -520,16 +520,16 @@ static void lcd_tune_menu() {
MENU_ITEM
(
back
,
MSG_MAIN
,
lcd_main_menu
);
MENU_ITEM_EDIT
(
int3
,
MSG_SPEED
,
&
feedrate_multiplier
,
10
,
999
);
#if TEMP_SENSOR_0 != 0
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_NOZZLE
,
&
target_temperature
[
0
],
0
,
HEATER_0_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_NOZZLE
" 0"
,
&
target_temperature
[
0
],
0
,
HEATER_0_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
#endif
#if TEMP_SENSOR_1 != 0
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_NOZZLE
"
2
"
,
&
target_temperature
[
1
],
0
,
HEATER_1_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_NOZZLE
"
1
"
,
&
target_temperature
[
1
],
0
,
HEATER_1_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
#endif
#if TEMP_SENSOR_2 != 0
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_NOZZLE
"
3
"
,
&
target_temperature
[
2
],
0
,
HEATER_2_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_NOZZLE
"
2
"
,
&
target_temperature
[
2
],
0
,
HEATER_2_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
#endif
#if TEMP_SENSOR_3 != 0
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_NOZZLE
"
4
"
,
&
target_temperature
[
3
],
0
,
HEATER_3_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_NOZZLE
"
3
"
,
&
target_temperature
[
3
],
0
,
HEATER_3_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
#endif
#if TEMP_SENSOR_BED != 0
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_BED
,
&
target_temperature_bed
,
0
,
BED_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
...
...
@@ -641,15 +641,15 @@ void lcd_preheat_gum0() { _lcd_preheat(0, gumPreheatHotendTemp, gumPreheatHPBTem
static
void
lcd_preheat_pla_menu
()
{
START_MENU
(
lcd_prepare_menu
);
MENU_ITEM
(
back
,
MSG_PREPARE
,
lcd_prepare_menu
);
MENU_ITEM
(
function
,
MSG_PREHEAT_PLA
"
1
"
,
lcd_preheat_pla0
);
MENU_ITEM
(
function
,
MSG_PREHEAT_PLA
"
0
"
,
lcd_preheat_pla0
);
#if TEMP_SENSOR_1 != 0 //2 extruder preheat
MENU_ITEM
(
function
,
MSG_PREHEAT_PLA
"
2
"
,
lcd_preheat_pla1
);
MENU_ITEM
(
function
,
MSG_PREHEAT_PLA
"
1
"
,
lcd_preheat_pla1
);
#endif //2 extruder preheat
#if TEMP_SENSOR_2 != 0 //3 extruder preheat
MENU_ITEM
(
function
,
MSG_PREHEAT_PLA
"
3
"
,
lcd_preheat_pla2
);
MENU_ITEM
(
function
,
MSG_PREHEAT_PLA
"
2
"
,
lcd_preheat_pla2
);
#endif //3 extruder preheat
#if TEMP_SENSOR_3 != 0 //4 extruder preheat
MENU_ITEM
(
function
,
MSG_PREHEAT_PLA
"
4
"
,
lcd_preheat_pla3
);
MENU_ITEM
(
function
,
MSG_PREHEAT_PLA
"
3
"
,
lcd_preheat_pla3
);
#endif //4 extruder preheat
MENU_ITEM
(
function
,
MSG_PREHEAT_PLA_ALL
,
lcd_preheat_pla0123
);
#if TEMP_SENSOR_BED != 0
...
...
@@ -661,15 +661,15 @@ void lcd_preheat_gum0() { _lcd_preheat(0, gumPreheatHotendTemp, gumPreheatHPBTem
static
void
lcd_preheat_abs_menu
()
{
START_MENU
(
lcd_prepare_menu
);
MENU_ITEM
(
back
,
MSG_PREPARE
,
lcd_prepare_menu
);
MENU_ITEM
(
function
,
MSG_PREHEAT_ABS
"
1
"
,
lcd_preheat_abs0
);
MENU_ITEM
(
function
,
MSG_PREHEAT_ABS
"
0
"
,
lcd_preheat_abs0
);
#if TEMP_SENSOR_1 != 0 //2 extruder preheat
MENU_ITEM
(
function
,
MSG_PREHEAT_ABS
"
2
"
,
lcd_preheat_abs1
);
MENU_ITEM
(
function
,
MSG_PREHEAT_ABS
"
1
"
,
lcd_preheat_abs1
);
#endif //2 extruder preheat
#if TEMP_SENSOR_2 != 0 //3 extruder preheat
MENU_ITEM
(
function
,
MSG_PREHEAT_ABS
"
3
"
,
lcd_preheat_abs2
);
MENU_ITEM
(
function
,
MSG_PREHEAT_ABS
"
2
"
,
lcd_preheat_abs2
);
#endif //3 extruder preheat
#if TEMP_SENSOR_3 != 0 //4 extruder preheat
MENU_ITEM
(
function
,
MSG_PREHEAT_ABS
"
4
"
,
lcd_preheat_abs3
);
MENU_ITEM
(
function
,
MSG_PREHEAT_ABS
"
3
"
,
lcd_preheat_abs3
);
#endif //4 extruder preheat
MENU_ITEM
(
function
,
MSG_PREHEAT_ABS_ALL
,
lcd_preheat_abs0123
);
#if TEMP_SENSOR_BED != 0
...
...
@@ -681,15 +681,15 @@ void lcd_preheat_gum0() { _lcd_preheat(0, gumPreheatHotendTemp, gumPreheatHPBTem
static
void
lcd_preheat_gum_menu
()
{
START_MENU
(
lcd_prepare_menu
);
MENU_ITEM
(
back
,
MSG_PREPARE
,
lcd_prepare_menu
);
MENU_ITEM
(
function
,
MSG_PREHEAT_GUM
"
1
"
,
lcd_preheat_gum0
);
MENU_ITEM
(
function
,
MSG_PREHEAT_GUM
"
0
"
,
lcd_preheat_gum0
);
#if TEMP_SENSOR_1 != 0 //2 extruder preheat
MENU_ITEM
(
function
,
MSG_PREHEAT_GUM
"
2
"
,
lcd_preheat_gum1
);
MENU_ITEM
(
function
,
MSG_PREHEAT_GUM
"
1
"
,
lcd_preheat_gum1
);
#endif //2 extruder preheat
#if TEMP_SENSOR_2 != 0 //3 extruder preheat
MENU_ITEM
(
function
,
MSG_PREHEAT_GUM
"
3
"
,
lcd_preheat_gum2
);
MENU_ITEM
(
function
,
MSG_PREHEAT_GUM
"
2
"
,
lcd_preheat_gum2
);
#endif //3 extruder preheat
#if TEMP_SENSOR_3 != 0 //4 extruder preheat
MENU_ITEM
(
function
,
MSG_PREHEAT_GUM
"
4
"
,
lcd_preheat_gum3
);
MENU_ITEM
(
function
,
MSG_PREHEAT_GUM
"
3
"
,
lcd_preheat_gum3
);
#endif //all extruder preheat
MENU_ITEM
(
function
,
MSG_PREHEAT_GUM_ALL
,
lcd_preheat_gum0123
);
#if TEMP_SENSOR_BED != 0
...
...
@@ -967,17 +967,17 @@ static void lcd_control_menu() {
PID_PARAM
(
Kd
,
e
)
=
scalePID_d
(
raw_Kd
);
updatePID
();
}
void
copy_and_scalePID_i_
E1
()
{
copy_and_scalePID_i
(
0
);
}
void
copy_and_scalePID_d_
E1
()
{
copy_and_scalePID_d
(
0
);
}
void
copy_and_scalePID_i_
H0
()
{
copy_and_scalePID_i
(
0
);
}
void
copy_and_scalePID_d_
H0
()
{
copy_and_scalePID_d
(
0
);
}
#if HOTENDS > 1
void
copy_and_scalePID_i_
E2
()
{
copy_and_scalePID_i
(
1
);
}
void
copy_and_scalePID_d_
E2
()
{
copy_and_scalePID_d
(
1
);
}
void
copy_and_scalePID_i_
H1
()
{
copy_and_scalePID_i
(
1
);
}
void
copy_and_scalePID_d_
H1
()
{
copy_and_scalePID_d
(
1
);
}
#if HOTENDS > 2
void
copy_and_scalePID_i_
E3
()
{
copy_and_scalePID_i
(
2
);
}
void
copy_and_scalePID_d_
E3
()
{
copy_and_scalePID_d
(
2
);
}
void
copy_and_scalePID_i_
H2
()
{
copy_and_scalePID_i
(
2
);
}
void
copy_and_scalePID_d_
H2
()
{
copy_and_scalePID_d
(
2
);
}
#if HOTENDS > 3
void
copy_and_scalePID_i_
E4
()
{
copy_and_scalePID_i
(
3
);
}
void
copy_and_scalePID_d_
E
4
()
{
copy_and_scalePID_d
(
3
);
}
void
copy_and_scalePID_i_
H3
()
{
copy_and_scalePID_i
(
3
);
}
void
copy_and_scalePID_d_
H
4
()
{
copy_and_scalePID_d
(
3
);
}
#endif //HOTENDS > 3
#endif //HOTENDS > 2
#endif //HOTENDS > 1
...
...
@@ -1001,19 +1001,19 @@ static void lcd_control_temperature_menu() {
// Nozzle, Nozzle 2, Nozzle 3, Nozzle 4
//
#if TEMP_SENSOR_0 != 0
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_NOZZLE
,
&
target_temperature
[
0
],
0
,
HEATER_0_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_NOZZLE
" 0"
,
&
target_temperature
[
0
],
0
,
HEATER_0_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
#endif
#if HOTENDS > 1
#if TEMP_SENSOR_1 != 0
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_NOZZLE
"
2
"
,
&
target_temperature
[
1
],
0
,
HEATER_1_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_NOZZLE
"
1
"
,
&
target_temperature
[
1
],
0
,
HEATER_1_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
#endif
#if HOTENDS > 2
#if TEMP_SENSOR_2 != 0
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_NOZZLE
"
3
"
,
&
target_temperature
[
2
],
0
,
HEATER_2_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_NOZZLE
"
2
"
,
&
target_temperature
[
2
],
0
,
HEATER_2_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
#endif
#if HOTENDS > 3
#if TEMP_SENSOR_3 != 0
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_NOZZLE
"
4
"
,
&
target_temperature
[
3
],
0
,
HEATER_3_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
MENU_MULTIPLIER_ITEM_EDIT
(
int3
,
MSG_NOZZLE
"
3
"
,
&
target_temperature
[
3
],
0
,
HEATER_3_MAXTEMP
+
LCD_MAX_TEMP_OFFSET
);
#endif
#endif //HOTENDS > 3
#endif //HOTENDS > 2
...
...
@@ -1053,32 +1053,32 @@ static void lcd_control_temperature_menu() {
raw_Kd
=
unscalePID_d
(
PID_PARAM
(
Kd
,
0
));
MENU_ITEM_EDIT
(
float52
,
MSG_PID_P
,
&
PID_PARAM
(
Kp
,
0
),
1
,
9990
);
// i is typically a small value so allows values below 1
MENU_ITEM_EDIT_CALLBACK
(
float52
,
MSG_PID_I
,
&
raw_Ki
,
0.01
,
9990
,
copy_and_scalePID_i_
E1
);
MENU_ITEM_EDIT_CALLBACK
(
float52
,
MSG_PID_D
,
&
raw_Kd
,
1
,
9990
,
copy_and_scalePID_d_
E1
);
MENU_ITEM_EDIT_CALLBACK
(
float52
,
MSG_PID_I
,
&
raw_Ki
,
0.01
,
9990
,
copy_and_scalePID_i_
H0
);
MENU_ITEM_EDIT_CALLBACK
(
float52
,
MSG_PID_D
,
&
raw_Kd
,
1
,
9990
,
copy_and_scalePID_d_
H0
);
#if HOTENDS > 1
// set up temp variables - undo the default scaling
raw_Ki
=
unscalePID_i
(
PID_PARAM
(
Ki
,
1
));
raw_Kd
=
unscalePID_d
(
PID_PARAM
(
Kd
,
1
));
MENU_ITEM_EDIT
(
float52
,
MSG_PID_P
MSG_
E2
,
&
PID_PARAM
(
Kp
,
1
),
1
,
9990
);
MENU_ITEM_EDIT
(
float52
,
MSG_PID_P
MSG_
H1
,
&
PID_PARAM
(
Kp
,
1
),
1
,
9990
);
// i is typically a small value so allows values below 1
MENU_ITEM_EDIT_CALLBACK
(
float52
,
MSG_PID_I
MSG_
E2
,
&
raw_Ki
,
0.01
,
9990
,
copy_and_scalePID_i_E2
);
MENU_ITEM_EDIT_CALLBACK
(
float52
,
MSG_PID_D
MSG_
E2
,
&
raw_Kd
,
1
,
9990
,
copy_and_scalePID_d_E2
);
MENU_ITEM_EDIT_CALLBACK
(
float52
,
MSG_PID_I
MSG_
H1
,
&
raw_Ki
,
0.01
,
9990
,
copy_and_scalePID_i_H1
);
MENU_ITEM_EDIT_CALLBACK
(
float52
,
MSG_PID_D
MSG_
H1
,
&
raw_Kd
,
1
,
9990
,
copy_and_scalePID_d_H1
);
#if HOTENDS > 2
// set up temp variables - undo the default scaling
raw_Ki
=
unscalePID_i
(
PID_PARAM
(
Ki
,
2
));
raw_Kd
=
unscalePID_d
(
PID_PARAM
(
Kd
,
2
));
MENU_ITEM_EDIT
(
float52
,
MSG_PID_P
MSG_
E3
,
&
PID_PARAM
(
Kp
,
2
),
1
,
9990
);
MENU_ITEM_EDIT
(
float52
,
MSG_PID_P
MSG_
H2
,
&
PID_PARAM
(
Kp
,
2
),
1
,
9990
);
// i is typically a small value so allows values below 1
MENU_ITEM_EDIT_CALLBACK
(
float52
,
MSG_PID_I
MSG_
E3
,
&
raw_Ki
,
0.01
,
9990
,
copy_and_scalePID_i_E3
);
MENU_ITEM_EDIT_CALLBACK
(
float52
,
MSG_PID_D
MSG_
E3
,
&
raw_Kd
,
1
,
9990
,
copy_and_scalePID_d_E3
);
MENU_ITEM_EDIT_CALLBACK
(
float52
,
MSG_PID_I
MSG_
H2
,
&
raw_Ki
,
0.01
,
9990
,
copy_and_scalePID_i_H2
);
MENU_ITEM_EDIT_CALLBACK
(
float52
,
MSG_PID_D
MSG_
H2
,
&
raw_Kd
,
1
,
9990
,
copy_and_scalePID_d_H2
);
#if HOTENDS > 3
// set up temp variables - undo the default scaling
raw_Ki
=
unscalePID_i
(
PID_PARAM
(
Ki
,
3
));
raw_Kd
=
unscalePID_d
(
PID_PARAM
(
Kd
,
3
));
MENU_ITEM_EDIT
(
float52
,
MSG_PID_P
MSG_
E4
,
&
PID_PARAM
(
Kp
,
3
),
1
,
9990
);
MENU_ITEM_EDIT
(
float52
,
MSG_PID_P
MSG_
H3
,
&
PID_PARAM
(
Kp
,
3
),
1
,
9990
);
// i is typically a small value so allows values below 1
MENU_ITEM_EDIT_CALLBACK
(
float52
,
MSG_PID_I
MSG_
E4
,
&
raw_Ki
,
0.01
,
9990
,
copy_and_scalePID_i_E4
);
MENU_ITEM_EDIT_CALLBACK
(
float52
,
MSG_PID_D
MSG_
E4
,
&
raw_Kd
,
1
,
9990
,
copy_and_scalePID_d_E4
);
MENU_ITEM_EDIT_CALLBACK
(
float52
,
MSG_PID_I
MSG_
H3
,
&
raw_Ki
,
0.01
,
9990
,
copy_and_scalePID_i_H3
);
MENU_ITEM_EDIT_CALLBACK
(
float52
,
MSG_PID_D
MSG_
H3
,
&
raw_Kd
,
1
,
9990
,
copy_and_scalePID_d_H3
);
#endif //HOTENDS > 3
#endif //HOTENDS > 2
#endif //HOTENDS > 1
...
...
@@ -1223,8 +1223,8 @@ static void lcd_control_motion_menu() {
MENU_ITEM_EDIT
(
bool
,
MSG_ENDSTOP_ABORT
,
&
abort_on_endstop_hit
);
#endif
#ifdef SCARA
MENU_ITEM_EDIT
(
float
52
,
MSG_XSCALE
,
&
axis_scaling
[
X_AXIS
],
0.5
,
2
);
MENU_ITEM_EDIT
(
float
52
,
MSG_YSCALE
,
&
axis_scaling
[
Y_AXIS
],
0.5
,
2
);
MENU_ITEM_EDIT
(
float
74
,
MSG_XSCALE
,
&
axis_scaling
[
X_AXIS
],
0.5
,
2
);
MENU_ITEM_EDIT
(
float
74
,
MSG_YSCALE
,
&
axis_scaling
[
Y_AXIS
],
0.5
,
2
);
#endif
END_MENU
();
}
...
...
@@ -1241,13 +1241,13 @@ static void lcd_control_volumetric_menu() {
MENU_ITEM_EDIT_CALLBACK
(
bool
,
MSG_VOLUMETRIC_ENABLED
,
&
volumetric_enabled
,
calculate_volumetric_multipliers
);
if
(
volumetric_enabled
)
{
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK
(
float43
,
MSG_FILAMENT_SIZE_EXTRUDER
"
1
"
,
&
filament_size
[
0
],
DEFAULT_NOMINAL_FILAMENT_DIA
-
.5
,
DEFAULT_NOMINAL_FILAMENT_DIA
+
.5
,
calculate_volumetric_multipliers
);
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK
(
float43
,
MSG_FILAMENT_SIZE_EXTRUDER
"
0
"
,
&
filament_size
[
0
],
DEFAULT_NOMINAL_FILAMENT_DIA
-
.5
,
DEFAULT_NOMINAL_FILAMENT_DIA
+
.5
,
calculate_volumetric_multipliers
);
#if EXTRUDERS > 1
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK
(
float43
,
MSG_FILAMENT_SIZE_EXTRUDER
"
2
"
,
&
filament_size
[
1
],
DEFAULT_NOMINAL_FILAMENT_DIA
-
.5
,
DEFAULT_NOMINAL_FILAMENT_DIA
+
.5
,
calculate_volumetric_multipliers
);
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK
(
float43
,
MSG_FILAMENT_SIZE_EXTRUDER
"
1
"
,
&
filament_size
[
1
],
DEFAULT_NOMINAL_FILAMENT_DIA
-
.5
,
DEFAULT_NOMINAL_FILAMENT_DIA
+
.5
,
calculate_volumetric_multipliers
);
#if EXTRUDERS > 2
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK
(
float43
,
MSG_FILAMENT_SIZE_EXTRUDER
"
3
"
,
&
filament_size
[
2
],
DEFAULT_NOMINAL_FILAMENT_DIA
-
.5
,
DEFAULT_NOMINAL_FILAMENT_DIA
+
.5
,
calculate_volumetric_multipliers
);
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK
(
float43
,
MSG_FILAMENT_SIZE_EXTRUDER
"
2
"
,
&
filament_size
[
2
],
DEFAULT_NOMINAL_FILAMENT_DIA
-
.5
,
DEFAULT_NOMINAL_FILAMENT_DIA
+
.5
,
calculate_volumetric_multipliers
);
#if EXTRUDERS > 3
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK
(
float43
,
MSG_FILAMENT_SIZE_EXTRUDER
"
4
"
,
&
filament_size
[
3
],
DEFAULT_NOMINAL_FILAMENT_DIA
-
.5
,
DEFAULT_NOMINAL_FILAMENT_DIA
+
.5
,
calculate_volumetric_multipliers
);
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK
(
float43
,
MSG_FILAMENT_SIZE_EXTRUDER
"
3
"
,
&
filament_size
[
3
],
DEFAULT_NOMINAL_FILAMENT_DIA
-
.5
,
DEFAULT_NOMINAL_FILAMENT_DIA
+
.5
,
calculate_volumetric_multipliers
);
#endif //EXTRUDERS > 3
#endif //EXTRUDERS > 2
#endif //EXTRUDERS > 1
...
...
@@ -1474,7 +1474,7 @@ void lcd_quick_feedback() {
#ifndef LCD_FEEDBACK_FREQUENCY_DURATION_MS
#define LCD_FEEDBACK_FREQUENCY_DURATION_MS (1000/6)
#endif
lcd_
buzz
(
LCD_FEEDBACK_FREQUENCY_DURATION_MS
,
LCD_FEEDBACK_FREQUENCY_HZ
);
buzz
(
LCD_FEEDBACK_FREQUENCY_DURATION_MS
,
LCD_FEEDBACK_FREQUENCY_HZ
);
#elif defined(BEEPER) && BEEPER >= 0
#ifndef LCD_FEEDBACK_FREQUENCY_HZ
#define LCD_FEEDBACK_FREQUENCY_HZ 5000
...
...
@@ -1482,7 +1482,7 @@ void lcd_quick_feedback() {
#ifndef LCD_FEEDBACK_FREQUENCY_DURATION_MS
#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 2
#endif
lcd_
buzz
(
LCD_FEEDBACK_FREQUENCY_DURATION_MS
,
LCD_FEEDBACK_FREQUENCY_HZ
);
buzz
(
LCD_FEEDBACK_FREQUENCY_DURATION_MS
,
LCD_FEEDBACK_FREQUENCY_HZ
);
#else
#ifndef LCD_FEEDBACK_FREQUENCY_DURATION_MS
#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 2
...
...
@@ -1913,7 +1913,12 @@ void lcd_reset_alert_level() { lcd_status_message_level = 0; }
#endif
}
void
lcd_buzz
(
long
duration
,
uint16_t
freq
)
{
bool
lcd_clicked
()
{
return
LCD_CLICKED
;
}
#endif // ULTIPANEL
#if HAS_BUZZER
void
buzz
(
long
duration
,
uint16_t
freq
)
{
if
(
freq
>
0
)
{
#ifdef LCD_USE_I2C_BUZZER
lcd
.
buzz
(
duration
,
freq
);
...
...
@@ -1929,10 +1934,7 @@ void lcd_reset_alert_level() { lcd_status_message_level = 0; }
delay
(
duration
);
}
}
bool
lcd_clicked
()
{
return
LCD_CLICKED
;
}
#endif // ULTIPANEL
#endif
/*********************************/
/** Number to string conversion **/
...
...
MarlinKimbra/ultralcd.h
View file @
59733b03
...
...
@@ -59,8 +59,6 @@
#if HAS_LCD_FILAMENT_SENSOR || HAS_LCD_POWER_SENSOR
extern
millis_t
previous_lcd_status_ms
;
#endif
void
lcd_buzz
(
long
duration
,
uint16_t
freq
);
void
lcd_quick_feedback
();
// Audible feedback for a button click - could also be visual
bool
lcd_clicked
();
...
...
@@ -117,7 +115,6 @@
FORCE_INLINE
void
lcd_setstatuspgm
(
const
char
*
message
,
const
uint8_t
level
=
0
)
{}
FORCE_INLINE
void
lcd_buttons_update
()
{}
FORCE_INLINE
void
lcd_reset_alert_level
()
{}
FORCE_INLINE
void
lcd_buzz
(
long
duration
,
uint16_t
freq
)
{}
FORCE_INLINE
bool
lcd_detected
(
void
)
{
return
true
;
}
#define LCD_MESSAGEPGM(x) do{}while(0)
...
...
@@ -125,6 +122,10 @@
#endif //ULTRA_LCD
#if HAS_BUZZER
void
buzz
(
long
duration
,
uint16_t
freq
);
#endif
char
*
itostr2
(
const
uint8_t
&
x
);
char
*
itostr31
(
const
int
&
xx
);
char
*
itostr3
(
const
int
&
xx
);
...
...
MarlinKimbra/ultralcd_implementation_hitachi_HD44780.h
View file @
59733b03
...
...
@@ -546,31 +546,46 @@ static void lcd_implementation_status_screen() {
#if HOTENDS > 1 && TEMP_SENSOR_BED != 0
// If we both have a 2nd
extruder
and a heated bed,
// If we both have a 2nd
hotend
and a heated bed,
// show the heated bed temp on the left,
// since the first line is filled with
extruder
temps
// since the first line is filled with
hotend
temps
LCD_TEMP
(
degBed
(),
degTargetBed
(),
LCD_STR_BEDTEMP
[
0
]);
#else
lcd
.
print
(
'X'
);
if
(
axis_known_position
[
X_AXIS
])
#ifdef DELTA
lcd
.
print
(
ftostr30
(
current_position
[
X_AXIS
]));
#else
lcd
.
print
(
ftostr3
(
current_position
[
X_AXIS
]));
#endif
else
lcd_printPGM
(
PSTR
(
"---"
));
#ifdef DELTA
lcd
.
print
(
'X'
);
lcd
.
print
(
ftostr30
(
current_position
[
X_AXIS
]));
lcd_printPGM
(
PSTR
(
" Y"
));
lcd
.
print
(
ftostr30
(
current_position
[
Y_AXIS
]));
if
(
axis_known_position
[
Y_AXIS
])
lcd
.
print
(
ftostr30
(
current_position
[
Y_AXIS
]));
else
#else
lcd
.
print
(
'X'
);
lcd
.
print
(
ftostr3
(
current_position
[
X_AXIS
]));
lcd_printPGM
(
PSTR
(
" Y"
));
lcd
.
print
(
ftostr3
(
current_position
[
Y_AXIS
]));
if
(
axis_known_position
[
Y_AXIS
])
lcd
.
print
(
ftostr3
(
current_position
[
Y_AXIS
]));
else
#endif // DELTA
lcd_printPGM
(
PSTR
(
"---"
));
#endif // HOTENDS > 1 || TEMP_SENSOR_BED != 0
#endif // LCD_WIDTH >= 20
lcd
.
setCursor
(
LCD_WIDTH
-
8
,
1
);
lcd
.
print
(
'Z'
);
lcd
.
print
(
ftostr32sp
(
current_position
[
Z_AXIS
]
+
0
.
00001
));
if
(
axis_known_position
[
Z_AXIS
])
lcd
.
print
(
ftostr32sp
(
current_position
[
Z_AXIS
]
+
0
.
00001
));
else
lcd_printPGM
(
PSTR
(
"---.--"
));
#endif // LCD_HEIGHT > 2
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment