Updated repetier

This commit is contained in:
Nis Wechselberg 2016-07-02 18:11:43 +02:00
parent a0bb6d8315
commit cbaa0cb12d
33 changed files with 18923 additions and 17089 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -91,6 +91,7 @@ FSTRINGVALUE(Com::tSpaceRaw," RAW")
FSTRINGVALUE(Com::tColon,":") FSTRINGVALUE(Com::tColon,":")
FSTRINGVALUE(Com::tSlash,"/") FSTRINGVALUE(Com::tSlash,"/")
FSTRINGVALUE(Com::tSpaceSlash," /") FSTRINGVALUE(Com::tSpaceSlash," /")
FSTRINGVALUE(Com::tFatal,"fatal:")
#if JSON_OUTPUT #if JSON_OUTPUT
FSTRINGVALUE(Com::tJSONDir,"{\"dir\":\"") FSTRINGVALUE(Com::tJSONDir,"{\"dir\":\"")
FSTRINGVALUE(Com::tJSONFiles,"\",\"files\":[") FSTRINGVALUE(Com::tJSONFiles,"\",\"files\":[")
@ -153,7 +154,6 @@ FSTRINGVALUE(Com::tMeasureDeltaSteps,"Measure/delta (Steps) =")
FSTRINGVALUE(Com::tMeasureDelta,"Measure/delta =") FSTRINGVALUE(Com::tMeasureDelta,"Measure/delta =")
FSTRINGVALUE(Com::tMeasureOriginReset,"Measured origin set. Measurement reset.") FSTRINGVALUE(Com::tMeasureOriginReset,"Measured origin set. Measurement reset.")
FSTRINGVALUE(Com::tMeasurementAbortedOrigin,"Origin measurement cannot be set. Use only Z-Cartesian (straight up and down) movements and try again.") FSTRINGVALUE(Com::tMeasurementAbortedOrigin,"Origin measurement cannot be set. Use only Z-Cartesian (straight up and down) movements and try again.")
FSTRINGVALUE(Com::tInvalidDeltaCoordinate,"Invalid delta coordinate - move ignored")
FSTRINGVALUE(Com::tLevelingCalc,"Leveling calc:") FSTRINGVALUE(Com::tLevelingCalc,"Leveling calc:")
FSTRINGVALUE(Com::tTower1,"Tower 1:") FSTRINGVALUE(Com::tTower1,"Tower 1:")
FSTRINGVALUE(Com::tTower2,"Tower 2:") FSTRINGVALUE(Com::tTower2,"Tower 2:")
@ -164,11 +164,21 @@ FSTRINGVALUE(Com::tDeltaAlphaC,"Alpha C(90):")
FSTRINGVALUE(Com::tDeltaRadiusCorrectionA,"Delta Radius A(0):") FSTRINGVALUE(Com::tDeltaRadiusCorrectionA,"Delta Radius A(0):")
FSTRINGVALUE(Com::tDeltaRadiusCorrectionB,"Delta Radius B(0):") FSTRINGVALUE(Com::tDeltaRadiusCorrectionB,"Delta Radius B(0):")
FSTRINGVALUE(Com::tDeltaRadiusCorrectionC,"Delta Radius C(0):") FSTRINGVALUE(Com::tDeltaRadiusCorrectionC,"Delta Radius C(0):")
FSTRINGVALUE(Com::tDBGDeltaNoMoveinDSegment,"No move in delta segment with > 1 segment. This should never happen and may cause a problem!")
#endif // DRIVE_SYSTEM #endif // DRIVE_SYSTEM
#if DRIVE_SYSTEM==TUGA #if NONLINEAR_SYSTEM
#if DRIVE_SYSTEM == TUGA
FSTRINGVALUE(Com::tInvalidDeltaCoordinate,"Invalid coordinate - move ignored") FSTRINGVALUE(Com::tInvalidDeltaCoordinate,"Invalid coordinate - move ignored")
FSTRINGVALUE(Com::tDBGDeltaNoMoveinDSegment,"No move in delta segment with > 1 segment. This should never happen and may cause a problem!") FSTRINGVALUE(Com::tDBGDeltaNoMoveinDSegment,"No move in delta segment with > 1 segment. This should never happen and may cause a problem!")
#elif DRIVE_SYSTEM == DELTA
FSTRINGVALUE(Com::tInvalidDeltaCoordinate,"Invalid delta coordinate - move ignored")
FSTRINGVALUE(Com::tDBGDeltaNoMoveinDSegment,"No move in delta segment with > 1 segment. This should never happen and may cause a problem!")
#else
FSTRINGVALUE(Com::tInvalidDeltaCoordinate,"Invalid coordinate - move ignored")
FSTRINGVALUE(Com::tDBGDeltaNoMoveinDSegment,"No move in segment with > 1 segment. This should never happen and may cause a problem!")
#endif
#endif
#if DRIVE_SYSTEM==TUGA
FSTRINGVALUE(Com::tEPRDiagonalRodLength,"Long arm length [mm]") FSTRINGVALUE(Com::tEPRDiagonalRodLength,"Long arm length [mm]")
#endif // DRIVE_SYSTEM #endif // DRIVE_SYSTEM
#ifdef DEBUG_GENERIC #ifdef DEBUG_GENERIC
@ -187,7 +197,7 @@ FSTRINGVALUE(Com::tAPIDClassic," Classic PID")
FSTRINGVALUE(Com::tAPIDKp," Kp: ") FSTRINGVALUE(Com::tAPIDKp," Kp: ")
FSTRINGVALUE(Com::tAPIDKi," Ki: ") FSTRINGVALUE(Com::tAPIDKi," Ki: ")
FSTRINGVALUE(Com::tAPIDKd," Kd: ") FSTRINGVALUE(Com::tAPIDKd," Kd: ")
FSTRINGVALUE(Com::tAPIDFailedHigh,"PID Autotune failed! Temperature to high") FSTRINGVALUE(Com::tAPIDFailedHigh,"PID Autotune failed! Temperature too high")
FSTRINGVALUE(Com::tAPIDFailedTimeout,"PID Autotune failed! timeout") FSTRINGVALUE(Com::tAPIDFailedTimeout,"PID Autotune failed! timeout")
FSTRINGVALUE(Com::tAPIDFinished,"PID Autotune finished ! Place the Kp, Ki and Kd constants in the Configuration.h or EEPROM") FSTRINGVALUE(Com::tAPIDFinished,"PID Autotune finished ! Place the Kp, Ki and Kd constants in the Configuration.h or EEPROM")
FSTRINGVALUE(Com::tMTEMPColon,"MTEMP:") FSTRINGVALUE(Com::tMTEMPColon,"MTEMP:")
@ -308,6 +318,10 @@ FSTRINGVALUE(Com::tEPRYBacklash,"Y backlash [mm]")
FSTRINGVALUE(Com::tEPRZBacklash,"Z backlash [mm]") FSTRINGVALUE(Com::tEPRZBacklash,"Z backlash [mm]")
FSTRINGVALUE(Com::tEPRMaxJerk,"Max. jerk [mm/s]") FSTRINGVALUE(Com::tEPRMaxJerk,"Max. jerk [mm/s]")
FSTRINGVALUE(Com::tEPRAccelerationFactorAtTop,"Acceleration factor at top [%,100=like bottom]") FSTRINGVALUE(Com::tEPRAccelerationFactorAtTop,"Acceleration factor at top [%,100=like bottom]")
#if NONLINEAR_SYSTEM
FSTRINGVALUE(Com::tEPRSegmentsPerSecondPrint,"Segments/s for printing")
FSTRINGVALUE(Com::tEPRSegmentsPerSecondTravel,"Segments/s for travel")
#endif
#if DRIVE_SYSTEM==DELTA #if DRIVE_SYSTEM==DELTA
FSTRINGVALUE(Com::tEPRZAcceleration,"Acceleration [mm/s^2]") FSTRINGVALUE(Com::tEPRZAcceleration,"Acceleration [mm/s^2]")
FSTRINGVALUE(Com::tEPRZTravelAcceleration,"Travel acceleration [mm/s^2]") FSTRINGVALUE(Com::tEPRZTravelAcceleration,"Travel acceleration [mm/s^2]")
@ -317,8 +331,6 @@ FSTRINGVALUE(Com::tEPRZHomingFeedrate,"Homing feedrate [mm/s]")
FSTRINGVALUE(Com::tEPRDiagonalRodLength,"Diagonal rod length [mm]") FSTRINGVALUE(Com::tEPRDiagonalRodLength,"Diagonal rod length [mm]")
FSTRINGVALUE(Com::tEPRHorizontalRadius,"Horizontal rod radius at 0,0 [mm]") FSTRINGVALUE(Com::tEPRHorizontalRadius,"Horizontal rod radius at 0,0 [mm]")
FSTRINGVALUE(Com::tEPRSegmentsPerSecondPrint,"Segments/s for printing")
FSTRINGVALUE(Com::tEPRSegmentsPerSecondTravel,"Segments/s for travel")
FSTRINGVALUE(Com::tEPRTowerXOffset,"Tower X endstop offset [steps]") FSTRINGVALUE(Com::tEPRTowerXOffset,"Tower X endstop offset [steps]")
FSTRINGVALUE(Com::tEPRTowerYOffset,"Tower Y endstop offset [steps]") FSTRINGVALUE(Com::tEPRTowerYOffset,"Tower Y endstop offset [steps]")

View file

@ -67,6 +67,7 @@ FSTRINGVAR(tFreeRAM)
FSTRINGVAR(tXColon) FSTRINGVAR(tXColon)
FSTRINGVAR(tSlash) FSTRINGVAR(tSlash)
FSTRINGVAR(tSpaceSlash) FSTRINGVAR(tSpaceSlash)
FSTRINGVAR(tFatal)
#if JSON_OUTPUT #if JSON_OUTPUT
FSTRINGVAR(tJSONDir) FSTRINGVAR(tJSONDir)
FSTRINGVAR(tJSONFiles) FSTRINGVAR(tJSONFiles)
@ -134,13 +135,16 @@ FSTRINGVAR(tEEPROMUpdated)
FSTRINGVAR(tFilamentSlipping) FSTRINGVAR(tFilamentSlipping)
FSTRINGVAR(tPauseCommunication) FSTRINGVAR(tPauseCommunication)
FSTRINGVAR(tContinueCommunication) FSTRINGVAR(tContinueCommunication)
#if NONLINEAR_SYSTEM
FSTRINGVAR(tInvalidDeltaCoordinate)
FSTRINGVAR(tDBGDeltaNoMoveinDSegment)
#endif
#if DRIVE_SYSTEM == DELTA #if DRIVE_SYSTEM == DELTA
FSTRINGVAR(tMeasurementReset) FSTRINGVAR(tMeasurementReset)
FSTRINGVAR(tMeasureDeltaSteps) FSTRINGVAR(tMeasureDeltaSteps)
FSTRINGVAR(tMeasureDelta) FSTRINGVAR(tMeasureDelta)
FSTRINGVAR(tMeasureOriginReset) FSTRINGVAR(tMeasureOriginReset)
FSTRINGVAR(tMeasurementAbortedOrigin) FSTRINGVAR(tMeasurementAbortedOrigin)
FSTRINGVAR(tInvalidDeltaCoordinate)
FSTRINGVAR(tLevelingCalc) FSTRINGVAR(tLevelingCalc)
FSTRINGVAR(tTower1) FSTRINGVAR(tTower1)
FSTRINGVAR(tTower2) FSTRINGVAR(tTower2)
@ -154,12 +158,9 @@ FSTRINGVAR(tDeltaRadiusCorrectionC)
FSTRINGVAR(tDeltaDiagonalCorrectionA) FSTRINGVAR(tDeltaDiagonalCorrectionA)
FSTRINGVAR(tDeltaDiagonalCorrectionB) FSTRINGVAR(tDeltaDiagonalCorrectionB)
FSTRINGVAR(tDeltaDiagonalCorrectionC) FSTRINGVAR(tDeltaDiagonalCorrectionC)
FSTRINGVAR(tDBGDeltaNoMoveinDSegment)
FSTRINGVAR(tEPRDeltaMaxRadius) FSTRINGVAR(tEPRDeltaMaxRadius)
#endif // DRIVE_SYSTEM #endif // DRIVE_SYSTEM
#if DRIVE_SYSTEM==TUGA #if DRIVE_SYSTEM==TUGA
FSTRINGVAR(tInvalidDeltaCoordinate)
FSTRINGVAR(tDBGDeltaNoMoveinDSegment)
FSTRINGVAR(tEPRDiagonalRodLength) FSTRINGVAR(tEPRDiagonalRodLength)
#endif #endif
#ifdef DEBUG_GENERIC #ifdef DEBUG_GENERIC
@ -319,8 +320,6 @@ FSTRINGVAR(tEPRYTravelAcceleration)
#else #else
FSTRINGVAR(tEPRDiagonalRodLength) FSTRINGVAR(tEPRDiagonalRodLength)
FSTRINGVAR(tEPRHorizontalRadius) FSTRINGVAR(tEPRHorizontalRadius)
FSTRINGVAR(tEPRSegmentsPerSecondPrint)
FSTRINGVAR(tEPRSegmentsPerSecondTravel)
FSTRINGVAR(tEPRTowerXOffset) FSTRINGVAR(tEPRTowerXOffset)
FSTRINGVAR(tEPRTowerYOffset) FSTRINGVAR(tEPRTowerYOffset)
FSTRINGVAR(tEPRTowerZOffset) FSTRINGVAR(tEPRTowerZOffset)
@ -411,6 +410,10 @@ FSTRINGVAR(tPrinterModeCNC)
#ifdef STARTUP_GCODE #ifdef STARTUP_GCODE
FSTRINGVAR(tStartupGCode) FSTRINGVAR(tStartupGCode)
#endif #endif
#if NONLINEAR_SYSTEM
FSTRINGVAR(tEPRSegmentsPerSecondPrint)
FSTRINGVAR(tEPRSegmentsPerSecondTravel)
#endif
static void config(FSTRINGPARAM(text)); static void config(FSTRINGPARAM(text));
static void config(FSTRINGPARAM(text),int value); static void config(FSTRINGPARAM(text),int value);

View file

@ -47,6 +47,7 @@
#define FAN_PIN -1 #define FAN_PIN -1
#undef FAN_BOARD_PIN #undef FAN_BOARD_PIN
#define FAN_BOARD_PIN -1 #define FAN_BOARD_PIN -1
#define BOARD_FAN_SPEED 255
#define FAN_THERMO_PIN -1 #define FAN_THERMO_PIN -1
#define FAN_THERMO_MIN_PWM 128 #define FAN_THERMO_MIN_PWM 128
#define FAN_THERMO_MAX_PWM 255 #define FAN_THERMO_MAX_PWM 255
@ -56,8 +57,8 @@
#define FAN_THERMO_THERMISTOR_TYPE 1 #define FAN_THERMO_THERMISTOR_TYPE 1
//#define EXTERNALSERIAL use Arduino serial library instead of build in. Requires more ram, has only 63 byte input buffer. //#define EXTERNALSERIAL use Arduino serial library instead of build in. Requires more ram, has only 63 byte input buffer.
// Uncomment the following line if you are using arduino compatible firmware made for Arduino version earlier then 1.0 // Uncomment the following line if you are using Arduino compatible firmware made for Arduino version earlier then 1.0
// If it is incompatible you will get compiler errors about write functions not beeing compatible! // If it is incompatible you will get compiler errors about write functions not being compatible!
//#define COMPAT_PRE1 //#define COMPAT_PRE1
#define BLUETOOTH_SERIAL -1 #define BLUETOOTH_SERIAL -1
#define BLUETOOTH_BAUD 115200 #define BLUETOOTH_BAUD 115200
@ -76,8 +77,9 @@
#define RETRACT_ON_PAUSE 2 #define RETRACT_ON_PAUSE 2
#define PAUSE_START_COMMANDS "" #define PAUSE_START_COMMANDS ""
#define PAUSE_END_COMMANDS "" #define PAUSE_END_COMMANDS ""
#define EXT0_X_OFFSET 0 #define SHARED_EXTRUDER_HEATER 0
#define EXT0_Y_OFFSET 2800 #define EXT0_X_OFFSET -2800
#define EXT0_Y_OFFSET 0
#define EXT0_Z_OFFSET 0 #define EXT0_Z_OFFSET 0
#define EXT0_STEPS_PER_MM 1000 #define EXT0_STEPS_PER_MM 1000
#define EXT0_TEMPSENSOR_TYPE 8 #define EXT0_TEMPSENSOR_TYPE 8
@ -88,6 +90,11 @@
#define EXT0_INVERSE 0 #define EXT0_INVERSE 0
#define EXT0_ENABLE_PIN ORIG_E0_ENABLE_PIN #define EXT0_ENABLE_PIN ORIG_E0_ENABLE_PIN
#define EXT0_ENABLE_ON 0 #define EXT0_ENABLE_ON 0
#define EXT0_MIRROR_STEPPER 0
#define EXT0_STEP2_PIN ORIG_E0_STEP_PIN
#define EXT0_DIR2_PIN ORIG_E0_DIR_PIN
#define EXT0_INVERSE2 0
#define EXT0_ENABLE2_PIN ORIG_E0_ENABLE_PIN
#define EXT0_MAX_FEEDRATE 50 #define EXT0_MAX_FEEDRATE 50
#define EXT0_MAX_START_FEEDRATE 20 #define EXT0_MAX_START_FEEDRATE 20
#define EXT0_MAX_ACCELERATION 5000 #define EXT0_MAX_ACCELERATION 5000
@ -111,8 +118,8 @@
#define EXT0_DECOUPLE_TEST_PERIOD 12000 #define EXT0_DECOUPLE_TEST_PERIOD 12000
#define EXT0_JAM_PIN -1 #define EXT0_JAM_PIN -1
#define EXT0_JAM_PULLUP 0 #define EXT0_JAM_PULLUP 0
#define EXT1_X_OFFSET 0 #define EXT1_X_OFFSET 2800
#define EXT1_Y_OFFSET -2800 #define EXT1_Y_OFFSET 0
#define EXT1_Z_OFFSET 0 #define EXT1_Z_OFFSET 0
#define EXT1_STEPS_PER_MM 1000 #define EXT1_STEPS_PER_MM 1000
#define EXT1_TEMPSENSOR_TYPE 8 #define EXT1_TEMPSENSOR_TYPE 8
@ -123,6 +130,11 @@
#define EXT1_INVERSE 0 #define EXT1_INVERSE 0
#define EXT1_ENABLE_PIN ORIG_E1_ENABLE_PIN #define EXT1_ENABLE_PIN ORIG_E1_ENABLE_PIN
#define EXT1_ENABLE_ON 0 #define EXT1_ENABLE_ON 0
#define EXT1_MIRROR_STEPPER 0
#define EXT1_STEP2_PIN ORIG_E1_STEP_PIN
#define EXT1_DIR2_PIN ORIG_E1_DIR_PIN
#define EXT1_INVERSE2 0
#define EXT1_ENABLE2_PIN ORIG_E1_ENABLE_PIN
#define EXT1_MAX_FEEDRATE 50 #define EXT1_MAX_FEEDRATE 50
#define EXT1_MAX_START_FEEDRATE 20 #define EXT1_MAX_START_FEEDRATE 20
#define EXT1_MAX_ACCELERATION 5000 #define EXT1_MAX_ACCELERATION 5000
@ -170,10 +182,10 @@
#define JAM_ACTION 0 #define JAM_ACTION 0
#define RETRACT_DURING_HEATUP true #define RETRACT_DURING_HEATUP true
#define PID_CONTROL_RANGE 20 #define PID_CONTROL_RANGE 10
#define SKIP_M109_IF_WITHIN 2 #define SKIP_M109_IF_WITHIN 2
#define SCALE_PID_TO_MAX 0 #define SCALE_PID_TO_MAX 0
#define TEMP_HYSTERESIS 0 #define TEMP_HYSTERESIS 3
#define EXTRUDE_MAXLENGTH 500 #define EXTRUDE_MAXLENGTH 500
#define NUM_TEMPS_USERTHERMISTOR0 0 #define NUM_TEMPS_USERTHERMISTOR0 0
#define USER_THERMISTORTABLE0 {} #define USER_THERMISTORTABLE0 {}
@ -259,8 +271,8 @@ It also can add a delay to wait for spindle to run on full speed.
// ################ Endstop configuration ##################### // ################ Endstop configuration #####################
#define ENDSTOP_PULLUP_X_MIN true #define ENDSTOP_PULLUP_X_MIN true
#define ENDSTOP_X_MIN_INVERTING false #define ENDSTOP_X_MIN_INVERTING true
#define MIN_HARDWARE_ENDSTOP_X false #define MIN_HARDWARE_ENDSTOP_X true
#define ENDSTOP_PULLUP_Y_MIN true #define ENDSTOP_PULLUP_Y_MIN true
#define ENDSTOP_Y_MIN_INVERTING true #define ENDSTOP_Y_MIN_INVERTING true
#define MIN_HARDWARE_ENDSTOP_Y true #define MIN_HARDWARE_ENDSTOP_Y true
@ -268,8 +280,8 @@ It also can add a delay to wait for spindle to run on full speed.
#define ENDSTOP_Z_MIN_INVERTING false #define ENDSTOP_Z_MIN_INVERTING false
#define MIN_HARDWARE_ENDSTOP_Z false #define MIN_HARDWARE_ENDSTOP_Z false
#define ENDSTOP_PULLUP_X_MAX true #define ENDSTOP_PULLUP_X_MAX true
#define ENDSTOP_X_MAX_INVERTING true #define ENDSTOP_X_MAX_INVERTING false
#define MAX_HARDWARE_ENDSTOP_X true #define MAX_HARDWARE_ENDSTOP_X false
#define ENDSTOP_PULLUP_Y_MAX true #define ENDSTOP_PULLUP_Y_MAX true
#define ENDSTOP_Y_MAX_INVERTING false #define ENDSTOP_Y_MAX_INVERTING false
#define MAX_HARDWARE_ENDSTOP_Y false #define MAX_HARDWARE_ENDSTOP_Y false
@ -278,10 +290,10 @@ It also can add a delay to wait for spindle to run on full speed.
#define MAX_HARDWARE_ENDSTOP_Z true #define MAX_HARDWARE_ENDSTOP_Z true
#define max_software_endstop_r true #define max_software_endstop_r true
#define min_software_endstop_x true #define min_software_endstop_x false
#define min_software_endstop_y false #define min_software_endstop_y false
#define min_software_endstop_z true #define min_software_endstop_z true
#define max_software_endstop_x false #define max_software_endstop_x true
#define max_software_endstop_y true #define max_software_endstop_y true
#define max_software_endstop_z false #define max_software_endstop_z false
#define ENDSTOP_X_BACK_MOVE 5 #define ENDSTOP_X_BACK_MOVE 5
@ -290,8 +302,8 @@ It also can add a delay to wait for spindle to run on full speed.
#define ENDSTOP_X_RETEST_REDUCTION_FACTOR 3 #define ENDSTOP_X_RETEST_REDUCTION_FACTOR 3
#define ENDSTOP_Y_RETEST_REDUCTION_FACTOR 3 #define ENDSTOP_Y_RETEST_REDUCTION_FACTOR 3
#define ENDSTOP_Z_RETEST_REDUCTION_FACTOR 3 #define ENDSTOP_Z_RETEST_REDUCTION_FACTOR 3
#define ENDSTOP_X_BACK_ON_HOME 10 #define ENDSTOP_X_BACK_ON_HOME 0
#define ENDSTOP_Y_BACK_ON_HOME 1 #define ENDSTOP_Y_BACK_ON_HOME 0
#define ENDSTOP_Z_BACK_ON_HOME 0 #define ENDSTOP_Z_BACK_ON_HOME 0
#define ALWAYS_CHECK_ENDSTOPS 0 #define ALWAYS_CHECK_ENDSTOPS 0
@ -307,7 +319,7 @@ It also can add a delay to wait for spindle to run on full speed.
#define INVERT_X_DIR 0 #define INVERT_X_DIR 0
#define INVERT_Y_DIR 0 #define INVERT_Y_DIR 0
#define INVERT_Z_DIR 0 #define INVERT_Z_DIR 0
#define X_HOME_DIR 1 #define X_HOME_DIR -1
#define Y_HOME_DIR -1 #define Y_HOME_DIR -1
#define Z_HOME_DIR 1 #define Z_HOME_DIR 1
#define X_MAX_LENGTH 155 #define X_MAX_LENGTH 155
@ -333,7 +345,7 @@ It also can add a delay to wait for spindle to run on full speed.
// ## Movement settings ## // ## Movement settings ##
// ########################################################################################## // ##########################################################################################
#define FEATURE_BABYSTEPPING 1 #define FEATURE_BABYSTEPPING 0
#define BABYSTEP_MULTIPLICATOR 1 #define BABYSTEP_MULTIPLICATOR 1
#define DELTA_SEGMENTS_PER_SECOND_PRINT 180 // Move accurate setting for print moves #define DELTA_SEGMENTS_PER_SECOND_PRINT 180 // Move accurate setting for print moves
@ -381,6 +393,8 @@ It also can add a delay to wait for spindle to run on full speed.
#define PRINTLINE_CACHE_SIZE 16 #define PRINTLINE_CACHE_SIZE 16
#define MOVE_CACHE_LOW 10 #define MOVE_CACHE_LOW 10
#define LOW_TICKS_PER_MOVE 250000 #define LOW_TICKS_PER_MOVE 250000
#define EXTRUDER_SWITCH_XY_SPEED 100
#define DUAL_X_AXIS 0
#define FEATURE_TWO_XSTEPPER 0 #define FEATURE_TWO_XSTEPPER 0
#define X2_STEP_PIN ORIG_E1_STEP_PIN #define X2_STEP_PIN ORIG_E1_STEP_PIN
#define X2_DIR_PIN ORIG_E1_DIR_PIN #define X2_DIR_PIN ORIG_E1_DIR_PIN
@ -408,10 +422,10 @@ It also can add a delay to wait for spindle to run on full speed.
#define ENABLE_POWER_ON_STARTUP 1 #define ENABLE_POWER_ON_STARTUP 1
#define POWER_INVERTING 0 #define POWER_INVERTING 0
#define KILL_METHOD 1 #define KILL_METHOD 1
#define ACK_WITH_LINENUMBER 1 #define ACK_WITH_LINENUMBER 0
#define WAITING_IDENTIFIER "wait" #define WAITING_IDENTIFIER "wait"
#define ECHO_ON_EXECUTE 1 #define ECHO_ON_EXECUTE 1
#define EEPROM_MODE 2 #define EEPROM_MODE 0
#undef PS_ON_PIN #undef PS_ON_PIN
#define PS_ON_PIN ORIG_PS_ON_PIN #define PS_ON_PIN ORIG_PS_ON_PIN
#define JSON_OUTPUT 0 #define JSON_OUTPUT 0
@ -442,28 +456,30 @@ WARNING: Servos can draw a considerable amount of current. Make sure your system
#define Z_PROBE_Z_OFFSET_MODE 0 #define Z_PROBE_Z_OFFSET_MODE 0
#define UI_BED_COATING 1 #define UI_BED_COATING 1
#define FEATURE_Z_PROBE 1 #define FEATURE_Z_PROBE 1
#define Z_PROBE_BED_DISTANCE 10 #define Z_PROBE_BED_DISTANCE 3
#define Z_PROBE_PIN ORIG_Z_MIN_PIN #define Z_PROBE_PIN ORIG_Z_MIN_PIN
#define Z_PROBE_PULLUP 1 #define Z_PROBE_PULLUP 1
#define Z_PROBE_ON_HIGH 1 #define Z_PROBE_ON_HIGH 1
#define Z_PROBE_X_OFFSET 6.4 #define Z_PROBE_X_OFFSET 6.4
#define Z_PROBE_Y_OFFSET 0 #define Z_PROBE_Y_OFFSET 0
#define Z_PROBE_WAIT_BEFORE_TEST 0 #define Z_PROBE_WAIT_BEFORE_TEST 0
#define Z_PROBE_SPEED 100 #define Z_PROBE_SPEED 30
#define Z_PROBE_XY_SPEED 150 #define Z_PROBE_XY_SPEED 250
#define Z_PROBE_SWITCHING_DISTANCE 1 #define Z_PROBE_SWITCHING_DISTANCE 0.3
#define Z_PROBE_REPETITIONS 1 #define Z_PROBE_REPETITIONS 1
#define Z_PROBE_HEIGHT 6.9 #define Z_PROBE_HEIGHT 7.2
#define Z_PROBE_START_SCRIPT "" #define Z_PROBE_START_SCRIPT ""
#define Z_PROBE_FINISHED_SCRIPT "" #define Z_PROBE_FINISHED_SCRIPT ""
#define Z_PROBE_REQUIRES_HEATING 0
#define Z_PROBE_MIN_TEMPERATURE 150
#define FEATURE_AUTOLEVEL 1 #define FEATURE_AUTOLEVEL 1
#define Z_PROBE_X1 5 #define Z_PROBE_X1 5
#define Z_PROBE_Y1 5 #define Z_PROBE_Y1 5
#define Z_PROBE_X2 150 #define Z_PROBE_X2 150
#define Z_PROBE_Y2 5 #define Z_PROBE_Y2 5
#define Z_PROBE_X3 150 #define Z_PROBE_X3 5
#define Z_PROBE_Y3 150 #define Z_PROBE_Y3 150
#define BED_LEVELING_METHOD 0 #define BED_LEVELING_METHOD 1
#define BED_CORRECTION_METHOD 0 #define BED_CORRECTION_METHOD 0
#define BED_LEVELING_GRID_SIZE 5 #define BED_LEVELING_GRID_SIZE 5
#define BED_LEVELING_REPETITIONS 5 #define BED_LEVELING_REPETITIONS 5
@ -490,23 +506,25 @@ WARNING: Servos can draw a considerable amount of current. Make sure your system
#define SD_EXTENDED_DIR 1 /** Show extended directory including file length. Don't use this with Pronterface! */ #define SD_EXTENDED_DIR 1 /** Show extended directory including file length. Don't use this with Pronterface! */
#define SD_RUN_ON_STOP "" #define SD_RUN_ON_STOP ""
#define SD_STOP_HEATER_AND_MOTORS_ON_STOP 1 #define SD_STOP_HEATER_AND_MOTORS_ON_STOP 1
#define ARC_SUPPORT 1 #define ARC_SUPPORT 0
#define FEATURE_MEMORY_POSITION 0 #define FEATURE_MEMORY_POSITION 0
#define FEATURE_CHECKSUM_FORCED 0 #define FEATURE_CHECKSUM_FORCED 0
#define FEATURE_FAN_CONTROL 0 #define FEATURE_FAN_CONTROL 0
#define FEATURE_FAN2_CONTROL 0 #define FEATURE_FAN2_CONTROL 0
#define FEATURE_CONTROLLER 0 #define FEATURE_CONTROLLER 0
#define ADC_KEYPAD_PIN -1
#define LANGUAGE_EN_ACTIVE 1 #define LANGUAGE_EN_ACTIVE 1
#define LANGUAGE_DE_ACTIVE 1 #define LANGUAGE_DE_ACTIVE 0
#define LANGUAGE_NL_ACTIVE 1 #define LANGUAGE_NL_ACTIVE 0
#define LANGUAGE_PT_ACTIVE 1 #define LANGUAGE_PT_ACTIVE 0
#define LANGUAGE_IT_ACTIVE 1 #define LANGUAGE_IT_ACTIVE 0
#define LANGUAGE_ES_ACTIVE 1 #define LANGUAGE_ES_ACTIVE 0
#define LANGUAGE_SE_ACTIVE 1 #define LANGUAGE_FI_ACTIVE 0
#define LANGUAGE_FR_ACTIVE 1 #define LANGUAGE_SE_ACTIVE 0
#define LANGUAGE_CZ_ACTIVE 1 #define LANGUAGE_FR_ACTIVE 0
#define LANGUAGE_PL_ACTIVE 1 #define LANGUAGE_CZ_ACTIVE 0
#define LANGUAGE_TR_ACTIVE 1 #define LANGUAGE_PL_ACTIVE 0
#define LANGUAGE_TR_ACTIVE 0
#define UI_PRINTER_NAME "RepRap" #define UI_PRINTER_NAME "RepRap"
#define UI_PRINTER_COMPANY "Home made" #define UI_PRINTER_COMPANY "Home made"
#define UI_PAGES_DURATION 4000 #define UI_PAGES_DURATION 4000
@ -564,10 +582,10 @@ Values must be in range 1..255
"xStepsPerMM": 200, "xStepsPerMM": 200,
"yStepsPerMM": 200, "yStepsPerMM": 200,
"zStepsPerMM": 200, "zStepsPerMM": 200,
"xInvert": 0, "xInvert": "0",
"xInvertEnable": 0, "xInvertEnable": 0,
"eepromMode": 2, "eepromMode": 0,
"yInvert": 0, "yInvert": "0",
"yInvertEnable": 0, "yInvertEnable": 0,
"zInvert": 0, "zInvert": 0,
"zInvertEnable": 0, "zInvertEnable": 0,
@ -600,11 +618,11 @@ Values must be in range 1..255
"coolerSpeed": 255, "coolerSpeed": 255,
"selectCommands": "", "selectCommands": "",
"deselectCommands": "", "deselectCommands": "",
"xOffset": 0, "xOffset": -14,
"yOffset": 14, "yOffset": null,
"zOffset": 0, "zOffset": 0,
"xOffsetSteps": 0, "xOffsetSteps": -2800,
"yOffsetSteps": 2800, "yOffsetSteps": 0,
"zOffsetSteps": 0, "zOffsetSteps": 0,
"stepper": { "stepper": {
"name": "Extruder 0", "name": "Extruder 0",
@ -615,7 +633,15 @@ Values must be in range 1..255
"advanceBacklashSteps": 0, "advanceBacklashSteps": 0,
"decoupleTestPeriod": 12, "decoupleTestPeriod": 12,
"jamPin": -1, "jamPin": -1,
"jamPullup": "0" "jamPullup": "0",
"mirror": "0",
"invert2": "0",
"stepper2": {
"name": "Extruder 0",
"step": "ORIG_E0_STEP_PIN",
"dir": "ORIG_E0_DIR_PIN",
"enable": "ORIG_E0_ENABLE_PIN"
}
}, },
{ {
"id": 1, "id": 1,
@ -645,11 +671,11 @@ Values must be in range 1..255
"coolerSpeed": 255, "coolerSpeed": 255,
"selectCommands": "", "selectCommands": "",
"deselectCommands": "", "deselectCommands": "",
"xOffset": 0, "xOffset": 14,
"yOffset": -14, "yOffset": 0,
"zOffset": 0, "zOffset": 0,
"xOffsetSteps": 0, "xOffsetSteps": 2800,
"yOffsetSteps": -2800, "yOffsetSteps": 0,
"zOffsetSteps": 0, "zOffsetSteps": 0,
"stepper": { "stepper": {
"name": "Extruder 1", "name": "Extruder 1",
@ -660,15 +686,23 @@ Values must be in range 1..255
"advanceBacklashSteps": 0, "advanceBacklashSteps": 0,
"decoupleTestPeriod": 12, "decoupleTestPeriod": 12,
"jamPin": -1, "jamPin": -1,
"jamPullup": "0" "jamPullup": "0",
"mirror": "0",
"invert2": "0",
"stepper2": {
"name": "Extruder 1",
"step": "ORIG_E1_STEP_PIN",
"dir": "ORIG_E1_DIR_PIN",
"enable": "ORIG_E1_ENABLE_PIN"
}
} }
], ],
"uiLanguage": 0, "uiLanguage": 0,
"uiController": 0, "uiController": 0,
"xMinEndstop": 0, "xMinEndstop": 1,
"yMinEndstop": 1, "yMinEndstop": 1,
"zMinEndstop": 0, "zMinEndstop": 0,
"xMaxEndstop": 1, "xMaxEndstop": 0,
"yMaxEndstop": 0, "yMaxEndstop": 0,
"zMaxEndstop": 1, "zMaxEndstop": 1,
"motherboard": 33, "motherboard": 33,
@ -720,11 +754,11 @@ Values must be in range 1..255
"disableY": "0", "disableY": "0",
"disableZ": "0", "disableZ": "0",
"disableE": "0", "disableE": "0",
"xHomeDir": "1", "xHomeDir": "-1",
"yHomeDir": "-1", "yHomeDir": "-1",
"zHomeDir": "1", "zHomeDir": "1",
"xEndstopBack": 10, "xEndstopBack": 0,
"yEndstopBack": 1, "yEndstopBack": 0,
"zEndstopBack": 0, "zEndstopBack": 0,
"deltaSegmentsPerSecondPrint": 180, "deltaSegmentsPerSecondPrint": 180,
"deltaSegmentsPerSecondTravel": 70, "deltaSegmentsPerSecondTravel": 70,
@ -758,7 +792,7 @@ Values must be in range 1..255
"enablePowerOnStartup": "1", "enablePowerOnStartup": "1",
"echoOnExecute": "1", "echoOnExecute": "1",
"sendWaits": "1", "sendWaits": "1",
"ackWithLineNumber": "1", "ackWithLineNumber": "0",
"killMethod": 1, "killMethod": 1,
"useAdvance": "0", "useAdvance": "0",
"useQuadraticAdvance": "0", "useQuadraticAdvance": "0",
@ -883,15 +917,15 @@ Values must be in range 1..255
"temps": [], "temps": [],
"numEntries": 0 "numEntries": 0
}, },
"tempHysteresis": 0, "tempHysteresis": 3,
"pidControlRange": 20, "pidControlRange": 10,
"skipM109Within": 2, "skipM109Within": 2,
"extruderFanCoolTemp": 50, "extruderFanCoolTemp": 50,
"minTemp": 150, "minTemp": 150,
"maxTemp": 285, "maxTemp": 285,
"minDefectTemp": -10, "minDefectTemp": -10,
"maxDefectTemp": 290, "maxDefectTemp": 290,
"arcSupport": "1", "arcSupport": "0",
"featureMemoryPositionWatchdog": "0", "featureMemoryPositionWatchdog": "0",
"forceChecksum": "0", "forceChecksum": "0",
"sdExtendedDir": "1", "sdExtendedDir": "1",
@ -906,17 +940,17 @@ Values must be in range 1..255
"fanThermoMaxTemp": 60, "fanThermoMaxTemp": 60,
"fanThermoThermistorPin": -1, "fanThermoThermistorPin": -1,
"fanThermoThermistorType": 1, "fanThermoThermistorType": 1,
"scalePidToMax": 0, "scalePidToMax": "0",
"zProbePin": "ORIG_Z_MIN_PIN", "zProbePin": "ORIG_Z_MIN_PIN",
"zProbeBedDistance": 10, "zProbeBedDistance": 3,
"zProbePullup": "1", "zProbePullup": "1",
"zProbeOnHigh": "1", "zProbeOnHigh": "1",
"zProbeXOffset": 6.4, "zProbeXOffset": 6.4,
"zProbeYOffset": 0, "zProbeYOffset": 0,
"zProbeWaitBeforeTest": "0", "zProbeWaitBeforeTest": "0",
"zProbeSpeed": 100, "zProbeSpeed": 30,
"zProbeXYSpeed": 150, "zProbeXYSpeed": 250,
"zProbeHeight": 6.9, "zProbeHeight": 7.2,
"zProbeStartScript": "", "zProbeStartScript": "",
"zProbeFinishedScript": "", "zProbeFinishedScript": "",
"featureAutolevel": "1", "featureAutolevel": "1",
@ -924,9 +958,9 @@ Values must be in range 1..255
"zProbeY1": 5, "zProbeY1": 5,
"zProbeX2": 150, "zProbeX2": 150,
"zProbeY2": 5, "zProbeY2": 5,
"zProbeX3": 150, "zProbeX3": 5,
"zProbeY3": 150, "zProbeY3": 150,
"zProbeSwitchingDistance": 1, "zProbeSwitchingDistance": 0.3,
"zProbeRepetitions": 1, "zProbeRepetitions": 1,
"sdSupport": "0", "sdSupport": "0",
"sdCardDetectPin": -1, "sdCardDetectPin": -1,
@ -947,7 +981,7 @@ Values must be in range 1..255
"deltaHomeOnPower": "0", "deltaHomeOnPower": "0",
"fanBoardPin": -1, "fanBoardPin": -1,
"heaterPWMSpeed": 0, "heaterPWMSpeed": 0,
"featureBabystepping": "1", "featureBabystepping": "0",
"babystepMultiplicator": 1, "babystepMultiplicator": 1,
"pdmForHeater": "0", "pdmForHeater": "0",
"pdmForCooler": "0", "pdmForCooler": "0",
@ -1085,16 +1119,17 @@ Values must be in range 1..255
"zProbeZOffset": 0, "zProbeZOffset": 0,
"uiBedCoating": "1", "uiBedCoating": "1",
"langEN": "1", "langEN": "1",
"langDE": "1", "langDE": "0",
"langNL": "1", "langNL": "0",
"langPT": "1", "langPT": "0",
"langIT": "1", "langIT": "0",
"langES": "1", "langES": "0",
"langSE": "1", "langFI": "0",
"langFR": "1", "langSE": "0",
"langCZ": "1", "langFR": "0",
"langPL": "1", "langCZ": "0",
"langTR": "1", "langPL": "0",
"langTR": "0",
"interpolateAccelerationWithZ": 0, "interpolateAccelerationWithZ": 0,
"accelerationFactorTop": 100, "accelerationFactorTop": 100,
"bendingCorrectionA": 0, "bendingCorrectionA": 0,
@ -1114,7 +1149,7 @@ Values must be in range 1..255
"cncDirectionCW": "1", "cncDirectionCW": "1",
"startupGCode": "", "startupGCode": "",
"jsonOutput": "0", "jsonOutput": "0",
"bedLevelingMethod": 0, "bedLevelingMethod": 1,
"bedCorrectionMethod": 0, "bedCorrectionMethod": 0,
"bedLevelingGridSize": 5, "bedLevelingGridSize": 5,
"bedLevelingRepetitions": 5, "bedLevelingRepetitions": 5,
@ -1124,6 +1159,13 @@ Values must be in range 1..255
"bedMotor2Y": 0, "bedMotor2Y": 0,
"bedMotor3X": 100, "bedMotor3X": 100,
"bedMotor3Y": 200, "bedMotor3Y": 200,
"zProbeRequiresHeating": "0",
"zProbeMinTemperature": 150,
"adcKeypadPin": -1,
"sharedExtruderHeater": "0",
"extruderSwitchXYSpeed": 100,
"dualXAxis": "0",
"boardFanSpeed": 255,
"hasMAX6675": false, "hasMAX6675": false,
"hasMAX31855": false, "hasMAX31855": false,
"hasGeneric1": false, "hasGeneric1": false,
@ -1133,7 +1175,7 @@ Values must be in range 1..255
"hasUser1": false, "hasUser1": false,
"hasUser2": false, "hasUser2": false,
"numExtruder": 2, "numExtruder": 2,
"version": 92.8, "version": 92.9,
"primaryPortName": "" "primaryPortName": ""
} }
========== End configuration string ========== ========== End configuration string ==========

View file

@ -63,7 +63,12 @@ void EEPROM::update(GCode *com)
void EEPROM::restoreEEPROMSettingsFromConfiguration() void EEPROM::restoreEEPROMSettingsFromConfiguration()
{ {
// can only be done right if we also update permanent values not cached!
#if EEPROM_MODE != 0 #if EEPROM_MODE != 0
EEPROM::initalizeUncached();
uint8_t newcheck = computeChecksum();
if(newcheck != HAL::eprGetByte(EPR_INTEGRITY_BYTE))
HAL::eprSetByte(EPR_INTEGRITY_BYTE, newcheck);
baudrate = BAUDRATE; baudrate = BAUDRATE;
maxInactiveTime = MAX_INACTIVE_TIME * 1000L; maxInactiveTime = MAX_INACTIVE_TIME * 1000L;
stepperInactiveTime = STEPPER_INACTIVE_TIME * 1000L; stepperInactiveTime = STEPPER_INACTIVE_TIME * 1000L;
@ -106,6 +111,13 @@ void EEPROM::restoreEEPROMSettingsFromConfiguration()
Printer::xMin = X_MIN_POS; Printer::xMin = X_MIN_POS;
Printer::yMin = Y_MIN_POS; Printer::yMin = Y_MIN_POS;
Printer::zMin = Z_MIN_POS; Printer::zMin = Z_MIN_POS;
#if NONLINEAR_SYSTEM
#ifdef ROD_RADIUS
Printer::radius0 = ROD_RADIUS;
#else
Printer::radius0 = 0;
#endif
#endif
#if ENABLE_BACKLASH_COMPENSATION #if ENABLE_BACKLASH_COMPENSATION
Printer::backlashX = X_BACKLASH; Printer::backlashX = X_BACKLASH;
Printer::backlashY = Y_BACKLASH; Printer::backlashY = Y_BACKLASH;
@ -468,11 +480,13 @@ void EEPROM::initalizeUncached()
HAL::eprSetFloat(EPR_AXISCOMP_TANXZ,AXISCOMP_TANXZ); HAL::eprSetFloat(EPR_AXISCOMP_TANXZ,AXISCOMP_TANXZ);
HAL::eprSetFloat(EPR_Z_PROBE_BED_DISTANCE,Z_PROBE_BED_DISTANCE); HAL::eprSetFloat(EPR_Z_PROBE_BED_DISTANCE,Z_PROBE_BED_DISTANCE);
Printer::zBedOffset = HAL::eprGetFloat(EPR_Z_PROBE_Z_OFFSET); Printer::zBedOffset = HAL::eprGetFloat(EPR_Z_PROBE_Z_OFFSET);
#if NONLINEAR_SYSTEM
HAL::eprSetInt16(EPR_DELTA_SEGMENTS_PER_SECOND_PRINT,DELTA_SEGMENTS_PER_SECOND_PRINT);
HAL::eprSetInt16(EPR_DELTA_SEGMENTS_PER_SECOND_MOVE,DELTA_SEGMENTS_PER_SECOND_MOVE);
#endif
#if DRIVE_SYSTEM == DELTA #if DRIVE_SYSTEM == DELTA
HAL::eprSetFloat(EPR_DELTA_DIAGONAL_ROD_LENGTH,DELTA_DIAGONAL_ROD); HAL::eprSetFloat(EPR_DELTA_DIAGONAL_ROD_LENGTH,DELTA_DIAGONAL_ROD);
HAL::eprSetFloat(EPR_DELTA_HORIZONTAL_RADIUS,ROD_RADIUS); HAL::eprSetFloat(EPR_DELTA_HORIZONTAL_RADIUS,ROD_RADIUS);
HAL::eprSetInt16(EPR_DELTA_SEGMENTS_PER_SECOND_PRINT,DELTA_SEGMENTS_PER_SECOND_PRINT);
HAL::eprSetInt16(EPR_DELTA_SEGMENTS_PER_SECOND_MOVE,DELTA_SEGMENTS_PER_SECOND_MOVE);
HAL::eprSetInt16(EPR_DELTA_TOWERX_OFFSET_STEPS,DELTA_X_ENDSTOP_OFFSET_STEPS); HAL::eprSetInt16(EPR_DELTA_TOWERX_OFFSET_STEPS,DELTA_X_ENDSTOP_OFFSET_STEPS);
HAL::eprSetInt16(EPR_DELTA_TOWERY_OFFSET_STEPS,DELTA_Y_ENDSTOP_OFFSET_STEPS); HAL::eprSetInt16(EPR_DELTA_TOWERY_OFFSET_STEPS,DELTA_Y_ENDSTOP_OFFSET_STEPS);
HAL::eprSetInt16(EPR_DELTA_TOWERZ_OFFSET_STEPS,DELTA_Z_ENDSTOP_OFFSET_STEPS); HAL::eprSetInt16(EPR_DELTA_TOWERZ_OFFSET_STEPS,DELTA_Z_ENDSTOP_OFFSET_STEPS);
@ -526,7 +540,7 @@ void EEPROM::readDataFromEEPROM(bool includeExtruder)
Printer::homingFeedrate[Y_AXIS] = HAL::eprGetFloat(EPR_Y_HOMING_FEEDRATE); Printer::homingFeedrate[Y_AXIS] = HAL::eprGetFloat(EPR_Y_HOMING_FEEDRATE);
Printer::homingFeedrate[Z_AXIS] = HAL::eprGetFloat(EPR_Z_HOMING_FEEDRATE); Printer::homingFeedrate[Z_AXIS] = HAL::eprGetFloat(EPR_Z_HOMING_FEEDRATE);
Printer::maxJerk = HAL::eprGetFloat(EPR_MAX_JERK); Printer::maxJerk = HAL::eprGetFloat(EPR_MAX_JERK);
#if DRIVE_SYSTEM!=DELTA #if DRIVE_SYSTEM != DELTA
Printer::maxZJerk = HAL::eprGetFloat(EPR_MAX_ZJERK); Printer::maxZJerk = HAL::eprGetFloat(EPR_MAX_ZJERK);
#endif #endif
#if RAMP_ACCELERATION #if RAMP_ACCELERATION
@ -653,11 +667,13 @@ void EEPROM::readDataFromEEPROM(bool includeExtruder)
} }
if(version < 4) if(version < 4)
{ {
#if NONLINEAR_SYSTEM
HAL::eprSetInt16(EPR_DELTA_SEGMENTS_PER_SECOND_PRINT,DELTA_SEGMENTS_PER_SECOND_PRINT);
HAL::eprSetInt16(EPR_DELTA_SEGMENTS_PER_SECOND_MOVE,DELTA_SEGMENTS_PER_SECOND_MOVE);
#endif
#if DRIVE_SYSTEM == DELTA #if DRIVE_SYSTEM == DELTA
HAL::eprSetFloat(EPR_DELTA_DIAGONAL_ROD_LENGTH,DELTA_DIAGONAL_ROD); HAL::eprSetFloat(EPR_DELTA_DIAGONAL_ROD_LENGTH,DELTA_DIAGONAL_ROD);
HAL::eprSetFloat(EPR_DELTA_HORIZONTAL_RADIUS,ROD_RADIUS); HAL::eprSetFloat(EPR_DELTA_HORIZONTAL_RADIUS,ROD_RADIUS);
HAL::eprSetInt16(EPR_DELTA_SEGMENTS_PER_SECOND_PRINT,DELTA_SEGMENTS_PER_SECOND_PRINT);
HAL::eprSetInt16(EPR_DELTA_SEGMENTS_PER_SECOND_MOVE,DELTA_SEGMENTS_PER_SECOND_MOVE);
HAL::eprSetInt16(EPR_DELTA_TOWERX_OFFSET_STEPS,DELTA_X_ENDSTOP_OFFSET_STEPS); HAL::eprSetInt16(EPR_DELTA_TOWERX_OFFSET_STEPS,DELTA_X_ENDSTOP_OFFSET_STEPS);
HAL::eprSetInt16(EPR_DELTA_TOWERY_OFFSET_STEPS,DELTA_Y_ENDSTOP_OFFSET_STEPS); HAL::eprSetInt16(EPR_DELTA_TOWERY_OFFSET_STEPS,DELTA_Y_ENDSTOP_OFFSET_STEPS);
HAL::eprSetInt16(EPR_DELTA_TOWERZ_OFFSET_STEPS,DELTA_Z_ENDSTOP_OFFSET_STEPS); HAL::eprSetInt16(EPR_DELTA_TOWERZ_OFFSET_STEPS,DELTA_Z_ENDSTOP_OFFSET_STEPS);
@ -797,7 +813,7 @@ void EEPROM::init()
} }
else else
{ {
HAL::eprSetByte(EPR_MAGIC_BYTE,EEPROM_MODE); // Make datachange permanent HAL::eprSetByte(EPR_MAGIC_BYTE,EEPROM_MODE); // Make data change permanent
initalizeUncached(); initalizeUncached();
storeDataIntoEEPROM(storedcheck != check); storeDataIntoEEPROM(storedcheck != check);
} }
@ -871,7 +887,10 @@ void EEPROM::writeSettings()
writeFloat(EPR_BACKLASH_Y, Com::tEPRYBacklash); writeFloat(EPR_BACKLASH_Y, Com::tEPRYBacklash);
writeFloat(EPR_BACKLASH_Z, Com::tEPRZBacklash); writeFloat(EPR_BACKLASH_Z, Com::tEPRZBacklash);
#endif #endif
#if NONLINEAR_SYSTEM
writeInt(EPR_DELTA_SEGMENTS_PER_SECOND_MOVE, Com::tEPRSegmentsPerSecondTravel);
writeInt(EPR_DELTA_SEGMENTS_PER_SECOND_PRINT, Com::tEPRSegmentsPerSecondPrint);
#endif
#if RAMP_ACCELERATION #if RAMP_ACCELERATION
//epr_out_float(EPR_X_MAX_START_SPEED,PSTR("X-axis start speed [mm/s]")); //epr_out_float(EPR_X_MAX_START_SPEED,PSTR("X-axis start speed [mm/s]"));
//epr_out_float(EPR_Y_MAX_START_SPEED,PSTR("Y-axis start speed [mm/s]")); //epr_out_float(EPR_Y_MAX_START_SPEED,PSTR("Y-axis start speed [mm/s]"));
@ -888,8 +907,6 @@ void EEPROM::writeSettings()
writeFloat(EPR_DELTA_DIAGONAL_ROD_LENGTH, Com::tEPRDiagonalRodLength); writeFloat(EPR_DELTA_DIAGONAL_ROD_LENGTH, Com::tEPRDiagonalRodLength);
writeFloat(EPR_DELTA_HORIZONTAL_RADIUS, Com::tEPRHorizontalRadius); writeFloat(EPR_DELTA_HORIZONTAL_RADIUS, Com::tEPRHorizontalRadius);
writeFloat(EPR_DELTA_MAX_RADIUS, Com::tEPRDeltaMaxRadius); writeFloat(EPR_DELTA_MAX_RADIUS, Com::tEPRDeltaMaxRadius);
writeInt(EPR_DELTA_SEGMENTS_PER_SECOND_MOVE, Com::tEPRSegmentsPerSecondTravel);
writeInt(EPR_DELTA_SEGMENTS_PER_SECOND_PRINT, Com::tEPRSegmentsPerSecondPrint);
writeInt(EPR_DELTA_TOWERX_OFFSET_STEPS, Com::tEPRTowerXOffset); writeInt(EPR_DELTA_TOWERX_OFFSET_STEPS, Com::tEPRTowerXOffset);
writeInt(EPR_DELTA_TOWERY_OFFSET_STEPS, Com::tEPRTowerYOffset); writeInt(EPR_DELTA_TOWERY_OFFSET_STEPS, Com::tEPRTowerYOffset);
writeInt(EPR_DELTA_TOWERZ_OFFSET_STEPS, Com::tEPRTowerZOffset); writeInt(EPR_DELTA_TOWERZ_OFFSET_STEPS, Com::tEPRTowerZOffset);

View file

@ -39,7 +39,7 @@ Each of the following events describe the parameter and when it is called.
#define EVENT_KILL(only_steppers) {} #define EVENT_KILL(only_steppers) {}
// Gets called when a jam was detected. // Gets called when a jam was detected.
#define EVENT_JAM_DETECTED {} #define EVENT_JAM_DETECTED {}
// Gets called everytime the jam detection signal switches. Steps are the extruder steps since last change. // Gets called every time the jam detection signal switches. Steps are the extruder steps since last change.
#define EVENT_JAM_SIGNAL_CHANGED(extruderId,steps) {} #define EVENT_JAM_SIGNAL_CHANGED(extruderId,steps) {}
// Gets called if a heater decoupling is detected. // Gets called if a heater decoupling is detected.
#define EVENT_HEATER_DECOUPLED(id) {} #define EVENT_HEATER_DECOUPLED(id) {}
@ -49,14 +49,20 @@ Each of the following events describe the parameter and when it is called.
#define EVENT_START_UI_ACTION(shortAction) {} #define EVENT_START_UI_ACTION(shortAction) {}
// Gets called if a nextPrevius actions gets executed. // Gets called if a nextPrevius actions gets executed.
#define EVENT_START_NEXTPREVIOUS(action,increment) {} #define EVENT_START_NEXTPREVIOUS(action,increment) {}
// Gets called before a move is queued. Gives the ability to limit moves.
#define EVENT_CONTRAIN_DESTINATION_COORDINATES
// Gets called when a fatal error occurs and all actions should be stopped
#define EVENT_FATAL_ERROR_OCCURED
// Gets called after a M999 to continue from fatal errors
#define EVENT_CONTINUE_FROM_FATAL_ERROR
// Called to initalize laser pins. Return false to prevent default initalization. // Called to initialize laser pins. Return false to prevent default initialization.
#define EVENT_INITALIZE_LASER true #define EVENT_INITALIZE_LASER true
// Set laser to intensity level 0 = off, 255 = full. Return false if you have overridden the setting routine. // Set laser to intensity level 0 = off, 255 = full. Return false if you have overridden the setting routine.
// with true the default solution will set it as digital value. // with true the default solution will set it as digital value.
#define EVENT_SET_LASER(intensity) true #define EVENT_SET_LASER(intensity) true
// Called to initalize cnc pins. Return false to prevent default initalization. // Called to initialize CNC pins. Return false to prevent default initialization.
#define EVENT_INITALIZE_CNC true #define EVENT_INITALIZE_CNC true
// Turn off spindle // Turn off spindle
#define EVENT_SPINDLE_OFF true #define EVENT_SPINDLE_OFF true

File diff suppressed because it is too large Load diff

View file

@ -9,7 +9,7 @@
//#endif //#endif
// Updates the temperature of all extruders and heated bed if it's time. // Updates the temperature of all extruders and heated bed if it's time.
// Toggels the heater power if necessary. // Toggles the heater power if necessary.
extern bool reportTempsensorError(); ///< Report defect sensors extern bool reportTempsensorError(); ///< Report defect sensors
extern uint8_t manageMonitor; extern uint8_t manageMonitor;
#define HTR_OFF 0 #define HTR_OFF 0
@ -25,7 +25,7 @@ extern uint8_t manageMonitor;
#define TEMPERATURE_CONTROLLER_FLAG_JAM 32 //< Indicates a jammed filament #define TEMPERATURE_CONTROLLER_FLAG_JAM 32 //< Indicates a jammed filament
#define TEMPERATURE_CONTROLLER_FLAG_SLOWDOWN 64 //< Indicates a slowed down extruder #define TEMPERATURE_CONTROLLER_FLAG_SLOWDOWN 64 //< Indicates a slowed down extruder
/** TemperatureController manages one heater-temperature sensore loop. You can have up to /** TemperatureController manages one heater-temperature sensor loop. You can have up to
4 loops allowing pid/bang bang for up to 3 extruder and the heated bed. 4 loops allowing pid/bang bang for up to 3 extruder and the heated bed.
*/ */
@ -35,12 +35,12 @@ public:
uint8_t pwmIndex; ///< pwm index for output control. 0-2 = Extruder, 3 = Fan, 4 = Heated Bed uint8_t pwmIndex; ///< pwm index for output control. 0-2 = Extruder, 3 = Fan, 4 = Heated Bed
uint8_t sensorType; ///< Type of temperature sensor. uint8_t sensorType; ///< Type of temperature sensor.
uint8_t sensorPin; ///< Pin to read extruder temperature. uint8_t sensorPin; ///< Pin to read extruder temperature.
int16_t currentTemperature; ///< Currenttemperature value read from sensor. int8_t heatManager; ///< How is temperature controlled. 0 = on/off, 1 = PID-Control, 3 = dead time control
int16_t targetTemperature; ///< Target temperature value in units of sensor. int16_t currentTemperature; ///< Current temperature value read from sensor.
//int16_t targetTemperature; ///< Target temperature value in units of sensor.
float currentTemperatureC; ///< Current temperature in degC. float currentTemperatureC; ///< Current temperature in degC.
float targetTemperatureC; ///< Target temperature in degC. float targetTemperatureC; ///< Target temperature in degC.
uint32_t lastTemperatureUpdate; ///< Time in millis of the last temperature update. uint32_t lastTemperatureUpdate; ///< Time in millis of the last temperature update.
int8_t heatManager; ///< How is temperature controled. 0 = on/off, 1 = PID-Control, 3 = deat time control
#if TEMP_PID #if TEMP_PID
float tempIState; ///< Temp. var. for PID computation. float tempIState; ///< Temp. var. for PID computation.
uint8_t pidDriveMax; ///< Used for windup in PID calculation. uint8_t pidDriveMax; ///< Used for windup in PID calculation.
@ -77,6 +77,9 @@ public:
{ {
return flags & TEMPERATURE_CONTROLLER_FLAG_DECOUPLE_FULL; return flags & TEMPERATURE_CONTROLLER_FLAG_DECOUPLE_FULL;
} }
inline void removeErrorStates() {
flags &= ~(TEMPERATURE_CONTROLLER_FLAG_ALARM | TEMPERATURE_CONTROLLER_FLAG_SENSDEFECT | TEMPERATURE_CONTROLLER_FLAG_SENSDECOUPLED);
}
inline bool isDecoupleFullOrHold() inline bool isDecoupleFullOrHold()
{ {
return flags & (TEMPERATURE_CONTROLLER_FLAG_DECOUPLE_FULL | TEMPERATURE_CONTROLLER_FLAG_DECOUPLE_HOLD); return flags & (TEMPERATURE_CONTROLLER_FLAG_DECOUPLE_FULL | TEMPERATURE_CONTROLLER_FLAG_DECOUPLE_HOLD);
@ -122,6 +125,7 @@ public:
{ {
return flags & TEMPERATURE_CONTROLLER_FLAG_SENSDECOUPLED; return flags & TEMPERATURE_CONTROLLER_FLAG_SENSDECOUPLED;
} }
static void resetAllErrorStates();
#if EXTRUDER_JAM_CONTROL #if EXTRUDER_JAM_CONTROL
inline bool isJammed() inline bool isJammed()
{ {

View file

@ -794,19 +794,19 @@ ISR(PWM_TIMER_VECTOR)
#if defined(EXT0_HEATER_PIN) && EXT0_HEATER_PIN > -1 #if defined(EXT0_HEATER_PIN) && EXT0_HEATER_PIN > -1
if((pwm_pos_set[0] = (pwm_pos[0] & HEATER_PWM_MASK)) > 0) WRITE(EXT0_HEATER_PIN,!HEATER_PINS_INVERTED); if((pwm_pos_set[0] = (pwm_pos[0] & HEATER_PWM_MASK)) > 0) WRITE(EXT0_HEATER_PIN,!HEATER_PINS_INVERTED);
#endif #endif
#if defined(EXT1_HEATER_PIN) && EXT1_HEATER_PIN > -1 && NUM_EXTRUDER > 1 #if defined(EXT1_HEATER_PIN) && EXT1_HEATER_PIN > -1 && NUM_EXTRUDER > 1 && !MIXING_EXTRUDER
if((pwm_pos_set[1] = (pwm_pos[1] & HEATER_PWM_MASK)) > 0) WRITE(EXT1_HEATER_PIN,!HEATER_PINS_INVERTED); if((pwm_pos_set[1] = (pwm_pos[1] & HEATER_PWM_MASK)) > 0) WRITE(EXT1_HEATER_PIN,!HEATER_PINS_INVERTED);
#endif #endif
#if defined(EXT2_HEATER_PIN) && EXT2_HEATER_PIN > -1 && NUM_EXTRUDER > 2 #if defined(EXT2_HEATER_PIN) && EXT2_HEATER_PIN > -1 && NUM_EXTRUDER > 2 && !MIXING_EXTRUDER
if((pwm_pos_set[2] = (pwm_pos[2] & HEATER_PWM_MASK)) > 0) WRITE(EXT2_HEATER_PIN,!HEATER_PINS_INVERTED); if((pwm_pos_set[2] = (pwm_pos[2] & HEATER_PWM_MASK)) > 0) WRITE(EXT2_HEATER_PIN,!HEATER_PINS_INVERTED);
#endif #endif
#if defined(EXT3_HEATER_PIN) && EXT3_HEATER_PIN > -1 && NUM_EXTRUDER > 3 #if defined(EXT3_HEATER_PIN) && EXT3_HEATER_PIN > -1 && NUM_EXTRUDER > 3 && !MIXING_EXTRUDER
if((pwm_pos_set[3] = (pwm_pos[3] & HEATER_PWM_MASK)) > 0) WRITE(EXT3_HEATER_PIN,!HEATER_PINS_INVERTED); if((pwm_pos_set[3] = (pwm_pos[3] & HEATER_PWM_MASK)) > 0) WRITE(EXT3_HEATER_PIN,!HEATER_PINS_INVERTED);
#endif #endif
#if defined(EXT4_HEATER_PIN) && EXT4_HEATER_PIN > -1 && NUM_EXTRUDER > 4 #if defined(EXT4_HEATER_PIN) && EXT4_HEATER_PIN > -1 && NUM_EXTRUDER > 4 && !MIXING_EXTRUDER
if((pwm_pos_set[4] = (pwm_pos[4] & HEATER_PWM_MASK)) > 0) WRITE(EXT4_HEATER_PIN,!HEATER_PINS_INVERTED); if((pwm_pos_set[4] = (pwm_pos[4] & HEATER_PWM_MASK)) > 0) WRITE(EXT4_HEATER_PIN,!HEATER_PINS_INVERTED);
#endif #endif
#if defined(EXT5_HEATER_PIN) && EXT5_HEATER_PIN > -1 && NUM_EXTRUDER > 5 #if defined(EXT5_HEATER_PIN) && EXT5_HEATER_PIN > -1 && NUM_EXTRUDER > 5 && !MIXING_EXTRUDER
if((pwm_pos_set[5] = (pwm_pos[5] & HEATER_PWM_MASK)) > 0) WRITE(EXT5_HEATER_PIN, !HEATER_PINS_INVERTED); if((pwm_pos_set[5] = (pwm_pos[5] & HEATER_PWM_MASK)) > 0) WRITE(EXT5_HEATER_PIN, !HEATER_PINS_INVERTED);
#endif #endif
#if HEATED_BED_HEATER_PIN > -1 && HAVE_HEATED_BED #if HEATED_BED_HEATER_PIN > -1 && HAVE_HEATED_BED
@ -870,7 +870,7 @@ ISR(PWM_TIMER_VECTOR)
#endif #endif
#endif #endif
#endif #endif
#if defined(EXT1_HEATER_PIN) && EXT1_HEATER_PIN > -1 && NUM_EXTRUDER > 1 #if defined(EXT1_HEATER_PIN) && EXT1_HEATER_PIN > -1 && NUM_EXTRUDER > 1 && !MIXING_EXTRUDER
#if PDM_FOR_EXTRUDER #if PDM_FOR_EXTRUDER
pulseDensityModulate(EXT1_HEATER_PIN, pwm_pos[1], pwm_pos_set[1], HEATER_PINS_INVERTED); pulseDensityModulate(EXT1_HEATER_PIN, pwm_pos[1], pwm_pos_set[1], HEATER_PINS_INVERTED);
#else #else
@ -884,7 +884,7 @@ ISR(PWM_TIMER_VECTOR)
#endif #endif
#endif #endif
#endif #endif
#if defined(EXT2_HEATER_PIN) && EXT2_HEATER_PIN > -1 && NUM_EXTRUDER > 2 #if defined(EXT2_HEATER_PIN) && EXT2_HEATER_PIN > -1 && NUM_EXTRUDER > 2 && !MIXING_EXTRUDER
#if PDM_FOR_EXTRUDER #if PDM_FOR_EXTRUDER
pulseDensityModulate(EXT2_HEATER_PIN, pwm_pos[2], pwm_pos_set[2], HEATER_PINS_INVERTED); pulseDensityModulate(EXT2_HEATER_PIN, pwm_pos[2], pwm_pos_set[2], HEATER_PINS_INVERTED);
#else #else
@ -898,7 +898,7 @@ ISR(PWM_TIMER_VECTOR)
#endif #endif
#endif #endif
#endif #endif
#if defined(EXT3_HEATER_PIN) && EXT3_HEATER_PIN>-1 && NUM_EXTRUDER > 3 #if defined(EXT3_HEATER_PIN) && EXT3_HEATER_PIN>-1 && NUM_EXTRUDER > 3 && !MIXING_EXTRUDER
#if PDM_FOR_EXTRUDER #if PDM_FOR_EXTRUDER
pulseDensityModulate(EXT3_HEATER_PIN, pwm_pos[3], pwm_pos_set[3], HEATER_PINS_INVERTED); pulseDensityModulate(EXT3_HEATER_PIN, pwm_pos[3], pwm_pos_set[3], HEATER_PINS_INVERTED);
#else #else
@ -912,7 +912,7 @@ ISR(PWM_TIMER_VECTOR)
#endif #endif
#endif #endif
#endif #endif
#if defined(EXT4_HEATER_PIN) && EXT4_HEATER_PIN > -1 && NUM_EXTRUDER > 4 #if defined(EXT4_HEATER_PIN) && EXT4_HEATER_PIN > -1 && NUM_EXTRUDER > 4 && !MIXING_EXTRUDER
#if PDM_FOR_EXTRUDER #if PDM_FOR_EXTRUDER
pulseDensityModulate(EXT4_HEATER_PIN, pwm_pos[4], pwm_pos_set[4], HEATER_PINS_INVERTED); pulseDensityModulate(EXT4_HEATER_PIN, pwm_pos[4], pwm_pos_set[4], HEATER_PINS_INVERTED);
#else #else
@ -926,7 +926,7 @@ ISR(PWM_TIMER_VECTOR)
#endif #endif
#endif #endif
#endif #endif
#if defined(EXT5_HEATER_PIN) && EXT5_HEATER_PIN>-1 && NUM_EXTRUDER > 5 #if defined(EXT5_HEATER_PIN) && EXT5_HEATER_PIN>-1 && NUM_EXTRUDER > 5 && !MIXING_EXTRUDER
#if PDM_FOR_EXTRUDER #if PDM_FOR_EXTRUDER
pulseDensityModulate(EXT5_HEATER_PIN, pwm_pos[5], pwm_pos_set[5], HEATER_PINS_INVERTED); pulseDensityModulate(EXT5_HEATER_PIN, pwm_pos[5], pwm_pos_set[5], HEATER_PINS_INVERTED);
#else #else

View file

@ -713,7 +713,7 @@ public:
WDTCSR = (1<<WDCE) | (1<<WDE); // wdt FIX for arduino mega boards WDTCSR = (1<<WDCE) | (1<<WDE); // wdt FIX for arduino mega boards
WDTCSR = (1<<WDIE) | (1<<WDP3); WDTCSR = (1<<WDIE) | (1<<WDP3);
#else #else
wdt_enable(WDTO_1S); wdt_enable(WDTO_4S);
#endif #endif
}; };
inline static void stopWatchdog() inline static void stopWatchdog()

View file

@ -39,9 +39,10 @@ unsigned long Printer::maxPrintAccelerationStepsPerSquareSecond[E_AXIS_ARRAY];
unsigned long Printer::maxTravelAccelerationStepsPerSquareSecond[E_AXIS_ARRAY]; unsigned long Printer::maxTravelAccelerationStepsPerSquareSecond[E_AXIS_ARRAY];
#endif #endif
#if NONLINEAR_SYSTEM #if NONLINEAR_SYSTEM
long Printer::currentDeltaPositionSteps[E_TOWER_ARRAY]; long Printer::currentNonlinearPositionSteps[E_TOWER_ARRAY];
uint8_t lastMoveID = 0; // Last move ID uint8_t lastMoveID = 0; // Last move ID
#else #endif
#if DRIVE_SYSTEM != DELTA
int32_t Printer::zCorrectionStepsIncluded = 0; int32_t Printer::zCorrectionStepsIncluded = 0;
#endif #endif
int16_t Printer::zBabystepsMissing = 0; int16_t Printer::zBabystepsMissing = 0;
@ -127,7 +128,7 @@ float Printer::zLength;
float Printer::zMin; float Printer::zMin;
float Printer::feedrate; ///< Last requested feedrate. float Printer::feedrate; ///< Last requested feedrate.
int Printer::feedrateMultiply; ///< Multiplier for feedrate in percent (factor 1 = 100) int Printer::feedrateMultiply; ///< Multiplier for feedrate in percent (factor 1 = 100)
unsigned int Printer::extrudeMultiply; ///< Flow multiplier in percdent (factor 1 = 100) unsigned int Printer::extrudeMultiply; ///< Flow multiplier in percent (factor 1 = 100)
float Printer::maxJerk; ///< Maximum allowed jerk in mm/s float Printer::maxJerk; ///< Maximum allowed jerk in mm/s
#if DRIVE_SYSTEM != DELTA #if DRIVE_SYSTEM != DELTA
float Printer::maxZJerk; ///< Maximum allowed jerk in z direction in mm/s float Printer::maxZJerk; ///< Maximum allowed jerk in z direction in mm/s
@ -135,7 +136,7 @@ float Printer::maxZJerk; ///< Maximum allowed jerk in z direct
float Printer::offsetX; ///< X-offset for different extruder positions. float Printer::offsetX; ///< X-offset for different extruder positions.
float Printer::offsetY; ///< Y-offset for different extruder positions. float Printer::offsetY; ///< Y-offset for different extruder positions.
float Printer::offsetZ; ///< Z-offset for different extruder positions. float Printer::offsetZ; ///< Z-offset for different extruder positions.
speed_t Printer::vMaxReached; ///< Maximumu reached speed speed_t Printer::vMaxReached; ///< Maximum reached speed
uint32_t Printer::msecondsPrinting; ///< Milliseconds of printing time (means time with heated extruder) uint32_t Printer::msecondsPrinting; ///< Milliseconds of printing time (means time with heated extruder)
float Printer::filamentPrinted; ///< mm of filament printed since counting started float Printer::filamentPrinted; ///< mm of filament printed since counting started
#if ENABLE_BACKLASH_COMPENSATION #if ENABLE_BACKLASH_COMPENSATION
@ -144,12 +145,12 @@ float Printer::backlashY;
float Printer::backlashZ; float Printer::backlashZ;
uint8_t Printer::backlashDir; uint8_t Printer::backlashDir;
#endif #endif
float Printer::memoryX; float Printer::memoryX = IGNORE_COORDINATE;
float Printer::memoryY; float Printer::memoryY = IGNORE_COORDINATE;
float Printer::memoryZ; float Printer::memoryZ = IGNORE_COORDINATE;
float Printer::memoryE; float Printer::memoryE = IGNORE_COORDINATE;
float Printer::memoryF = -1; float Printer::memoryF = -1;
#if GANTRY #if GANTRY && !defined(FAST_COREXYZ)
int8_t Printer::motorX; int8_t Printer::motorX;
int8_t Printer::motorYorZ; int8_t Printer::motorYorZ;
#endif #endif
@ -212,8 +213,13 @@ void Endstops::update() {
newRead |= ENDSTOP_Z2_MINMAX_ID; newRead |= ENDSTOP_Z2_MINMAX_ID;
#endif #endif
#if FEATURE_Z_PROBE #if FEATURE_Z_PROBE
#if Z_PROBE_PIN == Z_MIN_PIN && MIN_HARDWARE_ENDSTOP_Z
if(newRead & ENDSTOP_Z_MIN_ID) // prevent different results causing confusion
newRead |= ENDSTOP_Z_PROBE_ID;
#else
if(Z_PROBE_ON_HIGH ? READ(Z_PROBE_PIN) : !READ(Z_PROBE_PIN)) if(Z_PROBE_ON_HIGH ? READ(Z_PROBE_PIN) : !READ(Z_PROBE_PIN))
newRead |= ENDSTOP_Z_PROBE_ID; newRead |= ENDSTOP_Z_PROBE_ID;
#endif
#endif #endif
lastRead &= newRead; lastRead &= newRead;
#ifdef EXTENDED_ENDSTOPS #ifdef EXTENDED_ENDSTOPS
@ -230,9 +236,7 @@ void Endstops::update() {
lastState2 = lastRead2; lastState2 = lastRead2;
accumulator2 |= lastState2; accumulator2 |= lastState2;
#endif #endif
#ifdef DEBUG_ENDSTOPS if (Printer::debugEndStop()) Endstops::report();
report();
#endif
} else { } else {
lastState = lastRead; lastState = lastRead;
#ifdef EXTENDED_ENDSTOPS #ifdef EXTENDED_ENDSTOPS
@ -287,32 +291,39 @@ void Printer::constrainDestinationCoords()
{ {
if(isNoDestinationCheck()) return; if(isNoDestinationCheck()) return;
#if min_software_endstop_x #if min_software_endstop_x
if (destinationSteps[X_AXIS] < xMinSteps) Printer::destinationSteps[X_AXIS] = Printer::xMinSteps; if (Printer::destinationSteps[X_AXIS] < xMinSteps) Printer::destinationSteps[X_AXIS] = Printer::xMinSteps;
#endif #endif
#if min_software_endstop_y #if min_software_endstop_y
if (destinationSteps[Y_AXIS] < yMinSteps) Printer::destinationSteps[Y_AXIS] = Printer::yMinSteps; if (Printer::destinationSteps[Y_AXIS] < yMinSteps) Printer::destinationSteps[Y_AXIS] = Printer::yMinSteps;
#endif #endif
#if min_software_endstop_z #if min_software_endstop_z
if (isAutolevelActive() == false && destinationSteps[Z_AXIS] < zMinSteps && !isZProbingActive()) Printer::destinationSteps[Z_AXIS] = Printer::zMinSteps; if (isAutolevelActive() == false && Printer::destinationSteps[Z_AXIS] < zMinSteps && !isZProbingActive()) Printer::destinationSteps[Z_AXIS] = Printer::zMinSteps;
#endif #endif
#if max_software_endstop_x #if max_software_endstop_x
if (destinationSteps[X_AXIS] > Printer::xMaxSteps) Printer::destinationSteps[X_AXIS] = Printer::xMaxSteps; if (Printer::destinationSteps[X_AXIS] > Printer::xMaxSteps) Printer::destinationSteps[X_AXIS] = Printer::xMaxSteps;
#endif #endif
#if max_software_endstop_y #if max_software_endstop_y
if (destinationSteps[Y_AXIS] > Printer::yMaxSteps) Printer::destinationSteps[Y_AXIS] = Printer::yMaxSteps; if (Printer::destinationSteps[Y_AXIS] > Printer::yMaxSteps) Printer::destinationSteps[Y_AXIS] = Printer::yMaxSteps;
#endif #endif
#if max_software_endstop_z #if max_software_endstop_z
if (isAutolevelActive() == false && destinationSteps[Z_AXIS] > Printer::zMaxSteps && !isZProbingActive()) Printer::destinationSteps[Z_AXIS] = Printer::zMaxSteps; if (isAutolevelActive() == false && Printer::destinationSteps[Z_AXIS] > Printer::zMaxSteps && !isZProbingActive()) Printer::destinationSteps[Z_AXIS] = Printer::zMaxSteps;
#endif #endif
EVENT_CONTRAIN_DESTINATION_COORDINATES
} }
#endif #endif
void Printer::setDebugLevel(uint8_t newLevel) { void Printer::setDebugLevel(uint8_t newLevel) {
debugLevel = newLevel; if(newLevel != debugLevel) {
debugLevel = newLevel;
if(debugDryrun()) {
// Disable all heaters in case they were on
Extruder::disableAllHeater();
}
}
Com::printFLN(PSTR("DebugLevel:"),(int)newLevel); Com::printFLN(PSTR("DebugLevel:"),(int)newLevel);
} }
void Printer::toggleEcho() { void Printer::toggleEcho() {
setDebugLevel(debugLevel ^ 32); setDebugLevel(debugLevel ^ 1);
} }
void Printer::toggleInfo() { void Printer::toggleInfo() {
setDebugLevel(debugLevel ^ 2); setDebugLevel(debugLevel ^ 2);
@ -329,10 +340,13 @@ void Printer::toggleCommunication() {
void Printer::toggleNoMoves() { void Printer::toggleNoMoves() {
setDebugLevel(debugLevel ^ 32); setDebugLevel(debugLevel ^ 32);
} }
void Printer::toggleEndStop() {
setDebugLevel(debugLevel ^ 64);
}
bool Printer::isPositionAllowed(float x,float y,float z) bool Printer::isPositionAllowed(float x,float y,float z)
{ {
if(isNoDestinationCheck()) return true; if(isNoDestinationCheck()) return true;
bool allowed = true; bool allowed = true;
#if DRIVE_SYSTEM == DELTA #if DRIVE_SYSTEM == DELTA
allowed &= (z >= 0) && (z <= zLength + 0.05 + ENDSTOP_Z_BACK_ON_HOME); allowed &= (z >= 0) && (z <= zLength + 0.05 + ENDSTOP_Z_BACK_ON_HOME);
@ -390,9 +404,13 @@ void Printer::reportPrinterMode() {
} }
void Printer::updateDerivedParameter() void Printer::updateDerivedParameter()
{ {
#if DRIVE_SYSTEM == DELTA #if NONLINEAR_SYSTEM
travelMovesPerSecond = EEPROM::deltaSegmentsPerSecondMove(); travelMovesPerSecond = EEPROM::deltaSegmentsPerSecondMove();
printMovesPerSecond = EEPROM::deltaSegmentsPerSecondPrint(); printMovesPerSecond = EEPROM::deltaSegmentsPerSecondPrint();
if(travelMovesPerSecond < 15) travelMovesPerSecond = 15; // lower values make no sense and can cause serious problems
if(printMovesPerSecond < 15) printMovesPerSecond = 15;
#endif
#if DRIVE_SYSTEM == DELTA
axisStepsPerMM[X_AXIS] = axisStepsPerMM[Y_AXIS] = axisStepsPerMM[Z_AXIS]; axisStepsPerMM[X_AXIS] = axisStepsPerMM[Y_AXIS] = axisStepsPerMM[Z_AXIS];
maxAccelerationMMPerSquareSecond[X_AXIS] = maxAccelerationMMPerSquareSecond[Y_AXIS] = maxAccelerationMMPerSquareSecond[Z_AXIS]; maxAccelerationMMPerSquareSecond[X_AXIS] = maxAccelerationMMPerSquareSecond[Y_AXIS] = maxAccelerationMMPerSquareSecond[Z_AXIS];
homingFeedrate[X_AXIS] = homingFeedrate[Y_AXIS] = homingFeedrate[Z_AXIS]; homingFeedrate[X_AXIS] = homingFeedrate[Y_AXIS] = homingFeedrate[Z_AXIS];
@ -489,6 +507,8 @@ void Printer::updateDerivedParameter()
minimumSpeed = accel * sqrt(2.0f / (axisStepsPerMM[X_AXIS]*accel)); minimumSpeed = accel * sqrt(2.0f / (axisStepsPerMM[X_AXIS]*accel));
accel = RMath::max(maxAccelerationMMPerSquareSecond[Z_AXIS], maxTravelAccelerationMMPerSquareSecond[Z_AXIS]); accel = RMath::max(maxAccelerationMMPerSquareSecond[Z_AXIS], maxTravelAccelerationMMPerSquareSecond[Z_AXIS]);
minimumZSpeed = accel * sqrt(2.0f / (axisStepsPerMM[Z_AXIS] * accel)); minimumZSpeed = accel * sqrt(2.0f / (axisStepsPerMM[Z_AXIS] * accel));
//Com::printFLN(PSTR("Minimum Speed:"),minimumSpeed);
//Com::printFLN(PSTR("Minimum Speed Z:"),minimumZSpeed);
#if DISTORTION_CORRECTION #if DISTORTION_CORRECTION
distortion.updateDerived(); distortion.updateDerived();
#endif // DISTORTION_CORRECTION #endif // DISTORTION_CORRECTION
@ -518,7 +538,7 @@ void Printer::kill(uint8_t only_steppers)
Extruder::disableAllExtruderMotors(); Extruder::disableAllExtruderMotors();
if(!only_steppers) if(!only_steppers)
{ {
for(uint8_t i = 0; i < NUM_TEMPERATURE_LOOPS; i++) for(uint8_t i = 0; i < NUM_EXTRUDER; i++)
Extruder::setTemperatureForExtruder(0, i); Extruder::setTemperatureForExtruder(0, i);
Extruder::setHeatedBedTemperature(0); Extruder::setHeatedBedTemperature(0);
UI_STATUS_UPD_F(Com::translatedF(UI_TEXT_STANDBY_ID)); UI_STATUS_UPD_F(Com::translatedF(UI_TEXT_STANDBY_ID));
@ -537,6 +557,7 @@ void Printer::kill(uint8_t only_steppers)
#endif #endif
pwm_pos[PWM_BOARD_FAN] = 0; pwm_pos[PWM_BOARD_FAN] = 0;
#endif // FAN_BOARD_PIN #endif // FAN_BOARD_PIN
Commands::printTemperatures(false);
} }
void Printer::updateAdvanceFlags() void Printer::updateAdvanceFlags()
@ -571,7 +592,7 @@ uint8_t Printer::moveTo(float x,float y,float z,float e,float f)
feedrate = f; feedrate = f;
#if NONLINEAR_SYSTEM #if NONLINEAR_SYSTEM
// Disable software endstop or we get wrong distances when length < real length // Disable software endstop or we get wrong distances when length < real length
if (!PrintLine::queueDeltaMove(ALWAYS_CHECK_ENDSTOPS, true, false)) if (!PrintLine::queueNonlinearMove(ALWAYS_CHECK_ENDSTOPS, true, false))
{ {
Com::printWarningFLN(PSTR("moveTo / queueDeltaMove returns error")); Com::printWarningFLN(PSTR("moveTo / queueDeltaMove returns error"));
return 0; return 0;
@ -598,16 +619,7 @@ uint8_t Printer::moveToReal(float x, float y, float z, float e, float f,bool pat
z = currentPosition[Z_AXIS]; z = currentPosition[Z_AXIS];
else else
currentPosition[Z_AXIS] = z; currentPosition[Z_AXIS] = z;
#if FEATURE_AUTOLEVEL transformToPrinter(x + Printer::offsetX, y + Printer::offsetY, z + Printer::offsetZ, x, y, z);
if(isAutolevelActive())
transformToPrinter(x + Printer::offsetX, y + Printer::offsetY, z + Printer::offsetZ, x, y, z);
else
#endif // FEATURE_AUTOLEVEL
{
x += Printer::offsetX;
y += Printer::offsetY;
z += Printer::offsetZ;
}
// There was conflicting use of IGNOR_COORDINATE // There was conflicting use of IGNOR_COORDINATE
destinationSteps[X_AXIS] = static_cast<int32_t>(floor(x * axisStepsPerMM[X_AXIS] + 0.5f)); destinationSteps[X_AXIS] = static_cast<int32_t>(floor(x * axisStepsPerMM[X_AXIS] + 0.5f));
destinationSteps[Y_AXIS] = static_cast<int32_t>(floor(y * axisStepsPerMM[Y_AXIS] + 0.5f)); destinationSteps[Y_AXIS] = static_cast<int32_t>(floor(y * axisStepsPerMM[Y_AXIS] + 0.5f));
@ -622,7 +634,7 @@ uint8_t Printer::moveToReal(float x, float y, float z, float e, float f,bool pat
feedrate = f; feedrate = f;
#if NONLINEAR_SYSTEM #if NONLINEAR_SYSTEM
if (!PrintLine::queueDeltaMove(ALWAYS_CHECK_ENDSTOPS, pathOptimize, true)) if (!PrintLine::queueNonlinearMove(ALWAYS_CHECK_ENDSTOPS, pathOptimize, true))
{ {
Com::printWarningFLN(PSTR("moveToReal / queueDeltaMove returns error")); Com::printWarningFLN(PSTR("moveToReal / queueDeltaMove returns error"));
SHOWM(x); SHOWM(x);
@ -653,11 +665,8 @@ void Printer::updateCurrentPosition(bool copyLastCmd)
#else #else
currentPosition[Z_AXIS] = static_cast<float>(currentPositionSteps[Z_AXIS] - zCorrectionStepsIncluded) * invAxisStepsPerMM[Z_AXIS]; currentPosition[Z_AXIS] = static_cast<float>(currentPositionSteps[Z_AXIS] - zCorrectionStepsIncluded) * invAxisStepsPerMM[Z_AXIS];
#endif #endif
#if FEATURE_AUTOLEVEL transformFromPrinter(currentPosition[X_AXIS], currentPosition[Y_AXIS], currentPosition[Z_AXIS],
if(isAutolevelActive()) currentPosition[X_AXIS], currentPosition[Y_AXIS], currentPosition[Z_AXIS]);
transformFromPrinter(currentPosition[X_AXIS], currentPosition[Y_AXIS], currentPosition[Z_AXIS],
currentPosition[X_AXIS], currentPosition[Y_AXIS], currentPosition[Z_AXIS]);
#endif // FEATURE_AUTOLEVEL
currentPosition[X_AXIS] -= Printer::offsetX; currentPosition[X_AXIS] -= Printer::offsetX;
currentPosition[Y_AXIS] -= Printer::offsetY; currentPosition[Y_AXIS] -= Printer::offsetY;
currentPosition[Z_AXIS] -= Printer::offsetZ; currentPosition[Z_AXIS] -= Printer::offsetZ;
@ -674,7 +683,7 @@ void Printer::updateCurrentPosition(bool copyLastCmd)
For the computation of the destination, the following facts are considered: For the computation of the destination, the following facts are considered:
- Are units inches or mm. - Are units inches or mm.
- Reltive or absolute positioning with special case only extruder relative. - Relative or absolute positioning with special case only extruder relative.
- Offset in x and y direction for multiple extruder support. - Offset in x and y direction for multiple extruder support.
*/ */
@ -683,7 +692,7 @@ uint8_t Printer::setDestinationStepsFromGCode(GCode *com)
register int32_t p; register int32_t p;
float x, y, z; float x, y, z;
#if FEATURE_RETRACTION #if FEATURE_RETRACTION
if(com->hasNoXYZ() && com->hasE() && isAutoretract()) { // convert into autoretract if(com->hasNoXYZ() && com->hasE() && isAutoretract()) { // convert into auto retract
if(relativeCoordinateMode || relativeExtruderCoordinateMode) { if(relativeCoordinateMode || relativeExtruderCoordinateMode) {
Extruder::current->retract(com->E < 0,false); Extruder::current->retract(com->E < 0,false);
} else { } else {
@ -705,18 +714,7 @@ uint8_t Printer::setDestinationStepsFromGCode(GCode *com)
if(com->hasY()) currentPosition[Y_AXIS] = (lastCmdPos[Y_AXIS] += convertToMM(com->Y)); if(com->hasY()) currentPosition[Y_AXIS] = (lastCmdPos[Y_AXIS] += convertToMM(com->Y));
if(com->hasZ()) currentPosition[Z_AXIS] = (lastCmdPos[Z_AXIS] += convertToMM(com->Z)); if(com->hasZ()) currentPosition[Z_AXIS] = (lastCmdPos[Z_AXIS] += convertToMM(com->Z));
} }
#if FEATURE_AUTOLEVEL transformToPrinter(lastCmdPos[X_AXIS] + Printer::offsetX, lastCmdPos[Y_AXIS] + Printer::offsetY, lastCmdPos[Z_AXIS] + Printer::offsetZ, x, y, z);
if(isAutolevelActive())
{
transformToPrinter(lastCmdPos[X_AXIS] + Printer::offsetX, lastCmdPos[Y_AXIS] + Printer::offsetY, lastCmdPos[Z_AXIS] + Printer::offsetZ, x, y, z);
}
else
#endif // FEATURE_AUTOLEVEL
{
x = lastCmdPos[X_AXIS] + Printer::offsetX;
y = lastCmdPos[Y_AXIS] + Printer::offsetY;
z = lastCmdPos[Z_AXIS] + Printer::offsetZ;
}
destinationSteps[X_AXIS] = static_cast<int32_t>(floor(x * axisStepsPerMM[X_AXIS] + 0.5f)); destinationSteps[X_AXIS] = static_cast<int32_t>(floor(x * axisStepsPerMM[X_AXIS] + 0.5f));
destinationSteps[Y_AXIS] = static_cast<int32_t>(floor(y * axisStepsPerMM[Y_AXIS] + 0.5f)); destinationSteps[Y_AXIS] = static_cast<int32_t>(floor(y * axisStepsPerMM[Y_AXIS] + 0.5f));
destinationSteps[Z_AXIS] = static_cast<int32_t>(floor(z * axisStepsPerMM[Z_AXIS] + 0.5f)); destinationSteps[Z_AXIS] = static_cast<int32_t>(floor(z * axisStepsPerMM[Z_AXIS] + 0.5f));
@ -831,7 +829,7 @@ void Printer::setup()
SET_OUTPUT(X_STEP_PIN); SET_OUTPUT(X_STEP_PIN);
SET_OUTPUT(Y_STEP_PIN); SET_OUTPUT(Y_STEP_PIN);
SET_OUTPUT(Z_STEP_PIN); SET_OUTPUT(Z_STEP_PIN);
endXYZSteps();
//Initialize Dir Pins //Initialize Dir Pins
#if X_DIR_PIN > -1 #if X_DIR_PIN > -1
SET_OUTPUT(X_DIR_PIN); SET_OUTPUT(X_DIR_PIN);
@ -856,7 +854,7 @@ void Printer::setup()
SET_OUTPUT(Z_ENABLE_PIN); SET_OUTPUT(Z_ENABLE_PIN);
WRITE(Z_ENABLE_PIN, !Z_ENABLE_ON); WRITE(Z_ENABLE_PIN, !Z_ENABLE_ON);
#endif #endif
#if FEATURE_TWO_XSTEPPER #if FEATURE_TWO_XSTEPPER || DUAL_X_AXIS
SET_OUTPUT(X2_STEP_PIN); SET_OUTPUT(X2_STEP_PIN);
SET_OUTPUT(X2_DIR_PIN); SET_OUTPUT(X2_DIR_PIN);
#if X2_ENABLE_PIN > -1 #if X2_ENABLE_PIN > -1
@ -1063,7 +1061,7 @@ void Printer::setup()
CNCDriver::initialize(); CNCDriver::initialize();
#endif // defined #endif // defined
#if GANTRY #if GANTRY && !defined(FAST_COREXYZ)
Printer::motorX = 0; Printer::motorX = 0;
Printer::motorYorZ = 0; Printer::motorYorZ = 0;
#endif #endif
@ -1110,7 +1108,7 @@ void Printer::setup()
xMin = X_MIN_POS; xMin = X_MIN_POS;
yMin = Y_MIN_POS; yMin = Y_MIN_POS;
zMin = Z_MIN_POS; zMin = Z_MIN_POS;
#if NONLINEAR_SYSTEM #if DRIVE_SYSTEM == DELTA
radius0 = ROD_RADIUS; radius0 = ROD_RADIUS;
#endif #endif
#if ENABLE_BACKLASH_COMPENSATION #if ENABLE_BACKLASH_COMPENSATION
@ -1147,7 +1145,7 @@ void Printer::setup()
HAL::setupTimer(); HAL::setupTimer();
#if NONLINEAR_SYSTEM #if NONLINEAR_SYSTEM
transformCartesianStepsToDeltaSteps(Printer::currentPositionSteps, Printer::currentDeltaPositionSteps); transformCartesianStepsToDeltaSteps(Printer::currentPositionSteps, Printer::currentNonlinearPositionSteps);
#if DELTA_HOME_ON_POWER #if DELTA_HOME_ON_POWER
homeAxis(true,true,true); homeAxis(true,true,true);
@ -1242,7 +1240,7 @@ void Printer::deltaMoveToTopEndstops(float feedrate)
Printer::stepsRemainingAtYHit = -1; Printer::stepsRemainingAtYHit = -1;
Printer::stepsRemainingAtZHit = -1; Printer::stepsRemainingAtZHit = -1;
setHoming(true); setHoming(true);
transformCartesianStepsToDeltaSteps(currentPositionSteps, currentDeltaPositionSteps); transformCartesianStepsToDeltaSteps(currentPositionSteps, currentNonlinearPositionSteps);
PrintLine::moveRelativeDistanceInSteps(0, 0, (zMaxSteps + EEPROM::deltaDiagonalRodLength()*axisStepsPerMM[Z_AXIS]) * 1.5, 0, feedrate, true, true); PrintLine::moveRelativeDistanceInSteps(0, 0, (zMaxSteps + EEPROM::deltaDiagonalRodLength()*axisStepsPerMM[Z_AXIS]) * 1.5, 0, feedrate, true, true);
offsetX = offsetY = offsetZ = 0; offsetX = offsetY = offsetZ = 0;
setHoming(false); setHoming(false);
@ -1250,7 +1248,7 @@ void Printer::deltaMoveToTopEndstops(float feedrate)
void Printer::homeXAxis() void Printer::homeXAxis()
{ {
destinationSteps[X_AXIS] = 0; destinationSteps[X_AXIS] = 0;
if (!PrintLine::queueDeltaMove(true,false,false)) if (!PrintLine::queueNonlinearMove(true,false,false))
{ {
Com::printWarningFLN(PSTR("homeXAxis / queueDeltaMove returns error")); Com::printWarningFLN(PSTR("homeXAxis / queueDeltaMove returns error"));
} }
@ -1258,7 +1256,7 @@ void Printer::homeXAxis()
void Printer::homeYAxis() void Printer::homeYAxis()
{ {
Printer::destinationSteps[Y_AXIS] = 0; Printer::destinationSteps[Y_AXIS] = 0;
if (!PrintLine::queueDeltaMove(true,false,false)) if (!PrintLine::queueNonlinearMove(true,false,false))
{ {
Com::printWarningFLN(PSTR("homeYAxis / queueDeltaMove returns error")); Com::printWarningFLN(PSTR("homeYAxis / queueDeltaMove returns error"));
} }
@ -1270,13 +1268,13 @@ void Printer::homeZAxis() // Delta z homing
deltaMoveToTopEndstops(Printer::homingFeedrate[Z_AXIS]); deltaMoveToTopEndstops(Printer::homingFeedrate[Z_AXIS]);
// New safe homing routine by Kyrre Aalerud // New safe homing routine by Kyrre Aalerud
// This method will safeguard against sticky endstops such as may be gotten cheaply from china. // This method will safeguard against sticky endstops such as may be gotten cheaply from china.
// This can lead to headcrashes and even fire, thus a safer algorithm to ensure the endstops actually respond as expected. // This can lead to head crashes and even fire, thus a safer algorithm to ensure the endstops actually respond as expected.
//Endstops::report(); //Endstops::report();
// Check that all endstops (XYZ) were hit // Check that all endstops (XYZ) were hit
Endstops::fillFromAccumulator(); Endstops::fillFromAccumulator();
if (Endstops::xMax() && Endstops::yMax() && Endstops::zMax()) { if (Endstops::xMax() && Endstops::yMax() && Endstops::zMax()) {
// Back off for retest // Back off for retest
PrintLine::moveRelativeDistanceInSteps(0, 0, axisStepsPerMM[Z_AXIS] * -ENDSTOP_Z_BACK_MOVE, 0, Printer::homingFeedrate[Z_AXIS]/ENDSTOP_X_RETEST_REDUCTION_FACTOR, true, true); PrintLine::moveRelativeDistanceInSteps(0, 0, axisStepsPerMM[Z_AXIS] * -ENDSTOP_Z_BACK_MOVE, 0, Printer::homingFeedrate[Z_AXIS] / ENDSTOP_X_RETEST_REDUCTION_FACTOR, true, true);
//Endstops::report(); //Endstops::report();
// Check for proper release of all (XYZ) endstops // Check for proper release of all (XYZ) endstops
if (!(Endstops::xMax() || Endstops::yMax() || Endstops::zMax())) { if (!(Endstops::xMax() || Endstops::yMax() || Endstops::zMax())) {
@ -1323,10 +1321,10 @@ void Printer::homeZAxis() // Delta z homing
currentPositionSteps[X_AXIS] = 0; // here we should be currentPositionSteps[X_AXIS] = 0; // here we should be
currentPositionSteps[Y_AXIS] = 0; currentPositionSteps[Y_AXIS] = 0;
currentPositionSteps[Z_AXIS] = zMaxSteps; currentPositionSteps[Z_AXIS] = zMaxSteps;
transformCartesianStepsToDeltaSteps(currentPositionSteps,currentDeltaPositionSteps); transformCartesianStepsToDeltaSteps(currentPositionSteps,currentNonlinearPositionSteps);
currentDeltaPositionSteps[A_TOWER] -= dx; currentNonlinearPositionSteps[A_TOWER] -= dx;
currentDeltaPositionSteps[B_TOWER] -= dy; currentNonlinearPositionSteps[B_TOWER] -= dy;
currentDeltaPositionSteps[C_TOWER] -= dz; currentNonlinearPositionSteps[C_TOWER] -= dz;
PrintLine::moveRelativeDistanceInSteps(0, 0, dm, 0, homingFeedrate[Z_AXIS], true, false); PrintLine::moveRelativeDistanceInSteps(0, 0, dm, 0, homingFeedrate[Z_AXIS], true, false);
currentPositionSteps[X_AXIS] = 0; // now we are really here currentPositionSteps[X_AXIS] = 0; // now we are really here
currentPositionSteps[Y_AXIS] = 0; currentPositionSteps[Y_AXIS] = 0;
@ -1334,10 +1332,10 @@ void Printer::homeZAxis() // Delta z homing
coordinateOffset[X_AXIS] = 0; coordinateOffset[X_AXIS] = 0;
coordinateOffset[Y_AXIS] = 0; coordinateOffset[Y_AXIS] = 0;
coordinateOffset[Z_AXIS] = 0; coordinateOffset[Z_AXIS] = 0;
transformCartesianStepsToDeltaSteps(currentPositionSteps, currentDeltaPositionSteps); transformCartesianStepsToDeltaSteps(currentPositionSteps, currentNonlinearPositionSteps);
realDeltaPositionSteps[A_TOWER] = currentDeltaPositionSteps[A_TOWER]; realDeltaPositionSteps[A_TOWER] = currentNonlinearPositionSteps[A_TOWER];
realDeltaPositionSteps[B_TOWER] = currentDeltaPositionSteps[B_TOWER]; realDeltaPositionSteps[B_TOWER] = currentNonlinearPositionSteps[B_TOWER];
realDeltaPositionSteps[C_TOWER] = currentDeltaPositionSteps[C_TOWER]; realDeltaPositionSteps[C_TOWER] = currentNonlinearPositionSteps[C_TOWER];
//maxDeltaPositionSteps = currentDeltaPositionSteps[X_AXIS]; //maxDeltaPositionSteps = currentDeltaPositionSteps[X_AXIS];
#if defined(ENDSTOP_Z_BACK_ON_HOME) #if defined(ENDSTOP_Z_BACK_ON_HOME)
if(ENDSTOP_Z_BACK_ON_HOME > 0) if(ENDSTOP_Z_BACK_ON_HOME > 0)
@ -1354,7 +1352,7 @@ void Printer::homeAxis(bool xaxis,bool yaxis,bool zaxis) // Delta homing code
if (!(X_MAX_PIN > -1 && Y_MAX_PIN > -1 && Z_MAX_PIN > -1 if (!(X_MAX_PIN > -1 && Y_MAX_PIN > -1 && Z_MAX_PIN > -1
&& MAX_HARDWARE_ENDSTOP_X && MAX_HARDWARE_ENDSTOP_Y && MAX_HARDWARE_ENDSTOP_Z)) && MAX_HARDWARE_ENDSTOP_X && MAX_HARDWARE_ENDSTOP_Y && MAX_HARDWARE_ENDSTOP_Z))
{ {
Com::printErrorFLN(PSTR("Hardware setup inconsistent. Delta cannot home wihtout max endstops.")); Com::printErrorFLN(PSTR("Hardware setup inconsistent. Delta cannot home without max endstops."));
} }
// The delta has to have home capability to zero and set position, // The delta has to have home capability to zero and set position,
// so the redundant check is only an opportunity to // so the redundant check is only an opportunity to
@ -1396,7 +1394,7 @@ void Printer::homeXAxis()
currentPositionSteps[X_AXIS] = -steps; currentPositionSteps[X_AXIS] = -steps;
currentPositionSteps[Y_AXIS] = 0; currentPositionSteps[Y_AXIS] = 0;
setHoming(true); setHoming(true);
transformCartesianStepsToDeltaSteps(currentPositionSteps, currentDeltaPositionSteps); transformCartesianStepsToDeltaSteps(currentPositionSteps, currentNonlinearPositionSteps);
PrintLine::moveRelativeDistanceInSteps(2*steps,0,0,0,homingFeedrate[X_AXIS],true,true); PrintLine::moveRelativeDistanceInSteps(2*steps,0,0,0,homingFeedrate[X_AXIS],true,true);
currentPositionSteps[X_AXIS] = (X_HOME_DIR == -1) ? xMinSteps-offX : xMaxSteps+offX; currentPositionSteps[X_AXIS] = (X_HOME_DIR == -1) ? xMinSteps-offX : xMaxSteps+offX;
currentPositionSteps[Y_AXIS] = 0; //(Y_HOME_DIR == -1) ? yMinSteps-offY : yMaxSteps+offY; currentPositionSteps[Y_AXIS] = 0; //(Y_HOME_DIR == -1) ? yMinSteps-offY : yMaxSteps+offY;
@ -1414,7 +1412,7 @@ void Printer::homeXAxis()
currentPositionSteps[Y_AXIS] = 0; //(Y_HOME_DIR == -1) ? yMinSteps-offY : yMaxSteps+offY; currentPositionSteps[Y_AXIS] = 0; //(Y_HOME_DIR == -1) ? yMinSteps-offY : yMaxSteps+offY;
coordinateOffset[X_AXIS] = 0; coordinateOffset[X_AXIS] = 0;
coordinateOffset[Y_AXIS] = 0; coordinateOffset[Y_AXIS] = 0;
transformCartesianStepsToDeltaSteps(currentPositionSteps, currentDeltaPositionSteps); transformCartesianStepsToDeltaSteps(currentPositionSteps, currentNonlinearPositionSteps);
#if NUM_EXTRUDER>1 #if NUM_EXTRUDER>1
PrintLine::moveRelativeDistanceInSteps((Extruder::current->xOffset-offX) * X_HOME_DIR,(Extruder::current->yOffset-offY) * Y_HOME_DIR,0,0,homingFeedrate[X_AXIS],true,false); PrintLine::moveRelativeDistanceInSteps((Extruder::current->xOffset-offX) * X_HOME_DIR,(Extruder::current->yOffset-offY) * Y_HOME_DIR,0,0,homingFeedrate[X_AXIS],true,false);
#endif #endif
@ -1424,12 +1422,48 @@ void Printer::homeYAxis()
{ {
// Dummy function x and y homing must occur together // Dummy function x and y homing must occur together
} }
#else // cartesian printer #else // Cartesian printer
void Printer::homeXAxis() void Printer::homeXAxis()
{ {
long steps; long steps;
UI_STATUS_UPD_F(Com::translatedF(UI_TEXT_HOME_X_ID));
Commands::waitUntilEndOfAllMoves();
setHoming(true);
#if DUAL_X_AXIS && NUM_EXTRUDER == 2
Extruder *curExtruder = Extruder::current;
Extruder::current = &extruder[0];
steps = (Printer::xMaxSteps - Printer::xMinSteps);
currentPositionSteps[X_AXIS] = steps;
PrintLine::moveRelativeDistanceInSteps(-2 * steps, 0, 0, 0, homingFeedrate[X_AXIS], true, true);
setHoming(false);
PrintLine::moveRelativeDistanceInSteps(axisStepsPerMM[X_AXIS] * ENDSTOP_X_BACK_MOVE,0,0,0,homingFeedrate[X_AXIS] / ENDSTOP_X_RETEST_REDUCTION_FACTOR, true, false);
setHoming(true);
PrintLine::moveRelativeDistanceInSteps(-axisStepsPerMM[X_AXIS] * 2 * ENDSTOP_X_BACK_MOVE,0,0,0,homingFeedrate[X_AXIS] / ENDSTOP_X_RETEST_REDUCTION_FACTOR, true, true);
setHoming(false);
#if defined(ENDSTOP_X_BACK_ON_HOME)
if(ENDSTOP_X_BACK_ON_HOME > 0)
PrintLine::moveRelativeDistanceInSteps(axisStepsPerMM[X_AXIS] * ENDSTOP_X_BACK_ON_HOME,0,0,0,homingFeedrate[X_AXIS], true, false);
#endif
Extruder::current = &extruder[1];
currentPositionSteps[X_AXIS] = -steps;
PrintLine::moveRelativeDistanceInSteps(2 * steps, 0, 0, 0, homingFeedrate[X_AXIS], true, true);
setHoming(false);
PrintLine::moveRelativeDistanceInSteps(-axisStepsPerMM[X_AXIS] * ENDSTOP_X_BACK_MOVE,0,0,0,homingFeedrate[X_AXIS] / ENDSTOP_X_RETEST_REDUCTION_FACTOR, true, false);
setHoming(true);
PrintLine::moveRelativeDistanceInSteps(axisStepsPerMM[X_AXIS] * 2 * ENDSTOP_X_BACK_MOVE,0,0,0,homingFeedrate[X_AXIS] / ENDSTOP_X_RETEST_REDUCTION_FACTOR, true, true);
setHoming(false);
#if defined(ENDSTOP_X_BACK_ON_HOME)
if(ENDSTOP_X_BACK_ON_HOME > 0)
PrintLine::moveRelativeDistanceInSteps(-axisStepsPerMM[X_AXIS] * ENDSTOP_X_BACK_ON_HOME,0,0,0,homingFeedrate[X_AXIS], true, false);
#endif
Extruder::current = curExtruder;
// Now position current extrude on x = 0
PrintLine::moveRelativeDistanceInSteps(-Extruder::current->xOffset, 0, 0, 0, homingFeedrate[X_AXIS], true, true);
currentPositionSteps[X_AXIS] = xMinSteps;
#else
if ((MIN_HARDWARE_ENDSTOP_X && X_MIN_PIN > -1 && X_HOME_DIR == -1) || (MAX_HARDWARE_ENDSTOP_X && X_MAX_PIN > -1 && X_HOME_DIR == 1)) if ((MIN_HARDWARE_ENDSTOP_X && X_MIN_PIN > -1 && X_HOME_DIR == -1) || (MAX_HARDWARE_ENDSTOP_X && X_MAX_PIN > -1 && X_HOME_DIR == 1))
{ {
coordinateOffset[X_AXIS] = 0;
long offX = 0; long offX = 0;
#if NUM_EXTRUDER > 1 #if NUM_EXTRUDER > 1
for(uint8_t i = 0; i < NUM_EXTRUDER; i++) for(uint8_t i = 0; i < NUM_EXTRUDER; i++)
@ -1438,14 +1472,18 @@ void Printer::homeXAxis()
#else #else
offX = RMath::min(offX,extruder[i].xOffset); offX = RMath::min(offX,extruder[i].xOffset);
#endif #endif
// Reposition extruder that way, that all extruders can be selected at home pos. // Reposition extruder that way, that all extruders can be selected at home position.
#endif // NUM_EXTRUDER > 1 #endif // NUM_EXTRUDER > 1
UI_STATUS_UPD_F(Com::translatedF(UI_TEXT_HOME_X_ID));
steps = (Printer::xMaxSteps - Printer::xMinSteps) * X_HOME_DIR; steps = (Printer::xMaxSteps - Printer::xMinSteps) * X_HOME_DIR;
currentPositionSteps[X_AXIS] = -steps; currentPositionSteps[X_AXIS] = -steps;
setHoming(true); #if NONLINEAR_SYSTEM
transformCartesianStepsToDeltaSteps(currentPositionSteps, currentNonlinearPositionSteps);
#endif
PrintLine::moveRelativeDistanceInSteps(2 * steps, 0, 0, 0, homingFeedrate[X_AXIS], true, true); PrintLine::moveRelativeDistanceInSteps(2 * steps, 0, 0, 0, homingFeedrate[X_AXIS], true, true);
currentPositionSteps[X_AXIS] = (X_HOME_DIR == -1) ? xMinSteps - offX : xMaxSteps + offX; currentPositionSteps[X_AXIS] = (X_HOME_DIR == -1) ? xMinSteps - offX : xMaxSteps + offX;
#if NONLINEAR_SYSTEM
transformCartesianStepsToDeltaSteps(currentPositionSteps, currentNonlinearPositionSteps);
#endif
PrintLine::moveRelativeDistanceInSteps(axisStepsPerMM[X_AXIS] * -ENDSTOP_X_BACK_MOVE * X_HOME_DIR,0,0,0,homingFeedrate[X_AXIS] / ENDSTOP_X_RETEST_REDUCTION_FACTOR, true, false); PrintLine::moveRelativeDistanceInSteps(axisStepsPerMM[X_AXIS] * -ENDSTOP_X_BACK_MOVE * X_HOME_DIR,0,0,0,homingFeedrate[X_AXIS] / ENDSTOP_X_RETEST_REDUCTION_FACTOR, true, false);
PrintLine::moveRelativeDistanceInSteps(axisStepsPerMM[X_AXIS] * 2 * ENDSTOP_X_BACK_MOVE * X_HOME_DIR,0,0,0,homingFeedrate[X_AXIS] / ENDSTOP_X_RETEST_REDUCTION_FACTOR, true, true); PrintLine::moveRelativeDistanceInSteps(axisStepsPerMM[X_AXIS] * 2 * ENDSTOP_X_BACK_MOVE * X_HOME_DIR,0,0,0,homingFeedrate[X_AXIS] / ENDSTOP_X_RETEST_REDUCTION_FACTOR, true, true);
setHoming(false); setHoming(false);
@ -1454,6 +1492,9 @@ void Printer::homeXAxis()
PrintLine::moveRelativeDistanceInSteps(axisStepsPerMM[X_AXIS] * -ENDSTOP_X_BACK_ON_HOME * X_HOME_DIR,0,0,0,homingFeedrate[X_AXIS], true, true); PrintLine::moveRelativeDistanceInSteps(axisStepsPerMM[X_AXIS] * -ENDSTOP_X_BACK_ON_HOME * X_HOME_DIR,0,0,0,homingFeedrate[X_AXIS], true, true);
#endif #endif
currentPositionSteps[X_AXIS] = (X_HOME_DIR == -1) ? xMinSteps - offX : xMaxSteps + offX; currentPositionSteps[X_AXIS] = (X_HOME_DIR == -1) ? xMinSteps - offX : xMaxSteps + offX;
#if NONLINEAR_SYSTEM
transformCartesianStepsToDeltaSteps(currentPositionSteps, currentNonlinearPositionSteps);
#endif
#if NUM_EXTRUDER > 1 #if NUM_EXTRUDER > 1
#if X_HOME_DIR < 0 #if X_HOME_DIR < 0
PrintLine::moveRelativeDistanceInSteps((Extruder::current->xOffset - offX) * X_HOME_DIR,0,0,0,homingFeedrate[X_AXIS], true, true); PrintLine::moveRelativeDistanceInSteps((Extruder::current->xOffset - offX) * X_HOME_DIR,0,0,0,homingFeedrate[X_AXIS], true, true);
@ -1462,6 +1503,7 @@ void Printer::homeXAxis()
#endif #endif
#endif #endif
} }
#endif
} }
void Printer::homeYAxis() void Printer::homeYAxis()
@ -1469,6 +1511,7 @@ void Printer::homeYAxis()
long steps; long steps;
if ((MIN_HARDWARE_ENDSTOP_Y && Y_MIN_PIN > -1 && Y_HOME_DIR == -1) || (MAX_HARDWARE_ENDSTOP_Y && Y_MAX_PIN > -1 && Y_HOME_DIR == 1)) if ((MIN_HARDWARE_ENDSTOP_Y && Y_MIN_PIN > -1 && Y_HOME_DIR == -1) || (MAX_HARDWARE_ENDSTOP_Y && Y_MAX_PIN > -1 && Y_HOME_DIR == 1))
{ {
coordinateOffset[Y_AXIS] = 0;
long offY = 0; long offY = 0;
#if NUM_EXTRUDER > 1 #if NUM_EXTRUDER > 1
for(uint8_t i = 0; i < NUM_EXTRUDER; i++) for(uint8_t i = 0; i < NUM_EXTRUDER; i++)
@ -1483,8 +1526,14 @@ void Printer::homeYAxis()
steps = (yMaxSteps-Printer::yMinSteps) * Y_HOME_DIR; steps = (yMaxSteps-Printer::yMinSteps) * Y_HOME_DIR;
currentPositionSteps[Y_AXIS] = -steps; currentPositionSteps[Y_AXIS] = -steps;
setHoming(true); setHoming(true);
#if NONLINEAR_SYSTEM
transformCartesianStepsToDeltaSteps(currentPositionSteps, currentNonlinearPositionSteps);
#endif
PrintLine::moveRelativeDistanceInSteps(0,2 * steps,0,0,homingFeedrate[Y_AXIS],true,true); PrintLine::moveRelativeDistanceInSteps(0,2 * steps,0,0,homingFeedrate[Y_AXIS],true,true);
currentPositionSteps[Y_AXIS] = (Y_HOME_DIR == -1) ? yMinSteps-offY : yMaxSteps+offY; currentPositionSteps[Y_AXIS] = (Y_HOME_DIR == -1) ? yMinSteps-offY : yMaxSteps+offY;
#if NONLINEAR_SYSTEM
transformCartesianStepsToDeltaSteps(currentPositionSteps, currentNonlinearPositionSteps);
#endif
PrintLine::moveRelativeDistanceInSteps(0,axisStepsPerMM[Y_AXIS] * -ENDSTOP_Y_BACK_MOVE * Y_HOME_DIR,0,0,homingFeedrate[Y_AXIS] / ENDSTOP_X_RETEST_REDUCTION_FACTOR,true,false); PrintLine::moveRelativeDistanceInSteps(0,axisStepsPerMM[Y_AXIS] * -ENDSTOP_Y_BACK_MOVE * Y_HOME_DIR,0,0,homingFeedrate[Y_AXIS] / ENDSTOP_X_RETEST_REDUCTION_FACTOR,true,false);
PrintLine::moveRelativeDistanceInSteps(0,axisStepsPerMM[Y_AXIS] * 2 * ENDSTOP_Y_BACK_MOVE * Y_HOME_DIR,0,0,homingFeedrate[Y_AXIS] / ENDSTOP_X_RETEST_REDUCTION_FACTOR,true,true); PrintLine::moveRelativeDistanceInSteps(0,axisStepsPerMM[Y_AXIS] * 2 * ENDSTOP_Y_BACK_MOVE * Y_HOME_DIR,0,0,homingFeedrate[Y_AXIS] / ENDSTOP_X_RETEST_REDUCTION_FACTOR,true,true);
setHoming(false); setHoming(false);
@ -1493,6 +1542,9 @@ void Printer::homeYAxis()
PrintLine::moveRelativeDistanceInSteps(0,axisStepsPerMM[Y_AXIS] * -ENDSTOP_Y_BACK_ON_HOME * Y_HOME_DIR,0,0,homingFeedrate[Y_AXIS],true,false); PrintLine::moveRelativeDistanceInSteps(0,axisStepsPerMM[Y_AXIS] * -ENDSTOP_Y_BACK_ON_HOME * Y_HOME_DIR,0,0,homingFeedrate[Y_AXIS],true,false);
#endif #endif
currentPositionSteps[Y_AXIS] = (Y_HOME_DIR == -1) ? yMinSteps - offY : yMaxSteps + offY; currentPositionSteps[Y_AXIS] = (Y_HOME_DIR == -1) ? yMinSteps - offY : yMaxSteps + offY;
#if NONLINEAR_SYSTEM
transformCartesianStepsToDeltaSteps(currentPositionSteps, currentNonlinearPositionSteps);
#endif
#if NUM_EXTRUDER > 1 #if NUM_EXTRUDER > 1
#if Y_HOME_DIR < 0 #if Y_HOME_DIR < 0
PrintLine::moveRelativeDistanceInSteps(0,(Extruder::current->yOffset - offY) * Y_HOME_DIR,0,0,homingFeedrate[Y_AXIS],true,false); PrintLine::moveRelativeDistanceInSteps(0,(Extruder::current->yOffset - offY) * Y_HOME_DIR,0,0,homingFeedrate[Y_AXIS],true,false);
@ -1504,17 +1556,24 @@ void Printer::homeYAxis()
} }
#endif #endif
void Printer::homeZAxis() // cartesian homing void Printer::homeZAxis() // Cartesian homing
{ {
long steps; long steps;
if ((MIN_HARDWARE_ENDSTOP_Z && Z_MIN_PIN > -1 && Z_HOME_DIR == -1) || (MAX_HARDWARE_ENDSTOP_Z && Z_MAX_PIN > -1 && Z_HOME_DIR == 1)) if ((MIN_HARDWARE_ENDSTOP_Z && Z_MIN_PIN > -1 && Z_HOME_DIR == -1) || (MAX_HARDWARE_ENDSTOP_Z && Z_MAX_PIN > -1 && Z_HOME_DIR == 1))
{ {
coordinateOffset[Z_AXIS] = 0;
UI_STATUS_UPD_F(Com::translatedF(UI_TEXT_HOME_Z_ID)); UI_STATUS_UPD_F(Com::translatedF(UI_TEXT_HOME_Z_ID));
steps = (zMaxSteps - zMinSteps) * Z_HOME_DIR; steps = (zMaxSteps - zMinSteps) * Z_HOME_DIR;
currentPositionSteps[Z_AXIS] = -steps; currentPositionSteps[Z_AXIS] = -steps;
setHoming(true); setHoming(true);
#if NONLINEAR_SYSTEM
transformCartesianStepsToDeltaSteps(currentPositionSteps, currentNonlinearPositionSteps);
#endif
PrintLine::moveRelativeDistanceInSteps(0,0,2 * steps,0,homingFeedrate[Z_AXIS],true,true); PrintLine::moveRelativeDistanceInSteps(0,0,2 * steps,0,homingFeedrate[Z_AXIS],true,true);
currentPositionSteps[Z_AXIS] = (Z_HOME_DIR == -1) ? zMinSteps : zMaxSteps; currentPositionSteps[Z_AXIS] = (Z_HOME_DIR == -1) ? zMinSteps : zMaxSteps;
#if NONLINEAR_SYSTEM
transformCartesianStepsToDeltaSteps(currentPositionSteps, currentNonlinearPositionSteps);
#endif
PrintLine::moveRelativeDistanceInSteps(0,0,axisStepsPerMM[Z_AXIS] * -ENDSTOP_Z_BACK_MOVE * Z_HOME_DIR,0,homingFeedrate[Z_AXIS] / ENDSTOP_Z_RETEST_REDUCTION_FACTOR,true,false); PrintLine::moveRelativeDistanceInSteps(0,0,axisStepsPerMM[Z_AXIS] * -ENDSTOP_Z_BACK_MOVE * Z_HOME_DIR,0,homingFeedrate[Z_AXIS] / ENDSTOP_Z_RETEST_REDUCTION_FACTOR,true,false);
#if defined(ZHOME_WAIT_UNSWING) && ZHOME_WAIT_UNSWING > 0 #if defined(ZHOME_WAIT_UNSWING) && ZHOME_WAIT_UNSWING > 0
HAL::delayMilliseconds(ZHOME_WAIT_UNSWING); HAL::delayMilliseconds(ZHOME_WAIT_UNSWING);
@ -1522,26 +1581,28 @@ void Printer::homeZAxis() // cartesian homing
PrintLine::moveRelativeDistanceInSteps(0,0,axisStepsPerMM[Z_AXIS] * 2 * ENDSTOP_Z_BACK_MOVE * Z_HOME_DIR,0,homingFeedrate[Z_AXIS] / ENDSTOP_Z_RETEST_REDUCTION_FACTOR,true,true); PrintLine::moveRelativeDistanceInSteps(0,0,axisStepsPerMM[Z_AXIS] * 2 * ENDSTOP_Z_BACK_MOVE * Z_HOME_DIR,0,homingFeedrate[Z_AXIS] / ENDSTOP_Z_RETEST_REDUCTION_FACTOR,true,true);
setHoming(false); setHoming(false);
int32_t zCorrection = 0; int32_t zCorrection = 0;
#if MIN_HARDWARE_ENDSTOP_Z && FEATURE_Z_PROBE && Z_PROBE_PIN==Z_MIN_PIN #if Z_HOME_DIR < 0 && MIN_HARDWARE_ENDSTOP_Z && FEATURE_Z_PROBE && Z_PROBE_PIN == Z_MIN_PIN
// Fix error from z probe testing // Fix error from z probe testing
zCorrection -= axisStepsPerMM[Z_AXIS]*EEPROM::zProbeHeight(); zCorrection -= axisStepsPerMM[Z_AXIS]*EEPROM::zProbeHeight();
#endif #endif
#if defined(ENDSTOP_Z_BACK_ON_HOME) #if defined(ENDSTOP_Z_BACK_ON_HOME)
// If we want to go up a bit more for some reason // If we want to go up a bit more for some reason
if(ENDSTOP_Z_BACK_ON_HOME > 0) if(ENDSTOP_Z_BACK_ON_HOME > 0)
zCorrection -= axisStepsPerMM[Z_AXIS]*ENDSTOP_Z_BACK_ON_HOME * Z_HOME_DIR; zCorrection -= axisStepsPerMM[Z_AXIS] * ENDSTOP_Z_BACK_ON_HOME * Z_HOME_DIR;
#endif #endif
#if Z_HOME_DIR < 0 #if Z_HOME_DIR < 0
// Fix bed coating // Fix bed coating
zCorrection += axisStepsPerMM[Z_AXIS] * Printer::zBedOffset; zCorrection += axisStepsPerMM[Z_AXIS] * Printer::zBedOffset;
#else
currentPositionSteps[Z_AXIS] -= zBedOffset * axisStepsPerMM[Z_AXIS]; // Correct bed coating
#endif #endif
PrintLine::moveRelativeDistanceInSteps(0,0,zCorrection,0,homingFeedrate[Z_AXIS],true,false); PrintLine::moveRelativeDistanceInSteps(0,0,zCorrection,0,homingFeedrate[Z_AXIS],true,false);
currentPositionSteps[Z_AXIS] = ((Z_HOME_DIR == -1) ? zMinSteps : zMaxSteps - Printer::zBedOffset * axisStepsPerMM[Z_AXIS]); currentPositionSteps[Z_AXIS] = ((Z_HOME_DIR == -1) ? zMinSteps : zMaxSteps - Printer::zBedOffset * axisStepsPerMM[Z_AXIS]);
#if NUM_EXTRUDER > 0 #if NUM_EXTRUDER > 0
currentPositionSteps[Z_AXIS] -= Extruder::current->zOffset; currentPositionSteps[Z_AXIS] -= Extruder::current->zOffset;
#endif #endif
#if DRIVE_SYSTEM == TUGA #if NONLINEAR_SYSTEM
currentDeltaPositionSteps[C_TOWER] = currentPositionSteps[Z_AXIS]; transformCartesianStepsToDeltaSteps(currentPositionSteps, currentNonlinearPositionSteps);
#endif #endif
} }
} }
@ -1578,25 +1639,27 @@ void Printer::homeAxis(bool xaxis,bool yaxis,bool zaxis) // home non-delta print
if(zaxis) homeZAxis(); if(zaxis) homeZAxis();
if(yaxis) homeYAxis(); if(yaxis) homeYAxis();
if(xaxis) homeXAxis(); if(xaxis) homeXAxis();
#elif HOMING_ORDER == HOME_ORDER_ZXYTZ #elif HOMING_ORDER == HOME_ORDER_ZXYTZ || HOMING_ORDER == HOME_ORDER_XYTZ
{ {
float actTemp[NUM_EXTRUDER]; float actTemp[NUM_EXTRUDER];
for(int i = 0;i < NUM_EXTRUDER; i++) for(int i = 0;i < NUM_EXTRUDER; i++)
actTemp[i] = extruder[i].tempControl.targetTemperatureC; actTemp[i] = extruder[i].tempControl.targetTemperatureC;
if(zaxis) { if(zaxis) {
#if HOMING_ORDER == HOME_ORDER_ZXYTZ
homeZAxis(); homeZAxis();
Printer::moveToReal(IGNORE_COORDINATE,IGNORE_COORDINATE,ZHOME_HEAT_HEIGHT,IGNORE_COORDINATE,homingFeedrate[Z_AXIS]); Printer::moveToReal(IGNORE_COORDINATE,IGNORE_COORDINATE,ZHOME_HEAT_HEIGHT,IGNORE_COORDINATE,homingFeedrate[Z_AXIS]);
#endif
Commands::waitUntilEndOfAllMoves(); Commands::waitUntilEndOfAllMoves();
#if ZHOME_HEAT_ALL #if ZHOME_HEAT_ALL
for(int i = 0; i < NUM_EXTRUDER; i++) { for(int i = 0; i < NUM_EXTRUDER; i++) {
Extruder::setTemperatureForExtruder(RMath::max(actTemp[i],static_cast<float>(ZHOME_MIN_TEMPERATURE)),i,false,false); Extruder::setTemperatureForExtruder(RMath::max(actTemp[i],static_cast<float>(ZHOME_MIN_TEMPERATURE)),i,false,false);
} }
for(int i = 0; i < NUM_EXTRUDER; i++) { for(int i = 0; i < NUM_EXTRUDER; i++) {
if(actTemp[i] < ZHOME_MIN_TEMPERATURE) if(extruder[i].tempControl.currentTemperatureC < ZHOME_MIN_TEMPERATURE)
Extruder::setTemperatureForExtruder(RMath::max(actTemp[i],static_cast<float>(ZHOME_MIN_TEMPERATURE)),i,false,true); Extruder::setTemperatureForExtruder(RMath::max(actTemp[i],static_cast<float>(ZHOME_MIN_TEMPERATURE)),i,false,true);
} }
#else #else
if(actTemp[Extruder::current->id] < ZHOME_MIN_TEMPERATURE) if(extruder[Extruder::current->id].tempControl.currentTemperatureC < ZHOME_MIN_TEMPERATURE)
Extruder::setTemperatureForExtruder(RMath::max(actTemp[Extruder::current->id],static_cast<float>(ZHOME_MIN_TEMPERATURE)),Extruder::current->id,false,true); Extruder::setTemperatureForExtruder(RMath::max(actTemp[Extruder::current->id],static_cast<float>(ZHOME_MIN_TEMPERATURE)),Extruder::current->id,false,true);
#endif #endif
} }
@ -1641,16 +1704,17 @@ void Printer::homeAxis(bool xaxis,bool yaxis,bool zaxis) // home non-delta print
currentPositionSteps[Z_AXIS] += Printer::zCorrectionStepsIncluded; currentPositionSteps[Z_AXIS] += Printer::zCorrectionStepsIncluded;
} }
#endif #endif
if(Z_HOME_DIR < 0) startZ = Printer::zMin;
else startZ = Printer::zMin + Printer::zLength - zBedOffset;
moveToReal(IGNORE_COORDINATE, IGNORE_COORDINATE, ZHOME_HEAT_HEIGHT, IGNORE_COORDINATE, homingFeedrate[X_AXIS]);
#if ZHOME_HEAT_ALL #if ZHOME_HEAT_ALL
for(int i = 0;i < NUM_EXTRUDER; i++) for(int i = 0; i < NUM_EXTRUDER; i++)
Extruder::setTemperatureForExtruder(actTemp[i],i,false,false); Extruder::setTemperatureForExtruder(actTemp[i],i,false,false);
for(int i = 0;i < NUM_EXTRUDER; i++) for(int i = 0; i < NUM_EXTRUDER; i++)
Extruder::setTemperatureForExtruder(actTemp[i],i,false,true); Extruder::setTemperatureForExtruder(actTemp[i],i,false, actTemp[i] > MAX_ROOM_TEMPERATURE);
#else #else
Extruder::setTemperatureForExtruder(actTemp[Extruder::current->id], Extruder::current->id, false, actTemp[Extruder::current->id] > MAX_ROOM_TEMPERATURE); Extruder::setTemperatureForExtruder(actTemp[Extruder::current->id], Extruder::current->id, false, actTemp[Extruder::current->id] > MAX_ROOM_TEMPERATURE);
#endif #endif
if(Z_HOME_DIR < 0) startZ = Printer::zMin;
else startZ = Printer::zMin + Printer::zLength - zBedOffset;
} }
} }
#endif #endif
@ -1880,9 +1944,9 @@ void Printer::showConfiguration() {
Distortion Printer::distortion; Distortion Printer::distortion;
void Printer::measureDistortion(void) bool Printer::measureDistortion(void)
{ {
distortion.measure(); return distortion.measure();
} }
Distortion::Distortion() Distortion::Distortion()
@ -1908,9 +1972,9 @@ void Distortion::updateDerived()
step = (2 * Printer::axisStepsPerMM[Z_AXIS] * DISTORTION_CORRECTION_R) / (DISTORTION_CORRECTION_POINTS - 1.0f); step = (2 * Printer::axisStepsPerMM[Z_AXIS] * DISTORTION_CORRECTION_R) / (DISTORTION_CORRECTION_POINTS - 1.0f);
radiusCorrectionSteps = DISTORTION_CORRECTION_R * Printer::axisStepsPerMM[Z_AXIS]; radiusCorrectionSteps = DISTORTION_CORRECTION_R * Printer::axisStepsPerMM[Z_AXIS];
#else #else
xCorrectionSteps = (DISTORTION_XMAX - DISTORTION_XMIN) * Printer::axisStepsPerMM[X_AXIS] / DISTORTION_CORRECTION_POINTS; xCorrectionSteps = (DISTORTION_XMAX - DISTORTION_XMIN) * Printer::axisStepsPerMM[X_AXIS] / (DISTORTION_CORRECTION_POINTS - 1);
xOffsetSteps = DISTORTION_XMIN * Printer::axisStepsPerMM[X_AXIS]; xOffsetSteps = DISTORTION_XMIN * Printer::axisStepsPerMM[X_AXIS];
yCorrectionSteps = (DISTORTION_YMAX - DISTORTION_YMIN) * Printer::axisStepsPerMM[Y_AXIS] / DISTORTION_CORRECTION_POINTS; yCorrectionSteps = (DISTORTION_YMAX - DISTORTION_YMIN) * Printer::axisStepsPerMM[Y_AXIS] / (DISTORTION_CORRECTION_POINTS - 1);
yOffsetSteps = DISTORTION_YMIN * Printer::axisStepsPerMM[Y_AXIS]; yOffsetSteps = DISTORTION_YMIN * Printer::axisStepsPerMM[Y_AXIS];
#endif #endif
@ -2006,7 +2070,7 @@ void Distortion::extrapolateCorners()
extrapolateCorner(m, m,-1,-1); extrapolateCorner(m, m,-1,-1);
} }
void Distortion::measure(void) bool Distortion::measure(void)
{ {
fast8_t ix, iy; fast8_t ix, iy;
float z = EEPROM::zProbeBedDistance() + (EEPROM::zProbeHeight() > 0 ? EEPROM::zProbeHeight() : 0); float z = EEPROM::zProbeBedDistance() + (EEPROM::zProbeHeight() > 0 ? EEPROM::zProbeHeight() : 0);
@ -2020,6 +2084,7 @@ void Distortion::measure(void)
#if Z_HOME_DIR < 0 && Z_PROBE_Z_OFFSET_MODE == 1 #if Z_HOME_DIR < 0 && Z_PROBE_Z_OFFSET_MODE == 1
zCorrection += Printer::zBedOffset * Printer::axisStepsPerMM[Z_AXIS]; zCorrection += Printer::zBedOffset * Printer::axisStepsPerMM[Z_AXIS];
#endif #endif
Printer::startProbing(true);
for (iy = DISTORTION_CORRECTION_POINTS - 1; iy >= 0; iy--) for (iy = DISTORTION_CORRECTION_POINTS - 1; iy >= 0; iy--)
for (ix = 0; ix < DISTORTION_CORRECTION_POINTS; ix++) for (ix = 0; ix < DISTORTION_CORRECTION_POINTS; ix++)
{ {
@ -2031,23 +2096,23 @@ void Distortion::measure(void)
float mty = Printer::invAxisStepsPerMM[Y_AXIS] * (iy * step - radiusCorrectionSteps); float mty = Printer::invAxisStepsPerMM[Y_AXIS] * (iy * step - radiusCorrectionSteps);
#else #else
float mtx = Printer::invAxisStepsPerMM[X_AXIS] * (ix * xCorrectionSteps + xOffsetSteps); float mtx = Printer::invAxisStepsPerMM[X_AXIS] * (ix * xCorrectionSteps + xOffsetSteps);
float mty = Printer::invAxisStepsPerMM[Y_AXIS] * (iy * xCorrectionSteps + yOffsetSteps); float mty = Printer::invAxisStepsPerMM[Y_AXIS] * (iy * yCorrectionSteps + yOffsetSteps);
#endif #endif
//Com::printF(PSTR("mx "),mtx); //Com::printF(PSTR("mx "),mtx);
//Com::printF(PSTR("my "),mty); //Com::printF(PSTR("my "),mty);
//Com::printF(PSTR("ix "),(int)ix); //Com::printF(PSTR("ix "),(int)ix);
//Com::printFLN(PSTR("iy "),(int)iy); //Com::printFLN(PSTR("iy "),(int)iy);
Printer::moveToReal(mtx, mty, z, IGNORE_COORDINATE, EEPROM::zProbeXYSpeed()); Printer::moveToReal(mtx, mty, z, IGNORE_COORDINATE, EEPROM::zProbeXYSpeed());
#if DISTORTION_EXTRAPOLATE_CORNERS && DRIVE_SYSTEM == DELTA float zp = Printer::runZProbe(false,false, Z_PROBE_REPETITIONS);
setMatrix(floor(0.5f + Printer::axisStepsPerMM[Z_AXIS] * (z - if(zp == ILLEGAL_Z_PROBE) {
Printer::runZProbe(ix == 1 && iy == DISTORTION_CORRECTION_POINTS - 1, ix == DISTORTION_CORRECTION_POINTS - 2 && iy == 0, Z_PROBE_REPETITIONS))) + zCorrection, Com::printErrorFLN(PSTR("Stopping distortion measurement due to errors."));
matrixIndex(ix,iy)); Printer::finishProbing();
#else return false;
setMatrix(floor(0.5f + Printer::axisStepsPerMM[Z_AXIS] * (z - }
Printer::runZProbe(ix == 0 && iy == DISTORTION_CORRECTION_POINTS - 1, ix == DISTORTION_CORRECTION_POINTS - 1 && iy == 0, Z_PROBE_REPETITIONS))) + zCorrection, setMatrix(floor(0.5f + Printer::axisStepsPerMM[Z_AXIS] * (z -zp)) + zCorrection,
matrixIndex(ix,iy)); matrixIndex(ix,iy));
#endif
} }
Printer::finishProbing();
#if (DRIVE_SYSTEM == DELTA) && DISTORTION_EXTRAPOLATE_CORNERS #if (DRIVE_SYSTEM == DELTA) && DISTORTION_EXTRAPOLATE_CORNERS
extrapolateCorners(); extrapolateCorners();
#endif #endif
@ -2076,12 +2141,13 @@ void Distortion::measure(void)
} }
showMatrix(); showMatrix();
enable(true); enable(true);
return true;
//Printer::homeAxis(false, false, true); //Printer::homeAxis(false, false, true);
} }
int32_t Distortion::correct(int32_t x, int32_t y, int32_t z) const int32_t Distortion::correct(int32_t x, int32_t y, int32_t z) const
{ {
if (!enabled || z > zEnd || Printer::isZProbingActive()) return 0.0f; if (!enabled || z > zEnd || Printer::isZProbingActive()) return 0;
if(false && z == 0) { if(false && z == 0) {
Com::printF(PSTR("correcting ("), x); Com::printF(PSTR(","), y); Com::printF(PSTR("correcting ("), x); Com::printF(PSTR(","), y);
} }
@ -2136,7 +2202,8 @@ int32_t Distortion::correct(int32_t x, int32_t y, int32_t z) const
Com::printF(PSTR(" iy= "), fyFloor); Com::printFLN(PSTR(" fy= "), fy); Com::printF(PSTR(" iy= "), fyFloor); Com::printFLN(PSTR(" fy= "), fy);
} }
if (z > zStart && z > 0) if (z > zStart && z > 0)
correction_z *= (zEnd - z) / (zEnd - zStart); //All variables are type int. For calculation we need float values
correction_z = (correction_z * static_cast<float>(zEnd - z) / (zEnd - zStart));
/* if(correction_z > 20 || correction_z < -20) { /* if(correction_z > 20 || correction_z < -20) {
Com::printFLN(PSTR("Corr. error too big:"),correction_z); Com::printFLN(PSTR("Corr. error too big:"),correction_z);
Com::printF(PSTR("fxf"),(int)fxFloor); Com::printF(PSTR("fxf"),(int)fxFloor);
@ -2183,9 +2250,9 @@ void Distortion::showMatrix() {
#endif #endif
int32_t idx = matrixIndex(ix, iy); int32_t idx = matrixIndex(ix, iy);
float z = getMatrix(idx) * Printer::invAxisStepsPerMM[Z_AXIS]; float z = getMatrix(idx) * Printer::invAxisStepsPerMM[Z_AXIS];
Com::printF(PSTR("Distortion correction at px:"),x,2); Com::printF(PSTR("G33 X"),x,2);
Com::printF(PSTR(" py:"),y,2); Com::printF(PSTR(" Y"),y,2);
Com::printFLN(PSTR(" zCoorection:"),z,3); Com::printFLN(PSTR(" Z"),z,3);
} }
} }
} }
@ -2289,7 +2356,7 @@ void Printer::showJSONStatus(int type) {
Com::printF(PSTR(",\"coldExtrudeTemp\":0,\"coldRetractTemp\":0.0,\"geometry\":\"")); Com::printF(PSTR(",\"coldExtrudeTemp\":0,\"coldRetractTemp\":0.0,\"geometry\":\""));
#if (DRIVE_SYSTEM == DELTA) #if (DRIVE_SYSTEM == DELTA)
Com::printF(PSTR("delta")); Com::printF(PSTR("delta"));
#elif (DRIVE_SYSTEM == CARTESIAN) #elif (DRIVE_SYSTEM == CARTESIAN || DRIVE_SYSTEM == GANTRY_FAKE)
Com::printF(PSTR("cartesian")); Com::printF(PSTR("cartesian"));
#elif ((DRIVE_SYSTEM == XY_GANTRY) || (DRIVE_SYSTEM == YX_GANTRY)) #elif ((DRIVE_SYSTEM == XY_GANTRY) || (DRIVE_SYSTEM == YX_GANTRY))
Com::printF(PSTR("coreXY")); Com::printF(PSTR("coreXY"));
@ -2308,7 +2375,7 @@ void Printer::showJSONStatus(int type) {
Com::print('}'); Com::print('}');
firstOccurrence = false; firstOccurrence = false;
} }
Com::printFLN(PSTR("]")); Com::printF(PSTR("]"));
break; break;
case 3: case 3:
Com::printF(PSTR(",\"currentLayer\":")); Com::printF(PSTR(",\"currentLayer\":"));
@ -2319,7 +2386,7 @@ void Printer::showJSONStatus(int type) {
#else #else
Com::printF(PSTR("-1")); Com::printF(PSTR("-1"));
#endif #endif
Com::printF(PSTR("\",extrRaw\":[")); Com::printF(PSTR(",\"extrRaw\":["));
firstOccurrence = true; firstOccurrence = true;
for (int i = 0; i < NUM_EXTRUDER; i++) { for (int i = 0; i < NUM_EXTRUDER; i++) {
if (!firstOccurrence) Com::print(','); if (!firstOccurrence) Com::print(',');
@ -2394,7 +2461,7 @@ void Printer::showJSONStatus(int type) {
Com::print(','); Com::print(',');
Com::print(extruder[i].maxFeedrate); Com::print(extruder[i].maxFeedrate);
} }
Com::printFLN(PSTR("]")); Com::printF(PSTR("]"));
break; break;
} }

View file

@ -115,6 +115,14 @@ union wizardVar
#define towerBMinSteps Printer::yMinSteps #define towerBMinSteps Printer::yMinSteps
#define towerCMinSteps Printer::zMinSteps #define towerCMinSteps Printer::zMinSteps
class Plane {
public:
// f(x, y) = ax + by + c
float a,b,c;
float z(float x,float y) {
return a * x + y * b + c;
}
};
#if DISTORTION_CORRECTION #if DISTORTION_CORRECTION
class Distortion class Distortion
{ {
@ -123,7 +131,7 @@ public:
void init(); void init();
void enable(bool permanent = true); void enable(bool permanent = true);
void disable(bool permanent = true); void disable(bool permanent = true);
void measure(void); bool measure(void);
int32_t correct(int32_t x, int32_t y, int32_t z) const; int32_t correct(int32_t x, int32_t y, int32_t z) const;
void updateDerived(); void updateDerived();
void reportStatus(); void reportStatus();
@ -187,7 +195,15 @@ public:
static void update(); static void update();
static void report(); static void report();
static INLINE bool anyXYZMax() { static INLINE bool anyXYZMax() {
return (lastState & (ENDSTOP_X_MAX_ID|ENDSTOP_Z_MAX_ID|ENDSTOP_Z_MAX_ID)) != 0; return (lastState & (ENDSTOP_X_MAX_ID|ENDSTOP_Y_MAX_ID|ENDSTOP_Z_MAX_ID)) != 0;
}
static INLINE bool anyXYZ() {
#ifdef EXTENDED_ENDSTOPS
return (lastState & (ENDSTOP_X_MAX_ID|ENDSTOP_Y_MAX_ID|ENDSTOP_Z_MAX_ID|ENDSTOP_X_MIN_ID|ENDSTOP_Y_MIN_ID|ENDSTOP_Z_MIN_ID|ENDSTOP_Z2_MIN_ID)) != 0 ||
lastState2 != 0;
#else
return (lastState & (ENDSTOP_X_MAX_ID|ENDSTOP_Y_MAX_ID|ENDSTOP_Z_MAX_ID|ENDSTOP_X_MIN_ID|ENDSTOP_Y_MIN_ID|ENDSTOP_Z_MIN_ID|ENDSTOP_Z2_MIN_ID)) != 0;
#endif
} }
static INLINE void resetAccumulator() { static INLINE void resetAccumulator() {
accumulator = 0; accumulator = 0;
@ -315,7 +331,7 @@ public:
static float extrusionFactor; ///< Extrusion multiply factor static float extrusionFactor; ///< Extrusion multiply factor
#if NONLINEAR_SYSTEM #if NONLINEAR_SYSTEM
static int32_t maxDeltaPositionSteps; static int32_t maxDeltaPositionSteps;
static int32_t currentDeltaPositionSteps[E_TOWER_ARRAY]; static int32_t currentNonlinearPositionSteps[E_TOWER_ARRAY];
static floatLong deltaDiagonalStepsSquaredA; static floatLong deltaDiagonalStepsSquaredA;
static floatLong deltaDiagonalStepsSquaredB; static floatLong deltaDiagonalStepsSquaredB;
static floatLong deltaDiagonalStepsSquaredC; static floatLong deltaDiagonalStepsSquaredC;
@ -331,7 +347,8 @@ public:
static int16_t travelMovesPerSecond; static int16_t travelMovesPerSecond;
static int16_t printMovesPerSecond; static int16_t printMovesPerSecond;
static float radius0; static float radius0;
#else #endif
#if DRIVE_SYSTEM != DELTA
static int32_t zCorrectionStepsIncluded; static int32_t zCorrectionStepsIncluded;
#endif #endif
#if FEATURE_Z_PROBE || MAX_HARDWARE_ENDSTOP_Z || NONLINEAR_SYSTEM #if FEATURE_Z_PROBE || MAX_HARDWARE_ENDSTOP_Z || NONLINEAR_SYSTEM
@ -393,7 +410,7 @@ public:
static float memoryZ; static float memoryZ;
static float memoryE; static float memoryE;
static float memoryF; static float memoryF;
#if GANTRY #if GANTRY && !defined(FAST_COREXYZ)
static int8_t motorX; static int8_t motorX;
static int8_t motorYorZ; static int8_t motorYorZ;
#endif #endif
@ -433,6 +450,7 @@ public:
static void toggleDryRun(); static void toggleDryRun();
static void toggleCommunication(); static void toggleCommunication();
static void toggleNoMoves(); static void toggleNoMoves();
static void toggleEndStop();
static INLINE uint8_t getDebugLevel() {return debugLevel;} static INLINE uint8_t getDebugLevel() {return debugLevel;}
static INLINE bool debugEcho() static INLINE bool debugEcho()
{ {
@ -464,6 +482,11 @@ public:
return ((debugLevel & 32) != 0); return ((debugLevel & 32) != 0);
} }
static INLINE bool debugEndStop()
{
return ((debugLevel & 64) != 0);
}
static INLINE bool debugFlag(uint8_t flags) static INLINE bool debugFlag(uint8_t flags)
{ {
return (debugLevel & flags); return (debugLevel & flags);
@ -487,7 +510,7 @@ public:
#if (X_ENABLE_PIN > -1) #if (X_ENABLE_PIN > -1)
WRITE(X_ENABLE_PIN, !X_ENABLE_ON); WRITE(X_ENABLE_PIN, !X_ENABLE_ON);
#endif #endif
#if FEATURE_TWO_XSTEPPER && (X2_ENABLE_PIN > -1) #if (FEATURE_TWO_XSTEPPER || DUAL_X_AXIS) && (X2_ENABLE_PIN > -1)
WRITE(X2_ENABLE_PIN, !X_ENABLE_ON); WRITE(X2_ENABLE_PIN, !X_ENABLE_ON);
#endif #endif
} }
@ -522,7 +545,7 @@ public:
#if (X_ENABLE_PIN > -1) #if (X_ENABLE_PIN > -1)
WRITE(X_ENABLE_PIN, X_ENABLE_ON); WRITE(X_ENABLE_PIN, X_ENABLE_ON);
#endif #endif
#if FEATURE_TWO_XSTEPPER && (X2_ENABLE_PIN > -1) #if (FEATURE_TWO_XSTEPPER || DUAL_X_AXIS) && (X2_ENABLE_PIN > -1)
WRITE(X2_ENABLE_PIN, X_ENABLE_ON); WRITE(X2_ENABLE_PIN, X_ENABLE_ON);
#endif #endif
} }
@ -556,14 +579,14 @@ public:
if(positive) if(positive)
{ {
WRITE(X_DIR_PIN,!INVERT_X_DIR); WRITE(X_DIR_PIN,!INVERT_X_DIR);
#if FEATURE_TWO_XSTEPPER #if FEATURE_TWO_XSTEPPER || DUAL_X_AXIS
WRITE(X2_DIR_PIN,!INVERT_X_DIR); WRITE(X2_DIR_PIN,!INVERT_X_DIR);
#endif #endif
} }
else else
{ {
WRITE(X_DIR_PIN,INVERT_X_DIR); WRITE(X_DIR_PIN,INVERT_X_DIR);
#if FEATURE_TWO_XSTEPPER #if FEATURE_TWO_XSTEPPER || DUAL_X_AXIS
WRITE(X2_DIR_PIN,INVERT_X_DIR); WRITE(X2_DIR_PIN,INVERT_X_DIR);
#endif #endif
} }
@ -816,7 +839,7 @@ public:
{ {
flag0 &= ~PRINTER_FLAG0_STEPPER_DISABLED; flag0 &= ~PRINTER_FLAG0_STEPPER_DISABLED;
#if FAN_BOARD_PIN > -1 #if FAN_BOARD_PIN > -1
pwm_pos[PWM_BOARD_FAN] = 255; pwm_pos[PWM_BOARD_FAN] = BOARD_FAN_SPEED;
#endif // FAN_BOARD_PIN #endif // FAN_BOARD_PIN
} }
static INLINE bool isAnyTempsensorDefect() static INLINE bool isAnyTempsensorDefect()
@ -826,6 +849,7 @@ public:
static INLINE void setAnyTempsensorDefect() static INLINE void setAnyTempsensorDefect()
{ {
flag0 |= PRINTER_FLAG0_TEMPSENSOR_DEFECT; flag0 |= PRINTER_FLAG0_TEMPSENSOR_DEFECT;
debugSet(8);
} }
static INLINE void unsetAnyTempsensorDefect() static INLINE void unsetAnyTempsensorDefect()
{ {
@ -854,7 +878,7 @@ public:
} }
static INLINE void executeXYGantrySteps() static INLINE void executeXYGantrySteps()
{ {
#if (GANTRY) #if (GANTRY) && !defined(FAST_COREXYZ)
if(motorX <= -2) if(motorX <= -2)
{ {
WRITE(X_STEP_PIN,START_STEP_WITH_HIGH); WRITE(X_STEP_PIN,START_STEP_WITH_HIGH);
@ -891,7 +915,7 @@ public:
} }
static INLINE void executeXZGantrySteps() static INLINE void executeXZGantrySteps()
{ {
#if (GANTRY) #if (GANTRY) && !defined(FAST_COREXYZ)
if(motorX <= -2) if(motorX <= -2)
{ {
WRITE(X_STEP_PIN,START_STEP_WITH_HIGH); WRITE(X_STEP_PIN,START_STEP_WITH_HIGH);
@ -910,7 +934,6 @@ public:
} }
if(motorYorZ <= -2) if(motorYorZ <= -2)
{ {
//ANALYZER_ON(ANALYZER_CH3); // I dont think i can use these as they are for the y - possible bug area though
WRITE(Z_STEP_PIN,START_STEP_WITH_HIGH); WRITE(Z_STEP_PIN,START_STEP_WITH_HIGH);
#if FEATURE_TWO_ZSTEPPER #if FEATURE_TWO_ZSTEPPER
WRITE(Z2_STEP_PIN,START_STEP_WITH_HIGH); WRITE(Z2_STEP_PIN,START_STEP_WITH_HIGH);
@ -922,7 +945,6 @@ public:
} }
else if(motorYorZ >= 2) else if(motorYorZ >= 2)
{ {
//ANALYZER_ON(ANALYZER_CH3); // I dont think i can use these as they are for the y - possible bug area though
WRITE(Z_STEP_PIN,START_STEP_WITH_HIGH); WRITE(Z_STEP_PIN,START_STEP_WITH_HIGH);
#if FEATURE_TWO_ZSTEPPER #if FEATURE_TWO_ZSTEPPER
WRITE(Z2_STEP_PIN,START_STEP_WITH_HIGH); WRITE(Z2_STEP_PIN,START_STEP_WITH_HIGH);
@ -936,9 +958,24 @@ public:
} }
static INLINE void startXStep() static INLINE void startXStep()
{ {
#if DUAL_X_AXIS
#if FEATURE_DITTO_PRINTING
if(Extruder::dittoMode) {
WRITE(X_STEP_PIN,START_STEP_WITH_HIGH);
WRITE(X2_STEP_PIN,START_STEP_WITH_HIGH);
return;
}
#endif
if(Extruder::current->id) {
WRITE(X2_STEP_PIN,START_STEP_WITH_HIGH);
} else {
WRITE(X_STEP_PIN,START_STEP_WITH_HIGH);
}
#else
WRITE(X_STEP_PIN,START_STEP_WITH_HIGH); WRITE(X_STEP_PIN,START_STEP_WITH_HIGH);
#if FEATURE_TWO_XSTEPPER #if FEATURE_TWO_XSTEPPER
WRITE(X2_STEP_PIN,START_STEP_WITH_HIGH); WRITE(X2_STEP_PIN,START_STEP_WITH_HIGH);
#endif
#endif #endif
} }
static INLINE void startYStep() static INLINE void startYStep()
@ -961,7 +998,7 @@ public:
static INLINE void endXYZSteps() static INLINE void endXYZSteps()
{ {
WRITE(X_STEP_PIN,!START_STEP_WITH_HIGH); WRITE(X_STEP_PIN,!START_STEP_WITH_HIGH);
#if FEATURE_TWO_XSTEPPER #if FEATURE_TWO_XSTEPPER || DUAL_X_AXIS
WRITE(X2_STEP_PIN,!START_STEP_WITH_HIGH); WRITE(X2_STEP_PIN,!START_STEP_WITH_HIGH);
#endif #endif
WRITE(Y_STEP_PIN,!START_STEP_WITH_HIGH); WRITE(Y_STEP_PIN,!START_STEP_WITH_HIGH);
@ -1075,9 +1112,9 @@ public:
#if NONLINEAR_SYSTEM #if NONLINEAR_SYSTEM
static INLINE void setDeltaPositions(long xaxis, long yaxis, long zaxis) static INLINE void setDeltaPositions(long xaxis, long yaxis, long zaxis)
{ {
currentDeltaPositionSteps[A_TOWER] = xaxis; currentNonlinearPositionSteps[A_TOWER] = xaxis;
currentDeltaPositionSteps[B_TOWER] = yaxis; currentNonlinearPositionSteps[B_TOWER] = yaxis;
currentDeltaPositionSteps[C_TOWER] = zaxis; currentNonlinearPositionSteps[C_TOWER] = zaxis;
} }
static void deltaMoveToTopEndstops(float feedrate); static void deltaMoveToTopEndstops(float feedrate);
#endif #endif
@ -1093,14 +1130,15 @@ public:
#endif #endif
// Moved outside FEATURE_Z_PROBE to allow auto-level functional test on // Moved outside FEATURE_Z_PROBE to allow auto-level functional test on
// system without Z-probe // system without Z-probe
#if FEATURE_AUTOLEVEL
static void transformToPrinter(float x,float y,float z,float &transX,float &transY,float &transZ); static void transformToPrinter(float x,float y,float z,float &transX,float &transY,float &transZ);
static void transformFromPrinter(float x,float y,float z,float &transX,float &transY,float &transZ); static void transformFromPrinter(float x,float y,float z,float &transX,float &transY,float &transZ);
#if FEATURE_AUTOLEVEL
static void resetTransformationMatrix(bool silent); static void resetTransformationMatrix(bool silent);
static void buildTransformationMatrix(float h1,float h2,float h3); //static void buildTransformationMatrix(float h1,float h2,float h3);
static void buildTransformationMatrix(Plane &plane);
#endif #endif
#if DISTORTION_CORRECTION #if DISTORTION_CORRECTION
static void measureDistortion(void); static bool measureDistortion(void);
static Distortion distortion; static Distortion distortion;
#endif #endif
static void MemoryPosition(); static void MemoryPosition();
@ -1125,7 +1163,6 @@ public:
#if JSON_OUTPUT #if JSON_OUTPUT
static void showJSONStatus(int type); static void showJSONStatus(int type);
#endif #endif
private:
static void homeXAxis(); static void homeXAxis();
static void homeYAxis(); static void homeYAxis();
static void homeZAxis(); static void homeZAxis();

View file

@ -24,27 +24,29 @@
#include <math.h> #include <math.h>
#include <stdint.h> #include <stdint.h>
#define REPETIER_VERSION "0.92.8" #define REPETIER_VERSION "0.92.9"
// ########################################################################################## // ##########################################################################################
// ## Debug configuration ## // ## Debug configuration ##
// ########################################################################################## // ##########################################################################################
// These are run time sqitchable debug flags // These are run time switchable debug flags
enum debugFlags {DEB_ECHO = 0x1, DEB_INFO = 0x2, DEB_ERROR = 0x4,DEB_DRYRUN = 0x8, enum debugFlags {DEB_ECHO = 0x1, DEB_INFO = 0x2, DEB_ERROR = 0x4,DEB_DRYRUN = 0x8,
DEB_COMMUNICATION = 0x10, DEB_NOMOVES = 0x20, DEB_DEBUG = 0x40 DEB_COMMUNICATION = 0x10, DEB_NOMOVES = 0x20, DEB_DEBUG = 0x40
}; };
/** Uncomment, to see detailed data for every move. Only for debugging purposes! */ /** Uncomment, to see detailed data for every move. Only for debugging purposes! */
//#define DEBUG_QUEUE_MOVE //#define DEBUG_QUEUE_MOVE
/** write infos about path planner changes */
//#define DEBUG_PLANNER
/** Allows M111 to set bit 5 (16) which disables all commands except M111. This can be used /** Allows M111 to set bit 5 (16) which disables all commands except M111. This can be used
to test your data througput or search for communication problems. */ to test your data throughput or search for communication problems. */
#define INCLUDE_DEBUG_COMMUNICATION 1 #define INCLUDE_DEBUG_COMMUNICATION 1
/** Allows M111 so set bit 6 (32) which disables moves, at the first tried step. In combination /** Allows M111 so set bit 6 (32) which disables moves, at the first tried step. In combination
with a dry run, you can test the speed of path computations, which are still performed. */ with a dry run, you can test the speed of path computations, which are still performed. */
#define INCLUDE_DEBUG_NO_MOVE 1 #define INCLUDE_DEBUG_NO_MOVE 1
/** Writes the free RAM to output, if it is less then at the last test. Should always return /** Writes the free RAM to output, if it is less then at the last test. Should always return
values >500 for safety, since it doesn't catch every function call. Nice to tweak cache values >500 for safety, since it doesn't catch every function call. Nice to tweak cache
usage or for seraching for memory induced errors. Switch it off for production, it costs execution time. */ usage or for searching for memory induced errors. Switch it off for production, it costs execution time. */
//#define DEBUG_FREE_MEMORY //#define DEBUG_FREE_MEMORY
//#define DEBUG_ADVANCE //#define DEBUG_ADVANCE
/** If enabled, writes the created generic table to serial port at startup. */ /** If enabled, writes the created generic table to serial port at startup. */
@ -53,7 +55,7 @@ usage or for seraching for memory induced errors. Switch it off for production,
//#define DEBUG_STEPCOUNT //#define DEBUG_STEPCOUNT
/** This enables code to make M666 drop an ok, so you get problems with communication. It is to test host robustness. */ /** This enables code to make M666 drop an ok, so you get problems with communication. It is to test host robustness. */
//#define DEBUG_COM_ERRORS //#define DEBUG_COM_ERRORS
/** Adds a menu point in quick settings to write debg informations to the host in case of hangs where the ui still works. */ /** Adds a menu point in quick settings to write debug informations to the host in case of hangs where the ui still works. */
//#define DEBUG_PRINT //#define DEBUG_PRINT
//#define DEBUG_DELTA_OVERFLOW //#define DEBUG_DELTA_OVERFLOW
//#define DEBUG_DELTA_REALPOS //#define DEBUG_DELTA_REALPOS
@ -76,6 +78,7 @@ usage or for seraching for memory induced errors. Switch it off for production,
#define BIPOD 5 #define BIPOD 5
#define XZ_GANTRY 8 #define XZ_GANTRY 8
#define ZX_GANTRY 9 #define ZX_GANTRY 9
#define GANTRY_FAKE 10
#define WIZARD_STACK_SIZE 8 #define WIZARD_STACK_SIZE 8
#define IGNORE_COORDINATE 999999 #define IGNORE_COORDINATE 999999
@ -130,6 +133,7 @@ usage or for seraching for memory induced errors. Switch it off for production,
#define HOME_ORDER_ZXY 5 #define HOME_ORDER_ZXY 5
#define HOME_ORDER_ZYX 6 #define HOME_ORDER_ZYX 6
#define HOME_ORDER_ZXYTZ 7 // Needs hot hotend for correct homing #define HOME_ORDER_ZXYTZ 7 // Needs hot hotend for correct homing
#define HOME_ORDER_XYTZ 8 // Needs hot hotend for correct homing
#define NO_CONTROLLER 0 #define NO_CONTROLLER 0
#define UICONFIG_CONTROLLER 1 #define UICONFIG_CONTROLLER 1
@ -155,6 +159,7 @@ usage or for seraching for memory induced errors. Switch it off for production,
#define CONTROLLER_VIKI2 21 #define CONTROLLER_VIKI2 21
#define CONTROLLER_LCD_MP_PHARAOH_DUE 22 #define CONTROLLER_LCD_MP_PHARAOH_DUE 22
#define CONTROLLER_SPARKLCD_ADAPTER 23 #define CONTROLLER_SPARKLCD_ADAPTER 23
#define CONTROLLER_ZONESTAR 24
#define CONTROLLER_FELIX_DUE 405 #define CONTROLLER_FELIX_DUE 405
//direction flags //direction flags
@ -183,12 +188,64 @@ usage or for seraching for memory induced errors. Switch it off for production,
#define PRINTER_MODE_FFF 0 #define PRINTER_MODE_FFF 0
#define PRINTER_MODE_LASER 1 #define PRINTER_MODE_LASER 1
#define PRINTER_MODE_CNC 2 #define PRINTER_MODE_CNC 2
// we can not prevent this as some configs need a parameter and others not
#define ILLEGAL_Z_PROBE -888
// we can not prevent this as some configurations need a parameter and others not
#pragma GCC diagnostic ignored "-Wunused-parameter" #pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wunused-variable" #pragma GCC diagnostic ignored "-Wunused-variable"
#include "Configuration.h" #include "Configuration.h"
#ifndef SHARED_EXTRUDER_HEATER
#define SHARED_EXTRUDER_HEATER 0
#endif
#ifndef DUAL_X_AXIS
#define DUAL_X_AXIS 0
#endif
#if SHARED_EXTRUDER_HEATER || MIXING_EXTRUDER
#undef EXT1_HEATER_PIN
#undef EXT2_HEATER_PIN
#undef EXT3_HEATER_PIN
#undef EXT4_HEATER_PIN
#undef EXT5_HEATER_PIN
#define EXT1_HEATER_PIN -1
#define EXT2_HEATER_PIN -1
#define EXT3_HEATER_PIN -1
#define EXT4_HEATER_PIN -1
#define EXT5_HEATER_PIN -1
#endif
#ifndef BOARD_FAN_SPEED
#define BOARD_FAN_SPEED
#endif
#ifndef MAX_JERK_DISTANCE
#define MAX_JERK_DISTANCE 0.6
#endif
#define XY_GANTRY 1
#define YX_GANTRY 2
#define DELTA 3
#define TUGA 4
#define BIPOD 5
#define XZ_GANTRY 8
#define ZX_GANTRY 9
#if defined(FAST_COREXYZ) && !(DRIVE_SYSTEM==XY_GANTRY || DRIVE_SYSTEM==YX_GANTRY || DRIVE_SYSTEM==XZ_GANTRY || DRIVE_SYSTEM==ZX_GANTRY || DRIVE_SYSTEM==GANTRY_FAKE)
#undef FAST_COREXYZ
#endif
#ifdef FAST_COREXYZ
#if DELTA_SEGMENTS_PER_SECOND_PRINT < 30
#undef DELTA_SEGMENTS_PER_SECOND_PRINT
#define DELTA_SEGMENTS_PER_SECOND_PRINT 30 // core is linear, no subsegments needed
#endif
#if DELTA_SEGMENTS_PER_SECOND_MOVE < 30
#undef DELTA_SEGMENTS_PER_SECOND_MOVE
#define DELTA_SEGMENTS_PER_SECOND_MOVE 30
#endif
#endif
inline void memcopy2(void *dest,void *source) { inline void memcopy2(void *dest,void *source) {
*((int16_t*)dest) = *((int16_t*)source); *((int16_t*)dest) = *((int16_t*)source);
} }
@ -200,6 +257,10 @@ inline void memcopy4(void *dest,void *source) {
#define JSON_OUTPUT 0 #define JSON_OUTPUT 0
#endif #endif
#if !defined(ZPROBE_MIN_TEMPERATURE) && defined(ZHOME_MIN_TEMPERATURE)
#define ZPROBE_MIN_TEMPERATURE ZHOME_MIN_TEMPERATURE
#endif
#if FEATURE_Z_PROBE && Z_PROBE_PIN < 0 #if FEATURE_Z_PROBE && Z_PROBE_PIN < 0
#error You need to define Z_PROBE_PIN to use z probe! #error You need to define Z_PROBE_PIN to use z probe!
#endif #endif
@ -220,7 +281,7 @@ inline void memcopy4(void *dest,void *source) {
#define ZHOME_Y_POS IGNORE_COORDINATE #define ZHOME_Y_POS IGNORE_COORDINATE
#endif #endif
// MS1 MS2 Stepper Driver Microstepping mode table // MS1 MS2 Stepper Driver Micro stepping mode table
#define MICROSTEP1 LOW,LOW #define MICROSTEP1 LOW,LOW
#define MICROSTEP2 HIGH,LOW #define MICROSTEP2 HIGH,LOW
#define MICROSTEP4 LOW,HIGH #define MICROSTEP4 LOW,HIGH
@ -256,7 +317,7 @@ inline void memcopy4(void *dest,void *source) {
#define SOFTWARE_LEVELING (defined(FEATURE_SOFTWARE_LEVELING) && (DRIVE_SYSTEM==DELTA)) #define SOFTWARE_LEVELING (defined(FEATURE_SOFTWARE_LEVELING) && (DRIVE_SYSTEM==DELTA))
/** \brief Horizontal distance bridged by the diagonal push rod when the end effector is in the center. It is pretty close to 50% of the push rod length (250 mm). /** \brief Horizontal distance bridged by the diagonal push rod when the end effector is in the center. It is pretty close to 50% of the push rod length (250 mm).
*/ */
#ifndef ROD_RADIUS #if !defined(ROD_RADIUS) && DRIVE_SYSTEM == DELTA
#define ROD_RADIUS (PRINTER_RADIUS-END_EFFECTOR_HORIZONTAL_OFFSET-CARRIAGE_HORIZONTAL_OFFSET) #define ROD_RADIUS (PRINTER_RADIUS-END_EFFECTOR_HORIZONTAL_OFFSET-CARRIAGE_HORIZONTAL_OFFSET)
#endif #endif
@ -264,7 +325,7 @@ inline void memcopy4(void *dest,void *source) {
#define UI_SPEEDDEPENDENT_POSITIONING true #define UI_SPEEDDEPENDENT_POSITIONING true
#endif #endif
#if DRIVE_SYSTEM==DELTA || DRIVE_SYSTEM==TUGA || DRIVE_SYSTEM==BIPOD #if DRIVE_SYSTEM==DELTA || DRIVE_SYSTEM==TUGA || DRIVE_SYSTEM==BIPOD || defined(FAST_COREXYZ)
#define NONLINEAR_SYSTEM 1 #define NONLINEAR_SYSTEM 1
#else #else
#define NONLINEAR_SYSTEM 0 #define NONLINEAR_SYSTEM 0
@ -274,16 +335,16 @@ inline void memcopy4(void *dest,void *source) {
#define MANUAL_CONTROL 1 #define MANUAL_CONTROL 1
#endif #endif
#define GANTRY ( DRIVE_SYSTEM==XY_GANTRY || DRIVE_SYSTEM==YX_GANTRY || DRIVE_SYSTEM==XZ_GANTRY || DRIVE_SYSTEM==ZX_GANTRY) #define GANTRY ( DRIVE_SYSTEM==XY_GANTRY || DRIVE_SYSTEM==YX_GANTRY || DRIVE_SYSTEM==XZ_GANTRY || DRIVE_SYSTEM==ZX_GANTRY || DRIVE_SYSTEM==GANTRY_FAKE)
//Step to split a cirrcle in small Lines //Step to split a circle in small Lines
#ifndef MM_PER_ARC_SEGMENT #ifndef MM_PER_ARC_SEGMENT
#define MM_PER_ARC_SEGMENT 1 #define MM_PER_ARC_SEGMENT 1
#define MM_PER_ARC_SEGMENT_BIG 3 #define MM_PER_ARC_SEGMENT_BIG 3
#else #else
#define MM_PER_ARC_SEGMENT_BIG MM_PER_ARC_SEGMENT #define MM_PER_ARC_SEGMENT_BIG MM_PER_ARC_SEGMENT
#endif #endif
//After this count of steps a new SIN / COS caluclation is startet to correct the circle interpolation //After this count of steps a new SIN / COS calculation is started to correct the circle interpolation
#define N_ARC_CORRECTION 25 #define N_ARC_CORRECTION 25
// Test for shared cooler // Test for shared cooler
@ -358,7 +419,7 @@ inline void memcopy4(void *dest,void *source) {
#define EXT1_ANALOG_CHANNEL #define EXT1_ANALOG_CHANNEL
#endif #endif
#if NUM_EXTRUDER > 2 && EXT2_TEMPSENSOR_TYPE<101 #if NUM_EXTRUDER > 2 && EXT2_TEMPSENSOR_TYPE < 101
#define EXT2_ANALOG_INPUTS 1 #define EXT2_ANALOG_INPUTS 1
#define EXT2_SENSOR_INDEX EXT0_ANALOG_INPUTS+EXT1_ANALOG_INPUTS #define EXT2_SENSOR_INDEX EXT0_ANALOG_INPUTS+EXT1_ANALOG_INPUTS
#define EXT2_ANALOG_CHANNEL ACCOMMA1 EXT2_TEMPSENSOR_PIN #define EXT2_ANALOG_CHANNEL ACCOMMA1 EXT2_TEMPSENSOR_PIN
@ -394,7 +455,7 @@ inline void memcopy4(void *dest,void *source) {
#define EXT4_ANALOG_CHANNEL #define EXT4_ANALOG_CHANNEL
#endif #endif
#if NUM_EXTRUDER > 5 && EXT5_TEMPSENSOR_TYPE<101 #if NUM_EXTRUDER > 5 && EXT5_TEMPSENSOR_TYPE < 101
#define EXT5_ANALOG_INPUTS 1 #define EXT5_ANALOG_INPUTS 1
#define EXT5_SENSOR_INDEX EXT0_ANALOG_INPUTS+EXT1_ANALOG_INPUTS+EXT2_ANALOG_INPUTS+EXT3_ANALOG_INPUTS+EXT4_ANALOG_INPUTS #define EXT5_SENSOR_INDEX EXT0_ANALOG_INPUTS+EXT1_ANALOG_INPUTS+EXT2_ANALOG_INPUTS+EXT3_ANALOG_INPUTS+EXT4_ANALOG_INPUTS
#define EXT5_ANALOG_CHANNEL ACCOMMA4 EXT5_TEMPSENSOR_PIN #define EXT5_ANALOG_CHANNEL ACCOMMA4 EXT5_TEMPSENSOR_PIN
@ -406,11 +467,10 @@ inline void memcopy4(void *dest,void *source) {
#define EXT5_ANALOG_CHANNEL #define EXT5_ANALOG_CHANNEL
#endif #endif
#if HAVE_HEATED_BED && HEATED_BED_SENSOR_TYPE<101 #if HAVE_HEATED_BED && HEATED_BED_SENSOR_TYPE < 101
#define BED_ANALOG_INPUTS 1 #define BED_ANALOG_INPUTS 1
#define BED_SENSOR_INDEX EXT0_ANALOG_INPUTS+EXT1_ANALOG_INPUTS+EXT2_ANALOG_INPUTS+EXT3_ANALOG_INPUTS+EXT4_ANALOG_INPUTS+EXT5_ANALOG_INPUTS #define BED_SENSOR_INDEX EXT0_ANALOG_INPUTS+EXT1_ANALOG_INPUTS+EXT2_ANALOG_INPUTS+EXT3_ANALOG_INPUTS+EXT4_ANALOG_INPUTS+EXT5_ANALOG_INPUTS
#define BED_ANALOG_CHANNEL ACCOMMA5 HEATED_BED_SENSOR_PIN #define BED_ANALOG_CHANNEL ACCOMMA5 HEATED_BED_SENSOR_PIN
#undef BEKOMMA
#define BED_KOMMA , #define BED_KOMMA ,
#else #else
#define BED_ANALOG_INPUTS 0 #define BED_ANALOG_INPUTS 0
@ -423,9 +483,20 @@ inline void memcopy4(void *dest,void *source) {
#define THERMO_ANALOG_INPUTS 1 #define THERMO_ANALOG_INPUTS 1
#define THERMO_ANALOG_INDEX EXT0_ANALOG_INPUTS+EXT1_ANALOG_INPUTS+EXT2_ANALOG_INPUTS+EXT3_ANALOG_INPUTS+EXT4_ANALOG_INPUTS+EXT5_ANALOG_INPUTS+BED_ANALOG_INPUTS #define THERMO_ANALOG_INDEX EXT0_ANALOG_INPUTS+EXT1_ANALOG_INPUTS+EXT2_ANALOG_INPUTS+EXT3_ANALOG_INPUTS+EXT4_ANALOG_INPUTS+EXT5_ANALOG_INPUTS+BED_ANALOG_INPUTS
#define THERMO_ANALOG_CHANNEL BED_KOMMA FAN_THERMO_THERMISTOR_PIN #define THERMO_ANALOG_CHANNEL BED_KOMMA FAN_THERMO_THERMISTOR_PIN
#define THERMO_COMMA ,
#else #else
#define THERMO_ANALOG_INPUTS 0 #define THERMO_ANALOG_INPUTS 0
#define THERMO_ANALOG_CHANNEL #define THERMO_ANALOG_CHANNEL
#define THERMO_COMMA BED_KOMMA
#endif
#if defined(ADC_KEYPAD_PIN) && (ADC_KEYPAD_PIN > -1)
#define KEYPAD_ANALOG_INPUTS 1
#define KEYPAD_ANALOG_INDEX EXT0_ANALOG_INPUTS+EXT1_ANALOG_INPUTS+EXT2_ANALOG_INPUTS+EXT3_ANALOG_INPUTS+EXT4_ANALOG_INPUTS+EXT5_ANALOG_INPUTS+BED_ANALOG_INPUTS+THERMO_ANALOG_INPUTS
#define KEYPAD_ANALOG_CHANNEL THERMO_COMMA ADC_KEYPAD_PIN
#else
#define KEYPAD_ANALOG_INPUTS 0
#define KEYPAD_ANALOG_CHANNEL
#endif #endif
#ifndef DEBUG_FREE_MEMORY #ifndef DEBUG_FREE_MEMORY
@ -435,10 +506,10 @@ inline void memcopy4(void *dest,void *source) {
#endif #endif
/** \brief number of analog input signals. Normally 1 for each temperature sensor */ /** \brief number of analog input signals. Normally 1 for each temperature sensor */
#define ANALOG_INPUTS (EXT0_ANALOG_INPUTS+EXT1_ANALOG_INPUTS+EXT2_ANALOG_INPUTS+EXT3_ANALOG_INPUTS+EXT4_ANALOG_INPUTS+EXT5_ANALOG_INPUTS+BED_ANALOG_INPUTS+THERMO_ANALOG_INPUTS) #define ANALOG_INPUTS (EXT0_ANALOG_INPUTS+EXT1_ANALOG_INPUTS+EXT2_ANALOG_INPUTS+EXT3_ANALOG_INPUTS+EXT4_ANALOG_INPUTS+EXT5_ANALOG_INPUTS+BED_ANALOG_INPUTS+THERMO_ANALOG_INPUTS+KEYPAD_ANALOG_INPUTS)
#if ANALOG_INPUTS > 0 #if ANALOG_INPUTS > 0
/** Channels are the MUX-part of ADMUX register */ /** Channels are the MUX-part of ADMUX register */
#define ANALOG_INPUT_CHANNELS {EXT0_ANALOG_CHANNEL EXT1_ANALOG_CHANNEL EXT2_ANALOG_CHANNEL EXT3_ANALOG_CHANNEL EXT4_ANALOG_CHANNEL EXT5_ANALOG_CHANNEL BED_ANALOG_CHANNEL THERMO_ANALOG_CHANNEL} #define ANALOG_INPUT_CHANNELS {EXT0_ANALOG_CHANNEL EXT1_ANALOG_CHANNEL EXT2_ANALOG_CHANNEL EXT3_ANALOG_CHANNEL EXT4_ANALOG_CHANNEL EXT5_ANALOG_CHANNEL BED_ANALOG_CHANNEL THERMO_ANALOG_CHANNEL KEYPAD_ANALOG_CHANNEL}
#endif #endif
#define MENU_MODE_SD_MOUNTED 1 #define MENU_MODE_SD_MOUNTED 1

View file

@ -111,18 +111,18 @@ Custom M Codes
- M209 S<0/1> - Enable/disable autoretraction - M209 S<0/1> - Enable/disable autoretraction
- M220 S<Feedrate multiplier in percent> - Increase/decrease given feedrate - M220 S<Feedrate multiplier in percent> - Increase/decrease given feedrate
- M221 S<Extrusion flow multiplier in percent> - Increase/decrease given flow rate - M221 S<Extrusion flow multiplier in percent> - Increase/decrease given flow rate
- M228 P<pin> S<state 0/1> - Wait for pin getting state S. Add X0 to init as input without pullup and X1 for input with pullup. - M226 P<pin> S<state 0/1> - Wait for pin getting state S. Add X0 to init as input without pullup and X1 for input with pullup.
- M231 S<OPS_MODE> X<Min_Distance> Y<Retract> Z<Backlash> F<ReatrctMove> - Set OPS parameter - M231 S<OPS_MODE> X<Min_Distance> Y<Retract> Z<Backlash> F<ReatrctMove> - Set OPS parameter
- M232 - Read and reset max. advance values - M232 - Read and reset max. advance values
- M233 X<AdvanceK> Y<AdvanceL> - Set temporary advance K-value to X and linear term advanceL to Y - M233 X<AdvanceK> Y<AdvanceL> - Set temporary advance K-value to X and linear term advanceL to Y
- M251 Measure Z steps from homing stop (Delta printers). S0 - Reset, S1 - Print, S2 - Store to Z length (also EEPROM if enabled) - M251 Measure Z steps from homing stop (Delta printers). S0 - Reset, S1 - Print, S2 - Store to Z length (also EEPROM if enabled)
- M280 S<mode> - Set ditto printing mode. mode: 0 = off, 1 = 1 extra extruder, 2 = 2 extra extruder, 3 = 3 extra extruders - M280 S<mode> - Set ditto printing mode. mode: 0 = off, 1 = 1 extra extruder, 2 = 2 extra extruder, 3 = 3 extra extruders
- M281 Test if watchdog is running and working. - M281 Test if watchdog is running and working. Use M281 X0 to disable watchdog on AVR boards. Sometimes needed for boards with old bootloaders to allow reflashing.
- M300 S<Frequency> P<DurationMillis> play frequency - M300 S<Frequency> P<DurationMillis> play frequency
- M302 S<0 or 1> - allow cold extrusion. Without S parameter it will allow. S1 will disallow. - M302 S<0 or 1> - allow cold extrusion. Without S parameter it will allow. S1 will disallow.
- M303 P<extruder/bed> S<printTemerature> X0 R<Repetitions>- Autodetect pid values. Use P<NUM_EXTRUDER> for heated bed. X0 saves result in EEPROM. R is number of cycles. - M303 P<extruder/bed> S<printTemerature> X0 R<Repetitions>- Autodetect pid values. Use P<NUM_EXTRUDER> for heated bed. X0 saves result in EEPROM. R is number of cycles.
- M320 - Activate autolevel - M320 S<0/1> - Activate autolevel, S1 stores it in eeprom
- M321 - Deactivate autolevel - M321 S<0/1> - Deactivate autolevel, S1 stores it in eeprom
- M322 - Reset autolevel matrix - M322 - Reset autolevel matrix
- M323 S0/S1 enable disable distortion correction P0 = not permanent, P1 = permanent = default - M323 S0/S1 enable disable distortion correction P0 = not permanent, P1 = permanent = default
- M340 P<servoId> S<pulseInUS> R<autoOffIn ms>: servoID = 0..3, Servos are controlled by a pulse with normally between 500 and 2500 with 1500ms in center position. 0 turns servo off. R allows automatic disabling after a while. - M340 P<servoId> S<pulseInUS> R<autoOffIn ms>: servoID = 0..3, Servos are controlled by a pulse with normally between 500 and 2500 with 1500ms in center position. 0 turns servo off. R allows automatic disabling after a while.
@ -145,6 +145,7 @@ Custom M Codes
- M601 S<1/0> - Pause extruders. Paused extrudes disable heaters and motor. Unpausing reheats extruder to old temp. - M601 S<1/0> - Pause extruders. Paused extrudes disable heaters and motor. Unpausing reheats extruder to old temp.
- M602 S<1/0> P<1/0>- Debug jam control (S) Disable jam control (P). If enabled it will log signal changes and will not trigger jam errors! - M602 S<1/0> P<1/0>- Debug jam control (S) Disable jam control (P). If enabled it will log signal changes and will not trigger jam errors!
- M908 P<address> S<value> : Set stepper current for digipot (RAMBO board) - M908 P<address> S<value> : Set stepper current for digipot (RAMBO board)
- M999 - Continue from fatal error. M999 S1 will create a fatal error for testing.
*/ */
#include "Repetier.h" #include "Repetier.h"

View file

@ -78,7 +78,11 @@ void SDCard::initsd()
if(READ(SDCARDDETECT) != SDCARDDETECTINVERTED) if(READ(SDCARDDETECT) != SDCARDDETECTINVERTED)
return; return;
#endif #endif
HAL::pingWatchdog();
HAL::delayMilliseconds(50); // wait for stabilization of contacts, bootup ... HAL::delayMilliseconds(50); // wait for stabilization of contacts, bootup ...
fat.begin(SDSS, SPI_FULL_SPEED); // dummy init of SD_CARD
HAL::delayMilliseconds(50); // wait for init end
HAL::pingWatchdog();
/*if(dir[0].isOpen()) /*if(dir[0].isOpen())
dir[0].close();*/ dir[0].close();*/
if(!fat.begin(SDSS, SPI_FULL_SPEED)) if(!fat.begin(SDSS, SPI_FULL_SPEED))
@ -89,6 +93,7 @@ void SDCard::initsd()
} }
sdactive = true; sdactive = true;
Printer::setMenuMode(MENU_MODE_SD_MOUNTED, true); Printer::setMenuMode(MENU_MODE_SD_MOUNTED, true);
HAL::pingWatchdog();
fat.chdir(); fat.chdir();
if(selectFile("init.g", true)) if(selectFile("init.g", true))
@ -173,7 +178,7 @@ void SDCard::stopPrint()
GCode::executeFString(PSTR(SD_RUN_ON_STOP)); GCode::executeFString(PSTR(SD_RUN_ON_STOP));
if(SD_STOP_HEATER_AND_MOTORS_ON_STOP) { if(SD_STOP_HEATER_AND_MOTORS_ON_STOP) {
Commands::waitUntilEndOfAllMoves(); Commands::waitUntilEndOfAllMoves();
Printer::kill(true); Printer::kill(false);
} }
} }

View file

@ -43,6 +43,7 @@ int8_t GCode::waitingForResend = -1; ///< Waiting for line to be resend. -1 =
volatile uint8_t GCode::bufferLength = 0; ///< Number of commands stored in gcode_buffer volatile uint8_t GCode::bufferLength = 0; ///< Number of commands stored in gcode_buffer
millis_t GCode::timeOfLastDataPacket = 0; ///< Time, when we got the last data packet. Used to detect missing uint8_ts. millis_t GCode::timeOfLastDataPacket = 0; ///< Time, when we got the last data packet. Used to detect missing uint8_ts.
uint8_t GCode::formatErrors = 0; uint8_t GCode::formatErrors = 0;
PGM_P GCode::fatalErrorMsg = NULL; ///< message unset = no fatal error
/** \page Repetier-protocol /** \page Repetier-protocol
@ -221,8 +222,19 @@ void GCode::checkAndPushCommand()
return; return;
} }
lastLineNumber = actLineNumber; lastLineNumber = actLineNumber;
} } else if(lastLineNumber && !(hasM() && M == 117)) { // once line number always line number!
pushCommand(); if(Printer::debugErrors())
{
Com::printErrorFLN(PSTR("Missing linenumber"));
}
requestResend();
return;
}
if(GCode::hasFatalError() && !(hasM() && M==999)) {
GCode::reportFatalError();
} else {
pushCommand();
}
#ifdef DEBUG_COM_ERRORS #ifdef DEBUG_COM_ERRORS
if(hasM() && M == 667) if(hasM() && M == 667)
return; // omit ok return; // omit ok
@ -417,7 +429,7 @@ void GCode::readFromSerial()
} }
else else
{ {
if(ch == ';') commentDetected = true; // ignore new data until lineend if(ch == ';') commentDetected = true; // ignore new data until line end
if(commentDetected) commandsReceivingWritePosition--; if(commentDetected) commandsReceivingWritePosition--;
} }
} }
@ -500,7 +512,7 @@ void GCode::readFromSerial()
} }
else else
{ {
if(ch == ';') commentDetected = true; // ignore new data until lineend if(ch == ';') commentDetected = true; // ignore new data until line end
if(commentDetected) commandsReceivingWritePosition--; if(commentDetected) commandsReceivingWritePosition--;
} }
} }
@ -1010,11 +1022,41 @@ void GCode::printCommand()
Com::println(); Com::println();
} }
void GCode::fatalError(FSTRINGPARAM(message)) {
fatalErrorMsg = message;
#if SDSUPPORT
if(sd.sdmode != 0) { // stop sd print to prevent damage
sd.stopPrint();
}
#endif
if(Printer::currentPosition[Z_AXIS] < Printer::zMin + Printer::zLength - 15)
PrintLine::moveRelativeDistanceInStepsReal(0,0,10*Printer::axisStepsPerMM[Z_AXIS],0,Printer::homingFeedrate[Z_AXIS],true,true);
EVENT_FATAL_ERROR_OCCURED
Commands::waitUntilEndOfAllMoves();
Printer::kill(true);
reportFatalError();
}
void GCode::reportFatalError() {
Com::printF(Com::tFatal);
Com::printF(fatalErrorMsg);
Com::printFLN(PSTR(" Printer stopped and heaters disabled due to this error. Fix error and restart with M999."));
UI_ERROR_P(fatalErrorMsg)
}
void GCode::resetFatalError() {
TemperatureController::resetAllErrorStates();
fatalErrorMsg = NULL;
UI_ERROR("");
EVENT_CONTINUE_FROM_FATAL_ERROR
Com::printFLN(PSTR("info:Continue from fatal state"));
}
#if JSON_OUTPUT #if JSON_OUTPUT
// --------------------------------------------------------------- // // --------------------------------------------------------------- //
// Code that gets gcode information is adapted from RepRapFirmware // // Code that gets gcode information is adapted from RepRapFirmware //
// Originally licenced under GPL // // Originally licensed under GPL //
// Authors: reprappro, dc42, dcnewman, others // // Authors: reprappro, dc42, dcnewman, others //
// Source: https://github.com/dcnewman/RepRapFirmware // // Source: https://github.com/dcnewman/RepRapFirmware //
// Copy date: 15 Nov 2015 // // Copy date: 15 Nov 2015 //

View file

@ -182,7 +182,12 @@ public:
static void pushCommand(); static void pushCommand();
static void executeFString(FSTRINGPARAM(cmd)); static void executeFString(FSTRINGPARAM(cmd));
static uint8_t computeBinarySize(char *ptr); static uint8_t computeBinarySize(char *ptr);
static void fatalError(FSTRINGPARAM(message));
static void reportFatalError();
static void resetFatalError();
inline static bool hasFatalError() {
return fatalErrorMsg != NULL;
}
friend class SDCard; friend class SDCard;
friend class UIDisplay; friend class UIDisplay;
private: private:
@ -206,6 +211,7 @@ private:
return l; return l;
} }
static FSTRINGPARAM(fatalErrorMsg);
static GCode commandsBuffered[GCODE_BUFFER_SIZE]; ///< Buffer for received commands. static GCode commandsBuffered[GCODE_BUFFER_SIZE]; ///< Buffer for received commands.
static uint8_t bufferReadIndex; ///< Read position in gcode_buffer. static uint8_t bufferReadIndex; ///< Read position in gcode_buffer.
static uint8_t bufferWriteIndex; ///< Write position in gcode_buffer. static uint8_t bufferWriteIndex; ///< Write position in gcode_buffer.

File diff suppressed because it is too large Load diff

View file

@ -42,7 +42,7 @@
#define FLAG_JOIN_START_FIXED 4 #define FLAG_JOIN_START_FIXED 4
/** Start filament retraction at move start */ /** Start filament retraction at move start */
#define FLAG_JOIN_START_RETRACT 8 #define FLAG_JOIN_START_RETRACT 8
/** Wait for filament pushback, before ending move */ /** Wait for filament push back, before ending move */
#define FLAG_JOIN_END_RETRACT 16 #define FLAG_JOIN_END_RETRACT 16
/** Disable retract for this line */ /** Disable retract for this line */
#define FLAG_JOIN_NO_RETRACT 32 #define FLAG_JOIN_NO_RETRACT 32
@ -53,15 +53,13 @@
// Printing related data // Printing related data
#if NONLINEAR_SYSTEM #if NONLINEAR_SYSTEM
// Allow the delta cache to store segments for every line in line cache. Beware this gets big ... fast. // Allow the delta cache to store segments for every line in line cache. Beware this gets big ... fast.
// DELTASEGMENTS_PER_PRINTLINE *
#define DELTA_CACHE_SIZE (DELTASEGMENTS_PER_PRINTLINE * PRINTLINE_CACHE_SIZE)
class PrintLine; class PrintLine;
typedef struct typedef struct
{ {
flag8_t dir; ///< Direction of delta movement. flag8_t dir; ///< Direction of delta movement.
uint16_t deltaSteps[TOWER_ARRAY]; ///< Number of steps in move. uint16_t deltaSteps[TOWER_ARRAY]; ///< Number of steps in move.
inline void checkEndstops(PrintLine *cur,bool checkall); inline bool checkEndstops(PrintLine *cur,bool checkall);
inline void setXMoveFinished() inline void setXMoveFinished()
{ {
dir &= ~XSTEP; dir &= ~XSTEP;
@ -158,14 +156,14 @@ typedef struct
{ {
dir |= X_DIRPOS << axis; dir |= X_DIRPOS << axis;
} }
} DeltaSegment; } NonlinearSegment;
extern uint8_t lastMoveID; extern uint8_t lastMoveID;
#endif #endif
class UIDisplay; class UIDisplay;
class PrintLine // RAM usage: 24*4+15 = 113 Byte class PrintLine // RAM usage: 24*4+15 = 113 Byte
{ {
friend class UIDisplay; friend class UIDisplay;
#if CPU_ARCH==ARCH_ARM #if CPU_ARCH == ARCH_ARM
static volatile bool nlFlag; static volatile bool nlFlag;
#endif #endif
public: public:
@ -186,18 +184,18 @@ private:
float speedZ; ///< Speed in z direction at fullInterval in mm/s float speedZ; ///< Speed in z direction at fullInterval in mm/s
float speedE; ///< Speed in E direction at fullInterval in mm/s float speedE; ///< Speed in E direction at fullInterval in mm/s
float fullSpeed; ///< Desired speed mm/s float fullSpeed; ///< Desired speed mm/s
float invFullSpeed; ///< 1.0/fullSpeed for fatser computation float invFullSpeed; ///< 1.0/fullSpeed for faster computation
float accelerationDistance2; ///< Real 2.0*distanceÜacceleration mm²/s² float accelerationDistance2; ///< Real 2.0*distance*acceleration mm²/s²
float maxJunctionSpeed; ///< Max. junction speed between this and next segment float maxJunctionSpeed; ///< Max. junction speed between this and next segment
float startSpeed; ///< Staring speed in mm/s float startSpeed; ///< Starting speed in mm/s
float endSpeed; ///< Exit speed in mm/s float endSpeed; ///< Exit speed in mm/s
float minSpeed; float minSpeed;
float distance; float distance;
#if NONLINEAR_SYSTEM #if NONLINEAR_SYSTEM
uint8_t numDeltaSegments; ///< Number of delta segments left in line. Decremented by stepper timer. uint8_t numNonlinearSegments; ///< Number of delta segments left in line. Decremented by stepper timer.
uint8_t moveID; ///< ID used to identify moves which are all part of the same line uint8_t moveID; ///< ID used to identify moves which are all part of the same line
int32_t numPrimaryStepPerSegment; ///< Number of primary bresenham axis steps in each delta segment int32_t numPrimaryStepPerSegment; ///< Number of primary Bresenham axis steps in each delta segment
DeltaSegment segments[DELTASEGMENTS_PER_PRINTLINE]; NonlinearSegment segments[DELTASEGMENTS_PER_PRINTLINE];
#endif #endif
ticks_t fullInterval; ///< interval at full speed in ticks/step. ticks_t fullInterval; ///< interval at full speed in ticks/step.
uint16_t accelSteps; ///< How much steps does it take, to reach the plateau. uint16_t accelSteps; ///< How much steps does it take, to reach the plateau.
@ -214,7 +212,7 @@ private:
int32_t advanceStart; int32_t advanceStart;
int32_t advanceEnd; int32_t advanceEnd;
#endif #endif
uint16_t advanceL; ///< Recomputated L value uint16_t advanceL; ///< Recomputed L value
#endif #endif
#ifdef DEBUG_STEPCOUNT #ifdef DEBUG_STEPCOUNT
int32_t totalStepsRemaining; int32_t totalStepsRemaining;
@ -345,23 +343,29 @@ public:
inline void setXMoveFinished() inline void setXMoveFinished()
{ {
#if DRIVE_SYSTEM == CARTESIAN || NONLINEAR_SYSTEM #if DRIVE_SYSTEM==XY_GANTRY || DRIVE_SYSTEM==YX_GANTRY
dir &= ~16;
#else
dir &= ~48; dir &= ~48;
#elif DRIVE_SYSTEM==XZ_GANTRY || DRIVE_SYSTEM==ZX_GANTRY
dir &= ~80
#else
dir &= ~16;
#endif #endif
} }
inline void setYMoveFinished() inline void setYMoveFinished()
{ {
#if DRIVE_SYSTEM == CARTESIAN || NONLINEAR_SYSTEM #if DRIVE_SYSTEM==XY_GANTRY || DRIVE_SYSTEM==YX_GANTRY
dir &= ~32;
#else
dir &= ~48; dir &= ~48;
#else
dir &= ~32;
#endif #endif
} }
inline void setZMoveFinished() inline void setZMoveFinished()
{ {
#if DRIVE_SYSTEM==XZ_GANTRY || DRIVE_SYSTEM==ZX_GANTRY
dir &= ~80
#else
dir &= ~64; dir &= ~64;
#endif
} }
inline void setXYMoveFinished() inline void setXYMoveFinished()
{ {
@ -515,7 +519,7 @@ public:
} }
INLINE void startXStep() INLINE void startXStep()
{ {
#if !(GANTRY) #if !(GANTRY) || defined(FAST_COREXYZ)
Printer::startXStep(); Printer::startXStep();
#else #else
#if DRIVE_SYSTEM == XY_GANTRY || DRIVE_SYSTEM == XZ_GANTRY #if DRIVE_SYSTEM == XY_GANTRY || DRIVE_SYSTEM == XZ_GANTRY
@ -549,7 +553,7 @@ public:
} }
INLINE void startYStep() INLINE void startYStep()
{ {
#if !(GANTRY) || DRIVE_SYSTEM == ZX_GANTRY || DRIVE_SYSTEM == XZ_GANTRY #if !(GANTRY) || DRIVE_SYSTEM == ZX_GANTRY || DRIVE_SYSTEM == XZ_GANTRY || defined(FAST_COREXYZ)
Printer::startYStep(); Printer::startYStep();
#else #else
#if DRIVE_SYSTEM == XY_GANTRY #if DRIVE_SYSTEM == XY_GANTRY
@ -584,7 +588,7 @@ public:
} }
INLINE void startZStep() INLINE void startZStep()
{ {
#if !(GANTRY) || DRIVE_SYSTEM == YX_GANTRY || DRIVE_SYSTEM == XY_GANTRY #if !(GANTRY) || DRIVE_SYSTEM == YX_GANTRY || DRIVE_SYSTEM == XY_GANTRY || defined(FAST_COREXYZ)
Printer::startZStep(); Printer::startZStep();
#else #else
#if DRIVE_SYSTEM == XZ_GANTRY #if DRIVE_SYSTEM == XZ_GANTRY
@ -617,8 +621,8 @@ public:
#endif #endif
} }
void updateStepsParameter(); void updateStepsParameter();
float safeSpeed(); float safeSpeed(fast8_t drivingAxis);
void calculateMove(float axis_diff[],uint8_t pathOptimize); void calculateMove(float axis_diff[],uint8_t pathOptimize,fast8_t distanceBase);
void logLine(); void logLine();
INLINE long getWaitTicks() INLINE long getWaitTicks()
{ {
@ -678,7 +682,7 @@ public:
static inline void backwardPlanner(ufast8_t p,ufast8_t last); static inline void backwardPlanner(ufast8_t p,ufast8_t last);
static void updateTrapezoids(); static void updateTrapezoids();
static uint8_t insertWaitMovesIfNeeded(uint8_t pathOptimize, uint8_t waitExtraLines); static uint8_t insertWaitMovesIfNeeded(uint8_t pathOptimize, uint8_t waitExtraLines);
#if NONLINEAR_SYSTEM == 0 #if !NONLINEAR_SYSTEM
static void queueCartesianMove(uint8_t check_endstops,uint8_t pathOptimize); static void queueCartesianMove(uint8_t check_endstops,uint8_t pathOptimize);
#if DISTORTION_CORRECTION #if DISTORTION_CORRECTION
static void queueCartesianSegmentTo(uint8_t check_endstops, uint8_t pathOptimize); static void queueCartesianSegmentTo(uint8_t check_endstops, uint8_t pathOptimize);
@ -698,9 +702,9 @@ public:
p = (p == PRINTLINE_CACHE_SIZE - 1 ? 0 : p + 1); p = (p == PRINTLINE_CACHE_SIZE - 1 ? 0 : p + 1);
} }
#if NONLINEAR_SYSTEM #if NONLINEAR_SYSTEM
static uint8_t queueDeltaMove(uint8_t check_endstops,uint8_t pathOptimize, uint8_t softEndstop); static uint8_t queueNonlinearMove(uint8_t check_endstops,uint8_t pathOptimize, uint8_t softEndstop);
static inline void queueEMove(int32_t e_diff,uint8_t check_endstops,uint8_t pathOptimize); static inline void queueEMove(int32_t e_diff,uint8_t check_endstops,uint8_t pathOptimize);
inline uint16_t calculateDeltaSubSegments(uint8_t softEndstop); inline uint16_t calculateNonlinearSubSegments(uint8_t softEndstop);
static inline void calculateDirectionAndDelta(int32_t difference[], ufast8_t *dir, int32_t delta[]); static inline void calculateDirectionAndDelta(int32_t difference[], ufast8_t *dir, int32_t delta[]);
static inline uint8_t calculateDistance(float axis_diff[], uint8_t dir, float *distance); static inline uint8_t calculateDistance(float axis_diff[], uint8_t dir, float *distance);
#if SOFTWARE_LEVELING && DRIVE_SYSTEM == DELTA #if SOFTWARE_LEVELING && DRIVE_SYSTEM == DELTA

View file

@ -365,12 +365,9 @@ STEPPER_CURRENT_CONTROL
#if MOTHERBOARD == 3 || MOTHERBOARD == 33 || MOTHERBOARD == 34 || MOTHERBOARD == 35 #if MOTHERBOARD == 3 || MOTHERBOARD == 33 || MOTHERBOARD == 34 || MOTHERBOARD == 35
#define KNOWN_BOARD 1 #define KNOWN_BOARD 1
//////////////////FIX THIS////////////// #if !(defined (__AVR_ATmega1280__ ) || defined (__AVR_ATmega2560__ ))
#ifndef __AVR_ATmega1280__
#ifndef __AVR_ATmega2560__
#error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu. #error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu.
#endif #endif
#endif
// uncomment one of the following lines for RAMPS v1.3 or v1.0, comment both for v1.2 or 1.1 // uncomment one of the following lines for RAMPS v1.3 or v1.0, comment both for v1.2 or 1.1
// #define RAMPS_V_1_3 // #define RAMPS_V_1_3
@ -2000,7 +1997,7 @@ STEPPER_CURRENT_CONTROL
// Thermocouple 1 // Thermocouple 1
#define TEMP_4_PIN 4 #define TEMP_4_PIN 4
#define THERMOCOUPLE_0_PIN 8 #define THERMOCOUPLE_0_PIN 8
#define THERMOCOUPLE_0_PIN 4 #define THERMOCOUPLE_1_PIN 4
// Beeper on AUX-4 // Beeper on AUX-4
#define BEEPER_PIN 64 #define BEEPER_PIN 64
@ -2200,10 +2197,14 @@ S2(ext)=8
S3(ext)=9 S3(ext)=9
*/ */
#define TEMP_0_PIN 15 // Extruder 1 // Extruder 1 - Thermistor 1
#define TEMP_2_PIN 14 // Extruder 2 #define TEMP_0_PIN 15
#define TEMP_3_PIN 13 // Extruder 3 // Extruder 2 - Thermistor 2
#define TEMP_1_PIN 12 // Heated bed #define TEMP_2_PIN 14
// Extruder 3 - Thermistor 3
#define TEMP_3_PIN 13
// Heated bed - Thermistor 4
#define TEMP_1_PIN 12
#define THERMOCOUPLE_0_PIN 11 #define THERMOCOUPLE_0_PIN 11
#define THERMOCOUPLE_1_PIN 10 #define THERMOCOUPLE_1_PIN 10

View file

@ -144,11 +144,11 @@ char displayCache[UI_ROWS][MAX_COLS+1];
// .***. 14 // .***. 14
// *.*.* 21 // *.*.* 21
// ..*.. 4 // ..*.. 4
// ..*.. 4
// ..*.. 4
// ***.. 28 // ***.. 28
// ..... 0 // ..... 0
// ..... 0 const uint8_t character_back[8] PROGMEM = {4, 14, 21, 4, 4, 4, 28, 0};
// ..... 0
const uint8_t character_back[8] PROGMEM = {4,14,21,4,28,0,0,0};
// Degrees sign - code 2 // Degrees sign - code 2
// ..*.. 4 // ..*.. 4
// .*.*. 10 // .*.*. 10
@ -781,6 +781,9 @@ void initializeLCD()
#ifdef U8GLIB_SSD1306_SW_SPI #ifdef U8GLIB_SSD1306_SW_SPI
u8g_InitSPI(&u8g,&u8g_dev_ssd1306_128x64_sw_spi, UI_DISPLAY_D4_PIN, UI_DISPLAY_ENABLE_PIN, UI_DISPLAY_RS_PIN, U8G_PIN_NONE, U8G_PIN_NONE); u8g_InitSPI(&u8g,&u8g_dev_ssd1306_128x64_sw_spi, UI_DISPLAY_D4_PIN, UI_DISPLAY_ENABLE_PIN, UI_DISPLAY_RS_PIN, U8G_PIN_NONE, U8G_PIN_NONE);
#endif #endif
#ifdef U8GLIB_SH1106_SW_SPI
u8g_InitSPI(&u8g,&u8g_dev_sh1106_128x64_sw_spi, UI_DISPLAY_D4_PIN, UI_DISPLAY_ENABLE_PIN, UI_DISPLAY_RS_PIN, U8G_PIN_NONE, U8G_PIN_NONE);
#endif
#ifdef U8GLIB_KS0108_FAST #ifdef U8GLIB_KS0108_FAST
u8g_Init8Bit(&u8g,&u8g_dev_ks0108_128x64_fast,UI_DISPLAY_D0_PIN,UI_DISPLAY_D1_PIN,UI_DISPLAY_D2_PIN,UI_DISPLAY_D3_PIN,UI_DISPLAY_D4_PIN,UI_DISPLAY_D5_PIN,UI_DISPLAY_D6_PIN,UI_DISPLAY_D7_PIN,UI_DISPLAY_ENABLE_PIN,UI_DISPLAY_CS1,UI_DISPLAY_CS2, u8g_Init8Bit(&u8g,&u8g_dev_ks0108_128x64_fast,UI_DISPLAY_D0_PIN,UI_DISPLAY_D1_PIN,UI_DISPLAY_D2_PIN,UI_DISPLAY_D3_PIN,UI_DISPLAY_D4_PIN,UI_DISPLAY_D5_PIN,UI_DISPLAY_D6_PIN,UI_DISPLAY_D7_PIN,UI_DISPLAY_ENABLE_PIN,UI_DISPLAY_CS1,UI_DISPLAY_CS2,
UI_DISPLAY_DI,UI_DISPLAY_RW_PIN,UI_DISPLAY_RESET_PIN); UI_DISPLAY_DI,UI_DISPLAY_RW_PIN,UI_DISPLAY_RESET_PIN);
@ -1258,17 +1261,24 @@ void UIDisplay::parse(const char *txt,bool ram)
break; break;
} }
break; break;
case 'd': case 'd': // debug boolean
if(c2 == 'o') addStringOnOff(Printer::debugEcho()); if (c2 == 'o') addStringOnOff(Printer::debugEcho());
else if(c2 == 'i') addStringOnOff(Printer::debugInfo()); if (c2 == 'i') addStringOnOff(Printer::debugInfo());
else if(c2 == 'e') addStringOnOff(Printer::debugErrors()); if (c2 == 'e') addStringOnOff(Printer::debugErrors());
else if(c2 == 'd') addStringOnOff(Printer::debugDryrun()); if (c2 == 'd') addStringOnOff(Printer::debugDryrun());
break; if (c2 == 'p') addStringOnOff(Printer::debugEndStop());
if (c2 == 'x') addStringP(Endstops::xMin() ? ui_selected : ui_unselected);
if (c2 == 'X') addStringP(Endstops::xMax() ? ui_selected : ui_unselected);
if (c2 == 'y') addStringP(Endstops::yMin() ? ui_selected : ui_unselected);
if (c2 == 'Y') addStringP(Endstops::yMax() ? ui_selected : ui_unselected);
if (c2 == 'z') addStringP(Endstops::zMin() ? ui_selected : ui_unselected);
if (c2 == 'Z') addStringP(Endstops::zMax() ? ui_selected : ui_unselected);
break;
case 'D': case 'D':
#if FEATURE_DITTO_PRINTING #if FEATURE_DITTO_PRINTING
if(c2>='0' && c2<='9') if(c2>='0' && c2<='9')
{ {
addStringP(Extruder::dittoMode==c2-'0'?ui_selected:ui_unselected); addStringP(Extruder::dittoMode==c2-'0' ? ui_selected : ui_unselected);
} }
#endif #endif
break; break;
@ -1294,10 +1304,10 @@ void UIDisplay::parse(const char *txt,bool ram)
break; break;
} }
#endif #endif
#if NUM_TEMPERATURE_LOOPS > 0
uint8_t eid = NUM_EXTRUDER; // default = BED if c2 not specified extruder number uint8_t eid = NUM_EXTRUDER; // default = BED if c2 not specified extruder number
if(c2 == 'c') eid = Extruder::current->id; if(c2 == 'c') eid = Extruder::current->id;
else if(c2 >= '0' && c2 <= '9') eid = c2 - '0'; else if(c2 >= '0' && c2 <= '9') eid = c2 - '0';
#if NUM_TEMPERATURE_LOOPS > 0
if(Printer::isAnyTempsensorDefect()) if(Printer::isAnyTempsensorDefect())
{ {
if(eid == 0 && ++beepdelay > 30) beepdelay = 0; // beep every 30 seconds if(eid == 0 && ++beepdelay > 30) beepdelay = 0; // beep every 30 seconds
@ -1646,7 +1656,7 @@ void UIDisplay::parse(const char *txt,bool ram)
break; break;
case 'y': case 'y':
#if DRIVE_SYSTEM == DELTA #if DRIVE_SYSTEM == DELTA
if(c2 >= '0' && c2 <= '3') fvalue = (float)Printer::currentDeltaPositionSteps[c2 - '0']*Printer::invAxisStepsPerMM[c2-'0']; if(c2 >= '0' && c2 <= '3') fvalue = (float)Printer::currentNonlinearPositionSteps[c2 - '0']*Printer::invAxisStepsPerMM[c2-'0'];
addFloat(fvalue,3,2); addFloat(fvalue,3,2);
#endif #endif
break; break;
@ -1824,6 +1834,7 @@ void sdrefresh(uint16_t &r,char cache[UI_ROWS][MAX_COLS+1])
// Refresh current menu page // Refresh current menu page
void UIDisplay::refreshPage() void UIDisplay::refreshPage()
{ {
Endstops::update();
#if UI_DISPLAY_TYPE == DISPLAY_GAMEDUINO2 #if UI_DISPLAY_TYPE == DISPLAY_GAMEDUINO2
GD2::refresh(); GD2::refresh();
#else #else
@ -1831,14 +1842,14 @@ void UIDisplay::refreshPage()
uint8_t mtype = UI_MENU_TYPE_INFO; uint8_t mtype = UI_MENU_TYPE_INFO;
char cache[UI_ROWS][MAX_COLS + 1]; char cache[UI_ROWS][MAX_COLS + 1];
adjustMenuPos(); adjustMenuPos();
#if UI_AUTORETURN_TO_MENU_AFTER!=0 #if UI_AUTORETURN_TO_MENU_AFTER != 0
// Reset timeout on menu back when user active on menu // Reset timeout on menu back when user active on menu
if (uid.encoderLast != encoderStartScreen) if (uid.encoderLast != encoderStartScreen)
ui_autoreturn_time = HAL::timeInMilliseconds() + UI_AUTORETURN_TO_MENU_AFTER; ui_autoreturn_time = HAL::timeInMilliseconds() + UI_AUTORETURN_TO_MENU_AFTER;
#endif #endif
encoderStartScreen = uid.encoderLast; encoderStartScreen = uid.encoderLast;
// Copy result into cache // Copy result into cache
Endstops::update();
if(menuLevel == 0) // Top level menu if(menuLevel == 0) // Top level menu
{ {
UIMenu *men = (UIMenu*)pgm_read_word(&(ui_pages[menuPos[0]])); UIMenu *men = (UIMenu*)pgm_read_word(&(ui_pages[menuPos[0]]));
@ -2021,18 +2032,18 @@ void UIDisplay::refreshPage()
cache[1][0] = '\x0a'; //off cache[1][0] = '\x0a'; //off
#endif #endif
#if HAVE_HEATED_BED #if HAVE_HEATED_BED
//heatbed animated icons //heated bed animated icons
uint8_t lin = 2 - ((NUM_EXTRUDER != 2) ? 1 : 0); uint8_t lin = 2 - ((NUM_EXTRUDER != 2) ? 1 : 0);
if(heatedBedController.targetTemperatureC > 30) if(heatedBedController.targetTemperatureC > 30)
cache[lin][0] = Printer::isAnimation() ? '\x0c' : '\x0d'; cache[lin][0] = Printer::isAnimation() ? '\x0c' : '\x0d';
else else
cache[lin][0] = '\x0b'; cache[lin][0] = '\x0b';
#endif #endif
#if FAN_PIN>-1 && FEATURE_FAN_CONTROL #if FAN_PIN > -1 && FEATURE_FAN_CONTROL
//fan //fan
fanPercent = Printer::getFanSpeed() * 100 / 255; fanPercent = Printer::getFanSpeed() * 100 / 255;
fanString[1] = 0; fanString[1] = 0;
if(fanPercent > 0) //fan running anmation if(fanPercent > 0) //fan running animation
{ {
fanString[0] = Printer::isAnimation() ? '\x0e' : '\x0f'; fanString[0] = Printer::isAnimation() ? '\x0e' : '\x0f';
} }
@ -2081,11 +2092,11 @@ void UIDisplay::refreshPage()
if(u8g_IsBBXIntersection(&u8g, 0, 30 - UI_FONT_SMALL_HEIGHT, 1, UI_FONT_SMALL_HEIGHT)) if(u8g_IsBBXIntersection(&u8g, 0, 30 - UI_FONT_SMALL_HEIGHT, 1, UI_FONT_SMALL_HEIGHT))
printU8GRow(117,30,fanString); printU8GRow(117,30,fanString);
drawVProgressBar(116, 0, 9, 20, fanPercent); drawVProgressBar(116, 0, 9, 20, fanPercent);
if(u8g_IsBBXIntersection(&u8g, 0, 42 - UI_FONT_SMALL_HEIGHT, 1, UI_FONT_SMALL_HEIGHT))
printU8GRow(0,42,cache[3]); //mul + extruded
if(u8g_IsBBXIntersection(&u8g, 0, 52 - UI_FONT_SMALL_HEIGHT, 1, UI_FONT_SMALL_HEIGHT))
printU8GRow(0,52,cache[4]); //buf
#endif #endif
if(u8g_IsBBXIntersection(&u8g, 0, 42 - UI_FONT_SMALL_HEIGHT, 1, UI_FONT_SMALL_HEIGHT))
printU8GRow(0,42,cache[3]); //multiplier + extruded
if(u8g_IsBBXIntersection(&u8g, 0, 52 - UI_FONT_SMALL_HEIGHT, 1, UI_FONT_SMALL_HEIGHT))
printU8GRow(0,52,cache[4]); //buffer usage
#if SDSUPPORT #if SDSUPPORT
//SD Card //SD Card
if(sd.sdactive && u8g_IsBBXIntersection(&u8g, 66, 52 - UI_FONT_SMALL_HEIGHT, 1, UI_FONT_SMALL_HEIGHT)) if(sd.sdactive && u8g_IsBBXIntersection(&u8g, 66, 52 - UI_FONT_SMALL_HEIGHT, 1, UI_FONT_SMALL_HEIGHT))
@ -3064,6 +3075,9 @@ int UIDisplay::executeAction(unsigned int action, bool allowMoves)
case UI_ACTION_DEBUG_ERROR: case UI_ACTION_DEBUG_ERROR:
Printer::toggleErrors(); Printer::toggleErrors();
break; break;
case UI_ACTION_DEBUG_ENDSTOP:
Printer::toggleEndStop();
break;
case UI_ACTION_DEBUG_DRYRUN: case UI_ACTION_DEBUG_DRYRUN:
Printer::toggleDryRun(); Printer::toggleDryRun();
if(Printer::debugDryrun()) // simulate movements without printing if(Printer::debugDryrun()) // simulate movements without printing
@ -3460,7 +3474,7 @@ int UIDisplay::executeAction(unsigned int action, bool allowMoves)
Printer::currentPositionSteps[Z_AXIS] = 0; Printer::currentPositionSteps[Z_AXIS] = 0;
Printer::updateDerivedParameter(); Printer::updateDerivedParameter();
#if NONLINEAR_SYSTEM #if NONLINEAR_SYSTEM
transformCartesianStepsToDeltaSteps(Printer::currentPositionSteps, Printer::currentDeltaPositionSteps); transformCartesianStepsToDeltaSteps(Printer::currentPositionSteps, Printer::currentNonlinearPositionSteps);
#endif #endif
Printer::updateCurrentPosition(true); Printer::updateCurrentPosition(true);
Com::printFLN(Com::tZProbePrinterHeight, Printer::zLength); Com::printFLN(Com::tZProbePrinterHeight, Printer::zLength);
@ -3587,6 +3601,8 @@ int UIDisplay::executeAction(unsigned int action, bool allowMoves)
case UI_ACTION_LANGUAGE_FR: case UI_ACTION_LANGUAGE_FR:
case UI_ACTION_LANGUAGE_CZ: case UI_ACTION_LANGUAGE_CZ:
case UI_ACTION_LANGUAGE_PL: case UI_ACTION_LANGUAGE_PL:
case UI_ACTION_LANGUAGE_TR:
case UI_ACTION_LANGUAGE_FI:
Com::selectLanguage(action - UI_ACTION_LANGUAGE_EN); Com::selectLanguage(action - UI_ACTION_LANGUAGE_EN);
#if EEPROM_MODE != 0 #if EEPROM_MODE != 0
EEPROM::storeDataIntoEEPROM(0); // remember for next start EEPROM::storeDataIntoEEPROM(0); // remember for next start

View file

@ -30,15 +30,15 @@
#define DISPLAY_GAMEDUINO2 6 #define DISPLAY_GAMEDUINO2 6
/** /**
What display type do you use? What display type do you use?
0 = No display 0 = No display
1 = LCD Display with 4 bit data bus 1 = LCD Display with 4 bit data bus
2 = LCD Display with 8 bit data bus (currently not implemented, fallback to 1) 2 = LCD Display with 8 bit data bus (currently not implemented, fallback to 1)
3 = LCD Display with I2C connection, 4 bit mode 3 = LCD Display with I2C connection, 4 bit mode
4 = Use the slower LiquiedCrystal library bundled with arduino. 4 = Use the slower LiquiedCrystal library bundled with arduino.
IMPORTANT: You need to uncomment the LiquidCrystal include in Repetier.pde for it to work. IMPORTANT: You need to uncomment the LiquidCrystal include in Repetier.pde for it to work.
If you have Sanguino and want to use the library, you need to have Arduino 023 or older. (13.04.2012) If you have Sanguino and want to use the library, you need to have Arduino 023 or older. (13.04.2012)
5 = U8G supported display 5 = U8G supported display
*/ */
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -125,6 +125,7 @@ What display type do you use?
#define UI_ACTION_FAN_FULL 1054 #define UI_ACTION_FAN_FULL 1054
#define UI_ACTION_FEEDRATE_MULTIPLY 1055 #define UI_ACTION_FEEDRATE_MULTIPLY 1055
#define UI_ACTION_STEPPER_INACTIVE 1056 #define UI_ACTION_STEPPER_INACTIVE 1056
#define UI_ACTION_PID_PGAIN 1058 #define UI_ACTION_PID_PGAIN 1058
#define UI_ACTION_PID_IGAIN 1059 #define UI_ACTION_PID_IGAIN 1059
#define UI_ACTION_PID_DGAIN 1060 #define UI_ACTION_PID_DGAIN 1060
@ -141,10 +142,7 @@ What display type do you use?
#define UI_ACTION_PID_MAX 1071 #define UI_ACTION_PID_MAX 1071
#define UI_ACTION_ADVANCE_K 1072 #define UI_ACTION_ADVANCE_K 1072
#define UI_ACTION_SET_ORIGIN 1073 #define UI_ACTION_SET_ORIGIN 1073
#define UI_ACTION_DEBUG_ECHO 1074
#define UI_ACTION_DEBUG_INFO 1075
#define UI_ACTION_DEBUG_ERROR 1076
#define UI_ACTION_DEBUG_DRYRUN 1077
#define UI_ACTION_POWER 1078 #define UI_ACTION_POWER 1078
#define UI_ACTION_PREHEAT_PLA 1079 #define UI_ACTION_PREHEAT_PLA 1079
#define UI_ACTION_COOLDOWN 1080 #define UI_ACTION_COOLDOWN 1080
@ -203,22 +201,28 @@ What display type do you use?
#define UI_DITTO_2 1136 #define UI_DITTO_2 1136
#define UI_DITTO_3 1137 #define UI_DITTO_3 1137
#define UI_ACTION_DEBUG_ECHO 1150
#define UI_ACTION_DEBUG_INFO 1151
#define UI_ACTION_DEBUG_ERROR 1152
#define UI_ACTION_DEBUG_DRYRUN 1153
#define UI_ACTION_DEBUG_ENDSTOP 1154
#define UI_ACTION_SD_PRI_PAU_CONT 1200 #define UI_ACTION_SD_PRI_PAU_CONT 1200
#define UI_ACTION_FAN_SUSPEND 1201 #define UI_ACTION_FAN_SUSPEND 1201
#define UI_ACTION_AUTOLEVEL_ONOFF 1202 #define UI_ACTION_AUTOLEVEL_ONOFF 1202
#define UI_ACTION_SERVOPOS 1203 #define UI_ACTION_SERVOPOS 1203
#define UI_ACTION_IGNORE_M106 1204 #define UI_ACTION_IGNORE_M106 1204
#define UI_ACTION_KAPTON 1205 #define UI_ACTION_KAPTON 1205
#define UI_ACTION_BLUETAPE 1206 #define UI_ACTION_BLUETAPE 1206
#define UI_ACTION_NOCOATING 1207 #define UI_ACTION_NOCOATING 1207
#define UI_ACTION_PETTAPE 1208 #define UI_ACTION_PETTAPE 1208
#define UI_ACTION_GLUESTICK 1209 #define UI_ACTION_GLUESTICK 1209
#define UI_ACTION_RESET_MATRIX 1210 #define UI_ACTION_RESET_MATRIX 1210
#define UI_ACTION_CALIBRATE 1211 #define UI_ACTION_CALIBRATE 1211
#define UI_ACTION_BED_LED_CHANGE 1212 #define UI_ACTION_BED_LED_CHANGE 1212
#define UI_ACTION_COATING_CUSTOM 1213 #define UI_ACTION_COATING_CUSTOM 1213
#define UI_ACTION_BUILDTAK 1214 #define UI_ACTION_BUILDTAK 1214
// 1700-1956 language selectors // 1700-1956 language selectors
@ -232,6 +236,8 @@ What display type do you use?
#define UI_ACTION_LANGUAGE_FR 1707 #define UI_ACTION_LANGUAGE_FR 1707
#define UI_ACTION_LANGUAGE_CZ 1708 #define UI_ACTION_LANGUAGE_CZ 1708
#define UI_ACTION_LANGUAGE_PL 1709 #define UI_ACTION_LANGUAGE_PL 1709
#define UI_ACTION_LANGUAGE_TR 1710
#define UI_ACTION_LANGUAGE_FI 1711
#define UI_ACTION_MENU_XPOS 4000 #define UI_ACTION_MENU_XPOS 4000
#define UI_ACTION_MENU_YPOS 4001 #define UI_ACTION_MENU_YPOS 4001
@ -309,13 +315,13 @@ extern const int8_t encoder_table[16] PROGMEM ;
//#ifdef COMPILE_I2C_DRIVER //#ifdef COMPILE_I2C_DRIVER
/************************************************************************* /*************************************************************************
* Title: C include file for the I2C master interface Title: C include file for the I2C master interface
* (i2cmaster.S or twimaster.c) (i2cmaster.S or twimaster.c)
* Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
* File: $Id: i2cmaster.h,v 1.10 2005/03/06 22:39:57 Peter Exp $ File: $Id: i2cmaster.h,v 1.10 2005/03/06 22:39:57 Peter Exp $
* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3 Software: AVR-GCC 3.4.3 / avr-libc 1.2.3
* Target: any AVR device Target: any AVR device
* Usage: see Doxygen manual Usage: see Doxygen manual
**************************************************************************/ **************************************************************************/
@ -336,8 +342,8 @@ extern const int8_t encoder_table[16] PROGMEM ;
#define UI_KEYS_CLICKENCODER_HIGH_REV(pinA,pinB) uid.encoderLast = (uid.encoderLast << 2) & 0x0F;if (READ(pinA)) uid.encoderLast |=2;if (READ(pinB)) uid.encoderLast |=1; uid.encoderPos -= pgm_read_byte(&encoder_table[uid.encoderLast]); #define UI_KEYS_CLICKENCODER_HIGH_REV(pinA,pinB) uid.encoderLast = (uid.encoderLast << 2) & 0x0F;if (READ(pinA)) uid.encoderLast |=2;if (READ(pinB)) uid.encoderLast |=1; uid.encoderPos -= pgm_read_byte(&encoder_table[uid.encoderLast]);
#define UI_KEYS_BUTTON_HIGH(pin,action_) if(READ(pin)!=0) action=action_; #define UI_KEYS_BUTTON_HIGH(pin,action_) if(READ(pin)!=0) action=action_;
#define UI_KEYS_INIT_MATRIX(r1,r2,r3,r4,c1,c2,c3,c4) if(c1>=0){SET_INPUT(c1);WRITE(c1,HIGH);}if(c2>=0){SET_INPUT(c2);WRITE(c2,HIGH);}if(c3>=0){SET_INPUT(c3);WRITE(c3,HIGH);}\ #define UI_KEYS_INIT_MATRIX(r1,r2,r3,r4,c1,c2,c3,c4) if(c1>=0){SET_INPUT(c1);WRITE(c1,HIGH);}if(c2>=0){SET_INPUT(c2);WRITE(c2,HIGH);}if(c3>=0){SET_INPUT(c3);WRITE(c3,HIGH);}\
if(c4>=0) {SET_INPUT(c4);WRITE(c4,HIGH);}if(r1>=0)SET_OUTPUT(r1);if(r2>=0)SET_OUTPUT(r2);if(r3>=0)SET_OUTPUT(r3);if(r4>=0)SET_OUTPUT(r4);\ if(c4>=0) {SET_INPUT(c4);WRITE(c4,HIGH);}if(r1>=0)SET_OUTPUT(r1);if(r2>=0)SET_OUTPUT(r2);if(r3>=0)SET_OUTPUT(r3);if(r4>=0)SET_OUTPUT(r4);\
if(r1>=0)WRITE(r1,LOW);if(r2>=0)WRITE(r2,LOW);if(r3>=0)WRITE(r3,LOW);if(r4>=0)WRITE(r4,LOW); if(r1>=0)WRITE(r1,LOW);if(r2>=0)WRITE(r2,LOW);if(r3>=0)WRITE(r3,LOW);if(r4>=0)WRITE(r4,LOW);
// out.print_int_P(PSTR("r4=>c1:"),READ(c1));out.print_int_P(PSTR(" c2:"),READ(c2));out.print_int_P(PSTR(" c3:"),READ(c3));out.println_int_P(PSTR(" c4:"),READ(c4)); // out.print_int_P(PSTR("r4=>c1:"),READ(c1));out.print_int_P(PSTR(" c2:"),READ(c2));out.print_int_P(PSTR(" c3:"),READ(c3));out.println_int_P(PSTR(" c4:"),READ(c4));
#define UI_KEYS_MATRIX(r1,r2,r3,r4,c1,c2,c3,c4) {uint8_t r = (c1>=0?READ(c1):0) && (c2>=0?READ(c2):0) && (c3>=0?READ(c3):0) && (c4>=0?READ(c4):0);\ #define UI_KEYS_MATRIX(r1,r2,r3,r4,c1,c2,c3,c4) {uint8_t r = (c1>=0?READ(c1):0) && (c2>=0?READ(c2):0) && (c3>=0?READ(c3):0) && (c4>=0?READ(c4):0);\
if(!r) {\ if(!r) {\
@ -374,28 +380,28 @@ extern const int8_t encoder_table[16] PROGMEM ;
#define UI_KEYS_I2C_BUTTON_LOW(pin,action_) if((keymask & pin)==0) action=action_; #define UI_KEYS_I2C_BUTTON_LOW(pin,action_) if((keymask & pin)==0) action=action_;
#define UI_KEYS_I2C_CLICKENCODER_HIGH(pinA,pinB) uid.encoderLast = (uid.encoderLast << 2) & 0x0F;if (keymask & pinA) uid.encoderLast |=2;if (keymask & pinB) uid.encoderLast |=1; uid.encoderPos += pgm_read_byte(&encoder_table[uid.encoderLast]); #define UI_KEYS_I2C_CLICKENCODER_HIGH(pinA,pinB) uid.encoderLast = (uid.encoderLast << 2) & 0x0F;if (keymask & pinA) uid.encoderLast |=2;if (keymask & pinB) uid.encoderLast |=1; uid.encoderPos += pgm_read_byte(&encoder_table[uid.encoderLast]);
#define UI_KEYS_I2C_CLICKENCODER_HIGH_REV(pinA,pinB) uid.encoderLast = (uid.encoderLast << 2) & 0x0F;if (keymask & pinA) uid.encoderLast |=2;if (keymask & pinB) uid.encoderLast |=1; uid.encoderPos -= pgm_read_byte(&encoder_table[uid.encoderLast]); #define UI_KEYS_I2C_CLICKENCODER_HIGH_REV(pinA,pinB) uid.encoderLast = (uid.encoderLast << 2) & 0x0F;if (keymask & pinA) uid.encoderLast |=2;if (keymask & pinB) uid.encoderLast |=1; uid.encoderPos -= pgm_read_byte(&encoder_table[uid.encoderLast]);
#define UI_KEYS_I2C_BUTTON_HIGH(pin,action_) if((pin & keymask)!=0) action=action_; #define UI_KEYS_I2C_BUTTON_HIGH(pin,action_) if((pin & keymask) != 0) action=action_;
#define UI_STRING(name,text) const char PROGMEM name[] = text #define UI_STRING(name,text) const char PROGMEM name[] = text
#define UI_PAGE6(name,row1,row2,row3,row4,row5,row6) UI_STRING(name ## _1txt,row1);UI_STRING(name ## _2txt,row2);UI_STRING(name ## _3txt,row3);UI_STRING(name ## _4txt,row4);UI_STRING(name ## _5txt,row5);UI_STRING(name ## _6txt,row6);\ #define UI_PAGE6(name,row1,row2,row3,row4,row5,row6) UI_STRING(name ## _1txt,row1);UI_STRING(name ## _2txt,row2);UI_STRING(name ## _3txt,row3);UI_STRING(name ## _4txt,row4);UI_STRING(name ## _5txt,row5);UI_STRING(name ## _6txt,row6);\
UIMenuEntry name ## _1 PROGMEM ={name ## _1txt,0,0,0,0,0};\ UIMenuEntry name ## _1 PROGMEM ={name ## _1txt,0,0,0,0,0};\
UIMenuEntry name ## _2 PROGMEM ={name ## _2txt,0,0,0,0,0};\ UIMenuEntry name ## _2 PROGMEM ={name ## _2txt,0,0,0,0,0};\
UIMenuEntry name ## _3 PROGMEM ={name ## _3txt,0,0,0,0,0};\ UIMenuEntry name ## _3 PROGMEM ={name ## _3txt,0,0,0,0,0};\
UIMenuEntry name ## _4 PROGMEM ={name ## _4txt,0,0,0,0,0};\ UIMenuEntry name ## _4 PROGMEM ={name ## _4txt,0,0,0,0,0};\
UIMenuEntry name ## _5 PROGMEM ={name ## _5txt,0,0,0,0,0};\ UIMenuEntry name ## _5 PROGMEM ={name ## _5txt,0,0,0,0,0};\
UIMenuEntry name ## _6 PROGMEM ={name ## _6txt,0,0,0,0,0};\ UIMenuEntry name ## _6 PROGMEM ={name ## _6txt,0,0,0,0,0};\
const UIMenuEntry * const name ## _entries [] PROGMEM = {&name ## _1,&name ## _2,&name ## _3,&name ## _4,&name ## _5,&name ## _6};\ const UIMenuEntry * const name ## _entries [] PROGMEM = {&name ## _1,&name ## _2,&name ## _3,&name ## _4,&name ## _5,&name ## _6};\
const UIMenu name PROGMEM = {0,0,6,name ## _entries}; const UIMenu name PROGMEM = {0,0,6,name ## _entries};
#define UI_PAGE6_T(name,row1,row2,row3,row4,row5,row6) \ #define UI_PAGE6_T(name,row1,row2,row3,row4,row5,row6) \
UIMenuEntry name ## _1 PROGMEM ={0,0,0,0,0,row1};\ UIMenuEntry name ## _1 PROGMEM ={0,0,0,0,0,row1};\
UIMenuEntry name ## _2 PROGMEM ={0,0,0,0,0,row2};\ UIMenuEntry name ## _2 PROGMEM ={0,0,0,0,0,row2};\
UIMenuEntry name ## _3 PROGMEM ={0,0,0,0,0,row3};\ UIMenuEntry name ## _3 PROGMEM ={0,0,0,0,0,row3};\
UIMenuEntry name ## _4 PROGMEM ={0,0,0,0,0,row4};\ UIMenuEntry name ## _4 PROGMEM ={0,0,0,0,0,row4};\
UIMenuEntry name ## _5 PROGMEM ={0,0,0,0,0,row5};\ UIMenuEntry name ## _5 PROGMEM ={0,0,0,0,0,row5};\
UIMenuEntry name ## _6 PROGMEM ={0,0,0,0,0,row6};\ UIMenuEntry name ## _6 PROGMEM ={0,0,0,0,0,row6};\
const UIMenuEntry * const name ## _entries [] PROGMEM = {&name ## _1,&name ## _2,&name ## _3,&name ## _4,&name ## _5,&name ## _6};\ const UIMenuEntry * const name ## _entries [] PROGMEM = {&name ## _1,&name ## _2,&name ## _3,&name ## _4,&name ## _5,&name ## _6};\
const UIMenu name PROGMEM = {0,0,6,name ## _entries}; const UIMenu name PROGMEM = {0,0,6,name ## _entries};
#define UI_PAGE4(name,row1,row2,row3,row4) UI_STRING(name ## _1txt,row1);UI_STRING(name ## _2txt,row2);UI_STRING(name ## _3txt,row3);UI_STRING(name ## _4txt,row4);\ #define UI_PAGE4(name,row1,row2,row3,row4) UI_STRING(name ## _1txt,row1);UI_STRING(name ## _2txt,row2);UI_STRING(name ## _3txt,row3);UI_STRING(name ## _4txt,row4);\
UIMenuEntry name ## _1 PROGMEM ={name ## _1txt,0,0,0,0,0};\ UIMenuEntry name ## _1 PROGMEM ={name ## _1txt,0,0,0,0,0};\
UIMenuEntry name ## _2 PROGMEM ={name ## _2txt,0,0,0,0,0};\ UIMenuEntry name ## _2 PROGMEM ={name ## _2txt,0,0,0,0,0};\
@ -564,12 +570,16 @@ class UIDisplay {
int repeatDuration; // Time beween to actions if autorepeat is enabled int repeatDuration; // Time beween to actions if autorepeat is enabled
int8_t oldMenuLevel; int8_t oldMenuLevel;
uint8_t encoderStartScreen; uint8_t encoderStartScreen;
char printCols[MAX_COLS+1]; char printCols[MAX_COLS + 1];
void addInt(int value,uint8_t digits,char fillChar=' '); // Print int into printCols void addInt(int value, uint8_t digits, char fillChar = ' '); // Print int into printCols
void addLong(long value,int8_t digits); void addLong(long value, int8_t digits);
inline void addLong(long value) {addLong(value, -11);}; inline void addLong(long value) {
void addFloat(float number, char fixdigits,uint8_t digits); addLong(value, -11);
inline void addFloat(float number) {addFloat(number, -9,2);}; };
void addFloat(float number, char fixdigits, uint8_t digits);
inline void addFloat(float number) {
addFloat(number, -9, 2);
};
void addStringP(PGM_P text); void addStringP(PGM_P text);
void addStringOnOff(uint8_t); void addStringOnOff(uint8_t);
void addChar(const char c); void addChar(const char c);
@ -584,8 +594,8 @@ class UIDisplay {
void initialize(); // Initialize display and keys void initialize(); // Initialize display and keys
void waitForKey(); void waitForKey();
void printRow(uint8_t r, char *txt, char *txt2, uint8_t changeAtCol); // Print row on display void printRow(uint8_t r, char *txt, char *txt2, uint8_t changeAtCol); // Print row on display
void printRowP(uint8_t r,PGM_P txt); void printRowP(uint8_t r, PGM_P txt);
void parse(const char *txt,bool ram); /// Parse output and write to printCols; void parse(const char *txt, bool ram); /// Parse output and write to printCols;
void refreshPage(); void refreshPage();
int executeAction(unsigned int action, bool allowMoves); int executeAction(unsigned int action, bool allowMoves);
void finishAction(unsigned int action); void finishAction(unsigned int action);
@ -597,8 +607,12 @@ class UIDisplay {
void adjustMenuPos(); void adjustMenuPos();
void setStatusP(PGM_P txt, bool error = false); void setStatusP(PGM_P txt, bool error = false);
void setStatus(const char *txt, bool error = false); void setStatus(const char *txt, bool error = false);
inline void setOutputMaskBits(unsigned int bits) {outputMask |= bits;} inline void setOutputMaskBits(unsigned int bits) {
inline void unsetOutputMaskBits(unsigned int bits) {outputMask &= ~bits;} outputMask |= bits;
}
inline void unsetOutputMaskBits(unsigned int bits) {
outputMask &= ~bits;
}
void updateSDFileCount(); void updateSDFileCount();
void goDir(char *name); void goDir(char *name);
bool isDirname(char *name); bool isDirname(char *name);
@ -606,9 +620,9 @@ class UIDisplay {
bool isSticky(); bool isSticky();
void showLanguageSelectionWizard(); void showLanguageSelectionWizard();
#if UI_BED_COATING #if UI_BED_COATING
void menuAdjustHeight(const UIMenu *men,float offset); void menuAdjustHeight(const UIMenu *men, float offset);
#endif #endif
char cwd[SD_MAX_FOLDER_DEPTH*LONG_FILENAME_LENGTH+2]; char cwd[SD_MAX_FOLDER_DEPTH * LONG_FILENAME_LENGTH + 2];
uint8_t folderLevel; uint8_t folderLevel;
}; };
extern UIDisplay uid; extern UIDisplay uid;
@ -681,7 +695,6 @@ void uiCheckSlowKeys(uint16_t &action) {}
#define UI_ENCODER_B 37 #define UI_ENCODER_B 37
#define UI_ENCODER_CLICK 31 #define UI_ENCODER_CLICK 31
#define UI_RESET_PIN 41 #define UI_RESET_PIN 41
#else // Smartcontroller #else // Smartcontroller
#if MOTHERBOARD == 701 // Megatronics v2.0 #if MOTHERBOARD == 701 // Megatronics v2.0
@ -689,6 +702,10 @@ void uiCheckSlowKeys(uint16_t &action) {}
#define UI_DISPLAY_RS_PIN 14 #define UI_DISPLAY_RS_PIN 14
#define UI_DISPLAY_RW_PIN -1 #define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 15 #define UI_DISPLAY_ENABLE_PIN 15
#define UI_DISPLAY_D0_PIN -1
#define UI_DISPLAY_D1_PIN -1
#define UI_DISPLAY_D2_PIN -1
#define UI_DISPLAY_D3_PIN -1
#define UI_DISPLAY_D4_PIN 30 #define UI_DISPLAY_D4_PIN 30
#define UI_DISPLAY_D5_PIN 31 #define UI_DISPLAY_D5_PIN 31
#define UI_DISPLAY_D6_PIN 32 #define UI_DISPLAY_D6_PIN 32
@ -704,6 +721,10 @@ void uiCheckSlowKeys(uint16_t &action) {}
#define UI_DISPLAY_RS_PIN 32 #define UI_DISPLAY_RS_PIN 32
#define UI_DISPLAY_RW_PIN -1 #define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 31 #define UI_DISPLAY_ENABLE_PIN 31
#define UI_DISPLAY_D0_PIN -1
#define UI_DISPLAY_D1_PIN -1
#define UI_DISPLAY_D2_PIN -1
#define UI_DISPLAY_D3_PIN -1
#define UI_DISPLAY_D4_PIN 14 #define UI_DISPLAY_D4_PIN 14
#define UI_DISPLAY_D5_PIN 30 #define UI_DISPLAY_D5_PIN 30
#define UI_DISPLAY_D6_PIN 39 #define UI_DISPLAY_D6_PIN 39
@ -712,6 +733,7 @@ void uiCheckSlowKeys(uint16_t &action) {}
#define UI_ENCODER_B 44 #define UI_ENCODER_B 44
#define UI_ENCODER_CLICK 33 #define UI_ENCODER_CLICK 33
#define UI_INVERT_MENU_DIRECTION 1 #define UI_INVERT_MENU_DIRECTION 1
#define UI_RESET_PIN -1
#elif MOTHERBOARD == 80 // Rumba has different pins as RAMPS! #elif MOTHERBOARD == 80 // Rumba has different pins as RAMPS!
@ -720,10 +742,10 @@ void uiCheckSlowKeys(uint16_t &action) {}
#define UI_DISPLAY_RS_PIN 19 #define UI_DISPLAY_RS_PIN 19
#define UI_DISPLAY_RW_PIN -1 #define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 42 #define UI_DISPLAY_ENABLE_PIN 42
#define UI_DISPLAY_D0_PIN 18 #define UI_DISPLAY_D0_PIN -1
#define UI_DISPLAY_D1_PIN 38 #define UI_DISPLAY_D1_PIN -1
#define UI_DISPLAY_D2_PIN 41 #define UI_DISPLAY_D2_PIN -1
#define UI_DISPLAY_D3_PIN 40 #define UI_DISPLAY_D3_PIN -1
#define UI_DISPLAY_D4_PIN 18 #define UI_DISPLAY_D4_PIN 18
#define UI_DISPLAY_D5_PIN 38 #define UI_DISPLAY_D5_PIN 38
#define UI_DISPLAY_D6_PIN 41 #define UI_DISPLAY_D6_PIN 41
@ -833,11 +855,13 @@ void uiCheckSlowKeys(uint16_t &action) {}
#if FEATURE_CONTROLLER == CONTROLLER_BAM_DICE_DUE #if FEATURE_CONTROLLER == CONTROLLER_BAM_DICE_DUE
#define UI_ENCODER_SPEED 2 #define UI_ENCODER_SPEED 2
#endif #endif
#ifndef UI_INVERT_MENU_DIRECTION
#define UI_INVERT_MENU_DIRECTION 0 #define UI_INVERT_MENU_DIRECTION 0
#endif
#ifdef UI_MAIN #ifdef UI_MAIN
void uiInitKeys() { void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A,UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals. UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin
#if UI_RESET_PIN > -1 #if UI_RESET_PIN > -1
UI_KEYS_INIT_BUTTON_LOW(UI_RESET_PIN); // Kill pin UI_KEYS_INIT_BUTTON_LOW(UI_RESET_PIN); // Kill pin
@ -845,13 +869,13 @@ void uiInitKeys() {
} }
void uiCheckKeys(uint16_t &action) { void uiCheckKeys(uint16_t &action) {
#if FEATURE_CONTROLLER == CONTROLLER_BAM_DICE_DUE #if FEATURE_CONTROLLER == CONTROLLER_BAM_DICE_DUE
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_B,UI_ENCODER_A); // click encoder on pins 47 and 45. Phase is connected with gnd for signals. UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_B, UI_ENCODER_A); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
#else #else
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A,UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals. UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
#endif #endif
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK,UI_ACTION_OK); // push button, connects gnd to pin UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK); // push button, connects gnd to pin
#if UI_RESET_PIN > -1 #if UI_RESET_PIN > -1
UI_KEYS_BUTTON_LOW(UI_RESET_PIN,UI_ACTION_RESET); UI_KEYS_BUTTON_LOW(UI_RESET_PIN, UI_ACTION_RESET);
#endif #endif
} }
inline void uiCheckSlowEncoder() {} inline void uiCheckSlowEncoder() {}
@ -891,27 +915,27 @@ void uiCheckSlowKeys(uint16_t &action) {}
void uiInitKeys() {} void uiInitKeys() {}
void uiCheckKeys(uint16_t &action) {} void uiCheckKeys(uint16_t &action) {}
inline void uiCheckSlowEncoder() { inline void uiCheckSlowEncoder() {
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS+I2C_WRITE); HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_WRITE);
HAL::i2cWrite(0x12); // GIOA HAL::i2cWrite(0x12); // GIOA
HAL::i2cStop(); HAL::i2cStop();
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS+I2C_READ); HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_READ);
uint16_t keymask = HAL::i2cReadAck(); uint16_t keymask = HAL::i2cReadAck();
keymask = keymask + (HAL::i2cReadNak()<<8); keymask = keymask + (HAL::i2cReadNak() << 8);
HAL::i2cStop(); HAL::i2cStop();
} }
void uiCheckSlowKeys(uint16_t &action) { void uiCheckSlowKeys(uint16_t &action) {
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS+I2C_WRITE); HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_WRITE);
HAL::i2cWrite(0x12); // GPIOA HAL::i2cWrite(0x12); // GPIOA
HAL::i2cStop(); HAL::i2cStop();
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS+I2C_READ); HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_READ);
uint16_t keymask = HAL::i2cReadAck(); uint16_t keymask = HAL::i2cReadAck();
keymask = keymask + (HAL::i2cReadNak()<<8); keymask = keymask + (HAL::i2cReadNak() << 8);
HAL::i2cStop(); HAL::i2cStop();
UI_KEYS_I2C_BUTTON_LOW(4,UI_ACTION_PREVIOUS); // Up button UI_KEYS_I2C_BUTTON_LOW(4, UI_ACTION_PREVIOUS); // Up button
UI_KEYS_I2C_BUTTON_LOW(8,UI_ACTION_NEXT); // down button UI_KEYS_I2C_BUTTON_LOW(8, UI_ACTION_NEXT); // down button
UI_KEYS_I2C_BUTTON_LOW(16,UI_ACTION_BACK); // left button UI_KEYS_I2C_BUTTON_LOW(16, UI_ACTION_BACK); // left button
UI_KEYS_I2C_BUTTON_LOW(2,UI_ACTION_OK); // right button UI_KEYS_I2C_BUTTON_LOW(2, UI_ACTION_OK); // right button
UI_KEYS_I2C_BUTTON_LOW(1,UI_ACTION_MENU_QUICKSETTINGS); //Select button UI_KEYS_I2C_BUTTON_LOW(1, UI_ACTION_MENU_QUICKSETTINGS); //Select button
} }
#endif #endif
#endif // Controller 3 #endif // Controller 3
@ -955,11 +979,11 @@ void uiInitKeys() {
UI_KEYS_INIT_BUTTON_LOW(42); UI_KEYS_INIT_BUTTON_LOW(42);
} }
void uiCheckKeys(uint16_t &action) { void uiCheckKeys(uint16_t &action) {
UI_KEYS_BUTTON_LOW(4,UI_ACTION_OK); // push button, connects gnd to pin UI_KEYS_BUTTON_LOW(4, UI_ACTION_OK); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(5,UI_ACTION_NEXT); // push button, connects gnd to pin UI_KEYS_BUTTON_LOW(5, UI_ACTION_NEXT); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(6,UI_ACTION_PREVIOUS); // push button, connects gnd to pin UI_KEYS_BUTTON_LOW(6, UI_ACTION_PREVIOUS); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(11,UI_ACTION_BACK); // push button, connects gnd to pin UI_KEYS_BUTTON_LOW(11, UI_ACTION_BACK); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(42,UI_ACTION_SD_PRINT ); // push button, connects gnd to pin UI_KEYS_BUTTON_LOW(42, UI_ACTION_SD_PRINT ); // push button, connects gnd to pin
} }
inline void uiCheckSlowEncoder() {} inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {} void uiCheckSlowKeys(uint16_t &action) {}
@ -1021,27 +1045,27 @@ void uiCheckSlowKeys(uint16_t &action) {}
#define UI_I2C_KEY_ADDRESS 0x40 #define UI_I2C_KEY_ADDRESS 0x40
#ifdef UI_MAIN #ifdef UI_MAIN
void uiInitKeys() { void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A,UI_ENCODER_B); // click encoder on real pins. Phase is connected with gnd for signals. UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on real pins. Phase is connected with gnd for signals.
UI_KEYS_INIT_BUTTON_LOW(UI_RESET_PIN); // Kill pin UI_KEYS_INIT_BUTTON_LOW(UI_RESET_PIN); // Kill pin
} }
void uiCheckKeys(uint16_t &action) { void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A,UI_ENCODER_B); // click encoder on real pins UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A, UI_ENCODER_B); // click encoder on real pins
UI_KEYS_BUTTON_LOW(UI_RESET_PIN,UI_ACTION_RESET); UI_KEYS_BUTTON_LOW(UI_RESET_PIN, UI_ACTION_RESET);
} }
inline void uiCheckSlowEncoder() { }// not used in Viki inline void uiCheckSlowEncoder() { }// not used in Viki
void uiCheckSlowKeys(uint16_t &action) { void uiCheckSlowKeys(uint16_t &action) {
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS+I2C_WRITE); HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_WRITE);
HAL::i2cWrite(0x12); // GPIOA HAL::i2cWrite(0x12); // GPIOA
HAL::i2cStop(); HAL::i2cStop();
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS+I2C_READ); HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_READ);
unsigned int keymask = HAL::i2cReadAck(); unsigned int keymask = HAL::i2cReadAck();
keymask = keymask + (HAL::i2cReadNak()<<8); keymask = keymask + (HAL::i2cReadNak() << 8);
HAL::i2cStop(); HAL::i2cStop();
UI_KEYS_I2C_BUTTON_LOW(4,UI_ACTION_MENU_SDCARD); // Up button UI_KEYS_I2C_BUTTON_LOW(4, UI_ACTION_MENU_SDCARD); // Up button
UI_KEYS_I2C_BUTTON_LOW(8,UI_ACTION_MENU_QUICKSETTINGS); // down button UI_KEYS_I2C_BUTTON_LOW(8, UI_ACTION_MENU_QUICKSETTINGS); // down button
UI_KEYS_I2C_BUTTON_LOW(16,UI_ACTION_BACK); // left button UI_KEYS_I2C_BUTTON_LOW(16, UI_ACTION_BACK); // left button
UI_KEYS_I2C_BUTTON_LOW(2,UI_ACTION_MENU_POSITIONS); // right button UI_KEYS_I2C_BUTTON_LOW(2, UI_ACTION_MENU_POSITIONS); // right button
UI_KEYS_I2C_BUTTON_LOW(1,UI_ACTION_OK); //Select button UI_KEYS_I2C_BUTTON_LOW(1, UI_ACTION_OK); //Select button
} }
#endif #endif
@ -1092,46 +1116,46 @@ void uiCheckSlowKeys(uint16_t &action) {
#define UI_INVERT_MENU_DIRECTION 1 #define UI_INVERT_MENU_DIRECTION 1
#ifdef UI_MAIN #ifdef UI_MAIN
void uiInitKeys() { void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A,UI_ENCODER_B); UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B);
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK);
SET_OUTPUT(UI_SHIFT_CLK); SET_OUTPUT(UI_SHIFT_CLK);
SET_OUTPUT(UI_SHIFT_LD); SET_OUTPUT(UI_SHIFT_LD);
SET_INPUT(UI_SHIFT_OUT); SET_INPUT(UI_SHIFT_OUT);
WRITE(UI_SHIFT_OUT,HIGH); WRITE(UI_SHIFT_OUT, HIGH);
WRITE(UI_SHIFT_LD,HIGH); WRITE(UI_SHIFT_LD, HIGH);
} }
void uiCheckKeys(uint16_t &action) { void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A,UI_ENCODER_B); UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A, UI_ENCODER_B);
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK,UI_ACTION_OK); UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK);
} }
inline void uiCheckSlowEncoder() {} // not used inline void uiCheckSlowEncoder() {} // not used
void uiCheckSlowKeys(uint16_t &action) { void uiCheckSlowKeys(uint16_t &action) {
WRITE(UI_SHIFT_LD,LOW); WRITE(UI_SHIFT_LD, LOW);
WRITE(UI_SHIFT_LD,HIGH); WRITE(UI_SHIFT_LD, HIGH);
for(int8_t i = 1; i <= 8;i++) { for (int8_t i = 1; i <= 8; i++) {
if(!READ(UI_SHIFT_OUT)) { // pressed button = logical 0 (false) if (!READ(UI_SHIFT_OUT)) { // pressed button = logical 0 (false)
switch (i) { switch (i) {
case 1: action = UI_ACTION_Z_DOWN; break; // F3 case 1: action = UI_ACTION_Z_DOWN; break; // F3
case 2: action = UI_ACTION_Z_UP; break; // F2 case 2: action = UI_ACTION_Z_UP; break; // F2
case 3: action = UI_ACTION_EMERGENCY_STOP; break; // F1 case 3: action = UI_ACTION_EMERGENCY_STOP; break; // F1
case 4: action = UI_ACTION_Y_UP; break; // UP case 4: action = UI_ACTION_Y_UP; break; // UP
case 5: action = UI_ACTION_X_UP; break; // RIGHT case 5: action = UI_ACTION_X_UP; break; // RIGHT
case 6: action = UI_ACTION_HOME_ALL; break; // MID case 6: action = UI_ACTION_HOME_ALL; break; // MID
case 7: action = UI_ACTION_Y_DOWN; break; // DOWN case 7: action = UI_ACTION_Y_DOWN; break; // DOWN
case 8: action = UI_ACTION_X_DOWN; break; // LEFT case 8: action = UI_ACTION_X_DOWN; break; // LEFT
} }
i = 9; // if button detected, exit "for loop" i = 9; // if button detected, exit "for loop"
}
WRITE(UI_SHIFT_CLK,HIGH);
WRITE(UI_SHIFT_CLK,LOW);
} }
WRITE(UI_SHIFT_CLK, HIGH);
WRITE(UI_SHIFT_CLK, LOW);
}
} }
#endif #endif
#endif // Controller 6 #endif // Controller 6
@ -1171,14 +1195,14 @@ void uiCheckSlowKeys(uint16_t &action) {
#define UI_BUTTON_BACK 71 #define UI_BUTTON_BACK 71
#ifdef UI_MAIN #ifdef UI_MAIN
void uiInitKeys() { void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A,UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals. UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin
UI_KEYS_INIT_BUTTON_LOW(UI_BUTTON_BACK); UI_KEYS_INIT_BUTTON_LOW(UI_BUTTON_BACK);
} }
void uiCheckKeys(uint16_t &action) { void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW(UI_ENCODER_A,UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals. UI_KEYS_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK,UI_ACTION_OK); // push button, connects gnd to pin UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(UI_BUTTON_BACK,UI_ACTION_BACK); UI_KEYS_BUTTON_LOW(UI_BUTTON_BACK, UI_ACTION_BACK);
} }
inline void uiCheckSlowEncoder() {} inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {} void uiCheckSlowKeys(uint16_t &action) {}
@ -1199,11 +1223,11 @@ void uiCheckSlowKeys(uint16_t &action) {}
#define BEEPER_TYPE_INVERTING 0 #define BEEPER_TYPE_INVERTING 0
#if FEATURE_CONTROLLER == CONTROLLER_PIBOT16X2 #if FEATURE_CONTROLLER == CONTROLLER_PIBOT16X2
#define UI_COLS 16 #define UI_COLS 16
#define UI_ROWS 2 #define UI_ROWS 2
#else ////20x04 Display #else ////20x04 Display
#define UI_COLS 20 #define UI_COLS 20
#define UI_ROWS 4 #define UI_ROWS 4
#endif #endif
#ifdef PiBot_V_1_4 #ifdef PiBot_V_1_4
@ -1298,11 +1322,11 @@ void uiInitKeys() {
UI_KEYS_INIT_BUTTON_LOW(UI_BUTTON_SD_PRINT); UI_KEYS_INIT_BUTTON_LOW(UI_BUTTON_SD_PRINT);
} }
void uiCheckKeys(uint16_t &action) { void uiCheckKeys(uint16_t &action) {
UI_KEYS_BUTTON_LOW(UI_BUTTON_OK,UI_ACTION_OK); // push button, connects gnd to pin UI_KEYS_BUTTON_LOW(UI_BUTTON_OK, UI_ACTION_OK); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(UI_BUTTON_NEXT,UI_ACTION_NEXT); // push button, connects gnd to pin UI_KEYS_BUTTON_LOW(UI_BUTTON_NEXT, UI_ACTION_NEXT); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(UI_BUTTON_PREVIOUS,UI_ACTION_PREVIOUS); // push button, connects gnd to pin UI_KEYS_BUTTON_LOW(UI_BUTTON_PREVIOUS, UI_ACTION_PREVIOUS); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(UI_BUTTON_BACK,UI_ACTION_BACK); // push button, connects gnd to pin UI_KEYS_BUTTON_LOW(UI_BUTTON_BACK, UI_ACTION_BACK); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(UI_BUTTON_SD_PRINT,UI_ACTION_SD_PRINT ); // push button, connects gnd to pin UI_KEYS_BUTTON_LOW(UI_BUTTON_SD_PRINT, UI_ACTION_SD_PRINT ); // push button, connects gnd to pin
} }
inline void uiCheckSlowEncoder() {} inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {} void uiCheckSlowKeys(uint16_t &action) {}
@ -1339,12 +1363,12 @@ void uiCheckSlowKeys(uint16_t &action) {}
#define UI_INVERT_MENU_DIRECTION 0 #define UI_INVERT_MENU_DIRECTION 0
#ifdef UI_MAIN #ifdef UI_MAIN
void uiInitKeys() { void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A,UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals. UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin
} }
void uiCheckKeys(uint16_t &action) { void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A,UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals. UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK,UI_ACTION_OK); // push button, connects gnd to pin UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK); // push button, connects gnd to pin
} }
inline void uiCheckSlowEncoder() {} inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {} void uiCheckSlowKeys(uint16_t &action) {}
@ -1380,14 +1404,14 @@ void uiCheckSlowKeys(uint16_t &action) {}
#define UI_INVERT_MENU_DIRECTION 0 #define UI_INVERT_MENU_DIRECTION 0
#ifdef UI_MAIN #ifdef UI_MAIN
void uiInitKeys() { void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A,UI_ENCODER_B); UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B);
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK);
UI_KEYS_INIT_BUTTON_LOW(UI_KILL_PIN); UI_KEYS_INIT_BUTTON_LOW(UI_KILL_PIN);
} }
void uiCheckKeys(uint16_t &action) { void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A,UI_ENCODER_B); UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A, UI_ENCODER_B);
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK,UI_ACTION_OK); UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK);
UI_KEYS_BUTTON_LOW(UI_KILL_PIN,UI_ACTION_KILL); UI_KEYS_BUTTON_LOW(UI_KILL_PIN, UI_ACTION_KILL);
} }
inline void uiCheckSlowEncoder() {} inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {} void uiCheckSlowKeys(uint16_t &action) {}
@ -1429,34 +1453,34 @@ void uiCheckSlowKeys(uint16_t &action) {}
void uiInitKeys() {} void uiInitKeys() {}
void uiCheckKeys(uint16_t &action) {} void uiCheckKeys(uint16_t &action) {}
inline void uiCheckSlowEncoder() { inline void uiCheckSlowEncoder() {
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS+I2C_WRITE); HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_WRITE);
HAL::i2cWrite(0x12); // GIOA HAL::i2cWrite(0x12); // GIOA
HAL::i2cStop(); HAL::i2cStop();
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS+I2C_READ); HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_READ);
uint16_t keymask = HAL::i2cReadAck(); uint16_t keymask = HAL::i2cReadAck();
keymask = keymask + (HAL::i2cReadNak()<<8); keymask = keymask + (HAL::i2cReadNak() << 8);
HAL::i2cStop(); HAL::i2cStop();
} }
void uiCheckSlowKeys(uint16_t &action) { void uiCheckSlowKeys(uint16_t &action) {
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS+I2C_WRITE); HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_WRITE);
HAL::i2cWrite(0x12); // GPIOA HAL::i2cWrite(0x12); // GPIOA
HAL::i2cStop(); HAL::i2cStop();
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS+I2C_READ); HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_READ);
uint16_t keymask = HAL::i2cReadAck(); uint16_t keymask = HAL::i2cReadAck();
keymask = keymask + (HAL::i2cReadNak()<<8); keymask = keymask + (HAL::i2cReadNak() << 8);
HAL::i2cStop(); HAL::i2cStop();
UI_KEYS_I2C_BUTTON_LOW(_BV(4),UI_ACTION_OK); // push button, connects gnd to pin UI_KEYS_I2C_BUTTON_LOW(_BV(4), UI_ACTION_OK); // push button, connects gnd to pin
UI_KEYS_I2C_BUTTON_LOW(_BV(1),UI_ACTION_BACK); // push button, connects gnd to pin UI_KEYS_I2C_BUTTON_LOW(_BV(1), UI_ACTION_BACK); // push button, connects gnd to pin
UI_KEYS_I2C_BUTTON_LOW(_BV(0),UI_ACTION_SD_PRINT); // push button, connects gnd to pin UI_KEYS_I2C_BUTTON_LOW(_BV(0), UI_ACTION_SD_PRINT); // push button, connects gnd to pin
UI_KEYS_I2C_BUTTON_LOW(_BV(3),UI_ACTION_PREVIOUS); // Up button UI_KEYS_I2C_BUTTON_LOW(_BV(3), UI_ACTION_PREVIOUS); // Up button
UI_KEYS_I2C_BUTTON_LOW(_BV(2),UI_ACTION_NEXT); // down button UI_KEYS_I2C_BUTTON_LOW(_BV(2), UI_ACTION_NEXT); // down button
} }
#endif #endif
#endif // Controller 14 #endif // Controller 14
/* /*
Sanguinololu + panelolu2 Sanguinololu + panelolu2
*/ */
#if FEATURE_CONTROLLER == CONTROLLER_SANGUINOLOLU_PANELOLU2 #if FEATURE_CONTROLLER == CONTROLLER_SANGUINOLOLU_PANELOLU2
#define UI_HAS_KEYS 1 #define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 0 #define UI_HAS_BACK_KEY 0
@ -1499,13 +1523,13 @@ UI_KEYS_I2C_BUTTON_LOW(_BV(2),UI_ACTION_NEXT); // down button
#ifdef UI_MAIN #ifdef UI_MAIN
void uiInitKeys() { void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(10,11); // click encoder on pins 47 and 45. Phase is connected with gnd for signals. UI_KEYS_INIT_CLICKENCODER_LOW(10, 11); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_INIT_BUTTON_LOW(30); // push button, connects gnd to pin UI_KEYS_INIT_BUTTON_LOW(30); // push button, connects gnd to pin
} }
void uiCheckKeys(uint16_t &action) { void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW_REV(10,11); // click encoder on pins 47 and 45. Phase is connected with gnd for signals. UI_KEYS_CLICKENCODER_LOW_REV(10, 11); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_BUTTON_LOW(30,UI_ACTION_OK); // push button, connects gnd to pin UI_KEYS_BUTTON_LOW(30, UI_ACTION_OK); // push button, connects gnd to pin
} }
inline void uiCheckSlowEncoder() {} inline void uiCheckSlowEncoder() {}
@ -1569,14 +1593,14 @@ void uiCheckSlowKeys(uint16_t &action) {}
#ifdef UI_MAIN #ifdef UI_MAIN
void ui_init_keys() { void ui_init_keys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A,UI_ENCODER_B); UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B);
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK);
UI_KEYS_INIT_BUTTON_LOW(UI_KILL_PIN); UI_KEYS_INIT_BUTTON_LOW(UI_KILL_PIN);
} }
void ui_check_keys(int &action) { void ui_check_keys(int &action) {
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A,UI_ENCODER_B); UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A, UI_ENCODER_B);
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK,UI_ACTION_OK); UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK);
UI_KEYS_BUTTON_LOW(UI_KILL_PIN,UI_ACTION_KILL); UI_KEYS_BUTTON_LOW(UI_KILL_PIN, UI_ACTION_KILL);
} }
inline void ui_check_slow_encoder() {} inline void ui_check_slow_encoder() {}
void ui_check_slow_keys(int &action) {} void ui_check_slow_keys(int &action) {}
@ -1620,12 +1644,12 @@ void ui_check_slow_keys(int &action) {}
#ifdef UI_MAIN #ifdef UI_MAIN
void uiInitKeys() { void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A,UI_ENCODER_B); UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B);
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK);
} }
void uiCheckKeys(uint16_t &action) { void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A,UI_ENCODER_B); UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A, UI_ENCODER_B);
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK,UI_ACTION_OK); UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK);
} }
inline void uiCheckSlowEncoder() {} inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {} void uiCheckSlowKeys(uint16_t &action) {}
@ -1677,7 +1701,7 @@ void uiCheckSlowKeys(uint16_t &action) {}
// PINK.3, 86, D_E // PINK.3, 86, D_E
#define UI_DISPLAY_ENABLE_PIN 27 #define UI_DISPLAY_ENABLE_PIN 27
// PINF.5, 92, D_D4 // PINF.5, 92, D_D4
// PINF.5, 92, D_D4 // PINF.5, 92, D_D4
#define UI_DISPLAY_D4_PIN 29 #define UI_DISPLAY_D4_PIN 29
#define UI_ENCODER_A 35 #define UI_ENCODER_A 35
#define UI_ENCODER_B 33 #define UI_ENCODER_B 33
@ -1696,12 +1720,12 @@ void uiCheckSlowKeys(uint16_t &action) {}
#ifdef UI_MAIN #ifdef UI_MAIN
void uiInitKeys() { void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A,UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals. UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin; UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin;
} }
void uiCheckKeys(uint16_t &action) { void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW(UI_ENCODER_A,UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals. UI_KEYS_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK,UI_ACTION_OK); // push button, connects gnd to pin UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK); // push button, connects gnd to pin
} }
inline void uiCheckSlowEncoder() {} inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {} void uiCheckSlowKeys(uint16_t &action) {}
@ -1826,13 +1850,13 @@ void uiCheckSlowKeys(uint16_t &action) {}
//#define SPI_PIN 87 //#define SPI_PIN 87
//#define SPI_CHAN 1 //#define SPI_CHAN 1
/*#define SDSS 10 /*#define SDSS 10
#undef SPI_PIN #undef SPI_PIN
#define SPI_PIN 77 #define SPI_PIN 77
#undef SPI_CHAN #undef SPI_CHAN
#define SPI_CHAN 0 #define SPI_CHAN 0
#undef SDSUPPORT #undef SDSUPPORT
#define SDSUPPORT 0 // sd card does not work reliable due to spi charing #define SDSUPPORT 0 // sd card does not work reliable due to spi sharing
*/ */
#undef BEEPER_PIN #undef BEEPER_PIN
@ -1859,24 +1883,23 @@ void uiCheckSlowKeys(uint16_t &action) {}
// PWM1 Pin // PWM1 Pin
#define BLUE_STATUS_LED 5 #define BLUE_STATUS_LED 5
#else #else
#error No predefined Viki 2 mapping for your board available #error No predefined Viki 2 mapping for your board available
#endif #endif
#ifdef UI_MAIN #ifdef UI_MAIN
void uiInitKeys() { void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A,UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals. UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin
#if UI_RESET_PIN > -1 #if UI_RESET_PIN > -1
UI_KEYS_INIT_BUTTON_LOW(UI_RESET_PIN); // Kill pin UI_KEYS_INIT_BUTTON_LOW(UI_RESET_PIN); // Kill pin
#endif #endif
} }
void uiCheckKeys(uint16_t &action) { void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_B,UI_ENCODER_A); UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_B, UI_ENCODER_A);
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK,UI_ACTION_OK); UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK);
#if UI_RESET_PIN > -1 #if UI_RESET_PIN > -1
UI_KEYS_BUTTON_LOW(UI_RESET_PIN,UI_ACTION_RESET); UI_KEYS_BUTTON_LOW(UI_RESET_PIN, UI_ACTION_RESET);
#endif #endif
} }
inline void uiCheckSlowEncoder() {} inline void uiCheckSlowEncoder() {}
@ -1915,12 +1938,12 @@ void uiInitKeys() {
UI_KEYS_INIT_BUTTON_LOW(X_MIN_PIN); UI_KEYS_INIT_BUTTON_LOW(X_MIN_PIN);
} }
void uiCheckKeys(uint16_t &action) { void uiCheckKeys(uint16_t &action) {
UI_KEYS_BUTTON_LOW(33,UI_ACTION_OK); //35 push button, connects gnd to pin UI_KEYS_BUTTON_LOW(33, UI_ACTION_OK); //35 push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(35,UI_ACTION_PREVIOUS); //34 push button, connects gnd to pin UI_KEYS_BUTTON_LOW(35, UI_ACTION_PREVIOUS); //34 push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(31,UI_ACTION_NEXT); //43 push button, connects gnd to pin UI_KEYS_BUTTON_LOW(31, UI_ACTION_NEXT); //43 push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(29,UI_ACTION_BACK); //44 push button, connects gnd to pin UI_KEYS_BUTTON_LOW(29, UI_ACTION_BACK); //44 push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(37,UI_ACTION_MENU_SDCARD ); //33 push button, connects gnd to pin UI_KEYS_BUTTON_LOW(37, UI_ACTION_MENU_SDCARD ); //33 push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(X_MIN_PIN,UI_ACTION_RESET /*UI_ACTION_PAUSE*/); UI_KEYS_BUTTON_LOW(X_MIN_PIN, UI_ACTION_RESET /*UI_ACTION_PAUSE*/);
} }
inline void uiCheckSlowEncoder() {} inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {} void uiCheckSlowKeys(uint16_t &action) {}
@ -1928,28 +1951,102 @@ void uiCheckSlowKeys(uint16_t &action) {}
#endif #endif
#endif // CONTROLLER_LCD_MP_PHARAOH_DUE #endif // CONTROLLER_LCD_MP_PHARAOH_DUE
#if FEATURE_CONTROLLER == CONTROLLER_ZONESTAR
// Keypad
#if !defined(ADC_KEYPAD_PIN) || (ADC_KEYPAD_PIN < 0)
#error CONTROLLER_ZONESTAR requres ADC_KEYPAD_PIN = 1 defined in Configuration.h
#endif
// This must be defined in the Configuration.h since used in ADC tables
//#define ADC_KEYPAD_PIN 1 // A1 (D30, analog numbering)
// Display
#define UI_DISPLAY_TYPE DISPLAY_4BIT
#define UI_DISPLAY_CHARSET 1
#define UI_COLS 20
#define UI_ROWS 4
#define UI_DISPLAY_ENABLE_PIN 29 // A2
#define UI_DISPLAY_RS_PIN 28 // A3
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_D4_PIN 10
#define UI_DISPLAY_D5_PIN 11
#define UI_DISPLAY_D6_PIN 16
#define UI_DISPLAY_D7_PIN 17
// UI
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 1
#define UI_DELAYPERCHAR 50
#define UI_INVERT_MENU_DIRECTION 1
// Opportunity to override the Enter key via Configuration.h
// By default it duplicates the Right key, but could be set to
// anything else, e.g. UI_ACTION_TOP_MENU.
#ifndef ADC_KEYPAD_CENTER_ACTION
#define ADC_KEYPAD_CENTER_ACTION UI_ACTION_OK
#endif
#ifdef UI_MAIN
// Nothing to init since ADC is read in a loop if ADC_KEYPAD_PIN > -1
inline void uiInitKeys() {}
// Read and decode ADC keypad (fast reads)
void uiCheckKeys(uint16_t &action) {
struct {
uint16_t min;
uint16_t max;
uint16_t action;
} keys[] = {
{ 300, 500, UI_ACTION_BACK }, // Left
{ 570, 870, UI_ACTION_PREVIOUS }, // Up
{ 1150, 1450, ADC_KEYPAD_CENTER_ACTION }, // Center
{ 1900, 2200, UI_ACTION_OK }, // Right
{ 2670, 2870, UI_ACTION_NEXT } // Down
};
const uint8_t numOfKeys = sizeof(keys) / sizeof(keys[0]);
extern volatile uint16_t osAnalogInputValues[ANALOG_INPUTS];
uint16_t adc = osAnalogInputValues[KEYPAD_ANALOG_INDEX] >> (ANALOG_REDUCE_BITS);
if (adc < 4000) {
for (int8_t i = 0; i < numOfKeys; ++i) {
if ((adc > keys[i].min) && (adc < keys[i].max)) {
action = keys[i].action;
return;
}
}
}
}
// Read and decode ADC keypad (slow reads)
inline void uiCheckSlowKeys(uint16_t &action) {}
#endif // UI_MAIN
#endif // CONTROLLER_ZONESTAR
#ifndef UI_HAS_I2C_ENCODER #ifndef UI_HAS_I2C_ENCODER
#define UI_HAS_I2C_ENCODER 0 #define UI_HAS_I2C_ENCODER 0
#endif #endif
#if FEATURE_CONTROLLER != NO_CONTROLLER #if FEATURE_CONTROLLER != NO_CONTROLLER
#if UI_ROWS==4 #if UI_ROWS==4
#if UI_COLS==16 #if UI_COLS==16
#define UI_LINE_OFFSETS {0,0x40,0x10,0x50} // 4x16 #define UI_LINE_OFFSETS {0,0x40,0x10,0x50} // 4x16
#elif UI_COLS==20 #elif UI_COLS==20
//#define UI_LINE_OFFSETS {0,0x20,0x40,0x60} // 4x20 with KS0073 //#define UI_LINE_OFFSETS {0,0x20,0x40,0x60} // 4x20 with KS0073
#define UI_LINE_OFFSETS {0,0x40,0x14,0x54} // 4x20 with HD44780 #define UI_LINE_OFFSETS {0,0x40,0x14,0x54} // 4x20 with HD44780
#else #else
#if UI_DISPLAY_TYPE!=DISPLAY_GAMEDUINO2 #if UI_DISPLAY_TYPE!=DISPLAY_GAMEDUINO2
#error Unknown combination off rows/columns - define UI_LINE_OFFSETS manually. #error Unknown combination off rows/columns - define UI_LINE_OFFSETS manually.
#else #else
#define UI_LINE_OFFSETS {} // dummy never used #define UI_LINE_OFFSETS {} // dummy never used
#endif #endif
#endif #endif
#else #else
#define UI_LINE_OFFSETS {0,0x40,0x10,0x50} // 2x16, 2x20, 2x24 #define UI_LINE_OFFSETS {0,0x40,0x10,0x50} // 2x16, 2x20, 2x24
#endif #endif
#include "uilang.h" #include "uilang.h"
#endif #endif
#define UI_VERSION_STRING "Repetier " REPETIER_VERSION #define UI_VERSION_STRING "Repetier " REPETIER_VERSION
@ -2011,29 +2108,29 @@ void uiCheckSlowKeys(uint16_t &action) {}
// Beeper methods // Beeper methods
#if BEEPER_TYPE==0 #if BEEPER_TYPE==0
#define BEEP_SHORT {} #define BEEP_SHORT {}
#define BEEP_LONG {} #define BEEP_LONG {}
#else #else
#define BEEP_SHORT beep(BEEPER_SHORT_SEQUENCE); #define BEEP_SHORT beep(BEEPER_SHORT_SEQUENCE);
#define BEEP_LONG beep(BEEPER_LONG_SEQUENCE); #define BEEP_LONG beep(BEEPER_LONG_SEQUENCE);
#endif #endif
extern void beep(uint8_t duration,uint8_t count); extern void beep(uint8_t duration, uint8_t count);
#if (defined(USER_KEY1_PIN) && USER_KEY1_PIN > -1 && defined(USER_KEY1_ACTION)) || (defined(USER_KEY2_PIN) && USER_KEY2_PIN > -1 && defined(USER_KEY2_ACTION)) || (defined(USER_KEY3_PIN) && USER_KEY3_PIN > -1 && defined(USER_KEY3_ACTION)) || (defined(USER_KEY4_PIN) && USER_KEY4_PIN > -1 && defined(USER_KEY4_ACTION)) #if (defined(USER_KEY1_PIN) && USER_KEY1_PIN > -1 && defined(USER_KEY1_ACTION)) || (defined(USER_KEY2_PIN) && USER_KEY2_PIN > -1 && defined(USER_KEY2_ACTION)) || (defined(USER_KEY3_PIN) && USER_KEY3_PIN > -1 && defined(USER_KEY3_ACTION)) || (defined(USER_KEY4_PIN) && USER_KEY4_PIN > -1 && defined(USER_KEY4_ACTION))
#define HAS_USER_KEYS #define HAS_USER_KEYS
static void ui_check_Ukeys(uint16_t &action) { static void ui_check_Ukeys(uint16_t &action) {
#if defined(USER_KEY1_PIN) && USER_KEY1_PIN > -1 && defined(USER_KEY1_ACTION) #if defined(USER_KEY1_PIN) && USER_KEY1_PIN > -1 && defined(USER_KEY1_ACTION)
UI_KEYS_BUTTON_LOW(USER_KEY1_PIN, USER_KEY1_ACTION); UI_KEYS_BUTTON_LOW(USER_KEY1_PIN, USER_KEY1_ACTION);
#endif #endif
#if defined(USER_KEY2_PIN) && USER_KEY2_PIN > -1 && defined(USER_KEY2_ACTION) #if defined(USER_KEY2_PIN) && USER_KEY2_PIN > -1 && defined(USER_KEY2_ACTION)
UI_KEYS_BUTTON_LOW(USER_KEY2_PIN, USER_KEY2_ACTION); UI_KEYS_BUTTON_LOW(USER_KEY2_PIN, USER_KEY2_ACTION);
#endif #endif
#if defined(USER_KEY3_PIN) && USER_KEY3_PIN > -1 && defined(USER_KEY3_ACTION) #if defined(USER_KEY3_PIN) && USER_KEY3_PIN > -1 && defined(USER_KEY3_ACTION)
UI_KEYS_BUTTON_LOW(USER_KEY3_PIN, USER_KEY3_ACTION); UI_KEYS_BUTTON_LOW(USER_KEY3_PIN, USER_KEY3_ACTION);
#endif #endif
#if defined(USER_KEY4_PIN) && USER_KEY4_PIN > -1 && defined(USER_KEY4_ACTION) #if defined(USER_KEY4_PIN) && USER_KEY4_PIN > -1 && defined(USER_KEY4_ACTION)
UI_KEYS_BUTTON_LOW(USER_KEY4_PIN, USER_KEY4_ACTION); UI_KEYS_BUTTON_LOW(USER_KEY4_PIN, USER_KEY4_ACTION);
#endif #endif
} }
#endif #endif

View file

@ -113,6 +113,8 @@ What display type do you use?
#define U8GLIB_ST7920 #define U8GLIB_ST7920
// SSD1306 with software SPI // SSD1306 with software SPI
//#define U8GLIB_SSD1306_SW_SPI //#define U8GLIB_SSD1306_SW_SPI
// SH1106 with software SPI
// U8GLIB_SH1106_SW_SPI
// SSD1306 over I2C using hardware I2C pins // SSD1306 over I2C using hardware I2C pins
//#define U8GLIB_SSD1306_I2C //#define U8GLIB_SSD1306_I2C
// For the 8 bit ks0108 display you need to set these pins // For the 8 bit ks0108 display you need to set these pins

View file

@ -96,6 +96,7 @@ TRANS(UI_TEXT_DBG_ECHO_EN);
TRANS(UI_TEXT_DBG_INFO_EN); TRANS(UI_TEXT_DBG_INFO_EN);
TRANS(UI_TEXT_DBG_ERROR_EN); TRANS(UI_TEXT_DBG_ERROR_EN);
TRANS(UI_TEXT_DBG_DRYRUN_EN); TRANS(UI_TEXT_DBG_DRYRUN_EN);
TRANS(UI_TEXT_DBG_ENDSTOP_EN);
TRANS(UI_TEXT_OPS_OFF_EN); TRANS(UI_TEXT_OPS_OFF_EN);
TRANS(UI_TEXT_OPS_CLASSIC_EN); TRANS(UI_TEXT_OPS_CLASSIC_EN);
TRANS(UI_TEXT_OPS_FAST_EN); TRANS(UI_TEXT_OPS_FAST_EN);
@ -566,7 +567,8 @@ PGM_P const translations_en[NUM_TRANSLATED_WORDS] PROGMEM = {
FUI_TEXT_OFFSETS_EN, FUI_TEXT_OFFSETS_EN,
FUI_TEXT_X_OFFSET_EN, FUI_TEXT_X_OFFSET_EN,
FUI_TEXT_Y_OFFSET_EN, FUI_TEXT_Y_OFFSET_EN,
FUI_TEXT_Z_OFFSET_EN FUI_TEXT_Z_OFFSET_EN,
FUI_TEXT_DBG_ENDSTOP_EN
}; };
#define LANG_EN_TABLE translations_en #define LANG_EN_TABLE translations_en
#else #else
@ -638,6 +640,7 @@ TRANS(UI_TEXT_DBG_ECHO_DE);
TRANS(UI_TEXT_DBG_INFO_DE); TRANS(UI_TEXT_DBG_INFO_DE);
TRANS(UI_TEXT_DBG_ERROR_DE); TRANS(UI_TEXT_DBG_ERROR_DE);
TRANS(UI_TEXT_DBG_DRYRUN_DE); TRANS(UI_TEXT_DBG_DRYRUN_DE);
TRANS(UI_TEXT_DBG_ENDSTOP_DE);
TRANS(UI_TEXT_OPS_OFF_DE); TRANS(UI_TEXT_OPS_OFF_DE);
TRANS(UI_TEXT_OPS_CLASSIC_DE); TRANS(UI_TEXT_OPS_CLASSIC_DE);
TRANS(UI_TEXT_OPS_FAST_DE); TRANS(UI_TEXT_OPS_FAST_DE);
@ -1107,7 +1110,8 @@ PGM_P const translations_de[NUM_TRANSLATED_WORDS] PROGMEM = {
FUI_TEXT_OFFSETS_DE, FUI_TEXT_OFFSETS_DE,
FUI_TEXT_X_OFFSET_DE, FUI_TEXT_X_OFFSET_DE,
FUI_TEXT_Y_OFFSET_DE, FUI_TEXT_Y_OFFSET_DE,
FUI_TEXT_Z_OFFSET_DE FUI_TEXT_Z_OFFSET_DE,
FUI_TEXT_DBG_ENDSTOP_DE
}; };
#define LANG_DE_TABLE translations_de #define LANG_DE_TABLE translations_de
#else #else
@ -1179,6 +1183,7 @@ TRANS(UI_TEXT_DBG_ECHO_NL);
TRANS(UI_TEXT_DBG_INFO_NL); TRANS(UI_TEXT_DBG_INFO_NL);
TRANS(UI_TEXT_DBG_ERROR_NL); TRANS(UI_TEXT_DBG_ERROR_NL);
TRANS(UI_TEXT_DBG_DRYRUN_NL); TRANS(UI_TEXT_DBG_DRYRUN_NL);
TRANS(UI_TEXT_DBG_ENDSTOP_NL);
TRANS(UI_TEXT_OPS_OFF_NL); TRANS(UI_TEXT_OPS_OFF_NL);
TRANS(UI_TEXT_OPS_CLASSIC_NL); TRANS(UI_TEXT_OPS_CLASSIC_NL);
TRANS(UI_TEXT_OPS_FAST_NL); TRANS(UI_TEXT_OPS_FAST_NL);
@ -1648,7 +1653,8 @@ PGM_P const translations_nl[NUM_TRANSLATED_WORDS] PROGMEM = {
FUI_TEXT_OFFSETS_NL, FUI_TEXT_OFFSETS_NL,
FUI_TEXT_X_OFFSET_NL, FUI_TEXT_X_OFFSET_NL,
FUI_TEXT_Y_OFFSET_NL, FUI_TEXT_Y_OFFSET_NL,
FUI_TEXT_Z_OFFSET_NL FUI_TEXT_Z_OFFSET_NL,
FUI_TEXT_DBG_ENDSTOP_NL
}; };
#define LANG_NL_TABLE translations_nl #define LANG_NL_TABLE translations_nl
#else #else
@ -1721,6 +1727,7 @@ TRANS(UI_TEXT_DBG_ECHO_PT);
TRANS(UI_TEXT_DBG_INFO_PT); TRANS(UI_TEXT_DBG_INFO_PT);
TRANS(UI_TEXT_DBG_ERROR_PT); TRANS(UI_TEXT_DBG_ERROR_PT);
TRANS(UI_TEXT_DBG_DRYRUN_PT); TRANS(UI_TEXT_DBG_DRYRUN_PT);
TRANS(UI_TEXT_DBG_ENDSTOP_PT);
TRANS(UI_TEXT_OPS_OFF_PT); TRANS(UI_TEXT_OPS_OFF_PT);
TRANS(UI_TEXT_OPS_CLASSIC_PT); TRANS(UI_TEXT_OPS_CLASSIC_PT);
TRANS(UI_TEXT_OPS_FAST_PT); TRANS(UI_TEXT_OPS_FAST_PT);
@ -2190,7 +2197,8 @@ PGM_P const translations_pt[NUM_TRANSLATED_WORDS] PROGMEM = {
FUI_TEXT_OFFSETS_PT, FUI_TEXT_OFFSETS_PT,
FUI_TEXT_X_OFFSET_PT, FUI_TEXT_X_OFFSET_PT,
FUI_TEXT_Y_OFFSET_PT, FUI_TEXT_Y_OFFSET_PT,
FUI_TEXT_Z_OFFSET_PT FUI_TEXT_Z_OFFSET_PT,
FUI_TEXT_DBG_ENDSTOP_PT
}; };
#define LANG_PT_TABLE translations_pt #define LANG_PT_TABLE translations_pt
#else #else
@ -2263,6 +2271,7 @@ TRANS(UI_TEXT_DBG_ECHO_IT);
TRANS(UI_TEXT_DBG_INFO_IT); TRANS(UI_TEXT_DBG_INFO_IT);
TRANS(UI_TEXT_DBG_ERROR_IT); TRANS(UI_TEXT_DBG_ERROR_IT);
TRANS(UI_TEXT_DBG_DRYRUN_IT); TRANS(UI_TEXT_DBG_DRYRUN_IT);
TRANS(UI_TEXT_DBG_ENDSTOP_IT);
TRANS(UI_TEXT_OPS_OFF_IT); TRANS(UI_TEXT_OPS_OFF_IT);
TRANS(UI_TEXT_OPS_CLASSIC_IT); TRANS(UI_TEXT_OPS_CLASSIC_IT);
TRANS(UI_TEXT_OPS_FAST_IT); TRANS(UI_TEXT_OPS_FAST_IT);
@ -2732,7 +2741,8 @@ PGM_P const translations_it[NUM_TRANSLATED_WORDS] PROGMEM = {
FUI_TEXT_OFFSETS_IT, FUI_TEXT_OFFSETS_IT,
FUI_TEXT_X_OFFSET_IT, FUI_TEXT_X_OFFSET_IT,
FUI_TEXT_Y_OFFSET_IT, FUI_TEXT_Y_OFFSET_IT,
FUI_TEXT_Z_OFFSET_IT FUI_TEXT_Z_OFFSET_IT,
FUI_TEXT_DBG_ENDSTOP_IT
}; };
#define LANG_IT_TABLE translations_it #define LANG_IT_TABLE translations_it
#else #else
@ -2805,6 +2815,7 @@ TRANS(UI_TEXT_DBG_ECHO_ES);
TRANS(UI_TEXT_DBG_INFO_ES); TRANS(UI_TEXT_DBG_INFO_ES);
TRANS(UI_TEXT_DBG_ERROR_ES); TRANS(UI_TEXT_DBG_ERROR_ES);
TRANS(UI_TEXT_DBG_DRYRUN_ES); TRANS(UI_TEXT_DBG_DRYRUN_ES);
TRANS(UI_TEXT_DBG_ENDSTOP_ES);
TRANS(UI_TEXT_OPS_OFF_ES); TRANS(UI_TEXT_OPS_OFF_ES);
TRANS(UI_TEXT_OPS_CLASSIC_ES); TRANS(UI_TEXT_OPS_CLASSIC_ES);
TRANS(UI_TEXT_OPS_FAST_ES); TRANS(UI_TEXT_OPS_FAST_ES);
@ -3274,7 +3285,8 @@ PGM_P const translations_es[NUM_TRANSLATED_WORDS] PROGMEM = {
FUI_TEXT_OFFSETS_ES, FUI_TEXT_OFFSETS_ES,
FUI_TEXT_X_OFFSET_ES, FUI_TEXT_X_OFFSET_ES,
FUI_TEXT_Y_OFFSET_ES, FUI_TEXT_Y_OFFSET_ES,
FUI_TEXT_Z_OFFSET_ES FUI_TEXT_Z_OFFSET_ES,
FUI_TEXT_DBG_ENDSTOP_ES
}; };
#define LANG_ES_TABLE translations_es #define LANG_ES_TABLE translations_es
#else #else
@ -3347,6 +3359,7 @@ TRANS(UI_TEXT_DBG_ECHO_SE);
TRANS(UI_TEXT_DBG_INFO_SE); TRANS(UI_TEXT_DBG_INFO_SE);
TRANS(UI_TEXT_DBG_ERROR_SE); TRANS(UI_TEXT_DBG_ERROR_SE);
TRANS(UI_TEXT_DBG_DRYRUN_SE); TRANS(UI_TEXT_DBG_DRYRUN_SE);
TRANS(UI_TEXT_DBG_ENDSTOP_SE);
TRANS(UI_TEXT_OPS_OFF_SE); TRANS(UI_TEXT_OPS_OFF_SE);
TRANS(UI_TEXT_OPS_CLASSIC_SE); TRANS(UI_TEXT_OPS_CLASSIC_SE);
TRANS(UI_TEXT_OPS_FAST_SE); TRANS(UI_TEXT_OPS_FAST_SE);
@ -3816,7 +3829,8 @@ PGM_P const translations_se[NUM_TRANSLATED_WORDS] PROGMEM = {
FUI_TEXT_OFFSETS_SE, FUI_TEXT_OFFSETS_SE,
FUI_TEXT_X_OFFSET_SE, FUI_TEXT_X_OFFSET_SE,
FUI_TEXT_Y_OFFSET_SE, FUI_TEXT_Y_OFFSET_SE,
FUI_TEXT_Z_OFFSET_SE FUI_TEXT_Z_OFFSET_SE,
FUI_TEXT_DBG_ENDSTOP_SE
}; };
#define LANG_SE_TABLE translations_se #define LANG_SE_TABLE translations_se
#else #else
@ -3889,6 +3903,7 @@ TRANS(UI_TEXT_DBG_ECHO_FR);
TRANS(UI_TEXT_DBG_INFO_FR); TRANS(UI_TEXT_DBG_INFO_FR);
TRANS(UI_TEXT_DBG_ERROR_FR); TRANS(UI_TEXT_DBG_ERROR_FR);
TRANS(UI_TEXT_DBG_DRYRUN_FR); TRANS(UI_TEXT_DBG_DRYRUN_FR);
TRANS(UI_TEXT_DBG_ENDSTOP_FR);
TRANS(UI_TEXT_OPS_OFF_FR); TRANS(UI_TEXT_OPS_OFF_FR);
TRANS(UI_TEXT_OPS_CLASSIC_FR); TRANS(UI_TEXT_OPS_CLASSIC_FR);
TRANS(UI_TEXT_OPS_FAST_FR); TRANS(UI_TEXT_OPS_FAST_FR);
@ -4358,7 +4373,8 @@ PGM_P const translations_fr[NUM_TRANSLATED_WORDS] PROGMEM = {
FUI_TEXT_OFFSETS_FR, FUI_TEXT_OFFSETS_FR,
FUI_TEXT_X_OFFSET_FR, FUI_TEXT_X_OFFSET_FR,
FUI_TEXT_Y_OFFSET_FR, FUI_TEXT_Y_OFFSET_FR,
FUI_TEXT_Z_OFFSET_FR FUI_TEXT_Z_OFFSET_FR,
FUI_TEXT_DBG_ENDSTOP_FR
}; };
#define LANG_FR_TABLE translations_fr #define LANG_FR_TABLE translations_fr
#else #else
@ -4431,6 +4447,7 @@ TRANS(UI_TEXT_DBG_ECHO_CZ);
TRANS(UI_TEXT_DBG_INFO_CZ); TRANS(UI_TEXT_DBG_INFO_CZ);
TRANS(UI_TEXT_DBG_ERROR_CZ); TRANS(UI_TEXT_DBG_ERROR_CZ);
TRANS(UI_TEXT_DBG_DRYRUN_CZ); TRANS(UI_TEXT_DBG_DRYRUN_CZ);
TRANS(UI_TEXT_DBG_ENDSTOP_CZ);
TRANS(UI_TEXT_OPS_OFF_CZ); TRANS(UI_TEXT_OPS_OFF_CZ);
TRANS(UI_TEXT_OPS_CLASSIC_CZ); TRANS(UI_TEXT_OPS_CLASSIC_CZ);
TRANS(UI_TEXT_OPS_FAST_CZ); TRANS(UI_TEXT_OPS_FAST_CZ);
@ -4900,7 +4917,8 @@ PGM_P const translations_cz[NUM_TRANSLATED_WORDS] PROGMEM = {
FUI_TEXT_OFFSETS_CZ, FUI_TEXT_OFFSETS_CZ,
FUI_TEXT_X_OFFSET_CZ, FUI_TEXT_X_OFFSET_CZ,
FUI_TEXT_Y_OFFSET_CZ, FUI_TEXT_Y_OFFSET_CZ,
FUI_TEXT_Z_OFFSET_CZ FUI_TEXT_Z_OFFSET_CZ,
FUI_TEXT_DBG_ENDSTOP_CZ
}; };
#define LANG_CZ_TABLE translations_cz #define LANG_CZ_TABLE translations_cz
#else #else
@ -4973,6 +4991,7 @@ TRANS(UI_TEXT_DBG_ECHO_PL);
TRANS(UI_TEXT_DBG_INFO_PL); TRANS(UI_TEXT_DBG_INFO_PL);
TRANS(UI_TEXT_DBG_ERROR_PL); TRANS(UI_TEXT_DBG_ERROR_PL);
TRANS(UI_TEXT_DBG_DRYRUN_PL); TRANS(UI_TEXT_DBG_DRYRUN_PL);
TRANS(UI_TEXT_DBG_ENDSTOP_PL);
TRANS(UI_TEXT_OPS_OFF_PL); TRANS(UI_TEXT_OPS_OFF_PL);
TRANS(UI_TEXT_OPS_CLASSIC_PL); TRANS(UI_TEXT_OPS_CLASSIC_PL);
TRANS(UI_TEXT_OPS_FAST_PL); TRANS(UI_TEXT_OPS_FAST_PL);
@ -5442,7 +5461,8 @@ PGM_P const translations_pl[NUM_TRANSLATED_WORDS] PROGMEM = {
FUI_TEXT_OFFSETS_PL, FUI_TEXT_OFFSETS_PL,
FUI_TEXT_X_OFFSET_PL, FUI_TEXT_X_OFFSET_PL,
FUI_TEXT_Y_OFFSET_PL, FUI_TEXT_Y_OFFSET_PL,
FUI_TEXT_Z_OFFSET_PL FUI_TEXT_Z_OFFSET_PL,
FUI_TEXT_DBG_ENDSTOP_PL
}; };
#define LANG_PL_TABLE translations_pl #define LANG_PL_TABLE translations_pl
#else #else
@ -5514,6 +5534,7 @@ TRANS(UI_TEXT_DBG_ECHO_TR);
TRANS(UI_TEXT_DBG_INFO_TR); TRANS(UI_TEXT_DBG_INFO_TR);
TRANS(UI_TEXT_DBG_ERROR_TR); TRANS(UI_TEXT_DBG_ERROR_TR);
TRANS(UI_TEXT_DBG_DRYRUN_TR); TRANS(UI_TEXT_DBG_DRYRUN_TR);
TRANS(UI_TEXT_DBG_ENDSTOP_TR);
TRANS(UI_TEXT_OPS_OFF_TR); TRANS(UI_TEXT_OPS_OFF_TR);
TRANS(UI_TEXT_OPS_CLASSIC_TR); TRANS(UI_TEXT_OPS_CLASSIC_TR);
TRANS(UI_TEXT_OPS_FAST_TR); TRANS(UI_TEXT_OPS_FAST_TR);
@ -5984,27 +6005,573 @@ PGM_P const translations_TR[NUM_TRANSLATED_WORDS] PROGMEM = {
FUI_TEXT_OFFSETS_TR, FUI_TEXT_OFFSETS_TR,
FUI_TEXT_X_OFFSET_TR, FUI_TEXT_X_OFFSET_TR,
FUI_TEXT_Y_OFFSET_TR, FUI_TEXT_Y_OFFSET_TR,
FUI_TEXT_Z_OFFSET_TR FUI_TEXT_Z_OFFSET_TR,
FUI_TEXT_DBG_ENDSTOP_TR
}; };
#define LANG_TR_TABLE translations_TR #define LANG_TR_TABLE translations_TR
#else #else
#define LANG_TR_TABLE NULL #define LANG_TR_TABLE NULL
#endif // LANGUAGE_TR_ACTIVE #endif // LANGUAGE_TR_ACTIVE
#if LANGUAGE_TR_ACTIVE
TRANS(UI_TEXT_ON_FI);
TRANS(UI_TEXT_OFF_FI);
TRANS(UI_TEXT_NA_FI);
TRANS(UI_TEXT_YES_FI);
TRANS(UI_TEXT_NO_FI);
TRANS(UI_TEXT_PRINT_POS_FI);
TRANS(UI_TEXT_PRINTING_FI);
TRANS(UI_TEXT_IDLE_FI);
TRANS(UI_TEXT_NOSDCARD_FI);
TRANS(UI_TEXT_ERROR_FI);
TRANS(UI_TEXT_BACK_FI);
TRANS(UI_TEXT_QUICK_SETTINGS_FI);
TRANS(UI_TEXT_ERRORMSG_FI);
TRANS(UI_TEXT_CONFIGURATION_FI);
TRANS(UI_TEXT_POSITION_FI);
TRANS(UI_TEXT_EXTRUDER_FI);
TRANS(UI_TEXT_SD_CARD_FI);
TRANS(UI_TEXT_DEBUGGING_FI);
TRANS(UI_TEXT_HOME_DELTA_FI);
TRANS(UI_TEXT_HOME_ALL_FI);
TRANS(UI_TEXT_HOME_X_FI);
TRANS(UI_TEXT_HOME_Y_FI);
TRANS(UI_TEXT_HOME_Z_FI);
TRANS(UI_TEXT_PREHEAT_PLA_FI);
TRANS(UI_TEXT_PREHEAT_ABS_FI);
TRANS(UI_TEXT_LIGHTS_ONOFF_FI);
TRANS(UI_TEXT_COOLDOWN_FI);
TRANS(UI_TEXT_SET_TO_ORIGIN_FI);
TRANS(UI_TEXT_DISABLE_STEPPER_FI);
TRANS(UI_TEXT_X_POSITION_FI);
TRANS(UI_TEXT_X_POS_FAST_FI);
TRANS(UI_TEXT_Y_POSITION_FI);
TRANS(UI_TEXT_Y_POS_FAST_FI);
TRANS(UI_TEXT_Z_POSITION_FI);
TRANS(UI_TEXT_Z_POS_FAST_FI);
TRANS(UI_TEXT_E_POSITION_FI);
TRANS(UI_TEXT_BED_TEMP_FI);
TRANS(UI_TEXT_EXTR0_TEMP_FI);
TRANS(UI_TEXT_EXTR1_TEMP_FI);
TRANS(UI_TEXT_EXTR2_TEMP_FI);
TRANS(UI_TEXT_EXTR0_OFF_FI);
TRANS(UI_TEXT_EXTR1_OFF_FI);
TRANS(UI_TEXT_EXTR2_OFF_FI);
TRANS(UI_TEXT_EXTR0_SELECT_FI);
TRANS(UI_TEXT_EXTR1_SELECT_FI);
TRANS(UI_TEXT_EXTR2_SELECT_FI);
TRANS(UI_TEXT_EXTR_ORIGIN_FI);
TRANS(UI_TEXT_PRINT_X_FI);
TRANS(UI_TEXT_PRINT_Y_FI);
TRANS(UI_TEXT_PRINT_Z_FI);
TRANS(UI_TEXT_PRINT_Z_DELTA_FI);
TRANS(UI_TEXT_MOVE_X_FI);
TRANS(UI_TEXT_MOVE_Y_FI);
TRANS(UI_TEXT_MOVE_Z_FI);
TRANS(UI_TEXT_MOVE_Z_DELTA_FI);
TRANS(UI_TEXT_JERK_FI);
TRANS(UI_TEXT_ZJERK_FI);
TRANS(UI_TEXT_ACCELERATION_FI);
TRANS(UI_TEXT_STORE_TO_EEPROM_FI);
TRANS(UI_TEXT_LOAD_EEPROM_FI);
TRANS(UI_TEXT_DBG_ECHO_FI);
TRANS(UI_TEXT_DBG_INFO_FI);
TRANS(UI_TEXT_DBG_ERROR_FI);
TRANS(UI_TEXT_DBG_DRYRUN_FI);
TRANS(UI_TEXT_DBG_ENDSTOP_FI);
TRANS(UI_TEXT_OPS_OFF_FI);
TRANS(UI_TEXT_OPS_CLASSIC_FI);
TRANS(UI_TEXT_OPS_FAST_FI);
TRANS(UI_TEXT_OPS_RETRACT_FI);
TRANS(UI_TEXT_OPS_BACKSLASH_FI);
TRANS(UI_TEXT_OPS_MINDIST_FI);
TRANS(UI_TEXT_OPS_MOVE_AFTER_FI);
TRANS(UI_TEXT_ANTI_OOZE_FI);
TRANS(UI_TEXT_PRINT_FILE_FI);
TRANS(UI_TEXT_PAUSE_PRINT_FI);
TRANS(UI_TEXT_CONTINUE_PRINT_FI);
TRANS(UI_TEXT_UNMOUNT_CARD_FI);
TRANS(UI_TEXT_MOUNT_CARD_FI);
TRANS(UI_TEXT_DELETE_FILE_FI);
TRANS(UI_TEXT_FEEDRATE_FI);
TRANS(UI_TEXT_FEED_MAX_X_FI);
TRANS(UI_TEXT_FEED_MAX_Y_FI);
TRANS(UI_TEXT_FEED_MAX_Z_FI);
TRANS(UI_TEXT_FEED_MAX_Z_DELTA_FI);
TRANS(UI_TEXT_FEED_HOME_X_FI);
TRANS(UI_TEXT_FEED_HOME_Y_FI);
TRANS(UI_TEXT_FEED_HOME_Z_FI);
TRANS(UI_TEXT_FEED_HOME_Z_DELTA_FI);
TRANS(UI_TEXT_ACTION_XPOSITION4A_FI);
TRANS(UI_TEXT_ACTION_XPOSITION4B_FI);
TRANS(UI_TEXT_ACTION_XPOSITION4C_FI);
TRANS(UI_TEXT_ACTION_XPOSITION4D_FI);
TRANS(UI_TEXT_ACTION_YPOSITION4A_FI);
TRANS(UI_TEXT_ACTION_YPOSITION4B_FI);
TRANS(UI_TEXT_ACTION_YPOSITION4C_FI);
TRANS(UI_TEXT_ACTION_YPOSITION4D_FI);
TRANS(UI_TEXT_ACTION_ZPOSITION4A_FI);
TRANS(UI_TEXT_ACTION_ZPOSITION4B_FI);
TRANS(UI_TEXT_ACTION_ZPOSITION4C_FI);
TRANS(UI_TEXT_ACTION_ZPOSITION4D_FI);
TRANS(UI_TEXT_ACTION_XPOSITION_FAST4A_FI);
TRANS(UI_TEXT_ACTION_XPOSITION_FAST4B_FI);
TRANS(UI_TEXT_ACTION_XPOSITION_FAST4C_FI);
TRANS(UI_TEXT_ACTION_XPOSITION_FAST4D_FI);
TRANS(UI_TEXT_ACTION_YPOSITION_FAST4A_FI);
TRANS(UI_TEXT_ACTION_YPOSITION_FAST4B_FI);
TRANS(UI_TEXT_ACTION_YPOSITION_FAST4C_FI);
TRANS(UI_TEXT_ACTION_YPOSITION_FAST4D_FI);
TRANS(UI_TEXT_ACTION_ZPOSITION_FAST4A_FI);
TRANS(UI_TEXT_ACTION_ZPOSITION_FAST4B_FI);
TRANS(UI_TEXT_ACTION_ZPOSITION_FAST4C_FI);
TRANS(UI_TEXT_ACTION_ZPOSITION_FAST4D_FI);
TRANS(UI_TEXT_ACTION_EPOSITION_FAST2A_FI);
TRANS(UI_TEXT_ACTION_EPOSITION_FAST2B_FI);
TRANS(UI_TEXT_ACTION_XPOSITION2A_FI);
TRANS(UI_TEXT_ACTION_XPOSITION2B_FI);
TRANS(UI_TEXT_ACTION_YPOSITION2A_FI);
TRANS(UI_TEXT_ACTION_YPOSITION2B_FI);
TRANS(UI_TEXT_ACTION_ZPOSITION2A_FI);
TRANS(UI_TEXT_ACTION_ZPOSITION2B_FI);
TRANS(UI_TEXT_ACTION_XPOSITION_FAST2A_FI);
TRANS(UI_TEXT_ACTION_XPOSITION_FAST2B_FI);
TRANS(UI_TEXT_ACTION_YPOSITION_FAST2A_FI);
TRANS(UI_TEXT_ACTION_YPOSITION_FAST2B_FI);
TRANS(UI_TEXT_ACTION_ZPOSITION_FAST2A_FI);
TRANS(UI_TEXT_ACTION_ZPOSITION_FAST2B_FI);
TRANS(UI_TEXT_FANSPEED_FI);
TRANS(UI_TEXT_ACTION_FANSPEED_FI);
TRANS(UI_TEXT_FAN_OFF_FI);
TRANS(UI_TEXT_FAN_25_FI);
TRANS(UI_TEXT_FAN_50_FI);
TRANS(UI_TEXT_FAN_75_FI);
TRANS(UI_TEXT_FAN_FULL_FI);
TRANS(UI_TEXT_STEPPER_INACTIVE_FI);
TRANS(UI_TEXT_STEPPER_INACTIVE2A_FI);
TRANS(UI_TEXT_STEPPER_INACTIVE2B_FI);
TRANS(UI_TEXT_POWER_INACTIVE_FI);
TRANS(UI_TEXT_POWER_INACTIVE2A_FI);
TRANS(UI_TEXT_POWER_INACTIVE2B_FI);
TRANS(UI_TEXT_GENERAL_FI);
TRANS(UI_TEXT_BAUDRATE_FI);
TRANS(UI_TEXT_EXTR_STEPS_FI);
TRANS(UI_TEXT_EXTR_START_FEED_FI);
TRANS(UI_TEXT_EXTR_MAX_FEED_FI);
TRANS(UI_TEXT_EXTR_ACCEL_FI);
TRANS(UI_TEXT_EXTR_WATCH_FI);
TRANS(UI_TEXT_EXTR_ADVANCE_L_FI);
TRANS(UI_TEXT_EXTR_ADVANCE_K_FI);
TRANS(UI_TEXT_EXTR_MANAGER_FI);
TRANS(UI_TEXT_EXTR_PGAIN_FI);
TRANS(UI_TEXT_EXTR_DEADTIME_FI);
TRANS(UI_TEXT_EXTR_DMAX_DT_FI);
TRANS(UI_TEXT_EXTR_IGAIN_FI);
TRANS(UI_TEXT_EXTR_DGAIN_FI);
TRANS(UI_TEXT_EXTR_DMIN_FI);
TRANS(UI_TEXT_EXTR_DMAX_FI);
TRANS(UI_TEXT_EXTR_PMAX_FI);
TRANS(UI_TEXT_EXTR_XOFF_FI);
TRANS(UI_TEXT_EXTR_YOFF_FI);
TRANS(UI_TEXT_STRING_HM_BANGBANG_FI);
TRANS(UI_TEXT_STRING_HM_PID_FI);
TRANS(UI_TEXT_STRING_ACTION_FI);
TRANS(UI_TEXT_HEATING_EXTRUDER_FI);
TRANS(UI_TEXT_HEATING_BED_FI);
TRANS(UI_TEXT_KILLED_FI);
TRANS(UI_TEXT_STEPPER_DISABLED_FI);
TRANS(UI_TEXT_EEPROM_STOREDA_FI);
TRANS(UI_TEXT_EEPROM_STOREDB_FI);
TRANS(UI_TEXT_EEPROM_LOADEDA_FI);
TRANS(UI_TEXT_EEPROM_LOADEDB_FI);
TRANS(UI_TEXT_UPLOADING_FI);
TRANS(UI_TEXT_PAGE_BUFFER_FI);
TRANS(UI_TEXT_PAGE_EXTRUDER_FI);
TRANS(UI_TEXT_PAGE_EXTRUDER1_FI);
TRANS(UI_TEXT_PAGE_EXTRUDER2_FI);
TRANS(UI_TEXT_PAGE_EXTRUDER3_FI);
TRANS(UI_TEXT_PAGE_BED_FI);
TRANS(UI_TEXT_SPEED_MULTIPLY_FI);
TRANS(UI_TEXT_FLOW_MULTIPLY_FI);
TRANS(UI_TEXT_SHOW_MEASUREMENT_FI);
TRANS(UI_TEXT_RESET_MEASUREMENT_FI);
TRANS(UI_TEXT_SET_MEASURED_ORIGIN_FI);
TRANS(UI_TEXT_ZCALIB_FI);
TRANS(UI_TEXT_SET_P1_FI);
TRANS(UI_TEXT_SET_P2_FI);
TRANS(UI_TEXT_SET_P3_FI);
TRANS(UI_TEXT_CALCULATE_LEVELING_FI);
TRANS(UI_TEXT_LEVEL_FI);
TRANS(UI_TEXT_EXTR_WAIT_RETRACT_TEMP_FI);
TRANS(UI_TEXT_EXTR_WAIT_RETRACT_UNITS_FI);
TRANS(UI_TEXT_SD_REMOVED_FI);
TRANS(UI_TEXT_SD_INSERTED_FI);
TRANS(UI_TEXT_PRINTER_READY_FI);
TRANS(UI_TEXT_PRINTTIME_DAYS_FI);
TRANS(UI_TEXT_PRINTTIME_HOURS_FI);
TRANS(UI_TEXT_PRINTTIME_MINUTES_FI);
TRANS(UI_TEXT_PRINT_TIME_FI);
TRANS(UI_TEXT_PRINT_FILAMENT_FI);
TRANS(UI_TEXT_PRINTED_FI);
TRANS(UI_TEXT_POWER_FI);
TRANS(UI_TEXT_STRING_HM_DEADTIME_FI);
TRANS(UI_TEXT_STRING_HM_SLOWBANG_FI);
TRANS(UI_TEXT_STOP_PRINT_FI);
TRANS(UI_TEXT_Z_BABYSTEPPING_FI);
TRANS(UI_TEXT_CHANGE_FILAMENT_FI);
TRANS(UI_TEXT_WIZ_CH_FILAMENT1_FI);
TRANS(UI_TEXT_WIZ_CH_FILAMENT2_FI);
TRANS(UI_TEXT_WIZ_CH_FILAMENT3_FI);
TRANS(UI_TEXT_CLICK_DONE_FI);
TRANS(UI_TEXT_AUTOLEVEL_ONOFF_FI);
TRANS(UI_TEXT_SERVOPOS_FI);
TRANS(UI_TEXT_IGNORE_M106_FI);
TRANS(UI_TEXT_WIZ_REHEAT1_FI);
TRANS(UI_TEXT_WIZ_REHEAT2_FI);
TRANS(UI_TEXT_WIZ_WAITTEMP1_FI);
TRANS(UI_TEXT_WIZ_WAITTEMP2_FI);
TRANS(UI_TEXT_EXTRUDER_JAM_FI);
TRANS(UI_TEXT_STANDBY_FI);
TRANS(UI_TEXT_BED_COATING_FI);
TRANS(UI_TEXT_BED_COATING_SET1_FI);
TRANS(UI_TEXT_BED_COATING_SET2_FI);
TRANS(UI_TEXT_NOCOATING_FI);
TRANS(UI_TEXT_BUILDTAK_FI);
TRANS(UI_TEXT_KAPTON_FI);
TRANS(UI_TEXT_BLUETAPE_FI);
TRANS(UI_TEXT_PETTAPE_FI);
TRANS(UI_TEXT_GLUESTICK_FI);
TRANS(UI_TEXT_CUSTOM_FI);
TRANS(UI_TEXT_COATING_CUSTOM_FI);
TRANS(UI_TEXT_LANGUAGE_FI);
TRANS(UI_TEXT_MAINPAGE6_1_FI);
TRANS(UI_TEXT_MAINPAGE6_2_FI);
TRANS(UI_TEXT_MAINPAGE6_3_FI);
TRANS(UI_TEXT_MAINPAGE6_4_FI);
TRANS(UI_TEXT_MAINPAGE6_5_FI);
TRANS(UI_TEXT_MAINPAGE6_6_FI);
TRANS(UI_TEXT_MAINPAGE_TEMP_BED_FI);
TRANS(UI_TEXT_MAINPAGE_BED_FI);
TRANS(UI_TEXT_MAINPAGE_Z_BUF_FI);
TRANS(UI_TEXT_MAINPAGE_MUL_EUSAGE_FI);
TRANS(UI_TEXT_MAINPAGE_XY_FI);
TRANS(UI_TEXT_PRINT_TIME_VALUE_FI);
TRANS(UI_TEXT_PRINT_FILAMENT_VALUE_FI);
TRANS(UI_TEXT_METER_PRINTED_FI);
TRANS(UI_TEXT_STATUS_FI);
TRANS(UI_TEXT_EMPTY_FI);
TRANS(UI_TEXT_TEMP_SET_FI);
TRANS(UI_TEXT_CURRENT_TEMP_FI);
TRANS(UI_TEXT_COATING_THICKNESS_FI);
TRANS(UI_TEXT_EXTR3_TEMP_FI);
TRANS(UI_TEXT_EXTR4_TEMP_FI);
TRANS(UI_TEXT_EXTR5_TEMP_FI);
TRANS(UI_TEXT_EXTR3_OFF_FI);
TRANS(UI_TEXT_EXTR4_OFF_FI);
TRANS(UI_TEXT_EXTR5_OFF_FI);
TRANS(UI_TEXT_EXTR3_SELECT_FI);
TRANS(UI_TEXT_EXTR4_SELECT_FI);
TRANS(UI_TEXT_EXTR5_SELECT_FI);
TRANS(UI_TEXT_DITTO_0_FI);
TRANS(UI_TEXT_DITTO_1_FI);
TRANS(UI_TEXT_DITTO_2_FI);
TRANS(UI_TEXT_DITTO_3_FI);
TRANS(UI_TEXT_ZPROBE_HEIGHT_FI);
TRANS(UI_TEXT_OFFSETS_FI);
TRANS(UI_TEXT_X_OFFSET_FI);
TRANS(UI_TEXT_Y_OFFSET_FI);
TRANS(UI_TEXT_Z_OFFSET_FI);
PGM_P const translations_FI[NUM_TRANSLATED_WORDS] PROGMEM = {
FUI_TEXT_ON_FI,
FUI_TEXT_OFF_FI,
FUI_TEXT_NA_FI,
FUI_TEXT_YES_FI,
FUI_TEXT_NO_FI,
FUI_TEXT_PRINT_POS_FI,
FUI_TEXT_PRINTING_FI,
FUI_TEXT_IDLE_FI,
FUI_TEXT_NOSDCARD_FI,
FUI_TEXT_ERROR_FI,
FUI_TEXT_BACK_FI,
FUI_TEXT_QUICK_SETTINGS_FI,
FUI_TEXT_ERRORMSG_FI,
FUI_TEXT_CONFIGURATION_FI,
FUI_TEXT_POSITION_FI,
FUI_TEXT_EXTRUDER_FI,
FUI_TEXT_SD_CARD_FI,
FUI_TEXT_DEBUGGING_FI,
FUI_TEXT_HOME_DELTA_FI,
FUI_TEXT_HOME_ALL_FI,
FUI_TEXT_HOME_X_FI,
FUI_TEXT_HOME_Y_FI,
FUI_TEXT_HOME_Z_FI,
FUI_TEXT_PREHEAT_PLA_FI,
FUI_TEXT_PREHEAT_ABS_FI,
FUI_TEXT_LIGHTS_ONOFF_FI,
FUI_TEXT_COOLDOWN_FI,
FUI_TEXT_SET_TO_ORIGIN_FI,
FUI_TEXT_DISABLE_STEPPER_FI,
FUI_TEXT_X_POSITION_FI,
FUI_TEXT_X_POS_FAST_FI,
FUI_TEXT_Y_POSITION_FI,
FUI_TEXT_Y_POS_FAST_FI,
FUI_TEXT_Z_POSITION_FI,
FUI_TEXT_Z_POS_FAST_FI,
FUI_TEXT_E_POSITION_FI,
FUI_TEXT_BED_TEMP_FI,
FUI_TEXT_EXTR0_TEMP_FI,
FUI_TEXT_EXTR1_TEMP_FI,
FUI_TEXT_EXTR2_TEMP_FI,
FUI_TEXT_EXTR0_OFF_FI,
FUI_TEXT_EXTR1_OFF_FI,
FUI_TEXT_EXTR2_OFF_FI,
FUI_TEXT_EXTR0_SELECT_FI,
FUI_TEXT_EXTR1_SELECT_FI,
FUI_TEXT_EXTR2_SELECT_FI,
FUI_TEXT_EXTR_ORIGIN_FI,
FUI_TEXT_PRINT_X_FI,
FUI_TEXT_PRINT_Y_FI,
FUI_TEXT_PRINT_Z_FI,
FUI_TEXT_PRINT_Z_DELTA_FI,
FUI_TEXT_MOVE_X_FI,
FUI_TEXT_MOVE_Y_FI,
FUI_TEXT_MOVE_Z_FI,
FUI_TEXT_MOVE_Z_DELTA_FI,
FUI_TEXT_JERK_FI,
FUI_TEXT_ZJERK_FI,
FUI_TEXT_ACCELERATION_FI,
FUI_TEXT_STORE_TO_EEPROM_FI,
FUI_TEXT_LOAD_EEPROM_FI,
FUI_TEXT_DBG_ECHO_FI,
FUI_TEXT_DBG_INFO_FI,
FUI_TEXT_DBG_ERROR_FI,
FUI_TEXT_DBG_DRYRUN_FI,
FUI_TEXT_OPS_OFF_FI,
FUI_TEXT_OPS_CLASSIC_FI,
FUI_TEXT_OPS_FAST_FI,
FUI_TEXT_OPS_RETRACT_FI,
FUI_TEXT_OPS_BACKSLASH_FI,
FUI_TEXT_OPS_MINDIST_FI,
FUI_TEXT_OPS_MOVE_AFTER_FI,
FUI_TEXT_ANTI_OOZE_FI,
FUI_TEXT_PRINT_FILE_FI,
FUI_TEXT_PAUSE_PRINT_FI,
FUI_TEXT_CONTINUE_PRINT_FI,
FUI_TEXT_UNMOUNT_CARD_FI,
FUI_TEXT_MOUNT_CARD_FI,
FUI_TEXT_DELETE_FILE_FI,
FUI_TEXT_FEEDRATE_FI,
FUI_TEXT_FEED_MAX_X_FI,
FUI_TEXT_FEED_MAX_Y_FI,
FUI_TEXT_FEED_MAX_Z_FI,
FUI_TEXT_FEED_MAX_Z_DELTA_FI,
FUI_TEXT_FEED_HOME_X_FI,
FUI_TEXT_FEED_HOME_Y_FI,
FUI_TEXT_FEED_HOME_Z_FI,
FUI_TEXT_FEED_HOME_Z_DELTA_FI,
FUI_TEXT_ACTION_XPOSITION4A_FI,
FUI_TEXT_ACTION_XPOSITION4B_FI,
FUI_TEXT_ACTION_XPOSITION4C_FI,
FUI_TEXT_ACTION_XPOSITION4D_FI,
FUI_TEXT_ACTION_YPOSITION4A_FI,
FUI_TEXT_ACTION_YPOSITION4B_FI,
FUI_TEXT_ACTION_YPOSITION4C_FI,
FUI_TEXT_ACTION_YPOSITION4D_FI,
FUI_TEXT_ACTION_ZPOSITION4A_FI,
FUI_TEXT_ACTION_ZPOSITION4B_FI,
FUI_TEXT_ACTION_ZPOSITION4C_FI,
FUI_TEXT_ACTION_ZPOSITION4D_FI,
FUI_TEXT_ACTION_XPOSITION_FAST4A_FI,
FUI_TEXT_ACTION_XPOSITION_FAST4B_FI,
FUI_TEXT_ACTION_XPOSITION_FAST4C_FI,
FUI_TEXT_ACTION_XPOSITION_FAST4D_FI,
FUI_TEXT_ACTION_YPOSITION_FAST4A_FI,
FUI_TEXT_ACTION_YPOSITION_FAST4B_FI,
FUI_TEXT_ACTION_YPOSITION_FAST4C_FI,
FUI_TEXT_ACTION_YPOSITION_FAST4D_FI,
FUI_TEXT_ACTION_ZPOSITION_FAST4A_FI,
FUI_TEXT_ACTION_ZPOSITION_FAST4B_FI,
FUI_TEXT_ACTION_ZPOSITION_FAST4C_FI,
FUI_TEXT_ACTION_ZPOSITION_FAST4D_FI,
FUI_TEXT_ACTION_EPOSITION_FAST2A_FI,
FUI_TEXT_ACTION_EPOSITION_FAST2B_FI,
FUI_TEXT_ACTION_XPOSITION2A_FI,
FUI_TEXT_ACTION_XPOSITION2B_FI,
FUI_TEXT_ACTION_YPOSITION2A_FI,
FUI_TEXT_ACTION_YPOSITION2B_FI,
FUI_TEXT_ACTION_ZPOSITION2A_FI,
FUI_TEXT_ACTION_ZPOSITION2B_FI,
FUI_TEXT_ACTION_XPOSITION_FAST2A_FI,
FUI_TEXT_ACTION_XPOSITION_FAST2B_FI,
FUI_TEXT_ACTION_YPOSITION_FAST2A_FI,
FUI_TEXT_ACTION_YPOSITION_FAST2B_FI,
FUI_TEXT_ACTION_ZPOSITION_FAST2A_FI,
FUI_TEXT_ACTION_ZPOSITION_FAST2B_FI,
FUI_TEXT_FANSPEED_FI,
FUI_TEXT_ACTION_FANSPEED_FI,
FUI_TEXT_FAN_OFF_FI,
FUI_TEXT_FAN_25_FI,
FUI_TEXT_FAN_50_FI,
FUI_TEXT_FAN_75_FI,
FUI_TEXT_FAN_FULL_FI,
FUI_TEXT_STEPPER_INACTIVE_FI,
FUI_TEXT_STEPPER_INACTIVE2A_FI,
FUI_TEXT_STEPPER_INACTIVE2B_FI,
FUI_TEXT_POWER_INACTIVE_FI,
FUI_TEXT_POWER_INACTIVE2A_FI,
FUI_TEXT_POWER_INACTIVE2B_FI,
FUI_TEXT_GENERAL_FI,
FUI_TEXT_BAUDRATE_FI,
FUI_TEXT_EXTR_STEPS_FI,
FUI_TEXT_EXTR_START_FEED_FI,
FUI_TEXT_EXTR_MAX_FEED_FI,
FUI_TEXT_EXTR_ACCEL_FI,
FUI_TEXT_EXTR_WATCH_FI,
FUI_TEXT_EXTR_ADVANCE_L_FI,
FUI_TEXT_EXTR_ADVANCE_K_FI,
FUI_TEXT_EXTR_MANAGER_FI,
FUI_TEXT_EXTR_PGAIN_FI,
FUI_TEXT_EXTR_DEADTIME_FI,
FUI_TEXT_EXTR_DMAX_DT_FI,
FUI_TEXT_EXTR_IGAIN_FI,
FUI_TEXT_EXTR_DGAIN_FI,
FUI_TEXT_EXTR_DMIN_FI,
FUI_TEXT_EXTR_DMAX_FI,
FUI_TEXT_EXTR_PMAX_FI,
FUI_TEXT_EXTR_XOFF_FI,
FUI_TEXT_EXTR_YOFF_FI,
FUI_TEXT_STRING_HM_BANGBANG_FI,
FUI_TEXT_STRING_HM_PID_FI,
FUI_TEXT_STRING_ACTION_FI,
FUI_TEXT_HEATING_EXTRUDER_FI,
FUI_TEXT_HEATING_BED_FI,
FUI_TEXT_KILLED_FI,
FUI_TEXT_STEPPER_DISABLED_FI,
FUI_TEXT_EEPROM_STOREDA_FI,
FUI_TEXT_EEPROM_STOREDB_FI,
FUI_TEXT_EEPROM_LOADEDA_FI,
FUI_TEXT_EEPROM_LOADEDB_FI,
FUI_TEXT_UPLOADING_FI,
FUI_TEXT_PAGE_BUFFER_FI,
FUI_TEXT_PAGE_EXTRUDER_FI,
FUI_TEXT_PAGE_EXTRUDER1_FI,
FUI_TEXT_PAGE_EXTRUDER2_FI,
FUI_TEXT_PAGE_EXTRUDER3_FI,
FUI_TEXT_PAGE_BED_FI,
FUI_TEXT_SPEED_MULTIPLY_FI,
FUI_TEXT_FLOW_MULTIPLY_FI,
FUI_TEXT_SHOW_MEASUREMENT_FI,
FUI_TEXT_RESET_MEASUREMENT_FI,
FUI_TEXT_SET_MEASURED_ORIGIN_FI,
FUI_TEXT_ZCALIB_FI,
FUI_TEXT_SET_P1_FI,
FUI_TEXT_SET_P2_FI,
FUI_TEXT_SET_P3_FI,
FUI_TEXT_CALCULATE_LEVELING_FI,
FUI_TEXT_LEVEL_FI,
FUI_TEXT_EXTR_WAIT_RETRACT_TEMP_FI,
FUI_TEXT_EXTR_WAIT_RETRACT_UNITS_FI,
FUI_TEXT_SD_REMOVED_FI,
FUI_TEXT_SD_INSERTED_FI,
FUI_TEXT_PRINTER_READY_FI,
FUI_TEXT_PRINTTIME_DAYS_FI,
FUI_TEXT_PRINTTIME_HOURS_FI,
FUI_TEXT_PRINTTIME_MINUTES_FI,
FUI_TEXT_PRINT_TIME_FI,
FUI_TEXT_PRINT_FILAMENT_FI,
FUI_TEXT_PRINTED_FI,
FUI_TEXT_POWER_FI,
FUI_TEXT_STRING_HM_DEADTIME_FI,
FUI_TEXT_STRING_HM_SLOWBANG_FI,
FUI_TEXT_STOP_PRINT_FI,
FUI_TEXT_Z_BABYSTEPPING_FI,
FUI_TEXT_CHANGE_FILAMENT_FI,
FUI_TEXT_WIZ_CH_FILAMENT1_FI,
FUI_TEXT_WIZ_CH_FILAMENT2_FI,
FUI_TEXT_WIZ_CH_FILAMENT3_FI,
FUI_TEXT_CLICK_DONE_FI,
FUI_TEXT_AUTOLEVEL_ONOFF_FI,
FUI_TEXT_SERVOPOS_FI,
FUI_TEXT_IGNORE_M106_FI,
FUI_TEXT_WIZ_REHEAT1_FI,
FUI_TEXT_WIZ_REHEAT2_FI,
FUI_TEXT_WIZ_WAITTEMP1_FI,
FUI_TEXT_WIZ_WAITTEMP2_FI,
FUI_TEXT_EXTRUDER_JAM_FI,
FUI_TEXT_STANDBY_FI,
FUI_TEXT_BED_COATING_FI,
FUI_TEXT_BED_COATING_SET1_FI,
FUI_TEXT_BED_COATING_SET2_FI,
FUI_TEXT_NOCOATING_FI,
FUI_TEXT_BUILDTAK_FI,
FUI_TEXT_KAPTON_FI,
FUI_TEXT_BLUETAPE_FI,
FUI_TEXT_PETTAPE_FI,
FUI_TEXT_GLUESTICK_FI,
FUI_TEXT_CUSTOM_FI,
FUI_TEXT_COATING_CUSTOM_FI,
FUI_TEXT_LANGUAGE_FI,
FUI_TEXT_MAINPAGE6_1_FI,
FUI_TEXT_MAINPAGE6_2_FI,
FUI_TEXT_MAINPAGE6_3_FI,
FUI_TEXT_MAINPAGE6_4_FI,
FUI_TEXT_MAINPAGE6_5_FI,
FUI_TEXT_MAINPAGE6_6_FI,
FUI_TEXT_MAINPAGE_TEMP_BED_FI,
FUI_TEXT_MAINPAGE_BED_FI,
FUI_TEXT_MAINPAGE_Z_BUF_FI,
FUI_TEXT_MAINPAGE_MUL_EUSAGE_FI,
FUI_TEXT_MAINPAGE_XY_FI,
FUI_TEXT_PRINT_TIME_VALUE_FI,
FUI_TEXT_PRINT_FILAMENT_VALUE_FI,
FUI_TEXT_METER_PRINTED_FI,
FUI_TEXT_STATUS_FI,
FUI_TEXT_EMPTY_FI,
FUI_TEXT_TEMP_SET_FI,
FUI_TEXT_CURRENT_TEMP_FI,
FUI_TEXT_COATING_THICKNESS_FI,
FUI_TEXT_EXTR3_TEMP_FI,
FUI_TEXT_EXTR4_TEMP_FI,
FUI_TEXT_EXTR5_TEMP_FI,
FUI_TEXT_EXTR3_OFF_FI,
FUI_TEXT_EXTR4_OFF_FI,
FUI_TEXT_EXTR5_OFF_FI,
FUI_TEXT_EXTR3_SELECT_FI,
FUI_TEXT_EXTR4_SELECT_FI,
FUI_TEXT_EXTR5_SELECT_FI,
FUI_TEXT_DITTO_0_FI,
FUI_TEXT_DITTO_1_FI,
FUI_TEXT_DITTO_2_FI,
FUI_TEXT_DITTO_3_FI,
FUI_TEXT_ZPROBE_HEIGHT_FI,
FUI_TEXT_OFFSETS_FI,
FUI_TEXT_X_OFFSET_FI,
FUI_TEXT_Y_OFFSET_FI,
FUI_TEXT_Z_OFFSET_FI,
FUI_TEXT_DBG_ENDSTOP_FI
};
#define LANG_FI_TABLE translations_FI
#else
#define LANG_FI_TABLE NULL
#endif // LANGUAGE_FI_ACTIVE
// References to the possible languages // References to the possible languages
PGM_P const * const translations[NUM_LANGUAGES_KNOWN] PROGMEM = { PGM_P const * const translations[NUM_LANGUAGES_KNOWN] PROGMEM = {
LANG_EN_TABLE, LANG_EN_TABLE,
LANG_DE_TABLE, LANG_DE_TABLE,
LANG_NL_TABLE, LANG_NL_TABLE,
LANG_PT_TABLE, LANG_PT_TABLE,
LANG_IT_TABLE, LANG_IT_TABLE,
LANG_ES_TABLE, LANG_ES_TABLE,
LANG_SE_TABLE, LANG_SE_TABLE,
LANG_FR_TABLE, LANG_FR_TABLE,
LANG_CZ_TABLE, LANG_CZ_TABLE,
LANG_PL_TABLE, LANG_PL_TABLE,
LANG_TR_TABLE LANG_TR_TABLE,
LANG_FI_TABLE
}; };
// Array in flash to select only valid languages // Array in flash to select only valid languages
@ -6043,6 +6610,9 @@ const uint8_t availableLanguages[] PROGMEM = {
#if LANGUAGE_TR_ACTIVE #if LANGUAGE_TR_ACTIVE
10, 10,
#endif // LANGUAGE_TR_ACTIVE #endif // LANGUAGE_TR_ACTIVE
#if LANGUAGE_FI_ACTIVE
11,
#endif // LANGUAGE_FI_ACTIVE
255 255
}; };

View file

@ -95,9 +95,10 @@
#define LANGUAGE_CZ_ID 8 #define LANGUAGE_CZ_ID 8
#define LANGUAGE_PL_ID 9 #define LANGUAGE_PL_ID 9
#define LANGUAGE_TR_ID 10 #define LANGUAGE_TR_ID 10
#define LANGUAGE_FI_ID 11
#define NUM_LANGUAGES_KNOWN 11 #define NUM_LANGUAGES_KNOWN 12
#define NUM_TRANSLATED_WORDS 266 #define NUM_TRANSLATED_WORDS 267
// For selectable translations we refer to each text by a id which gets // For selectable translations we refer to each text by a id which gets
// defined here. The list starts at 0 and defines the position in the // defined here. The list starts at 0 and defines the position in the
@ -371,6 +372,7 @@
#define UI_TEXT_X_OFFSET_ID 263 #define UI_TEXT_X_OFFSET_ID 263
#define UI_TEXT_Y_OFFSET_ID 264 #define UI_TEXT_Y_OFFSET_ID 264
#define UI_TEXT_Z_OFFSET_ID 265 #define UI_TEXT_Z_OFFSET_ID 265
#define UI_TEXT_DBG_ENDSTOP_ID 266 // "EndStop:%dp"
// Universal definitions // Universal definitions
@ -446,6 +448,7 @@
#define UI_TEXT_DBG_INFO_EN "Info :%di" #define UI_TEXT_DBG_INFO_EN "Info :%di"
#define UI_TEXT_DBG_ERROR_EN "Errors :%de" #define UI_TEXT_DBG_ERROR_EN "Errors :%de"
#define UI_TEXT_DBG_DRYRUN_EN "Dry run:%dd" #define UI_TEXT_DBG_DRYRUN_EN "Dry run:%dd"
#define UI_TEXT_DBG_ENDSTOP_EN "EndStop:%dp"
#define UI_TEXT_OPS_OFF_EN "%O0 OPS off" #define UI_TEXT_OPS_OFF_EN "%O0 OPS off"
#define UI_TEXT_OPS_CLASSIC_EN "%O1 OPS classic" #define UI_TEXT_OPS_CLASSIC_EN "%O1 OPS classic"
#define UI_TEXT_OPS_FAST_EN "%O2 OPS fast" #define UI_TEXT_OPS_FAST_EN "%O2 OPS fast"
@ -469,15 +472,15 @@
#define UI_TEXT_FEED_HOME_Y_EN "Home Y:%fY" #define UI_TEXT_FEED_HOME_Y_EN "Home Y:%fY"
#define UI_TEXT_FEED_HOME_Z_EN "Home Z:%fZ" #define UI_TEXT_FEED_HOME_Z_EN "Home Z:%fZ"
#define UI_TEXT_FEED_HOME_Z_DELTA_EN "Home:%fZ" #define UI_TEXT_FEED_HOME_Z_DELTA_EN "Home:%fZ"
#define UI_TEXT_ACTION_XPOSITION4A_EN "X:%x0 mm" #define UI_TEXT_ACTION_XPOSITION4A_EN "X:%x0 mm %dx%dX"
#define UI_TEXT_ACTION_XPOSITION4B_EN "Min endstop:%sx" #define UI_TEXT_ACTION_XPOSITION4B_EN "Min endstop:%sx"
#define UI_TEXT_ACTION_XPOSITION4C_EN "Max endstop:%sX" #define UI_TEXT_ACTION_XPOSITION4C_EN "Max endstop:%sX"
#define UI_TEXT_ACTION_XPOSITION4D_EN "" #define UI_TEXT_ACTION_XPOSITION4D_EN ""
#define UI_TEXT_ACTION_YPOSITION4A_EN "Y:%x1 mm" #define UI_TEXT_ACTION_YPOSITION4A_EN "Y:%x1 mm %dy%dY"
#define UI_TEXT_ACTION_YPOSITION4B_EN "Min endstop:%sy" #define UI_TEXT_ACTION_YPOSITION4B_EN "Min endstop:%sy"
#define UI_TEXT_ACTION_YPOSITION4C_EN "Max endstop:%sY" #define UI_TEXT_ACTION_YPOSITION4C_EN "Max endstop:%sY"
#define UI_TEXT_ACTION_YPOSITION4D_EN "" #define UI_TEXT_ACTION_YPOSITION4D_EN ""
#define UI_TEXT_ACTION_ZPOSITION4A_EN "Z:%x2 mm" #define UI_TEXT_ACTION_ZPOSITION4A_EN "Z:%x2 mm %dz%dZ"
#define UI_TEXT_ACTION_ZPOSITION4B_EN "Min endstop:%sz" #define UI_TEXT_ACTION_ZPOSITION4B_EN "Min endstop:%sz"
#define UI_TEXT_ACTION_ZPOSITION4C_EN "Max endstop:%sZ" #define UI_TEXT_ACTION_ZPOSITION4C_EN "Max endstop:%sZ"
#define UI_TEXT_ACTION_ZPOSITION4D_EN "" #define UI_TEXT_ACTION_ZPOSITION4D_EN ""
@ -615,23 +618,23 @@
#define UI_TEXT_LANGUAGE_EN "Language" #define UI_TEXT_LANGUAGE_EN "Language"
#if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0 #if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0
#define UI_TEXT_MAINPAGE6_1_EN "\xa %ec/%Ec\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_EN "\xa %ec/%Ec\xb0 X:%x0"
#else #else
#define UI_TEXT_MAINPAGE6_1_EN "\xa %e0/%E0\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_EN "\xa %e0/%E0\xb0 X:%x0"
#endif // NUM_EXTRUDER #endif // NUM_EXTRUDER
#if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_2_EN "\xa %e1/%E1\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_EN "\xa %e1/%E1\xb0 Y:%x1"
#elif HAVE_HEATED_BED #elif HAVE_HEATED_BED
#define UI_TEXT_MAINPAGE6_2_EN "\xe %eb/%Eb\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_EN "\xe %eb/%Eb\xb0 Y:%x1"
#else #else
#define UI_TEXT_MAINPAGE6_2_EN " Y:%x1" #define UI_TEXT_MAINPAGE6_2_EN " Y:%x1"
#endif #endif
#if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_3_EN "\xe %eb/%Eb\xb0 Z:%x2" #define UI_TEXT_MAINPAGE6_3_EN "\xe %eb/%Eb\xb0 Z:%x2"
#elif FEATURE_DITTO_PRINTING #elif FEATURE_DITTO_PRINTING
#define UI_TEXT_MAINPAGE6_3_EN "Copies: %ed Z:%x2" #define UI_TEXT_MAINPAGE6_3_EN "Copies: %ed Z:%x2"
#else #else
#define UI_TEXT_MAINPAGE6_3_EN "Flow:\xfd %of%%% Z:%x2" #define UI_TEXT_MAINPAGE6_3_EN "Flow:\xfd %of%%% Z:%x2"
#endif #endif
#define UI_TEXT_MAINPAGE6_4_EN "Mul: %om%%% \xfd E: %x4m" #define UI_TEXT_MAINPAGE6_4_EN "Mul: %om%%% \xfd E: %x4m"
#define UI_TEXT_MAINPAGE6_5_EN "Buf: %oB" #define UI_TEXT_MAINPAGE6_5_EN "Buf: %oB"
@ -737,6 +740,7 @@
#define UI_TEXT_DBG_INFO_DE "Info :%di" #define UI_TEXT_DBG_INFO_DE "Info :%di"
#define UI_TEXT_DBG_ERROR_DE "Fehler :%de" #define UI_TEXT_DBG_ERROR_DE "Fehler :%de"
#define UI_TEXT_DBG_DRYRUN_DE "Trockenlauf:%dd" #define UI_TEXT_DBG_DRYRUN_DE "Trockenlauf:%dd"
#define UI_TEXT_DBG_ENDSTOP_DE "EndStop :%dp"
#define UI_TEXT_OPS_OFF_DE "%O0 OPS Aus" #define UI_TEXT_OPS_OFF_DE "%O0 OPS Aus"
#define UI_TEXT_OPS_CLASSIC_DE "%O1 OPS Klassisch" #define UI_TEXT_OPS_CLASSIC_DE "%O1 OPS Klassisch"
#define UI_TEXT_OPS_FAST_DE "%O2 OPS Schnell" #define UI_TEXT_OPS_FAST_DE "%O2 OPS Schnell"
@ -760,15 +764,15 @@
#define UI_TEXT_FEED_HOME_Y_DE "Home Y:%fY" #define UI_TEXT_FEED_HOME_Y_DE "Home Y:%fY"
#define UI_TEXT_FEED_HOME_Z_DE "Home Z:%fZ" #define UI_TEXT_FEED_HOME_Z_DE "Home Z:%fZ"
#define UI_TEXT_FEED_HOME_Z_DELTA_DE "Home:%fZ" #define UI_TEXT_FEED_HOME_Z_DELTA_DE "Home:%fZ"
#define UI_TEXT_ACTION_XPOSITION4A_DE "X:%x0 mm" #define UI_TEXT_ACTION_XPOSITION4A_DE "X:%x0 mm %dx%dX"
#define UI_TEXT_ACTION_XPOSITION4B_DE "Min Endstopp:%sx" #define UI_TEXT_ACTION_XPOSITION4B_DE "Min Endstopp:%sx"
#define UI_TEXT_ACTION_XPOSITION4C_DE "Max Endstopp:%sX" #define UI_TEXT_ACTION_XPOSITION4C_DE "Max Endstopp:%sX"
#define UI_TEXT_ACTION_XPOSITION4D_DE "" #define UI_TEXT_ACTION_XPOSITION4D_DE ""
#define UI_TEXT_ACTION_YPOSITION4A_DE "Y:%x1 mm" #define UI_TEXT_ACTION_YPOSITION4A_DE "Y:%x1 mm %dy%dY"
#define UI_TEXT_ACTION_YPOSITION4B_DE "Min Endstopp:%sy" #define UI_TEXT_ACTION_YPOSITION4B_DE "Min Endstopp:%sy"
#define UI_TEXT_ACTION_YPOSITION4C_DE "Max Endstopp:%sY" #define UI_TEXT_ACTION_YPOSITION4C_DE "Max Endstopp:%sY"
#define UI_TEXT_ACTION_YPOSITION4D_DE "" #define UI_TEXT_ACTION_YPOSITION4D_DE ""
#define UI_TEXT_ACTION_ZPOSITION4A_DE "Z:%x2 mm" #define UI_TEXT_ACTION_ZPOSITION4A_DE "Z:%x2 mm %dz%dZ"
#define UI_TEXT_ACTION_ZPOSITION4B_DE "Min Endstopp:%sz" #define UI_TEXT_ACTION_ZPOSITION4B_DE "Min Endstopp:%sz"
#define UI_TEXT_ACTION_ZPOSITION4C_DE "Max Endstopp:%sZ" #define UI_TEXT_ACTION_ZPOSITION4C_DE "Max Endstopp:%sZ"
#define UI_TEXT_ACTION_ZPOSITION4D_DE "" #define UI_TEXT_ACTION_ZPOSITION4D_DE ""
@ -906,23 +910,23 @@
#define UI_TEXT_LANGUAGE_DE "Sprache" #define UI_TEXT_LANGUAGE_DE "Sprache"
#if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0 #if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0
#define UI_TEXT_MAINPAGE6_1_DE "\xa %ec/%Ec\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_DE "\xa %ec/%Ec\xb0 X:%x0"
#else #else
#define UI_TEXT_MAINPAGE6_1_DE "\xa %e0/%E0\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_DE "\xa %e0/%E0\xb0 X:%x0"
#endif // NUM_EXTRUDER #endif // NUM_EXTRUDER
#if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_2_DE "\xa %e1/%E1\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_DE "\xa %e1/%E1\xb0 Y:%x1"
#elif HAVE_HEATED_BED #elif HAVE_HEATED_BED
#define UI_TEXT_MAINPAGE6_2_DE "\xe %eb/%Eb\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_DE "\xe %eb/%Eb\xb0 Y:%x1"
#else #else
#define UI_TEXT_MAINPAGE6_2_DE " Y:%x1" #define UI_TEXT_MAINPAGE6_2_DE " Y:%x1"
#endif #endif
#if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_3_DE "\xe %eb/%Eb\xb0 Z:%x2" #define UI_TEXT_MAINPAGE6_3_DE "\xe %eb/%Eb\xb0 Z:%x2"
#elif FEATURE_DITTO_PRINTING #elif FEATURE_DITTO_PRINTING
#define UI_TEXT_MAINPAGE6_3_DE "Kopien: %ed Z:%x2" #define UI_TEXT_MAINPAGE6_3_DE "Kopien: %ed Z:%x2"
#else #else
#define UI_TEXT_MAINPAGE6_3_DE "Fluss:\xfd %of%%% Z:%x2" #define UI_TEXT_MAINPAGE6_3_DE "Fluss:\xfd %of%%% Z:%x2"
#endif #endif
#define UI_TEXT_MAINPAGE6_4_DE "Mul: %om%%% \xfd E: %x4m" #define UI_TEXT_MAINPAGE6_4_DE "Mul: %om%%% \xfd E: %x4m"
#define UI_TEXT_MAINPAGE6_5_DE "Puf: %oB" #define UI_TEXT_MAINPAGE6_5_DE "Puf: %oB"
@ -1029,6 +1033,7 @@
#define UI_TEXT_DBG_INFO_NL "Info :%di" #define UI_TEXT_DBG_INFO_NL "Info :%di"
#define UI_TEXT_DBG_ERROR_NL "Fouten :%de" #define UI_TEXT_DBG_ERROR_NL "Fouten :%de"
#define UI_TEXT_DBG_DRYRUN_NL "Droogloop:%dd" #define UI_TEXT_DBG_DRYRUN_NL "Droogloop:%dd"
#define UI_TEXT_DBG_ENDSTOP_NL "EndStop :%dp"
#define UI_TEXT_OPS_OFF_NL "%O0 OPS Uit" #define UI_TEXT_OPS_OFF_NL "%O0 OPS Uit"
#define UI_TEXT_OPS_CLASSIC_NL "%O1 OPS Klassiek" #define UI_TEXT_OPS_CLASSIC_NL "%O1 OPS Klassiek"
#define UI_TEXT_OPS_FAST_NL "%O2 OPS Snel" #define UI_TEXT_OPS_FAST_NL "%O2 OPS Snel"
@ -1198,23 +1203,23 @@
#define UI_TEXT_LANGUAGE_NL "Taal" #define UI_TEXT_LANGUAGE_NL "Taal"
#if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0 #if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0
#define UI_TEXT_MAINPAGE6_1_NL "\xa %ec/%Ec\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_NL "\xa %ec/%Ec\xb0 X:%x0"
#else #else
#define UI_TEXT_MAINPAGE6_1_NL "\xa %e0/%E0\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_NL "\xa %e0/%E0\xb0 X:%x0"
#endif // NUM_EXTRUDER #endif // NUM_EXTRUDER
#if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_2_NL "\xa %e1/%E1\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_NL "\xa %e1/%E1\xb0 Y:%x1"
#elif HAVE_HEATED_BED #elif HAVE_HEATED_BED
#define UI_TEXT_MAINPAGE6_2_NL "\xe %eb/%Eb\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_NL "\xe %eb/%Eb\xb0 Y:%x1"
#else #else
#define UI_TEXT_MAINPAGE6_2_NL " Y:%x1" #define UI_TEXT_MAINPAGE6_2_NL " Y:%x1"
#endif #endif
#if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_3_NL "\xe %eb/%Eb\xb0 Z:%x2" #define UI_TEXT_MAINPAGE6_3_NL "\xe %eb/%Eb\xb0 Z:%x2"
#elif FEATURE_DITTO_PRINTING #elif FEATURE_DITTO_PRINTING
#define UI_TEXT_MAINPAGE6_3_NL "Kopieen: %ed Z:%x2" #define UI_TEXT_MAINPAGE6_3_NL "Kopieen: %ed Z:%x2"
#else #else
#define UI_TEXT_MAINPAGE6_3_NL "Flow:\xfd %of%%% Z:%x2" #define UI_TEXT_MAINPAGE6_3_NL "Flow:\xfd %of%%% Z:%x2"
#endif #endif
#define UI_TEXT_MAINPAGE6_4_NL "Mul: %om%%% \xfd E: %x4m" #define UI_TEXT_MAINPAGE6_4_NL "Mul: %om%%% \xfd E: %x4m"
#define UI_TEXT_MAINPAGE6_5_NL "Buf: %oB" #define UI_TEXT_MAINPAGE6_5_NL "Buf: %oB"
@ -1321,8 +1326,9 @@
#define UI_TEXT_LOAD_EEPROM_PT "Carregar da EEPROM" #define UI_TEXT_LOAD_EEPROM_PT "Carregar da EEPROM"
#define UI_TEXT_DBG_ECHO_PT "Echo :%do" #define UI_TEXT_DBG_ECHO_PT "Echo :%do"
#define UI_TEXT_DBG_INFO_PT "Info :%di" #define UI_TEXT_DBG_INFO_PT "Info :%di"
#define UI_TEXT_DBG_ERROR_PT "Erros :%de" #define UI_TEXT_DBG_ERROR_PT "Erros :%de"
#define UI_TEXT_DBG_DRYRUN_PT "Dry run:%dd" #define UI_TEXT_DBG_DRYRUN_PT "Dry run:%dd"
#define UI_TEXT_DBG_ENDSTOP_PT "EndStop:%dp"
#define UI_TEXT_OPS_OFF_PT "%O0 OPS Off" #define UI_TEXT_OPS_OFF_PT "%O0 OPS Off"
#define UI_TEXT_OPS_CLASSIC_PT "%O1 OPS Classic" #define UI_TEXT_OPS_CLASSIC_PT "%O1 OPS Classic"
#define UI_TEXT_OPS_FAST_PT "%O2 OPS Fast" #define UI_TEXT_OPS_FAST_PT "%O2 OPS Fast"
@ -1346,15 +1352,15 @@
#define UI_TEXT_FEED_HOME_Y_PT "Home Y:%fY" #define UI_TEXT_FEED_HOME_Y_PT "Home Y:%fY"
#define UI_TEXT_FEED_HOME_Z_PT "Home Z:%fZ" #define UI_TEXT_FEED_HOME_Z_PT "Home Z:%fZ"
#define UI_TEXT_FEED_HOME_Z_DELTA_PT "Home:%fZ" #define UI_TEXT_FEED_HOME_Z_DELTA_PT "Home:%fZ"
#define UI_TEXT_ACTION_XPOSITION4A_PT "X:%x0 mm" #define UI_TEXT_ACTION_XPOSITION4A_PT "X:%x0 mm %dx%dX"
#define UI_TEXT_ACTION_XPOSITION4B_PT "Min endstop:%sx" #define UI_TEXT_ACTION_XPOSITION4B_PT "Min endstop:%sx"
#define UI_TEXT_ACTION_XPOSITION4C_PT "Max endstop:%sX" #define UI_TEXT_ACTION_XPOSITION4C_PT "Max endstop:%sX"
#define UI_TEXT_ACTION_XPOSITION4D_PT "" #define UI_TEXT_ACTION_XPOSITION4D_PT ""
#define UI_TEXT_ACTION_YPOSITION4A_PT "Y:%x1 mm" #define UI_TEXT_ACTION_YPOSITION4A_PT "Y:%x1 mm %dy%dY"
#define UI_TEXT_ACTION_YPOSITION4B_PT "Min endstop:%sy" #define UI_TEXT_ACTION_YPOSITION4B_PT "Min endstop:%sy"
#define UI_TEXT_ACTION_YPOSITION4C_PT "Max endstop:%sY" #define UI_TEXT_ACTION_YPOSITION4C_PT "Max endstop:%sY"
#define UI_TEXT_ACTION_YPOSITION4D_PT "" #define UI_TEXT_ACTION_YPOSITION4D_PT ""
#define UI_TEXT_ACTION_ZPOSITION4A_PT "Z:%x2 mm" #define UI_TEXT_ACTION_ZPOSITION4A_PT "Z:%x2 mm %dz%dZ"
#define UI_TEXT_ACTION_ZPOSITION4B_PT "Min endstop:%sz" #define UI_TEXT_ACTION_ZPOSITION4B_PT "Min endstop:%sz"
#define UI_TEXT_ACTION_ZPOSITION4C_PT "Max endstop:%sZ" #define UI_TEXT_ACTION_ZPOSITION4C_PT "Max endstop:%sZ"
#define UI_TEXT_ACTION_ZPOSITION4D_PT "" #define UI_TEXT_ACTION_ZPOSITION4D_PT ""
@ -1492,23 +1498,23 @@
#define UI_TEXT_LANGUAGE_PT "Idioma" #define UI_TEXT_LANGUAGE_PT "Idioma"
#if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0 #if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0
#define UI_TEXT_MAINPAGE6_1_PT "\xa %ec/%Ec\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_PT "\xa %ec/%Ec\xb0 X:%x0"
#else #else
#define UI_TEXT_MAINPAGE6_1_PT "\xa %e0/%E0\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_PT "\xa %e0/%E0\xb0 X:%x0"
#endif // NUM_EXTRUDER #endif // NUM_EXTRUDER
#if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_2_PT "\xa %e1/%E1\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_PT "\xa %e1/%E1\xb0 Y:%x1"
#elif HAVE_HEATED_BED #elif HAVE_HEATED_BED
#define UI_TEXT_MAINPAGE6_2_PT "\xe %eb/%Eb\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_PT "\xe %eb/%Eb\xb0 Y:%x1"
#else #else
#define UI_TEXT_MAINPAGE6_2_PT " Y:%x1" #define UI_TEXT_MAINPAGE6_2_PT " Y:%x1"
#endif #endif
#if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_3_PT "\xe %eb/%Eb\xb0 Z:%x2" #define UI_TEXT_MAINPAGE6_3_PT "\xe %eb/%Eb\xb0 Z:%x2"
#elif FEATURE_DITTO_PRINTING #elif FEATURE_DITTO_PRINTING
#define UI_TEXT_MAINPAGE6_3_PT "Copias: %ed Z:%x2" #define UI_TEXT_MAINPAGE6_3_PT "Copias: %ed Z:%x2"
#else #else
#define UI_TEXT_MAINPAGE6_3_PT "Fluxo:\xfd %of%%% Z:%x2" #define UI_TEXT_MAINPAGE6_3_PT "Fluxo:\xfd %of%%% Z:%x2"
#endif #endif
#define UI_TEXT_MAINPAGE6_4_PT "Mul: %om%%% \xfd E: %x4m" #define UI_TEXT_MAINPAGE6_4_PT "Mul: %om%%% \xfd E: %x4m"
#define UI_TEXT_MAINPAGE6_5_PT "Buf: %oB" #define UI_TEXT_MAINPAGE6_5_PT "Buf: %oB"
@ -1611,10 +1617,11 @@
#define UI_TEXT_ACCELERATION_IT "Accelerazione" #define UI_TEXT_ACCELERATION_IT "Accelerazione"
#define UI_TEXT_STORE_TO_EEPROM_IT "Salva in EEPROM" #define UI_TEXT_STORE_TO_EEPROM_IT "Salva in EEPROM"
#define UI_TEXT_LOAD_EEPROM_IT "Carica da EEPROM" #define UI_TEXT_LOAD_EEPROM_IT "Carica da EEPROM"
#define UI_TEXT_DBG_ECHO_IT "Eco :%do" #define UI_TEXT_DBG_ECHO_IT "Eco :%do"
#define UI_TEXT_DBG_INFO_IT "Info :%di" #define UI_TEXT_DBG_INFO_IT "Info :%di"
#define UI_TEXT_DBG_ERROR_IT "Errori :%de" #define UI_TEXT_DBG_ERROR_IT "Errori :%de"
#define UI_TEXT_DBG_DRYRUN_IT "Simulazione:%dd" #define UI_TEXT_DBG_DRYRUN_IT "Simulazione:%dd"
#define UI_TEXT_DBG_ENDSTOP_IT "EndStop:%dp"
#define UI_TEXT_OPS_OFF_IT "%O0 OPS Spento" #define UI_TEXT_OPS_OFF_IT "%O0 OPS Spento"
#define UI_TEXT_OPS_CLASSIC_IT "%O1 OPS Classico" #define UI_TEXT_OPS_CLASSIC_IT "%O1 OPS Classico"
#define UI_TEXT_OPS_FAST_IT "%O2 OPS Veloce" #define UI_TEXT_OPS_FAST_IT "%O2 OPS Veloce"
@ -1638,15 +1645,15 @@
#define UI_TEXT_FEED_HOME_Y_IT "Origine Y:%fY" #define UI_TEXT_FEED_HOME_Y_IT "Origine Y:%fY"
#define UI_TEXT_FEED_HOME_Z_IT "Origine Z:%fZ" #define UI_TEXT_FEED_HOME_Z_IT "Origine Z:%fZ"
#define UI_TEXT_FEED_HOME_Z_DELTA_IT "Origine:%fZ" #define UI_TEXT_FEED_HOME_Z_DELTA_IT "Origine:%fZ"
#define UI_TEXT_ACTION_XPOSITION4A_IT "X:%x0 mm" #define UI_TEXT_ACTION_XPOSITION4A_IT "X:%x0 mm %dx%dX"
#define UI_TEXT_ACTION_XPOSITION4B_IT "Min finec.:%sx" #define UI_TEXT_ACTION_XPOSITION4B_IT "Min finec.:%sx"
#define UI_TEXT_ACTION_XPOSITION4C_IT "Max finec.:%sX" #define UI_TEXT_ACTION_XPOSITION4C_IT "Max finec.:%sX"
#define UI_TEXT_ACTION_XPOSITION4D_IT "" #define UI_TEXT_ACTION_XPOSITION4D_IT ""
#define UI_TEXT_ACTION_YPOSITION4A_IT "Y:%x1 mm" #define UI_TEXT_ACTION_YPOSITION4A_IT "Y:%x1 mm %dy%dY"
#define UI_TEXT_ACTION_YPOSITION4B_IT "Min finec.:%sy" #define UI_TEXT_ACTION_YPOSITION4B_IT "Min finec.:%sy"
#define UI_TEXT_ACTION_YPOSITION4C_IT "Max finec.:%sY" #define UI_TEXT_ACTION_YPOSITION4C_IT "Max finec.:%sY"
#define UI_TEXT_ACTION_YPOSITION4D_IT "" #define UI_TEXT_ACTION_YPOSITION4D_IT ""
#define UI_TEXT_ACTION_ZPOSITION4A_IT "Z:%x2 mm" #define UI_TEXT_ACTION_ZPOSITION4A_IT "Z:%x2 mm %dz%dZ"
#define UI_TEXT_ACTION_ZPOSITION4B_IT "Min finec.:%sz" #define UI_TEXT_ACTION_ZPOSITION4B_IT "Min finec.:%sz"
#define UI_TEXT_ACTION_ZPOSITION4C_IT "Max finec.:%sZ" #define UI_TEXT_ACTION_ZPOSITION4C_IT "Max finec.:%sZ"
#define UI_TEXT_ACTION_ZPOSITION4D_IT "" #define UI_TEXT_ACTION_ZPOSITION4D_IT ""
@ -1784,23 +1791,23 @@
#define UI_TEXT_LANGUAGE_IT "Lingua" #define UI_TEXT_LANGUAGE_IT "Lingua"
#if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0 #if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0
#define UI_TEXT_MAINPAGE6_1_IT "\xa %ec/%Ec\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_IT "\xa %ec/%Ec\xb0 X:%x0"
#else #else
#define UI_TEXT_MAINPAGE6_1_IT "\xa %e0/%E0\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_IT "\xa %e0/%E0\xb0 X:%x0"
#endif // NUM_EXTRUDER #endif // NUM_EXTRUDER
#if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_2_IT "\xa %e1/%E1\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_IT "\xa %e1/%E1\xb0 Y:%x1"
#elif HAVE_HEATED_BED #elif HAVE_HEATED_BED
#define UI_TEXT_MAINPAGE6_2_IT "\xe %eb/%Eb\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_IT "\xe %eb/%Eb\xb0 Y:%x1"
#else #else
#define UI_TEXT_MAINPAGE6_2_IT " Y:%x1" #define UI_TEXT_MAINPAGE6_2_IT " Y:%x1"
#endif #endif
#if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_3_IT "\xe %eb/%Eb\xb0 Z:%x2" #define UI_TEXT_MAINPAGE6_3_IT "\xe %eb/%Eb\xb0 Z:%x2"
#elif FEATURE_DITTO_PRINTING #elif FEATURE_DITTO_PRINTING
#define UI_TEXT_MAINPAGE6_3_IT "Copie: %ed Z:%x2" #define UI_TEXT_MAINPAGE6_3_IT "Copie: %ed Z:%x2"
#else #else
#define UI_TEXT_MAINPAGE6_3_IT "Flusso:\xfd %of%%% Z:%x2" #define UI_TEXT_MAINPAGE6_3_IT "Flusso:\xfd %of%%% Z:%x2"
#endif #endif
#define UI_TEXT_MAINPAGE6_4_IT "Mul: %om%%% \xfd E: %x4m" #define UI_TEXT_MAINPAGE6_4_IT "Mul: %om%%% \xfd E: %x4m"
#define UI_TEXT_MAINPAGE6_5_IT "Buf: %oB" #define UI_TEXT_MAINPAGE6_5_IT "Buf: %oB"
@ -1907,6 +1914,7 @@
#define UI_TEXT_DBG_INFO_ES "Info :%di" #define UI_TEXT_DBG_INFO_ES "Info :%di"
#define UI_TEXT_DBG_ERROR_ES "Errors :%de" #define UI_TEXT_DBG_ERROR_ES "Errors :%de"
#define UI_TEXT_DBG_DRYRUN_ES "Ejecucion vacio:%dd" #define UI_TEXT_DBG_DRYRUN_ES "Ejecucion vacio:%dd"
#define UI_TEXT_DBG_ENDSTOP_ES "EndStop:%dp"
#define UI_TEXT_OPS_OFF_ES "%O0 OPS Off" #define UI_TEXT_OPS_OFF_ES "%O0 OPS Off"
#define UI_TEXT_OPS_CLASSIC_ES "%O1 OPS Classica" #define UI_TEXT_OPS_CLASSIC_ES "%O1 OPS Classica"
#define UI_TEXT_OPS_FAST_ES "%O2 OPS Rapida" #define UI_TEXT_OPS_FAST_ES "%O2 OPS Rapida"
@ -1930,15 +1938,15 @@
#define UI_TEXT_FEED_HOME_Y_ES "Y Home:%fY" #define UI_TEXT_FEED_HOME_Y_ES "Y Home:%fY"
#define UI_TEXT_FEED_HOME_Z_ES "Z Home:%fZ" #define UI_TEXT_FEED_HOME_Z_ES "Z Home:%fZ"
#define UI_TEXT_FEED_HOME_Z_DELTA_ES "Home:%fZ" #define UI_TEXT_FEED_HOME_Z_DELTA_ES "Home:%fZ"
#define UI_TEXT_ACTION_XPOSITION4A_ES "X:%x0 mm" #define UI_TEXT_ACTION_XPOSITION4A_ES "X:%x0 mm %dx%dX"
#define UI_TEXT_ACTION_XPOSITION4B_ES "Fin Carrera Min:%sx" #define UI_TEXT_ACTION_XPOSITION4B_ES "Fin Carrera Min:%sx"
#define UI_TEXT_ACTION_XPOSITION4C_ES "Max:%sX" #define UI_TEXT_ACTION_XPOSITION4C_ES "Max:%sX"
#define UI_TEXT_ACTION_XPOSITION4D_ES "" #define UI_TEXT_ACTION_XPOSITION4D_ES ""
#define UI_TEXT_ACTION_YPOSITION4A_ES "Y:%x1 mm" #define UI_TEXT_ACTION_YPOSITION4A_ES "Y:%x1 mm %dy%dY"
#define UI_TEXT_ACTION_YPOSITION4B_ES "Fin Carrera Min:%sy" #define UI_TEXT_ACTION_YPOSITION4B_ES "Fin Carrera Min:%sy"
#define UI_TEXT_ACTION_YPOSITION4C_ES "Max:%sY" #define UI_TEXT_ACTION_YPOSITION4C_ES "Max:%sY"
#define UI_TEXT_ACTION_YPOSITION4D_ES "" #define UI_TEXT_ACTION_YPOSITION4D_ES ""
#define UI_TEXT_ACTION_ZPOSITION4A_ES "Z:%x2 mm" #define UI_TEXT_ACTION_ZPOSITION4A_ES "Z:%x2 mm %dz%dZ"
#define UI_TEXT_ACTION_ZPOSITION4B_ES "Fin Carrera Min:%sz" #define UI_TEXT_ACTION_ZPOSITION4B_ES "Fin Carrera Min:%sz"
#define UI_TEXT_ACTION_ZPOSITION4C_ES "Max:%sZ" #define UI_TEXT_ACTION_ZPOSITION4C_ES "Max:%sZ"
#define UI_TEXT_ACTION_ZPOSITION4D_ES "" #define UI_TEXT_ACTION_ZPOSITION4D_ES ""
@ -2076,23 +2084,23 @@
#define UI_TEXT_LANGUAGE_ES "Idioma" #define UI_TEXT_LANGUAGE_ES "Idioma"
#if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0 #if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0
#define UI_TEXT_MAINPAGE6_1_ES "\xa %ec/%Ec\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_ES "\xa %ec/%Ec\xb0 X:%x0"
#else #else
#define UI_TEXT_MAINPAGE6_1_ES "\xa %e0/%E0\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_ES "\xa %e0/%E0\xb0 X:%x0"
#endif // NUM_EXTRUDER #endif // NUM_EXTRUDER
#if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_2_ES "\xa %e1/%E1\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_ES "\xa %e1/%E1\xb0 Y:%x1"
#elif HAVE_HEATED_BED #elif HAVE_HEATED_BED
#define UI_TEXT_MAINPAGE6_2_ES "\xe %eb/%Eb\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_ES "\xe %eb/%Eb\xb0 Y:%x1"
#else #else
#define UI_TEXT_MAINPAGE6_2_ES " Y:%x1" #define UI_TEXT_MAINPAGE6_2_ES " Y:%x1"
#endif #endif
#if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_3_ES "\xe %eb/%Eb\xb0 Z:%x2" #define UI_TEXT_MAINPAGE6_3_ES "\xe %eb/%Eb\xb0 Z:%x2"
#elif FEATURE_DITTO_PRINTING #elif FEATURE_DITTO_PRINTING
#define UI_TEXT_MAINPAGE6_3_ES "Copias: %ed Z:%x2" #define UI_TEXT_MAINPAGE6_3_ES "Copias: %ed Z:%x2"
#else #else
#define UI_TEXT_MAINPAGE6_3_ES "Flujo:\xfd %of%%% Z:%x2" #define UI_TEXT_MAINPAGE6_3_ES "Flujo:\xfd %of%%% Z:%x2"
#endif #endif
#define UI_TEXT_MAINPAGE6_4_ES "Mul: %om%%% \xfd E: %x4m" #define UI_TEXT_MAINPAGE6_4_ES "Mul: %om%%% \xfd E: %x4m"
#define UI_TEXT_MAINPAGE6_5_ES "Buf: %oB" #define UI_TEXT_MAINPAGE6_5_ES "Buf: %oB"
@ -2199,6 +2207,7 @@
#define UI_TEXT_DBG_INFO_SE "Info: %di" #define UI_TEXT_DBG_INFO_SE "Info: %di"
#define UI_TEXT_DBG_ERROR_SE "Errors: %de" #define UI_TEXT_DBG_ERROR_SE "Errors: %de"
#define UI_TEXT_DBG_DRYRUN_SE "Torrk" STR_ouml "r:%dd" #define UI_TEXT_DBG_DRYRUN_SE "Torrk" STR_ouml "r:%dd"
#define UI_TEXT_DBG_ENDSTOP_SE "EndStop:%dp"
#define UI_TEXT_OPS_OFF_SE "%O1 OPS av" #define UI_TEXT_OPS_OFF_SE "%O1 OPS av"
#define UI_TEXT_OPS_CLASSIC_SE "%O2 OPS klassisk" #define UI_TEXT_OPS_CLASSIC_SE "%O2 OPS klassisk"
#define UI_TEXT_OPS_FAST_SE "%O3 OPS snabb" #define UI_TEXT_OPS_FAST_SE "%O3 OPS snabb"
@ -2222,15 +2231,15 @@
#define UI_TEXT_FEED_HOME_Y_SE "Ref Y:%fY" #define UI_TEXT_FEED_HOME_Y_SE "Ref Y:%fY"
#define UI_TEXT_FEED_HOME_Z_SE "Ref Z:%fZ" #define UI_TEXT_FEED_HOME_Z_SE "Ref Z:%fZ"
#define UI_TEXT_FEED_HOME_Z_DELTA_SE "Ref:%fZ" #define UI_TEXT_FEED_HOME_Z_DELTA_SE "Ref:%fZ"
#define UI_TEXT_ACTION_XPOSITION4A_SE "X:%x0 mm" #define UI_TEXT_ACTION_XPOSITION4A_SE "X:%x0 mm %dx%dX"
#define UI_TEXT_ACTION_XPOSITION4B_SE "Min " STR_auml "ndl" STR_auml "ge:%sx" #define UI_TEXT_ACTION_XPOSITION4B_SE "Min " STR_auml "ndl" STR_auml "ge:%sx"
#define UI_TEXT_ACTION_XPOSITION4C_SE "Max " STR_auml "ndl" STR_auml "ge:%sX" #define UI_TEXT_ACTION_XPOSITION4C_SE "Max " STR_auml "ndl" STR_auml "ge:%sX"
#define UI_TEXT_ACTION_XPOSITION4D_SE "" #define UI_TEXT_ACTION_XPOSITION4D_SE ""
#define UI_TEXT_ACTION_YPOSITION4A_SE "Y:%x1 mm" #define UI_TEXT_ACTION_YPOSITION4A_SE "Y:%x1 mm %dy%dY"
#define UI_TEXT_ACTION_YPOSITION4B_SE "Min " STR_auml "ndl" STR_auml "ge:%sy" #define UI_TEXT_ACTION_YPOSITION4B_SE "Min " STR_auml "ndl" STR_auml "ge:%sy"
#define UI_TEXT_ACTION_YPOSITION4C_SE "Max " STR_auml "ndl" STR_auml "ge:%sY" #define UI_TEXT_ACTION_YPOSITION4C_SE "Max " STR_auml "ndl" STR_auml "ge:%sY"
#define UI_TEXT_ACTION_YPOSITION4D_SE "" #define UI_TEXT_ACTION_YPOSITION4D_SE ""
#define UI_TEXT_ACTION_ZPOSITION4A_SE "Z:%x2 mm" #define UI_TEXT_ACTION_ZPOSITION4A_SE "Z:%x2 mm %dz%dZ"
#define UI_TEXT_ACTION_ZPOSITION4B_SE "Min " STR_auml "ndl" STR_auml "ge:%sz" #define UI_TEXT_ACTION_ZPOSITION4B_SE "Min " STR_auml "ndl" STR_auml "ge:%sz"
#define UI_TEXT_ACTION_ZPOSITION4C_SE "Max " STR_auml "ndl" STR_auml "ge:%sZ" #define UI_TEXT_ACTION_ZPOSITION4C_SE "Max " STR_auml "ndl" STR_auml "ge:%sZ"
#define UI_TEXT_ACTION_ZPOSITION4D_SE "" #define UI_TEXT_ACTION_ZPOSITION4D_SE ""
@ -2368,23 +2377,23 @@
#define UI_TEXT_LANGUAGE_SE "Sprak" #define UI_TEXT_LANGUAGE_SE "Sprak"
#if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0 #if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0
#define UI_TEXT_MAINPAGE6_1_SE "\xa %ec/%Ec\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_SE "\xa %ec/%Ec\xb0 X:%x0"
#else #else
#define UI_TEXT_MAINPAGE6_1_SE "\xa %e0/%E0\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_SE "\xa %e0/%E0\xb0 X:%x0"
#endif // NUM_EXTRUDER #endif // NUM_EXTRUDER
#if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_2_SE "\xa %e1/%E1\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_SE "\xa %e1/%E1\xb0 Y:%x1"
#elif HAVE_HEATED_BED #elif HAVE_HEATED_BED
#define UI_TEXT_MAINPAGE6_2_SE "\xe %eb/%Eb\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_SE "\xe %eb/%Eb\xb0 Y:%x1"
#else #else
#define UI_TEXT_MAINPAGE6_2_SE " Y:%x1" #define UI_TEXT_MAINPAGE6_2_SE " Y:%x1"
#endif #endif
#if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_3_SE "\xe %eb/%Eb\xb0 Z:%x2" #define UI_TEXT_MAINPAGE6_3_SE "\xe %eb/%Eb\xb0 Z:%x2"
#elif FEATURE_DITTO_PRINTING #elif FEATURE_DITTO_PRINTING
#define UI_TEXT_MAINPAGE6_3_SE "Kopior: %ed Z:%x2" #define UI_TEXT_MAINPAGE6_3_SE "Kopior: %ed Z:%x2"
#else #else
#define UI_TEXT_MAINPAGE6_3_SE "Fl" STR_ouml "de:\xfd %of%%% Z:%x2" #define UI_TEXT_MAINPAGE6_3_SE "Fl" STR_ouml "de:\xfd %of%%% Z:%x2"
#endif #endif
#define UI_TEXT_MAINPAGE6_4_SE "Mul: %om%%% \xfd E: %x4m" #define UI_TEXT_MAINPAGE6_4_SE "Mul: %om%%% \xfd E: %x4m"
#define UI_TEXT_MAINPAGE6_5_SE "Buf: %oB" #define UI_TEXT_MAINPAGE6_5_SE "Buf: %oB"
@ -2447,7 +2456,7 @@
#define UI_TEXT_SD_CARD_FR "Carte SD" #define UI_TEXT_SD_CARD_FR "Carte SD"
#define UI_TEXT_DEBUGGING_FR "Deboguer" #define UI_TEXT_DEBUGGING_FR "Deboguer"
#define UI_TEXT_HOME_DELTA_FR "Accueil Delta" #define UI_TEXT_HOME_DELTA_FR "Accueil Delta"
#define UI_TEXT_HOME_ALL_FR "Accueil Tout" #define UI_TEXT_HOME_ALL_FR "Accueil XYZ"
#define UI_TEXT_HOME_X_FR "Accueil X" #define UI_TEXT_HOME_X_FR "Accueil X"
#define UI_TEXT_HOME_Y_FR "Accueil Y" #define UI_TEXT_HOME_Y_FR "Accueil Y"
#define UI_TEXT_HOME_Z_FR "Accueil Z" #define UI_TEXT_HOME_Z_FR "Accueil Z"
@ -2488,10 +2497,11 @@
#define UI_TEXT_ACCELERATION_FR "Acceleration" #define UI_TEXT_ACCELERATION_FR "Acceleration"
#define UI_TEXT_STORE_TO_EEPROM_FR "Stock. Dans EEPROM" #define UI_TEXT_STORE_TO_EEPROM_FR "Stock. Dans EEPROM"
#define UI_TEXT_LOAD_EEPROM_FR "Charg. f. EEPROM" #define UI_TEXT_LOAD_EEPROM_FR "Charg. f. EEPROM"
#define UI_TEXT_DBG_ECHO_FR "Echo :%do" #define UI_TEXT_DBG_ECHO_FR "Echo :%do"
#define UI_TEXT_DBG_INFO_FR "Info :%di" #define UI_TEXT_DBG_INFO_FR "Info :%di"
#define UI_TEXT_DBG_ERROR_FR "Erreurs :%de" #define UI_TEXT_DBG_ERROR_FR "Erreurs :%de"
#define UI_TEXT_DBG_DRYRUN_FR "Fonct. a Vide:%dd" #define UI_TEXT_DBG_DRYRUN_FR "Fonct. a Vide:%dd"
#define UI_TEXT_DBG_ENDSTOP_FR "Fin de course:%dp"
#define UI_TEXT_OPS_OFF_FR "%O0 OPS Off" #define UI_TEXT_OPS_OFF_FR "%O0 OPS Off"
#define UI_TEXT_OPS_CLASSIC_FR "%O1 OPS Classiq." #define UI_TEXT_OPS_CLASSIC_FR "%O1 OPS Classiq."
#define UI_TEXT_OPS_FAST_FR "%O2 OPS Rapide" #define UI_TEXT_OPS_FAST_FR "%O2 OPS Rapide"
@ -2515,15 +2525,15 @@
#define UI_TEXT_FEED_HOME_Y_FR "Accueil Y:%fY" #define UI_TEXT_FEED_HOME_Y_FR "Accueil Y:%fY"
#define UI_TEXT_FEED_HOME_Z_FR "Accueil Z:%fZ" #define UI_TEXT_FEED_HOME_Z_FR "Accueil Z:%fZ"
#define UI_TEXT_FEED_HOME_Z_DELTA_FR "Accueil:%fZ" #define UI_TEXT_FEED_HOME_Z_DELTA_FR "Accueil:%fZ"
#define UI_TEXT_ACTION_XPOSITION4A_FR "X:%x0 mm" #define UI_TEXT_ACTION_XPOSITION4A_FR "X:%x0 mm %dx%dX"
#define UI_TEXT_ACTION_XPOSITION4B_FR "Min Butee:%sx" #define UI_TEXT_ACTION_XPOSITION4B_FR "Min Butee:%sx"
#define UI_TEXT_ACTION_XPOSITION4C_FR "Max Butee:%sX" #define UI_TEXT_ACTION_XPOSITION4C_FR "Max Butee:%sX"
#define UI_TEXT_ACTION_XPOSITION4D_FR "" #define UI_TEXT_ACTION_XPOSITION4D_FR ""
#define UI_TEXT_ACTION_YPOSITION4A_FR "Y:%x1 mm" #define UI_TEXT_ACTION_YPOSITION4A_FR "Y:%x1 mm %dy%dY"
#define UI_TEXT_ACTION_YPOSITION4B_FR "Min Butee:%sy" #define UI_TEXT_ACTION_YPOSITION4B_FR "Min Butee:%sy"
#define UI_TEXT_ACTION_YPOSITION4C_FR "Max Butee:%sY" #define UI_TEXT_ACTION_YPOSITION4C_FR "Max Butee:%sY"
#define UI_TEXT_ACTION_YPOSITION4D_FR "" #define UI_TEXT_ACTION_YPOSITION4D_FR ""
#define UI_TEXT_ACTION_ZPOSITION4A_FR "Z:%x2 mm" #define UI_TEXT_ACTION_ZPOSITION4A_FR "Z:%x2 mm %dz%dZ"
#define UI_TEXT_ACTION_ZPOSITION4B_FR "Min Butee:%sz" #define UI_TEXT_ACTION_ZPOSITION4B_FR "Min Butee:%sz"
#define UI_TEXT_ACTION_ZPOSITION4C_FR "Max Butee:%sZ" #define UI_TEXT_ACTION_ZPOSITION4C_FR "Max Butee:%sZ"
#define UI_TEXT_ACTION_ZPOSITION4D_FR "" #define UI_TEXT_ACTION_ZPOSITION4D_FR ""
@ -2661,23 +2671,23 @@
#define UI_TEXT_LANGUAGE_FR "Langue" #define UI_TEXT_LANGUAGE_FR "Langue"
#if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0 #if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0
#define UI_TEXT_MAINPAGE6_1_FR "\xa %ec/%Ec\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_FR "\xa %ec/%Ec\xb0 X:%x0"
#else #else
#define UI_TEXT_MAINPAGE6_1_FR "\xa %e0/%E0\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_FR "\xa %e0/%E0\xb0 X:%x0"
#endif // NUM_EXTRUDER #endif // NUM_EXTRUDER
#if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_2_FR "\xa %e1/%E1\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_FR "\xa %e1/%E1\xb0 Y:%x1"
#elif HAVE_HEATED_BED #elif HAVE_HEATED_BED
#define UI_TEXT_MAINPAGE6_2_FR "\xe %eb/%Eb\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_FR "\xe %eb/%Eb\xb0 Y:%x1"
#else #else
#define UI_TEXT_MAINPAGE6_2_FR " Y:%x1" #define UI_TEXT_MAINPAGE6_2_FR " Y:%x1"
#endif #endif
#if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_3_FR "\xe %eb/%Eb\xb0 Z:%x2" #define UI_TEXT_MAINPAGE6_3_FR "\xe %eb/%Eb\xb0 Z:%x2"
#elif FEATURE_DITTO_PRINTING #elif FEATURE_DITTO_PRINTING
#define UI_TEXT_MAINPAGE6_3_FR "Copies: %ed Z:%x2" #define UI_TEXT_MAINPAGE6_3_FR "Copies: %ed Z:%x2"
#else #else
#define UI_TEXT_MAINPAGE6_3_FR "Flow:\xfd %of%%% Z:%x2" #define UI_TEXT_MAINPAGE6_3_FR "Flow:\xfd %of%%% Z:%x2"
#endif #endif
#define UI_TEXT_MAINPAGE6_4_FR "Mul: %om%%% \xfd E: %x4m" #define UI_TEXT_MAINPAGE6_4_FR "Mul: %om%%% \xfd E: %x4m"
#define UI_TEXT_MAINPAGE6_5_FR "Buf: %oB" #define UI_TEXT_MAINPAGE6_5_FR "Buf: %oB"
@ -2785,8 +2795,9 @@
#define UI_TEXT_LOAD_EEPROM_CZ "Nahrat z EEPROM" #define UI_TEXT_LOAD_EEPROM_CZ "Nahrat z EEPROM"
#define UI_TEXT_DBG_ECHO_CZ "Echo :%do" #define UI_TEXT_DBG_ECHO_CZ "Echo :%do"
#define UI_TEXT_DBG_INFO_CZ "Info :%di" #define UI_TEXT_DBG_INFO_CZ "Info :%di"
#define UI_TEXT_DBG_ERROR_CZ "Chyby :%de" #define UI_TEXT_DBG_ERROR_CZ "Chyby :%de"
#define UI_TEXT_DBG_DRYRUN_CZ "Beh nanecisto:%dd" #define UI_TEXT_DBG_DRYRUN_CZ "Beh nanecisto:%dd"
#define UI_TEXT_DBG_ENDSTOP_CZ "EndStop:%dp"
#define UI_TEXT_OPS_OFF_CZ "%O0 OPS Vypnuto" #define UI_TEXT_OPS_OFF_CZ "%O0 OPS Vypnuto"
#define UI_TEXT_OPS_CLASSIC_CZ "%O1 OPS Klasicke" #define UI_TEXT_OPS_CLASSIC_CZ "%O1 OPS Klasicke"
#define UI_TEXT_OPS_FAST_CZ "%O2 OPS Rychle" #define UI_TEXT_OPS_FAST_CZ "%O2 OPS Rychle"
@ -2810,15 +2821,15 @@
#define UI_TEXT_FEED_HOME_Y_CZ "Home Y:%fY" #define UI_TEXT_FEED_HOME_Y_CZ "Home Y:%fY"
#define UI_TEXT_FEED_HOME_Z_CZ "Home Z:%fZ" #define UI_TEXT_FEED_HOME_Z_CZ "Home Z:%fZ"
#define UI_TEXT_FEED_HOME_Z_DELTA_CZ "Home:%fZ" #define UI_TEXT_FEED_HOME_Z_DELTA_CZ "Home:%fZ"
#define UI_TEXT_ACTION_XPOSITION4A_CZ "X:%x0 mm" #define UI_TEXT_ACTION_XPOSITION4A_CZ "X:%x0 mm %dx%dX"
#define UI_TEXT_ACTION_XPOSITION4B_CZ "Min koncak:%sx" #define UI_TEXT_ACTION_XPOSITION4B_CZ "Min koncak:%sx"
#define UI_TEXT_ACTION_XPOSITION4C_CZ "Max koncak:%sX" #define UI_TEXT_ACTION_XPOSITION4C_CZ "Max koncak:%sX"
#define UI_TEXT_ACTION_XPOSITION4D_CZ "" #define UI_TEXT_ACTION_XPOSITION4D_CZ ""
#define UI_TEXT_ACTION_YPOSITION4A_CZ "Y:%x1 mm" #define UI_TEXT_ACTION_YPOSITION4A_CZ "Y:%x1 mm %dy%dY"
#define UI_TEXT_ACTION_YPOSITION4B_CZ "Min koncak:%sy" #define UI_TEXT_ACTION_YPOSITION4B_CZ "Min koncak:%sy"
#define UI_TEXT_ACTION_YPOSITION4C_CZ "Max koncak:%sY" #define UI_TEXT_ACTION_YPOSITION4C_CZ "Max koncak:%sY"
#define UI_TEXT_ACTION_YPOSITION4D_CZ "" #define UI_TEXT_ACTION_YPOSITION4D_CZ ""
#define UI_TEXT_ACTION_ZPOSITION4A_CZ "Z:%x2 mm" #define UI_TEXT_ACTION_ZPOSITION4A_CZ "Z:%x2 mm %dz%dZ"
#define UI_TEXT_ACTION_ZPOSITION4B_CZ "Min koncak:%sz" #define UI_TEXT_ACTION_ZPOSITION4B_CZ "Min koncak:%sz"
#define UI_TEXT_ACTION_ZPOSITION4C_CZ "Max koncak:%sZ" #define UI_TEXT_ACTION_ZPOSITION4C_CZ "Max koncak:%sZ"
#define UI_TEXT_ACTION_ZPOSITION4D_CZ "" #define UI_TEXT_ACTION_ZPOSITION4D_CZ ""
@ -2956,23 +2967,23 @@
#define UI_TEXT_LANGUAGE_CZ "Jazyk" #define UI_TEXT_LANGUAGE_CZ "Jazyk"
#if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0 #if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0
#define UI_TEXT_MAINPAGE6_1_CZ "\xa %ec/%Ec\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_CZ "\xa %ec/%Ec\xb0 X:%x0"
#else #else
#define UI_TEXT_MAINPAGE6_1_CZ "\xa %e0/%E0\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_CZ "\xa %e0/%E0\xb0 X:%x0"
#endif // NUM_EXTRUDER #endif // NUM_EXTRUDER
#if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_2_CZ "\xa %e1/%E1\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_CZ "\xa %e1/%E1\xb0 Y:%x1"
#elif HAVE_HEATED_BED #elif HAVE_HEATED_BED
#define UI_TEXT_MAINPAGE6_2_CZ "\xe %eb/%Eb\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_CZ "\xe %eb/%Eb\xb0 Y:%x1"
#else #else
#define UI_TEXT_MAINPAGE6_2_CZ " Y:%x1" #define UI_TEXT_MAINPAGE6_2_CZ " Y:%x1"
#endif #endif
#if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_3_CZ "\xe %eb/%Eb\xb0 Z:%x2" #define UI_TEXT_MAINPAGE6_3_CZ "\xe %eb/%Eb\xb0 Z:%x2"
#elif FEATURE_DITTO_PRINTING #elif FEATURE_DITTO_PRINTING
#define UI_TEXT_MAINPAGE6_3_CZ "Kopii: %ed Z:%x2" #define UI_TEXT_MAINPAGE6_3_CZ "Kopii: %ed Z:%x2"
#else #else
#define UI_TEXT_MAINPAGE6_3_CZ "Flow:\xfd %of%%% Z:%x2" #define UI_TEXT_MAINPAGE6_3_CZ "Flow:\xfd %of%%% Z:%x2"
#endif #endif
#define UI_TEXT_MAINPAGE6_4_CZ "Mul: %om%%% \xfd E: %x4m" #define UI_TEXT_MAINPAGE6_4_CZ "Mul: %om%%% \xfd E: %x4m"
#define UI_TEXT_MAINPAGE6_5_CZ "Buf: %oB" #define UI_TEXT_MAINPAGE6_5_CZ "Buf: %oB"
@ -3079,6 +3090,7 @@
#define UI_TEXT_DBG_INFO_PL "Informacje : %di" #define UI_TEXT_DBG_INFO_PL "Informacje : %di"
#define UI_TEXT_DBG_ERROR_PL "Bledy : %de" #define UI_TEXT_DBG_ERROR_PL "Bledy : %de"
#define UI_TEXT_DBG_DRYRUN_PL "Bez wydruku : %dd" #define UI_TEXT_DBG_DRYRUN_PL "Bez wydruku : %dd"
#define UI_TEXT_DBG_ENDSTOP_PL "EndStop : %dp"
#define UI_TEXT_OPS_OFF_PL "%O0 OPS Off" #define UI_TEXT_OPS_OFF_PL "%O0 OPS Off"
#define UI_TEXT_OPS_CLASSIC_PL "%O1 OPS Classic" #define UI_TEXT_OPS_CLASSIC_PL "%O1 OPS Classic"
#define UI_TEXT_OPS_FAST_PL "%O2 OPS Fast" #define UI_TEXT_OPS_FAST_PL "%O2 OPS Fast"
@ -3102,15 +3114,15 @@
#define UI_TEXT_FEED_HOME_Y_PL "Powrot Y:%fY" #define UI_TEXT_FEED_HOME_Y_PL "Powrot Y:%fY"
#define UI_TEXT_FEED_HOME_Z_PL "Powrot Z:%fZ" #define UI_TEXT_FEED_HOME_Z_PL "Powrot Z:%fZ"
#define UI_TEXT_FEED_HOME_Z_DELTA_PL "Powrot:%fZ" #define UI_TEXT_FEED_HOME_Z_DELTA_PL "Powrot:%fZ"
#define UI_TEXT_ACTION_XPOSITION4A_PL "X:%x0 mm" #define UI_TEXT_ACTION_XPOSITION4A_PL "X:%x0 mm %dx%dX"
#define UI_TEXT_ACTION_XPOSITION4B_PL "Krancowka MIN: %sx" #define UI_TEXT_ACTION_XPOSITION4B_PL "Krancowka MIN: %sx"
#define UI_TEXT_ACTION_XPOSITION4C_PL "Krancowka MAX: %sX" #define UI_TEXT_ACTION_XPOSITION4C_PL "Krancowka MAX: %sX"
#define UI_TEXT_ACTION_XPOSITION4D_PL "" #define UI_TEXT_ACTION_XPOSITION4D_PL ""
#define UI_TEXT_ACTION_YPOSITION4A_PL "Y:%x1 mm" #define UI_TEXT_ACTION_YPOSITION4A_PL "Y:%x1 mm %dy%dY"
#define UI_TEXT_ACTION_YPOSITION4B_PL "Krancowka MIN: %sy" #define UI_TEXT_ACTION_YPOSITION4B_PL "Krancowka MIN: %sy"
#define UI_TEXT_ACTION_YPOSITION4C_PL "Krancowka Max: %sY" #define UI_TEXT_ACTION_YPOSITION4C_PL "Krancowka Max: %sY"
#define UI_TEXT_ACTION_YPOSITION4D_PL "" #define UI_TEXT_ACTION_YPOSITION4D_PL ""
#define UI_TEXT_ACTION_ZPOSITION4A_PL "Z:%x2 mm" #define UI_TEXT_ACTION_ZPOSITION4A_PL "Z:%x2 mm %dz%dZ"
#define UI_TEXT_ACTION_ZPOSITION4B_PL "Krancowka MIN: %sz" #define UI_TEXT_ACTION_ZPOSITION4B_PL "Krancowka MIN: %sz"
#define UI_TEXT_ACTION_ZPOSITION4C_PL "Krancowka Max: %sZ" #define UI_TEXT_ACTION_ZPOSITION4C_PL "Krancowka Max: %sZ"
#define UI_TEXT_ACTION_ZPOSITION4D_PL "" #define UI_TEXT_ACTION_ZPOSITION4D_PL ""
@ -3247,23 +3259,23 @@
#define UI_TEXT_COATING_CUSTOM_PL "Inna grubosc:%BCmm" #define UI_TEXT_COATING_CUSTOM_PL "Inna grubosc:%BCmm"
#define UI_TEXT_LANGUAGE_PL "Jezyk" #define UI_TEXT_LANGUAGE_PL "Jezyk"
#if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0 #if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0
#define UI_TEXT_MAINPAGE6_1_PL "\xa %ec/%Ec\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_PL "\xa %ec/%Ec\xb0 X:%x0"
#else #else
#define UI_TEXT_MAINPAGE6_1_PL "\xa %e0/%E0\xb0 X:%x0" #define UI_TEXT_MAINPAGE6_1_PL "\xa %e0/%E0\xb0 X:%x0"
#endif // NUM_EXTRUDER #endif // NUM_EXTRUDER
#if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_2_PL "\xa %e1/%E1\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_PL "\xa %e1/%E1\xb0 Y:%x1"
#elif HAVE_HEATED_BED #elif HAVE_HEATED_BED
#define UI_TEXT_MAINPAGE6_2_PL "\xe %eb/%Eb\xb0 Y:%x1" #define UI_TEXT_MAINPAGE6_2_PL "\xe %eb/%Eb\xb0 Y:%x1"
#else #else
#define UI_TEXT_MAINPAGE6_2_PL " Y:%x1" #define UI_TEXT_MAINPAGE6_2_PL " Y:%x1"
#endif #endif
#if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0 #if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_3_PL "\xe %eb/%Eb\xb0 Z:%x2" #define UI_TEXT_MAINPAGE6_3_PL "\xe %eb/%Eb\xb0 Z:%x2"
#elif FEATURE_DITTO_PRINTING #elif FEATURE_DITTO_PRINTING
#define UI_TEXT_MAINPAGE6_3_PL "Kopie: %ed Z:%x2" #define UI_TEXT_MAINPAGE6_3_PL "Kopie: %ed Z:%x2"
#else #else
#define UI_TEXT_MAINPAGE6_3_PL "Przep:\xfd %of%%% Z:%x2" #define UI_TEXT_MAINPAGE6_3_PL "Przep:\xfd %of%%% Z:%x2"
#endif #endif
#define UI_TEXT_MAINPAGE6_4_PL "Mul: %om%%% \xfd E: %x4m" #define UI_TEXT_MAINPAGE6_4_PL "Mul: %om%%% \xfd E: %x4m"
#define UI_TEXT_MAINPAGE6_5_PL "Buf: %oB" #define UI_TEXT_MAINPAGE6_5_PL "Buf: %oB"
@ -3363,10 +3375,11 @@
#define UI_TEXT_ACCELERATION_TR "Ivme" #define UI_TEXT_ACCELERATION_TR "Ivme"
#define UI_TEXT_STORE_TO_EEPROM_TR "EEPROM'a kaydet" #define UI_TEXT_STORE_TO_EEPROM_TR "EEPROM'a kaydet"
#define UI_TEXT_LOAD_EEPROM_TR "EEPROM'dan cagir" #define UI_TEXT_LOAD_EEPROM_TR "EEPROM'dan cagir"
#define UI_TEXT_DBG_ECHO_TR "Echo :%do" #define UI_TEXT_DBG_ECHO_TR "Echo :%do"
#define UI_TEXT_DBG_INFO_TR "Bilgi :%di" #define UI_TEXT_DBG_INFO_TR "Bilgi :%di"
#define UI_TEXT_DBG_ERROR_TR "Hatalar :%de" #define UI_TEXT_DBG_ERROR_TR "Hatalar :%de"
#define UI_TEXT_DBG_DRYRUN_TR "Bosta Calis:%dd" #define UI_TEXT_DBG_DRYRUN_TR "Bosta Calis:%dd"
#define UI_TEXT_DBG_ENDSTOP_TR "EndStop :%dp"
#define UI_TEXT_OPS_OFF_TR "%O0 OPS Kapali" #define UI_TEXT_OPS_OFF_TR "%O0 OPS Kapali"
#define UI_TEXT_OPS_CLASSIC_TR "%O1 OPS Klasik" #define UI_TEXT_OPS_CLASSIC_TR "%O1 OPS Klasik"
#define UI_TEXT_OPS_FAST_TR "%O2 OPS Hizli" #define UI_TEXT_OPS_FAST_TR "%O2 OPS Hizli"
@ -3390,15 +3403,15 @@
#define UI_TEXT_FEED_HOME_Y_TR "Y'yi Sif.Gon.Hiz.:%fY" #define UI_TEXT_FEED_HOME_Y_TR "Y'yi Sif.Gon.Hiz.:%fY"
#define UI_TEXT_FEED_HOME_Z_TR "Z'i Sif.Gon.Hiz:%fZ" #define UI_TEXT_FEED_HOME_Z_TR "Z'i Sif.Gon.Hiz:%fZ"
#define UI_TEXT_FEED_HOME_Z_DELTA_TR "Delta Sif.Gon.Hiz:%fZ" #define UI_TEXT_FEED_HOME_Z_DELTA_TR "Delta Sif.Gon.Hiz:%fZ"
#define UI_TEXT_ACTION_XPOSITION4A_TR "X:%x0 mm" #define UI_TEXT_ACTION_XPOSITION4A_TR "X:%x0 mm %dx%dX"
#define UI_TEXT_ACTION_XPOSITION4B_TR "Min endstop:%sx" #define UI_TEXT_ACTION_XPOSITION4B_TR "Min endstop:%sx"
#define UI_TEXT_ACTION_XPOSITION4C_TR "Max endstop:%sX" #define UI_TEXT_ACTION_XPOSITION4C_TR "Max endstop:%sX"
#define UI_TEXT_ACTION_XPOSITION4D_TR "" #define UI_TEXT_ACTION_XPOSITION4D_TR ""
#define UI_TEXT_ACTION_YPOSITION4A_TR "Y:%x1 mm" #define UI_TEXT_ACTION_YPOSITION4A_TR "Y:%x1 mm %dy%dY"
#define UI_TEXT_ACTION_YPOSITION4B_TR "Min endstop:%sy" #define UI_TEXT_ACTION_YPOSITION4B_TR "Min endstop:%sy"
#define UI_TEXT_ACTION_YPOSITION4C_TR "Max endstop:%sY" #define UI_TEXT_ACTION_YPOSITION4C_TR "Max endstop:%sY"
#define UI_TEXT_ACTION_YPOSITION4D_TR "" #define UI_TEXT_ACTION_YPOSITION4D_TR ""
#define UI_TEXT_ACTION_ZPOSITION4A_TR "Z:%x2 mm" #define UI_TEXT_ACTION_ZPOSITION4A_TR "Z:%x2 mm %dz%dZ"
#define UI_TEXT_ACTION_ZPOSITION4B_TR "Min endstop:%sz" #define UI_TEXT_ACTION_ZPOSITION4B_TR "Min endstop:%sz"
#define UI_TEXT_ACTION_ZPOSITION4C_TR "Max endstop:%sZ" #define UI_TEXT_ACTION_ZPOSITION4C_TR "Max endstop:%sZ"
#define UI_TEXT_ACTION_ZPOSITION4D_TR "" #define UI_TEXT_ACTION_ZPOSITION4D_TR ""
@ -3588,3 +3601,293 @@
#define UI_TEXT_Y_OFFSET_TR "Set Y offset:%T1mm" #define UI_TEXT_Y_OFFSET_TR "Set Y offset:%T1mm"
#define UI_TEXT_Z_OFFSET_TR "Set Z offset:%T2mm" #define UI_TEXT_Z_OFFSET_TR "Set Z offset:%T2mm"
// *************** Finnish translation ****************
// ********** By Matti Granstedt 28.01.2016 ***********
#define UI_TEXT_ON_FI "P" STR_auml STR_auml "lle"
#define UI_TEXT_OFF_FI "Sammuta"
#define UI_TEXT_NA_FI "N/A" // Output for not available
#define UI_TEXT_YES_FI "Kyll" STR_auml ""
#define UI_TEXT_NO_FI "Ei"
#define UI_TEXT_PRINT_POS_FI "Tulostaa..."
#define UI_TEXT_PRINTING_FI "Tulosta"
#define UI_TEXT_IDLE_FI "Valmis"
#define UI_TEXT_NOSDCARD_FI "Ei SD korttia"
#define UI_TEXT_ERROR_FI "**** VIRHE ****"
#define UI_TEXT_BACK_FI "Takaisin" cUP
#define UI_TEXT_QUICK_SETTINGS_FI "Pika-asetukset"
#define UI_TEXT_ERRORMSG_FI "%oe"
#define UI_TEXT_CONFIGURATION_FI "Kokoonpano"
#define UI_TEXT_POSITION_FI "Paikka"
#define UI_TEXT_EXTRUDER_FI "Pursotin"
#define UI_TEXT_SD_CARD_FI "SD kortti"
#define UI_TEXT_DEBUGGING_FI "Virheenetsint" STR_auml ""
#define UI_TEXT_HOME_DELTA_FI "Koti delta"
#define UI_TEXT_HOME_ALL_FI "Koti kaikki"
#define UI_TEXT_HOME_X_FI "Koti X"
#define UI_TEXT_HOME_Y_FI "Koti Y"
#define UI_TEXT_HOME_Z_FI "Koti Z"
#define UI_TEXT_PREHEAT_PLA_FI "Esilämmitys PLA"
#define UI_TEXT_PREHEAT_ABS_FI "Esilämmitys ABS"
#define UI_TEXT_LIGHTS_ONOFF_FI "Valot:%lo"
#define UI_TEXT_COOLDOWN_FI "J" STR_auml STR_auml "hdytys"
#define UI_TEXT_SET_TO_ORIGIN_FI "Aseta l" STR_auml "ht" STR_ouml "piste"
#define UI_TEXT_DISABLE_STEPPER_FI "Sammuta moottori"
#define UI_TEXT_X_POSITION_FI "X Paikka"
#define UI_TEXT_X_POS_FAST_FI "X Paikka nopea"
#define UI_TEXT_Y_POSITION_FI "Y Paikka"
#define UI_TEXT_Y_POS_FAST_FI "Y Paikka nopea"
#define UI_TEXT_Z_POSITION_FI "Z Paikka"
#define UI_TEXT_Z_POS_FAST_FI "Z Paikka nopea"
#define UI_TEXT_E_POSITION_FI "Pursot. paikka"
#define UI_TEXT_BED_TEMP_FI "Alustan :%eb/%Eb" cDEG "C"
#define UI_TEXT_EXTR0_TEMP_FI "Purso 1 :%e0/%E0" cDEG "C"
#define UI_TEXT_EXTR1_TEMP_FI "Purso 2 :%e1/%E1" cDEG "C"
#define UI_TEXT_EXTR2_TEMP_FI "Purso 3 :%e2/%E2" cDEG "C"
#define UI_TEXT_EXTR0_OFF_FI "Pursotin 1 Ei"
#define UI_TEXT_EXTR1_OFF_FI "Pursotin 2 Ei"
#define UI_TEXT_EXTR2_OFF_FI "Pursotin 3 Ei"
#define UI_TEXT_EXTR0_SELECT_FI "%X0 Valitse purs.1"
#define UI_TEXT_EXTR1_SELECT_FI "%X1 Valitse purs.2"
#define UI_TEXT_EXTR2_SELECT_FI "%X2 Valitse purs.3"
#define UI_TEXT_EXTR_ORIGIN_FI "Aseta l" STR_auml "ht" STR_ouml "piste"
#define UI_TEXT_PRINT_X_FI "Tulosta X:%ax"
#define UI_TEXT_PRINT_Y_FI "Tulosta Y:%ay"
#define UI_TEXT_PRINT_Z_FI "Tulosta Z:%az"
#define UI_TEXT_PRINT_Z_DELTA_FI "Tulosta:%az"
#define UI_TEXT_MOVE_X_FI "Siirr" STR_auml "X :%aX"
#define UI_TEXT_MOVE_Y_FI "Siirr" STR_auml "Y :%aY"
#define UI_TEXT_MOVE_Z_FI "Siirr" STR_auml "Z :%aZ"
#define UI_TEXT_MOVE_Z_DELTA_FI "Siirr" STR_auml ":%aZ"
#define UI_TEXT_JERK_FI "Askel :%aj"
#define UI_TEXT_ZJERK_FI "Z-Askel :%aJ"
#define UI_TEXT_ACCELERATION_FI "Kiihtyvyys"
#define UI_TEXT_STORE_TO_EEPROM_FI "Tallenna EEPROM"
#define UI_TEXT_LOAD_EEPROM_FI "Lataa EEPROM"
#define UI_TEXT_DBG_ECHO_FI "Toista :%do"
#define UI_TEXT_DBG_INFO_FI "Tiedot :%di"
#define UI_TEXT_DBG_ERROR_FI "Virheet :%de"
#define UI_TEXT_DBG_DRYRUN_FI "Kuiva-ajo:%dd"
#define UI_TEXT_DBG_ENDSTOP_FI "EndStop :%dp"
#define UI_TEXT_OPS_OFF_FI "%O0 OPS ei"
#define UI_TEXT_OPS_CLASSIC_FI "%O1 OPS normaali"
#define UI_TEXT_OPS_FAST_FI "%O2 OPS nopea"
#define UI_TEXT_OPS_RETRACT_FI "Peruuta :%Or"
#define UI_TEXT_OPS_BACKSLASH_FI "Backsl. :%Ob"
#define UI_TEXT_OPS_MINDIST_FI "Min.dist :%Od"
#define UI_TEXT_OPS_MOVE_AFTER_FI "Siirr" STR_auml "j" STR_auml "lkeen:%Oa"
#define UI_TEXT_ANTI_OOZE_FI "Vuodon poisto"
#define UI_TEXT_PRINT_FILE_FI "Tulosta Tiedosto"
#define UI_TEXT_PAUSE_PRINT_FI "Tulostustauko"
#define UI_TEXT_CONTINUE_PRINT_FI "Jatka tulostusta"
#define UI_TEXT_UNMOUNT_CARD_FI "Kortti poistettu"
#define UI_TEXT_MOUNT_CARD_FI "Kortti asetettu"
#define UI_TEXT_DELETE_FILE_FI "Poista tiedosto"
#define UI_TEXT_FEEDRATE_FI "Sy" STR_ouml "tt" STR_ouml "nopeus"
#define UI_TEXT_FEED_MAX_X_FI "Maks. X:%fx"
#define UI_TEXT_FEED_MAX_Y_FI "Maks. Y:%fy"
#define UI_TEXT_FEED_MAX_Z_FI "Maks. Z:%fz"
#define UI_TEXT_FEED_MAX_Z_DELTA_FI "Maks.:%fz"
#define UI_TEXT_FEED_HOME_X_FI "Koti X:%fX"
#define UI_TEXT_FEED_HOME_Y_FI "Koti Y:%fY"
#define UI_TEXT_FEED_HOME_Z_FI "Koti Z:%fZ"
#define UI_TEXT_FEED_HOME_Z_DELTA_FI "Koti:%fZ"
#define UI_TEXT_ACTION_XPOSITION4A_FI "X:%x0 mm %dx%dX"
#define UI_TEXT_ACTION_XPOSITION4B_FI "Min. rajoittimesta:%sx"
#define UI_TEXT_ACTION_XPOSITION4C_FI "Maks rajoittimesta:%sX"
#define UI_TEXT_ACTION_XPOSITION4D_FI ""
#define UI_TEXT_ACTION_YPOSITION4A_FI "Y:%x1 mm %dy%dY"
#define UI_TEXT_ACTION_YPOSITION4B_FI "Min. rajoittimesta:%sy"
#define UI_TEXT_ACTION_YPOSITION4C_FI "Maks rajoittimesta:%sY"
#define UI_TEXT_ACTION_YPOSITION4D_FI ""
#define UI_TEXT_ACTION_ZPOSITION4A_FI "Z:%x2 mm %dz%dZ"
#define UI_TEXT_ACTION_ZPOSITION4B_FI "Min. rajoittimesta:%sz"
#define UI_TEXT_ACTION_ZPOSITION4C_FI "Maks rajoittimesta:%sZ"
#define UI_TEXT_ACTION_ZPOSITION4D_FI ""
#define UI_TEXT_ACTION_XPOSITION_FAST4A_FI "X:%x0 mm"
#define UI_TEXT_ACTION_XPOSITION_FAST4B_FI "Min. rajoittimesta:%sx"
#define UI_TEXT_ACTION_XPOSITION_FAST4C_FI "Maks rajoittimesta:%sX"
#define UI_TEXT_ACTION_XPOSITION_FAST4D_FI ""
#define UI_TEXT_ACTION_YPOSITION_FAST4A_FI "Y:%x1 mm"
#define UI_TEXT_ACTION_YPOSITION_FAST4B_FI "Min. rajoittimesta:%sy"
#define UI_TEXT_ACTION_YPOSITION_FAST4C_FI "Maks rajoittimesta:%sY"
#define UI_TEXT_ACTION_YPOSITION_FAST4D_FI ""
#define UI_TEXT_ACTION_ZPOSITION_FAST4A_FI "Z:%x2 mm"
#define UI_TEXT_ACTION_ZPOSITION_FAST4B_FI "Min. rajoittimesta:%sz"
#define UI_TEXT_ACTION_ZPOSITION_FAST4C_FI "Maks rajoittimesta:%sZ"
#define UI_TEXT_ACTION_ZPOSITION_FAST4D_FI ""
#define UI_TEXT_ACTION_EPOSITION_FAST2A_FI "E:%x3 mm"
#define UI_TEXT_ACTION_EPOSITION_FAST2B_FI "1 klikkaus = 1 mm"
#define UI_TEXT_ACTION_XPOSITION2A_FI "X:%x0 mm"
#define UI_TEXT_ACTION_XPOSITION2B_FI "Min:%sx Max:%sX"
#define UI_TEXT_ACTION_YPOSITION2A_FI "Y:%x1 mm"
#define UI_TEXT_ACTION_YPOSITION2B_FI "Min:%sy Max:%sY"
#define UI_TEXT_ACTION_ZPOSITION2A_FI "Z:%x2 mm"
#define UI_TEXT_ACTION_ZPOSITION2B_FI "Min:%sz Max:%sZ"
#define UI_TEXT_ACTION_XPOSITION_FAST2A_FI "X:%x0 mm"
#define UI_TEXT_ACTION_XPOSITION_FAST2B_FI "Min:%sx Max:%sX"
#define UI_TEXT_ACTION_YPOSITION_FAST2A_FI "Y:%x1 mm"
#define UI_TEXT_ACTION_YPOSITION_FAST2B_FI "Min:%sy Max:%sY"
#define UI_TEXT_ACTION_ZPOSITION_FAST2A_FI "Z:%x2 mm"
#define UI_TEXT_ACTION_ZPOSITION_FAST2B_FI "Min:%sz Max:%sZ"
#define UI_TEXT_FANSPEED_FI "Tuulettimen nopeus"
#define UI_TEXT_ACTION_FANSPEED_FI "Tuuletin nopeus:%Fs%%%"
#define UI_TEXT_FAN_OFF_FI "Sammuta tuuletin"
#define UI_TEXT_FAN_25_FI "Aseta nop. 25%%%"
#define UI_TEXT_FAN_50_FI "Aseta nop. 50%%%"
#define UI_TEXT_FAN_75_FI "Aseta nop. 75%%%"
#define UI_TEXT_FAN_FULL_FI "Aseta nop. maks."
#define UI_TEXT_STEPPER_INACTIVE_FI "Moottori toimeton"
#define UI_TEXT_STEPPER_INACTIVE2A_FI "Toimeton j" STR_auml "lkeen: %is"
#define UI_TEXT_STEPPER_INACTIVE2B_FI "[min] 0=sammuta"
#define UI_TEXT_POWER_INACTIVE_FI "Maks. toimeton"
#define UI_TEXT_POWER_INACTIVE2A_FI "Toimeton j" STR_auml "lkeen: %ip"
#define UI_TEXT_POWER_INACTIVE2B_FI "[min] 0=sammuta"
#define UI_TEXT_GENERAL_FI "Yleiset"
#define UI_TEXT_BAUDRATE_FI "Siirtonopeus:%oc"
#define UI_TEXT_EXTR_STEPS_FI "Askelta/MM:%Se"
#define UI_TEXT_EXTR_START_FEED_FI "K" STR_auml "ynnist" STR_auml "FR:%Xf"
#define UI_TEXT_EXTR_MAX_FEED_FI "Maks. FR:%XF"
#define UI_TEXT_EXTR_ACCEL_FI "Kiihdytys:%XA"
#define UI_TEXT_EXTR_WATCH_FI "Stab.Aika:%Xw"
#define UI_TEXT_EXTR_ADVANCE_L_FI "Eteneminen lin:%Xl"
#define UI_TEXT_EXTR_ADVANCE_K_FI "Eteneminen quad:%Xa"
#define UI_TEXT_EXTR_MANAGER_FI "Hallinta:%Xh"
#define UI_TEXT_EXTR_PGAIN_FI "PID P:%Xp"
#define UI_TEXT_EXTR_DEADTIME_FI "Kuollut aika:%Xp"
#define UI_TEXT_EXTR_DMAX_DT_FI "Valvonta PWM:%XM"
#define UI_TEXT_EXTR_IGAIN_FI "PID I:%Xi"
#define UI_TEXT_EXTR_DGAIN_FI "PID D:%Xd"
#define UI_TEXT_EXTR_DMIN_FI "Ajo Min:%Xm"
#define UI_TEXT_EXTR_DMAX_FI "Ajo Max:%XM"
#define UI_TEXT_EXTR_PMAX_FI "PID Max:%XD"
#define UI_TEXT_EXTR_XOFF_FI "X-tasoitus:%Xx"
#define UI_TEXT_EXTR_YOFF_FI "Y-tasoitus:%Xy"
#define UI_TEXT_STRING_HM_BANGBANG_FI "BangBang"
#define UI_TEXT_STRING_HM_PID_FI "PID"
#define UI_TEXT_STRING_ACTION_FI "Toiminta:%la"
#define UI_TEXT_HEATING_EXTRUDER_FI "Kuumentaa Pursot."
#define UI_TEXT_HEATING_BED_FI "Kuumentaa Alustaa"
#define UI_TEXT_KILLED_FI "Poistettu"
#define UI_TEXT_STEPPER_DISABLED_FI "Moottori pois k" STR_auml "yt."
#define UI_TEXT_EEPROM_STOREDA_FI "Kokoonpano"
#define UI_TEXT_EEPROM_STOREDB_FI "Tallennettu EEPROM"
#define UI_TEXT_EEPROM_LOADEDA_FI "Kokoonpano"
#define UI_TEXT_EEPROM_LOADEDB_FI "Ladattu EEPROM"
#define UI_TEXT_UPLOADING_FI "Ladataan..."
#define UI_TEXT_PAGE_BUFFER_FI "Puskuri:%oB"
#define UI_TEXT_PAGE_EXTRUDER_FI " E:%ec/%Ec" cDEG "C" cARROW "%oC"
#define UI_TEXT_PAGE_EXTRUDER1_FI "E1:%e0/%E0" cDEG "C" cARROW "%o0"
#define UI_TEXT_PAGE_EXTRUDER2_FI "E2:%e1/%E1" cDEG "C" cARROW "%o1"
#define UI_TEXT_PAGE_EXTRUDER3_FI "E3:%e2/%E2" cDEG "C" cARROW "%o2"
#define UI_TEXT_PAGE_BED_FI " B:%eb/%Eb" cDEG "C" cARROW "%ob"
#define UI_TEXT_SPEED_MULTIPLY_FI "Nopeuskerroin:%om%%%"
#define UI_TEXT_FLOW_MULTIPLY_FI "Puhalluskerroin:%of%%%"
#define UI_TEXT_SHOW_MEASUREMENT_FI "N" STR_auml "yt" STR_auml " mitat"
#define UI_TEXT_RESET_MEASUREMENT_FI "Poista mitat."
#define UI_TEXT_SET_MEASURED_ORIGIN_FI "Aseta Z=0"
#define UI_TEXT_ZCALIB_FI "Z kalibrointi"
#define UI_TEXT_SET_P1_FI "Aseta P1"
#define UI_TEXT_SET_P2_FI "Aseta P2"
#define UI_TEXT_SET_P3_FI "Aseta P3"
#define UI_TEXT_CALCULATE_LEVELING_FI "Laske tasot"
#define UI_TEXT_LEVEL_FI "Taso delta"
#define UI_TEXT_EXTR_WAIT_RETRACT_TEMP_FI "Odottaa l" STR_auml "mm. %XT" cDEG "C"
#define UI_TEXT_EXTR_WAIT_RETRACT_UNITS_FI "Odottaa yks.:%XU mm"
#define UI_TEXT_SD_REMOVED_FI "SD kortti pois"
#define UI_TEXT_SD_INSERTED_FI "SD kortti on"
#define UI_TEXT_PRINTER_READY_FI "Tulostin valmis."
// Printtime output gets aggregated like <Days_5gisgits>UI_TEXT_PRINTTIME_DAYS<Hours>UI_TEXT_PRINTTIME_HOURS<Minutes>UI_TEXT_PRINTTIME_MINUTES
// ___88 days 12:45
#define UI_TEXT_PRINTTIME_DAYS_FI " p" STR_auml "iv" STR_auml STR_auml " "
#define UI_TEXT_PRINTTIME_HOURS_FI ":"
#define UI_TEXT_PRINTTIME_MINUTES_FI ""
#define UI_TEXT_PRINT_TIME_FI "Tulostusaika"
#define UI_TEXT_PRINT_FILAMENT_FI "Lanka tulostettu"
#define UI_TEXT_PRINTED_FI "Tulostettu"
#define UI_TEXT_POWER_FI "ATX virtal. on/ei"
#define UI_TEXT_STRING_HM_DEADTIME_FI "Joutoaika"
#define UI_TEXT_STRING_HM_SLOWBANG_FI "SlowBang"
#define UI_TEXT_STOP_PRINT_FI "Lopeta tulostus"
#define UI_TEXT_Z_BABYSTEPPING_FI "Z mikroaskellus:%oYmm"
#define UI_TEXT_CHANGE_FILAMENT_FI "Vaihda tulostuslanka"
#define UI_TEXT_WIZ_CH_FILAMENT1_FI "Vaihda tulostuslanka"
#define UI_TEXT_WIZ_CH_FILAMENT2_FI "Py" STR_ouml "rit" STR_auml " siirr" STR_auml ""
#define UI_TEXT_WIZ_CH_FILAMENT3_FI "Tul.lanka yl" STR_ouml "s/alas"
#define UI_TEXT_CLICK_DONE_FI "Klik kun valmis"
#define UI_TEXT_AUTOLEVEL_ONOFF_FI "Autom.taso: %ll"
#define UI_TEXT_SERVOPOS_FI "Servo paikka: %oS"
#define UI_TEXT_IGNORE_M106_FI "Ohita M106 %Fi"
#define UI_TEXT_WIZ_REHEAT1_FI "Klik uusi kuumennus"
#define UI_TEXT_WIZ_REHEAT2_FI "pursottimet"
#define UI_TEXT_WIZ_WAITTEMP1_FI "Odottaa tavoitetta"
#define UI_TEXT_WIZ_WAITTEMP2_FI "l" STR_auml "mp" STR_ouml "tilat..."
#define UI_TEXT_EXTRUDER_JAM_FI "Pursottimen tukos"
#define UI_TEXT_STANDBY_FI "Valmiina"
#define UI_TEXT_BED_COATING_FI "Alustan pinnote"
#define UI_TEXT_BED_COATING_SET1_FI "Alustan pinta valittu"
#define UI_TEXT_BED_COATING_SET2_FI ""
#define UI_TEXT_NOCOATING_FI "Ei pinnotetta"
#define UI_TEXT_BUILDTAK_FI "BuildTak"
#define UI_TEXT_KAPTON_FI "Kapton"
#define UI_TEXT_BLUETAPE_FI "Sininen paperi teippi"
#define UI_TEXT_PETTAPE_FI "Vihreä PET teippi"
#define UI_TEXT_GLUESTICK_FI "Liimapuikko"
#define UI_TEXT_CUSTOM_FI "Mukautettu"
#define UI_TEXT_COATING_CUSTOM_FI "Mukautettu:%BCmm"
#define UI_TEXT_LANGUAGE_FI "Kieli"
#if NUM_EXTRUDER > 2 || MIXING_EXTRUDER != 0
#define UI_TEXT_MAINPAGE6_1_FI "\xa %ec/%Ec\xb0 X:%x0"
#else
#define UI_TEXT_MAINPAGE6_1_FI "\xa %e0/%E0\xb0 X:%x0"
#endif // NUM_EXTRUDER
#if NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_2_FI "\xa %e1/%E1\xb0 Y:%x1"
#elif HAVE_HEATED_BED
#define UI_TEXT_MAINPAGE6_2_FI "\xe %eb/%Eb\xb0 Y:%x1"
#else
#define UI_TEXT_MAINPAGE6_2_FI " Y:%x1"
#endif
#if HAVE_HEATED_BED && NUM_EXTRUDER == 2 && MIXING_EXTRUDER == 0
#define UI_TEXT_MAINPAGE6_3_FI "\xe %eb/%Eb\xb0 Z:%x2"
#elif FEATURE_DITTO_PRINTING
#define UI_TEXT_MAINPAGE6_3_FI "Kopiot: %ed Z:%x2"
#else
#define UI_TEXT_MAINPAGE6_3_FI "Virtaus:\xfd %of%%% Z:%x2"
#endif
#define UI_TEXT_MAINPAGE6_4_FI "Mul: %om%%% \xfd E: %x4m"
#define UI_TEXT_MAINPAGE6_5_FI "Buf: %oB"
#define UI_TEXT_MAINPAGE6_6_FI "%os"
#define UI_TEXT_MAINPAGE_TEMP_BED_FI cTEMP "%ec/%Ec" cDEG "B%eB/%Eb" cDEG
#define UI_TEXT_MAINPAGE_BED_FI "B%eB/%Eb" cDEG
#define UI_TEXT_MAINPAGE_Z_BUF_FI "Z:%x2 Buf : %oB"
#define UI_TEXT_MAINPAGE_MUL_EUSAGE_FI "Mul: %om E:%x4"
#define UI_TEXT_MAINPAGE_XY_FI "X:%x0 Y:%x1"
#define UI_TEXT_PRINT_TIME_VALUE_FI "%Ut"
#define UI_TEXT_PRINT_FILAMENT_VALUE_FI "%Uf m"
#define UI_TEXT_METER_PRINTED_FI "%Uf m " UI_TEXT_PRINTED_FI
#define UI_TEXT_STATUS_FI "%os"
#define UI_TEXT_EMPTY_FI ""
#define UI_TEXT_TEMP_SET_FI cTEMP "%ec/%Ec" cDEG
#define UI_TEXT_CURRENT_TEMP_FI cTEMP "%ec" cDEG
#define UI_TEXT_COATING_THICKNESS_FI " %BCmm"
#define UI_TEXT_EXTR3_TEMP_FI "L" STR_auml "mp" STR_ouml " 4 :%e3/%E3" cDEG "C"
#define UI_TEXT_EXTR4_TEMP_FI "L" STR_auml "mp" STR_ouml " 5 :%e4/%E4" cDEG "C"
#define UI_TEXT_EXTR5_TEMP_FI "L" STR_auml "mp" STR_ouml " 6 :%e5/%E5" cDEG "C"
#define UI_TEXT_EXTR3_OFF_FI "Pursotin 4 ei"
#define UI_TEXT_EXTR4_OFF_FI "Pursotin 5 ei"
#define UI_TEXT_EXTR5_OFF_FI "Pursotin 6 ei"
#define UI_TEXT_EXTR3_SELECT_FI "%X3 Valitse purs. 4"
#define UI_TEXT_EXTR4_SELECT_FI "%X4 Valitse purs. 5"
#define UI_TEXT_EXTR5_SELECT_FI "%X5 Valitse purs. 6"
#define UI_TEXT_DITTO_0_FI "%D0 Ei kopiota"
#define UI_TEXT_DITTO_1_FI "%D1 1 kopio"
#define UI_TEXT_DITTO_2_FI "%D2 2 kopiota"
#define UI_TEXT_DITTO_3_FI "%D3 3 kopiota"
#define UI_TEXT_ZPROBE_HEIGHT_FI "Z-anturin korkeus:%zh"
#define UI_TEXT_OFFSETS_FI "Aseta tulostimen poikkeamat"
#define UI_TEXT_X_OFFSET_FI "Aseta X poikkeama:%T0mm"
#define UI_TEXT_Y_OFFSET_FI "Aseta Y poikkeama:%T1mm"
#define UI_TEXT_Z_OFFSET_FI "Aseta Z poikkeama:%T2mm"

File diff suppressed because it is too large Load diff