Merge remote-tracking branch 'upstream/MK3' into MK3-Fix_M120_M121

This commit is contained in:
3d-gussner 2020-01-08 15:59:16 +01:00
commit d895890608
50 changed files with 2293 additions and 1975 deletions

14
.editorconfig Normal file
View File

@ -0,0 +1,14 @@
#-*-mode:conf-*-
# editorconfig file (see EditorConfig.org)
root = true
[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8
trim_trailing_whitespace = true
indent_style = space
indent_size = 4
tab_width = 4
max_line_length = 100

31
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,31 @@
---
name: Bug report
about: Create a report to help us improve
title: "[BUG]<Enter comprehensive title>"
labels: bug
assignees: ''
---
Please, before you create a new bug report, please make sure you searched in open and closed issues and couldn't find anything that matches.
**Printer type** - [e.g. MK3S, MK3, MK2.5S, MK2.5, MK2S, MK2]
**Printer firmware version**- [e.g. 3.8.1, 3.8.1-RC1, ...]
**MMU Upgrade** - [e.g. MMU2S, MMU2, MMU1]
**MMU upgrade firmware version [e.g. 1.0.6, 1.0.6-RC2, ...]
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Please describe steps to reproduce the behavior.
**Expected behavior**
A clear and concise description of what you expected to happen.
**G-code**
Please attach a G-code. This will make it easier for us to replicate the error.
**Video**
Please attach a video. It usually helps to solve the problem.

20
.github/ISSUE_TEMPLATE/enhancement.md vendored Normal file
View File

@ -0,0 +1,20 @@
---
name: Enhancement
about: Suggest an idea for this project
title: " [ENHANCEMENT]<Enter comprehensive title>"
labels: enhancement
assignees: ''
---
Please, before you create a new feature request, please make sure you searched in open and closed issues and couldn't find anything that matches.
Enter what type of printer or upgrade the enhancement applies to.
**Printer type** - [e.g. MK3S, MK3, MK2.5S, MK2.5, MK2S, MK2]
**MMU Upgrade** - [e.g. MMU2S, MMU2, MMU1]
**Is your enhancement related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.

View File

@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: "[FEATURE REQUEST]<Enter comprehensive title>"
labels: feature request
assignees: ''
---
Please, before you create a new feature request, please make sure you searched in open and closed issues and couldn't find anything that matches.
If it makes sense, enter what type of printer or upgrade the feature request applies to.
**Printer type** - [e.g. MK3S, MK3, MK2.5S, MK2.5, MK2S, MK2]
**MMU Upgrade** - [e.g. MMU2S, MMU2, MMU1]
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.

12
.github/ISSUE_TEMPLATE/question.md vendored Normal file
View File

@ -0,0 +1,12 @@
---
name: Question
about: What do you want to know?
title: "[QUESTION]<Enter comprehensive title>"
labels: question
assignees: ''
---
Please, before you create a new question, please make sure you searched in open and closed issues and couldn't find anything that matches.
**What is your question?**

View File

@ -345,7 +345,7 @@ your extruder heater takes 2 minutes to hit the target on heating.
#define Y_PROBE_OFFSET_FROM_EXTRUDER -29
#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35
#define Z_RAISE_BEFORE_HOMING 4 // (in mm) Raise Z before homing (G28) for Probe Clearance.
#define Z_RAISE_BEFORE_HOMING 5 // (in mm) Raise Z before homing (G28) for Probe Clearance.
// Be sure you have this distance over your Z_MAX_POS in case
#define XY_TRAVEL_SPEED 8000 // X and Y axis travel speed between probes, in mm/min
@ -549,6 +549,12 @@ enum CalibrationStatus
CALIBRATION_STATUS_UNKNOWN = 0,
};
// Try to maintain a minimum distance from the bed even when Z is
// unknown when doing the following operations
#define MIN_Z_FOR_LOAD 50
#define MIN_Z_FOR_UNLOAD 20
#define MIN_Z_FOR_PREHEAT 10
#include "Configuration_adv.h"
#include "thermistortables.h"

View File

@ -296,6 +296,7 @@ void setPwmFrequency(uint8_t pin, int val);
extern bool fans_check_enabled;
extern float homing_feedrate[];
extern bool axis_relative_modes[];
extern float feedrate;
extern int feedmultiply;
extern int extrudemultiply; // Sets extrude multiply factor (in percent) for all extruders
extern int extruder_multiply[EXTRUDERS]; // sets extrude multiply factor (in percent) for each extruder individually
@ -358,9 +359,6 @@ extern int fan_speed[2];
// Handling multiple extruders pins
extern uint8_t active_extruder;
#endif
//Long pause
extern unsigned long pause_time;
extern unsigned long start_pause_print;
@ -398,7 +396,7 @@ extern uint16_t gcode_in_progress;
extern LongTimer safetyTimer;
#define PRINT_PERCENT_DONE_INIT 0xff
#define PRINTER_ACTIVE (IS_SD_PRINTING || is_usb_printing || isPrintPaused || (custom_message_type == CustomMsg::TempCal) || saved_printing || (lcd_commands_type == LcdCommands::Layer1Cal) || card.paused || mmu_print_saved)
#define PRINTER_ACTIVE (IS_SD_PRINTING || is_usb_printing || isPrintPaused || (custom_message_type == CustomMsg::TempCal) || saved_printing || (lcd_commands_type == LcdCommands::Layer1Cal) || mmu_print_saved)
//! Beware - mcode_in_progress is set as soon as the command gets really processed,
//! which is not the same as posting the M600 command into the command queue
@ -457,6 +455,7 @@ extern void print_mesh_bed_leveling_table();
extern void stop_and_save_print_to_ram(float z_move, float e_move);
extern void restore_print_from_ram_and_continue(float e_move);
extern void cancel_saved_printing();
//estimated time to end of the print
@ -513,4 +512,6 @@ void M600_wait_for_user(float HotendTempBckp);
void M600_check_state(float nozzle_temp);
void load_filament_final_feed();
void marlin_wait_for_click();
void marlin_rise_z(void);
void raise_z_above(float target, bool plan=true);
#endif

View File

@ -63,6 +63,7 @@
#include "menu.h"
#include "ultralcd.h"
#include "backlight.h"
#include "planner.h"
#include "stepper.h"
@ -309,6 +310,8 @@ bool no_response = false;
uint8_t important_status;
uint8_t saved_filament_type;
#define SAVED_TARGET_UNSET (X_MIN_POS-1)
float saved_target[NUM_AXIS] = {SAVED_TARGET_UNSET, 0, 0, 0};
// save/restore printing in case that mmu was not responding
bool mmu_print_saved = false;
@ -329,11 +332,15 @@ float destination[NUM_AXIS] = { 0.0, 0.0, 0.0, 0.0};
// For tracing an arc
static float offset[3] = {0.0, 0.0, 0.0};
static float feedrate = 1500.0, next_feedrate, saved_feedrate;
// Determines Absolute or Relative Coordinates.
// Also there is bool axis_relative_modes[] per axis flag.
static bool relative_mode = false;
// Current feedrate
float feedrate = 1500.0;
// Feedrate for the next move
static float next_feedrate;
// Original feedrate saved during homing moves
static float saved_feedrate;
const int sensitive_pins[] = SENSITIVE_PINS; // Sensitive pin list for M42
@ -373,8 +380,8 @@ bool saved_printing = false; //!< Print is paused and saved in RAM
static uint32_t saved_sdpos = 0; //!< SD card position, or line number in case of USB printing
uint8_t saved_printing_type = PRINTING_TYPE_SD;
static float saved_pos[4] = { 0, 0, 0, 0 };
//! Feedrate hopefully derived from an active block of the planner at the time the print has been canceled, in mm/min.
static float saved_feedrate2 = 0;
static uint16_t saved_feedrate2 = 0; //!< Default feedrate (truncated from float)
static int saved_feedmultiply2 = 0;
static uint8_t saved_active_extruder = 0;
static float saved_extruder_temperature = 0.0; //!< Active extruder temperature
static bool saved_extruder_under_pressure = false;
@ -989,10 +996,6 @@ void setup()
ultralcd_init();
#if (LCD_BL_PIN != -1) && defined (LCD_BL_PIN)
analogWrite(LCD_BL_PIN, 255); //set full brightnes
#endif //(LCD_BL_PIN != -1) && defined (LCD_BL_PIN)
spi_init();
lcd_splash();
@ -2104,6 +2107,58 @@ bool check_commands() {
}
// raise_z_above: slowly raise Z to the requested height
//
// contrarily to a simple move, this function will carefully plan a move
// when the current Z position is unknown. In such cases, stallguard is
// enabled and will prevent prolonged pushing against the Z tops
void raise_z_above(float target, bool plan)
{
if (current_position[Z_AXIS] >= target)
return;
// Z needs raising
current_position[Z_AXIS] = target;
#if defined(Z_MIN_PIN) && (Z_MIN_PIN > -1) && !defined(DEBUG_DISABLE_ZMINLIMIT)
bool z_min_endstop = (READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING);
#else
bool z_min_endstop = false;
#endif
if (axis_known_position[Z_AXIS] || z_min_endstop)
{
// current position is known or very low, it's safe to raise Z
if(plan) plan_buffer_line_curposXYZE(max_feedrate[Z_AXIS], active_extruder);
return;
}
// ensure Z is powered in normal mode to overcome initial load
enable_z();
st_synchronize();
// rely on crashguard to limit damage
bool z_endstop_enabled = enable_z_endstop(true);
#ifdef TMC2130
tmc2130_home_enter(Z_AXIS_MASK);
#endif //TMC2130
plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS] / 60, active_extruder);
st_synchronize();
#ifdef TMC2130
if (endstop_z_hit_on_purpose())
{
// not necessarily exact, but will avoid further vertical moves
current_position[Z_AXIS] = max_pos[Z_AXIS];
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS],
current_position[Z_AXIS], current_position[E_AXIS]);
}
tmc2130_home_exit();
#endif //TMC2130
enable_z_endstop(z_endstop_enabled);
}
#ifdef TMC2130
bool calibrate_z_auto()
{
@ -2484,9 +2539,7 @@ static void gcode_G28(bool home_x_axis, long home_x_value, bool home_y_axis, lon
//if we are homing all axes, first move z higher to protect heatbed/steel sheet
if (home_all_axes) {
current_position[Z_AXIS] += MESH_HOME_Z_SEARCH;
feedrate = homing_feedrate[Z_AXIS];
plan_buffer_line_curposXYZE(feedrate / 60, active_extruder);
raise_z_above(MESH_HOME_Z_SEARCH);
st_synchronize();
}
#ifdef ENABLE_AUTO_BED_LEVELING
@ -2597,26 +2650,21 @@ static void gcode_G28(bool home_x_axis, long home_x_value, bool home_y_axis, lon
#ifndef Z_SAFE_HOMING
if(home_z) {
#if defined (Z_RAISE_BEFORE_HOMING) && (Z_RAISE_BEFORE_HOMING > 0)
destination[Z_AXIS] = Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS) * (-1); // Set destination away from bed
feedrate = max_feedrate[Z_AXIS];
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate, active_extruder);
raise_z_above(Z_RAISE_BEFORE_HOMING);
st_synchronize();
#endif // defined (Z_RAISE_BEFORE_HOMING) && (Z_RAISE_BEFORE_HOMING > 0)
#if (defined(MESH_BED_LEVELING) && !defined(MK1BP)) // If Mesh bed leveling, move X&Y to safe position for home
if (!(axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] ))
{
homeaxis(X_AXIS);
homeaxis(Y_AXIS);
}
raise_z_above(MESH_HOME_Z_SEARCH);
st_synchronize();
if (!axis_known_position[X_AXIS]) homeaxis(X_AXIS);
if (!axis_known_position[Y_AXIS]) homeaxis(Y_AXIS);
// 1st mesh bed leveling measurement point, corrected.
world2machine_initialize();
world2machine(pgm_read_float(bed_ref_points_4), pgm_read_float(bed_ref_points_4+1), destination[X_AXIS], destination[Y_AXIS]);
world2machine_reset();
if (destination[Y_AXIS] < Y_MIN_POS)
destination[Y_AXIS] = Y_MIN_POS;
destination[Z_AXIS] = MESH_HOME_Z_SEARCH; // Set destination away from bed
feedrate = homing_feedrate[Z_AXIS]/10;
current_position[Z_AXIS] = 0;
feedrate = homing_feedrate[X_AXIS] / 20;
enable_endstops(false);
#ifdef DEBUG_BUILD
SERIAL_ECHOLNPGM("plan_set_position()");
@ -2775,7 +2823,10 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level)
#ifdef TMC2130
FORCE_HIGH_POWER_START;
#endif // TMC2130
// Only Z calibration?
FORCE_BL_ON_START;
// Only Z calibration?
if (!onlyZ)
{
setTargetBed(0);
@ -2963,6 +3014,9 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level)
#ifdef TMC2130
FORCE_HIGH_POWER_END;
#endif // TMC2130
FORCE_BL_ON_END;
return final_result;
}
@ -3143,15 +3197,6 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float
custom_message_type = CustomMsg::Status;
}
//! @brief Rise Z if too low to avoid blob/jam before filament loading
//!
//! It doesn't plan_buffer_line(), as it expects plan_buffer_line() to be called after
//! during extruding (loading) filament.
void marlin_rise_z(void)
{
if (current_position[Z_AXIS] < 20) current_position[Z_AXIS] += 30;
}
void gcode_M701()
{
printf_P(PSTR("gcode_M701 begin\n"));
@ -3180,7 +3225,7 @@ void gcode_M701()
plan_buffer_line_curposXYZE(400 / 60, active_extruder); //fast sequence
st_synchronize();
marlin_rise_z();
raise_z_above(MIN_Z_FOR_LOAD, false);
current_position[E_AXIS] += 30;
plan_buffer_line_curposXYZE(400 / 60, active_extruder); //fast sequence
@ -3625,7 +3670,7 @@ void process_commands()
Set of internal PRUSA commands
PRUSA [ Ping | PRN | FAN | fn | thx | uvlo | fsensor_recover | MMURES | RESET | fv | M28 | SN | Fir | Rev | Lang | Lz | Beat | FR ]
PRUSA [ Ping | PRN | FAN | fn | thx | uvlo | MMURES | RESET | fv | M28 | SN | Fir | Rev | Lang | Lz | Beat | FR ]
- `Ping`
- `PRN` - Prints revision of the printer
@ -3633,7 +3678,6 @@ void process_commands()
- `fn` - Prints farm no.
- `thx`
- `uvlo`
- `fsensor_recover` - Filament sensor recover - restore print and continue
- `MMURES` - Reset MMU
- `RESET` - (Careful!)
- `fv` - ?
@ -3683,12 +3727,6 @@ void process_commands()
eeprom_update_byte((uint8_t*)EEPROM_UVLO,0);
enquecommand_P(PSTR("M24"));
}
#ifdef FILAMENT_SENSOR
else if (code_seen("fsensor_recover")) // PRUSA fsensor_recover
{
fsensor_restore_print_and_continue();
}
#endif //FILAMENT_SENSOR
else if (code_seen("MMURES")) // PRUSA MMURES
{
mmu_reset();
@ -4013,8 +4051,19 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
#endif
get_coordinates(); // For X Y Z E F
// When recovering from a previous print move, restore the originally
// calculated target position on the first USB/SD command. This accounts
// properly for relative moves
if ((saved_target[0] != SAVED_TARGET_UNSET) &&
((CMDBUFFER_CURRENT_TYPE == CMDBUFFER_CURRENT_TYPE_SDCARD) ||
(CMDBUFFER_CURRENT_TYPE == CMDBUFFER_CURRENT_TYPE_USB_WITH_LINENR)))
{
memcpy(destination, saved_target, sizeof(destination));
saved_target[0] = SAVED_TARGET_UNSET;
}
get_coordinates(); // For X Y Z E F
if (total_filament_used > ((current_position[E_AXIS] - destination[E_AXIS]) * 100)) { //protection against total_filament_used overflow
total_filament_used = total_filament_used + ((destination[E_AXIS] - current_position[E_AXIS]) * 100);
}
@ -5161,15 +5210,19 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
//! ### G90 - Switch off relative mode
// -------------------------------
case 90:
relative_mode = false;
break;
case 90: {
for(uint8_t i = 0; i != NUM_AXIS; ++i)
axis_relative_modes[i] = false;
}
break;
//! ### G91 - Switch on relative mode
// -------------------------------
case 91:
relative_mode = true;
break;
case 91: {
for(uint8_t i = 0; i != NUM_AXIS; ++i)
axis_relative_modes[i] = true;
}
break;
//! ### G92 - Set position
// -----------------------------
@ -5333,21 +5386,19 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
card.openFile(strchr_pointer + 4,true);
break;
//! ### M24 - Start SD print
//! ### M24 - Start/resume SD print
// ----------------------------------
case 24:
if (!card.paused)
failstats_reset_print();
card.startFileprint();
starttime=_millis();
if (isPrintPaused)
lcd_resume_print();
else
{
failstats_reset_print();
card.startFileprint();
starttime=_millis();
}
break;
//! ### M25 - Pause SD print
// ----------------------------------
case 25:
card.pauseSDPrint();
break;
//! ### M26 S\<index\> - Set SD index
//! Set position in SD card file to index in bytes.
//! This command is expected to be called after M23 and before M24.
@ -5902,7 +5953,7 @@ Sigma_Exit:
//! ### M112 - Emergency stop
// -----------------------------------------
case 112:
kill(_n(""), 3);
kill(MSG_M112_KILL, 3);
break;
//! ### M140 - Set bed temperature
@ -6165,7 +6216,6 @@ Sigma_Exit:
LCD_MESSAGERPGM(_T(WELCOME_MSG));
lcd_update(0);
break;
#endif
//! ### M81 - Turn off Power Supply
// --------------------------------------
@ -6189,17 +6239,18 @@ Sigma_Exit:
LCD_MESSAGERPGM(CAT4(CUSTOM_MENDEL_NAME,PSTR(" "),MSG_OFF,PSTR(".")));
lcd_update(0);
break;
#endif
//! ### M82 - Set E axis to absolute mode
// ---------------------------------------
case 82:
axis_relative_modes[3] = false;
axis_relative_modes[E_AXIS] = false;
break;
//! ### M83 - Set E axis to relative mode
// ---------------------------------------
case 83:
axis_relative_modes[3] = true;
axis_relative_modes[E_AXIS] = true;
break;
//! ### M84, M18 - Disable steppers
@ -7202,27 +7253,36 @@ Sigma_Exit:
break;
#endif //FILAMENTCHANGEENABLE
//! ### M25 - Pause SD print
//! ### M601 - Pause print
//! ### M125 - Pause print (TODO: not implemented)
// -------------------------------
case 25:
case 601:
{
cmdqueue_pop_front(); //trick because we want skip this command (M601) after restore
lcd_pause_print();
if (!isPrintPaused)
{
st_synchronize();
cmdqueue_pop_front(); //trick because we want skip this command (M601) after restore
lcd_pause_print();
}
}
break;
//! ### M602 - Resume print
// -------------------------------
case 602: {
lcd_resume_print();
if (isPrintPaused)
lcd_resume_print();
}
break;
//! ### M603 - Stop print
// -------------------------------
case 603: {
case 603: {
lcd_print_stop();
}
break;
#ifdef PINDA_THERMISTOR
//! ### M860 - Wait for extruder temperature (PINDA)
@ -7611,27 +7671,33 @@ Sigma_Exit:
case 350:
{
#ifdef TMC2130
if(code_seen('E'))
for (int i=0; i<NUM_AXIS; i++)
{
uint16_t res_new = code_value();
if ((res_new == 8) || (res_new == 16) || (res_new == 32) || (res_new == 64) || (res_new == 128))
if(code_seen(axis_codes[i]))
{
st_synchronize();
uint8_t axis = E_AXIS;
uint16_t res = tmc2130_get_res(axis);
tmc2130_set_res(axis, res_new);
cs.axis_ustep_resolution[axis] = res_new;
if (res_new > res)
uint16_t res_new = code_value();
bool res_valid = (res_new == 8) || (res_new == 16) || (res_new == 32); // resolutions valid for all axis
res_valid |= (i != E_AXIS) && ((res_new == 1) || (res_new == 2) || (res_new == 4)); // resolutions valid for X Y Z only
res_valid |= (i == E_AXIS) && ((res_new == 64) || (res_new == 128)); // resolutions valid for E only
if (res_valid)
{
uint16_t fac = (res_new / res);
cs.axis_steps_per_unit[axis] *= fac;
position[E_AXIS] *= fac;
}
else
{
uint16_t fac = (res / res_new);
cs.axis_steps_per_unit[axis] /= fac;
position[E_AXIS] /= fac;
st_synchronize();
uint16_t res = tmc2130_get_res(i);
tmc2130_set_res(i, res_new);
cs.axis_ustep_resolution[i] = res_new;
if (res_new > res)
{
uint16_t fac = (res_new / res);
cs.axis_steps_per_unit[i] *= fac;
position[i] *= fac;
}
else
{
uint16_t fac = (res / res_new);
cs.axis_steps_per_unit[i] /= fac;
position[i] /= fac;
}
}
}
}
@ -8219,7 +8285,7 @@ void get_coordinates()
for(int8_t i=0; i < NUM_AXIS; i++) {
if(code_seen(axis_codes[i]))
{
bool relative = axis_relative_modes[i] || relative_mode;
bool relative = axis_relative_modes[i];
destination[i] = (float)code_value();
if (i == E_AXIS) {
float emult = extruder_multiplier[active_extruder];
@ -8302,38 +8368,43 @@ void clamp_to_software_endstops(float target[3])
}
#ifdef MESH_BED_LEVELING
void mesh_plan_buffer_line(const float &x, const float &y, const float &z, const float &e, const float &feed_rate, const uint8_t extruder) {
void mesh_plan_buffer_line(const float &x, const float &y, const float &z, const float &e, const float &feed_rate, const uint8_t extruder) {
float dx = x - current_position[X_AXIS];
float dy = y - current_position[Y_AXIS];
float dz = z - current_position[Z_AXIS];
int n_segments = 0;
if (mbl.active) {
float len = abs(dx) + abs(dy);
if (len > 0)
// Split to 3cm segments or shorter.
n_segments = int(ceil(len / 30.f));
}
if (n_segments > 1) {
// In a multi-segment move explicitly set the final target in the plan
// as the move will be recalculated in it's entirety
float gcode_target[NUM_AXIS];
gcode_target[X_AXIS] = x;
gcode_target[Y_AXIS] = y;
gcode_target[Z_AXIS] = z;
gcode_target[E_AXIS] = e;
float dz = z - current_position[Z_AXIS];
float de = e - current_position[E_AXIS];
for (int i = 1; i < n_segments; ++ i) {
float t = float(i) / float(n_segments);
if (saved_printing || (mbl.active == false)) return;
plan_buffer_line(
current_position[X_AXIS] + t * dx,
plan_buffer_line(current_position[X_AXIS] + t * dx,
current_position[Y_AXIS] + t * dy,
current_position[Z_AXIS] + t * dz,
current_position[E_AXIS] + t * de,
feed_rate, extruder);
feed_rate, extruder, gcode_target);
if (waiting_inside_plan_buffer_line_print_aborted)
return;
}
}
// The rest of the path.
plan_buffer_line(x, y, z, e, feed_rate, extruder);
current_position[X_AXIS] = x;
current_position[Y_AXIS] = y;
current_position[Z_AXIS] = z;
current_position[E_AXIS] = e;
}
#endif // MESH_BED_LEVELING
@ -8354,9 +8425,7 @@ void prepare_move()
#endif
}
for(int8_t i=0; i < NUM_AXIS; i++) {
current_position[i] = destination[i];
}
set_current_to_destination();
}
void prepare_arc_move(char isclockwise) {
@ -8564,7 +8633,7 @@ if(0)
if( (_millis() - previous_millis_cmd) > max_inactive_time )
if(max_inactive_time)
kill(_n(""), 4);
kill(_n("Inactivity Shutdown"), 4);
if(stepper_inactive_time) {
if( (_millis() - previous_millis_cmd) > stepper_inactive_time )
{
@ -8605,7 +8674,7 @@ if(0)
// ----------------------------------------------------------------
if ( killCount >= KILL_DELAY)
{
kill("", 5);
kill(NULL, 5);
}
#endif
@ -8683,6 +8752,16 @@ void kill(const char *full_screen_message, unsigned char id)
} // Wait for reset
}
// Stop: Emergency stop used by overtemp functions which allows recovery
//
// In addition to stopping the print, this prevents subsequent G[0-3] commands to be
// processed via USB (using "Stopped") until the print is resumed via M999 or
// manually started from scratch with the LCD.
//
// Note that the current instruction is completely discarded, so resuming from Stop()
// will introduce either over/under extrusion on the current segment, and will not
// survive a power panic. Switching Stop() to use the pause machinery instead (with
// the addition of disabling the headers) could allow true recovery in the future.
void Stop()
{
disable_heater();
@ -8867,6 +8946,8 @@ void delay_keep_alive(unsigned int ms)
}
static void wait_for_heater(long codenum, uint8_t extruder) {
if (!degTargetHotend(extruder))
return;
#ifdef TEMP_RESIDENCY_TIME
long residencyStart;
@ -9075,10 +9156,8 @@ void bed_check(float x_dimension, float y_dimension, int x_points_num, int y_poi
destination[X_AXIS] = ix * (x_dimension / (x_points_num - 1)) + shift_x;
destination[Y_AXIS] = iy * (y_dimension / (y_points_num - 1)) + shift_y;
mesh_plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], XY_AXIS_FEEDRATE/6, active_extruder);
for(int8_t i=0; i < NUM_AXIS; i++) {
current_position[i] = destination[i];
}
mesh_plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], XY_AXIS_FEEDRATE/6, active_extruder);
set_current_to_destination();
st_synchronize();
// printf_P(PSTR("X = %f; Y= %f \n"), current_position[X_AXIS], current_position[Y_AXIS]);
@ -9493,9 +9572,11 @@ float temp_compensation_pinda_thermistor_offset(float temperature_pinda)
void long_pause() //long pause print
{
st_synchronize();
start_pause_print = _millis();
// Stop heaters
setAllTargetHotends(0);
//retract
current_position[E_AXIS] -= default_retraction;
plan_buffer_line_curposXYZE(400, active_extruder);
@ -9512,8 +9593,6 @@ void long_pause() //long pause print
// Turn off the print fan
fanSpeed = 0;
st_synchronize();
}
void serialecho_temperatures() {
@ -9534,6 +9613,11 @@ void uvlo_()
unsigned long time_start = _millis();
bool sd_print = card.sdprinting;
// Conserve power as soon as possible.
#ifdef LCD_BL_PIN
backlightMode = BACKLIGHT_MODE_DIM;
backlightLevel_LOW = 0;
backlight_update();
#endif //LCD_BL_PIN
disable_x();
disable_y();
@ -9565,8 +9649,18 @@ void uvlo_()
if (sd_position < 0) sd_position = 0;
}
// Backup the feedrate in mm/min.
int feedrate_bckp = blocks_queued() ? (block_buffer[block_buffer_tail].nominal_speed * 60.f) : feedrate;
// save the global state at planning time
uint16_t feedrate_bckp;
if (blocks_queued())
{
memcpy(saved_target, current_block->gcode_target, sizeof(saved_target));
feedrate_bckp = current_block->gcode_feedrate;
}
else
{
saved_target[0] = SAVED_TARGET_UNSET;
feedrate_bckp = feedrate;
}
// After this call, the planner queue is emptied and the current_position is set to a current logical coordinate.
// The logical coordinate will likely differ from the machine coordinate if the skew calibration and mesh bed leveling
@ -9633,7 +9727,8 @@ void uvlo_()
eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4), current_position[Y_AXIS]);
eeprom_update_float((float*)EEPROM_UVLO_CURRENT_POSITION_Z , current_position[Z_AXIS]);
// Store the current feed rate, temperatures, fan speed and extruder multipliers (flow rates)
EEPROM_save_B(EEPROM_UVLO_FEEDRATE, &feedrate_bckp);
eeprom_update_word((uint16_t*)EEPROM_UVLO_FEEDRATE, feedrate_bckp);
EEPROM_save_B(EEPROM_UVLO_FEEDMULTIPLY, &feedmultiply);
eeprom_update_byte((uint8_t*)EEPROM_UVLO_TARGET_HOTEND, target_temperature[active_extruder]);
eeprom_update_byte((uint8_t*)EEPROM_UVLO_TARGET_BED, target_temperature_bed);
eeprom_update_byte((uint8_t*)EEPROM_UVLO_FAN_SPEED, fanSpeed);
@ -9645,6 +9740,11 @@ void uvlo_()
#endif
#endif
eeprom_update_word((uint16_t*)(EEPROM_EXTRUDEMULTIPLY), (uint16_t)extrudemultiply);
// Store the saved target
eeprom_update_float((float*)(EEPROM_UVLO_SAVED_TARGET+0*4), saved_target[X_AXIS]);
eeprom_update_float((float*)(EEPROM_UVLO_SAVED_TARGET+1*4), saved_target[Y_AXIS]);
eeprom_update_float((float*)(EEPROM_UVLO_SAVED_TARGET+2*4), saved_target[Z_AXIS]);
eeprom_update_float((float*)(EEPROM_UVLO_SAVED_TARGET+3*4), saved_target[E_AXIS]);
// Finaly store the "power outage" flag.
if(sd_print) eeprom_update_byte((uint8_t*)EEPROM_UVLO, 1);
@ -9893,10 +9993,17 @@ void recover_machine_state_after_power_panic(bool bTiny)
#endif
#endif
extrudemultiply = (int)eeprom_read_word((uint16_t*)(EEPROM_EXTRUDEMULTIPLY));
// 9) Recover the saved target
saved_target[X_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_SAVED_TARGET+0*4));
saved_target[Y_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_SAVED_TARGET+1*4));
saved_target[Z_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_SAVED_TARGET+2*4));
saved_target[E_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_SAVED_TARGET+3*4));
}
void restore_print_from_eeprom() {
int feedrate_rec;
int feedmultiply_rec;
uint8_t fan_speed_rec;
char cmd[30];
char filename[13];
@ -9904,9 +10011,12 @@ void restore_print_from_eeprom() {
char dir_name[9];
fan_speed_rec = eeprom_read_byte((uint8_t*)EEPROM_UVLO_FAN_SPEED);
EEPROM_read_B(EEPROM_UVLO_FEEDRATE, &feedrate_rec);
feedrate_rec = eeprom_read_word((uint16_t*)EEPROM_UVLO_FEEDRATE);
EEPROM_read_B(EEPROM_UVLO_FEEDMULTIPLY, &feedmultiply_rec);
SERIAL_ECHOPGM("Feedrate:");
MYSERIAL.println(feedrate_rec);
MYSERIAL.print(feedrate_rec);
SERIAL_ECHOPGM(", feedmultiply:");
MYSERIAL.println(feedmultiply_rec);
depth = eeprom_read_byte((uint8_t*)EEPROM_DIR_DEPTH);
@ -9947,9 +10057,11 @@ void restore_print_from_eeprom() {
enquecommand(cmd);
// Unretract.
enquecommand_P(PSTR("G1 E" STRINGIFY(2*default_retraction)" F480"));
// Set the feedrate saved at the power panic.
// Set the feedrates saved at the power panic.
sprintf_P(cmd, PSTR("G1 F%d"), feedrate_rec);
enquecommand(cmd);
sprintf_P(cmd, PSTR("M220 S%d"), feedmultiply_rec);
enquecommand(cmd);
if (eeprom_read_byte((uint8_t*)EEPROM_UVLO_E_ABS))
{
enquecommand_P(PSTR("M82")); //E axis abslute mode
@ -10101,16 +10213,21 @@ void stop_and_save_print_to_ram(float z_move, float e_move)
}
#endif
#if 0
saved_feedrate2 = feedrate; //save feedrate
#else
// Try to deduce the feedrate from the first block of the planner.
// Speed is in mm/min.
saved_feedrate2 = blocks_queued() ? (block_buffer[block_buffer_tail].nominal_speed * 60.f) : feedrate;
#endif
// save the global state at planning time
if (blocks_queued())
{
memcpy(saved_target, current_block->gcode_target, sizeof(saved_target));
saved_feedrate2 = current_block->gcode_feedrate;
}
else
{
saved_target[0] = SAVED_TARGET_UNSET;
saved_feedrate2 = feedrate;
}
planner_abort_hard(); //abort printing
memcpy(saved_pos, current_position, sizeof(saved_pos));
saved_feedmultiply2 = feedmultiply; //save feedmultiply
saved_active_extruder = active_extruder; //save active_extruder
saved_extruder_temperature = degTargetHotend(active_extruder);
@ -10126,7 +10243,9 @@ void stop_and_save_print_to_ram(float z_move, float e_move)
sei();
if ((z_move != 0) || (e_move != 0)) { // extruder or z move
#if 1
// Rather than calling plan_buffer_line directly, push the move into the command queue,
// Rather than calling plan_buffer_line directly, push the move into the command queue so that
// the caller can continue processing. This is used during powerpanic to save the state as we
// move away from the print.
char buf[48];
// First unretract (relative extrusion)
@ -10155,6 +10274,7 @@ void stop_and_save_print_to_ram(float z_move, float e_move)
memcpy(current_position, saved_pos, sizeof(saved_pos));
memcpy(destination, current_position, sizeof(destination));
#endif
waiting_inside_plan_buffer_line_print_aborted = true; //unroll the stack
}
}
@ -10188,7 +10308,6 @@ void restore_print_from_ram_and_continue(float e_move)
wait_for_heater(_millis(), saved_active_extruder);
heating_status = 2;
}
feedrate = saved_feedrate2; //restore feedrate
axis_relative_modes[E_AXIS] = saved_extruder_relative_mode;
float e = saved_pos[E_AXIS] - e_move;
plan_set_e_position(e);
@ -10211,6 +10330,10 @@ void restore_print_from_ram_and_continue(float e_move)
fans_check_enabled = true;
#endif
// restore original feedrate/feedmultiply _after_ restoring the extruder position
feedrate = saved_feedrate2;
feedmultiply = saved_feedmultiply2;
memcpy(current_position, saved_pos, sizeof(saved_pos));
memcpy(destination, current_position, sizeof(destination));
if (saved_printing_type == PRINTING_TYPE_SD) { //was sd printing
@ -10226,10 +10349,20 @@ void restore_print_from_ram_and_continue(float e_move)
else {
//not sd printing nor usb printing
}
SERIAL_PROTOCOLLNRPGM(MSG_OK); //dummy response because of octoprint is waiting for this
lcd_setstatuspgm(_T(WELCOME_MSG));
saved_printing_type = PRINTING_TYPE_NONE;
saved_printing = false;
waiting_inside_plan_buffer_line_print_aborted = true; //unroll the stack
}
// Cancel the state related to a currently saved print
void cancel_saved_printing()
{
saved_target[0] = SAVED_TARGET_UNSET;
saved_printing_type = PRINTING_TYPE_NONE;
saved_printing = false;
}
void print_world_coordinates()

View File

@ -319,6 +319,22 @@ bool Sd2Card::init(uint8_t sckRateID, uint8_t chipSelectPin) {
goto fail;
}
}
// send 0xFF until 0xFF received to give card some clock cycles
t0 = (uint16_t)_millis();
SERIAL_ECHOLNRPGM(PSTR("Sending 0xFF"));
spiSend(0XFF);
while ((status_ = spiRec()) != 0xFF)
{
spiSend(0XFF);
if (((uint16_t)_millis() - t0) > SD_CARD_ERROR_FF_TIMEOUT)
{
error(SD_CARD_ERROR_CMD8);
SERIAL_ECHOLNRPGM(PSTR("No 0xFF received"));
goto fail;
}
}
// check SD version
if ((cardCommand(CMD8, 0x1AA) & R1_ILLEGAL_COMMAND)) {
type(SD_CARD_TYPE_SD1);

View File

@ -105,6 +105,8 @@ uint8_t const SD_CARD_ERROR_SCK_RATE = 0X18;
uint8_t const SD_CARD_ERROR_INIT_NOT_CALLED = 0X19;
/** crc check error */
uint8_t const SD_CARD_ERROR_CRC = 0X20;
/** no response to sent 0xFF */
uint8_t const SD_CARD_ERROR_FF_TIMEOUT = 0X21;
/** Toshiba FlashAir: iSDIO */
uint8_t const SD_CARD_ERROR_CMD48 = 0x80;

View File

@ -4,6 +4,7 @@
#include <stdio.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "pins.h"
uint8_t adc_state;
uint8_t adc_count;
@ -24,8 +25,8 @@ void adc_init(void)
ADMUX |= (1 << REFS0);
ADCSRA |= (1 << ADEN);
// ADCSRA |= (1 << ADIF) | (1 << ADSC);
DIDR0 = (ADC_CHAN_MSK & 0xff);
DIDR2 = (ADC_CHAN_MSK >> 8);
DIDR0 = ((ADC_CHAN_MSK & ADC_DIDR_MSK) & 0xff);
DIDR2 = ((ADC_CHAN_MSK & ADC_DIDR_MSK) >> 8);
adc_reset();
// adc_sim_mask = 0b0101;
// adc_sim_mask = 0b100101;

120
Firmware/backlight.cpp Normal file
View File

@ -0,0 +1,120 @@
//backlight.cpp
#include "backlight.h"
#include <avr/eeprom.h>
#include <Arduino.h>
#include "eeprom.h"
#include "Marlin.h"
#include "pins.h"
#include "fastio.h"
#include "Timer.h"
#ifdef LCD_BL_PIN
#define BL_FLASH_DELAY_MS 25
bool backlightSupport = 0; //only if it's true will any of the settings be visible to the user
int16_t backlightLevel_HIGH = 0;
int16_t backlightLevel_LOW = 0;
uint8_t backlightMode = BACKLIGHT_MODE_BRIGHT;
int16_t backlightTimer_period = 10;
LongTimer backlightTimer;
static void backlightTimer_reset() //used for resetting the timer and waking the display. Triggered on user interactions.
{
if (!backlightSupport) return;
backlightTimer.start();
backlight_update();
}
void force_bl_on(bool section_start)
{
if (section_start)
{
backlightMode = BACKLIGHT_MODE_BRIGHT;
if (backlightLevel_HIGH < 30) backlightLevel_HIGH = 30;
}
else
{
backlightMode = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_MODE);
backlightLevel_HIGH = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH);
}
backlight_update();
}
void backlight_wake(const uint8_t flashNo)
{
if (!backlightSupport) return;
if (flashNo)
{
uint8_t backlightMode_bck = backlightMode;
for (uint8_t i = 0; i < (((backlightMode_bck == BACKLIGHT_MODE_AUTO) && !backlightTimer.running()) + (flashNo * 2)); i++)
{
backlightMode = !backlightMode; //toggles between BACKLIGHT_MODE_BRIGHT and BACKLIGHT_MODE_DIM
backlight_update();
_delay(BL_FLASH_DELAY_MS);
}
backlightMode = backlightMode_bck;
}
backlightTimer_reset();
}
void backlight_save() //saves all backlight data to eeprom.
{
eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH, (uint8_t)backlightLevel_HIGH);
eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_LOW, (uint8_t)backlightLevel_LOW);
eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_MODE, backlightMode);
eeprom_update_word((uint16_t *)EEPROM_BACKLIGHT_TIMEOUT, backlightTimer_period);
}
void backlight_update()
{
if (!backlightSupport) return;
if (backlightMode == BACKLIGHT_MODE_AUTO)
{
if (backlightTimer.expired((uint32_t)backlightTimer_period * 1000ul)) analogWrite(LCD_BL_PIN, backlightLevel_LOW);
else if (backlightTimer.running()) analogWrite(LCD_BL_PIN, backlightLevel_HIGH);
else {/*do nothing*/;} //display is dimmed.
}
else if (backlightMode == BACKLIGHT_MODE_DIM) analogWrite(LCD_BL_PIN, backlightLevel_LOW);
else analogWrite(LCD_BL_PIN, backlightLevel_HIGH);
}
void backlight_init()
{
//check for backlight support on lcd
SET_INPUT(LCD_BL_PIN);
WRITE(LCD_BL_PIN,HIGH);
_delay(10);
backlightSupport = !READ(LCD_BL_PIN);
if (!backlightSupport) return;
//initialize backlight
backlightMode = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_MODE);
if (backlightMode == 0xFF) //set default values
{
backlightMode = BACKLIGHT_MODE_AUTO;
backlightLevel_HIGH = 130;
backlightLevel_LOW = 50;
backlightTimer_period = 10; //in seconds
backlight_save();
}
backlightLevel_HIGH = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH);
backlightLevel_LOW = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_LOW);
backlightTimer_period = eeprom_read_word((uint16_t *)EEPROM_BACKLIGHT_TIMEOUT);
SET_OUTPUT(LCD_BL_PIN);
backlightTimer_reset();
}
#else //LCD_BL_PIN
void force_bl_on(__attribute__((unused)) bool section_start) {}
void backlight_update() {}
void backlight_init() {}
void backlight_save() {}
void backlight_wake(__attribute__((unused)) const uint8_t flashNo) {}
#endif //LCD_BL_PIN

32
Firmware/backlight.h Normal file
View File

@ -0,0 +1,32 @@
//backlight.h
#ifndef _BACKLIGHT_H
#define _BACKLIGHT_H
#include <inttypes.h>
#include "Marlin.h"
#include "pins.h"
enum Backlight_Mode
{
BACKLIGHT_MODE_DIM = 0,
BACKLIGHT_MODE_BRIGHT = 1,
BACKLIGHT_MODE_AUTO = 2,
};
extern int16_t backlightLevel_HIGH;
extern int16_t backlightLevel_LOW;
extern uint8_t backlightMode;
extern bool backlightSupport;
extern int16_t backlightTimer_period;
#define FORCE_BL_ON_START force_bl_on(true)
#define FORCE_BL_ON_END force_bl_on(false)
extern void force_bl_on(bool section_start);
extern void backlight_update();
extern void backlight_init();
extern void backlight_save();
extern void backlight_wake(const uint8_t flashNo = 0);
#endif //_BACKLIGHT_H

View File

@ -25,7 +25,6 @@ CardReader::CardReader()
sdpos = 0;
sdprinting = false;
cardOK = false;
paused = false;
saving = false;
logging = false;
autostart_atmillis=0;
@ -137,8 +136,8 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m
SERIAL_ECHOPGM("Access date: ");
MYSERIAL.println(p.lastAccessDate);
SERIAL_ECHOLNPGM("");*/
creationDate = p.creationDate;
creationTime = p.creationTime;
modificationDate = p.lastWriteDate;
modificationTime = p.lastWriteTime;
//writeDate = p.lastAccessDate;
if (match != NULL) {
if (strcasecmp(match, filename) == 0) return;
@ -242,24 +241,13 @@ void CardReader::startFileprint()
if(cardOK)
{
sdprinting = true;
paused = false;
Stopped = false;
Stopped = false;
#ifdef SDCARD_SORT_ALPHA
//flush_presort();
#endif
}
}
void CardReader::pauseSDPrint()
{
if(sdprinting)
{
sdprinting = false;
paused = true;
}
}
void CardReader::openLogFile(const char* name)
{
logging = true;
@ -371,10 +359,10 @@ void CardReader::openFile(const char* name,bool read, bool replace_current/*=tru
{
if((int)file_subcall_ctr>(int)SD_PROCEDURE_DEPTH-1)
{
SERIAL_ERROR_START;
SERIAL_ERRORPGM("trying to call sub-gcode files with too many levels. MAX level is:");
SERIAL_ERRORLN(SD_PROCEDURE_DEPTH);
kill("", 1);
// SERIAL_ERROR_START;
// SERIAL_ERRORPGM("trying to call sub-gcode files with too many levels. MAX level is:");
// SERIAL_ERRORLN(SD_PROCEDURE_DEPTH);
kill(_n("trying to call sub-gcode files with too many levels."), 1);
return;
}
@ -408,9 +396,7 @@ void CardReader::openFile(const char* name,bool read, bool replace_current/*=tru
SERIAL_ECHOLN(name);
}
sdprinting = false;
paused = false;
SdFile myDir;
const char *fname=name;
diveSubfolder(fname,myDir);
@ -492,24 +478,27 @@ uint32_t CardReader::getFileSize()
void CardReader::getStatus()
{
if(sdprinting){
SERIAL_PROTOCOL(longFilename);
SERIAL_PROTOCOLPGM("\n");
SERIAL_PROTOCOLRPGM(_N("SD printing byte "));////MSG_SD_PRINTING_BYTE
SERIAL_PROTOCOL(sdpos);
SERIAL_PROTOCOLPGM("/");
SERIAL_PROTOCOLLN(filesize);
uint16_t time = _millis()/60000 - starttime/60000;
SERIAL_PROTOCOL(itostr2(time/60));
SERIAL_PROTOCOL(':');
SERIAL_PROTOCOL(itostr2(time%60));
SERIAL_PROTOCOLPGM("\n");
}
else if (paused) {
SERIAL_PROTOCOLLNPGM("SD print paused");
}
else if (saved_printing) {
SERIAL_PROTOCOLLNPGM("Print saved");
if(sdprinting)
{
if (isPrintPaused) {
SERIAL_PROTOCOLLNPGM("SD print paused");
}
else if (saved_printing) {
SERIAL_PROTOCOLLNPGM("Print saved");
}
else {
SERIAL_PROTOCOL(longFilename);
SERIAL_PROTOCOLPGM("\n");
SERIAL_PROTOCOLRPGM(_N("SD printing byte "));////MSG_SD_PRINTING_BYTE
SERIAL_PROTOCOL(sdpos);
SERIAL_PROTOCOLPGM("/");
SERIAL_PROTOCOLLN(filesize);
uint16_t time = _millis()/60000 - starttime/60000;
SERIAL_PROTOCOL(itostr2(time/60));
SERIAL_PROTOCOL(':');
SERIAL_PROTOCOL(itostr2(time%60));
SERIAL_PROTOCOLPGM("\n");
}
}
else {
SERIAL_PROTOCOLLNPGM("Not SD printing");
@ -763,8 +752,8 @@ void CardReader::presort() {
#endif
#elif SDSORT_USES_STACK
char sortnames[fileCnt][LONG_FILENAME_LENGTH];
uint16_t creation_time[fileCnt];
uint16_t creation_date[fileCnt];
uint16_t modification_time[fileCnt];
uint16_t modification_date[fileCnt];
#endif
// Folder sorting needs 1 bit per entry for flags.
@ -784,8 +773,8 @@ void CardReader::presort() {
// retaining only two filenames at a time. This is very
// slow but is safest and uses minimal RAM.
char name1[LONG_FILENAME_LENGTH + 1];
uint16_t creation_time_bckp;
uint16_t creation_date_bckp;
uint16_t modification_time_bckp;
uint16_t modification_date_bckp;
#endif
position = 0;
@ -811,8 +800,8 @@ void CardReader::presort() {
#else
// Copy filenames into the static array
strcpy(sortnames[i], LONGEST_FILENAME);
creation_time[i] = creationTime;
creation_date[i] = creationDate;
modification_time[i] = modificationTime;
modification_date[i] = modificationDate;
#if SDSORT_CACHE_NAMES
strcpy(sortshort[i], filename);
#endif
@ -837,12 +826,12 @@ void CardReader::presort() {
// Compare names from the array or just the two buffered names
#if SDSORT_USES_RAM
#define _SORT_CMP_NODIR() (strcasecmp(sortnames[o1], sortnames[o2]) > 0)
#define _SORT_CMP_TIME_NODIR() (((creation_date[o1] == creation_date[o2]) && (creation_time[o1] < creation_time[o2])) || \
(creation_date[o1] < creation_date [o2]))
#define _SORT_CMP_TIME_NODIR() (((modification_date[o1] == modification_date[o2]) && (modification_time[o1] < modification_time[o2])) || \
(modification_date[o1] < modification_date [o2]))
#else
#define _SORT_CMP_NODIR() (strcasecmp(name1, name2) > 0) //true if lowercase(name1) > lowercase(name2)
#define _SORT_CMP_TIME_NODIR() (((creation_date_bckp == creationDate) && (creation_time_bckp > creationTime)) || \
(creation_date_bckp > creationDate))
#define _SORT_CMP_TIME_NODIR() (((modification_date_bckp == modificationDate) && (modification_time_bckp > modificationTime)) || \
(modification_date_bckp > modificationDate))
#endif
@ -893,8 +882,8 @@ void CardReader::presort() {
counter++;
getfilename_simple(positions[o1]);
strcpy(name1, LONGEST_FILENAME); // save (or getfilename below will trounce it)
creation_date_bckp = creationDate;
creation_time_bckp = creationTime;
modification_date_bckp = modificationDate;
modification_time_bckp = modificationTime;
#if HAS_FOLDER_SORTING
bool dir1 = filenameIsDir;
#endif

View File

@ -25,7 +25,6 @@ public:
void closefile(bool store_location=false);
void release();
void startFileprint();
void pauseSDPrint();
uint32_t getFileSize();
void getStatus();
void printingHasFinished();
@ -75,9 +74,8 @@ public:
bool logging;
bool sdprinting ;
bool cardOK ;
bool paused ;
char filename[13];
uint16_t creationTime, creationDate;
uint16_t modificationTime, modificationDate;
uint32_t cluster, position;
char longFilename[LONG_FILENAME_LENGTH];
bool filenameIsDir;
@ -114,8 +112,8 @@ private:
#endif
#elif !SDSORT_USES_STACK
char sortnames[SDSORT_LIMIT][FILENAME_LENGTH];
uint16_t creation_time[SDSORT_LIMIT];
uint16_t creation_date[SDSORT_LIMIT];
uint16_t modification_time[SDSORT_LIMIT];
uint16_t modification_date[SDSORT_LIMIT];
#endif
// Folder sorting uses an isDir array when caching items.

View File

@ -500,7 +500,7 @@ void get_command()
//If command was e-stop process now
if(strcmp(cmdbuffer+bufindw+CMDHDRSIZE, "M112") == 0)
kill("", 2);
kill(MSG_M112_KILL, 2);
// Store the current line into buffer, move to the next line.
// Store type of entry
@ -582,30 +582,8 @@ void get_command()
((serial_char == '#' || serial_char == ':') && comment_mode == false) ||
serial_count >= (MAX_CMD_SIZE - 1) || n==-1)
{
if(card.eof()){
SERIAL_PROTOCOLLNRPGM(_n("Done printing file"));////MSG_FILE_PRINTED
stoptime=_millis();
char time[30];
unsigned long t=(stoptime-starttime-pause_time)/1000;
pause_time = 0;
int hours, minutes;
minutes=(t/60)%60;
hours=t/60/60;
save_statistics(total_filament_used, t);
sprintf_P(time, PSTR("%i hours %i minutes"),hours, minutes);
SERIAL_ECHO_START;
SERIAL_ECHOLN(time);
lcd_setstatus(time);
card.printingHasFinished();
card.checkautostart(true);
if(card.eof()) break;
if (farm_mode)
{
prusa_statistics(6);
lcd_commands_type = LcdCommands::FarmModeConfirm;
}
}
if(serial_char=='#')
stop_buffering=true;
@ -663,6 +641,37 @@ void get_command()
else if(!comment_mode) cmdbuffer[bufindw+CMDHDRSIZE+serial_count++] = serial_char;
}
}
if(card.eof())
{
// file was fully buffered, but commands might still need to be planned!
// do *not* clear sdprinting until all SD commands are consumed to ensure
// SD state can be resumed from a saved printing state. sdprinting is only
// cleared by printingHasFinished after peforming all remaining moves.
if(!cmdqueue_calc_sd_length())
{
SERIAL_PROTOCOLLNRPGM(_n("Done printing file"));////MSG_FILE_PRINTED
stoptime=_millis();
char time[30];
unsigned long t=(stoptime-starttime-pause_time)/1000;
pause_time = 0;
int hours, minutes;
minutes=(t/60)%60;
hours=t/60/60;
save_statistics(total_filament_used, t);
sprintf_P(time, PSTR("%i hours %i minutes"),hours, minutes);
SERIAL_ECHO_START;
SERIAL_ECHOLN(time);
lcd_setstatus(time);
card.printingHasFinished();
card.checkautostart(true);
if (farm_mode)
{
prusa_statistics(6);
lcd_commands_type = LcdCommands::FarmModeConfirm;
}
}
}
#endif //SDSUPPORT
}

View File

@ -2,9 +2,21 @@
#define _CONFIG_H
#include "Configuration_prusa.h"
#include "pins.h"
#define IR_SENSOR_ANALOG (defined(VOLT_IR_PIN) && defined(IR_SENSOR))
//ADC configuration
#if !IR_SENSOR_ANALOG
#define ADC_CHAN_MSK 0b0000001001011111 //used AD channels bit mask (0,1,2,3,4,6,9)
#define ADC_DIDR_MSK 0b0000001001011111 //AD channels DIDR mask (1 ~ disabled digital input)
#define ADC_CHAN_CNT 7 //number of used channels)
#else //!IR_SENSOR_ANALOG
#define ADC_CHAN_MSK 0b0000001101011111 //used AD channels bit mask (0,1,2,3,4,6,8,9)
#define ADC_DIDR_MSK 0b0000001001011111 //AD channels DIDR mask (1 ~ disabled digital input)
#define ADC_CHAN_CNT 8 //number of used channels)
#endif //!IR_SENSOR_ANALOG
#define ADC_OVRSAMPL 16 //oversampling multiplier
#define ADC_CALLBACK adc_ready //callback function ()
@ -42,11 +54,8 @@
#define W25X20CL_SPCR SPI_SPCR(W25X20CL_SPI_RATE, 1, 1, 1, 0)
#define W25X20CL_SPSR SPI_SPSR(W25X20CL_SPI_RATE)
#include "boards.h"
#include "Configuration_prusa.h"
//LANG - Multi-language support
//#define LANG_MODE 0 // primary language only
//define LANG_MODE 0 // primary language only
#define LANG_MODE 1 // sec. language support
#define LANG_SIZE_RESERVED 0x3000 // reserved space for secondary language (12288 bytes)

View File

@ -74,7 +74,7 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
#define EEPROM_UVLO_CURRENT_POSITION_Z (EEPROM_FILE_POSITION - 4) //float for current position in Z
#define EEPROM_UVLO_TARGET_HOTEND (EEPROM_UVLO_CURRENT_POSITION_Z - 1)
#define EEPROM_UVLO_TARGET_BED (EEPROM_UVLO_TARGET_HOTEND - 1)
#define EEPROM_UVLO_FEEDRATE (EEPROM_UVLO_TARGET_BED - 2)
#define EEPROM_UVLO_FEEDRATE (EEPROM_UVLO_TARGET_BED - 2) //uint16_t
#define EEPROM_UVLO_FAN_SPEED (EEPROM_UVLO_FEEDRATE - 1)
#define EEPROM_FAN_CHECK_ENABLED (EEPROM_UVLO_FAN_SPEED - 1)
#define EEPROM_UVLO_MESH_BED_LEVELING (EEPROM_FAN_CHECK_ENABLED - 9*2)
@ -201,9 +201,20 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
#define EEPROM_SHEETS_BASE (EEPROM_CHECK_GCODE - EEPROM_SHEETS_SIZEOF) // Sheets
static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE);
#define EEPROM_FSENSOR_PCB (EEPROM_SHEETS_BASE-1) // uint8
#define EEPROM_FSENSOR_ACTION_NA (EEPROM_FSENSOR_PCB-1) // uint8
#define EEPROM_UVLO_SAVED_TARGET (EEPROM_FSENSOR_ACTION_NA - 4*4) // 4 x float for saved target for all axes
#define EEPROM_UVLO_FEEDMULTIPLY (EEPROM_UVLO_SAVED_TARGET - 2) // uint16_t for feedmultiply
#define EEPROM_BACKLIGHT_LEVEL_HIGH (EEPROM_UVLO_FEEDMULTIPLY-1) // uint8
#define EEPROM_BACKLIGHT_LEVEL_LOW (EEPROM_BACKLIGHT_LEVEL_HIGH-1) // uint8
#define EEPROM_BACKLIGHT_MODE (EEPROM_BACKLIGHT_LEVEL_LOW-1) // uint8
#define EEPROM_BACKLIGHT_TIMEOUT (EEPROM_BACKLIGHT_MODE-2) // uint16
//This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items.
#define EEPROM_LAST_ITEM EEPROM_SHEETS_BASE
#define EEPROM_LAST_ITEM EEPROM_BACKLIGHT_TIMEOUT
// !!!!!
// !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!!
// !!!!!

View File

@ -15,6 +15,10 @@
#include "mmu.h"
#include "cardreader.h"
#include "adc.h"
#include "temperature.h"
#include "config.h"
//! @name Basic parameters
//! @{
#define FSENSOR_CHUNK_LEN 0.64F //!< filament sensor chunk length 0.64mm
@ -53,15 +57,8 @@ bool fsensor_enabled = true;
bool fsensor_watch_runout = true;
//! not responding - is set if any communication error occurred during initialization or readout
bool fsensor_not_responding = false;
//! printing saved
bool fsensor_printing_saved = false;
//! enable/disable quality meassurement
bool fsensor_oq_meassure_enabled = false;
//! as explained in the CHECK_FSENSOR macro: this flag is set to true when fsensor posts
//! the M600 into the command queue, which elliminates the hazard of having posted multiple M600's
//! before the first one gets read and started processing.
//! Btw., the IR fsensor could do up to 6 posts before the command queue managed to start processing the first M600 ;)
static bool fsensor_m600_enqueued = false;
//! number of errors, updated in ISR
uint8_t fsensor_err_cnt = 0;
@ -117,6 +114,13 @@ int16_t fsensor_oq_yd_max;
uint16_t fsensor_oq_sh_sum;
//! @}
#if IR_SENSOR_ANALOG
ClFsensorPCB oFsensorPCB;
ClFsensorActionNA oFsensorActionNA;
bool bIRsensorStateFlag=false;
unsigned long nIRsensorLastTime;
#endif //IR_SENSOR_ANALOG
void fsensor_stop_and_save_print(void)
{
printf_P(PSTR("fsensor_stop_and_save_print\n"));
@ -126,20 +130,28 @@ void fsensor_stop_and_save_print(void)
void fsensor_restore_print_and_continue(void)
{
printf_P(PSTR("fsensor_restore_print_and_continue\n"));
fsensor_watch_runout = true;
fsensor_err_cnt = 0;
fsensor_m600_enqueued = false;
restore_print_from_ram_and_continue(0); //XYZ = orig, E - no change
}
// fsensor_checkpoint_print cuts the current print job at the current position,
// allowing new instructions to be inserted in the middle
void fsensor_checkpoint_print(void)
{
printf_P(PSTR("fsensor_checkpoint_print\n"));
stop_and_save_print_to_ram(0, 0);
restore_print_from_ram_and_continue(0);
}
void fsensor_init(void)
{
#ifdef PAT9125
uint8_t pat9125 = pat9125_init();
printf_P(PSTR("PAT9125_init:%hhu\n"), pat9125);
printf_P(PSTR("PAT9125_init:%hhu\n"), pat9125);
#endif //PAT9125
uint8_t fsensor = eeprom_read_byte((uint8_t*)EEPROM_FSENSOR);
fsensor_autoload_enabled=eeprom_read_byte((uint8_t*)EEPROM_FSENS_AUTOLOAD_ENABLED);
fsensor_not_responding = false;
#ifdef PAT9125
uint8_t oq_meassure_enabled = eeprom_read_byte((uint8_t*)EEPROM_FSENS_OQ_MEASS_ENABLED);
fsensor_oq_meassure_enabled = (oq_meassure_enabled == 1)?true:false;
@ -150,19 +162,27 @@ void fsensor_init(void)
fsensor = 0; //disable sensor
fsensor_not_responding = true;
}
else
fsensor_not_responding = false;
#endif //PAT9125
#if IR_SENSOR_ANALOG
bIRsensorStateFlag=false;
oFsensorPCB=(ClFsensorPCB)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_PCB);
oFsensorActionNA=(ClFsensorActionNA)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_ACTION_NA);
#endif //IR_SENSOR_ANALOG
if (fsensor)
fsensor_enable();
fsensor_enable(false); // (in this case) EEPROM update is not necessary
else
fsensor_disable();
printf_P(PSTR("FSensor %S\n"), (fsensor_enabled?PSTR("ENABLED"):PSTR("DISABLED\n")));
fsensor_disable(false); // (in this case) EEPROM update is not necessary
printf_P(PSTR("FSensor %S"), (fsensor_enabled?PSTR("ENABLED"):PSTR("DISABLED")));
#if IR_SENSOR_ANALOG
printf_P(PSTR(" (sensor board revision: %S)\n"),(oFsensorPCB==ClFsensorPCB::_Rev03b)?PSTR("03b or newer"):PSTR("03 or older"));
#else //IR_SENSOR_ANALOG
printf_P(PSTR("\n"));
#endif //IR_SENSOR_ANALOG
if (check_for_ir_sensor()) ir_sensor_detected = true;
}
bool fsensor_enable(void)
bool fsensor_enable(bool bUpdateEEPROM)
{
#ifdef PAT9125
if (mmu_enabled == false) { //filament sensor is pat9125, enable only if it is working
@ -187,18 +207,34 @@ bool fsensor_enable(void)
FSensorStateMenu = 1;
}
#else // PAT9125
fsensor_enabled = true;
eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, 0x01);
FSensorStateMenu = 1;
#endif // PAT9125
#if IR_SENSOR_ANALOG
if(!fsensor_IR_check())
{
bUpdateEEPROM=true;
fsensor_enabled=false;
fsensor_not_responding=true;
FSensorStateMenu=0;
}
else {
#endif //IR_SENSOR_ANALOG
fsensor_enabled=true;
fsensor_not_responding=false;
FSensorStateMenu=1;
#if IR_SENSOR_ANALOG
}
#endif //IR_SENSOR_ANALOG
if(bUpdateEEPROM)
eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, FSensorStateMenu);
#endif //PAT9125
return fsensor_enabled;
}
void fsensor_disable(void)
{
void fsensor_disable(bool bUpdateEEPROM)
{
fsensor_enabled = false;
eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, 0x00);
FSensorStateMenu = 0;
if(bUpdateEEPROM)
eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, 0x00);
}
void fsensor_autoload_set(bool State)
@ -529,8 +565,6 @@ void fsensor_enque_M600(){
printf_P(PSTR("fsensor_update - M600\n"));
eeprom_update_byte((uint8_t*)EEPROM_FERROR_COUNT, eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT) + 1);
eeprom_update_word((uint16_t*)EEPROM_FERROR_COUNT_TOT, eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT) + 1);
enquecommand_front_P(PSTR("PRUSA fsensor_recover"));
fsensor_m600_enqueued = true;
enquecommand_front_P((PSTR("M600")));
}
@ -542,7 +576,7 @@ void fsensor_enque_M600(){
void fsensor_update(void)
{
#ifdef PAT9125
if (fsensor_enabled && fsensor_watch_runout && (fsensor_err_cnt > FSENSOR_ERR_MAX) && ( ! fsensor_m600_enqueued) )
if (fsensor_enabled && fsensor_watch_runout && (fsensor_err_cnt > FSENSOR_ERR_MAX))
{
bool autoload_enabled_tmp = fsensor_autoload_enabled;
fsensor_autoload_enabled = false;
@ -575,24 +609,86 @@ void fsensor_update(void)
err |= (fsensor_oq_er_sum > 2);
err |= (fsensor_oq_yd_sum < (4 * FSENSOR_OQ_MIN_YD));
if (!err)
{
printf_P(PSTR("fsensor_err_cnt = 0\n"));
fsensor_restore_print_and_continue();
}
else
{
fsensor_enque_M600();
fsensor_watch_runout = false;
}
fsensor_restore_print_and_continue();
fsensor_autoload_enabled = autoload_enabled_tmp;
fsensor_oq_meassure_enabled = oq_meassure_enabled_tmp;
if (!err)
printf_P(PSTR("fsensor_err_cnt = 0\n"));
else
fsensor_enque_M600();
}
#else //PAT9125
if ((digitalRead(IR_SENSOR_PIN) == 1) && CHECK_FSENSOR && fsensor_enabled && ir_sensor_detected && ( ! fsensor_m600_enqueued) )
{
fsensor_stop_and_save_print();
fsensor_enque_M600();
if (CHECK_FSENSOR && fsensor_enabled && ir_sensor_detected)
{
if(digitalRead(IR_SENSOR_PIN))
{ // IR_SENSOR_PIN ~ H
#if IR_SENSOR_ANALOG
if(!bIRsensorStateFlag)
{
bIRsensorStateFlag=true;
nIRsensorLastTime=_millis();
}
else
{
if((_millis()-nIRsensorLastTime)>IR_SENSOR_STEADY)
{
uint8_t nMUX1,nMUX2;
uint16_t nADC;
bIRsensorStateFlag=false;
// sequence for direct data reading from AD converter
DISABLE_TEMPERATURE_INTERRUPT();
nMUX1=ADMUX; // ADMUX saving
nMUX2=ADCSRB;
adc_setmux(VOLT_IR_PIN);
ADCSRA|=(1<<ADSC); // first conversion after ADMUX change discarded (preventively)
while(ADCSRA&(1<<ADSC))
;
ADCSRA|=(1<<ADSC); // second conversion used
while(ADCSRA&(1<<ADSC))
;
nADC=ADC;
ADMUX=nMUX1; // ADMUX restoring
ADCSRB=nMUX2;
ENABLE_TEMPERATURE_INTERRUPT();
// end of sequence for ...
if((oFsensorPCB==ClFsensorPCB::_Rev03b)&&((nADC*OVERSAMPLENR)>((int)IRsensor_Hopen_TRESHOLD)))
{
fsensor_disable();
fsensor_not_responding = true;
printf_P(PSTR("IR sensor not responding (%d)!\n"),1);
if((ClFsensorActionNA)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_ACTION_NA)==ClFsensorActionNA::_Pause)
if(oFsensorActionNA==ClFsensorActionNA::_Pause)
lcd_pause_print();
}
else
{
#endif //IR_SENSOR_ANALOG
fsensor_checkpoint_print();
fsensor_enque_M600();
#if IR_SENSOR_ANALOG
}
}
}
}
else
{ // IR_SENSOR_PIN ~ L
bIRsensorStateFlag=false;
#endif //IR_SENSOR_ANALOG
}
}
#endif //PAT9125
}
#if IR_SENSOR_ANALOG
bool fsensor_IR_check()
{
uint16_t volt_IR_int;
bool bCheckResult;
volt_IR_int=current_voltage_raw_IR;
bCheckResult=(volt_IR_int<((int)IRsensor_Lmax_TRESHOLD))||(volt_IR_int>((int)IRsensor_Hmin_TRESHOLD));
bCheckResult=bCheckResult&&(!((oFsensorPCB==ClFsensorPCB::_Rev03b)&&(volt_IR_int>((int)IRsensor_Hopen_TRESHOLD))));
return(bCheckResult);
}
#endif //IR_SENSOR_ANALOG

View File

@ -3,6 +3,7 @@
#define FSENSOR_H
#include <inttypes.h>
#include "config.h"
//! minimum meassured chunk length in steps
@ -20,6 +21,8 @@ extern bool fsensor_oq_meassure_enabled;
extern void fsensor_stop_and_save_print(void);
//! restore print - restore position and heatup to original temperature
extern void fsensor_restore_print_and_continue(void);
//! split the current gcode stream to insert new instructions
extern void fsensor_checkpoint_print(void);
//! @}
//! initialize
@ -27,8 +30,8 @@ extern void fsensor_init(void);
//! @name enable/disable
//! @{
extern bool fsensor_enable(void);
extern void fsensor_disable(void);
extern bool fsensor_enable(bool bUpdateEEPROM=true);
extern void fsensor_disable(bool bUpdateEEPROM=true);
//! @}
//autoload feature enabled
@ -65,4 +68,28 @@ extern void fsensor_st_block_begin(block_t* bl);
extern void fsensor_st_block_chunk(block_t* bl, int cnt);
//! @}
#if IR_SENSOR_ANALOG
#define IR_SENSOR_STEADY 10 // [ms]
enum class ClFsensorPCB:uint_least8_t
{
_Old=0,
_Rev03b=1,
_Undef=EEPROM_EMPTY_VALUE
};
enum class ClFsensorActionNA:uint_least8_t
{
_Continue=0,
_Pause=1,
_Undef=EEPROM_EMPTY_VALUE
};
extern ClFsensorPCB oFsensorPCB;
extern ClFsensorActionNA oFsensorActionNA;
extern bool fsensor_IR_check();
#endif //IR_SENSOR_ANALOG
#endif //FSENSOR_H

View File

@ -17,10 +17,10 @@ uint8_t lang_selected = 0;
#if (LANG_MODE == 0) //primary language only
uint8_t lang_select(uint8_t lang) { return 0; }
uint8_t lang_select(__attribute__((unused)) uint8_t lang) { return 0; }
uint8_t lang_get_count() { return 1; }
uint16_t lang_get_code(uint8_t lang) { return LANG_CODE_EN; }
const char* lang_get_name_by_code(uint16_t code) { return _n("English"); }
uint16_t lang_get_code(__attribute__((unused)) uint8_t lang) { return LANG_CODE_EN; }
const char* lang_get_name_by_code(__attribute__((unused)) uint16_t code) { return _n("English"); }
void lang_reset(void) { }
uint8_t lang_is_selected(void) { return 1; }

View File

@ -184,6 +184,22 @@ static void menu_draw_item_puts_P(char type_char, const char* str)
lcd_printf_P(PSTR("%c%-18.18S%c"), menu_selection_mark(), str, type_char);
}
static void menu_draw_toggle_puts_P(const char* str, const char* toggle, const uint8_t settings)
{
//settings:
//xxxxxcba
//a = selection mark. If it's set(1), then '>' will be used as the first character on the line. Else leave blank
//b = toggle string is from progmem
//c = do not set cursor at all. Must be handled externally.
char lineStr[LCD_WIDTH + 1];
const char eol = (toggle == NULL)?LCD_STR_ARROW_RIGHT[0]:' ';
if (toggle == NULL) toggle = _T(MSG_NA);
sprintf_P(lineStr, PSTR("%c%-18.18S"), (settings & 0x01)?'>':' ', str);
sprintf_P(lineStr + LCD_WIDTH - ((settings & 0x02)?strlen_P(toggle):strlen(toggle)) - 3, (settings & 0x02)?PSTR("[%S]%c"):PSTR("[%s]%c"), toggle, eol);
if (!(settings & 0x04)) lcd_set_cursor(0, menu_row);
fputs(lineStr, lcdout);
}
//! @brief Format sheet name
//!
//! @param[in] sheet_E Sheet in EEPROM
@ -375,6 +391,33 @@ uint8_t menu_item_function_P(const char* str, char number, void (*func)(uint8_t)
return 0;
}
uint8_t menu_item_toggle_P(const char* str, const char* toggle, menu_func_t func, const uint8_t settings)
{
if (menu_item == menu_line)
{
if (lcd_draw_update) menu_draw_toggle_puts_P(str, toggle, settings | (menu_selection_mark()=='>'));
if (menu_clicked && (lcd_encoder == menu_item))
{
if (toggle == NULL) // print N/A warning message
{
menu_submenu(func);
return menu_item_ret();
}
else // do the actual toggling
{
menu_clicked = false;
lcd_consume_click();
lcd_update_enabled = 0;
if (func) func();
lcd_update_enabled = 1;
return menu_item_ret();
}
}
}
menu_item++;
return 0;
}
uint8_t menu_item_gcode_P(const char* str, const char* str_gcode)
{
if (menu_item == menu_line)
@ -390,17 +433,12 @@ uint8_t menu_item_gcode_P(const char* str, const char* str_gcode)
return 0;
}
const char menu_20x_space[] PROGMEM = " ";
const char menu_fmt_int3[] PROGMEM = "%c%.15S:%s%3d";
const char menu_fmt_float31[] PROGMEM = "%-12.12S%+8.1f";
const char menu_fmt_float13[] PROGMEM = "%c%-13.13S%+5.3f";
const char menu_fmt_float13off[] PROGMEM = "%c%-13.13S%6.6S";
template<typename T>
static void menu_draw_P(char chr, const char* str, int16_t val);
@ -409,8 +447,8 @@ void menu_draw_P<int16_t*>(char chr, const char* str, int16_t val)
{
int text_len = strlen_P(str);
if (text_len > 15) text_len = 15;
char spaces[21];
strcpy_P(spaces, menu_20x_space);
char spaces[LCD_WIDTH + 1] = {0};
memset(spaces,' ', LCD_WIDTH);
if (val <= -100) spaces[15 - text_len - 1] = 0;
else spaces[15 - text_len] = 0;
lcd_printf_P(menu_fmt_int3, chr, str, spaces, val);
@ -423,7 +461,7 @@ void menu_draw_P<uint8_t*>(char chr, const char* str, int16_t val)
float factor = 1.0f + static_cast<float>(val) / 1000.0f;
if (val <= _md->minEditValue)
{
lcd_printf_P(menu_fmt_float13off, chr, str, _i(" [off]"));
menu_draw_toggle_puts_P(str, _T(MSG_OFF), 0x04 | 0x02 | (chr=='>'));
}
else
{

View File

@ -118,6 +118,10 @@ extern uint8_t menu_item_function_P(const char* str, menu_func_t func);
#define MENU_ITEM_FUNCTION_NR_P(str, number, func, fn_par) do { if (menu_item_function_P(str, number, func, fn_par)) return; } while (0)
extern uint8_t menu_item_function_P(const char* str, char number, void (*func)(uint8_t), uint8_t fn_par);
#define MENU_ITEM_TOGGLE_P(str, toggle, func) do { if (menu_item_toggle_P(str, toggle, func, 0x02)) return; } while (0)
#define MENU_ITEM_TOGGLE(str, toggle, func) do { if (menu_item_toggle_P(str, toggle, func, 0x00)) return; } while (0)
extern uint8_t menu_item_toggle_P(const char* str, const char* toggle, menu_func_t func, const uint8_t settings);
#define MENU_ITEM_GCODE_P(str, str_gcode) do { if (menu_item_gcode_P(str, str_gcode)) return; } while (0)
extern uint8_t menu_item_gcode_P(const char* str, const char* str_gcode);

View File

@ -9,7 +9,6 @@
//internationalized messages
const char MSG_AUTO_HOME[] PROGMEM_I1 = ISTR("Auto home"); ////
const char MSG_AUTO_MODE_ON[] PROGMEM_I1 = ISTR("Mode [auto power]"); ////
const char MSG_BABYSTEP_Z[] PROGMEM_I1 = ISTR("Live adjust Z"); //// c=18
const char MSG_BABYSTEP_Z_NOT_SET[] PROGMEM_I1 = ISTR("Distance between tip of the nozzle and the bed surface has not been set yet. Please follow the manual, chapter First steps, section First layer calibration."); ////c=20 r=12
const char MSG_BED[] PROGMEM_I1 = ISTR("Bed"); ////
@ -22,9 +21,7 @@ const char MSG_CARD_MENU[] PROGMEM_I1 = ISTR("Print from SD"); ////
const char MSG_CONFIRM_NOZZLE_CLEAN[] PROGMEM_I1 = ISTR("Please clean the nozzle for calibration. Click when done."); ////c=20 r=8
const char MSG_COOLDOWN[] PROGMEM_I1 = ISTR("Cooldown"); ////
const char MSG_CRASH_DETECTED[] PROGMEM_I1 = ISTR("Crash detected."); ////c=20 r=1
const char MSG_CRASHDETECT_NA[] PROGMEM_I1 = ISTR("Crash det. [N/A]"); ////
const char MSG_CRASHDETECT_OFF[] PROGMEM_I1 = ISTR("Crash det. [off]"); ////
const char MSG_CRASHDETECT_ON[] PROGMEM_I1 = ISTR("Crash det. [on]"); ////
const char MSG_CRASHDETECT[] PROGMEM_I1 = ISTR("Crash det."); ////
const char MSG_ERROR[] PROGMEM_I1 = ISTR("ERROR:"); ////
const char MSG_EXTRUDER[] PROGMEM_I1 = ISTR("Extruder"); ////c=17 r=1
const char MSG_FILAMENT[] PROGMEM_I1 = ISTR("Filament"); ////c=17 r=1
@ -40,9 +37,8 @@ const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE2[] PROGMEM_I1 = ISTR(" of 4"); ////
const char MSG_FINISHING_MOVEMENTS[] PROGMEM_I1 = ISTR("Finishing movements"); ////c=20 r=1
const char MSG_FOLLOW_CALIBRATION_FLOW[] PROGMEM_I1 = ISTR("Printer has not been calibrated yet. Please follow the manual, chapter First steps, section Calibration flow."); ////c=20 r=8
const char MSG_FOLLOW_Z_CALIBRATION_FLOW[] PROGMEM_I1 = ISTR("There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow."); ////c=20 r=8
const char MSG_FSENS_AUTOLOAD_NA[] PROGMEM_I1 = ISTR("F. autoload [N/A]"); ////c=17 r=1
const char MSG_FSENSOR_OFF[] PROGMEM_I1 = ISTR("Fil. sensor [off]"); ////
const char MSG_FSENSOR_ON[] PROGMEM_I1 = ISTR("Fil. sensor [on]"); ////
const char MSG_FSENSOR_AUTOLOAD[] PROGMEM_I1 = ISTR("F. autoload"); ////c=17 r=1
const char MSG_FSENSOR[] PROGMEM_I1 = ISTR("Fil. sensor"); ////
const char MSG_HEATING[] PROGMEM_I1 = ISTR("Heating"); ////
const char MSG_HEATING_COMPLETE[] PROGMEM_I1 = ISTR("Heating done."); ////c=20
const char MSG_HOMEYZ[] PROGMEM_I1 = ISTR("Calibrate Z"); ////
@ -85,14 +81,16 @@ const char MSG_SELFTEST_FILAMENT_SENSOR[] PROGMEM_I1 = ISTR("Filament sensor");
const char MSG_SELFTEST_WIRINGERROR[] PROGMEM_I1 = ISTR("Wiring error"); ////
const char MSG_SETTINGS[] PROGMEM_I1 = ISTR("Settings"); ////
const char MSG_HW_SETUP[] PROGMEM_I1 = ISTR("HW Setup"); ////
const char MSG_SILENT_MODE_OFF[] PROGMEM_I1 = ISTR("Mode [high power]"); ////
const char MSG_SILENT_MODE_ON[] PROGMEM_I1 = ISTR("Mode [silent]"); ////
const char MSG_STEALTH_MODE_OFF[] PROGMEM_I1 = ISTR("Mode [Normal]"); ////
const char MSG_STEALTH_MODE_ON[] PROGMEM_I1 = ISTR("Mode [Stealth]"); ////
const char MSG_MODE[] PROGMEM_I1 = ISTR("Mode"); ////
const char MSG_HIGH_POWER[] PROGMEM_I1 = ISTR("High power"); ////
const char MSG_AUTO_POWER[] PROGMEM_I1 = ISTR("Auto power"); ////
const char MSG_SILENT[] PROGMEM_I1 = ISTR("Silent"); ////
const char MSG_NORMAL[] PROGMEM_I1 = ISTR("Normal"); ////
const char MSG_STEALTH[] PROGMEM_I1 = ISTR("Stealth"); ////
const char MSG_STEEL_SHEET_CHECK[] PROGMEM_I1 = ISTR("Is steel sheet on heatbed?"); ////c=20 r=2
const char MSG_STOP_PRINT[] PROGMEM_I1 = ISTR("Stop print"); ////
const char MSG_STOPPED[] PROGMEM_I1 = ISTR("STOPPED. "); ////
const char MSG_TEMP_CALIBRATION[] PROGMEM_I1 = ISTR("Temp. cal. "); ////c=20 r=1
const char MSG_TEMP_CALIBRATION[] PROGMEM_I1 = ISTR("Temp. cal."); ////c=12 r=1
const char MSG_TEMP_CALIBRATION_DONE[] PROGMEM_I1 = ISTR("Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal."); ////c=20 r=12
const char MSG_UNLOAD_FILAMENT[] PROGMEM_I1 = ISTR("Unload filament"); ////c=17
const char MSG_UNLOADING_FILAMENT[] PROGMEM_I1 = ISTR("Unloading filament"); ////c=20 r=1
@ -104,13 +102,48 @@ const char MSG_WIZARD_QUIT[] PROGMEM_I1 = ISTR("You can always resume the Wizard
const char MSG_YES[] PROGMEM_I1 = ISTR("Yes"); ////
const char MSG_V2_CALIBRATION[] PROGMEM_I1 = ISTR("First layer cal."); ////c=17 r=1
const char WELCOME_MSG[] PROGMEM_I1 = ISTR(CUSTOM_MENDEL_NAME " OK."); ////c=20
const char MSG_OFF[] PROGMEM_I1 = ISTR("Off"); ////
const char MSG_ON[] PROGMEM_I1 = ISTR("On"); ////
const char MSG_NA[] PROGMEM_I1 = ISTR("N/A"); ////
const char MSG_AUTO_DEPLETE[] PROGMEM_I1 = ISTR("SpoolJoin"); ////
const char MSG_CUTTER[] PROGMEM_I1 = ISTR("Cutter"); ////
const char MSG_NONE[] PROGMEM_I1 = ISTR("None"); ////
const char MSG_WARN[] PROGMEM_I1 = ISTR("Warn"); ////
const char MSG_STRICT[] PROGMEM_I1 = ISTR("Strict"); ////
const char MSG_MODEL[] PROGMEM_I1 = ISTR("Model"); ////
const char MSG_FIRMWARE[] PROGMEM_I1 = ISTR("Firmware"); ////
const char MSG_GCODE[] PROGMEM_I1 = ISTR("Gcode"); ////
const char MSG_NOZZLE_DIAMETER[] PROGMEM_I1 = ISTR("Nozzle d."); ////
const char MSG_MMU_MODE[] PROGMEM_I1 = ISTR("MMU Mode"); ////
const char MSG_SD_CARD[] PROGMEM_I1 = ISTR("SD card"); ////
const char MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY[] PROGMEM_I1 = ISTR("FlashAir"); ////
const char MSG_SORT[] PROGMEM_I1 = ISTR("Sort"); ////
const char MSG_SORT_TIME[] PROGMEM_I1 = ISTR("Time"); ////
const char MSG_SORT_ALPHA[] PROGMEM_I1 = ISTR("Alphabet"); ////
const char MSG_RPI_PORT[] PROGMEM_I1 = ISTR("RPi port"); ////
const char MSG_SOUND[] PROGMEM_I1 = ISTR("Sound"); ////
const char MSG_SOUND_LOUD[] PROGMEM_I1 = ISTR("Loud"); ////
const char MSG_SOUND_ONCE[] PROGMEM_I1 = ISTR("Once"); ////
const char MSG_SOUND_BLIND[] PROGMEM_I1 = ISTR("Assist"); ////
const char MSG_MESH[] PROGMEM_I1 = ISTR("Mesh"); ////
const char MSG_Z_PROBE_NR[] PROGMEM_I1 = ISTR("Z-probe nr."); ////
const char MSG_MAGNETS_COMP[] PROGMEM_I1 = ISTR("Magnets comp."); ////
const char MSG_FS_ACTION[] PROGMEM_I1 = ISTR("FS Action"); ////
const char MSG_FS_CONTINUE[] PROGMEM_I1 = ISTR("Cont."); ////
const char MSG_FS_PAUSE[] PROGMEM_I1 = ISTR("Pause"); ////
const char MSG_BRIGHTNESS[] PROGMEM_I1 = ISTR("Brightness"); ////
const char MSG_BL_HIGH[] PROGMEM_I1 = ISTR("Level Bright"); ////
const char MSG_BL_LOW[] PROGMEM_I1 = ISTR("Level Dimmed"); ////
const char MSG_TIMEOUT[] PROGMEM_I1 = ISTR("Timeout"); ////
const char MSG_BRIGHT[] PROGMEM_I1 = ISTR("Bright"); ////
const char MSG_DIM[] PROGMEM_I1 = ISTR("Dim"); ////
const char MSG_AUTO[] PROGMEM_I1 = ISTR("Auto"); ////
//not internationalized messages
const char MSG_SD_WORKDIR_FAIL[] PROGMEM_N1 = "workDir open failed"; ////
const char MSG_BROWNOUT_RESET[] PROGMEM_N1 = " Brown out Reset"; ////
const char MSG_EXTERNAL_RESET[] PROGMEM_N1 = " External Reset"; ////
const char MSG_FILE_SAVED[] PROGMEM_N1 = "Done saving file."; ////
const char MSG_OFF[] PROGMEM_N1 = "Off"; ////
const char MSG_ON[] PROGMEM_N1 = "On "; ////
const char MSG_POSITION_UNKNOWN[] PROGMEM_N1 = "Home X/Y before Z"; ////
const char MSG_SOFTWARE_RESET[] PROGMEM_N1 = " Software Reset"; ////
const char MSG_UNKNOWN_COMMAND[] PROGMEM_N1 = "Unknown command: \""; ////
@ -134,3 +167,4 @@ const char MSG_OCTOPRINT_RESUMED[] PROGMEM_N1 = "// action:resumed"; ////
const char MSG_OCTOPRINT_CANCEL[] PROGMEM_N1 = "// action:cancel"; ////
const char MSG_FANCHECK_EXTRUDER[] PROGMEM_N1 = "Err: EXTR. FAN ERROR"; ////c=20
const char MSG_FANCHECK_PRINT[] PROGMEM_N1 = "Err: PRINT FAN ERROR"; ////c=20
const char MSG_M112_KILL[] PROGMEM_N1 = "M112 called. Emergency Stop."; ////c=20

View File

@ -10,7 +10,6 @@ extern "C" {
// LCD Menu Messages
//internationalized messages
extern const char MSG_AUTO_HOME[];
extern const char MSG_AUTO_MODE_ON[];
extern const char MSG_BABYSTEP_Z[];
extern const char MSG_BABYSTEP_Z_NOT_SET[];
extern const char MSG_BED[];
@ -23,9 +22,7 @@ extern const char MSG_CARD_MENU[];
extern const char MSG_CONFIRM_NOZZLE_CLEAN[];
extern const char MSG_COOLDOWN[];
extern const char MSG_CRASH_DETECTED[];
extern const char MSG_CRASHDETECT_NA[];
extern const char MSG_CRASHDETECT_OFF[];
extern const char MSG_CRASHDETECT_ON[];
extern const char MSG_CRASHDETECT[];
extern const char MSG_ERROR[];
extern const char MSG_EXTRUDER[];
extern const char MSG_FILAMENT[];
@ -41,9 +38,8 @@ extern const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE2[];
extern const char MSG_FINISHING_MOVEMENTS[];
extern const char MSG_FOLLOW_CALIBRATION_FLOW[];
extern const char MSG_FOLLOW_Z_CALIBRATION_FLOW[];
extern const char MSG_FSENS_AUTOLOAD_NA[];
extern const char MSG_FSENSOR_OFF[];
extern const char MSG_FSENSOR_ON[];
extern const char MSG_FSENSOR_AUTOLOAD[];
extern const char MSG_FSENSOR[];
extern const char MSG_HEATING[];
extern const char MSG_HEATING_COMPLETE[];
extern const char MSG_HOMEYZ[];
@ -85,10 +81,12 @@ extern const char MSG_SELFTEST_FILAMENT_SENSOR[];
extern const char MSG_SELFTEST_WIRINGERROR[];
extern const char MSG_SETTINGS[];
extern const char MSG_HW_SETUP[];
extern const char MSG_SILENT_MODE_OFF[];
extern const char MSG_SILENT_MODE_ON[];
extern const char MSG_STEALTH_MODE_OFF[];
extern const char MSG_STEALTH_MODE_ON[];
extern const char MSG_MODE[];
extern const char MSG_HIGH_POWER[];
extern const char MSG_AUTO_POWER[];
extern const char MSG_SILENT[];
extern const char MSG_NORMAL[];
extern const char MSG_STEALTH[];
extern const char MSG_STEEL_SHEET_CHECK[];
extern const char MSG_STOP_PRINT[];
extern const char MSG_STOPPED[];
@ -104,12 +102,47 @@ extern const char MSG_WIZARD_QUIT[];
extern const char MSG_YES[];
extern const char MSG_V2_CALIBRATION[];
extern const char WELCOME_MSG[];
extern const char MSG_OFF[];
extern const char MSG_ON[];
extern const char MSG_NA[];
extern const char MSG_AUTO_DEPLETE[];
extern const char MSG_CUTTER[];
extern const char MSG_NONE[];
extern const char MSG_WARN[];
extern const char MSG_STRICT[];
extern const char MSG_MODEL[];
extern const char MSG_FIRMWARE[];
extern const char MSG_GCODE[];
extern const char MSG_NOZZLE_DIAMETER[];
extern const char MSG_MMU_MODE[];
extern const char MSG_SD_CARD[];
extern const char MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY[];
extern const char MSG_SORT[];
extern const char MSG_SORT_TIME[];
extern const char MSG_SORT_ALPHA[];
extern const char MSG_RPI_PORT[];
extern const char MSG_SOUND[];
extern const char MSG_SOUND_LOUD[];
extern const char MSG_SOUND_ONCE[];
extern const char MSG_SOUND_BLIND[];
extern const char MSG_MESH[];
extern const char MSG_Z_PROBE_NR[];
extern const char MSG_MAGNETS_COMP[];
extern const char MSG_FS_ACTION[];
extern const char MSG_FS_CONTINUE[];
extern const char MSG_FS_PAUSE[];
extern const char MSG_BRIGHTNESS[];
extern const char MSG_BL_HIGH[];
extern const char MSG_BL_LOW[];
extern const char MSG_TIMEOUT[];
extern const char MSG_BRIGHT[];
extern const char MSG_DIM[];
extern const char MSG_AUTO[];
//not internationalized messages
extern const char MSG_BROWNOUT_RESET[];
extern const char MSG_EXTERNAL_RESET[];
extern const char MSG_FILE_SAVED[];
extern const char MSG_OFF[];
extern const char MSG_ON[];
extern const char MSG_POSITION_UNKNOWN[];
extern const char MSG_SOFTWARE_RESET[];
extern const char MSG_UNKNOWN_COMMAND[];
@ -135,6 +168,7 @@ extern const char MSG_OCTOPRINT_RESUMED[];
extern const char MSG_OCTOPRINT_CANCEL[];
extern const char MSG_FANCHECK_EXTRUDER[];
extern const char MSG_FANCHECK_PRINT[];
extern const char MSG_M112_KILL[];
#if defined(__cplusplus)
}

View File

@ -70,6 +70,7 @@ uint8_t mmu_extruder = MMU_FILAMENT_UNKNOWN;
uint8_t tmp_extruder = MMU_FILAMENT_UNKNOWN;
int8_t mmu_finda = -1;
uint32_t mmu_last_finda_response = 0;
int16_t mmu_version = -1;
@ -264,6 +265,7 @@ void mmu_loop(void)
if (mmu_rx_ok() > 0)
{
fscanf_P(uart2io, PSTR("%hhu"), &mmu_finda); //scan finda from buffer
mmu_last_finda_response = _millis();
FDEBUG_PRINTF_P(PSTR("MMU => '%dok'\n"), mmu_finda);
puts_P(PSTR("MMU - ENABLED"));
mmu_enabled = true;
@ -376,11 +378,11 @@ void mmu_loop(void)
if (mmu_rx_ok() > 0)
{
fscanf_P(uart2io, PSTR("%hhu"), &mmu_finda); //scan finda from buffer
mmu_last_finda_response = _millis();
FDEBUG_PRINTF_P(PSTR("MMU => '%dok'\n"), mmu_finda);
//printf_P(PSTR("Eact: %d\n"), int(e_active()));
if (!mmu_finda && CHECK_FSENSOR && fsensor_enabled) {
fsensor_stop_and_save_print();
enquecommand_front_P(PSTR("PRUSA fsensor_recover")); //then recover
fsensor_checkpoint_print();
ad_markDepleted(mmu_extruder);
if (lcd_autoDepleteEnabled() && !ad_allDepleted())
{
@ -1355,7 +1357,7 @@ void lcd_mmu_load_to_nozzle(uint8_t filament_nr)
manage_response(true, true, MMU_TCODE_MOVE);
mmu_continue_loading(false);
mmu_extruder = tmp_extruder; //filament change is finished
marlin_rise_z();
raise_z_above(MIN_Z_FOR_LOAD, false);
mmu_load_to_nozzle();
load_filament_final_feed();
st_synchronize();
@ -1556,34 +1558,27 @@ void mmu_continue_loading(bool blocking)
increment_load_fail();
// no break
case Ls::Retry:
#ifdef MMU_HAS_CUTTER
if (1 == eeprom_read_byte((uint8_t*)EEPROM_MMU_CUTTER_ENABLED))
++retry; // overflow not handled, as it is not dangerous.
if (retry >= max_retry)
{
mmu_command(MmuCmd::K0 + tmp_extruder);
manage_response(true, true, MMU_UNLOAD_MOVE);
}
state = Ls::Unload;
#ifdef MMU_HAS_CUTTER
if (1 == eeprom_read_byte((uint8_t*)EEPROM_MMU_CUTTER_ENABLED))
{
mmu_command(MmuCmd::K0 + tmp_extruder);
manage_response(true, true, MMU_UNLOAD_MOVE);
}
#endif //MMU_HAS_CUTTER
}
mmu_command(MmuCmd::T0 + tmp_extruder);
manage_response(true, true, MMU_TCODE_MOVE);
success = load_more();
if (success) success = can_load();
++retry; // overflow not handled, as it is not dangerous.
if (retry >= max_retry) state = Ls::Unload;
break;
case Ls::Unload:
stop_and_save_print_to_ram(0, 0);
//lift z
current_position[Z_AXIS] += Z_PAUSE_LIFT;
if (current_position[Z_AXIS] > Z_MAX_POS) current_position[Z_AXIS] = Z_MAX_POS;
plan_buffer_line_curposXYZE(15, active_extruder);
st_synchronize();
//Move XY to side
current_position[X_AXIS] = X_PAUSE_POS;
current_position[Y_AXIS] = Y_PAUSE_POS;
plan_buffer_line_curposXYZE(50, active_extruder);
st_synchronize();
long_pause();
mmu_command(MmuCmd::U0);
manage_response(false, true, MMU_UNLOAD_MOVE);

View File

@ -14,6 +14,7 @@ extern uint8_t mmu_extruder;
extern uint8_t tmp_extruder;
extern int8_t mmu_finda;
extern uint32_t mmu_last_finda_response;
extern bool ir_sensor_detected;
extern int16_t mmu_version;

View File

@ -258,11 +258,11 @@ void optiboot_w25x20cl_enter()
uint32_t addr = (((uint32_t)rampz) << 16) | address;
// During a single bootloader run, only erase a 64kB block once.
// An 8bit bitmask 'pages_erased' covers 512kB of FLASH memory.
if (address == 0 && (pages_erased & (1 << addr)) == 0) {
if ((address == 0) && (pages_erased & (1 << (addr >> 16))) == 0) {
w25x20cl_wait_busy();
w25x20cl_enable_wr();
w25x20cl_block64_erase(addr);
pages_erased |= (1 << addr);
pages_erased |= (1 << (addr >> 16));
}
w25x20cl_wait_busy();
w25x20cl_enable_wr();

View File

@ -71,12 +71,13 @@
#define HEATER_2_PIN -1
#define TEMP_2_PIN -1
#define TEMP_AMBIENT_PIN 5 //A5
#define TEMP_AMBIENT_PIN 6 //A6
#define TEMP_PINDA_PIN 3 //A3
#define VOLT_PWR_PIN 4 //A4
#define VOLT_BED_PIN 9 //A9
#define VOLT_IR_PIN 8 //A8
#define E0_TMC2130_CS 66
@ -99,7 +100,7 @@
//#define KILL_PIN 32
//#define LCD_BL_PIN 5 //backlight control pin
#define LCD_BL_PIN 5 //backlight control pin
#define BEEPER 84 // Beeper on AUX-4
#define LCD_PINS_RS 82
#define LCD_PINS_ENABLE 61 // !!! changed from 18 (EINY03)

View File

@ -659,15 +659,15 @@ float junction_deviation = 0.1;
// Add a new linear movement to the buffer. steps_x, _y and _z is the absolute position in
// mm. Microseconds specify how many microseconds the move should take to perform. To aid acceleration
// calculation the caller must also provide the physical length of the line in millimeters.
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder)
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder, const float* gcode_target)
{
// Calculate the buffer head after we push this byte
int next_buffer_head = next_block_index(block_buffer_head);
// If the buffer is full: good! That means we are well ahead of the robot.
// Rest here until there is room in the buffer.
waiting_inside_plan_buffer_line_print_aborted = false;
if (block_buffer_tail == next_buffer_head) {
waiting_inside_plan_buffer_line_print_aborted = false;
do {
manage_heater();
// Vojtech: Don't disable motors inside the planner!
@ -687,6 +687,29 @@ void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate
planner_update_queue_min_counter();
#endif /* PLANNER_DIAGNOSTICS */
// Prepare to set up new block
block_t *block = &block_buffer[block_buffer_head];
// Mark block as not busy (Not executed by the stepper interrupt, could be still tinkered with.)
block->busy = false;
// Set sdlen for calculating sd position
block->sdlen = 0;
// Save original destination of the move
if (gcode_target)
memcpy(block->gcode_target, gcode_target, sizeof(block_t::gcode_target));
else
{
block->gcode_target[X_AXIS] = x;
block->gcode_target[Y_AXIS] = y;
block->gcode_target[Z_AXIS] = z;
block->gcode_target[E_AXIS] = e;
}
// Save the global feedrate at scheduling time
block->gcode_feedrate = feedrate;
#ifdef ENABLE_AUTO_BED_LEVELING
apply_rotation_xyz(plan_bed_level_matrix, x, y, z);
#endif // ENABLE_AUTO_BED_LEVELING
@ -786,15 +809,6 @@ void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate
}
#endif
// Prepare to set up new block
block_t *block = &block_buffer[block_buffer_head];
// Set sdlen for calculating sd position
block->sdlen = 0;
// Mark block as not busy (Not executed by the stepper interrupt, could be still tinkered with.)
block->busy = false;
// Number of steps for each axis
#ifndef COREXY
// default non-h-bot planning

View File

@ -116,7 +116,10 @@ typedef struct {
unsigned long abs_adv_steps_multiplier8; // Factorised by 2^8 to avoid float
#endif
uint16_t sdlen;
// Save/recovery state data
float gcode_target[NUM_AXIS]; // Target (abs mm) of the original Gcode instruction
uint16_t gcode_feedrate; // Default and/or move feedrate
uint16_t sdlen; // Length of the Gcode instruction
} block_t;
#ifdef LIN_ADVANCE
@ -147,7 +150,7 @@ vector_3 plan_get_position();
/// The performance penalty is negligible, since these planned lines are usually maintenance moves with the extruder.
void plan_buffer_line_curposXYZE(float feed_rate, uint8_t extruder);
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder);
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder, const float* gcode_target = NULL);
//void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder);
#endif // ENABLE_AUTO_BED_LEVELING
@ -238,6 +241,7 @@ FORCE_INLINE bool planner_queue_full() {
// wait for the steppers to stop,
// update planner's current position and the current_position of the front end.
extern void planner_abort_hard();
extern bool waiting_inside_plan_buffer_line_print_aborted;
#ifdef PREVENT_DANGEROUS_EXTRUDE
void set_extrude_min_temp(float temp);

View File

@ -5,6 +5,7 @@
//#include <inttypes.h>
//#include <avr/eeprom.h>
//#include "eeprom.h"
#include "backlight.h"
//eSOUND_MODE eSoundMode=e_SOUND_MODE_LOUD;
@ -63,6 +64,7 @@ Sound_SaveMode();
//if critical is true then silend and once mode is ignored
void Sound_MakeCustom(uint16_t ms,uint16_t tone_,bool critical){
backlight_wake();
if (!critical){
if (eSoundMode != e_SOUND_MODE_SILENT){
if(!tone_){
@ -135,6 +137,7 @@ switch(eSoundMode)
static void Sound_DoSound_Blind_Alert(void)
{
backlight_wake(1);
uint8_t nI;
for(nI=0; nI<20; nI++)
@ -148,6 +151,7 @@ static void Sound_DoSound_Blind_Alert(void)
static void Sound_DoSound_Encoder_Move(void)
{
backlight_wake();
uint8_t nI;
for(nI=0;nI<5;nI++)
@ -161,6 +165,7 @@ uint8_t nI;
static void Sound_DoSound_Echo(void)
{
backlight_wake();
uint8_t nI;
for(nI=0;nI<10;nI++)
@ -174,6 +179,7 @@ for(nI=0;nI<10;nI++)
static void Sound_DoSound_Prompt(void)
{
backlight_wake(2);
WRITE(BEEPER,HIGH);
_delay_ms(500);
WRITE(BEEPER,LOW);
@ -181,6 +187,7 @@ WRITE(BEEPER,LOW);
static void Sound_DoSound_Alert(bool bOnce)
{
backlight_wake();
uint8_t nI,nMax;
nMax=bOnce?1:3;

View File

@ -3,12 +3,6 @@
#define SOUND_H
#define MSG_SOUND_MODE_LOUD "Sound [loud]"
#define MSG_SOUND_MODE_ONCE "Sound [once]"
#define MSG_SOUND_MODE_SILENT "Sound [silent]"
#define MSG_SOUND_MODE_BLIND "Sound [assist]"
#define e_SOUND_MODE_NULL 0xFF
typedef enum
{e_SOUND_MODE_LOUD,e_SOUND_MODE_ONCE,e_SOUND_MODE_SILENT,e_SOUND_MODE_BLIND} eSOUND_MODE;

View File

@ -44,6 +44,8 @@
#include "Timer.h"
#include "Configuration_prusa.h"
#include "config.h"
//===========================================================================
//=============================public variables============================
//===========================================================================
@ -71,6 +73,10 @@ int current_voltage_raw_pwr = 0;
int current_voltage_raw_bed = 0;
#endif
#if IR_SENSOR_ANALOG
int current_voltage_raw_IR = 0;
#endif //IR_SENSOR_ANALOG
int current_temperature_bed_raw = 0;
float current_temperature_bed = 0.0;
@ -873,7 +879,7 @@ static float analog2temp(int raw, uint8_t e) {
SERIAL_ERROR_START;
SERIAL_ERROR((int)e);
SERIAL_ERRORLNPGM(" - Invalid extruder number !");
kill(PSTR(""), 6);
kill(NULL, 6);
return 0.0;
}
#ifdef HEATER_0_USES_MAX6675
@ -1576,11 +1582,14 @@ void adc_ready(void) //callback from adc when sampling finished
current_voltage_raw_pwr = adc_values[ADC_PIN_IDX(VOLT_PWR_PIN)];
#endif
#ifdef AMBIENT_THERMISTOR
current_temperature_raw_ambient = adc_values[ADC_PIN_IDX(TEMP_AMBIENT_PIN)];
current_temperature_raw_ambient = adc_values[ADC_PIN_IDX(TEMP_AMBIENT_PIN)]; // 5->6
#endif //AMBIENT_THERMISTOR
#ifdef VOLT_BED_PIN
current_voltage_raw_bed = adc_values[ADC_PIN_IDX(VOLT_BED_PIN)]; // 6->9
#endif
#if IR_SENSOR_ANALOG
current_voltage_raw_IR = adc_values[ADC_PIN_IDX(VOLT_IR_PIN)];
#endif //IR_SENSOR_ANALOG
temp_meas_ready = true;
}

View File

@ -27,6 +27,8 @@
#include "stepper.h"
#endif
#include "config.h"
#ifdef SYSTEM_TIMER_2
@ -74,6 +76,9 @@ extern int current_voltage_raw_pwr;
extern int current_voltage_raw_bed;
#endif
#if IR_SENSOR_ANALOG
extern int current_voltage_raw_IR;
#endif //IR_SENSOR_ANALOG
#if defined(CONTROLLERFAN_PIN) && CONTROLLERFAN_PIN > -1
extern unsigned char soft_pwm_bed;

View File

@ -24,7 +24,7 @@ uint8_t tmc2130_current_h[4] = TMC2130_CURRENTS_H;
uint8_t tmc2130_current_r[4] = TMC2130_CURRENTS_R;
//running currents for homing
uint8_t tmc2130_current_r_home[4] = {8, 10, 20, 18};
uint8_t tmc2130_current_r_home[4] = TMC2130_CURRENTS_R_HOME;
//pwm_ampl
@ -40,7 +40,7 @@ uint8_t tmc2130_mres[4] = {0, 0, 0, 0}; //will be filed at begin of init
uint8_t tmc2130_sg_thr[4] = {TMC2130_SG_THRS_X, TMC2130_SG_THRS_Y, TMC2130_SG_THRS_Z, TMC2130_SG_THRS_E};
uint8_t tmc2130_sg_thr_home[4] = {3, 3, TMC2130_SG_THRS_Z, TMC2130_SG_THRS_E};
uint8_t tmc2130_sg_thr_home[4] = TMC2130_SG_THRS_HOME;
uint8_t tmc2130_sg_homing_axes_mask = 0x00;
@ -427,7 +427,7 @@ void tmc2130_check_overtemp()
void tmc2130_setup_chopper(uint8_t axis, uint8_t mres, uint8_t current_h, uint8_t current_r)
{
uint8_t intpol = 1;
uint8_t intpol = (mres != 0); // intpol to 256 only if microsteps aren't 256
uint8_t toff = tmc2130_chopper_config[axis].toff; // toff = 3 (fchop = 27.778kHz)
uint8_t hstrt = tmc2130_chopper_config[axis].hstr; //initial 4, modified to 5
uint8_t hend = tmc2130_chopper_config[axis].hend; //original value = 1
@ -600,7 +600,7 @@ void tmc2130_wr_THIGH(uint8_t axis, uint32_t val32)
uint8_t tmc2130_usteps2mres(uint16_t usteps)
{
uint8_t mres = 8; while (mres && (usteps >>= 1)) mres--;
uint8_t mres = 8; while (usteps >>= 1) mres--;
return mres;
}
@ -807,15 +807,15 @@ void tmc2130_goto_step(uint8_t axis, uint8_t step, uint8_t dir, uint16_t delay_u
{
dir = tmc2130_get_inv(axis)?0:1;
int steps = (int)step - (int)(mscnt >> shift);
if (steps < 0)
{
dir ^= 1;
steps = -steps;
}
if (steps > static_cast<int>(cnt / 2))
{
dir ^= 1;
steps = cnt - steps;
steps = cnt - steps; // This can create a negative step value
}
if (steps < 0)
{
dir ^= 1;
steps = -steps;
}
cnt = steps;
}

File diff suppressed because it is too large Load Diff

View File

@ -6,6 +6,9 @@
#include "conv2str.h"
#include "menu.h"
#include "mesh_bed_calibration.h"
#include "config.h"
#include "config.h"
extern void menu_lcd_longpress_func(void);
extern void menu_lcd_charsetup_func(void);
@ -47,6 +50,7 @@ unsigned char lcd_choose_color();
void lcd_load_filament_color_check();
//void lcd_mylang();
extern void lcd_belttest();
extern bool lcd_selftest();
void lcd_menu_statistics();
@ -217,7 +221,9 @@ void lcd_set_degree();
void lcd_set_progress();
#endif
#if (LANG_MODE != 0)
void lcd_language();
#endif
void lcd_wizard();
bool lcd_autoDepleteEnabled();
@ -244,4 +250,12 @@ enum class WizState : uint8_t
void lcd_wizard(WizState state);
#define VOLT_DIV_REF 5
#if IR_SENSOR_ANALOG
#define IRsensor_Hmin_TRESHOLD (3.0*1023*OVERSAMPLENR/VOLT_DIV_REF) // ~3.0V (0.6*Vcc)
#define IRsensor_Lmax_TRESHOLD (1.5*1023*OVERSAMPLENR/VOLT_DIV_REF) // ~1.5V (0.3*Vcc)
#define IRsensor_Hopen_TRESHOLD (4.6*1023*OVERSAMPLENR/VOLT_DIV_REF) // ~4.6V (N.C. @ Ru~20-50k, Rd'=56k, Ru'=10k)
#define IRsensor_Ldiode_TRESHOLD (0.3*1023*OVERSAMPLENR/VOLT_DIV_REF) // ~0.3V
#endif //IR_SENSOR_ANALOG
#endif //ULTRALCD_H

View File

@ -260,11 +260,13 @@
#define TMC2130_SG_THRS_Y 3 // stallguard sensitivity for Y axis
#define TMC2130_SG_THRS_Z 4 // stallguard sensitivity for Z axis
#define TMC2130_SG_THRS_E 3 // stallguard sensitivity for E axis
#define TMC2130_SG_THRS_HOME {3, 3, TMC2130_SG_THRS_Z, TMC2130_SG_THRS_E}
//new settings is possible for vsense = 1, running current value > 31 set vsense to zero and shift both currents by 1 bit right (Z axis only)
#define TMC2130_CURRENTS_H {16, 20, 35, 30} // default holding currents for all axes
#define TMC2130_CURRENTS_R {16, 20, 35, 30} // default running currents for all axes
#define TMC2130_UNLOAD_CURRENT_R 12 // lowe current for M600 to protect filament sensor
#define TMC2130_CURRENTS_R_HOME {8, 10, 20, 18} // homing running currents for all axes
// #define TMC2130_UNLOAD_CURRENT_R 12 // lower current for M600 to protect filament sensor - Unused
#define TMC2130_STEALTH_Z

View File

@ -262,11 +262,13 @@
#define TMC2130_SG_THRS_Y 3 // stallguard sensitivity for Y axis
#define TMC2130_SG_THRS_Z 4 // stallguard sensitivity for Z axis
#define TMC2130_SG_THRS_E 3 // stallguard sensitivity for E axis
#define TMC2130_SG_THRS_HOME {3, 3, TMC2130_SG_THRS_Z, TMC2130_SG_THRS_E}
//new settings is possible for vsense = 1, running current value > 31 set vsense to zero and shift both currents by 1 bit right (Z axis only)
#define TMC2130_CURRENTS_H {16, 20, 35, 30} // default holding currents for all axes
#define TMC2130_CURRENTS_R {16, 20, 35, 30} // default running currents for all axes
#define TMC2130_UNLOAD_CURRENT_R 12 // lowe current for M600 to protect filament sensor
#define TMC2130_CURRENTS_R_HOME {8, 10, 20, 18} // homing running currents for all axes
// #define TMC2130_UNLOAD_CURRENT_R 12 // lower current for M600 to protect filament sensor - Unused
#define TMC2130_STEALTH_Z

View File

@ -56,7 +56,7 @@
# Some may argue that this is only used by a script, BUT as soon someone accidentally or on purpose starts Arduino IDE
# it will use the default Arduino IDE folders and so can corrupt the build environment.
#
# Version: 1.0.6-Build_9
# Version: 1.0.6-Build_10
# Change log:
# 12 Jan 2019, 3d-gussner, Fixed "compiler.c.elf.flags=-w -Os -Wl,-u,vfprintf -lprintf_flt -lm -Wl,--gc-sections" in 'platform.txt'
# 16 Jan 2019, 3d-gussner, Build_2, Added development check to modify 'Configuration.h' to prevent unwanted LCD messages that Firmware is unknown
@ -112,7 +112,9 @@
# Changed Hex-files folder to PF-build-hex as requested in PR
# 23 Jul 2019, 3d-gussner, Added Finding OS version routine so supporting new OS should get easier
# 26 Jul 2019, 3d-gussner, Change JSON repository to prusa3d after PR https://github.com/prusa3d/Arduino_Boards/pull/1 was merged
# 23 Sep 2019, 3d-gussner, Prepare PF-build.sh for comming Prusa3d/Arduino_Boards version 1.0.2 Pull Request
# 17 Oct 2019, 3d-gussner, Changed folder and check file names to have seperated build enviroments depening on Arduino IDE version and
# board-versions.
#### Start check if OSTYPE is supported
OS_FOUND=$( command -v uname)
@ -211,7 +213,8 @@ fi
#### Set build environment
ARDUINO_ENV="1.8.5"
BUILD_ENV="1.0.6"
BOARD="PrusaResearchRambo"
BOARD="rambo"
BOARD_PACKAGE_NAME="PrusaResearchRambo"
BOARD_VERSION="1.0.1"
BOARD_URL="https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/package_prusa3d_index.json"
BOARD_FILENAME="prusa3drambo"
@ -229,6 +232,7 @@ echo ""
echo "Ardunio IDE :" $ARDUINO_ENV
echo "Build env :" $BUILD_ENV
echo "Board :" $BOARD
echo "Package name:" $BOARD_PACKAGE_NAME
echo "Specific Lib:" $LIB
echo ""
@ -259,12 +263,12 @@ if [ $TARGET_OS == "windows" ]; then
wget https://downloads.arduino.cc/arduino-$ARDUINO_ENV-windows.zip || exit 7
echo "$(tput sgr 0)"
fi
if [ ! -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor" ]; then
if [[ ! -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" && ! -e "../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then
echo "$(tput setaf 6)Unzipping Windows 32/64-bit Arduino IDE portable...$(tput setaf 2)"
sleep 2
unzip arduino-$ARDUINO_ENV-windows.zip -d ../PF-build-env-$BUILD_ENV || exit 7
mv ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor
echo "# arduino-$ARDUINO_ENV-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$TARGET_OS-$Processor
mv ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor
echo "# arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
echo "$(tput sgr0)"
fi
fi
@ -277,55 +281,55 @@ if [ $TARGET_OS == "linux" ]; then
wget --no-check-certificate https://downloads.arduino.cc/arduino-$ARDUINO_ENV-linux$Processor.tar.xz || exit 8
echo "$(tput sgr 0)"
fi
if [[ ! -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor" && ! -e "../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$TARGET_OS-$Processor.txt" ]]; then
if [[ ! -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" && ! -e "../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then
echo "$(tput setaf 6)Unzipping Linux $Processor Arduino IDE portable...$(tput setaf 2)"
sleep 2
tar -xvf arduino-$ARDUINO_ENV-linux$Processor.tar.xz -C ../PF-build-env-$BUILD_ENV/ || exit 8
mv ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor
echo "# arduino-$ARDUINO_ENV-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$TARGET_OS-$Processor.txt
mv ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor
echo "# arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
echo "$(tput sgr0)"
fi
fi
# Make Arduino IDE portable
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/ ]; then
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/ ]; then
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/
fi
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/ ]; then
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/ ]; then
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable
fi
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/output/ ]; then
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/output
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/output/ ]; then
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/output
fi
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/ ]; then
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/ ]; then
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages
fi
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/sketchbook/ ]; then
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/sketchbook
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/sketchbook/ ]; then
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/sketchbook
fi
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/sketchbook/libraries/ ]; then
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/sketchbook/libraries
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/sketchbook/libraries/ ]; then
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/sketchbook/libraries
fi
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/staging/ ]; then
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/staging
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/staging/ ]; then
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/staging
fi
# Change Arduino IDE preferences
if [ ! -e ../PF-build-env-$BUILD_ENV/Preferences-$TARGET_OS-$Processor.txt ]; then
echo "$(tput setaf 6)Setting $TARGET_OS-$Processor Arduino IDE preferences for portable GUI usage...$(tput setaf 2)"
if [ ! -e ../PF-build-env-$BUILD_ENV/Preferences-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt ]; then
echo "$(tput setaf 6)Setting $ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor Arduino IDE preferences for portable GUI usage...$(tput setaf 2)"
sleep 2
echo "update.check"
sed -i 's/update.check = true/update.check = false/g' ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
sed -i 's/update.check = true/update.check = false/g' ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
echo "board"
sed -i 's/board = uno/board = rambo/g' ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
sed -i 's/board = uno/board = $BOARD/g' ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
echo "editor.linenumbers"
sed -i 's/editor.linenumbers = false/editor.linenumbers = true/g' ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
sed -i 's/editor.linenumbers = false/editor.linenumbers = true/g' ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
echo "boardsmanager.additional.urls"
echo "boardsmanager.additional.urls=$BOARD_URL" >>../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
echo "build.verbose=true" >>../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
echo "compiler.cache_core=false" >>../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
echo "compiler.warning_level=all" >>../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
echo "# Preferences-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/Preferences-$TARGET_OS-$Processor.txt
echo "boardsmanager.additional.urls=$BOARD_URL" >>../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
echo "build.verbose=true" >>../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
echo "compiler.cache_core=false" >>../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
echo "compiler.warning_level=all" >>../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
echo "# Preferences-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/Preferences-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
echo "$(tput sgr0)"
fi
@ -336,25 +340,26 @@ if [ ! -f "$BOARD_FILENAME-$BOARD_VERSION.tar.bz2" ]; then
sleep 2
wget $BOARD_FILE_URL || exit 9
fi
if [[ ! -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware/avr/$BOARD_VERSION" || ! -e "../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then
echo "$(tput setaf 6)Unzipping $BOARD Arduino IDE portable...$(tput setaf 2)"
if [[ ! -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr/$BOARD_VERSION" || ! -e "../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then
echo "$(tput setaf 6)Unzipping $BOARD_PACKAGE_NAME Arduino IDE portable...$(tput setaf 2)"
sleep 2
tar -xvf $BOARD_FILENAME-$BOARD_VERSION.tar.bz2 -C ../PF-build-env-$BUILD_ENV/ || exit 10
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD ]; then
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME ]; then
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME
fi
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD ]; then
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME ]; then
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME
fi
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware ]; then
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware ]; then
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware
fi
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware/avr ]; then
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware/avr
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr ]; then
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr
fi
mv ../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$BOARD_VERSION ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware/avr/$BOARD_VERSION
echo "# $BOARD_FILENAME-$BOARD_VERSION" >> ../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$BOARD_VERSION-$TARGET_OS-$Processor.txt
mv ../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$BOARD_VERSION ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr/$BOARD_VERSION
echo "# $BOARD_FILENAME-$BOARD_VERSION" >> ../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
echo "$(tput sgr 0)"
fi
@ -365,30 +370,30 @@ if [ ! -f "PF-build-env-$BUILD_ENV.zip" ]; then
wget $PF_BUILD_FILE_URL || exit 11
echo "$(tput sgr 0)"
fi
if [ ! -e "../PF-build-env-$BUILD_ENV/PF-build-env-$BUILD_ENV-$TARGET_OS-$Processor.txt" ]; then
if [ ! -e "../PF-build-env-$BUILD_ENV/PF-build-env-$BUILD_ENV-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]; then
echo "$(tput setaf 6)Unzipping Prusa Firmware build environment...$(tput setaf 2)"
sleep 2
unzip -o PF-build-env-$BUILD_ENV.zip -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor || exit 12
echo "# PF-build-env-$TARGET_OS-$Processor-$BUILD_ENV" >> ../PF-build-env-$BUILD_ENV/PF-build-env-$BUILD_ENV-$TARGET_OS-$Processor.txt
unzip -o PF-build-env-$BUILD_ENV.zip -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor || exit 12
echo "# PF-build-env-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor-$BUILD_ENV" >> ../PF-build-env-$BUILD_ENV/PF-build-env-$BUILD_ENV-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
echo "$(tput sgr0)"
fi
# Check if User updated Arduino IDE 1.8.5 boardsmanager and tools
if [ -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/arduino/tools" ]; then
if [ -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/arduino/tools" ]; then
echo "$(tput setaf 6)Arduino IDE boards / tools have been manually updated...$"
echo "Please don't update the 'Arduino AVR boards' as this will prevent running this script (tput setaf 2)"
sleep 2
fi
if [ -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2" ]; then
if [ -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2" ]; then
echo "$(tput setaf 6)PrusaReasearch compatible tools have been manually updated...$(tput setaf 2)"
sleep 2
echo "$(tput setaf 6)Copying Prusa Firmware build environment to manually updated boards / tools...$(tput setaf 2)"
sleep 2
cp -f ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/hardware/tools/avr/avr/lib/ldscripts/avr6.xn ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2/avr/lib/ldscripts/avr6.xn
echo "# PF-build-env-portable-$TARGET_OS-$Processor-$BUILD_ENV" >> ../PF-build-env-$BUILD_ENV/PF-build-env-portable-$BUILD_ENV-$TARGET_OS-$Processor.txt
cp -f ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/hardware/tools/avr/avr/lib/ldscripts/avr6.xn ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2/avr/lib/ldscripts/avr6.xn
echo "# PF-build-env-portable-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor-$BUILD_ENV" >> ../PF-build-env-$BUILD_ENV/PF-build-env-portable-$BUILD_ENV-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
echo "$(tput sgr0)"
fi
if [ -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2" ]; then
if [ -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2" ]; then
echo "$(tput setaf 1)Arduino IDE tools have been updated manually to a non supported version!!!"
echo "Delete ../PF-build-env-$BUILD_ENV and start the script again"
echo "Script will not continue until this have been fixed $(tput setaf 2)"
@ -489,7 +494,7 @@ if [ ! -z "$3" ] ; then
fi
#Set BUILD_ENV_PATH
cd ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor || exit 24
cd ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor || exit 24
BUILD_ENV_PATH="$( pwd -P )"
cd ../..
@ -634,8 +639,8 @@ do
echo "Start to build Prusa Firmware ..."
echo "Using variant $VARIANT$(tput setaf 3)"
sleep 2
#$BUILD_ENV_PATH/arduino-builder -dump-prefs -debug-level 10 -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=$BOARD:avr:rambo -ide-version=10805 -build-path=$BUILD_PATH -warnings=all $SCRIPT_PATH/Firmware/Firmware.ino || exit 14
$BUILD_ENV_PATH/arduino-builder -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=$BOARD:avr:rambo -ide-version=10805 -build-path=$BUILD_PATH -warnings=all $SCRIPT_PATH/Firmware/Firmware.ino || exit 14
#$BUILD_ENV_PATH/arduino-builder -dump-prefs -debug-level 10 -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=$BOARD_PACKAGE_NAME:avr:$BOARD -build-path=$BUILD_PATH -warnings=all $SCRIPT_PATH/Firmware/Firmware.ino || exit 14
$BUILD_ENV_PATH/arduino-builder -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=$BOARD_PACKAGE_NAME:avr:$BOARD -build-path=$BUILD_PATH -warnings=all $SCRIPT_PATH/Firmware/Firmware.ino || exit 14
echo "$(tput sgr 0)"
if [ $LANGUAGES == "ALL" ]; then

View File

@ -178,6 +178,7 @@ Example:
# 4. Documentation
run [doxygen](http://www.doxygen.nl/) in Firmware folder
or visit https://prusa3d.github.io/Prusa-Firmware-Doc for doxygen generated output
# 5. FAQ
Q:I built firmware using Arduino and I see "?" instead of numbers in printer user interface.

View File

@ -198,7 +198,7 @@ void prusa_statistics(int _message, uint8_t _fil_nr) {
SERIAL_ECHOLN("}");
status_number = 15;
}
else if (isPrintPaused || card.paused)
else if (isPrintPaused)
{
SERIAL_ECHO("{");
prusa_stat_printerstatus(14);
@ -490,7 +490,7 @@ void prusa_statistics(int _message, uint8_t _fil_nr) {
{
prusa_statistics_case0(15);
}
else if (isPrintPaused || card.paused)
else if (isPrintPaused)
{
prusa_statistics_case0(14);
}
@ -753,7 +753,6 @@ TEST_CASE("Prusa_statistics test", "[prusa_stats]")
SERIALS_RESET();
isPrintPaused = 0;
card.paused = 0;
IS_SD_PRINTING = 1;
old_code::prusa_statistics(test_codes[i],0);
new_code::prusa_statistics(test_codes[i],0);

View File

@ -37,14 +37,8 @@
#MSG_CONFIRM_CARRIAGE_AT_THE_TOP c=20 r=2
"Are left and right Z~carriages all up?"
#MSG_AUTO_DEPLETE_ON c=17 r=1
"SpoolJoin [on]"
#
"SpoolJoin [N/A]"
#MSG_AUTO_DEPLETE_OFF c=17 r=1
"SpoolJoin [off]"
#MSG_AUTO_DEPLETE c=17 r=1
"SpoolJoin"
#MSG_AUTO_HOME
"Auto home"
@ -130,18 +124,11 @@
#
"Copy selected language?"
#MSG_CRASHDETECT_ON
"Crash det. [on]"
#MSG_CRASHDETECT
"Crash det."
#
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
#MSG_CRASHDETECT_NA
"Crash det. [N/A]"
#MSG_CRASHDETECT_OFF
"Crash det. [off]"
#MSG_CRASH_DETECTED c=20 r=1
"Crash detected."
@ -205,14 +192,8 @@
#
"Fail stats MMU"
#MSG_FSENS_AUTOLOAD_ON c=17 r=1
"F. autoload [on]"
#MSG_FSENS_AUTOLOAD_NA c=17 r=1
"F. autoload [N/A]"
#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
"F. autoload [off]"
#MSG_FSENSOR_AUTOLOAD
"F. autoload"
#
"Fail stats"
@ -223,20 +204,11 @@
#MSG_SELFTEST_FAN c=20
"Fan test"
#MSG_FANS_CHECK_ON c=17 r=1
"Fans check [on]"
#MSG_FANS_CHECK
"Fans check"
#MSG_FANS_CHECK_OFF c=17 r=1
"Fans check [off]"
#MSG_FSENSOR_ON
"Fil. sensor [on]"
#MSG_FSENSOR_NA
"Fil. sensor [N/A]"
#MSG_FSENSOR_OFF
"Fil. sensor [off]"
#MSG_FSENSOR
"Fil. sensor"
#
"Filam. runouts"
@ -433,11 +405,14 @@
#MSG_MMU_OK_RESUMING c=20 r=4
"MMU OK. Resuming..."
#MSG_STEALTH_MODE_OFF
"Mode [Normal]"
#MSG_MODE
"Mode"
#MSG_SILENT_MODE_ON
"Mode [silent]"
#MSG_NORMAL
"Normal"
#MSG_SILENT
"Silent"
#
"MMU needs user attention."
@ -445,14 +420,14 @@
#
"MMU power fails"
#MSG_STEALTH_MODE_ON
"Mode [Stealth]"
#MSG_STEALTH
"Stealth"
#MSG_AUTO_MODE_ON
"Mode [auto power]"
#MSG_AUTO_POWER
"Auto power"
#MSG_SILENT_MODE_OFF
"Mode [high power]"
#MSG_HIGH_POWER
"High power"
#
"MMU2 connected"
@ -478,7 +453,7 @@
#MSG_NO_CARD
"No SD card"
#
#MSG_NA
"N/A"
#MSG_NO
@ -658,20 +633,17 @@
#MSG_BED_CORRECTION_RIGHT c=14 r=1
"Right side[um]"
#MSG_SECOND_SERIAL_ON c=17 r=1
"RPi port [on]"
#MSG_SECOND_SERIAL_OFF c=17 r=1
"RPi port [off]"
#MSG_RPI_PORT
"RPi port"
#MSG_WIZARD_RERUN c=20 r=7
"Running Wizard will delete current calibration results and start from the beginning. Continue?"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
"SD card [normal]"
#MSG_SD_CARD
"SD card"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
"SD card [flshAir]"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
"FlashAir"
#
"Right"
@ -718,38 +690,38 @@
#MSG_FILE_CNT c=20 r=4
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
#MSG_SORT_NONE c=17 r=1
"Sort [none]"
#MSG_SORT
"Sort"
#MSG_SORT_TIME c=17 r=1
"Sort [time]"
#MSG_NONE
"None"
#MSG_SORT_TIME
"Time"
#
"Severe skew:"
#MSG_SORT_ALPHA c=17 r=1
"Sort [alphabet]"
#MSG_SORT_ALPHA
"Alphabet"
#MSG_SORTING c=20 r=1
"Sorting files"
#MSG_SOUND_LOUD c=17 r=1
"Sound [loud]"
#MSG_SOUND_LOUD
"Loud"
#
"Slight skew:"
#MSG_SOUND_MUTE c=17 r=1
"Sound [mute]"
#MSG_SOUND
"Sound"
#
"Some problem encountered, Z-leveling enforced ..."
#MSG_SOUND_ONCE c=17 r=1
"Sound [once]"
#MSG_SOUND_SILENT c=17 r=1
"Sound [silent]"
#MSG_SOUND_ONCE
"Once"
#MSG_SPEED
"Speed"
@ -778,18 +750,12 @@
#
"Select filament:"
#MSG_TEMP_CALIBRATION c=20 r=1
"Temp. cal. "
#MSG_TEMP_CALIBRATION_ON c=20 r=1
"Temp. cal. [on]"
#MSG_TEMP_CALIBRATION c=12 r=1
"Temp. cal."
#
"Select temperature which matches your material."
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
"Temp. cal. [off]"
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
"Temp. calibration"
@ -929,7 +895,10 @@
"Y-correct:"
#MSG_OFF
" [off]"
"Off"
#MSG_ON
"On"
#
"Back"
@ -943,14 +912,14 @@
#
"FINDA:"
#
"Firmware [none]"
#MSG_FIRMWARE
"Firmware"
#
"Firmware [strict]"
#MSG_STRICT
"Strict"
#
"Firmware [warn]"
#MSG_WARN
"Warn"
#
"HW Setup"
@ -958,20 +927,11 @@
#
"IR:"
#
"Magnets comp.[N/A]"
#MSG_MAGNETS_COMP
"Magnets comp."
#
"Magnets comp.[Off]"
#
"Magnets comp. [On]"
#
"Mesh [3x3]"
#
"Mesh [7x7]"
#MSG_MESH
"Mesh"
#
"Mesh bed leveling"
@ -979,41 +939,17 @@
#
"MK3S firmware detected on MK3 printer"
#
"MMU Mode [Normal]"
#
"MMU Mode[Stealth]"
#MSG_MMU_MODE
"MMU Mode"
#
"Mode change in progress ..."
#
"Model [none]"
#MSG_MODEL
"Model"
#
"Model [strict]"
#
"Model [warn]"
#
"Nozzle d. [0.25]"
#
"Nozzle d. [0.40]"
#
"Nozzle d. [0.60]"
#
"Nozzle [none]"
#
"Nozzle [strict]"
#
"Nozzle [warn]"
#MSG_NOZZLE_DIAMETER
"Nozzle d."
#
"G-code sliced for a different level. Continue?"
@ -1060,8 +996,8 @@
#
"Sheet"
#
"Sound [assist]"
#MSG_SOUND_BLIND
"Assist"
#
"Steel sheets"
@ -1069,11 +1005,5 @@
#
"Z-correct:"
#
"Z-probe nr. [1]"
#
"Z-probe nr. [3]"
#
"Z-probe nr. [5]"
#MSG_Z_PROBE_NR
"Z-probe nr."

View File

@ -50,18 +50,10 @@
"Are left and right Z~carriages all up?"
"Dojely oba Z voziky k~hornimu dorazu?"
#MSG_AUTO_DEPLETE_ON c=17 r=1
"SpoolJoin [on]"
"SpoolJoin [zap]"
#
"SpoolJoin [N/A]"
#MSG_AUTO_DEPLETE c=17 r=1
"SpoolJoin"
"\x00"
#MSG_AUTO_DEPLETE_OFF c=17 r=1
"SpoolJoin [off]"
"SpoolJoin [vyp]"
#MSG_AUTO_HOME
"Auto home"
"\x00"
@ -174,21 +166,13 @@
"Copy selected language?"
"Kopirovat vybrany jazyk?"
#MSG_CRASHDETECT_ON
"Crash det. [on]"
"Crash det. [zap]"
#
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
"Zvolte filament pro kalibraci prvni vrstvy z nasledujiciho menu"
#MSG_CRASHDETECT_NA
"Crash det. [N/A]"
#MSG_CRASHDETECT
"Crash det."
"\x00"
#MSG_CRASHDETECT_OFF
"Crash det. [off]"
"Crash det. [vyp]"
#
"Zvolte filament pro kalibraci prvni vrstvy z nasledujiciho menu"
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
#MSG_CRASH_DETECTED c=20 r=1
"Crash detected."
@ -274,17 +258,9 @@
"Fail stats MMU"
"Selhani MMU"
#MSG_FSENS_AUTOLOAD_ON c=17 r=1
"F. autoload [on]"
"F. autozav. [zap]"
#MSG_FSENS_AUTOLOAD_NA c=17 r=1
"F. autoload [N/A]"
"F. autozav. [N/A]"
#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
"F. autoload [off]"
"F. autozav. [vyp]"
#MSG_FSENSOR_AUTOLOAD
"F. autoload"
"F. autozav."
#
"Fail stats"
@ -298,25 +274,13 @@
"Fan test"
"Test ventilatoru"
#MSG_FANS_CHECK_ON c=17 r=1
"Fans check [on]"
"Kontr. vent.[zap]"
#MSG_FANS_CHECK
"Fans check"
"Kontr. vent."
#MSG_FANS_CHECK_OFF c=17 r=1
"Fans check [off]"
"Kontr. vent.[vyp]"
#MSG_FSENSOR_ON
"Fil. sensor [on]"
"Fil. senzor [zap]"
#MSG_FSENSOR_NA
"Fil. sensor [N/A]"
"Fil. senzor [N/A]"
#MSG_FSENSOR_OFF
"Fil. sensor [off]"
"Fil. senzor [vyp]"
#MSG_FSENSOR
"Fil. sensor"
"Fil. senzor"
#
"Filam. runouts"
@ -578,13 +542,17 @@
"MMU OK. Resuming..."
"MMU OK. Pokracuji..."
#MSG_STEALTH_MODE_OFF
"Mode [Normal]"
"Mod [Normal]"
#MSG_MODE
"Mode"
"Mod"
#MSG_SILENT_MODE_ON
"Mode [silent]"
"Mod [tichy]"
#MSG_NORMAL
"Normal"
"\x00"
#MSG_SILENT
"Silent"
"Tichy"
#
"MMU needs user attention."
@ -594,17 +562,17 @@
"MMU power fails"
"MMU vypadky proudu"
#MSG_STEALTH_MODE_ON
"Mode [Stealth]"
"Mod [tichy]"
#MSG_STEALTH
"Stealth"
"Tichy"
#MSG_AUTO_MODE_ON
"Mode [auto power]"
"Mod [automaticky]"
#MSG_AUTO_POWER
"Auto power"
"Automaticky"
#MSG_SILENT_MODE_OFF
"Mode [high power]"
"Mod [vys. vykon]"
#MSG_HIGH_POWER
"High power"
"Vys. vykon"
#
"MMU2 connected"
@ -638,7 +606,7 @@
"No SD card"
"Zadna SD karta"
#
#MSG_NA
"N/A"
"\x00"
@ -878,25 +846,21 @@
"Right side[um]"
"Vpravo [um]"
#MSG_SECOND_SERIAL_ON c=17 r=1
"RPi port [on]"
"RPi port [zap]"
#MSG_SECOND_SERIAL_OFF c=17 r=1
"RPi port [off]"
"RPi port [vyp]"
#MSG_RPI_PORT
"RPi port"
"\x00"
#MSG_WIZARD_RERUN c=20 r=7
"Running Wizard will delete current calibration results and start from the beginning. Continue?"
"Spusteni Pruvodce vymaze ulozene vysledky vsech kalibraci a spusti kalibracni proces od zacatku. Pokracovat?"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
"SD card [normal]"
#MSG_SD_CARD
"SD card"
"\x00"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
"SD card [flshAir]"
"SD card [FlshAir]"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
"FlashAir"
"\x00"
#
"Right"
@ -958,49 +922,49 @@
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
"Nektere soubory nebudou setrideny. Maximalni pocet souboru ve slozce pro setrideni je 100."
#MSG_SORT_NONE c=17 r=1
"Sort [none]"
"Trideni [Zadne]"
#MSG_SORT
"Sort"
"Trideni"
#MSG_SORT_TIME c=17 r=1
"Sort [time]"
"Trideni [cas]"
#MSG_NONE
"None"
"Zadne"
#MSG_SORT_TIME
"Time"
"Cas"
#
"Severe skew:"
"Tezke zkoseni:"
#MSG_SORT_ALPHA c=17 r=1
"Sort [alphabet]"
"Trideni [Abeceda]"
#MSG_SORT_ALPHA
"Alphabet"
"Abeceda"
#MSG_SORTING c=20 r=1
"Sorting files"
"Trideni souboru"
#MSG_SOUND_LOUD c=17 r=1
"Sound [loud]"
"Zvuk [hlasity]"
#MSG_SOUND_LOUD
"Loud"
"Hlasity"
#
"Slight skew:"
"Lehke zkoseni:"
#MSG_SOUND_MUTE c=17 r=1
"Sound [mute]"
"Zvuk [vypnuto]"
#MSG_SOUND
"Sound"
"Zvuk"
#
"Some problem encountered, Z-leveling enforced ..."
"Vyskytl se problem, srovnavam osu Z ..."
#MSG_SOUND_ONCE c=17 r=1
"Sound [once]"
"Zvuk [jednou]"
#MSG_SOUND_SILENT c=17 r=1
"Sound [silent]"
"Zvuk [tichy]"
#MSG_SOUND_ONCE
"Once"
"Jednou"
#MSG_SPEED
"Speed"
@ -1038,22 +1002,14 @@
"Select filament:"
"Zvolte filament:"
#MSG_TEMP_CALIBRATION c=20 r=1
"Temp. cal. "
"Tepl. kal. "
#MSG_TEMP_CALIBRATION_ON c=20 r=1
"Temp. cal. [on]"
"Tepl. kal. [zap]"
#MSG_TEMP_CALIBRATION c=12 r=1
"Temp. cal."
"Tepl. kal."
#
"Select temperature which matches your material."
"Zvolte teplotu, ktera odpovida vasemu materialu."
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
"Temp. cal. [off]"
"Tepl. kal. [vyp]"
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
"Temp. calibration"
"Teplot. kalibrace"
@ -1232,15 +1188,19 @@
#
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
"\x00"
"Tiskarna zacne tisknout lomenou caru. Otacenim tlacitka nastavte optimalni vysku. Postupujte podle obrazku v handbooku (kapitola Kalibrace)."
#
"Y-correct:"
"Korekce Y:"
#MSG_OFF
" [off]"
" [vyp]"
"Off"
"Vyp"
#MSG_ON
"On"
"Zap"
#
"Back"
@ -1258,17 +1218,17 @@
"FINDA:"
"\x00"
#
"Firmware [none]"
"Firmware [Zadne]"
#MSG_FIRMWARE
"Firmware"
"\x00"
#
"Firmware [strict]"
"Firmware [Prisne]"
#MSG_STRICT
"Strict"
"Prisne"
#
"Firmware [warn]"
"Firmware[Varovat]"
#MSG_WARN
"Warn"
"Varovat"
#
"HW Setup"
@ -1278,25 +1238,13 @@
"IR:"
"\x00"
#
"Magnets comp.[N/A]"
"Komp. magnetu[N/A]"
#MSG_MAGNETS_COMP
"Magnets comp."
"Komp. magnetu"
#
"Magnets comp.[Off]"
"Komp. magnetu[Vyp]"
#
"Magnets comp. [On]"
"Komp. magnetu[Zap]"
#
"Mesh [3x3]"
"Mesh [3x3]"
#
"Mesh [7x7]"
"Mesh [7x7]"
#MSG_MESH
"Mesh"
"\x00"
#
"Mesh bed leveling"
@ -1306,53 +1254,21 @@
"MK3S firmware detected on MK3 printer"
"MK3S firmware detekovan na tiskarne MK3"
#
"MMU Mode [Normal]"
"MMU mod [Normal]"
#
"MMU Mode[Stealth]"
"MMU Mod [Tichy]"
#MSG_MMU_MODE
"MMU Mode"
"MMU mod"
#
"Mode change in progress ..."
"Probiha zmena modu..."
#
"Model [none]"
"Model [Zadne]"
#MSG_MODEL
"Model"
"\x00"
#
"Model [strict]"
"Model [Prisne]"
#
"Model [warn]"
"Model [Varovat]"
#
"Nozzle d. [0.25]"
"Tryska [0.25]"
#
"Nozzle d. [0.40]"
"Tryska [0.40]"
#
"Nozzle d. [0.60]"
"Tryska [0.60]"
#
"Nozzle [none]"
"Tryska [Zadne]"
#
"Nozzle [strict]"
"Tryska [Prisne]"
#
"Nozzle [warn]"
"Tryska [Varovat]"
#MSG_NOZZLE_DIAMETER
"Nozzle d."
"Tryska"
#
"G-code sliced for a different level. Continue?"
@ -1414,9 +1330,9 @@
"Sheet"
"Plat"
#
"Sound [assist]"
"Zvuk [Asist.]"
#MSG_SOUND_BLIND
"Assist"
"Asist."
#
"Steel sheets"
@ -1426,14 +1342,6 @@
"Z-correct:"
"Korekce Z:"
#
"Z-probe nr. [1]"
"Pocet mereni Z [1]"
#
"Z-probe nr. [3]"
"Pocet mereni Z [3]"
#
"Z-probe nr. [5]"
"Pocet mereni Z [5]"
#MSG_Z_PROBE_NR
"Z-probe nr."
"Pocet mereni Z"

View File

@ -50,17 +50,9 @@
"Are left and right Z~carriages all up?"
"Sind linke+rechte Z- Schlitten ganz oben?"
#MSG_AUTO_DEPLETE_ON c=17 r=1
"SpoolJoin [on]"
"SpoolJoin [an]"
#
"SpoolJoin [N/A]"
"SpoolJoin [N/V]"
#MSG_AUTO_DEPLETE_OFF c=17 r=1
"SpoolJoin [off]"
"SpoolJoin [aus]"
#MSG_AUTO_DEPLETE c=17 r=1
"SpoolJoin"
"\x00"
#MSG_AUTO_HOME
"Auto home"
@ -174,22 +166,14 @@
"Copy selected language?"
"Gewaehlte Sprache kopieren?"
#MSG_CRASHDETECT_ON
"Crash det. [on]"
"Crash Erk. [an]"
#MSG_CRASHDETECT
"Crash det."
"Crash Erk."
#
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
"Waehlen Sie ein Filament fuer Erste Schichtkalibrierung aus und waehlen Sie es im On-Screen-Menu aus."
#MSG_CRASHDETECT_NA
"Crash det. [N/A]"
"Crash Erk. [nv]"
#MSG_CRASHDETECT_OFF
"Crash det. [off]"
"Crash Erk. [aus]"
#MSG_CRASH_DETECTED c=20 r=1
"Crash detected."
"Crash erkannt."
@ -274,17 +258,9 @@
"Fail stats MMU"
"MMU-Fehler"
#MSG_FSENS_AUTOLOAD_ON c=17 r=1
"F. autoload [on]"
"F.Autoladen [an]"
#MSG_FSENS_AUTOLOAD_NA c=17 r=1
"F. autoload [N/A]"
"F. Autoload [nv]"
#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
"F. autoload [off]"
"F. Autoload [aus]"
#MSG_FSENSOR_AUTOLOAD
"F. autoload"
"F. autoladen"
#
"Fail stats"
@ -298,25 +274,13 @@
"Fan test"
"Lueftertest"
#MSG_FANS_CHECK_ON c=17 r=1
"Fans check [on]"
"Luefter Chk. [an]"
#MSG_FANS_CHECK
"Fans check"
"Luefter Chk."
#MSG_FANS_CHECK_OFF c=17 r=1
"Fans check [off]"
"Luefter Chk.[aus]"
#MSG_FSENSOR_ON
"Fil. sensor [on]"
"Fil. Sensor [an]"
#MSG_FSENSOR_NA
"Fil. sensor [N/A]"
"Fil. Sensor [nv]"
#MSG_FSENSOR_OFF
"Fil. sensor [off]"
"Fil. Sensor [aus]"
#MSG_FSENSOR
"Fil. sensor"
"\x00"
#
"Filam. runouts"
@ -578,13 +542,17 @@
"MMU OK. Resuming..."
"MMU OK. Weiterdrucken..."
#MSG_STEALTH_MODE_OFF
"Mode [Normal]"
"Modus [Normal]"
#MSG_MODE
"Mode"
"Modus"
#MSG_SILENT_MODE_ON
"Mode [silent]"
"Modus [leise]"
#MSG_NORMAL
"Normal"
"\x00"
#MSG_SILENT
"Silent"
"Leise"
#
"MMU needs user attention."
@ -594,17 +562,17 @@
"MMU power fails"
"MMU Netzfehler"
#MSG_STEALTH_MODE_ON
"Mode [Stealth]"
"Modus [Stealth]"
#MSG_STEALTH
"Stealth"
"\x00"
#MSG_AUTO_MODE_ON
"Mode [auto power]"
"Modus[Auto Power]"
#MSG_AUTO_POWER
"Auto power"
"\x00"
#MSG_SILENT_MODE_OFF
"Mode [high power]"
"Modus[Hohe Leist]"
#MSG_HIGH_POWER
"High power"
"Hohe leist"
#
"MMU2 connected"
@ -638,9 +606,9 @@
"No SD card"
"Keine SD Karte"
#
#MSG_NA
"N/A"
"N.V."
"N/V"
#MSG_NO
"No"
@ -878,25 +846,21 @@
"Right side[um]"
"Rechts [um]"
#MSG_SECOND_SERIAL_ON c=17 r=1
"RPi port [on]"
"RPi Port [an]"
#MSG_SECOND_SERIAL_OFF c=17 r=1
"RPi port [off]"
"RPi Port [aus]"
#MSG_RPI_PORT
"RPi port"
"\x00"
#MSG_WIZARD_RERUN c=20 r=7
"Running Wizard will delete current calibration results and start from the beginning. Continue?"
"Der Assistent wird die aktuellen Kalibrierungsdaten loeschen und von vorne beginnen. Weiterfahren?"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
"SD card [normal]"
"SD Karte [normal]"
#MSG_SD_CARD
"SD card"
"SD Karte"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
"SD card [flshAir]"
"SD Karte[flshAir]"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
"FlashAir"
"\x00"
#
"Right"
@ -958,49 +922,49 @@
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
"Einige Dateien wur- den nicht sortiert. Max. Dateien pro Verzeichnis = 100."
#MSG_SORT_NONE c=17 r=1
"Sort [none]"
"Sort. [ohne]"
#MSG_SORT
"Sort"
"Sort."
#MSG_SORT_TIME c=17 r=1
"Sort [time]"
"Sort. [Zeit]"
#MSG_NONE
"None"
"Ohne"
#MSG_SORT_TIME
"Time"
"Zeit"
#
"Severe skew:"
"Schwer.Schr:"
#MSG_SORT_ALPHA c=17 r=1
"Sort [alphabet]"
"Sort. [Alphabet]"
#MSG_SORT_ALPHA
"Alphabet"
"\x00"
#MSG_SORTING c=20 r=1
"Sorting files"
"Sortiere Dateien"
#MSG_SOUND_LOUD c=17 r=1
"Sound [loud]"
"Sound [laut]"
#MSG_SOUND_LOUD
"Loud"
"Laut"
#
"Slight skew:"
"Leicht.Schr:"
#MSG_SOUND_MUTE c=17 r=1
"Sound [mute]"
"Sound [stumm]"
#MSG_SOUND
"Sound"
"\x00"
#
"Some problem encountered, Z-leveling enforced ..."
"Fehler aufgetreten, Z-Kalibrierung erforderlich..."
#MSG_SOUND_ONCE c=17 r=1
"Sound [once]"
"Sound [einmal]"
#MSG_SOUND_SILENT c=17 r=1
"Sound [silent]"
"Sound [leise]"
#MSG_SOUND_ONCE
"Once"
"Einmal"
#MSG_SPEED
"Speed"
@ -1038,22 +1002,14 @@
"Select filament:"
"Filament auswaehlen:"
#MSG_TEMP_CALIBRATION c=20 r=1
"Temp. cal. "
"Temp Kalib. "
#MSG_TEMP_CALIBRATION_ON c=20 r=1
"Temp. cal. [on]"
"Temp. Kal. [an]"
#MSG_TEMP_CALIBRATION c=12 r=1
"Temp. cal."
"Temp Kalib."
#
"Select temperature which matches your material."
"Waehlen Sie die Temperatur, die zu Ihrem Material passt."
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
"Temp. cal. [off]"
"Temp. Kal. [aus]"
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
"Temp. calibration"
"Temp. kalibrieren"
@ -1232,15 +1188,19 @@
#
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
"\x00"
"Der Drucker beginnt mit dem Drucken einer Zickzacklinie. Drehen Sie den Knopf, bis Sie die optimale Hoehe erreicht haben. Ueberpruefen Sie die Bilder im Handbuch (Kapitel Kalibrierung)."
#
"Y-correct:"
"Y-Korrektur:"
#MSG_OFF
" [off]"
" [aus]"
"Off"
"Aus"
#MSG_ON
"On"
"An"
#
"Back"
@ -1258,17 +1218,17 @@
"FINDA:"
"\x00"
#
"Firmware [none]"
"Firmware [ohne]"
#MSG_FIRMWARE
"Firmware"
"\x00"
#
"Firmware [strict]"
"Firmware [strikt]"
#MSG_STRICT
"Strict"
"Strikt"
#
"Firmware [warn]"
"Firmware [warnen]"
#MSG_WARN
"Warn"
"Warnen"
#
"HW Setup"
@ -1278,25 +1238,13 @@
"IR:"
"\x00"
#
"Magnets comp.[N/A]"
"Magnet Komp. [nv]"
#MSG_MAGNETS_COMP
"Magnets comp."
"Magnet Komp."
#
"Magnets comp.[Off]"
"Magnet Komp. [Aus]"
#
"Magnets comp. [On]"
"Magnet Komp. [An]"
#
"Mesh [3x3]"
"Gitter [3x3]"
#
"Mesh [7x7]"
"Gitter [7x7]"
#MSG_MESH
"Mesh"
"Gitter"
#
"Mesh bed leveling"
@ -1306,53 +1254,21 @@
"MK3S firmware detected on MK3 printer"
"MK3S-Firmware auf MK3-Drucker erkannt"
#
"MMU Mode [Normal]"
"MMU Modus[Normal]"
#
"MMU Mode[Stealth]"
"MMU Mod.[Stealth]"
#MSG_MMU_MODE
"MMU Mode"
"MMU Modus"
#
"Mode change in progress ..."
"Moduswechsel erfolgt..."
#
"Model [none]"
"Modell [ohne]"
#MSG_MODEL
"Model"
"Modell"
#
"Model [strict]"
"Modell [strikt]"
#
"Model [warn]"
"Modell [warnen]"
#
"Nozzle d. [0.25]"
"Duese D. [0.25]"
#
"Nozzle d. [0.40]"
"Duese D. [0.40]"
#
"Nozzle d. [0.60]"
"Duese D. [0.60]"
#
"Nozzle [none]"
"Duese [ohne]"
#
"Nozzle [strict]"
"Duese [strikt]"
#
"Nozzle [warn]"
"Duese [warnen]"
#MSG_NOZZLE_DIAMETER
"Nozzle d."
"Duese D."
#
"G-code sliced for a different level. Continue?"
@ -1414,9 +1330,9 @@
"Sheet"
"Blech"
#
"Sound [assist]"
"Sound [Assist]"
#MSG_SOUND_BLIND
"Assist"
"\x00"
#
"Steel sheets"
@ -1426,14 +1342,6 @@
"Z-correct:"
"Z-Korrektur:"
#
"Z-probe nr. [1]"
"Z-Probe Nr. [1]"
#
"Z-probe nr. [3]"
"Z-Probe Nr. [3]"
#
"Z-probe nr. [5]"
"Z-Probe Nr. [5]"
#MSG_Z_PROBE_NR
"Z-probe nr."
"\x00"

View File

@ -50,16 +50,8 @@
"Are left and right Z~carriages all up?"
"Carros Z izq./der. estan arriba maximo?"
#MSG_AUTO_DEPLETE_ON c=17 r=1
"SpoolJoin [on]"
"\x00"
#
"SpoolJoin [N/A]"
"\x00"
#MSG_AUTO_DEPLETE_OFF c=17 r=1
"SpoolJoin [off]"
#MSG_AUTO_DEPLETE c=17 r=1
"SpoolJoin"
"\x00"
#MSG_AUTO_HOME
@ -174,22 +166,14 @@
"Copy selected language?"
"Copiar idioma seleccionado?"
#MSG_CRASHDETECT_ON
"Crash det. [on]"
"Det. choque [act]"
#MSG_CRASHDETECT
"Crash det."
"Det. choque"
#
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
"Escoge un filamento para la Calibracion de la Primera Capa y seleccionalo en el menu en pantalla."
#MSG_CRASHDETECT_NA
"Crash det. [N/A]"
"Dec. choque [N/D]"
#MSG_CRASHDETECT_OFF
"Crash det. [off]"
"Det. choque [ina]"
#MSG_CRASH_DETECTED c=20 r=1
"Crash detected."
"Choque detectado."
@ -274,17 +258,9 @@
"Fail stats MMU"
"Estadistica de fallos MMU"
#MSG_FSENS_AUTOLOAD_ON c=17 r=1
"F. autoload [on]"
"Autocarg.Fil[act]"
#MSG_FSENS_AUTOLOAD_NA c=17 r=1
"F. autoload [N/A]"
"Autocarg.Fil[N/D]"
#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
"F. autoload [off]"
"Autocarg.Fil[ina]"
#MSG_FSENSOR_AUTOLOAD
"F. autoload"
"Autocarg.fil."
#
"Fail stats"
@ -298,25 +274,13 @@
"Fan test"
"Test ventiladores"
#MSG_FANS_CHECK_ON c=17 r=1
"Fans check [on]"
"Comprob.vent[act]"
#MSG_FANS_CHECK
"Fans check"
"Comprob.vent"
#MSG_FANS_CHECK_OFF c=17 r=1
"Fans check [off]"
"Comprob.vent[ina]"
#MSG_FSENSOR_ON
"Fil. sensor [on]"
"Sensor Fil. [act]"
#MSG_FSENSOR_NA
"Fil. sensor [N/A]"
"Sensor Fil. [N/D]"
#MSG_FSENSOR_OFF
"Fil. sensor [off]"
"Sensor Fil. [ina]"
#MSG_FSENSOR
"Fil. sensor"
"Sensor Fil."
#
"Filam. runouts"
@ -578,13 +542,17 @@
"MMU OK. Resuming..."
"MMU OK. Resumiendo..."
#MSG_STEALTH_MODE_OFF
"Mode [Normal]"
"Modo [Normal]"
#MSG_MODE
"Mode"
"Modo"
#MSG_SILENT_MODE_ON
"Mode [silent]"
"Modo [silencio]"
#MSG_NORMAL
"Normal"
"\x00"
#MSG_SILENT
"Silent"
"Silencio"
#
"MMU needs user attention."
@ -594,17 +562,17 @@
"MMU power fails"
"Fallo de energia en MMU"
#MSG_STEALTH_MODE_ON
"Mode [Stealth]"
"Modo [Silencio]"
#MSG_STEALTH
"Stealth"
"Silencio"
#MSG_AUTO_MODE_ON
"Mode [auto power]"
"Modo[fuerza auto]"
#MSG_AUTO_POWER
"Auto power"
"Fuerza auto"
#MSG_SILENT_MODE_OFF
"Mode [high power]"
"Modo [rend.pleno]"
#MSG_HIGH_POWER
"High power"
"Rend.pleno"
#
"MMU2 connected"
@ -638,7 +606,7 @@
"No SD card"
"No hay tarjeta SD"
#
#MSG_NA
"N/A"
"N/A"
@ -878,25 +846,21 @@
"Right side[um]"
"Derecha [um]"
#MSG_SECOND_SERIAL_ON c=17 r=1
"RPi port [on]"
"Puerto RPi [act]"
#MSG_SECOND_SERIAL_OFF c=17 r=1
"RPi port [off]"
"Puerto RPi [ina]"
#MSG_RPI_PORT
"RPi port"
"Puerto RPi"
#MSG_WIZARD_RERUN c=20 r=7
"Running Wizard will delete current calibration results and start from the beginning. Continue?"
"Ejecutar el Wizard borrara los valores de calibracion actuales y comenzara de nuevo. Continuar?"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
"SD card [normal]"
"Tarj. SD [normal]"
#MSG_SD_CARD
"SD card"
"Tarj. SD"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
"SD card [flshAir]"
"Tarj. SD[FlshAir]"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
"FlashAir"
"\x00"
#
"Right"
@ -958,49 +922,49 @@
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
"Algunos archivos no se ordenaran. Maximo 100 archivos por carpeta para ordenar. "
#MSG_SORT_NONE c=17 r=1
"Sort [none]"
"Ordenar [ninguno]"
#MSG_SORT
"Sort"
"Ordenar"
#MSG_SORT_TIME c=17 r=1
"Sort [time]"
"Ordenar [fecha]"
#MSG_NONE
"None"
"Ninguno"
#MSG_SORT_TIME
"Time"
"Fecha"
#
"Severe skew:"
"Incl.severa:"
#MSG_SORT_ALPHA c=17 r=1
"Sort [alphabet]"
"Ordenar [alfabet]"
#MSG_SORT_ALPHA
"Alphabet"
"Alfabet"
#MSG_SORTING c=20 r=1
"Sorting files"
"Ordenando archivos"
#MSG_SOUND_LOUD c=17 r=1
"Sound [loud]"
"Sonido [alto]"
#MSG_SOUND_LOUD
"Loud"
"Alto"
#
"Slight skew:"
"Liger.incl.:"
#MSG_SOUND_MUTE c=17 r=1
"Sound [mute]"
"Sonido[silenciad]"
#MSG_SOUND
"Sound"
"Sonido"
#
"Some problem encountered, Z-leveling enforced ..."
"Problema encontrado, nivelacion Z forzosa ..."
#MSG_SOUND_ONCE c=17 r=1
"Sound [once]"
"Sonido [una vez]"
#MSG_SOUND_SILENT c=17 r=1
"Sound [silent]"
"Sonido[silencios]"
#MSG_SOUND_ONCE
"Once"
"Una vez"
#MSG_SPEED
"Speed"
@ -1038,22 +1002,14 @@
"Select filament:"
"Selecciona filamento:"
#MSG_TEMP_CALIBRATION c=20 r=1
"Temp. cal. "
"Cal. temp. "
#MSG_TEMP_CALIBRATION_ON c=20 r=1
"Temp. cal. [on]"
"Cal. temp. [on]"
#MSG_TEMP_CALIBRATION c=12 r=1
"Temp. cal."
"Cal. temp."
#
"Select temperature which matches your material."
"Selecciona la temperatura adecuada a tu material."
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
"Temp. cal. [off]"
"Cal. temp. [off]"
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
"Temp. calibration"
"Calibracion temp."
@ -1232,15 +1188,19 @@
#
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
"\x00"
"La impresora comenzara a imprimir una linea en zig-zag. Gira el dial hasta que la linea alcance la altura optima. Mira las fotos del manual (Capitulo de calibracion)."
#
"Y-correct:"
"Corregir-Y:"
#MSG_OFF
" [off]"
"[apag]"
"Off"
"Ina"
#MSG_ON
"On"
"Act"
#
"Back"
@ -1258,17 +1218,17 @@
"FINDA:"
"FINDA:"
#
"Firmware [none]"
"Firmware[ninguno]"
#MSG_FIRMWARE
"Firmware"
"\x00"
#
"Firmware [strict]"
"Firmware[estrict]"
#MSG_STRICT
"Strict"
"Estrict"
#
"Firmware [warn]"
"Firmware [aviso]"
#MSG_WARN
"Warn"
"Aviso"
#
"HW Setup"
@ -1278,25 +1238,13 @@
"IR:"
"\x00"
#
"Magnets comp.[N/A]"
"Comp. imanes [N/A]"
#MSG_MAGNETS_COMP
"Magnets comp."
"Comp. imanes"
#
"Magnets comp.[Off]"
"Comp. imanes [Off]"
#
"Magnets comp. [On]"
"Comp. imanes [On]"
#
"Mesh [3x3]"
"Malla [3x3]"
#
"Mesh [7x7]"
"Malla [7x7]"
#MSG_MESH
"Mesh"
"Malla"
#
"Mesh bed leveling"
@ -1306,53 +1254,21 @@
"MK3S firmware detected on MK3 printer"
"Firmware MK3S detectado en impresora MK3"
#
"MMU Mode [Normal]"
"Modo MMU [Normal]"
#
"MMU Mode[Stealth]"
"Modo MMU[Silenci]"
#MSG_MMU_MODE
"MMU Mode"
"Modo MMU"
#
"Mode change in progress ..."
"Cambio de modo progresando ..."
#
"Model [none]"
"Modelo [ninguno]"
#MSG_MODEL
"Model"
"Modelo"
#
"Model [strict]"
"Modelo [estricto]"
#
"Model [warn]"
"Modelo [aviso]"
#
"Nozzle d. [0.25]"
"Diam. nozzl[0.25]"
#
"Nozzle d. [0.40]"
"Diam. nozzl[0.40]"
#
"Nozzle d. [0.60]"
"Diam. nozzl[0.60]"
#
"Nozzle [none]"
"Nozzle [ninguno]"
#
"Nozzle [strict]"
"Nozzle [estricto]"
#
"Nozzle [warn]"
"Nozzle [aviso]"
#MSG_NOZZLE_DIAMETER
"Nozzle d."
"Diam. nozzl"
#
"G-code sliced for a different level. Continue?"
@ -1414,9 +1330,9 @@
"Sheet"
"Lamina"
#
"Sound [assist]"
"Sonido [asistido]"
#MSG_SOUND_BLIND
"Assist"
"Asistido"
#
"Steel sheets"
@ -1426,14 +1342,6 @@
"Z-correct:"
"Corregir-Z:"
#
"Z-probe nr. [1]"
"Z-sensor nr. [1]"
#
"Z-probe nr. [3]"
"Z-sensor nr. [3]"
#
"Z-probe nr. [5]"
"Z-sensor nr. [5]"
#MSG_Z_PROBE_NR
"Z-probe nr."
"Z-sensor nr."

View File

@ -50,16 +50,8 @@
"Are left and right Z~carriages all up?"
"Z~carriages gauche + droite tout en haut?"
#MSG_AUTO_DEPLETE_ON c=17 r=1
"SpoolJoin [on]"
"\x00"
#
"SpoolJoin [N/A]"
"\x00"
#MSG_AUTO_DEPLETE_OFF c=17 r=1
"SpoolJoin [off]"
#MSG_AUTO_DEPLETE c=17 r=1
"SpoolJoin"
"\x00"
#MSG_AUTO_HOME
@ -174,22 +166,14 @@
"Copy selected language?"
"Copier la langue selectionne?"
#MSG_CRASHDETECT_ON
"Crash det. [on]"
"Detect.crash [on]"
#MSG_CRASHDETECT
"Crash det."
"Detect.crash"
#
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
"Choisissez un filament pour la Calibration de la Premiere Couche et selectionnez-le depuis le menu a l'ecran."
#MSG_CRASHDETECT_NA
"Crash det. [N/A]"
"Detect.crash[N/A]"
#MSG_CRASHDETECT_OFF
"Crash det. [off]"
"Detect.crash[off]"
#MSG_CRASH_DETECTED c=20 r=1
"Crash detected."
"Crash detecte."
@ -274,18 +258,9 @@
"Fail stats MMU"
"Stat. d'echec MMU"
#MSG_FSENS_AUTOLOAD_ON c=17 r=1
"F. autoload [on]"
"Autochargeur [on]"
#MSG_FSENS_AUTOLOAD_NA c=17 r=1
"F. autoload [N/A]"
"Autochargeur[N/A]"
#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
"F. autoload [off]"
"Autochargeur[off]"
#MSG_FSENSOR_AUTOLOAD
"F. autoload"
"Autochargeur"
#
"Fail stats"
"Stat. d'echec"
@ -298,26 +273,13 @@
"Fan test"
"Test du ventilateur"
#MSG_FANS_CHECK_ON c=17 r=1
"Fans check [on]"
"Verif vent. [on]"
#MSG_FANS_CHECK_OFF c=17 r=1
"Fans check [off]"
"Verif vent. [off]"
#MSG_FSENSOR_ON
"Fil. sensor [on]"
"Capteur Fil. [on]"
#MSG_FSENSOR_NA
"Fil. sensor [N/A]"
"Capteur Fil.[N/A]"
#MSG_FSENSOR_OFF
"Fil. sensor [off]"
"Capteur Fil.[off]"
#MSG_FANS_CHECK
"Fans check"
"Verif vent."
#MSG_FSENSOR
"Fil. sensor"
"Capteur Fil."
#
"Filam. runouts"
"Fins de filament"
@ -578,13 +540,17 @@
"MMU OK. Resuming..."
"MMU OK. Reprise ..."
#MSG_STEALTH_MODE_OFF
"Mode [Normal]"
#MSG_MODE
"Mode"
"\x00"
#MSG_SILENT_MODE_ON
"Mode [silent]"
"Mode [feutre]"
#MSG_NORMAL
"Normal"
"\x00"
#MSG_SILENT
"Silent"
"Feutre"
#
"MMU needs user attention."
@ -594,17 +560,17 @@
"MMU power fails"
"Echecs alim. MMU"
#MSG_STEALTH_MODE_ON
"Mode [Stealth]"
"Mode [furtif]"
#MSG_STEALTH
"Stealth"
"Furtif"
#MSG_AUTO_MODE_ON
"Mode [auto power]"
"Mode [puiss.auto]"
#MSG_AUTO_POWER
"Auto power"
"Puiss.auto"
#MSG_SILENT_MODE_OFF
"Mode [high power]"
"Mode[haute puiss]"
#MSG_HIGH_POWER
"High power"
"Haute puiss"
#
"MMU2 connected"
@ -638,7 +604,7 @@
"No SD card"
"Pas de carte SD"
#
#MSG_NA
"N/A"
"\x00"
@ -878,25 +844,21 @@
"Right side[um]"
"Droite [um]"
#MSG_SECOND_SERIAL_ON c=17 r=1
"RPi port [on]"
"Port RPi [on]"
#MSG_SECOND_SERIAL_OFF c=17 r=1
"RPi port [off]"
"Port RPi [off]"
#MSG_RPI_PORT
"RPi port"
"Port RPi"
#MSG_WIZARD_RERUN c=20 r=7
"Running Wizard will delete current calibration results and start from the beginning. Continue?"
"Lancement de l'Assistant supprimera les resultats actuels de calibration et commencera du debut. Continuer?"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
"SD card [normal]"
"Carte SD [normal]"
#MSG_SD_CARD
"SD card"
"Carte SD"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
"SD card [flshAir]"
"Carte SD[flshAir]"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
"FlashAir"
"FlshAir"
#
"Right"
@ -958,50 +920,49 @@
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
"Certains fichiers ne seront pas tries. Max 100 fichiers tries par dossier."
#MSG_SORT_NONE c=17 r=1
"Sort [none]"
"Tri [aucun]"
#MSG_SORT
"Sort"
"Tri"
#MSG_SORT_TIME c=17 r=1
"Sort [time]"
"Tri [heure]"
#MSG_NONE
"None"
"Aucun"
#MSG_SORT_TIME
"Time"
"Heure"
#
"Severe skew:"
"Deviat.sev.:"
#MSG_SORT_ALPHA c=17 r=1
"Sort [alphabet]"
"Tri [alphabet]"
#MSG_SORT_ALPHA
"Alphabet"
"\x00"
#MSG_SORTING c=20 r=1
"Sorting files"
"Tri des fichiers"
#MSG_SOUND_LOUD c=17 r=1
"Sound [loud]"
"Son [fort]"
#MSG_SOUND_LOUD
"Loud"
"Fort"
#
"Slight skew:"
"Deviat.leg.:"
#MSG_SOUND_MUTE c=17 r=1
"Sound [mute]"
"Son [muet]"
#MSG_SOUND
"Sound"
"Son"
#
"Some problem encountered, Z-leveling enforced ..."
"Probleme rencontre, cliquez sur le bouton pour niveller l'axe Z..."
#MSG_SOUND_ONCE c=17 r=1
"Sound [once]"
"Son [une fois]"
#MSG_SOUND_SILENT c=17 r=1
"Sound [silent]"
"Son [feutre]"
#MSG_SOUND_ONCE
"Once"
"Une fois"
#MSG_SPEED
"Speed"
"Vitesse"
@ -1038,22 +999,14 @@
"Select filament:"
"Selectionnez le filament:"
#MSG_TEMP_CALIBRATION c=20 r=1
"Temp. cal. "
#MSG_TEMP_CALIBRATION c=12 r=1
"Temp. cal."
"Calib. Temp."
#MSG_TEMP_CALIBRATION_ON c=20 r=1
"Temp. cal. [on]"
"Calib. Temp. [on]"
#
"Select temperature which matches your material."
"Selectionnez la temperature qui correspond a votre materiau."
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
"Temp. cal. [off]"
"Calib. Temp.[off]"
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
"Temp. calibration"
"Calibration temp."
@ -1232,15 +1185,19 @@
#
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
"\x00"
"L'imprimante commencera a imprimer une ligne en zig-zag. Tournez le bouton jusqu'a atteindre la hauteur optimale. Consultez les photos dans le manuel (chapitre Calibration)."
#
"Y-correct:"
"Correct-Y:"
#MSG_OFF
" [off]"
" [off]"
"Off"
"\x00"
#MSG_ON
"On"
"\x00"
#
"Back"
@ -1258,17 +1215,17 @@
"FINDA:"
"FINDA:"
#
"Firmware [none]"
"Firmware [aucune]"
#MSG_FIRMWARE
"Firmware"
"\x00"
#
"Firmware [strict]"
"Firmware[stricte]"
#MSG_STRICT
"Strict"
"Stricte"
#
"Firmware [warn]"
"Firmware [avert]"
#MSG_WARN
"Warn"
"Avert"
#
"HW Setup"
@ -1278,24 +1235,12 @@
"IR:"
"IR:"
#
"Magnets comp.[N/A]"
"Compens. aim.[N/A]"
#MSG_MAGNETS_COMP
"Magnets comp."
"Compens. aim."
#
"Magnets comp.[Off]"
"Compens. aim.[off]"
#
"Magnets comp. [On]"
"Compens. aim. [on]"
#
"Mesh [3x3]"
"\x00"
#
"Mesh [7x7]"
#MSG_MESH
"Mesh"
"\x00"
#
@ -1306,53 +1251,21 @@
"MK3S firmware detected on MK3 printer"
"Firmware MK3S detecte sur imprimante MK3"
#
"MMU Mode [Normal]"
"Mode MMU [normal]"
#
"MMU Mode[Stealth]"
"Mode MMU [feutre]"
#MSG_MMU_MODE
"MMU Mode"
"Mode MMU"
#
"Mode change in progress ..."
"Changement de mode en cours..."
#
"Model [none]"
"Modele [aucune]"
#MSG_MODEL
"Model"
"Modele"
#
"Model [strict]"
"Modele [stricte]"
#
"Model [warn]"
"Modele [avert]"
#
"Nozzle d. [0.25]"
"Diam. buse [0.25]"
#
"Nozzle d. [0.40]"
"Diam. buse [0.40]"
#
"Nozzle d. [0.60]"
"Diam. buse [0.60]"
#
"Nozzle [none]"
"Buse [aucune]"
#
"Nozzle [strict]"
"Buse [stricte]"
#
"Nozzle [warn]"
"Buse [avert]"
#MSG_NOZZLE_DIAMETER
"Nozzle d."
"Diam. buse"
#
"G-code sliced for a different level. Continue?"
@ -1414,9 +1327,9 @@
"Sheet"
"Plaque"
#
"Sound [assist]"
"Son [assist]"
#MSG_SOUND_BLIND
"Assist"
"\x00"
#
"Steel sheets"
@ -1426,15 +1339,6 @@
"Z-correct:"
"Correct-Z:"
#
"Z-probe nr. [1]"
"Mesurer x-fois [1]"
#
"Z-probe nr. [3]"
"Mesurer x-fois [3]"
#
"Z-probe nr. [5]"
"Mesurer x-fois [5]"
#MSG_Z_PROBE_NR
"Z-probe nr."
"Mesurer x-fois"

View File

@ -50,16 +50,8 @@
"Are left and right Z~carriages all up?"
"I carrelli Z sin/des sono altezza max?"
#MSG_AUTO_DEPLETE_ON c=17 r=1
"SpoolJoin [on]"
"\x00"
#
"SpoolJoin [N/A]"
"\x00"
#MSG_AUTO_DEPLETE_OFF c=17 r=1
"SpoolJoin [off]"
#MSG_AUTO_DEPLETE c=17 r=1
"SpoolJoin"
"\x00"
#MSG_AUTO_HOME
@ -174,22 +166,14 @@
"Copy selected language?"
"Copiare la lingua selezionata?"
#MSG_CRASHDETECT_ON
"Crash det. [on]"
"Rileva.crash [on]"
#MSG_CRASHDETECT
"Crash det."
"Rileva.crash"
#
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
"Scegli un filamento per la calibrazione del primo strato e selezionalo nel menu sullo schermo."
#MSG_CRASHDETECT_NA
"Crash det. [N/A]"
"Rileva.crash[N/A]"
#MSG_CRASHDETECT_OFF
"Crash det. [off]"
"Rileva.crash[off]"
#MSG_CRASH_DETECTED c=20 r=1
"Crash detected."
"Rilevato impatto."
@ -274,17 +258,9 @@
"Fail stats MMU"
"Stat.fall. MMU"
#MSG_FSENS_AUTOLOAD_ON c=17 r=1
"F. autoload [on]"
"Autocar.fil. [on]"
#MSG_FSENS_AUTOLOAD_NA c=17 r=1
"F. autoload [N/A]"
"Autocar.fil.[N/A]"
#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
"F. autoload [off]"
"Autocar.fil.[off]"
#MSG_FSENSOR_AUTOLOAD
"F. autoload"
"Autocar.fil."
#
"Fail stats"
@ -298,26 +274,13 @@
"Fan test"
"Test ventola"
#MSG_FANS_CHECK_ON c=17 r=1
"Fans check [on]"
"Control.vent [on]"
#MSG_FANS_CHECK_OFF c=17 r=1
"Fans check [off]"
"Control.vent[off]"
#MSG_FSENSOR_ON
"Fil. sensor [on]"
"Sensore fil. [on]"
#MSG_FSENSOR_NA
"Fil. sensor [N/A]"
"Sensore fil.[N/A]"
#MSG_FSENSOR_OFF
"Fil. sensor [off]"
"Sensore fil.[off]"
#MSG_FANS_CHECK
"Fans check"
"Control.vent"
#MSG_FSENSOR
"Fil. sensor"
"Sensore fil."
#
"Filam. runouts"
"Filam. esauriti"
@ -578,13 +541,17 @@
"MMU OK. Resuming..."
"MMU OK. Riprendendo... "
#MSG_STEALTH_MODE_OFF
"Mode [Normal]"
"Mod. [normale]"
#MSG_MODE
"Mode"
"Mod."
#MSG_SILENT_MODE_ON
"Mode [silent]"
"Mod. [silenziosa]"
#MSG_NORMAL
"Normal"
"Normale"
#MSG_SILENT
"Silent"
"Silenzioso"
#
"MMU needs user attention."
@ -594,17 +561,17 @@
"MMU power fails"
"Manc. corr. MMU"
#MSG_STEALTH_MODE_ON
"Mode [Stealth]"
"Mod. [silenziosa]"
#MSG_STEALTH
"Stealth"
"Silenziosa"
#MSG_AUTO_MODE_ON
"Mode [auto power]"
"Mod. [auto]"
#MSG_AUTO_POWER
"Auto power"
"Auto"
#MSG_SILENT_MODE_OFF
"Mode [high power]"
"Mod. [forte]"
#MSG_HIGH_POWER
"High power"
"Forte"
#
"MMU2 connected"
@ -638,7 +605,7 @@
"No SD card"
"Nessuna SD"
#
#MSG_NA
"N/A"
"\x00"
@ -878,25 +845,21 @@
"Right side[um]"
"Destra [um]"
#MSG_SECOND_SERIAL_ON c=17 r=1
"RPi port [on]"
"Porta RPi [on]"
#MSG_SECOND_SERIAL_OFF c=17 r=1
"RPi port [off]"
"Porta RPi [off]"
#MSG_RPI_PORT
"RPi port"
"Porta RPi"
#MSG_WIZARD_RERUN c=20 r=7
"Running Wizard will delete current calibration results and start from the beginning. Continue?"
"Se avvi il Wizard perderai la calibrazione preesistente e dovrai ricominciare dall'inizio. Continuare?"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
"SD card [normal]"
"Mem. SD [normale]"
#MSG_SD_CARD
"SD card"
"Mem. SD"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
"SD card [flshAir]"
"Mem. SD [flshAir]"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
"FlashAir"
"\x00"
#
"Right"
@ -958,49 +921,49 @@
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
"Alcuni file non saranno ordinati. Il numero massimo di file in una cartella e 100 perche siano ordinati."
#MSG_SORT_NONE c=17 r=1
"Sort [none]"
"Ordina [nessuno]"
#MSG_SORT
"Sort"
"Ordina"
#MSG_SORT_TIME c=17 r=1
"Sort [time]"
"Ordina [cron.]"
#MSG_NONE
"None"
"Nessuno"
#MSG_SORT_TIME
"Time"
"Cron."
#
"Severe skew:"
"Devia.grave:"
#MSG_SORT_ALPHA c=17 r=1
"Sort [alphabet]"
"Ordine [alfabeti]"
#MSG_SORT_ALPHA
"Alphabet"
"Alfabeti"
#MSG_SORTING c=20 r=1
"Sorting files"
"Ordinando i file"
#MSG_SOUND_LOUD c=17 r=1
"Sound [loud]"
"Suono [forte]"
#MSG_SOUND_LOUD
"Loud"
"Forte"
#
"Slight skew:"
"Devia.lieve:"
#MSG_SOUND_MUTE c=17 r=1
"Sound [mute]"
"Suono [mute]"
#MSG_SOUND
"Sound"
"Suono"
#
"Some problem encountered, Z-leveling enforced ..."
"Sono stati rilevati problemi, avviato livellamento Z ..."
#MSG_SOUND_ONCE c=17 r=1
"Sound [once]"
"Suono [singolo]"
#MSG_SOUND_SILENT c=17 r=1
"Sound [silent]"
"Suono[silenzioso]"
#MSG_SOUND_ONCE
"Once"
"Singolo"
#MSG_SPEED
"Speed"
@ -1038,22 +1001,14 @@
"Select filament:"
"Seleziona il filamento:"
#MSG_TEMP_CALIBRATION c=20 r=1
"Temp. cal. "
"Calib. temp. "
#MSG_TEMP_CALIBRATION_ON c=20 r=1
"Temp. cal. [on]"
"Calib. temp. [on]"
#MSG_TEMP_CALIBRATION c=12 r=1
"Temp. cal."
"Calib. temp."
#
"Select temperature which matches your material."
"Seleziona la temperatura appropriata per il tuo materiale."
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
"Temp. cal. [off]"
"Calib. temp.[off]"
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
"Temp. calibration"
"Calib. Temp."
@ -1232,14 +1187,18 @@
#
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
"\x00"
"La stampante iniziera a stampare una linea a zig-zag. Gira la manopola fino a che non hai raggiungo l'altezza ottimale. Verifica con le immagini nel manuale (capitolo sulla calibrazione):"
#
"Y-correct:"
"Correzione-Y:"
#MSG_OFF
" [off]"
"Off"
"\x00"
#MSG_ON
"On"
"\x00"
#
@ -1258,17 +1217,17 @@
"FINDA:"
"\x00"
#
"Firmware [none]"
"Firmware[nessuno]"
#MSG_FIRMWARE
"Firmware"
"\x00"
#
"Firmware [strict]"
"Firmware [esatto]"
#MSG_STRICT
"Strict"
"Esatto"
#
"Firmware [warn]"
"Firmware [avviso]"
#MSG_WARN
"Warn"
"Avviso"
#
"HW Setup"
@ -1278,25 +1237,13 @@
"IR:"
"\x00"
#
"Magnets comp.[N/A]"
"Comp. Magneti[N/A]"
#MSG_MAGNETS_COMP
"Magnets comp."
"Comp. Magneti"
#
"Magnets comp.[Off]"
"Comp. Magneti[off]"
#
"Magnets comp. [On]"
"Comp. Magneti [on]"
#
"Mesh [3x3]"
"Griglia [3x3]"
#
"Mesh [7x7]"
"Griglia [7x7]"
#MSG_MESH
"Mesh"
"Griglia"
#
"Mesh bed leveling"
@ -1306,53 +1253,21 @@
"MK3S firmware detected on MK3 printer"
"Firmware MK3S rilevato su stampante MK3"
#
"MMU Mode [Normal]"
"Modalita MMU [Normale]"
#
"MMU Mode[Stealth]"
"Modalita MMU [Silenziosa]"
#MSG_MMU_MODE
"MMU Mode"
"Mod. MMU"
#
"Mode change in progress ..."
"Cambio modalita in corso ..."
#
"Model [none]"
"Modello [nessuno]"
#MSG_MODEL
"Model"
"Modello"
#
"Model [strict]"
"Modello [esatto]"
#
"Model [warn]"
"Modello [avviso]"
#
"Nozzle d. [0.25]"
"Diam.Ugello[0.25]"
#
"Nozzle d. [0.40]"
"Diam.Ugello[0.40]"
#
"Nozzle d. [0.60]"
"Diam.Ugello[0.60]"
#
"Nozzle [none]"
"Ugello [nessuno]"
#
"Nozzle [strict]"
"Ugello [esatto]"
#
"Nozzle [warn]"
"Ugello [avviso]"
#MSG_NOZZLE_DIAMETER
"Nozzle d."
"Diam.Ugello"
#
"G-code sliced for a different level. Continue?"
@ -1414,9 +1329,9 @@
"Sheet"
"Piano"
#
"Sound [assist]"
"Suono [assist.]"
#MSG_SOUND_BLIND
"Assist"
"Assist."
#
"Steel sheets"
@ -1426,14 +1341,6 @@
"Z-correct:"
"Correzione-Z:"
#
"Z-probe nr. [1]"
"Z-probe nr. [1]"
#
"Z-probe nr. [3]"
"Z-probe nr. [3]"
#
"Z-probe nr. [5]"
"Z-probe nr. [5]"
#MSG_Z_PROBE_NR
"Z-probe nr."
"\x00"

View File

@ -50,17 +50,9 @@
"Are left and right Z~carriages all up?"
"Obydwa konce osi sa na szczycie?"
#MSG_AUTO_DEPLETE_ON c=17 r=1
"SpoolJoin [on]"
"SpoolJoin [wl]"
#
"SpoolJoin [N/A]"
"SpoolJoin [N/D]"
#MSG_AUTO_DEPLETE_OFF c=17 r=1
"SpoolJoin [off]"
"SpoolJoin [wyl]"
#MSG_AUTO_DEPLETE c=17 r=1
"SpoolJoin"
"\x00"
#MSG_AUTO_HOME
"Auto home"
@ -175,21 +167,13 @@
"Skopiowac wybrany jezyk?"
#MSG_CRASHDETECT_ON
"Crash det. [on]"
"Wykr.zderzen [wl]"
"Crash det."
"Wykr.zderzen"
#
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
"Wybierz filament do Kalibracji Pierwszej Warstwy i potwierdz w menu ekranowym."
#MSG_CRASHDETECT_NA
"Crash det. [N/A]"
"Wykr.zderzen[N/D]"
#MSG_CRASHDETECT_OFF
"Crash det. [off]"
"Wykr.zderzen[wyl]"
#MSG_CRASH_DETECTED c=20 r=1
"Crash detected."
"Zderzenie wykryte"
@ -274,17 +258,9 @@
"Fail stats MMU"
"Bledy MMU"
#MSG_FSENS_AUTOLOAD_ON c=17 r=1
"F. autoload [on]"
"Autolad.fil. [wl]"
#MSG_FSENS_AUTOLOAD_NA c=17 r=1
"F. autoload [N/A]"
"Autolad.fil.[N/D]"
#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
"F. autoload [off]"
"Autolad.fil.[wyl]"
#MSG_FSENSOR_AUTOLOAD
"F. autoload"
"Autolad. fil."
#
"Fail stats"
@ -298,25 +274,13 @@
"Fan test"
"Test wentylatora"
#MSG_FANS_CHECK_ON c=17 r=1
"Fans check [on]"
"Sprawd.went. [wl]"
#MSG_FANS_CHECK
"Fans check"
"Sprawd.went."
#MSG_FANS_CHECK_OFF c=17 r=1
"Fans check [off]"
"Sprawd.went.[wyl]"
#MSG_FSENSOR_ON
"Fil. sensor [on]"
"Czuj. filam. [wl]"
#MSG_FSENSOR_NA
"Fil. sensor [N/A]"
"Czuj. filam.[N/D]"
#MSG_FSENSOR_OFF
"Fil. sensor [off]"
"Czuj. filam.[wyl]"
#MSG_FSENSOR
"Fil. sensor"
"Czuj. filam."
#
"Filam. runouts"
@ -578,13 +542,17 @@
"MMU OK. Resuming..."
"MMU OK. Wznawianie..."
#MSG_STEALTH_MODE_OFF
"Mode [Normal]"
"Tryb [normalny]"
#MSG_MODE
"Mode"
"Tryb"
#MSG_SILENT_MODE_ON
"Mode [silent]"
"Tryb [cichy]"
#MSG_NORMAL
"Normal"
"Normalny"
#MSG_SILENT
"Silent"
"Cichy"
#
"MMU needs user attention."
@ -594,17 +562,17 @@
"MMU power fails"
"Zaniki zasil. MMU"
#MSG_STEALTH_MODE_ON
"Mode [Stealth]"
"Tryb [cichy]"
#MSG_STEALTH
"Stealth"
"Cichy"
#MSG_AUTO_MODE_ON
"Mode [auto power]"
"Tryb [automatycz]"
#MSG_AUTO_POWER
"Auto power"
"Automatycz"
#MSG_SILENT_MODE_OFF
"Mode [high power]"
"Tryb[wysoka wyd.]"
#MSG_HIGH_POWER
"High power"
"Wysoka wyd."
#
"MMU2 connected"
@ -638,7 +606,7 @@
"No SD card"
"Brak karty SD"
#
#MSG_NA
"N/A"
"N/D"
@ -878,25 +846,21 @@
"Right side[um]"
"Prawo [um]"
#MSG_SECOND_SERIAL_ON c=17 r=1
"RPi port [on]"
"Port RPi [wl]"
#MSG_SECOND_SERIAL_OFF c=17 r=1
"RPi port [off]"
"Port RPi [wyl]"
#MSG_RPI_PORT
"RPi port"
"Port RPi"
#MSG_WIZARD_RERUN c=20 r=7
"Running Wizard will delete current calibration results and start from the beginning. Continue?"
"Wlaczenie Asystenta usunie obecne dane kalibracyjne i zacznie od poczatku. Kontynuowac?"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
"SD card [normal]"
"Karta SD [normal]"
#MSG_SD_CARD
"SD card"
"Karta SD"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
"SD card [flshAir]"
"Karta SD[FlshAir]"
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
"FlashAir"
"\x00"
#
"Right"
@ -958,50 +922,49 @@
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
"Niektore pliki nie zostana posortowane. Max. liczba plikow w 1 folderze = 100."
#MSG_SORT_NONE c=17 r=1
"Sort [none]"
"Sortowanie [brak]"
#MSG_SORT
"Sort"
"Sortowanie"
#MSG_SORT_TIME c=17 r=1
"Sort [time]"
"Sortowanie [czas]"
#MSG_NONE
"None"
"Brak"
#MSG_SORT_TIME
"Time"
"Czas"
#
"Severe skew:"
"Znaczny skos:"
#MSG_SORT_ALPHA c=17 r=1
"Sort [alphabet]"
"Sortowanie[alfab]"
#MSG_SORT_ALPHA
"Alphabet"
"Alfab"
#MSG_SORTING c=20 r=1
"Sorting files"
"Sortowanie plikow"
#MSG_SOUND_LOUD c=17 r=1
"Sound [loud]"
"Dzwiek [glosny]"
#MSG_SOUND_LOUD
"Loud"
"Glosny"
#
"Slight skew:"
"Lekki skos:"
#MSG_SOUND_MUTE c=17 r=1
"Sound [mute]"
"Dzwiek[wylaczony]"
#MSG_SOUND
"Sound"
"Dzwiek"
#
"Some problem encountered, Z-leveling enforced ..."
"Wykryto problem, wymuszono poziomowanie osi Z."
#MSG_SOUND_ONCE c=17 r=1
"Sound [once]"
"Dzwiek [1-raz]"
#MSG_SOUND_SILENT c=17 r=1
"Sound [silent]"
"Dzwiek [cichy]"
#MSG_SOUND_ONCE
"Once"
"1-raz"
#MSG_SPEED
"Speed"
"Predkosc"
@ -1038,22 +1001,14 @@
"Select filament:"
"Wybierz filament:"
#MSG_TEMP_CALIBRATION c=20 r=1
"Temp. cal. "
#MSG_TEMP_CALIBRATION c=12 r=1
"Temp. cal."
"Kalibracja temp."
#MSG_TEMP_CALIBRATION_ON c=20 r=1
"Temp. cal. [on]"
"Kalibr.temp. [wl]"
#
"Select temperature which matches your material."
"Wybierz temperature, ktora odpowiada Twojemu filamentowi."
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
"Temp. cal. [off]"
"Kalibr.temp.[wyl]"
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
"Temp. calibration"
"Kalibracja temp."
@ -1232,15 +1187,19 @@
#
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
"\x00"
"Drukarka zacznie drukowanie linii w ksztalcie zygzaka. Ustaw optymalna wysokosc obracajac pokretlo. Porownaj z ilustracjami w Podreczniku (rozdzial Kalibracja)."
#
"Y-correct:"
"Korekcja-Y:"
#MSG_OFF
" [off]"
" [wyl]"
"Off"
"Wyl"
#MSG_ON
"On"
"Wl"
#
"Back"
@ -1258,17 +1217,17 @@
"FINDA:"
"\x00"
#
"Firmware [none]"
"Firmware [brak]"
#MSG_FIRMWARE
"Firmware"
"\x00"
#
"Firmware [strict]"
"Firmware [restr.]"
#MSG_STRICT
"Strict"
"Restr."
#
"Firmware [warn]"
"Firmware[ostrzez]"
#MSG_WARN
"Warn"
"Ostrzez"
#
"HW Setup"
@ -1278,25 +1237,13 @@
"IR:"
"\x00"
#
"Magnets comp.[N/A]"
"Kor. magnesow[N/D]"
#MSG_MAGNETS_COMP
"Magnets comp."
"Kor. magnesow"
#
"Magnets comp.[Off]"
"Kor. magnesow[wyl]"
#
"Magnets comp. [On]"
"Kor. magnesow [wl]"
#
"Mesh [3x3]"
"Siatka [3x3]"
#
"Mesh [7x7]"
"Siatka [7x7]"
#MSG_MESH
"Mesh"
"Siatka"
#
"Mesh bed leveling"
@ -1306,53 +1253,21 @@
"MK3S firmware detected on MK3 printer"
"Wykryto firmware MK3S w drukarce MK3"
#
"MMU Mode [Normal]"
"Tryb MMU[Normaln]"
#
"MMU Mode[Stealth]"
"Tryb MMU[Stealth]"
#MSG_MMU_MODE
"MMU Mode"
"Tryb MMU"
#
"Mode change in progress ..."
"Trwa zmiana trybu..."
#
"Model [none]"
"Model [brak]"
#MSG_MODEL
"Model"
"\x00"
#
"Model [strict]"
"Model [restrykc.]"
#
"Model [warn]"
"Model [ostrzez.]"
#
"Nozzle d. [0.25]"
"Sr. dyszy [0,25]"
#
"Nozzle d. [0.40]"
"Sr. dyszy [0,40]"
#
"Nozzle d. [0.60]"
"Sr. dyszy [0,60]"
#
"Nozzle [none]"
"Dysza [brak]"
#
"Nozzle [strict]"
"Dysza [restrykc.]"
#
"Nozzle [warn]"
"Dysza [ostrzez.]"
#MSG_NOZZLE_DIAMETER
"Nozzle d."
"Sr. dyszy"
#
"G-code sliced for a different level. Continue?"
@ -1414,9 +1329,9 @@
"Sheet"
"Plyta"
#
"Sound [assist]"
"Dzwiek [asyst.]"
#MSG_SOUND_BLIND
"Assist"
"Asyst."
#
"Steel sheets"
@ -1426,14 +1341,6 @@
"Z-correct:"
"Korekcja-Z:"
#
"Z-probe nr. [1]"
"Ilosc Pomiarow [1]"
#
"Z-probe nr. [3]"
"Ilosc Pomiarow [3]"
#
"Z-probe nr. [5]"
"Ilosc Pomiarow [5]"
#MSG_Z_PROBE_NR
"Z-probe nr."
"Ilosc Pomiarow"