Merge branch 'MK3' into PFW-1171-EEPROM_SN

This commit is contained in:
Voinea Dragos 2021-01-31 17:19:00 +02:00
commit ea44d78d68
61 changed files with 15314 additions and 15221 deletions

View File

@ -63,12 +63,18 @@
#define FAN_KICKSTART_TIME 800 #define FAN_KICKSTART_TIME 800
/** /**
* Auto-report temperatures with M155 S<seconds> * Auto-report all at once with M155 S<seconds> C[bitmask] with single timer
*/ *
#define AUTO_REPORT_TEMPERATURES * bit 0 = Auto-report temperatures
* bit 1 = Auto-report fans
* bit 2 = Auto-report position
* bit 3 = free
* bit 4 = free
* bit 5 = free
* bit 6 = free
* bit 7 = free
*/
#define AUTO_REPORT
//=========================================================================== //===========================================================================
//=============================Mechanical Settings=========================== //=============================Mechanical Settings===========================

View File

@ -204,7 +204,7 @@ extern float axis_steps_per_unit[NUM_AXIS];
*/ */
void dcode__1() void dcode__1()
{ {
printf_P(PSTR("D-1 - Endless loop\n")); DBG(_N("D-1 - Endless loop\n"));
// cli(); // cli();
while (1); while (1);
} }
@ -380,7 +380,7 @@ void dcode_4()
*/ */
void dcode_5() void dcode_5()
{ {
printf_P(PSTR("D5 - Read/Write FLASH\n")); puts_P(PSTR("D5 - Read/Write FLASH"));
uint32_t address = 0x0000; //default 0x0000 uint32_t address = 0x0000; //default 0x0000
uint16_t count = 0x0400; //default 0x0400 (1kb block) uint16_t count = 0x0400; //default 0x0400 (1kb block)
if (code_seen('A')) // Address (0x00000-0x3ffff) if (code_seen('A')) // Address (0x00000-0x3ffff)
@ -481,7 +481,7 @@ void dcode_7()
*/ */
void dcode_8() void dcode_8()
{ {
printf_P(PSTR("D8 - Read/Write PINDA\n")); puts_P(PSTR("D8 - Read/Write PINDA"));
uint8_t cal_status = calibration_status_pinda(); uint8_t cal_status = calibration_status_pinda();
float temp_pinda = current_temperature_pinda; float temp_pinda = current_temperature_pinda;
float offset_z = temp_compensation_pinda_thermistor_offset(temp_pinda); float offset_z = temp_compensation_pinda_thermistor_offset(temp_pinda);
@ -587,7 +587,7 @@ uint16_t dcode_9_ADC_val(uint8_t i)
void dcode_9() void dcode_9()
{ {
printf_P(PSTR("D9 - Read/Write ADC\n")); puts_P(PSTR("D9 - Read/Write ADC"));
if ((strchr_pointer[1+1] == '?') || (strchr_pointer[1+1] == 0)) if ((strchr_pointer[1+1] == '?') || (strchr_pointer[1+1] == 0))
{ {
for (uint8_t i = 0; i < ADC_CHAN_CNT; i++) for (uint8_t i = 0; i < ADC_CHAN_CNT; i++)
@ -784,7 +784,7 @@ extern void st_synchronize();
*/ */
void dcode_2130() void dcode_2130()
{ {
printf_P(PSTR("D2130 - TMC2130\n")); puts_P(PSTR("D2130 - TMC2130"));
uint8_t axis = 0xff; uint8_t axis = 0xff;
switch (strchr_pointer[1+4]) switch (strchr_pointer[1+4])
{ {

View File

@ -289,6 +289,7 @@ extern float min_pos[3];
extern float max_pos[3]; extern float max_pos[3];
extern bool axis_known_position[3]; extern bool axis_known_position[3];
extern int fanSpeed; extern int fanSpeed;
extern uint8_t newFanSpeed;
extern int8_t lcd_change_fil_state; extern int8_t lcd_change_fil_state;
extern float default_retraction; extern float default_retraction;
@ -480,6 +481,9 @@ void force_high_power_mode(bool start_high_power_section);
bool gcode_M45(bool onlyZ, int8_t verbosity_level); bool gcode_M45(bool onlyZ, int8_t verbosity_level);
void gcode_M114(); void gcode_M114();
#if (defined(FANCHECK) && (((defined(TACH_0) && (TACH_0 >-1)) || (defined(TACH_1) && (TACH_1 > -1)))))
void gcode_M123();
#endif //FANCHECK and TACH_0 and TACH_1
void gcode_M701(); void gcode_M701();
#define UVLO !(PINE & (1<<4)) #define UVLO !(PINE & (1<<4))

View File

@ -255,7 +255,7 @@ void MarlinSerial::print(double n, int digits)
void MarlinSerial::println(void) void MarlinSerial::println(void)
{ {
print('\r'); // print('\r');
print('\n'); print('\n');
} }
@ -359,7 +359,7 @@ void MarlinSerial::printFloat(double number, uint8_t digits)
// Print the decimal point, but only if there are digits beyond // Print the decimal point, but only if there are digits beyond
if (digits > 0) if (digits > 0)
print("."); print('.');
// Extract digits from the remainder one at a time // Extract digits from the remainder one at a time
while (digits-- > 0) while (digits-- > 0)

View File

@ -270,6 +270,7 @@ float extruder_offset[NUM_EXTRUDER_OFFSETS][EXTRUDERS] = {
uint8_t active_extruder = 0; uint8_t active_extruder = 0;
int fanSpeed=0; int fanSpeed=0;
uint8_t newFanSpeed = 0;
#ifdef FWRETRACT #ifdef FWRETRACT
bool retracted[EXTRUDERS]={false bool retracted[EXTRUDERS]={false
@ -307,6 +308,7 @@ uint8_t host_keepalive_interval = HOST_KEEPALIVE_INTERVAL;
const char errormagic[] PROGMEM = "Error:"; const char errormagic[] PROGMEM = "Error:";
const char echomagic[] PROGMEM = "echo:"; const char echomagic[] PROGMEM = "echo:";
const char G28W0[] PROGMEM = "G28 W0";
bool no_response = false; bool no_response = false;
uint8_t important_status; uint8_t important_status;
@ -389,10 +391,58 @@ static int saved_fanSpeed = 0; //!< Print fan speed
static int saved_feedmultiply_mm = 100; static int saved_feedmultiply_mm = 100;
#ifdef AUTO_REPORT_TEMPERATURES class AutoReportFeatures {
static LongTimer auto_report_temp_timer; union {
static uint8_t auto_report_temp_period = 0; struct {
#endif //AUTO_REPORT_TEMPERATURES uint8_t temp : 1; //Temperature flag
uint8_t fans : 1; //Fans flag
uint8_t pos: 1; //Position flag
uint8_t ar4 : 1; //Unused
uint8_t ar5 : 1; //Unused
uint8_t ar6 : 1; //Unused
uint8_t ar7 : 1; //Unused
} __attribute__((packed)) bits;
uint8_t byte;
} arFunctionsActive;
uint8_t auto_report_period;
public:
LongTimer auto_report_timer;
AutoReportFeatures():auto_report_period(0){
#if defined(AUTO_REPORT)
arFunctionsActive.byte = 0xff;
#else
arFunctionsActive.byte = 0;
#endif //AUTO_REPORT
}
inline bool Temp()const { return arFunctionsActive.bits.temp != 0; }
inline void SetTemp(uint8_t v){ arFunctionsActive.bits.temp = v; }
inline bool Fans()const { return arFunctionsActive.bits.fans != 0; }
inline void SetFans(uint8_t v){ arFunctionsActive.bits.fans = v; }
inline bool Pos()const { return arFunctionsActive.bits.pos != 0; }
inline void SetPos(uint8_t v){ arFunctionsActive.bits.pos = v; }
inline void SetMask(uint8_t mask){ arFunctionsActive.byte = mask; }
/// sets the autoreporting timer's period
/// setting it to zero stops the timer
void SetPeriod(uint8_t p){
auto_report_period = p;
if (auto_report_period != 0){
auto_report_timer.start();
} else{
auto_report_timer.stop();
}
}
inline void TimerStart() { auto_report_timer.start(); }
inline bool TimerRunning()const { return auto_report_timer.running(); }
inline bool TimerExpired() { return auto_report_timer.expired(auto_report_period * 1000ul); }
};
AutoReportFeatures autoReportFeatures;
//=========================================================================== //===========================================================================
//=============================Routines====================================== //=============================Routines======================================
@ -715,10 +765,8 @@ static void factory_reset(char level)
// Force the "Follow calibration flow" message at the next boot up. // Force the "Follow calibration flow" message at the next boot up.
calibration_status_store(CALIBRATION_STATUS_Z_CALIBRATION); calibration_status_store(CALIBRATION_STATUS_Z_CALIBRATION);
eeprom_write_byte((uint8_t*)EEPROM_WIZARD_ACTIVE, 1); //run wizard eeprom_write_byte((uint8_t*)EEPROM_WIZARD_ACTIVE, 1); //run wizard
farm_no = 0;
farm_mode = false; farm_mode = false;
eeprom_update_byte((uint8_t*)EEPROM_FARM_MODE, farm_mode); eeprom_update_byte((uint8_t*)EEPROM_FARM_MODE, farm_mode);
EEPROM_save_B(EEPROM_FARM_NUMBER, &farm_no);
eeprom_update_dword((uint32_t *)EEPROM_TOTALTIME, 0); eeprom_update_dword((uint32_t *)EEPROM_TOTALTIME, 0);
eeprom_update_dword((uint32_t *)EEPROM_FILAMENTUSED, 0); eeprom_update_dword((uint32_t *)EEPROM_FILAMENTUSED, 0);
@ -970,10 +1018,10 @@ uint8_t lang_xflash_enum_codes(uint16_t* codes)
w25x20cl_rd_data(addr, (uint8_t*)&header, sizeof(lang_table_header_t)); w25x20cl_rd_data(addr, (uint8_t*)&header, sizeof(lang_table_header_t));
if (header.magic != LANG_MAGIC) if (header.magic != LANG_MAGIC)
{ {
printf_P(_n("NG!\n")); puts_P(_n("NG!"));
break; break;
} }
printf_P(_n("OK\n")); puts_P(_n("OK"));
printf_P(_n(" _lt_magic = 0x%08lx %S\n"), header.magic, (header.magic==LANG_MAGIC)?_n("OK"):_n("NA")); printf_P(_n(" _lt_magic = 0x%08lx %S\n"), header.magic, (header.magic==LANG_MAGIC)?_n("OK"):_n("NA"));
printf_P(_n(" _lt_size = 0x%04x (%d)\n"), header.size, header.size); printf_P(_n(" _lt_size = 0x%04x (%d)\n"), header.size, header.size);
printf_P(_n(" _lt_count = 0x%04x (%d)\n"), header.count, header.count); printf_P(_n(" _lt_count = 0x%04x (%d)\n"), header.count, header.count);
@ -1054,16 +1102,16 @@ void setup()
setup_powerhold(); setup_powerhold();
farm_mode = eeprom_read_byte((uint8_t*)EEPROM_FARM_MODE); farm_mode = eeprom_read_byte((uint8_t*)EEPROM_FARM_MODE);
EEPROM_read_B(EEPROM_FARM_NUMBER, &farm_no); if (farm_mode == 0xFF)
if ((farm_mode == 0xFF && farm_no == 0) || ((uint16_t)farm_no == 0xFFFF))
farm_mode = false; //if farm_mode has not been stored to eeprom yet and farm number is set to zero or EEPROM is fresh, deactivate farm mode farm_mode = false; //if farm_mode has not been stored to eeprom yet and farm number is set to zero or EEPROM is fresh, deactivate farm mode
if ((uint16_t)farm_no == 0xFFFF) farm_no = 0;
if (farm_mode) if (farm_mode)
{ {
no_response = true; //we need confirmation by recieving PRUSA thx no_response = true; //we need confirmation by recieving PRUSA thx
important_status = 8; important_status = 8;
prusa_statistics(8); prusa_statistics(8);
#ifdef HAS_SECOND_SERIAL_PORT
selectedSerialPort = 1; selectedSerialPort = 1;
#endif //HAS_SECOND_SERIAL_PORT
MYSERIAL.begin(BAUDRATE); MYSERIAL.begin(BAUDRATE);
#ifdef TMC2130 #ifdef TMC2130
//increased extruder current (PFW363) //increased extruder current (PFW363)
@ -1101,7 +1149,7 @@ void setup()
SERIAL_PROTOCOLLNPGM("start"); SERIAL_PROTOCOLLNPGM("start");
#endif #endif
SERIAL_ECHO_START; SERIAL_ECHO_START;
printf_P(PSTR(" " FW_VERSION_FULL "\n")); puts_P(PSTR(" " FW_VERSION_FULL));
//SERIAL_ECHOPAIR("Active sheet before:", static_cast<unsigned long int>(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))); //SERIAL_ECHOPAIR("Active sheet before:", static_cast<unsigned long int>(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet))));
@ -1191,12 +1239,12 @@ void setup()
printf_P(_n("_SEC_LANG_TABLE checksum = %04x\n"), sum); printf_P(_n("_SEC_LANG_TABLE checksum = %04x\n"), sum);
sum = (sum >> 8) | ((sum & 0xff) << 8); //swap bytes sum = (sum >> 8) | ((sum & 0xff) << 8); //swap bytes
if (sum == header.checksum) if (sum == header.checksum)
printf_P(_n("Checksum OK\n"), sum); puts_P(_n("Checksum OK"), sum);
else else
printf_P(_n("Checksum NG\n"), sum); puts_P(_n("Checksum NG"), sum);
} }
else else
printf_P(_n("lang_get_header failed!\n")); puts_P(_n("lang_get_header failed!"));
#if 0 #if 0
for (uint16_t i = 0; i < 1024*10; i++) for (uint16_t i = 0; i < 1024*10; i++)
@ -1276,7 +1324,7 @@ void setup()
else else
{ {
w25x20cl_err_msg(); w25x20cl_err_msg();
printf_P(_n("W25X20CL not responding.\n")); puts_P(_n("W25X20CL not responding."));
} }
#ifdef EXTRUDER_ALTFAN_DETECT #ifdef EXTRUDER_ALTFAN_DETECT
SERIAL_ECHORPGM(_n("Extruder fan type: ")); SERIAL_ECHORPGM(_n("Extruder fan type: "));
@ -1389,9 +1437,7 @@ void setup()
#endif #endif
farm_mode = eeprom_read_byte((uint8_t*)EEPROM_FARM_MODE); farm_mode = eeprom_read_byte((uint8_t*)EEPROM_FARM_MODE);
EEPROM_read_B(EEPROM_FARM_NUMBER, &farm_no); if (farm_mode == 0xFF) farm_mode = false; //if farm_mode has not been stored to eeprom yet and farm number is set to zero or EEPROM is fresh, deactivate farm mode
if ((farm_mode == 0xFF && farm_no == 0) || (farm_no == static_cast<int>(0xFFFF))) farm_mode = false; //if farm_mode has not been stored to eeprom yet and farm number is set to zero or EEPROM is fresh, deactivate farm mode
if (farm_no == static_cast<int>(0xFFFF)) farm_no = 0;
if (farm_mode) if (farm_mode)
{ {
prusa_statistics(8); prusa_statistics(8);
@ -1749,16 +1795,26 @@ void host_keepalive() {
if (farm_mode) return; if (farm_mode) return;
long ms = _millis(); long ms = _millis();
#ifdef AUTO_REPORT_TEMPERATURES #if defined(AUTO_REPORT)
if (auto_report_temp_timer.running())
{ {
if (auto_report_temp_timer.expired(auto_report_temp_period * 1000ul)) if (autoReportFeatures.TimerExpired())
{ {
gcode_M105(active_extruder); if(autoReportFeatures.Temp()){
auto_report_temp_timer.start(); gcode_M105(active_extruder);
}
if(autoReportFeatures.Pos()){
gcode_M114();
}
#if defined(AUTO_REPORT) && (defined(FANCHECK) && (((defined(TACH_0) && (TACH_0 >-1)) || (defined(TACH_1) && (TACH_1 > -1)))))
if(autoReportFeatures.Fans()){
gcode_M123();
}
#endif //AUTO_REPORT and (FANCHECK and TACH_0 or TACH_1)
autoReportFeatures.TimerStart();
} }
} }
#endif //AUTO_REPORT_TEMPERATURES #endif //AUTO_REPORT
if (host_keepalive_interval && busy_state != NOT_BUSY) { if (host_keepalive_interval && busy_state != NOT_BUSY) {
if ((ms - prev_busy_signal_ms) < (long)(1000L * host_keepalive_interval)) return; if ((ms - prev_busy_signal_ms) < (long)(1000L * host_keepalive_interval)) return;
@ -2145,7 +2201,7 @@ bool check_commands() {
while (buflen) while (buflen)
{ {
if ((code_seen("M84")) || (code_seen("M 84"))) end_command_found = true; if ((code_seen_P(PSTR("M84"))) || (code_seen_P(PSTR("M 84")))) end_command_found = true;
if (!cmdbuffer_front_already_processed) if (!cmdbuffer_front_already_processed)
cmdqueue_pop_front(); cmdqueue_pop_front();
cmdbuffer_front_already_processed = false; cmdbuffer_front_already_processed = false;
@ -2649,7 +2705,7 @@ void gcode_M105(uint8_t extruder)
} }
} }
#endif #endif
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
} }
#ifdef TMC2130 #ifdef TMC2130
@ -3182,9 +3238,16 @@ void gcode_M114()
SERIAL_PROTOCOLPGM(" E:"); SERIAL_PROTOCOLPGM(" E:");
SERIAL_PROTOCOL(float(st_get_position(E_AXIS)) / cs.axis_steps_per_unit[E_AXIS]); SERIAL_PROTOCOL(float(st_get_position(E_AXIS)) / cs.axis_steps_per_unit[E_AXIS]);
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
} }
#if (defined(FANCHECK) && (((defined(TACH_0) && (TACH_0 >-1)) || (defined(TACH_1) && (TACH_1 > -1)))))
void gcode_M123()
{
printf_P(_N("E0:%d RPM PRN1:%d RPM E0@:%u PRN1@:%d\n"), 60*fan_speed[active_extruder], 60*fan_speed[1], newFanSpeed, fanSpeed);
}
#endif //FANCHECK and TACH_0 or TACH_1
//! extracted code to compute z_shift for M600 in case of filament change operation //! extracted code to compute z_shift for M600 in case of filament change operation
//! requested from fsensors. //! requested from fsensors.
//! The function ensures, that the printhead lifts to at least 25mm above the heat bed //! The function ensures, that the printhead lifts to at least 25mm above the heat bed
@ -3266,8 +3329,7 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float
if (lcd_change_fil_state == 0) if (lcd_change_fil_state == 0)
{ {
lcd_clear(); lcd_clear();
lcd_set_cursor(0, 2); lcd_puts_at_P(0, 2, _T(MSG_PLEASE_WAIT));
lcd_puts_P(_T(MSG_PLEASE_WAIT));
current_position[X_AXIS] -= 100; current_position[X_AXIS] -= 100;
plan_buffer_line_curposXYZE(FILAMENTCHANGE_XYFEED); plan_buffer_line_curposXYZE(FILAMENTCHANGE_XYFEED);
st_synchronize(); st_synchronize();
@ -3283,8 +3345,7 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float
if (saved_printing) { if (saved_printing) {
lcd_clear(); lcd_clear();
lcd_set_cursor(0, 2); lcd_puts_at_P(0, 2, _T(MSG_PLEASE_WAIT));
lcd_puts_P(_T(MSG_PLEASE_WAIT));
mmu_command(MmuCmd::R0); mmu_command(MmuCmd::R0);
manage_response(false, false); manage_response(false, false);
@ -3535,8 +3596,15 @@ static void cap_line(const char* name, bool ena = false) {
static void extended_capabilities_report() static void extended_capabilities_report()
{ {
cap_line(PSTR("AUTOREPORT_TEMP"), ENABLED(AUTO_REPORT_TEMPERATURES)); // AUTOREPORT_TEMP (M155)
//@todo cap_line(PSTR("AUTOREPORT_TEMP"), ENABLED(AUTO_REPORT));
#if (defined(FANCHECK) && (((defined(TACH_0) && (TACH_0 >-1)) || (defined(TACH_1) && (TACH_1 > -1)))))
// AUTOREPORT_FANS (M123)
cap_line(PSTR("AUTOREPORT_FANS"), ENABLED(AUTO_REPORT));
#endif //FANCHECK and TACH_0 or TACH_1
// AUTOREPORT_POSITION (M114)
cap_line(PSTR("AUTOREPORT_POSITION"), ENABLED(AUTO_REPORT));
//@todo Update RepRap cap
} }
#endif //EXTENDED_CAPABILITIES_REPORT #endif //EXTENDED_CAPABILITIES_REPORT
@ -3626,13 +3694,14 @@ extern uint8_t st_backlash_y;
//!@n M115 - Capabilities string //!@n M115 - Capabilities string
//!@n M117 - display message //!@n M117 - display message
//!@n M119 - Output Endstop status to serial port //!@n M119 - Output Endstop status to serial port
//!@n M123 - Tachometer value
//!@n M126 - Solenoid Air Valve Open (BariCUDA support by jmil) //!@n M126 - Solenoid Air Valve Open (BariCUDA support by jmil)
//!@n M127 - Solenoid Air Valve Closed (BariCUDA vent to atmospheric pressure by jmil) //!@n M127 - Solenoid Air Valve Closed (BariCUDA vent to atmospheric pressure by jmil)
//!@n M128 - EtoP Open (BariCUDA EtoP = electricity to air pressure transducer by jmil) //!@n M128 - EtoP Open (BariCUDA EtoP = electricity to air pressure transducer by jmil)
//!@n M129 - EtoP Closed (BariCUDA EtoP = electricity to air pressure transducer by jmil) //!@n M129 - EtoP Closed (BariCUDA EtoP = electricity to air pressure transducer by jmil)
//!@n M140 - Set bed target temp //!@n M140 - Set bed target temp
//!@n M150 - Set BlinkM Color Output R: Red<0-255> U(!): Green<0-255> B: Blue<0-255> over i2c, G for green does not work. //!@n M150 - Set BlinkM Color Output R: Red<0-255> U(!): Green<0-255> B: Blue<0-255> over i2c, G for green does not work.
//!@n M155 - Automatically send temperatures //!@n M155 - Automatically send temperatures, fan speeds, position
//!@n M190 - Sxxx Wait for bed current temp to reach target temp. Waits only when heating //!@n M190 - Sxxx Wait for bed current temp to reach target temp. Waits only when heating
//! Rxxx Wait for bed current temp to reach target temp. Waits when heating and cooling //! Rxxx Wait for bed current temp to reach target temp. Waits when heating and cooling
//!@n M200 D<millimeters>- set filament diameter and set E axis units to cubic millimeters (use S0 to set back to millimeters). //!@n M200 D<millimeters>- set filament diameter and set E axis units to cubic millimeters (use S0 to set back to millimeters).
@ -3753,7 +3822,7 @@ void process_commands()
- TMC_SET_STEP - TMC_SET_STEP
- TMC_SET_CHOP - TMC_SET_CHOP
*/ */
if (code_seen("M117")) { //moved to highest priority place to be able to to print strings which includes "G", "PRUSA" and "^" if (code_seen_P(PSTR("M117"))) { //moved to highest priority place to be able to to print strings which includes "G", "PRUSA" and "^"
starpos = (strchr(strchr_pointer + 5, '*')); starpos = (strchr(strchr_pointer + 5, '*'));
if (starpos != NULL) if (starpos != NULL)
*(starpos) = '\0'; *(starpos) = '\0';
@ -3766,7 +3835,7 @@ void process_commands()
// ### CRASH_DETECTED - TMC2130 // ### CRASH_DETECTED - TMC2130
// --------------------------------- // ---------------------------------
if(code_seen("CRASH_DETECTED")) if(code_seen_P(PSTR("CRASH_DETECTED")))
{ {
uint8_t mask = 0; uint8_t mask = 0;
if (code_seen('X')) mask |= X_AXIS_MASK; if (code_seen('X')) mask |= X_AXIS_MASK;
@ -3776,12 +3845,12 @@ void process_commands()
// ### CRASH_RECOVER - TMC2130 // ### CRASH_RECOVER - TMC2130
// ---------------------------------- // ----------------------------------
else if(code_seen("CRASH_RECOVER")) else if(code_seen_P(PSTR("CRASH_RECOVER")))
crashdet_recover(); crashdet_recover();
// ### CRASH_CANCEL - TMC2130 // ### CRASH_CANCEL - TMC2130
// ---------------------------------- // ----------------------------------
else if(code_seen("CRASH_CANCEL")) else if(code_seen_P(PSTR("CRASH_CANCEL")))
crashdet_cancel(); crashdet_cancel();
} }
else if (strncmp_P(CMDBUFFER_CURRENT_STRING, PSTR("TMC_"), 4) == 0) else if (strncmp_P(CMDBUFFER_CURRENT_STRING, PSTR("TMC_"), 4) == 0)
@ -3867,7 +3936,7 @@ void process_commands()
} }
#endif //BACKLASH_Y #endif //BACKLASH_Y
#endif //TMC2130 #endif //TMC2130
else if(code_seen("PRUSA")){ else if(code_seen_P(PSTR("PRUSA"))){
/*! /*!
--------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
### PRUSA - Internal command set <a href="https://reprap.org/wiki/G-code#G98:_Activate_farm_mode">G98: Activate farm mode - Notes</a> ### PRUSA - Internal command set <a href="https://reprap.org/wiki/G-code#G98:_Activate_farm_mode">G98: Activate farm mode - Notes</a>
@ -3900,56 +3969,43 @@ void process_commands()
*/ */
if (code_seen("Ping")) { // PRUSA Ping if (code_seen_P(PSTR("Ping"))) { // PRUSA Ping
if (farm_mode) { if (farm_mode) {
PingTime = _millis(); PingTime = _millis();
//MYSERIAL.print(farm_no); MYSERIAL.println(": OK");
} }
} }
else if (code_seen("PRN")) { // PRUSA PRN else if (code_seen_P(PSTR("PRN"))) { // PRUSA PRN
printf_P(_N("%d"), status_number); printf_P(_N("%d"), status_number);
} else if( code_seen("FANPINTST") ){ } else if( code_seen_P(PSTR("FANPINTST"))){
gcode_PRUSA_BadRAMBoFanTest(); gcode_PRUSA_BadRAMBoFanTest();
}else if (code_seen("FAN")) { // PRUSA FAN }else if (code_seen_P(PSTR("FAN"))) { // PRUSA FAN
printf_P(_N("E0:%d RPM\nPRN0:%d RPM\n"), 60*fan_speed[0], 60*fan_speed[1]); printf_P(_N("E0:%d RPM\nPRN0:%d RPM\n"), 60*fan_speed[0], 60*fan_speed[1]);
}else if (code_seen("fn")) { // PRUSA fn
if (farm_mode) {
printf_P(_N("%d"), farm_no);
}
else {
puts_P(_N("Not in farm mode."));
}
} }
else if (code_seen("thx")) // PRUSA thx else if (code_seen_P(PSTR("thx"))) // PRUSA thx
{ {
no_response = false; no_response = false;
} }
else if (code_seen("uvlo")) // PRUSA uvlo else if (code_seen_P(PSTR("uvlo"))) // PRUSA uvlo
{ {
eeprom_update_byte((uint8_t*)EEPROM_UVLO,0); eeprom_update_byte((uint8_t*)EEPROM_UVLO,0);
enquecommand_P(PSTR("M24")); enquecommand_P(PSTR("M24"));
} }
else if (code_seen("MMURES")) // PRUSA MMURES else if (code_seen_P(PSTR("MMURES"))) // PRUSA MMURES
{ {
mmu_reset(); mmu_reset();
} }
else if (code_seen("RESET")) { // PRUSA RESET else if (code_seen_P(PSTR("RESET"))) { // PRUSA RESET
// careful! #ifdef WATCHDOG
if (farm_mode) { #if defined(W25X20CL) && defined(BOOTAPP)
#if (defined(WATCHDOG) && (MOTHERBOARD == BOARD_EINSY_1_0a)) boot_app_magic = BOOT_APP_MAGIC;
boot_app_magic = BOOT_APP_MAGIC; boot_app_flags = BOOT_APP_FLG_RUN;
boot_app_flags = BOOT_APP_FLG_RUN; #endif //defined(W25X20CL) && defined(BOOTAPP)
softReset(); softReset();
#else //WATCHDOG #elif defined(BOOTAPP) //this is a safety precaution. This is because the new bootloader turns off the heaters, but the old one doesn't. The watchdog should be used most of the time.
asm volatile("jmp 0x3E000"); asm volatile("jmp 0x3E000");
#endif //WATCHDOG #endif
} }else if (code_seen_P("fv")) { // PRUSA fv
else {
MYSERIAL.println("Not in farm mode.");
}
}else if (code_seen("fv")) { // PRUSA fv
// get file version // get file version
#ifdef SDSUPPORT #ifdef SDSUPPORT
card.openFile(strchr_pointer + 3,true); card.openFile(strchr_pointer + 3,true);
@ -3964,12 +4020,12 @@ void process_commands()
#endif // SDSUPPORT #endif // SDSUPPORT
} else if (code_seen("M28")) { // PRUSA M28 } else if (code_seen_P(PSTR("M28"))) { // PRUSA M28
trace(); trace();
prusa_sd_card_upload = true; prusa_sd_card_upload = true;
card.openFile(strchr_pointer+4,false); card.openFile(strchr_pointer+4,false);
} else if (code_seen("SN")) { // PRUSA SN } else if (code_seen_P(PSTR("SN"))) { // PRUSA SN
char SN[20]; char SN[20];
eeprom_read_block(SN, (uint8_t*)EEPROM_PRUSA_SN, 20); eeprom_read_block(SN, (uint8_t*)EEPROM_PRUSA_SN, 20);
if (SN[19]) if (SN[19])
@ -3977,30 +4033,30 @@ void process_commands()
else else
puts(SN); puts(SN);
} else if(code_seen("Fir")){ // PRUSA Fir } else if(code_seen_P(PSTR("Fir"))){ // PRUSA Fir
SERIAL_PROTOCOLLN(FW_VERSION_FULL); SERIAL_PROTOCOLLN(FW_VERSION_FULL);
} else if(code_seen("Rev")){ // PRUSA Rev } else if(code_seen_P(PSTR("Rev"))){ // PRUSA Rev
SERIAL_PROTOCOLLN(FILAMENT_SIZE "-" ELECTRONICS "-" NOZZLE_TYPE ); SERIAL_PROTOCOLLN(FILAMENT_SIZE "-" ELECTRONICS "-" NOZZLE_TYPE );
} else if(code_seen("Lang")) { // PRUSA Lang } else if(code_seen_P(PSTR("Lang"))) { // PRUSA Lang
lang_reset(); lang_reset();
} else if(code_seen("Lz")) { // PRUSA Lz } else if(code_seen_P(PSTR("Lz"))) { // PRUSA Lz
eeprom_update_word(reinterpret_cast<uint16_t *>(&(EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].z_offset)),0); eeprom_update_word(reinterpret_cast<uint16_t *>(&(EEPROM_Sheets_base->s[(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)))].z_offset)),0);
} else if(code_seen("Beat")) { // PRUSA Beat } else if(code_seen_P(PSTR("Beat"))) { // PRUSA Beat
// Kick farm link timer // Kick farm link timer
kicktime = _millis(); kicktime = _millis();
} else if(code_seen("FR")) { // PRUSA FR } else if(code_seen_P(PSTR("FR"))) { // PRUSA FR
// Factory full reset // Factory full reset
factory_reset(0); factory_reset(0);
} else if(code_seen("MBL")) { // PRUSA MBL } else if(code_seen_P(PSTR("MBL"))) { // PRUSA MBL
// Change the MBL status without changing the logical Z position. // Change the MBL status without changing the logical Z position.
if(code_seen("V")) { if(code_seen('V')) {
bool value = code_value_short(); bool value = code_value_short();
st_synchronize(); st_synchronize();
if(value != mbl.active) { if(value != mbl.active) {
@ -4025,14 +4081,14 @@ eeprom_update_byte((uint8_t*)EEPROM_CHECK_MODE,0xFF);
eeprom_update_byte((uint8_t*)EEPROM_NOZZLE_DIAMETER,0xFF); eeprom_update_byte((uint8_t*)EEPROM_NOZZLE_DIAMETER,0xFF);
eeprom_update_word((uint16_t*)EEPROM_NOZZLE_DIAMETER_uM,0xFFFF); eeprom_update_word((uint16_t*)EEPROM_NOZZLE_DIAMETER_uM,0xFFFF);
*/ */
} else if (code_seen("nozzle")) { // PRUSA nozzle } else if (code_seen_P(PSTR("nozzle"))) { // PRUSA nozzle
uint16_t nDiameter; uint16_t nDiameter;
if(code_seen('D')) if(code_seen('D'))
{ {
nDiameter=(uint16_t)(code_value()*1000.0+0.5); // [,um] nDiameter=(uint16_t)(code_value()*1000.0+0.5); // [,um]
nozzle_diameter_check(nDiameter); nozzle_diameter_check(nDiameter);
} }
else if(code_seen("set") && farm_mode) else if(code_seen_P(PSTR("set")) && farm_mode)
{ {
strchr_pointer++; // skip 1st char (~ 's') strchr_pointer++; // skip 1st char (~ 's')
strchr_pointer++; // skip 2nd char (~ 'e') strchr_pointer++; // skip 2nd char (~ 'e')
@ -4742,7 +4798,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
// Push the commands to the front of the message queue in the reverse order! // Push the commands to the front of the message queue in the reverse order!
// There shall be always enough space reserved for these commands. // There shall be always enough space reserved for these commands.
repeatcommand_front(); // repeat G76 with all its parameters repeatcommand_front(); // repeat G76 with all its parameters
enquecommand_front_P((PSTR("G28 W0"))); enquecommand_front_P(G28W0);
break; break;
} }
lcd_show_fullscreen_message_and_wait_P(_i("Stable ambient temperature 21-26C is needed a rigid stand is required."));////MSG_TEMP_CAL_WARNING c=20 r=4 lcd_show_fullscreen_message_and_wait_P(_i("Stable ambient temperature 21-26C is needed a rigid stand is required."));////MSG_TEMP_CAL_WARNING c=20 r=4
@ -4883,7 +4939,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
// Push the commands to the front of the message queue in the reverse order! // Push the commands to the front of the message queue in the reverse order!
// There shall be always enough space reserved for these commands. // There shall be always enough space reserved for these commands.
repeatcommand_front(); // repeat G76 with all its parameters repeatcommand_front(); // repeat G76 with all its parameters
enquecommand_front_P((PSTR("G28 W0"))); enquecommand_front_P(G28W0);
break; break;
} }
puts_P(_N("PINDA probe calibration start")); puts_P(_N("PINDA probe calibration start"));
@ -5032,7 +5088,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
// Push the commands to the front of the message queue in the reverse order! // Push the commands to the front of the message queue in the reverse order!
// There shall be always enough space reserved for these commands. // There shall be always enough space reserved for these commands.
repeatcommand_front(); // repeat G80 with all its parameters repeatcommand_front(); // repeat G80 with all its parameters
enquecommand_front_P((PSTR("G28 W0"))); enquecommand_front_P(G28W0);
break; break;
} }
@ -5065,7 +5121,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
temp_compensation_start(); temp_compensation_start();
run = true; run = true;
repeatcommand_front(); // repeat G80 with all its parameters repeatcommand_front(); // repeat G80 with all its parameters
enquecommand_front_P((PSTR("G28 W0"))); enquecommand_front_P(G28W0);
break; break;
} }
run = false; run = false;
@ -5193,12 +5249,12 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
break; break;
} }
if (MESH_HOME_Z_SEARCH - current_position[Z_AXIS] < 0.1f) { if (MESH_HOME_Z_SEARCH - current_position[Z_AXIS] < 0.1f) {
printf_P(PSTR("Bed leveling failed. Sensor disconnected or cable broken.\n")); puts_P(PSTR("Bed leveling failed. Sensor disconnected or cable broken."));
break; break;
} }
} }
if (has_z && fabs(z0 - current_position[Z_AXIS]) > Z_CALIBRATION_THRESHOLD) { //if we have data from z calibration, max. allowed difference is 1mm for each point if (has_z && fabs(z0 - current_position[Z_AXIS]) > Z_CALIBRATION_THRESHOLD) { //if we have data from z calibration, max. allowed difference is 1mm for each point
printf_P(PSTR("Bed leveling failed. Sensor triggered too high.\n")); puts_P(PSTR("Bed leveling failed. Sensor triggered too high."));
break; break;
} }
#ifdef SUPPORT_VERBOSITY #ifdef SUPPORT_VERBOSITY
@ -5581,10 +5637,9 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
farm_mode = 1; farm_mode = 1;
PingTime = _millis(); PingTime = _millis();
eeprom_update_byte((unsigned char *)EEPROM_FARM_MODE, farm_mode); eeprom_update_byte((unsigned char *)EEPROM_FARM_MODE, farm_mode);
EEPROM_save_B(EEPROM_FARM_NUMBER, &farm_no); SilentModeMenu = SILENT_MODE_OFF;
SilentModeMenu = SILENT_MODE_OFF; eeprom_update_byte((unsigned char *)EEPROM_SILENT, SilentModeMenu);
eeprom_update_byte((unsigned char *)EEPROM_SILENT, SilentModeMenu); fCheckModeInit(); // alternatively invoke printer reset
fCheckModeInit(); // alternatively invoke printer reset
break; break;
/*! ### G99 - Deactivate farm mode <a href="https://reprap.org/wiki/G-code#G99:_Deactivate_farm_mode">G99: Deactivate farm mode</a> /*! ### G99 - Deactivate farm mode <a href="https://reprap.org/wiki/G-code#G99:_Deactivate_farm_mode">G99: Deactivate farm mode</a>
@ -5699,10 +5754,16 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
/*! /*!
### M20 - SD Card file list <a href="https://reprap.org/wiki/G-code#M20:_List_SD_card">M20: List SD card</a> ### M20 - SD Card file list <a href="https://reprap.org/wiki/G-code#M20:_List_SD_card">M20: List SD card</a>
#### Usage
M20 [ L ]
#### Parameters
- `L` - Reports ling filenames instead of just short filenames. Requires host software parsing.
*/ */
case 20: case 20:
KEEPALIVE_STATE(NOT_BUSY); // do not send busy messages during listing. Inhibits the output of manage_heater()
SERIAL_PROTOCOLLNRPGM(_N("Begin file list"));////MSG_BEGIN_FILE_LIST SERIAL_PROTOCOLLNRPGM(_N("Begin file list"));////MSG_BEGIN_FILE_LIST
card.ls(); card.ls(code_seen('L'));
SERIAL_PROTOCOLLNRPGM(_N("End file list"));////MSG_END_FILE_LIST SERIAL_PROTOCOLLNRPGM(_N("End file list"));////MSG_END_FILE_LIST
break; break;
@ -6004,22 +6065,21 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
// M46: Prusa3D: Show the assigned IP address. // M46: Prusa3D: Show the assigned IP address.
if (card.ToshibaFlashAir_isEnabled()) { if (card.ToshibaFlashAir_isEnabled()) {
uint8_t ip[4]; uint8_t ip[4];
bool hasIP = card.ToshibaFlashAir_GetIP(ip); if (card.ToshibaFlashAir_GetIP(ip)) {
if (hasIP) {
// SERIAL_PROTOCOLPGM("Toshiba FlashAir current IP: "); // SERIAL_PROTOCOLPGM("Toshiba FlashAir current IP: ");
SERIAL_PROTOCOL(int(ip[0])); SERIAL_PROTOCOL(uint8_t(ip[0]));
SERIAL_PROTOCOLPGM("."); SERIAL_PROTOCOL('.');
SERIAL_PROTOCOL(int(ip[1])); SERIAL_PROTOCOL(uint8_t(ip[1]));
SERIAL_PROTOCOLPGM("."); SERIAL_PROTOCOL('.');
SERIAL_PROTOCOL(int(ip[2])); SERIAL_PROTOCOL(uint8_t(ip[2]));
SERIAL_PROTOCOLPGM("."); SERIAL_PROTOCOL('.');
SERIAL_PROTOCOL(int(ip[3])); SERIAL_PROTOCOL(uint8_t(ip[3]));
SERIAL_PROTOCOLPGM("\n"); SERIAL_PROTOCOLLN();
} else { } else {
SERIAL_PROTOCOLPGM("?Toshiba FlashAir GetIP failed\n"); SERIAL_PROTOCOLPGM("?Toshiba FlashAir GetIP failed\n");
} }
} else { } else {
SERIAL_PROTOCOLPGM("n/a\n"); SERIAL_PROTOCOLLNPGM("n/a");
} }
break; break;
} }
@ -6431,31 +6491,42 @@ Sigma_Exit:
break; break;
} }
#ifdef AUTO_REPORT_TEMPERATURES #if defined(AUTO_REPORT)
/*! /*!
### M155 - Automatically send temperatures <a href="https://reprap.org/wiki/G-code#M155:_Automatically_send_temperatures">M155: Automatically send temperatures</a> ### M155 - Automatically send status <a href="https://reprap.org/wiki/G-code#M155:_Automatically_send_temperatures">M155: Automatically send temperatures</a>
#### Usage #### Usage
M155 [ S ] M155 [ S ] [ C ]
#### Parameters #### Parameters
- `S` - Set temperature autoreporting interval in seconds. 0 to disable. Maximum: 255 - `S` - Set autoreporting interval in seconds. 0 to disable. Maximum: 255
- `C` - Activate auto-report function (bit mask). Default is temperature.
*/
bit 0 = Auto-report temperatures
bit 1 = Auto-report fans
bit 2 = Auto-report position
bit 3 = free
bit 4 = free
bit 5 = free
bit 6 = free
bit 7 = free
*/
//!@todo update RepRap Gcode wiki
//!@todo Should be temperature always? Octoprint doesn't switch to M105 if M155 timer is set
case 155: case 155:
{ {
if (code_seen('S')) if (code_seen('S')){
{ autoReportFeatures.SetPeriod( code_value_uint8() );
auto_report_temp_period = code_value_uint8();
if (auto_report_temp_period != 0)
auto_report_temp_timer.start();
else
auto_report_temp_timer.stop();
} }
} if (code_seen('C')){
autoReportFeatures.SetMask(code_value());
} else{
autoReportFeatures.SetMask(1); //Backwards compability to host systems like Octoprint to send only temp if paramerter `C`isn't used.
}
}
break; break;
#endif //AUTO_REPORT_TEMPERATURES #endif //AUTO_REPORT
/*! /*!
### M109 - Wait for extruder temperature <a href="https://reprap.org/wiki/G-code#M109:_Set_Extruder_Temperature_and_Wait">M109: Set Extruder Temperature and Wait</a> ### M109 - Wait for extruder temperature <a href="https://reprap.org/wiki/G-code#M109:_Set_Extruder_Temperature_and_Wait">M109: Set Extruder Temperature and Wait</a>
@ -6569,7 +6640,7 @@ Sigma_Exit:
SERIAL_PROTOCOL((int)active_extruder); SERIAL_PROTOCOL((int)active_extruder);
SERIAL_PROTOCOLPGM(" B:"); SERIAL_PROTOCOLPGM(" B:");
SERIAL_PROTOCOL_F(degBed(), 1); SERIAL_PROTOCOL_F(degBed(), 1);
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
} }
codenum = _millis(); codenum = _millis();
@ -6839,7 +6910,7 @@ Sigma_Exit:
else { else {
SERIAL_ECHO_START; SERIAL_ECHO_START;
SERIAL_ECHOPAIR("M113 S", (unsigned long)host_keepalive_interval); SERIAL_ECHOPAIR("M113 S", (unsigned long)host_keepalive_interval);
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
} }
break; break;
@ -6933,7 +7004,7 @@ Sigma_Exit:
*/ */
case 119: case 119:
SERIAL_PROTOCOLRPGM(_N("Reporting endstop status"));////MSG_M119_REPORT SERIAL_PROTOCOLRPGM(_N("Reporting endstop status"));////MSG_M119_REPORT
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
#if defined(X_MIN_PIN) && X_MIN_PIN > -1 #if defined(X_MIN_PIN) && X_MIN_PIN > -1
SERIAL_PROTOCOLRPGM(_n("x_min: "));////MSG_X_MIN SERIAL_PROTOCOLRPGM(_n("x_min: "));////MSG_X_MIN
if(READ(X_MIN_PIN)^X_MIN_ENDSTOP_INVERTING){ if(READ(X_MIN_PIN)^X_MIN_ENDSTOP_INVERTING){
@ -6941,7 +7012,7 @@ Sigma_Exit:
}else{ }else{
SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN); SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN);
} }
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
#endif #endif
#if defined(X_MAX_PIN) && X_MAX_PIN > -1 #if defined(X_MAX_PIN) && X_MAX_PIN > -1
SERIAL_PROTOCOLRPGM(_n("x_max: "));////MSG_X_MAX SERIAL_PROTOCOLRPGM(_n("x_max: "));////MSG_X_MAX
@ -6950,7 +7021,7 @@ Sigma_Exit:
}else{ }else{
SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN); SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN);
} }
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
#endif #endif
#if defined(Y_MIN_PIN) && Y_MIN_PIN > -1 #if defined(Y_MIN_PIN) && Y_MIN_PIN > -1
SERIAL_PROTOCOLRPGM(_n("y_min: "));////MSG_Y_MIN SERIAL_PROTOCOLRPGM(_n("y_min: "));////MSG_Y_MIN
@ -6959,7 +7030,7 @@ Sigma_Exit:
}else{ }else{
SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN); SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN);
} }
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
#endif #endif
#if defined(Y_MAX_PIN) && Y_MAX_PIN > -1 #if defined(Y_MAX_PIN) && Y_MAX_PIN > -1
SERIAL_PROTOCOLRPGM(_n("y_max: "));////MSG_Y_MAX SERIAL_PROTOCOLRPGM(_n("y_max: "));////MSG_Y_MAX
@ -6968,7 +7039,7 @@ Sigma_Exit:
}else{ }else{
SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN); SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN);
} }
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
#endif #endif
#if defined(Z_MIN_PIN) && Z_MIN_PIN > -1 #if defined(Z_MIN_PIN) && Z_MIN_PIN > -1
SERIAL_PROTOCOLRPGM(MSG_Z_MIN); SERIAL_PROTOCOLRPGM(MSG_Z_MIN);
@ -6977,7 +7048,7 @@ Sigma_Exit:
}else{ }else{
SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN); SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN);
} }
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
#endif #endif
#if defined(Z_MAX_PIN) && Z_MAX_PIN > -1 #if defined(Z_MAX_PIN) && Z_MAX_PIN > -1
SERIAL_PROTOCOLRPGM(MSG_Z_MAX); SERIAL_PROTOCOLRPGM(MSG_Z_MAX);
@ -6986,11 +7057,34 @@ Sigma_Exit:
}else{ }else{
SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN); SERIAL_PROTOCOLRPGM(MSG_ENDSTOP_OPEN);
} }
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
#endif #endif
break; break;
//!@todo update for all axes, use for loop //!@todo update for all axes, use for loop
#if (defined(FANCHECK) && (((defined(TACH_0) && (TACH_0 >-1)) || (defined(TACH_1) && (TACH_1 > -1)))))
/*!
### M123 - Tachometer value <a href="https://www.reprap.org/wiki/G-code#M123:_Tachometer_value_.28RepRap.29">M123: Tachometer value</a>
This command is used to report fan speeds and fan pwm values.
#### Usage
M123
- E0: - Hotend fan speed in RPM
- PRN1: - Part cooling fans speed in RPM
- E0@: - Hotend fan PWM value
- PRN1@: -Part cooling fan PWM value
_Example:_
E0:3240 RPM PRN1:4560 RPM E0@:255 PRN1@:255
*/
//!@todo Update RepRap Gcode wiki
case 123:
gcode_M123();
break;
#endif //FANCHECK and TACH_0 and TACH_1
#ifdef BLINKM #ifdef BLINKM
/*! /*!
@ -7111,7 +7205,7 @@ Sigma_Exit:
For each axis individually. For each axis individually.
*/ */
case 203: // M203 max feedrate mm/sec case 203: // M203 max feedrate mm/sec
for (int8_t i = 0; i < NUM_AXIS; i++) for (uint8_t i = 0; i < NUM_AXIS; i++)
{ {
if (code_seen(axis_codes[i])) if (code_seen(axis_codes[i]))
{ {
@ -7232,7 +7326,7 @@ Sigma_Exit:
- `Z` - Z axis offset - `Z` - Z axis offset
*/ */
case 206: case 206:
for(int8_t i=0; i < 3; i++) for(uint8_t i=0; i < 3; i++)
{ {
if(code_seen(axis_codes[i])) cs.add_homing[i] = code_value(); if(code_seen(axis_codes[i])) cs.add_homing[i] = code_value();
} }
@ -7555,7 +7649,7 @@ Sigma_Exit:
SERIAL_PROTOCOL(servo_index); SERIAL_PROTOCOL(servo_index);
SERIAL_PROTOCOL(": "); SERIAL_PROTOCOL(": ");
SERIAL_PROTOCOL(servos[servo_index].read()); SERIAL_PROTOCOL(servos[servo_index].read());
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
} }
} }
break; break;
@ -7631,7 +7725,7 @@ Sigma_Exit:
//Kc does not have scaling applied above, or in resetting defaults //Kc does not have scaling applied above, or in resetting defaults
SERIAL_PROTOCOL(Kc); SERIAL_PROTOCOL(Kc);
#endif #endif
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
} }
break; break;
#endif //PIDTEMP #endif //PIDTEMP
@ -7664,7 +7758,7 @@ Sigma_Exit:
SERIAL_PROTOCOL(unscalePID_i(cs.bedKi)); SERIAL_PROTOCOL(unscalePID_i(cs.bedKi));
SERIAL_PROTOCOL(" d:"); SERIAL_PROTOCOL(" d:");
SERIAL_PROTOCOL(unscalePID_d(cs.bedKd)); SERIAL_PROTOCOL(unscalePID_d(cs.bedKd));
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
} }
break; break;
#endif //PIDTEMP #endif //PIDTEMP
@ -7887,7 +7981,7 @@ Sigma_Exit:
cs.zprobe_zoffset = -value; // compare w/ line 278 of ConfigurationStore.cpp cs.zprobe_zoffset = -value; // compare w/ line 278 of ConfigurationStore.cpp
SERIAL_ECHO_START; SERIAL_ECHO_START;
SERIAL_ECHOLNRPGM(CAT4(MSG_ZPROBE_ZOFFSET, " ", MSG_OK,PSTR(""))); SERIAL_ECHOLNRPGM(CAT4(MSG_ZPROBE_ZOFFSET, " ", MSG_OK,PSTR("")));
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
} }
else else
{ {
@ -7897,7 +7991,7 @@ Sigma_Exit:
SERIAL_ECHO(Z_PROBE_OFFSET_RANGE_MIN); SERIAL_ECHO(Z_PROBE_OFFSET_RANGE_MIN);
SERIAL_ECHORPGM(MSG_Z_MAX); SERIAL_ECHORPGM(MSG_Z_MAX);
SERIAL_ECHO(Z_PROBE_OFFSET_RANGE_MAX); SERIAL_ECHO(Z_PROBE_OFFSET_RANGE_MAX);
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
} }
} }
else else
@ -7905,7 +7999,7 @@ Sigma_Exit:
SERIAL_ECHO_START; SERIAL_ECHO_START;
SERIAL_ECHOLNRPGM(CAT2(MSG_ZPROBE_ZOFFSET, PSTR(" : "))); SERIAL_ECHOLNRPGM(CAT2(MSG_ZPROBE_ZOFFSET, PSTR(" : ")));
SERIAL_ECHO(-cs.zprobe_zoffset); SERIAL_ECHO(-cs.zprobe_zoffset);
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
} }
break; break;
} }
@ -7994,7 +8088,7 @@ Sigma_Exit:
#endif #endif
} }
if (mmu_enabled && code_seen("AUTO")) if (mmu_enabled && code_seen_P(PSTR("AUTO")))
automatic = true; automatic = true;
gcode_M600(automatic, x_position, y_position, z_shift, e_shift_init, e_shift_late); gcode_M600(automatic, x_position, y_position, z_shift, e_shift_init, e_shift_late);
@ -8068,7 +8162,7 @@ Sigma_Exit:
SERIAL_PROTOCOLPGM("Wait for PINDA target temperature:"); SERIAL_PROTOCOLPGM("Wait for PINDA target temperature:");
SERIAL_PROTOCOL(set_target_pinda); SERIAL_PROTOCOL(set_target_pinda);
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
codenum = _millis(); codenum = _millis();
cancel_heatup = false; cancel_heatup = false;
@ -8127,7 +8221,7 @@ Sigma_Exit:
SERIAL_PROTOCOL(usteps); SERIAL_PROTOCOL(usteps);
SERIAL_PROTOCOLPGM(", "); SERIAL_PROTOCOLPGM(", ");
SERIAL_PROTOCOL(mm * 1000); SERIAL_PROTOCOL(mm * 1000);
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
} }
} }
else if (code_seen('!')) { // ! - Set factory default values else if (code_seen('!')) { // ! - Set factory default values
@ -8170,7 +8264,7 @@ Sigma_Exit:
SERIAL_PROTOCOL(usteps); SERIAL_PROTOCOL(usteps);
SERIAL_PROTOCOLPGM(", "); SERIAL_PROTOCOLPGM(", ");
SERIAL_PROTOCOL(mm * 1000); SERIAL_PROTOCOL(mm * 1000);
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
} }
} }
} }
@ -8261,7 +8355,7 @@ Sigma_Exit:
if(code_seen('P')) if(code_seen('P'))
fw_version_check(++strchr_pointer); fw_version_check(++strchr_pointer);
else if(code_seen('Q')) else if(code_seen('Q'))
SERIAL_PROTOCOLLN(FW_VERSION); SERIAL_PROTOCOLLNRPGM(FW_VERSION_STR_P());
break; break;
case ClPrintChecking::_Gcode: // ~ .5 case ClPrintChecking::_Gcode: // ~ .5
if(code_seen('P')) if(code_seen('P'))
@ -8705,6 +8799,8 @@ Sigma_Exit:
*/ */
else if(code_seen('T')) else if(code_seen('T'))
{ {
static const char duplicate_Tcode_ignored[] PROGMEM = "Duplicate T-code ignored.";
int index; int index;
bool load_to_nozzle = false; bool load_to_nozzle = false;
for (index = 1; *(strchr_pointer + index) == ' ' || *(strchr_pointer + index) == '\t'; index++); for (index = 1; *(strchr_pointer + index) == ' ' || *(strchr_pointer + index) == '\t'; index++);
@ -8720,7 +8816,7 @@ Sigma_Exit:
tmp_extruder = choose_menu_P(_T(MSG_CHOOSE_FILAMENT), _T(MSG_FILAMENT)); tmp_extruder = choose_menu_P(_T(MSG_CHOOSE_FILAMENT), _T(MSG_FILAMENT));
if ((tmp_extruder == mmu_extruder) && mmu_fil_loaded) //dont execute the same T-code twice in a row if ((tmp_extruder == mmu_extruder) && mmu_fil_loaded) //dont execute the same T-code twice in a row
{ {
printf_P(PSTR("Duplicate T-code ignored.\n")); puts_P(duplicate_Tcode_ignored);
} }
else else
{ {
@ -8765,7 +8861,7 @@ Sigma_Exit:
{ {
if ((tmp_extruder == mmu_extruder) && mmu_fil_loaded) //dont execute the same T-code twice in a row if ((tmp_extruder == mmu_extruder) && mmu_fil_loaded) //dont execute the same T-code twice in a row
{ {
printf_P(PSTR("Duplicate T-code ignored.\n")); puts_P(duplicate_Tcode_ignored);
} }
else else
{ {
@ -10068,7 +10164,7 @@ static void wait_for_heater(long codenum, uint8_t extruder) {
} }
} }
#else #else
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
#endif #endif
codenum = _millis(); codenum = _millis();
} }
@ -10375,7 +10471,7 @@ void bed_analysis(float x_dimension, float y_dimension, int x_points_num, int y_
// There shall be always enough space reserved for these commands. // There shall be always enough space reserved for these commands.
repeatcommand_front(); // repeat G80 with all its parameters repeatcommand_front(); // repeat G80 with all its parameters
enquecommand_front_P((PSTR("G28 W0"))); enquecommand_front_P(G28W0);
enquecommand_front_P((PSTR("G1 Z5"))); enquecommand_front_P((PSTR("G1 Z5")));
return; return;
} }
@ -10691,7 +10787,7 @@ void serialecho_temperatures() {
SERIAL_PROTOCOL((int)active_extruder); SERIAL_PROTOCOL((int)active_extruder);
SERIAL_PROTOCOLPGM(" B:"); SERIAL_PROTOCOLPGM(" B:");
SERIAL_PROTOCOL_F(degBed(), 1); SERIAL_PROTOCOL_F(degBed(), 1);
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN();
} }
#ifdef UVLO_SUPPORT #ifdef UVLO_SUPPORT

View File

@ -20,10 +20,10 @@ public:
Timer(); Timer();
void start(); void start();
void stop(){m_isRunning = false;} void stop(){m_isRunning = false;}
bool running(){return m_isRunning;} bool running()const {return m_isRunning;}
bool expired(T msPeriod); bool expired(T msPeriod);
protected: protected:
T started(){return m_started;} T started()const {return m_started;}
private: private:
bool m_isRunning; bool m_isRunning;
T m_started; T m_started;

View File

@ -19,7 +19,7 @@ uint16_t adc_sim_mask;
void adc_init(void) void adc_init(void)
{ {
printf_P(PSTR("adc_init\n")); puts_P(PSTR("adc_init"));
adc_sim_mask = 0x00; adc_sim_mask = 0x00;
ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
ADMUX |= (1 << REFS0); ADMUX |= (1 << REFS0);

View File

@ -62,9 +62,10 @@ char *createFilename(char *buffer,const dir_t &p) //buffer>12characters
/** /**
+* Dive into a folder and recurse depth-first to perform a pre-set operation lsAction: +* Dive into a folder and recurse depth-first to perform a pre-set operation lsAction:
+* LS_Count - Add +1 to nrFiles for every file within the parent +* LS_Count - Add +1 to nrFiles for every file within the parent
+* LS_GetFilename - Get the filename of the file indexed by nrFiles +* LS_GetFilename - Get the filename of the file indexed by nrFiles
+* LS_SerialPrint - Print the full path and size of each file to serial output +* LS_SerialPrint - Print the full path and size of each file to serial output
+* LS_SerialPrint_LFN - Print the full path, long filename and size of each file to serial output
+*/ +*/
void CardReader::lsDive(const char *prepend, SdFile parent, const char * const match/*=NULL*/) { void CardReader::lsDive(const char *prepend, SdFile parent, const char * const match/*=NULL*/) {
@ -90,9 +91,13 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m
// Serial.print(path); // Serial.print(path);
// Get a new directory object using the full path // Get a new directory object using the full path
// and dive recursively into it. // and dive recursively into it.
if (lsAction == LS_SerialPrint_LFN)
printf_P(PSTR("DIR_ENTER: %s \"%s\"\n"), path, longFilename[0] ? longFilename : lfilename);
SdFile dir; SdFile dir;
if (!dir.open(parent, lfilename, O_READ)) { if (!dir.open(parent, lfilename, O_READ)) {
if (lsAction == LS_SerialPrint) { if (lsAction == LS_SerialPrint || lsAction == LS_SerialPrint_LFN) {
//SERIAL_ECHO_START(); //SERIAL_ECHO_START();
//SERIAL_ECHOPGM(_i("Cannot open subdir"));////MSG_SD_CANT_OPEN_SUBDIR //SERIAL_ECHOPGM(_i("Cannot open subdir"));////MSG_SD_CANT_OPEN_SUBDIR
//SERIAL_ECHOLN(lfilename); //SERIAL_ECHOLN(lfilename);
@ -100,6 +105,9 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m
} }
lsDive(path, dir); lsDive(path, dir);
// close() is done automatically by destructor of SdFile // close() is done automatically by destructor of SdFile
if (lsAction == LS_SerialPrint_LFN)
puts_P(PSTR("DIR_EXIT"));
} }
else { else {
uint8_t pn0 = p.name[0]; uint8_t pn0 = p.name[0];
@ -114,12 +122,18 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m
nrFiles++; nrFiles++;
break; break;
case LS_SerialPrint_LFN:
case LS_SerialPrint: case LS_SerialPrint:
createFilename(filename, p); createFilename(filename, p);
SERIAL_PROTOCOL(prepend); SERIAL_PROTOCOL(prepend);
SERIAL_PROTOCOL(filename); SERIAL_PROTOCOL(filename);
MYSERIAL.write(' '); MYSERIAL.write(' ');
if (lsAction == LS_SerialPrint_LFN)
printf_P(PSTR("\"%s\" "), LONGEST_FILENAME);
SERIAL_PROTOCOLLN(p.fileSize); SERIAL_PROTOCOLLN(p.fileSize);
manage_heater();
break; break;
case LS_GetFilename: case LS_GetFilename:
@ -160,9 +174,9 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m
} // while readDir } // while readDir
} }
void CardReader::ls() void CardReader::ls(bool printLFN)
{ {
lsAction=LS_SerialPrint; lsAction = printLFN ? LS_SerialPrint_LFN : LS_SerialPrint;
//if(lsAction==LS_Count) //if(lsAction==LS_Count)
//nrFiles=0; //nrFiles=0;
@ -427,7 +441,7 @@ void CardReader::openFile(const char* name,bool read, bool replace_current/*=tru
SERIAL_PROTOCOLLNRPGM(_N("File selected"));////MSG_SD_FILE_SELECTED SERIAL_PROTOCOLLNRPGM(_N("File selected"));////MSG_SD_FILE_SELECTED
getfilename(0, fname); getfilename(0, fname);
lcd_setstatus(longFilename[0] ? longFilename : fname); lcd_setstatus(longFilename[0] ? longFilename : fname);
lcd_setstatus("SD-PRINTING "); lcd_setstatuspgm(PSTR("SD-PRINTING"));
} }
else else
{ {
@ -478,7 +492,7 @@ void CardReader::removeFile(const char* name)
{ {
SERIAL_PROTOCOLPGM("Deletion failed, File: "); SERIAL_PROTOCOLPGM("Deletion failed, File: ");
SERIAL_PROTOCOL(fname); SERIAL_PROTOCOL(fname);
SERIAL_PROTOCOLLNPGM("."); SERIAL_PROTOCOLLN('.');
} }
} }
@ -546,7 +560,7 @@ void CardReader::write_command_no_newline(char *buf)
{ {
SERIAL_ERROR_START; SERIAL_ERROR_START;
SERIAL_ERRORLNRPGM(MSG_SD_ERR_WRITE_TO_FILE); SERIAL_ERRORLNRPGM(MSG_SD_ERR_WRITE_TO_FILE);
MYSERIAL.println("An error while writing to the SD Card."); SERIAL_PROTOCOLLNPGM("An error while writing to the SD Card.");
} }
} }
@ -873,8 +887,7 @@ void CardReader::presort() {
for (int column = 0; column < 20; column++) { for (int column = 0; column < 20; column++) {
if (column < (percent / 5)) if (column < (percent / 5))
{ {
lcd_set_cursor(column, 2); lcd_putc_at(column, 2, '\x01'); //simple progress bar
lcd_print('\x01'); //simple progress bar
} }
} }
counter++; counter++;
@ -952,8 +965,7 @@ void CardReader::presort() {
#if !SDSORT_USES_RAM //show progresss bar only if slow sorting method is used #if !SDSORT_USES_RAM //show progresss bar only if slow sorting method is used
for (int column = 0; column <= 19; column++) for (int column = 0; column <= 19; column++)
{ {
lcd_set_cursor(column, 2); lcd_putc_at(column, 2, '\x01'); //simple progress bar
lcd_print('\x01'); //simple progress bar
} }
_delay(300); _delay(300);
lcd_set_degree(); lcd_set_degree();

View File

@ -6,7 +6,7 @@
#define MAX_DIR_DEPTH 10 #define MAX_DIR_DEPTH 10
#include "SdFile.h" #include "SdFile.h"
enum LsAction {LS_SerialPrint,LS_Count,LS_GetFilename}; enum LsAction {LS_SerialPrint,LS_SerialPrint_LFN,LS_Count,LS_GetFilename};
class CardReader class CardReader
{ {
public: public:
@ -38,7 +38,7 @@ public:
uint16_t getWorkDirDepth(); uint16_t getWorkDirDepth();
void ls(); void ls(bool printLFN);
void chdir(const char * relpath); void chdir(const char * relpath);
void updir(); void updir();
void setroot(); void setroot();

View File

@ -75,7 +75,7 @@ extern uint16_t cmdqueue_calc_sd_length();
// Return True if a character was found // Return True if a character was found
static inline bool code_seen(char code) { return (strchr_pointer = strchr(CMDBUFFER_CURRENT_STRING, code)) != NULL; } static inline bool code_seen(char code) { return (strchr_pointer = strchr(CMDBUFFER_CURRENT_STRING, code)) != NULL; }
static inline bool code_seen(const char *code) { return (strchr_pointer = strstr(CMDBUFFER_CURRENT_STRING, code)) != NULL; } static inline bool code_seen_P(const char *code_PROGMEM) { return (strchr_pointer = strstr_P(CMDBUFFER_CURRENT_STRING, code_PROGMEM)) != NULL; }
static inline float code_value() { return strtod(strchr_pointer+1, NULL);} static inline float code_value() { return strtod(strchr_pointer+1, NULL);}
static inline long code_value_long() { return strtol(strchr_pointer+1, NULL, 10); } static inline long code_value_long() { return strtol(strchr_pointer+1, NULL, 10); }
static inline int16_t code_value_short() { return int16_t(strtol(strchr_pointer+1, NULL, 10)); }; static inline int16_t code_value_short() { return int16_t(strtol(strchr_pointer+1, NULL, 10)); };

View File

@ -242,9 +242,11 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
| ^ | ^ | ^ | 00h 0 | ^ | Check mode for nozzle is: __none__ | ^ | ^ | ^ | ^ | ^ | 00h 0 | ^ | Check mode for nozzle is: __none__ | ^ | ^
| 0x0DA7 3495 | uint8 | EEPROM_NOZZLE_DIAMETER | 28h 40 | ffh 255 | Nozzle diameter is: __40 or 0.40mm__ | LCD menu | D3 Ax0da7 C1 | 0x0DA7 3495 | uint8 | EEPROM_NOZZLE_DIAMETER | 28h 40 | ffh 255 | Nozzle diameter is: __40 or 0.40mm__ | LCD menu | D3 Ax0da7 C1
| ^ | ^ | ^ | 3ch 60 | ^ | Nozzle diameter is: __60 or 0.60mm__ | ^ | ^ | ^ | ^ | ^ | 3ch 60 | ^ | Nozzle diameter is: __60 or 0.60mm__ | ^ | ^
| ^ | ^ | ^ | 3ch 80 | ^ | Nozzle diameter is: __80 or 0.80mm__ | ^ | ^
| ^ | ^ | ^ | 19h 25 | ^ | Nozzle diameter is: __25 or 0.25mm__ | ^ | ^ | ^ | ^ | ^ | 19h 25 | ^ | Nozzle diameter is: __25 or 0.25mm__ | ^ | ^
| 0x0DA5 3493 | uint16 | EEPROM_NOZZLE_DIAMETER_uM | 9001h | ff ffh 65535 | Nozzle diameter is: __400um__ | LCD menu | D3 Ax0da5 C2 | 0x0DA5 3493 | uint16 | EEPROM_NOZZLE_DIAMETER_uM | 9001h | ff ffh 65535 | Nozzle diameter is: __400um__ | LCD menu | D3 Ax0da5 C2
| ^ | ^ | ^ | 5802h | ^ | Nozzle diameter is: __600um__ | ^ | ^ | ^ | ^ | ^ | 5802h | ^ | Nozzle diameter is: __600um__ | ^ | ^
| ^ | ^ | ^ | 2003h | ^ | Nozzle diameter is: __800um__ | ^ | ^
| ^ | ^ | ^ | fa00h | ^ | Nozzle diameter is: __250um__ | ^ | ^ | ^ | ^ | ^ | fa00h | ^ | Nozzle diameter is: __250um__ | ^ | ^
| 0x0DA4 3492 | uint8 | EEPROM_CHECK_MODEL | 01h 1 | ffh 255 | Check mode for printer model is: __warn__ | LCD menu | D3 Ax0da4 C1 | 0x0DA4 3492 | uint8 | EEPROM_CHECK_MODEL | 01h 1 | ffh 255 | Check mode for printer model is: __warn__ | LCD menu | D3 Ax0da4 C1
| ^ | ^ | ^ | 02h 0 | ^ | Check mode for printer model is: __strict__ | ^ | ^ | ^ | ^ | ^ | 02h 0 | ^ | Check mode for printer model is: __strict__ | ^ | ^

View File

@ -129,7 +129,7 @@ unsigned long nIRsensorLastTime;
void fsensor_stop_and_save_print(void) void fsensor_stop_and_save_print(void)
{ {
printf_P(PSTR("fsensor_stop_and_save_print\n")); puts_P(PSTR("fsensor_stop_and_save_print"));
stop_and_save_print_to_ram(0, 0); stop_and_save_print_to_ram(0, 0);
fsensor_watch_runout = false; fsensor_watch_runout = false;
} }
@ -152,7 +152,7 @@ void fsensor_set_axis_steps_per_unit(float u)
void fsensor_restore_print_and_continue(void) void fsensor_restore_print_and_continue(void)
{ {
printf_P(PSTR("fsensor_restore_print_and_continue\n")); puts_P(PSTR("fsensor_restore_print_and_continue"));
fsensor_watch_runout = true; fsensor_watch_runout = true;
#ifdef PAT9125 #ifdef PAT9125
fsensor_reset_err_cnt(); fsensor_reset_err_cnt();
@ -164,7 +164,7 @@ void fsensor_restore_print_and_continue(void)
// allowing new instructions to be inserted in the middle // allowing new instructions to be inserted in the middle
void fsensor_checkpoint_print(void) void fsensor_checkpoint_print(void)
{ {
printf_P(PSTR("fsensor_checkpoint_print\n")); puts_P(PSTR("fsensor_checkpoint_print"));
stop_and_save_print_to_ram(0, 0); stop_and_save_print_to_ram(0, 0);
restore_print_from_ram_and_continue(0); restore_print_from_ram_and_continue(0);
} }
@ -414,7 +414,7 @@ void fsensor_oq_meassure_start(uint8_t skip)
{ {
if (!fsensor_enabled) return; if (!fsensor_enabled) return;
if (!fsensor_oq_meassure_enabled) return; if (!fsensor_oq_meassure_enabled) return;
printf_P(PSTR("fsensor_oq_meassure_start\n")); puts_P(PSTR("fsensor_oq_meassure_start"));
fsensor_oq_skipchunk = skip; fsensor_oq_skipchunk = skip;
fsensor_oq_samples = 0; fsensor_oq_samples = 0;
fsensor_oq_st_sum = 0; fsensor_oq_st_sum = 0;
@ -447,7 +447,7 @@ bool fsensor_oq_result(void)
{ {
if (!fsensor_enabled) return true; if (!fsensor_enabled) return true;
if (!fsensor_oq_meassure_enabled) return true; if (!fsensor_oq_meassure_enabled) return true;
printf_P(_N("fsensor_oq_result\n")); puts_P(_N("fsensor_oq_result"));
bool res_er_sum = (fsensor_oq_er_sum <= FSENSOR_OQ_MAX_ES); bool res_er_sum = (fsensor_oq_er_sum <= FSENSOR_OQ_MAX_ES);
printf_P(_N(" er_sum = %u %S\n"), fsensor_oq_er_sum, (res_er_sum?_OK:_NG)); printf_P(_N(" er_sum = %u %S\n"), fsensor_oq_er_sum, (res_er_sum?_OK:_NG));
bool res_er_max = (fsensor_oq_er_max <= FSENSOR_OQ_MAX_EM); bool res_er_max = (fsensor_oq_er_max <= FSENSOR_OQ_MAX_EM);
@ -616,7 +616,7 @@ void fsensor_st_block_chunk(int cnt)
//! Common code for enqueing M600 and supplemental codes into the command queue. //! Common code for enqueing M600 and supplemental codes into the command queue.
//! Used both for the IR sensor and the PAT9125 //! Used both for the IR sensor and the PAT9125
void fsensor_enque_M600(){ void fsensor_enque_M600(){
printf_P(PSTR("fsensor_update - M600\n")); puts_P(PSTR("fsensor_update - M600"));
eeprom_update_byte((uint8_t*)EEPROM_FERROR_COUNT, eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT) + 1); 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); eeprom_update_word((uint16_t*)EEPROM_FERROR_COUNT_TOT, eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT) + 1);
enquecommand_front_P((PSTR("M600"))); enquecommand_front_P((PSTR("M600")));
@ -670,7 +670,7 @@ void fsensor_update(void)
fsensor_softfail_ccnt = 0; fsensor_softfail_ccnt = 0;
if (!err && fsensor_softfail_ccnt <= FSENSOR_SOFTERR_CMAX) if (!err && fsensor_softfail_ccnt <= FSENSOR_SOFTERR_CMAX)
{ {
printf_P(PSTR("fsensor_err_cnt = 0\n")); puts_P(PSTR("fsensor_err_cnt = 0"));
++fsensor_softfail; ++fsensor_softfail;
++fsensor_softfail_ccnt; ++fsensor_softfail_ccnt;
fsensor_softfail_last = now; fsensor_softfail_last = now;
@ -757,19 +757,19 @@ bool fsensor_IR_check(){
/// Or the user is so creative so that he can hold a piece of fillament in the hole in such a genius way, /// Or the user is so creative so that he can hold a piece of fillament in the hole in such a genius way,
/// that the IR fsensor reading is within 1.5 and 3V ... this would have been highly unusual /// that the IR fsensor reading is within 1.5 and 3V ... this would have been highly unusual
/// and would have been considered more like a sabotage than normal printer operation /// and would have been considered more like a sabotage than normal printer operation
printf_P(PSTR("fsensor in forbidden range 1.5-3V - check sensor\n")); puts_P(PSTR("fsensor in forbidden range 1.5-3V - check sensor"));
return false; return false;
} }
if( oFsensorPCB == ClFsensorPCB::_Rev04 ){ if( oFsensorPCB == ClFsensorPCB::_Rev04 ){
/// newer IR sensor cannot normally produce 4.6-5V, this is considered a failure/bad mount /// newer IR sensor cannot normally produce 4.6-5V, this is considered a failure/bad mount
if( IRsensor_Hopen_TRESHOLD <= current_voltage_raw_IR && current_voltage_raw_IR <= IRsensor_VMax_TRESHOLD ){ if( IRsensor_Hopen_TRESHOLD <= current_voltage_raw_IR && current_voltage_raw_IR <= IRsensor_VMax_TRESHOLD ){
printf_P(PSTR("fsensor v0.4 in fault range 4.6-5V - unconnected\n")); puts_P(PSTR("fsensor v0.4 in fault range 4.6-5V - unconnected"));
return false; return false;
} }
/// newer IR sensor cannot normally produce 0-0.3V, this is considered a failure /// newer IR sensor cannot normally produce 0-0.3V, this is considered a failure
#if 0 //Disabled as it has to be decided if we gonna use this or not. #if 0 //Disabled as it has to be decided if we gonna use this or not.
if( IRsensor_Hopen_TRESHOLD <= current_voltage_raw_IR && current_voltage_raw_IR <= IRsensor_VMax_TRESHOLD ){ if( IRsensor_Hopen_TRESHOLD <= current_voltage_raw_IR && current_voltage_raw_IR <= IRsensor_VMax_TRESHOLD ){
printf_P(PSTR("fsensor v0.4 in fault range 0.0-0.3V - wrong IR sensor\n")); puts_P(PSTR("fsensor v0.4 in fault range 0.0-0.3V - wrong IR sensor"));
return false; return false;
} }
#endif #endif
@ -777,7 +777,7 @@ bool fsensor_IR_check(){
/// If IR sensor is "uknown state" and filament is not loaded > 1.5V return false /// If IR sensor is "uknown state" and filament is not loaded > 1.5V return false
#if 0 #if 0
if( (oFsensorPCB == ClFsensorPCB::_Undef) && ( current_voltage_raw_IR > IRsensor_Lmax_TRESHOLD ) ){ if( (oFsensorPCB == ClFsensorPCB::_Undef) && ( current_voltage_raw_IR > IRsensor_Lmax_TRESHOLD ) ){
printf_P(PSTR("Unknown IR sensor version and no filament loaded detected.\n")); puts_P(PSTR("Unknown IR sensor version and no filament loaded detected."));
return false; return false;
} }
#endif #endif

View File

@ -486,11 +486,17 @@ void lcd_escape_write(uint8_t chr)
#endif //VT100 #endif //VT100
int lcd_putc(int c) int lcd_putc(char c)
{ {
return fputc(c, lcdout); return fputc(c, lcdout);
} }
int lcd_putc_at(uint8_t c, uint8_t r, char ch)
{
lcd_set_cursor(c, r);
return fputc(ch, lcdout);
}
int lcd_puts_P(const char* str) int lcd_puts_P(const char* str)
{ {
return fputs_P(str, lcdout); return fputs_P(str, lcdout);

View File

@ -40,7 +40,10 @@ extern void lcd_set_cursor(uint8_t col, uint8_t row);
extern void lcd_createChar_P(uint8_t, const uint8_t*); extern void lcd_createChar_P(uint8_t, const uint8_t*);
extern int lcd_putc(int c); // char c is non-standard, however it saves 1B on stack
extern int lcd_putc(char c);
extern int lcd_putc_at(uint8_t c, uint8_t r, char ch);
extern int lcd_puts_P(const char* str); extern int lcd_puts_P(const char* str);
extern int lcd_puts_at_P(uint8_t c, uint8_t r, const char* str); extern int lcd_puts_at_P(uint8_t c, uint8_t r, const char* str);
extern int lcd_printf_P(const char* format, ...); extern int lcd_printf_P(const char* format, ...);

View File

@ -252,8 +252,7 @@ static void menu_draw_item_puts_P(char type_char, const char* str, char num)
lcd_set_cursor(0, menu_row); lcd_set_cursor(0, menu_row);
lcd_printf_P(PSTR("%c%-.16S "), menu_selection_mark(), str); lcd_printf_P(PSTR("%c%-.16S "), menu_selection_mark(), str);
lcd_putc(num); lcd_putc(num);
lcd_set_cursor(19, menu_row); lcd_putc_at(19, menu_row, type_char);
lcd_putc(type_char);
} }
/* /*
@ -312,7 +311,7 @@ uint8_t menu_item_submenu_E(const Sheet &sheet, menu_func_t submenu)
return 0; return 0;
} }
uint8_t menu_item_function_E(const Sheet &sheet, menu_func_t func) uint8_t __attribute__((noinline)) menu_item_function_E(const Sheet &sheet, menu_func_t func)
{ {
if (menu_item == menu_line) if (menu_item == menu_line)
{ {
@ -346,6 +345,10 @@ uint8_t menu_item_back_P(const char* str)
return 0; return 0;
} }
bool __attribute__((noinline)) menu_item_leave(){
return ((menu_item == menu_line) && menu_clicked && (lcd_encoder == menu_item)) || menu_leaving;
}
uint8_t menu_item_function_P(const char* str, menu_func_t func) uint8_t menu_item_function_P(const char* str, menu_func_t func)
{ {
if (menu_item == menu_line) if (menu_item == menu_line)

View File

@ -112,7 +112,8 @@ extern uint8_t menu_item_function_E(const Sheet &sheet, menu_func_t func);
extern uint8_t menu_item_back_P(const char* str); extern uint8_t menu_item_back_P(const char* str);
// leaving menu - this condition must be immediately before MENU_ITEM_BACK_P // leaving menu - this condition must be immediately before MENU_ITEM_BACK_P
#define ON_MENU_LEAVE(func) do { if (((menu_item == menu_line) && menu_clicked && (lcd_encoder == menu_item)) || menu_leaving){ func } } while (0) #define ON_MENU_LEAVE(func) do { if (menu_item_leave()){ func } } while (0)
extern bool menu_item_leave();
#define MENU_ITEM_FUNCTION_P(str, func) do { if (menu_item_function_P(str, func)) return; } while (0) #define MENU_ITEM_FUNCTION_P(str, func) do { if (menu_item_function_P(str, func)) return; } while (0)
extern uint8_t menu_item_function_P(const char* str, menu_func_t func); extern uint8_t menu_item_function_P(const char* str, menu_func_t func);

View File

@ -12,6 +12,8 @@
#include "tmc2130.h" #include "tmc2130.h"
#endif //TMC2130 #endif //TMC2130
#define DBG(args...) printf_P(args)
uint8_t world2machine_correction_mode; uint8_t world2machine_correction_mode;
float world2machine_rotation_and_skew[2][2]; float world2machine_rotation_and_skew[2][2];
float world2machine_rotation_and_skew_inv[2][2]; float world2machine_rotation_and_skew_inv[2][2];
@ -369,7 +371,9 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS(
BedSkewOffsetDetectionResultType result = BED_SKEW_OFFSET_DETECTION_PERFECT; BedSkewOffsetDetectionResultType result = BED_SKEW_OFFSET_DETECTION_PERFECT;
{ {
angleDiff = fabs(a2 - a1); angleDiff = fabs(a2 - a1);
eeprom_update_float((float*)(EEPROM_XYZ_CAL_SKEW), angleDiff); //storing xyz cal. skew to be able to show in support menu later /// XY skew and Y-bed skew
DBG(_n("Measured skews: %f %f\n"), degrees(a2 - a1), degrees(a2));
eeprom_update_float((float *)(EEPROM_XYZ_CAL_SKEW), angleDiff); //storing xyz cal. skew to be able to show in support menu later
if (angleDiff > bed_skew_angle_mild) if (angleDiff > bed_skew_angle_mild)
result = (angleDiff > bed_skew_angle_extreme) ? result = (angleDiff > bed_skew_angle_extreme) ?
BED_SKEW_OFFSET_DETECTION_SKEW_EXTREME : BED_SKEW_OFFSET_DETECTION_SKEW_EXTREME :
@ -1380,7 +1384,7 @@ inline bool find_bed_induction_sensor_point_xy(int verbosity_level)
// go_xyz(current_position[X_AXIS], current_position[Y_AXIS], MESH_HOME_Z_SEARCH, homing_feedrate[Z_AXIS]/60); // go_xyz(current_position[X_AXIS], current_position[Y_AXIS], MESH_HOME_Z_SEARCH, homing_feedrate[Z_AXIS]/60);
go_xyz(x0, y0, current_position[Z_AXIS], feedrate); go_xyz(x0, y0, current_position[Z_AXIS], feedrate);
// Continously lower the Z axis. // Continuously lower the Z axis.
endstops_hit_on_purpose(); endstops_hit_on_purpose();
enable_z_endstop(true); enable_z_endstop(true);
while (current_position[Z_AXIS] > -10.f) { while (current_position[Z_AXIS] > -10.f) {
@ -2375,8 +2379,9 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level
delay_keep_alive(3000); delay_keep_alive(3000);
} }
#endif // SUPPORT_VERBOSITY #endif // SUPPORT_VERBOSITY
} }
delay_keep_alive(0); //manage_heater, reset watchdog, manage inactivity DBG(_n("All 4 calibration points found.\n"));
delay_keep_alive(0); //manage_heater, reset watchdog, manage inactivity
#ifdef SUPPORT_VERBOSITY #ifdef SUPPORT_VERBOSITY
if (verbosity_level >= 20) { if (verbosity_level >= 20) {
@ -2386,7 +2391,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level
// Don't let the manage_inactivity() function remove power from the motors. // Don't let the manage_inactivity() function remove power from the motors.
refresh_cmd_timeout(); refresh_cmd_timeout();
// Go to the measurement point. // Go to the measurement point.
// Use the coorrected coordinate, which is a result of find_bed_offset_and_skew(). // Use the corrected coordinate, which is a result of find_bed_offset_and_skew().
current_position[X_AXIS] = pts[mesh_point * 2]; current_position[X_AXIS] = pts[mesh_point * 2];
current_position[Y_AXIS] = pts[mesh_point * 2 + 1]; current_position[Y_AXIS] = pts[mesh_point * 2 + 1];
go_to_current(homing_feedrate[X_AXIS] / 60); go_to_current(homing_feedrate[X_AXIS] / 60);
@ -2406,6 +2411,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level
delay_keep_alive(0); //manage_heater, reset watchdog, manage inactivity delay_keep_alive(0); //manage_heater, reset watchdog, manage inactivity
if (result >= 0) { if (result >= 0) {
DBG(_n("Calibration success.\n"));
world2machine_update(vec_x, vec_y, cntr); world2machine_update(vec_x, vec_y, cntr);
#if 1 #if 1
// Fearlessly store the calibration values into the eeprom. // Fearlessly store the calibration values into the eeprom.
@ -2450,7 +2456,7 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level
// Don't let the manage_inactivity() function remove power from the motors. // Don't let the manage_inactivity() function remove power from the motors.
refresh_cmd_timeout(); refresh_cmd_timeout();
// Go to the measurement point. // Go to the measurement point.
// Use the coorrected coordinate, which is a result of find_bed_offset_and_skew(). // Use the corrected coordinate, which is a result of find_bed_offset_and_skew().
uint8_t ix = mesh_point % MESH_MEAS_NUM_X_POINTS; // from 0 to MESH_NUM_X_POINTS - 1 uint8_t ix = mesh_point % MESH_MEAS_NUM_X_POINTS; // from 0 to MESH_NUM_X_POINTS - 1
uint8_t iy = mesh_point / MESH_MEAS_NUM_X_POINTS; uint8_t iy = mesh_point / MESH_MEAS_NUM_X_POINTS;
if (iy & 1) ix = (MESH_MEAS_NUM_X_POINTS - 1) - ix; if (iy & 1) ix = (MESH_MEAS_NUM_X_POINTS - 1) - ix;
@ -2462,9 +2468,12 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level
} }
#endif // SUPPORT_VERBOSITY #endif // SUPPORT_VERBOSITY
return result; return result;
} }
if (result == BED_SKEW_OFFSET_DETECTION_FITTING_FAILED && too_far_mask == 2) return result; //if fitting failed and front center point is out of reach, terminate calibration and inform user if (result == BED_SKEW_OFFSET_DETECTION_FITTING_FAILED && too_far_mask == 2){
iteration++; DBG(_n("Fitting failed => calibration failed.\n"));
return result; //if fitting failed and front center point is out of reach, terminate calibration and inform user
}
iteration++;
} }
return result; return result;
} }

View File

@ -16,17 +16,24 @@ const char MSG_BED_DONE[] PROGMEM_I1 = ISTR("Bed done"); ////
const char MSG_BED_HEATING[] PROGMEM_I1 = ISTR("Bed Heating"); //// const char MSG_BED_HEATING[] PROGMEM_I1 = ISTR("Bed Heating"); ////
const char MSG_BED_LEVELING_FAILED_POINT_LOW[] PROGMEM_I1 = ISTR("Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset."); ////c=20 r=5 const char MSG_BED_LEVELING_FAILED_POINT_LOW[] PROGMEM_I1 = ISTR("Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset."); ////c=20 r=5
const char MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED[] PROGMEM_I1 = ISTR("XYZ calibration failed. Please consult the manual."); ////c=20 r=8 const char MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED[] PROGMEM_I1 = ISTR("XYZ calibration failed. Please consult the manual."); ////c=20 r=8
const char MSG_BELT_STATUS[] PROGMEM_I1 = ISTR("Belt Status");////c=18
const char MSG_CALIBRATE_Z_AUTO[] PROGMEM_I1 = ISTR("Calibrating Z"); ////c=20 r=2 const char MSG_CALIBRATE_Z_AUTO[] PROGMEM_I1 = ISTR("Calibrating Z"); ////c=20 r=2
const char MSG_CARD_MENU[] PROGMEM_I1 = ISTR("Print from SD"); //// const char MSG_CARD_MENU[] PROGMEM_I1 = ISTR("Print from SD"); ////
const char MSG_CHECKING_X[] PROGMEM_I1 = ISTR("Checking X axis"); ////c=20
const char MSG_CHECKING_Y[] PROGMEM_I1 = ISTR("Checking Y axis"); ////c=20
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_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_COOLDOWN[] PROGMEM_I1 = ISTR("Cooldown"); ////
const char MSG_CRASH[] PROGMEM_I1 = ISTR("Crash"); ////c=7
const char MSG_CRASH_DETECTED[] PROGMEM_I1 = ISTR("Crash detected."); ////c=20 r=1 const char MSG_CRASH_DETECTED[] PROGMEM_I1 = ISTR("Crash detected."); ////c=20 r=1
const char MSG_CRASHDETECT[] PROGMEM_I1 = ISTR("Crash det."); ////c=13 const char MSG_CRASHDETECT[] PROGMEM_I1 = ISTR("Crash det."); ////c=13
const char MSG_ERROR[] PROGMEM_I1 = ISTR("ERROR:"); //// const char MSG_ERROR[] PROGMEM_I1 = ISTR("ERROR:"); ////
const char MSG_EXTRUDER[] PROGMEM_I1 = ISTR("Extruder"); ////c=17 r=1 const char MSG_EXTRUDER[] PROGMEM_I1 = ISTR("Extruder"); ////c=17
const char MSG_FANS_CHECK[] PROGMEM_I1 = ISTR("Fans check"); ////c=13
const char MSG_FIL_RUNOUTS[] PROGMEM_I1 = ISTR("Fil. runouts"); ////c=14
const char MSG_FILAMENT[] PROGMEM_I1 = ISTR("Filament"); ////c=17 r=1 const char MSG_FILAMENT[] PROGMEM_I1 = ISTR("Filament"); ////c=17 r=1
const char MSG_FAN_SPEED[] PROGMEM_I1 = ISTR("Fan speed"); ////c=14 const char MSG_FAN_SPEED[] PROGMEM_I1 = ISTR("Fan speed"); ////c=14
const char MSG_FILAMENT_CLEAN[] PROGMEM_I1 = ISTR("Filament extruding & with correct color?"); ////c=20 r=2 const char MSG_FILAMENT_CLEAN[] PROGMEM_I1 = ISTR("Filament extruding & with correct color?"); ////c=20 r=2
const char MSG_FILAMENT_LOADED[] PROGMEM_I1 = ISTR("Is filament loaded?"); ////c=20 r=2
const char MSG_FILAMENT_LOADING_T0[] PROGMEM_I1 = ISTR("Insert filament into extruder 1. Click when done."); ////c=20 r=4 const char MSG_FILAMENT_LOADING_T0[] PROGMEM_I1 = ISTR("Insert filament into extruder 1. Click when done."); ////c=20 r=4
const char MSG_FILAMENT_LOADING_T1[] PROGMEM_I1 = ISTR("Insert filament into extruder 2. Click when done."); ////c=20 r=4 const char MSG_FILAMENT_LOADING_T1[] PROGMEM_I1 = ISTR("Insert filament into extruder 2. Click when done."); ////c=20 r=4
const char MSG_FILAMENT_LOADING_T2[] PROGMEM_I1 = ISTR("Insert filament into extruder 3. Click when done."); ////c=20 r=4 const char MSG_FILAMENT_LOADING_T2[] PROGMEM_I1 = ISTR("Insert filament into extruder 3. Click when done."); ////c=20 r=4
@ -44,6 +51,8 @@ const char MSG_HEATING_COMPLETE[] PROGMEM_I1 = ISTR("Heating done."); ////c=20
const char MSG_HOMEYZ[] PROGMEM_I1 = ISTR("Calibrate Z"); //// const char MSG_HOMEYZ[] PROGMEM_I1 = ISTR("Calibrate Z"); ////
const char MSG_CHOOSE_EXTRUDER[] PROGMEM_I1 = ISTR("Choose extruder:"); ////c=20 r=1 const char MSG_CHOOSE_EXTRUDER[] PROGMEM_I1 = ISTR("Choose extruder:"); ////c=20 r=1
const char MSG_CHOOSE_FILAMENT[] PROGMEM_I1 = ISTR("Choose filament:"); ////c=20 r=1 const char MSG_CHOOSE_FILAMENT[] PROGMEM_I1 = ISTR("Choose filament:"); ////c=20 r=1
const char MSG_LAST_PRINT[] PROGMEM_I1 = ISTR("Last print"); ////c=18
const char MSG_LAST_PRINT_FAILURES[] PROGMEM_I1 = ISTR("Last print failures"); ////c=20
const char MSG_LOAD_FILAMENT[] PROGMEM_I1 = ISTR("Load filament"); //// Number 1 to 5 is added behind text e.g. "Load filament 1" c=16 const char MSG_LOAD_FILAMENT[] PROGMEM_I1 = ISTR("Load filament"); //// Number 1 to 5 is added behind text e.g. "Load filament 1" c=16
const char MSG_LOADING_FILAMENT[] PROGMEM_I1 = ISTR("Loading filament"); ////c=20 const char MSG_LOADING_FILAMENT[] PROGMEM_I1 = ISTR("Loading filament"); ////c=20
const char MSG_EJECT_FILAMENT[] PROGMEM_I1 = ISTR("Eject filament"); //// Number 1 to 5 is added behind text e.g. "Eject filament 1" c=16 const char MSG_EJECT_FILAMENT[] PROGMEM_I1 = ISTR("Eject filament"); //// Number 1 to 5 is added behind text e.g. "Eject filament 1" c=16
@ -52,22 +61,28 @@ const char MSG_M117_V2_CALIBRATION[] PROGMEM_I1 = ISTR("M117 First layer cal.");
const char MSG_MAIN[] PROGMEM_I1 = ISTR("Main"); //// const char MSG_MAIN[] PROGMEM_I1 = ISTR("Main"); ////
const char MSG_BACK[] PROGMEM_I1 = ISTR("Back"); //// const char MSG_BACK[] PROGMEM_I1 = ISTR("Back"); ////
const char MSG_SHEET[] PROGMEM_I1 = ISTR("Sheet"); ////c=10 const char MSG_SHEET[] PROGMEM_I1 = ISTR("Sheet"); ////c=10
const char MSG_STEEL_SHEETS[] PROGMEM_I1 = ISTR("Steel sheets"); ////c=18
const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1[] PROGMEM_I1 = ISTR("Measuring reference height of calibration point"); ////c=60 const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1[] PROGMEM_I1 = ISTR("Measuring reference height of calibration point"); ////c=60
const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2[] PROGMEM_I1 = ISTR(" of 9"); ////c=14 const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2[] PROGMEM_I1 = ISTR(" of 9"); ////c=14
const char MSG_MENU_CALIBRATION[] PROGMEM_I1 = ISTR("Calibration"); //// const char MSG_MENU_CALIBRATION[] PROGMEM_I1 = ISTR("Calibration"); ////
const char MSG_MMU_FAILS[] PROGMEM_I1 = ISTR("MMU fails"); ////c=14
const char MSG_MMU_LOAD_FAILS[] PROGMEM_I1 = ISTR("MMU load fails"); ////c=14
const char MSG_NO[] PROGMEM_I1 = ISTR("No"); //// const char MSG_NO[] PROGMEM_I1 = ISTR("No"); ////
const char MSG_NOZZLE[] PROGMEM_I1 = ISTR("Nozzle"); //// const char MSG_NOZZLE[] PROGMEM_I1 = ISTR("Nozzle"); ////
const char MSG_PAPER[] PROGMEM_I1 = ISTR("Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."); ////c=20 r=10 const char MSG_PAPER[] PROGMEM_I1 = ISTR("Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."); ////c=20 r=10
const char MSG_PLACE_STEEL_SHEET[] PROGMEM_I1 = ISTR("Please place steel sheet on heatbed."); ////c=20 r=4 const char MSG_PLACE_STEEL_SHEET[] PROGMEM_I1 = ISTR("Please place steel sheet on heatbed."); ////c=20 r=4
const char MSG_PLEASE_WAIT[] PROGMEM_I1 = ISTR("Please wait"); ////c=20 const char MSG_PLEASE_WAIT[] PROGMEM_I1 = ISTR("Please wait"); ////c=20
const char MSG_POWER_FAILURES[] PROGMEM_I1 = ISTR("Power failures"); ////c=14
const char MSG_PREHEAT_NOZZLE[] PROGMEM_I1 = ISTR("Preheat the nozzle!"); ////c=20 const char MSG_PREHEAT_NOZZLE[] PROGMEM_I1 = ISTR("Preheat the nozzle!"); ////c=20
const char MSG_PRESS_TO_UNLOAD[] PROGMEM_I1 = ISTR("Please press the knob to unload filament"); ////c=20 r=4 const char MSG_PRESS_TO_UNLOAD[] PROGMEM_I1 = ISTR("Please press the knob to unload filament"); ////c=20 r=4
const char MSG_PRINT_ABORTED[] PROGMEM_I1 = ISTR("Print aborted"); ////c=20 const char MSG_PRINT_ABORTED[] PROGMEM_I1 = ISTR("Print aborted"); ////c=20
const char MSG_PULL_OUT_FILAMENT[] PROGMEM_I1 = ISTR("Please pull out filament immediately"); ////c=20 r=4 const char MSG_PULL_OUT_FILAMENT[] PROGMEM_I1 = ISTR("Please pull out filament immediately"); ////c=20 r=4
const char MSG_RECOVER_PRINT[] PROGMEM_I1 = ISTR("Blackout occurred. Recover print?"); ////c=20 r=2 const char MSG_RECOVER_PRINT[] PROGMEM_I1 = ISTR("Blackout occurred. Recover print?"); ////c=20 r=2
const char MSG_REFRESH[] PROGMEM_I1 = ISTR("\xF8" "Refresh"); //// const char MSG_REFRESH[] PROGMEM_I1 = ISTR("\xF8" "Refresh"); ////
const char MSG_RESUMING_PRINT[] PROGMEM_I1 = ISTR("Resuming print"); ////
const char MSG_REMOVE_STEEL_SHEET[] PROGMEM_I1 = ISTR("Please remove steel sheet from heatbed."); ////c=20 r=4 const char MSG_REMOVE_STEEL_SHEET[] PROGMEM_I1 = ISTR("Please remove steel sheet from heatbed."); ////c=20 r=4
const char MSG_RESET[] PROGMEM_I1 = ISTR("Reset"); ////c=14
const char MSG_RESUME_PRINT[] PROGMEM_I1 = ISTR("Resume print"); ////c=18
const char MSG_RESUMING_PRINT[] PROGMEM_I1 = ISTR("Resuming print"); ////
const char MSG_SELFTEST_COOLING_FAN[] PROGMEM_I1 = ISTR("Front print fan?"); ////c=20 const char MSG_SELFTEST_COOLING_FAN[] PROGMEM_I1 = ISTR("Front print fan?"); ////c=20
const char MSG_SELFTEST_EXTRUDER_FAN[] PROGMEM_I1 = ISTR("Left hotend fan?"); ////c=20 const char MSG_SELFTEST_EXTRUDER_FAN[] PROGMEM_I1 = ISTR("Left hotend fan?"); ////c=20
const char MSG_SELFTEST_FAILED[] PROGMEM_I1 = ISTR("Selftest failed "); ////c=20 const char MSG_SELFTEST_FAILED[] PROGMEM_I1 = ISTR("Selftest failed "); ////c=20
@ -80,7 +95,9 @@ const char MSG_SELFTEST_MOTOR[] PROGMEM_I1 = ISTR("Motor"); ////
const char MSG_SELFTEST_FILAMENT_SENSOR[] PROGMEM_I1 = ISTR("Filament sensor"); ////c=17 const char MSG_SELFTEST_FILAMENT_SENSOR[] PROGMEM_I1 = ISTR("Filament sensor"); ////c=17
const char MSG_SELFTEST_WIRINGERROR[] PROGMEM_I1 = ISTR("Wiring error"); //// const char MSG_SELFTEST_WIRINGERROR[] PROGMEM_I1 = ISTR("Wiring error"); ////
const char MSG_SETTINGS[] PROGMEM_I1 = ISTR("Settings"); //// const char MSG_SETTINGS[] PROGMEM_I1 = ISTR("Settings"); ////
const char MSG_HW_SETUP[] PROGMEM_I1 = ISTR("HW Setup"); //// const char MSG_TOTAL[] PROGMEM_I1 = ISTR("Total"); ////c=6
const char MSG_TOTAL_FAILURES[] PROGMEM_I1 = ISTR("Total failures"); ////c=20
const char MSG_HW_SETUP[] PROGMEM_I1 = ISTR("HW Setup"); ////c=18
const char MSG_MODE[] PROGMEM_I1 = ISTR("Mode"); //// const char MSG_MODE[] PROGMEM_I1 = ISTR("Mode"); ////
const char MSG_HIGH_POWER[] PROGMEM_I1 = ISTR("High power"); //// const char MSG_HIGH_POWER[] PROGMEM_I1 = ISTR("High power"); ////
const char MSG_AUTO_POWER[] PROGMEM_I1 = ISTR("Auto power"); //// const char MSG_AUTO_POWER[] PROGMEM_I1 = ISTR("Auto power"); ////
@ -113,6 +130,8 @@ const char MSG_STRICT[] PROGMEM_I1 = ISTR("Strict"); ////
const char MSG_MODEL[] PROGMEM_I1 = ISTR("Model"); //// const char MSG_MODEL[] PROGMEM_I1 = ISTR("Model"); ////
const char MSG_FIRMWARE[] PROGMEM_I1 = ISTR("Firmware"); //// const char MSG_FIRMWARE[] PROGMEM_I1 = ISTR("Firmware"); ////
const char MSG_GCODE[] PROGMEM_I1 = ISTR("Gcode"); //// const char MSG_GCODE[] PROGMEM_I1 = ISTR("Gcode"); ////
const char MSG_GCODE_DIFF_PRINTER_CONTINUE[] PROGMEM_I1 = ISTR("G-code sliced for a different printer type. Continue?"); ////c=20 r=5
const char MSG_GCODE_DIFF_PRINTER_CANCELLED[] PROGMEM_I1 =ISTR("G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."); ////c=20 r=6
const char MSG_NOZZLE_DIAMETER[] PROGMEM_I1 = ISTR("Nozzle d."); //// const char MSG_NOZZLE_DIAMETER[] PROGMEM_I1 = ISTR("Nozzle d."); ////
const char MSG_MMU_MODE[] PROGMEM_I1 = ISTR("MMU Mode"); //// const char MSG_MMU_MODE[] PROGMEM_I1 = ISTR("MMU Mode"); ////
const char MSG_SD_CARD[] PROGMEM_I1 = ISTR("SD card"); //// const char MSG_SD_CARD[] PROGMEM_I1 = ISTR("SD card"); ////
@ -126,6 +145,7 @@ const char MSG_SOUND_LOUD[] PROGMEM_I1 = ISTR("Loud"); ////
const char MSG_SOUND_ONCE[] PROGMEM_I1 = ISTR("Once"); //// const char MSG_SOUND_ONCE[] PROGMEM_I1 = ISTR("Once"); ////
const char MSG_SOUND_BLIND[] PROGMEM_I1 = ISTR("Assist"); //// const char MSG_SOUND_BLIND[] PROGMEM_I1 = ISTR("Assist"); ////
const char MSG_MESH[] PROGMEM_I1 = ISTR("Mesh"); //// const char MSG_MESH[] PROGMEM_I1 = ISTR("Mesh"); ////
const char MSG_MESH_BED_LEVELING[] PROGMEM_I1 = ISTR("Mesh Bed Leveling"); ////c=18
const char MSG_Z_PROBE_NR[] PROGMEM_I1 = ISTR("Z-probe nr."); //// 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_MAGNETS_COMP[] PROGMEM_I1 = ISTR("Magnets comp."); ////
const char MSG_FS_ACTION[] PROGMEM_I1 = ISTR("FS Action"); ////c=10 const char MSG_FS_ACTION[] PROGMEM_I1 = ISTR("FS Action"); ////c=10

View File

@ -17,17 +17,24 @@ extern const char MSG_BED_DONE[];
extern const char MSG_BED_HEATING[]; extern const char MSG_BED_HEATING[];
extern const char MSG_BED_LEVELING_FAILED_POINT_LOW[]; extern const char MSG_BED_LEVELING_FAILED_POINT_LOW[];
extern const char MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED[]; extern const char MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED[];
extern const char MSG_BELT_STATUS[];
extern const char MSG_CALIBRATE_Z_AUTO[]; extern const char MSG_CALIBRATE_Z_AUTO[];
extern const char MSG_CARD_MENU[]; extern const char MSG_CARD_MENU[];
extern const char MSG_CHECKING_X[];
extern const char MSG_CHECKING_Y[];
extern const char MSG_CONFIRM_NOZZLE_CLEAN[]; extern const char MSG_CONFIRM_NOZZLE_CLEAN[];
extern const char MSG_COOLDOWN[]; extern const char MSG_COOLDOWN[];
extern const char MSG_CRASH[];
extern const char MSG_CRASH_DETECTED[]; extern const char MSG_CRASH_DETECTED[];
extern const char MSG_CRASHDETECT[]; extern const char MSG_CRASHDETECT[];
extern const char MSG_ERROR[]; extern const char MSG_ERROR[];
extern const char MSG_EXTRUDER[]; extern const char MSG_EXTRUDER[];
extern const char MSG_FANS_CHECK[];
extern const char MSG_FIL_RUNOUTS[];
extern const char MSG_FILAMENT[]; extern const char MSG_FILAMENT[];
extern const char MSG_FAN_SPEED[]; extern const char MSG_FAN_SPEED[];
extern const char MSG_FILAMENT_CLEAN[]; extern const char MSG_FILAMENT_CLEAN[];
extern const char MSG_FILAMENT_LOADED[];
extern const char MSG_FILAMENT_LOADING_T0[]; extern const char MSG_FILAMENT_LOADING_T0[];
extern const char MSG_FILAMENT_LOADING_T1[]; extern const char MSG_FILAMENT_LOADING_T1[];
extern const char MSG_FILAMENT_LOADING_T2[]; extern const char MSG_FILAMENT_LOADING_T2[];
@ -45,20 +52,26 @@ extern const char MSG_HEATING_COMPLETE[];
extern const char MSG_HOMEYZ[]; extern const char MSG_HOMEYZ[];
extern const char MSG_CHOOSE_EXTRUDER[]; extern const char MSG_CHOOSE_EXTRUDER[];
extern const char MSG_CHOOSE_FILAMENT[]; extern const char MSG_CHOOSE_FILAMENT[];
extern const char MSG_LAST_PRINT[];
extern const char MSG_LAST_PRINT_FAILURES[];
extern const char MSG_LOAD_FILAMENT[]; extern const char MSG_LOAD_FILAMENT[];
extern const char MSG_LOADING_FILAMENT[]; extern const char MSG_LOADING_FILAMENT[];
extern const char MSG_M117_V2_CALIBRATION[]; extern const char MSG_M117_V2_CALIBRATION[];
extern const char MSG_MAIN[]; extern const char MSG_MAIN[];
extern const char MSG_BACK[]; extern const char MSG_BACK[];
extern const char MSG_SHEET[]; extern const char MSG_SHEET[];
extern const char MSG_STEEL_SHEETS[];
extern const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1[]; extern const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1[];
extern const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2[]; extern const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2[];
extern const char MSG_MENU_CALIBRATION[]; extern const char MSG_MENU_CALIBRATION[];
extern const char MSG_MMU_FAILS[];
extern const char MSG_MMU_LOAD_FAILS[];
extern const char MSG_NO[]; extern const char MSG_NO[];
extern const char MSG_NOZZLE[]; extern const char MSG_NOZZLE[];
extern const char MSG_PAPER[]; extern const char MSG_PAPER[];
extern const char MSG_PLACE_STEEL_SHEET[]; extern const char MSG_PLACE_STEEL_SHEET[];
extern const char MSG_PLEASE_WAIT[]; extern const char MSG_PLEASE_WAIT[];
extern const char MSG_POWER_FAILURES[];
extern const char MSG_PREHEAT_NOZZLE[]; extern const char MSG_PREHEAT_NOZZLE[];
extern const char MSG_PRESS_TO_UNLOAD[]; extern const char MSG_PRESS_TO_UNLOAD[];
extern const char MSG_PRINT_ABORTED[]; extern const char MSG_PRINT_ABORTED[];
@ -66,6 +79,8 @@ extern const char MSG_PULL_OUT_FILAMENT[];
extern const char MSG_RECOVER_PRINT[]; extern const char MSG_RECOVER_PRINT[];
extern const char MSG_REFRESH[]; extern const char MSG_REFRESH[];
extern const char MSG_REMOVE_STEEL_SHEET[]; extern const char MSG_REMOVE_STEEL_SHEET[];
extern const char MSG_RESET[];
extern const char MSG_RESUME_PRINT[];
extern const char MSG_RESUMING_PRINT[]; extern const char MSG_RESUMING_PRINT[];
extern const char MSG_SD_WORKDIR_FAIL[]; extern const char MSG_SD_WORKDIR_FAIL[];
extern const char MSG_SELFTEST_COOLING_FAN[]; extern const char MSG_SELFTEST_COOLING_FAN[];
@ -80,6 +95,8 @@ extern const char MSG_SELFTEST_MOTOR[];
extern const char MSG_SELFTEST_FILAMENT_SENSOR[]; extern const char MSG_SELFTEST_FILAMENT_SENSOR[];
extern const char MSG_SELFTEST_WIRINGERROR[]; extern const char MSG_SELFTEST_WIRINGERROR[];
extern const char MSG_SETTINGS[]; extern const char MSG_SETTINGS[];
extern const char MSG_TOTAL[];
extern const char MSG_TOTAL_FAILURES[];
extern const char MSG_HW_SETUP[]; extern const char MSG_HW_SETUP[];
extern const char MSG_MODE[]; extern const char MSG_MODE[];
extern const char MSG_HIGH_POWER[]; extern const char MSG_HIGH_POWER[];
@ -113,6 +130,8 @@ extern const char MSG_STRICT[];
extern const char MSG_MODEL[]; extern const char MSG_MODEL[];
extern const char MSG_FIRMWARE[]; extern const char MSG_FIRMWARE[];
extern const char MSG_GCODE[]; extern const char MSG_GCODE[];
extern const char MSG_GCODE_DIFF_PRINTER_CONTINUE[];
extern const char MSG_GCODE_DIFF_PRINTER_CANCELLED[];
extern const char MSG_NOZZLE_DIAMETER[]; extern const char MSG_NOZZLE_DIAMETER[];
extern const char MSG_MMU_MODE[]; extern const char MSG_MMU_MODE[];
extern const char MSG_SD_CARD[]; extern const char MSG_SD_CARD[];
@ -126,6 +145,7 @@ extern const char MSG_SOUND_LOUD[];
extern const char MSG_SOUND_ONCE[]; extern const char MSG_SOUND_ONCE[];
extern const char MSG_SOUND_BLIND[]; extern const char MSG_SOUND_BLIND[];
extern const char MSG_MESH[]; extern const char MSG_MESH[];
extern const char MSG_MESH_BED_LEVELING[];
extern const char MSG_Z_PROBE_NR[]; extern const char MSG_Z_PROBE_NR[];
extern const char MSG_MAGNETS_COMP[]; extern const char MSG_MAGNETS_COMP[];
extern const char MSG_FS_ACTION[]; extern const char MSG_FS_ACTION[];

View File

@ -567,11 +567,11 @@ bool can_extrude()
static void get_response_print_info(uint8_t move) { static void get_response_print_info(uint8_t move) {
printf_P(PSTR("mmu_get_response - begin move: "), move); printf_P(PSTR("mmu_get_response - begin move: "), move);
switch (move) { switch (move) {
case MMU_LOAD_MOVE: printf_P(PSTR("load\n")); break; case MMU_LOAD_MOVE: puts_P(PSTR("load")); break;
case MMU_UNLOAD_MOVE: printf_P(PSTR("unload\n")); break; case MMU_UNLOAD_MOVE: puts_P(PSTR("unload")); break;
case MMU_TCODE_MOVE: printf_P(PSTR("T-code\n")); break; case MMU_TCODE_MOVE: puts_P(PSTR("T-code")); break;
case MMU_NO_MOVE: printf_P(PSTR("no move\n")); break; case MMU_NO_MOVE: puts_P(PSTR("no move")); break;
default: printf_P(PSTR("error: unknown move\n")); break; default: puts_P(PSTR("error: unknown move")); break;
} }
} }
@ -602,7 +602,7 @@ bool mmu_get_response(uint8_t move)
{ {
if (can_extrude()) if (can_extrude())
{ {
printf_P(PSTR("Unload 1\n")); puts_P(PSTR("Unload 1"));
current_position[E_AXIS] = current_position[E_AXIS] - MMU_LOAD_FEEDRATE * MMU_LOAD_TIME_MS*0.001; current_position[E_AXIS] = current_position[E_AXIS] - MMU_LOAD_FEEDRATE * MMU_LOAD_TIME_MS*0.001;
plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE); plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE);
st_synchronize(); st_synchronize();
@ -610,7 +610,7 @@ bool mmu_get_response(uint8_t move)
} }
else //filament was unloaded from idler, no additional movements needed else //filament was unloaded from idler, no additional movements needed
{ {
printf_P(PSTR("Unloading finished 1\n")); puts_P(PSTR("Unloading finished 1"));
disable_e0(); //turn off E-stepper to prevent overheating and alow filament pull-out if necessary disable_e0(); //turn off E-stepper to prevent overheating and alow filament pull-out if necessary
move = MMU_NO_MOVE; move = MMU_NO_MOVE;
} }
@ -620,7 +620,7 @@ bool mmu_get_response(uint8_t move)
{ {
if (can_extrude()) if (can_extrude())
{ {
printf_P(PSTR("Unload 2\n")); puts_P(PSTR("Unload 2"));
current_position[E_AXIS] = current_position[E_AXIS] - MMU_LOAD_FEEDRATE * MMU_LOAD_TIME_MS*0.001; current_position[E_AXIS] = current_position[E_AXIS] - MMU_LOAD_FEEDRATE * MMU_LOAD_TIME_MS*0.001;
plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE); plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE);
st_synchronize(); st_synchronize();
@ -628,7 +628,7 @@ bool mmu_get_response(uint8_t move)
} }
else //delay to allow mmu unit to pull out filament from bondtech gears and then start with infinite loading else //delay to allow mmu unit to pull out filament from bondtech gears and then start with infinite loading
{ {
printf_P(PSTR("Unloading finished 2\n")); puts_P(PSTR("Unloading finished 2"));
disable_e0(); //turn off E-stepper to prevent overheating and alow filament pull-out if necessary disable_e0(); //turn off E-stepper to prevent overheating and alow filament pull-out if necessary
delay_keep_alive(MMU_LOAD_TIME_MS); delay_keep_alive(MMU_LOAD_TIME_MS);
move = MMU_LOAD_MOVE; move = MMU_LOAD_MOVE;
@ -689,7 +689,7 @@ void manage_response(bool move_axes, bool turn_off_nozzle, uint8_t move)
} }
st_synchronize(); st_synchronize();
mmu_print_saved = true; mmu_print_saved = true;
printf_P(PSTR("MMU not responding\n")); puts_P(PSTR("MMU not responding"));
KEEPALIVE_STATE(PAUSED_FOR_USER); KEEPALIVE_STATE(PAUSED_FOR_USER);
hotend_temp_bckp = degTargetHotend(active_extruder); hotend_temp_bckp = degTargetHotend(active_extruder);
if (move_axes) { if (move_axes) {
@ -746,7 +746,7 @@ void manage_response(bool move_axes, bool turn_off_nozzle, uint8_t move)
} }
} }
else if (mmu_print_saved) { else if (mmu_print_saved) {
printf_P(PSTR("MMU starts responding\n")); puts_P(PSTR("MMU starts responding"));
KEEPALIVE_STATE(IN_HANDLER); KEEPALIVE_STATE(IN_HANDLER);
mmu_loading_flag = false; mmu_loading_flag = false;
if (turn_off_nozzle) if (turn_off_nozzle)
@ -878,8 +878,8 @@ void mmu_M600_load_filament(bool automatic, float nozzle_temp)
} }
lcd_update_enable(false); lcd_update_enable(false);
lcd_clear(); lcd_clear();
lcd_set_cursor(0, 1); lcd_puts_P(_T(MSG_LOADING_FILAMENT)); lcd_puts_at_P(0, 1, _T(MSG_LOADING_FILAMENT));
lcd_print(" "); lcd_print(' ');
lcd_print(tmp_extruder + 1); lcd_print(tmp_extruder + 1);
snmm_filaments_used |= (1 << tmp_extruder); //for stop print snmm_filaments_used |= (1 << tmp_extruder); //for stop print
@ -991,10 +991,10 @@ void extr_adj(uint8_t extruder) //loading filament for SNMM
lcd_update_enable(false); lcd_update_enable(false);
lcd_clear(); lcd_clear();
lcd_set_cursor(0, 1); lcd_puts_P(_T(MSG_LOADING_FILAMENT)); lcd_puts_at_P(0, 1, _T(MSG_LOADING_FILAMENT));
//if(strlen(_T(MSG_LOADING_FILAMENT))>18) lcd.setCursor(0, 1); //if(strlen(_T(MSG_LOADING_FILAMENT))>18) lcd.setCursor(0, 1);
//else lcd.print(" "); //else lcd.print(" ");
lcd_print(" "); lcd_print(' ');
lcd_print(extruder + 1); lcd_print(extruder + 1);
// get response // get response
@ -1034,7 +1034,7 @@ void extr_adj(uint8_t extruder) //loading filament for SNMM
lcd_clear(); lcd_clear();
lcd_set_cursor(0, 0); lcd_puts_P(_T(MSG_LOADING_FILAMENT)); lcd_set_cursor(0, 0); lcd_puts_P(_T(MSG_LOADING_FILAMENT));
if(strlen(_T(MSG_LOADING_FILAMENT))>18) lcd_set_cursor(0, 1); if(strlen(_T(MSG_LOADING_FILAMENT))>18) lcd_set_cursor(0, 1);
else lcd_print(" "); else lcd_print(' ');
lcd_print(mmu_extruder + 1); lcd_print(mmu_extruder + 1);
lcd_set_cursor(0, 2); lcd_puts_P(_T(MSG_PLEASE_WAIT)); lcd_set_cursor(0, 2); lcd_puts_P(_T(MSG_PLEASE_WAIT));
st_synchronize(); st_synchronize();
@ -1081,9 +1081,9 @@ void mmu_filament_ramming()
void extr_unload_view() void extr_unload_view()
{ {
lcd_clear(); lcd_clear();
lcd_set_cursor(0, 1); lcd_puts_P(_T(MSG_UNLOADING_FILAMENT)); lcd_puts_at_P(0, 1, _T(MSG_UNLOADING_FILAMENT));
lcd_print(" "); lcd_print(' ');
if (mmu_extruder == MMU_FILAMENT_UNKNOWN) lcd_print(" "); if (mmu_extruder == MMU_FILAMENT_UNKNOWN) lcd_print(' ');
else lcd_print(mmu_extruder + 1); else lcd_print(mmu_extruder + 1);
} }
@ -1115,7 +1115,7 @@ void extr_unload()
lcd_display_message_fullscreen_P(PSTR("")); lcd_display_message_fullscreen_P(PSTR(""));
max_feedrate[E_AXIS] = 50; max_feedrate[E_AXIS] = 50;
lcd_set_cursor(0, 0); lcd_puts_P(_T(MSG_UNLOADING_FILAMENT)); lcd_set_cursor(0, 0); lcd_puts_P(_T(MSG_UNLOADING_FILAMENT));
lcd_print(" "); lcd_print(' ');
lcd_print(mmu_extruder + 1); lcd_print(mmu_extruder + 1);
lcd_set_cursor(0, 2); lcd_puts_P(_T(MSG_PLEASE_WAIT)); lcd_set_cursor(0, 2); lcd_puts_P(_T(MSG_PLEASE_WAIT));
if (current_position[Z_AXIS] < 15) { if (current_position[Z_AXIS] < 15) {
@ -1349,9 +1349,8 @@ void lcd_mmu_load_to_nozzle(uint8_t filament_nr)
tmp_extruder = filament_nr; tmp_extruder = filament_nr;
lcd_update_enable(false); lcd_update_enable(false);
lcd_clear(); lcd_clear();
lcd_set_cursor(0, 1); lcd_puts_at_P(0, 1, _T(MSG_LOADING_FILAMENT));
lcd_puts_P(_T(MSG_LOADING_FILAMENT)); lcd_print(' ');
lcd_print(" ");
lcd_print(tmp_extruder + 1); lcd_print(tmp_extruder + 1);
mmu_command(MmuCmd::T0 + tmp_extruder); mmu_command(MmuCmd::T0 + tmp_extruder);
manage_response(true, true, MMU_TCODE_MOVE); manage_response(true, true, MMU_TCODE_MOVE);
@ -1384,8 +1383,8 @@ void mmu_cut_filament(uint8_t filament_nr)
{ {
LcdUpdateDisabler disableLcdUpdate; LcdUpdateDisabler disableLcdUpdate;
lcd_clear(); lcd_clear();
lcd_set_cursor(0, 1); lcd_puts_P(_i("Cutting filament")); //// c=18 lcd_puts_at_P(0, 1, _i("Cutting filament")); //// c=18
lcd_print(" "); lcd_print(' ');
lcd_print(filament_nr + 1); lcd_print(filament_nr + 1);
mmu_filament_ramming(); mmu_filament_ramming();
mmu_command(MmuCmd::K0 + filament_nr); mmu_command(MmuCmd::K0 + filament_nr);
@ -1412,7 +1411,7 @@ bFilamentAction=false; // NOT in "mmu_fil_eject_menu(
{ {
LcdUpdateDisabler disableLcdUpdate; LcdUpdateDisabler disableLcdUpdate;
lcd_clear(); lcd_clear();
lcd_set_cursor(0, 1); lcd_puts_P(_i("Ejecting filament")); lcd_puts_at_P(0, 1, _i("Ejecting filament"));
mmu_filament_ramming(); mmu_filament_ramming();
mmu_command(MmuCmd::E0 + filament); mmu_command(MmuCmd::E0 + filament);
manage_response(false, false, MMU_UNLOAD_MOVE); manage_response(false, false, MMU_UNLOAD_MOVE);

View File

@ -129,11 +129,15 @@ void sm4_set_dir_bits(uint8_t dir_bits)
void sm4_do_step(uint8_t axes_mask) void sm4_do_step(uint8_t axes_mask)
{ {
#if ((MOTHERBOARD == BOARD_RAMBO_MINI_1_0) || (MOTHERBOARD == BOARD_RAMBO_MINI_1_3) || (MOTHERBOARD == BOARD_EINSY_1_0a)) #if ((MOTHERBOARD == BOARD_RAMBO_MINI_1_0) || (MOTHERBOARD == BOARD_RAMBO_MINI_1_3) || (MOTHERBOARD == BOARD_EINSY_1_0a))
#ifdef TMC2130_DEDGE_STEPPING
PINC = (axes_mask & 0x0f); // toggle step signals by mask
#else
register uint8_t portC = PORTC & 0xf0; register uint8_t portC = PORTC & 0xf0;
PORTC = portC | (axes_mask & 0x0f); //set step signals by mask PORTC = portC | (axes_mask & 0x0f); //set step signals by mask
asm("nop"); asm("nop");
PORTC = portC; //set step signals to zero PORTC = portC; //set step signals to zero
asm("nop"); asm("nop");
#endif
#endif //((MOTHERBOARD == BOARD_RAMBO_MINI_1_0) || (MOTHERBOARD == BOARD_RAMBO_MINI_1_3) || (MOTHERBOARD == BOARD_EINSY_1_0a)) #endif //((MOTHERBOARD == BOARD_RAMBO_MINI_1_0) || (MOTHERBOARD == BOARD_RAMBO_MINI_1_3) || (MOTHERBOARD == BOARD_EINSY_1_0a))
} }
@ -191,5 +195,45 @@ uint16_t sm4_line_xyze_ui(uint16_t dx, uint16_t dy, uint16_t dz, uint16_t de)
return nd; return nd;
} }
uint16_t sm4_line_xyz_ui(uint16_t dx, uint16_t dy, uint16_t dz){
uint16_t dd = (uint16_t)(sqrt((float)(((uint32_t)dx)*dx + ((uint32_t)dy*dy) + ((uint32_t)dz*dz))) + 0.5);
uint16_t nd = dd;
uint16_t cx = dd;
uint16_t cy = dd;
uint16_t cz = dd;
uint16_t x = 0;
uint16_t y = 0;
uint16_t z = 0;
while (nd){
if (sm4_stop_cb && (*sm4_stop_cb)()) break;
uint8_t sm = 0; //step mask
if (cx <= dx){
sm |= 1;
cx += dd;
x++;
}
if (cy <= dy){
sm |= 2;
cy += dd;
y++;
}
if (cz <= dz){
sm |= 4;
cz += dd;
z++;
}
cx -= dx;
cy -= dy;
cz -= dz;
sm4_do_step(sm);
uint16_t delay = SM4_DEFDELAY;
if (sm4_calc_delay_cb) delay = (*sm4_calc_delay_cb)(nd, dd);
if (delay) delayMicroseconds(delay);
nd--;
}
if (sm4_update_pos_cb)
(*sm4_update_pos_cb)(x, y, z, 0);
return nd;
}
#endif //NEW_XYZCAL #endif //NEW_XYZCAL

View File

@ -48,6 +48,7 @@ extern void sm4_do_step(uint8_t axes_mask);
// xyze linear-interpolated relative move, returns remaining diagonal steps (>0 means stoped) // xyze linear-interpolated relative move, returns remaining diagonal steps (>0 means stoped)
extern uint16_t sm4_line_xyze_ui(uint16_t dx, uint16_t dy, uint16_t dz, uint16_t de); extern uint16_t sm4_line_xyze_ui(uint16_t dx, uint16_t dy, uint16_t dz, uint16_t de);
extern uint16_t sm4_line_xyz_ui(uint16_t dx, uint16_t dy, uint16_t dz);
#if defined(__cplusplus) #if defined(__cplusplus)

View File

@ -48,6 +48,62 @@ int fsensor_counter; //counter for e-steps
uint16_t SP_min = 0x21FF; uint16_t SP_min = 0x21FF;
#endif //DEBUG_STACK_MONITOR #endif //DEBUG_STACK_MONITOR
/*
* Stepping macros
*/
#define _STEP_PIN_X_AXIS X_STEP_PIN
#define _STEP_PIN_Y_AXIS Y_STEP_PIN
#define _STEP_PIN_Z_AXIS Z_STEP_PIN
#define _STEP_PIN_E_AXIS E0_STEP_PIN
#ifdef DEBUG_XSTEP_DUP_PIN
#define _STEP_PIN_X_DUP_AXIS DEBUG_XSTEP_DUP_PIN
#endif
#ifdef DEBUG_YSTEP_DUP_PIN
#define _STEP_PIN_Y_DUP_AXIS DEBUG_YSTEP_DUP_PIN
#endif
#ifdef Y_DUAL_STEPPER_DRIVERS
#error Y_DUAL_STEPPER_DRIVERS not fully implemented
#define _STEP_PIN_Y2_AXIS Y2_STEP_PIN
#endif
#ifdef Z_DUAL_STEPPER_DRIVERS
#error Z_DUAL_STEPPER_DRIVERS not fully implemented
#define _STEP_PIN_Z2_AXIS Z2_STEP_PIN
#endif
#ifdef TMC2130
#define STEPPER_MINIMUM_PULSE TMC2130_MINIMUM_PULSE
#define STEPPER_SET_DIR_DELAY TMC2130_SET_DIR_DELAY
#define STEPPER_MINIMUM_DELAY TMC2130_MINIMUM_DELAY
#else
#define STEPPER_MINIMUM_PULSE 2
#define STEPPER_SET_DIR_DELAY 100
#define STEPPER_MINIMUM_DELAY delayMicroseconds(STEPPER_MINIMUM_PULSE)
#endif
#ifdef TMC2130_DEDGE_STEPPING
static_assert(TMC2130_MINIMUM_DELAY 1, // this will fail to compile when non-empty
"DEDGE implies/requires an empty TMC2130_MINIMUM_DELAY");
#define STEP_NC_HI(axis) TOGGLE(_STEP_PIN_##axis)
#define STEP_NC_LO(axis) //NOP
#else
#define _STEP_HI_X_AXIS !INVERT_X_STEP_PIN
#define _STEP_LO_X_AXIS INVERT_X_STEP_PIN
#define _STEP_HI_Y_AXIS !INVERT_Y_STEP_PIN
#define _STEP_LO_Y_AXIS INVERT_Y_STEP_PIN
#define _STEP_HI_Z_AXIS !INVERT_Z_STEP_PIN
#define _STEP_LO_Z_AXIS INVERT_Z_STEP_PIN
#define _STEP_HI_E_AXIS !INVERT_E_STEP_PIN
#define _STEP_LO_E_AXIS INVERT_E_STEP_PIN
#define STEP_NC_HI(axis) WRITE_NC(_STEP_PIN_##axis, _STEP_HI_##axis)
#define STEP_NC_LO(axis) WRITE_NC(_STEP_PIN_##axis, _STEP_LO_##axis)
#endif //TMC2130_DEDGE_STEPPING
//=========================================================================== //===========================================================================
//=============================public variables ============================ //=============================public variables ============================
//=========================================================================== //===========================================================================
@ -296,13 +352,13 @@ FORCE_INLINE void stepper_next_block()
WRITE_NC(X_DIR_PIN, INVERT_X_DIR); WRITE_NC(X_DIR_PIN, INVERT_X_DIR);
else else
WRITE_NC(X_DIR_PIN, !INVERT_X_DIR); WRITE_NC(X_DIR_PIN, !INVERT_X_DIR);
_delay_us(100); delayMicroseconds(STEPPER_SET_DIR_DELAY);
for (uint8_t i = 0; i < st_backlash_x; i++) for (uint8_t i = 0; i < st_backlash_x; i++)
{ {
WRITE_NC(X_STEP_PIN, !INVERT_X_STEP_PIN); STEP_NC_HI(X_AXIS);
_delay_us(100); STEPPER_MINIMUM_DELAY;
WRITE_NC(X_STEP_PIN, INVERT_X_STEP_PIN); STEP_NC_LO(X_AXIS);
_delay_us(900); _delay_us(900); // hard-coded jerk! *bad*
} }
} }
last_dir_bits &= ~1; last_dir_bits &= ~1;
@ -319,13 +375,13 @@ FORCE_INLINE void stepper_next_block()
WRITE_NC(Y_DIR_PIN, INVERT_Y_DIR); WRITE_NC(Y_DIR_PIN, INVERT_Y_DIR);
else else
WRITE_NC(Y_DIR_PIN, !INVERT_Y_DIR); WRITE_NC(Y_DIR_PIN, !INVERT_Y_DIR);
_delay_us(100); delayMicroseconds(STEPPER_SET_DIR_DELAY);
for (uint8_t i = 0; i < st_backlash_y; i++) for (uint8_t i = 0; i < st_backlash_y; i++)
{ {
WRITE_NC(Y_STEP_PIN, !INVERT_Y_STEP_PIN); STEP_NC_HI(Y_AXIS);
_delay_us(100); STEPPER_MINIMUM_DELAY;
WRITE_NC(Y_STEP_PIN, INVERT_Y_STEP_PIN); STEP_NC_LO(Y_AXIS);
_delay_us(900); _delay_us(900); // hard-coded jerk! *bad*
} }
} }
last_dir_bits &= ~2; last_dir_bits &= ~2;
@ -603,44 +659,44 @@ FORCE_INLINE void stepper_tick_lowres()
// Step in X axis // Step in X axis
counter_x.lo += current_block->steps_x.lo; counter_x.lo += current_block->steps_x.lo;
if (counter_x.lo > 0) { if (counter_x.lo > 0) {
WRITE_NC(X_STEP_PIN, !INVERT_X_STEP_PIN); STEP_NC_HI(X_AXIS);
#ifdef DEBUG_XSTEP_DUP_PIN #ifdef DEBUG_XSTEP_DUP_PIN
WRITE_NC(DEBUG_XSTEP_DUP_PIN,!INVERT_X_STEP_PIN); STEP_NC_HI(X_DUP_AXIS);
#endif //DEBUG_XSTEP_DUP_PIN #endif //DEBUG_XSTEP_DUP_PIN
counter_x.lo -= current_block->step_event_count.lo; counter_x.lo -= current_block->step_event_count.lo;
count_position[X_AXIS]+=count_direction[X_AXIS]; count_position[X_AXIS]+=count_direction[X_AXIS];
WRITE_NC(X_STEP_PIN, INVERT_X_STEP_PIN); STEP_NC_LO(X_AXIS);
#ifdef DEBUG_XSTEP_DUP_PIN #ifdef DEBUG_XSTEP_DUP_PIN
WRITE_NC(DEBUG_XSTEP_DUP_PIN,INVERT_X_STEP_PIN); STEP_NC_LO(X_DUP_AXIS);
#endif //DEBUG_XSTEP_DUP_PIN #endif //DEBUG_XSTEP_DUP_PIN
} }
// Step in Y axis // Step in Y axis
counter_y.lo += current_block->steps_y.lo; counter_y.lo += current_block->steps_y.lo;
if (counter_y.lo > 0) { if (counter_y.lo > 0) {
WRITE_NC(Y_STEP_PIN, !INVERT_Y_STEP_PIN); STEP_NC_HI(Y_AXIS);
#ifdef DEBUG_YSTEP_DUP_PIN #ifdef DEBUG_YSTEP_DUP_PIN
WRITE_NC(DEBUG_YSTEP_DUP_PIN,!INVERT_Y_STEP_PIN); STEP_NC_HI(Y_DUP_AXIS);
#endif //DEBUG_YSTEP_DUP_PIN #endif //DEBUG_YSTEP_DUP_PIN
counter_y.lo -= current_block->step_event_count.lo; counter_y.lo -= current_block->step_event_count.lo;
count_position[Y_AXIS]+=count_direction[Y_AXIS]; count_position[Y_AXIS]+=count_direction[Y_AXIS];
WRITE_NC(Y_STEP_PIN, INVERT_Y_STEP_PIN); STEP_NC_LO(Y_AXIS);
#ifdef DEBUG_YSTEP_DUP_PIN #ifdef DEBUG_YSTEP_DUP_PIN
WRITE_NC(DEBUG_YSTEP_DUP_PIN,INVERT_Y_STEP_PIN); STEP_NC_LO(Y_DUP_AXIS);
#endif //DEBUG_YSTEP_DUP_PIN #endif //DEBUG_YSTEP_DUP_PIN
} }
// Step in Z axis // Step in Z axis
counter_z.lo += current_block->steps_z.lo; counter_z.lo += current_block->steps_z.lo;
if (counter_z.lo > 0) { if (counter_z.lo > 0) {
WRITE_NC(Z_STEP_PIN, !INVERT_Z_STEP_PIN); STEP_NC_HI(Z_AXIS);
counter_z.lo -= current_block->step_event_count.lo; counter_z.lo -= current_block->step_event_count.lo;
count_position[Z_AXIS]+=count_direction[Z_AXIS]; count_position[Z_AXIS]+=count_direction[Z_AXIS];
WRITE_NC(Z_STEP_PIN, INVERT_Z_STEP_PIN); STEP_NC_LO(Z_AXIS);
} }
// Step in E axis // Step in E axis
counter_e.lo += current_block->steps_e.lo; counter_e.lo += current_block->steps_e.lo;
if (counter_e.lo > 0) { if (counter_e.lo > 0) {
#ifndef LIN_ADVANCE #ifndef LIN_ADVANCE
WRITE(E0_STEP_PIN, !INVERT_E_STEP_PIN); STEP_NC_HI(E_AXIS);
#endif /* LIN_ADVANCE */ #endif /* LIN_ADVANCE */
counter_e.lo -= current_block->step_event_count.lo; counter_e.lo -= current_block->step_event_count.lo;
count_position[E_AXIS] += count_direction[E_AXIS]; count_position[E_AXIS] += count_direction[E_AXIS];
@ -650,7 +706,7 @@ FORCE_INLINE void stepper_tick_lowres()
#ifdef FILAMENT_SENSOR #ifdef FILAMENT_SENSOR
fsensor_counter += count_direction[E_AXIS]; fsensor_counter += count_direction[E_AXIS];
#endif //FILAMENT_SENSOR #endif //FILAMENT_SENSOR
WRITE(E0_STEP_PIN, INVERT_E_STEP_PIN); STEP_NC_LO(E_AXIS);
#endif #endif
} }
if(++ step_events_completed.lo >= current_block->step_event_count.lo) if(++ step_events_completed.lo >= current_block->step_event_count.lo)
@ -665,44 +721,44 @@ FORCE_INLINE void stepper_tick_highres()
// Step in X axis // Step in X axis
counter_x.wide += current_block->steps_x.wide; counter_x.wide += current_block->steps_x.wide;
if (counter_x.wide > 0) { if (counter_x.wide > 0) {
WRITE_NC(X_STEP_PIN, !INVERT_X_STEP_PIN); STEP_NC_HI(X_AXIS);
#ifdef DEBUG_XSTEP_DUP_PIN #ifdef DEBUG_XSTEP_DUP_PIN
WRITE_NC(DEBUG_XSTEP_DUP_PIN,!INVERT_X_STEP_PIN); STEP_NC_HI(X_DUP_AXIS);
#endif //DEBUG_XSTEP_DUP_PIN #endif //DEBUG_XSTEP_DUP_PIN
counter_x.wide -= current_block->step_event_count.wide; counter_x.wide -= current_block->step_event_count.wide;
count_position[X_AXIS]+=count_direction[X_AXIS]; count_position[X_AXIS]+=count_direction[X_AXIS];
WRITE_NC(X_STEP_PIN, INVERT_X_STEP_PIN); STEP_NC_LO(X_AXIS);
#ifdef DEBUG_XSTEP_DUP_PIN #ifdef DEBUG_XSTEP_DUP_PIN
WRITE_NC(DEBUG_XSTEP_DUP_PIN,INVERT_X_STEP_PIN); STEP_NC_LO(X_DUP_AXIS);
#endif //DEBUG_XSTEP_DUP_PIN #endif //DEBUG_XSTEP_DUP_PIN
} }
// Step in Y axis // Step in Y axis
counter_y.wide += current_block->steps_y.wide; counter_y.wide += current_block->steps_y.wide;
if (counter_y.wide > 0) { if (counter_y.wide > 0) {
WRITE_NC(Y_STEP_PIN, !INVERT_Y_STEP_PIN); STEP_NC_HI(Y_AXIS);
#ifdef DEBUG_YSTEP_DUP_PIN #ifdef DEBUG_YSTEP_DUP_PIN
WRITE_NC(DEBUG_YSTEP_DUP_PIN,!INVERT_Y_STEP_PIN); STEP_NC_HI(Y_DUP_AXIS);
#endif //DEBUG_YSTEP_DUP_PIN #endif //DEBUG_YSTEP_DUP_PIN
counter_y.wide -= current_block->step_event_count.wide; counter_y.wide -= current_block->step_event_count.wide;
count_position[Y_AXIS]+=count_direction[Y_AXIS]; count_position[Y_AXIS]+=count_direction[Y_AXIS];
WRITE_NC(Y_STEP_PIN, INVERT_Y_STEP_PIN); STEP_NC_LO(Y_AXIS);
#ifdef DEBUG_YSTEP_DUP_PIN #ifdef DEBUG_YSTEP_DUP_PIN
WRITE_NC(DEBUG_YSTEP_DUP_PIN,INVERT_Y_STEP_PIN); STEP_NC_LO(Y_DUP_AXIS);
#endif //DEBUG_YSTEP_DUP_PIN #endif //DEBUG_YSTEP_DUP_PIN
} }
// Step in Z axis // Step in Z axis
counter_z.wide += current_block->steps_z.wide; counter_z.wide += current_block->steps_z.wide;
if (counter_z.wide > 0) { if (counter_z.wide > 0) {
WRITE_NC(Z_STEP_PIN, !INVERT_Z_STEP_PIN); STEP_NC_HI(Z_AXIS);
counter_z.wide -= current_block->step_event_count.wide; counter_z.wide -= current_block->step_event_count.wide;
count_position[Z_AXIS]+=count_direction[Z_AXIS]; count_position[Z_AXIS]+=count_direction[Z_AXIS];
WRITE_NC(Z_STEP_PIN, INVERT_Z_STEP_PIN); STEP_NC_LO(Z_AXIS);
} }
// Step in E axis // Step in E axis
counter_e.wide += current_block->steps_e.wide; counter_e.wide += current_block->steps_e.wide;
if (counter_e.wide > 0) { if (counter_e.wide > 0) {
#ifndef LIN_ADVANCE #ifndef LIN_ADVANCE
WRITE(E0_STEP_PIN, !INVERT_E_STEP_PIN); STEP_NC_HI(E_AXIS);
#endif /* LIN_ADVANCE */ #endif /* LIN_ADVANCE */
counter_e.wide -= current_block->step_event_count.wide; counter_e.wide -= current_block->step_event_count.wide;
count_position[E_AXIS]+=count_direction[E_AXIS]; count_position[E_AXIS]+=count_direction[E_AXIS];
@ -712,7 +768,7 @@ FORCE_INLINE void stepper_tick_highres()
#ifdef FILAMENT_SENSOR #ifdef FILAMENT_SENSOR
fsensor_counter += count_direction[E_AXIS]; fsensor_counter += count_direction[E_AXIS];
#endif //FILAMENT_SENSOR #endif //FILAMENT_SENSOR
WRITE(E0_STEP_PIN, INVERT_E_STEP_PIN); STEP_NC_LO(E_AXIS);
#endif #endif
} }
if(++ step_events_completed.wide >= current_block->step_event_count.wide) if(++ step_events_completed.wide >= current_block->step_event_count.wide)
@ -1014,9 +1070,9 @@ FORCE_INLINE void advance_isr_scheduler() {
bool rev = (e_steps < 0); bool rev = (e_steps < 0);
do do
{ {
WRITE_NC(E0_STEP_PIN, !INVERT_E_STEP_PIN); STEP_NC_HI(E_AXIS);
e_steps += (rev? 1: -1); e_steps += (rev? 1: -1);
WRITE_NC(E0_STEP_PIN, INVERT_E_STEP_PIN); STEP_NC_LO(E_AXIS);
#if defined(FILAMENT_SENSOR) && defined(PAT9125) #if defined(FILAMENT_SENSOR) && defined(PAT9125)
fsensor_counter += (rev? -1: 1); fsensor_counter += (rev? -1: 1);
#endif #endif
@ -1389,89 +1445,106 @@ void quickStop()
#ifdef BABYSTEPPING #ifdef BABYSTEPPING
void babystep(const uint8_t axis,const bool direction) void babystep(const uint8_t axis,const bool direction)
{ {
//MUST ONLY BE CALLED BY A ISR, it depends on that no other ISR interrupts this // MUST ONLY BE CALLED BY A ISR as stepper pins are manipulated directly.
//store initial pin states // note: when switching direction no delay is inserted at the end when the
switch(axis) // original is restored. We assume enough time passes as the function
{ // returns and the stepper is manipulated again (to avoid dead times)
case X_AXIS: switch(axis)
{ {
enable_x(); case X_AXIS:
uint8_t old_x_dir_pin= READ(X_DIR_PIN); //if dualzstepper, both point to same direction. {
enable_x();
//setup new step uint8_t old_x_dir_pin = READ(X_DIR_PIN); //if dualzstepper, both point to same direction.
WRITE(X_DIR_PIN,(INVERT_X_DIR)^direction); uint8_t new_x_dir_pin = (INVERT_X_DIR)^direction;
//perform step //setup new step
WRITE(X_STEP_PIN, !INVERT_X_STEP_PIN); if (new_x_dir_pin != old_x_dir_pin) {
WRITE_NC(X_DIR_PIN, new_x_dir_pin);
delayMicroseconds(STEPPER_SET_DIR_DELAY);
}
//perform step
STEP_NC_HI(X_AXIS);
#ifdef DEBUG_XSTEP_DUP_PIN #ifdef DEBUG_XSTEP_DUP_PIN
WRITE(DEBUG_XSTEP_DUP_PIN,!INVERT_X_STEP_PIN); STEP_NC_HI(X_DUP_AXIS);
#endif //DEBUG_XSTEP_DUP_PIN #endif
delayMicroseconds(1); STEPPER_MINIMUM_DELAY;
WRITE(X_STEP_PIN, INVERT_X_STEP_PIN); STEP_NC_LO(X_AXIS);
#ifdef DEBUG_XSTEP_DUP_PIN #ifdef DEBUG_XSTEP_DUP_PIN
WRITE(DEBUG_XSTEP_DUP_PIN,INVERT_X_STEP_PIN); STEP_NC_LO(X_DUP_AXIS);
#endif //DEBUG_XSTEP_DUP_PIN #endif
//get old pin state back. //get old pin state back.
WRITE(X_DIR_PIN,old_x_dir_pin); WRITE_NC(X_DIR_PIN, old_x_dir_pin);
} }
break; break;
case Y_AXIS:
{ case Y_AXIS:
enable_y(); {
uint8_t old_y_dir_pin= READ(Y_DIR_PIN); //if dualzstepper, both point to same direction. enable_y();
uint8_t old_y_dir_pin = READ(Y_DIR_PIN); //if dualzstepper, both point to same direction.
//setup new step uint8_t new_y_dir_pin = (INVERT_Y_DIR)^direction;
WRITE(Y_DIR_PIN,(INVERT_Y_DIR)^direction);
//setup new step
//perform step if (new_y_dir_pin != old_y_dir_pin) {
WRITE(Y_STEP_PIN, !INVERT_Y_STEP_PIN); WRITE_NC(Y_DIR_PIN, new_y_dir_pin);
delayMicroseconds(STEPPER_SET_DIR_DELAY);
}
//perform step
STEP_NC_HI(Y_AXIS);
#ifdef DEBUG_YSTEP_DUP_PIN #ifdef DEBUG_YSTEP_DUP_PIN
WRITE(DEBUG_YSTEP_DUP_PIN,!INVERT_Y_STEP_PIN); STEP_NC_HI(Y_DUP_AXIS);
#endif //DEBUG_YSTEP_DUP_PIN #endif
delayMicroseconds(1); STEPPER_MINIMUM_DELAY;
WRITE(Y_STEP_PIN, INVERT_Y_STEP_PIN); STEP_NC_LO(Y_AXIS);
#ifdef DEBUG_YSTEP_DUP_PIN #ifdef DEBUG_YSTEP_DUP_PIN
WRITE(DEBUG_YSTEP_DUP_PIN,INVERT_Y_STEP_PIN); STEP_NC_LO(Y_DUP_AXIS);
#endif //DEBUG_YSTEP_DUP_PIN #endif
//get old pin state back. //get old pin state back.
WRITE(Y_DIR_PIN,old_y_dir_pin); WRITE_NC(Y_DIR_PIN, old_y_dir_pin);
}
break;
} case Z_AXIS:
break; {
enable_z();
case Z_AXIS: uint8_t old_z_dir_pin = READ(Z_DIR_PIN); //if dualzstepper, both point to same direction.
{ uint8_t new_z_dir_pin = (INVERT_Z_DIR)^direction^BABYSTEP_INVERT_Z;
enable_z();
uint8_t old_z_dir_pin= READ(Z_DIR_PIN); //if dualzstepper, both point to same direction.
//setup new step
WRITE(Z_DIR_PIN,(INVERT_Z_DIR)^direction^BABYSTEP_INVERT_Z);
#ifdef Z_DUAL_STEPPER_DRIVERS
WRITE(Z2_DIR_PIN,(INVERT_Z_DIR)^direction^BABYSTEP_INVERT_Z);
#endif
//perform step
WRITE(Z_STEP_PIN, !INVERT_Z_STEP_PIN);
#ifdef Z_DUAL_STEPPER_DRIVERS
WRITE(Z2_STEP_PIN, !INVERT_Z_STEP_PIN);
#endif
delayMicroseconds(1);
WRITE(Z_STEP_PIN, INVERT_Z_STEP_PIN);
#ifdef Z_DUAL_STEPPER_DRIVERS
WRITE(Z2_STEP_PIN, INVERT_Z_STEP_PIN);
#endif
//get old pin state back. //setup new step
WRITE(Z_DIR_PIN,old_z_dir_pin); if (new_z_dir_pin != old_z_dir_pin) {
#ifdef Z_DUAL_STEPPER_DRIVERS WRITE_NC(Z_DIR_PIN, new_z_dir_pin);
WRITE(Z2_DIR_PIN,old_z_dir_pin); #ifdef Z_DUAL_STEPPER_DRIVERS
#endif WRITE_NC(Z2_DIR_PIN, new_z_dir_pin);
#endif
delayMicroseconds(STEPPER_SET_DIR_DELAY);
}
} //perform step
break; STEP_NC_HI(Z_AXIS);
#ifdef Z_DUAL_STEPPER_DRIVERS
default: break; STEP_NC_HI(Z2_AXIS);
} #endif
STEPPER_MINIMUM_DELAY;
STEP_NC_LO(Z_AXIS);
#ifdef Z_DUAL_STEPPER_DRIVERS
STEP_NC_LO(Z2_AXIS);
#endif
//get old pin state back.
if (new_z_dir_pin != old_z_dir_pin) {
WRITE_NC(Z_DIR_PIN, old_z_dir_pin);
#ifdef Z_DUAL_STEPPER_DRIVERS
WRITE_NC(Z2_DIR_PIN, old_z_dir_pin);
#endif
}
}
break;
default: break;
}
} }
#endif //BABYSTEPPING #endif //BABYSTEPPING

View File

@ -522,7 +522,7 @@ void setExtruderAutoFanState(uint8_t state)
//the fan to either On or Off during certain tests/errors. //the fan to either On or Off during certain tests/errors.
fanState = state; fanState = state;
uint8_t newFanSpeed = 0; newFanSpeed = 0;
if (fanState & 0x01) if (fanState & 0x01)
{ {
#ifdef EXTRUDER_ALTFAN_DETECT #ifdef EXTRUDER_ALTFAN_DETECT

View File

@ -428,6 +428,11 @@ void tmc2130_check_overtemp()
void tmc2130_setup_chopper(uint8_t axis, uint8_t mres, uint8_t current_h, uint8_t current_r) void tmc2130_setup_chopper(uint8_t axis, uint8_t mres, uint8_t current_h, uint8_t current_r)
{ {
uint8_t intpol = (mres != 0); // intpol to 256 only if microsteps aren't 256 uint8_t intpol = (mres != 0); // intpol to 256 only if microsteps aren't 256
#ifdef TMC2130_DEDGE_STEPPING
uint8_t dedge = 1;
#else
uint8_t dedge = 0;
#endif
uint8_t toff = tmc2130_chopper_config[axis].toff; // toff = 3 (fchop = 27.778kHz) 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 hstrt = tmc2130_chopper_config[axis].hstr; //initial 4, modified to 5
uint8_t hend = tmc2130_chopper_config[axis].hend; //original value = 1 uint8_t hend = tmc2130_chopper_config[axis].hend; //original value = 1
@ -437,6 +442,9 @@ void tmc2130_setup_chopper(uint8_t axis, uint8_t mres, uint8_t current_h, uint8_
uint8_t tbl = tmc2130_chopper_config[axis].tbl; //blanking time, original value = 2 uint8_t tbl = tmc2130_chopper_config[axis].tbl; //blanking time, original value = 2
if (axis == E_AXIS) if (axis == E_AXIS)
{ {
#if defined(TMC2130_INTPOL_E) && (TMC2130_INTPOL_E == 0)
intpol = 0;
#endif
#ifdef TMC2130_CNSTOFF_E #ifdef TMC2130_CNSTOFF_E
// fd = 0 (slow decay only) // fd = 0 (slow decay only)
hstrt = 0; //fd0..2 hstrt = 0; //fd0..2
@ -447,16 +455,26 @@ void tmc2130_setup_chopper(uint8_t axis, uint8_t mres, uint8_t current_h, uint8_
// toff = TMC2130_TOFF_E; // toff = 3-5 // toff = TMC2130_TOFF_E; // toff = 3-5
// rndtf = 1; // rndtf = 1;
} }
#if defined(TMC2130_INTPOL_XY) && (TMC2130_INTPOL_XY == 0)
else if (axis == X_AXIS || axis == Y_AXIS) {
intpol = 0;
}
#endif
#if defined(TMC2130_INTPOL_Z) && (TMC2130_INTPOL_Z == 0)
else if (axis == Z_AXIS) {
intpol = 0;
}
#endif
// DBG(_n("tmc2130_setup_chopper(axis=%hhd, mres=%hhd, curh=%hhd, curr=%hhd\n"), axis, mres, current_h, current_r); // DBG(_n("tmc2130_setup_chopper(axis=%hhd, mres=%hhd, curh=%hhd, curr=%hhd\n"), axis, mres, current_h, current_r);
// DBG(_n(" toff=%hhd, hstr=%hhd, hend=%hhd, tbl=%hhd\n"), toff, hstrt, hend, tbl); // DBG(_n(" toff=%hhd, hstr=%hhd, hend=%hhd, tbl=%hhd\n"), toff, hstrt, hend, tbl);
if (current_r <= 31) if (current_r <= 31)
{ {
tmc2130_wr_CHOPCONF(axis, toff, hstrt, hend, fd3, 0, rndtf, chm, tbl, 1, 0, 0, 0, mres, intpol, 0, 0); tmc2130_wr_CHOPCONF(axis, toff, hstrt, hend, fd3, 0, rndtf, chm, tbl, 1, 0, 0, 0, mres, intpol, dedge, 0);
tmc2130_wr(axis, TMC2130_REG_IHOLD_IRUN, 0x000f0000 | ((current_r & 0x1f) << 8) | (current_h & 0x1f)); tmc2130_wr(axis, TMC2130_REG_IHOLD_IRUN, 0x000f0000 | ((current_r & 0x1f) << 8) | (current_h & 0x1f));
} }
else else
{ {
tmc2130_wr_CHOPCONF(axis, toff, hstrt, hend, fd3, 0, rndtf, chm, tbl, 0, 0, 0, 0, mres, intpol, 0, 0); tmc2130_wr_CHOPCONF(axis, toff, hstrt, hend, fd3, 0, rndtf, chm, tbl, 0, 0, 0, 0, mres, intpol, dedge, 0);
tmc2130_wr(axis, TMC2130_REG_IHOLD_IRUN, 0x000f0000 | (((current_r >> 1) & 0x1f) << 8) | ((current_h >> 1) & 0x1f)); tmc2130_wr(axis, TMC2130_REG_IHOLD_IRUN, 0x000f0000 | (((current_r >> 1) & 0x1f) << 8) | ((current_h >> 1) & 0x1f));
} }
} }
@ -678,25 +696,32 @@ static uint8_t tmc2130_rx(uint8_t axis, uint8_t addr, uint32_t* rval)
#define _GET_PWR_Z (READ(Z_ENABLE_PIN) == Z_ENABLE_ON) #define _GET_PWR_Z (READ(Z_ENABLE_PIN) == Z_ENABLE_ON)
#define _GET_PWR_E (READ(E0_ENABLE_PIN) == E_ENABLE_ON) #define _GET_PWR_E (READ(E0_ENABLE_PIN) == E_ENABLE_ON)
#define _SET_PWR_X(ena) { WRITE(X_ENABLE_PIN, ena?X_ENABLE_ON:!X_ENABLE_ON); asm("nop"); } #define _SET_PWR_X(ena) WRITE(X_ENABLE_PIN, ena?X_ENABLE_ON:!X_ENABLE_ON)
#define _SET_PWR_Y(ena) { WRITE(Y_ENABLE_PIN, ena?Y_ENABLE_ON:!Y_ENABLE_ON); asm("nop"); } #define _SET_PWR_Y(ena) WRITE(Y_ENABLE_PIN, ena?Y_ENABLE_ON:!Y_ENABLE_ON)
#define _SET_PWR_Z(ena) { WRITE(Z_ENABLE_PIN, ena?Z_ENABLE_ON:!Z_ENABLE_ON); asm("nop"); } #define _SET_PWR_Z(ena) WRITE(Z_ENABLE_PIN, ena?Z_ENABLE_ON:!Z_ENABLE_ON)
#define _SET_PWR_E(ena) { WRITE(E0_ENABLE_PIN, ena?E_ENABLE_ON:!E_ENABLE_ON); asm("nop"); } #define _SET_PWR_E(ena) WRITE(E0_ENABLE_PIN, ena?E_ENABLE_ON:!E_ENABLE_ON)
#define _GET_DIR_X (READ(X_DIR_PIN) == INVERT_X_DIR) #define _GET_DIR_X (READ(X_DIR_PIN) == INVERT_X_DIR)
#define _GET_DIR_Y (READ(Y_DIR_PIN) == INVERT_Y_DIR) #define _GET_DIR_Y (READ(Y_DIR_PIN) == INVERT_Y_DIR)
#define _GET_DIR_Z (READ(Z_DIR_PIN) == INVERT_Z_DIR) #define _GET_DIR_Z (READ(Z_DIR_PIN) == INVERT_Z_DIR)
#define _GET_DIR_E (READ(E0_DIR_PIN) == INVERT_E0_DIR) #define _GET_DIR_E (READ(E0_DIR_PIN) == INVERT_E0_DIR)
#define _SET_DIR_X(dir) { WRITE(X_DIR_PIN, dir?INVERT_X_DIR:!INVERT_X_DIR); asm("nop"); } #define _SET_DIR_X(dir) WRITE(X_DIR_PIN, dir?INVERT_X_DIR:!INVERT_X_DIR)
#define _SET_DIR_Y(dir) { WRITE(Y_DIR_PIN, dir?INVERT_Y_DIR:!INVERT_Y_DIR); asm("nop"); } #define _SET_DIR_Y(dir) WRITE(Y_DIR_PIN, dir?INVERT_Y_DIR:!INVERT_Y_DIR)
#define _SET_DIR_Z(dir) { WRITE(Z_DIR_PIN, dir?INVERT_Z_DIR:!INVERT_Z_DIR); asm("nop"); } #define _SET_DIR_Z(dir) WRITE(Z_DIR_PIN, dir?INVERT_Z_DIR:!INVERT_Z_DIR)
#define _SET_DIR_E(dir) { WRITE(E0_DIR_PIN, dir?INVERT_E0_DIR:!INVERT_E0_DIR); asm("nop"); } #define _SET_DIR_E(dir) WRITE(E0_DIR_PIN, dir?INVERT_E0_DIR:!INVERT_E0_DIR)
#define _DO_STEP_X { WRITE(X_STEP_PIN, !INVERT_X_STEP_PIN); asm("nop"); WRITE(X_STEP_PIN, INVERT_X_STEP_PIN); asm("nop"); } #ifdef TMC2130_DEDGE_STEPPING
#define _DO_STEP_Y { WRITE(Y_STEP_PIN, !INVERT_Y_STEP_PIN); asm("nop"); WRITE(Y_STEP_PIN, INVERT_Y_STEP_PIN); asm("nop"); } #define _DO_STEP_X TOGGLE(X_STEP_PIN)
#define _DO_STEP_Z { WRITE(Z_STEP_PIN, !INVERT_Z_STEP_PIN); asm("nop"); WRITE(Z_STEP_PIN, INVERT_Z_STEP_PIN); asm("nop"); } #define _DO_STEP_Y TOGGLE(Y_STEP_PIN)
#define _DO_STEP_E { WRITE(E0_STEP_PIN, !INVERT_E_STEP_PIN); asm("nop"); WRITE(E0_STEP_PIN, INVERT_E_STEP_PIN); asm("nop"); } #define _DO_STEP_Z TOGGLE(Z_STEP_PIN)
#define _DO_STEP_E TOGGLE(E0_STEP_PIN)
#else
#define _DO_STEP_X { WRITE(X_STEP_PIN, !INVERT_X_STEP_PIN); TMC2130_MINIMUM_DELAY; WRITE(X_STEP_PIN, INVERT_X_STEP_PIN); }
#define _DO_STEP_Y { WRITE(Y_STEP_PIN, !INVERT_Y_STEP_PIN); TMC2130_MINIMUM_DELAY; WRITE(Y_STEP_PIN, INVERT_Y_STEP_PIN); }
#define _DO_STEP_Z { WRITE(Z_STEP_PIN, !INVERT_Z_STEP_PIN); TMC2130_MINIMUM_DELAY; WRITE(Z_STEP_PIN, INVERT_Z_STEP_PIN); }
#define _DO_STEP_E { WRITE(E0_STEP_PIN, !INVERT_E_STEP_PIN); TMC2130_MINIMUM_DELAY; WRITE(E0_STEP_PIN, INVERT_E_STEP_PIN); }
#endif
uint16_t tmc2130_get_res(uint8_t axis) uint16_t tmc2130_get_res(uint8_t axis)
@ -737,6 +762,7 @@ void tmc2130_set_pwr(uint8_t axis, uint8_t pwr)
case Z_AXIS: _SET_PWR_Z(pwr); break; case Z_AXIS: _SET_PWR_Z(pwr); break;
case E_AXIS: _SET_PWR_E(pwr); break; case E_AXIS: _SET_PWR_E(pwr); break;
} }
delayMicroseconds(TMC2130_SET_PWR_DELAY);
} }
uint8_t tmc2130_get_inv(uint8_t axis) uint8_t tmc2130_get_inv(uint8_t axis)
@ -773,6 +799,7 @@ void tmc2130_set_dir(uint8_t axis, uint8_t dir)
case Z_AXIS: _SET_DIR_Z(dir); break; case Z_AXIS: _SET_DIR_Z(dir); break;
case E_AXIS: _SET_DIR_E(dir); break; case E_AXIS: _SET_DIR_E(dir); break;
} }
delayMicroseconds(TMC2130_SET_DIR_DELAY);
} }
void tmc2130_do_step(uint8_t axis) void tmc2130_do_step(uint8_t axis)
@ -788,8 +815,8 @@ void tmc2130_do_step(uint8_t axis)
void tmc2130_do_steps(uint8_t axis, uint16_t steps, uint8_t dir, uint16_t delay_us) void tmc2130_do_steps(uint8_t axis, uint16_t steps, uint8_t dir, uint16_t delay_us)
{ {
tmc2130_set_dir(axis, dir); if (tmc2130_get_dir(axis) != dir)
delayMicroseconds(100); tmc2130_set_dir(axis, dir);
while (steps--) while (steps--)
{ {
tmc2130_do_step(axis); tmc2130_do_step(axis);
@ -820,7 +847,6 @@ void tmc2130_goto_step(uint8_t axis, uint8_t step, uint8_t dir, uint16_t delay_u
cnt = steps; cnt = steps;
} }
tmc2130_set_dir(axis, dir); tmc2130_set_dir(axis, dir);
delayMicroseconds(100);
mscnt = tmc2130_rd_MSCNT(axis); mscnt = tmc2130_rd_MSCNT(axis);
while ((cnt--) && ((mscnt >> shift) != step)) while ((cnt--) && ((mscnt >> shift) != step))
{ {
@ -996,11 +1022,11 @@ bool tmc2130_home_calibrate(uint8_t axis)
uint8_t val[16]; uint8_t val[16];
homeaxis(axis, 16, step); homeaxis(axis, 16, step);
bubblesort_uint8(step, 16, 0); bubblesort_uint8(step, 16, 0);
printf_P(PSTR("sorted samples:\n")); puts_P(PSTR("sorted samples:"));
for (uint8_t i = 0; i < 16; i++) for (uint8_t i = 0; i < 16; i++)
printf_P(PSTR(" i=%2d step=%2d\n"), i, step[i]); printf_P(PSTR(" i=%2d step=%2d\n"), i, step[i]);
uint8_t cl = clusterize_uint8(step, 16, cnt, val, 1); uint8_t cl = clusterize_uint8(step, 16, cnt, val, 1);
printf_P(PSTR("clusters:\n")); puts_P(PSTR("clusters:"));
for (uint8_t i = 0; i < cl; i++) for (uint8_t i = 0; i < cl; i++)
printf_P(PSTR(" i=%2d cnt=%2d val=%2d\n"), i, cnt[i], val[i]); printf_P(PSTR(" i=%2d cnt=%2d val=%2d\n"), i, cnt[i], val[i]);
bubblesort_uint8(cnt, cl, val); bubblesort_uint8(cnt, cl, val);

View File

@ -29,6 +29,18 @@ extern uint8_t tmc2130_sg_homing_axes_mask;
#define TMC2130_WAVE_FAC1000_MAX 200 #define TMC2130_WAVE_FAC1000_MAX 200
#define TMC2130_WAVE_FAC1000_STP 1 #define TMC2130_WAVE_FAC1000_STP 1
#define TMC2130_MINIMUM_PULSE 0 // minimum pulse width in uS
#define TMC2130_SET_DIR_DELAY 20 // minimum delay after setting direction in uS
#define TMC2130_SET_PWR_DELAY 0 // minimum delay after changing pwr mode in uS
#ifdef TMC2130_DEDGE_STEPPING
#define TMC2130_MINIMUM_DELAY //NOP
#elif TMC2130_MINIMUM_PULSE == 0
#define TMC2130_MINIMUM_DELAY asm("nop")
#else
#define TMC2130_MINIMUM_DELAY delayMicroseconds(TMC2130_MINIMUM_PULSE)
#endif
extern uint8_t tmc2130_home_enabled; extern uint8_t tmc2130_home_enabled;
extern uint8_t tmc2130_home_origin[2]; extern uint8_t tmc2130_home_origin[2];
extern uint8_t tmc2130_home_bsteps[2]; extern uint8_t tmc2130_home_bsteps[2];

View File

@ -79,7 +79,7 @@ ISR(USART2_RX_vect)
if (rbuf_put(uart2_ibuf, UDR2) < 0) // put received byte to buffer if (rbuf_put(uart2_ibuf, UDR2) < 0) // put received byte to buffer
{ //rx buffer full { //rx buffer full
//uart2_rx_clr(); //for sure, clear input buffer //uart2_rx_clr(); //for sure, clear input buffer
printf_P(PSTR("USART2 rx Full!!!\n")); puts_P(PSTR("USART2 rx Full!!!"));
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -47,7 +47,6 @@ void lcd_pause_print();
void lcd_resume_print(); void lcd_resume_print();
void lcd_print_stop(); void lcd_print_stop();
void prusa_statistics(int _message, uint8_t _col_nr = 0); void prusa_statistics(int _message, uint8_t _col_nr = 0);
void lcd_confirm_print();
unsigned char lcd_choose_color(); unsigned char lcd_choose_color();
void lcd_load_filament_color_check(); void lcd_load_filament_color_check();
//void lcd_mylang(); //void lcd_mylang();
@ -127,7 +126,6 @@ extern CustomMsg custom_message_type;
extern unsigned int custom_message_state; extern unsigned int custom_message_state;
extern uint8_t farm_mode; extern uint8_t farm_mode;
extern int farm_no;
extern int farm_timer; extern int farm_timer;
extern uint8_t farm_status; extern uint8_t farm_status;

View File

@ -428,13 +428,13 @@ switch(oCheckModel)
{ {
case ClCheckModel::_Warn: case ClCheckModel::_Warn:
// lcd_show_fullscreen_message_and_wait_P(_i("Printer model differs from the G-code. Continue?")); // lcd_show_fullscreen_message_and_wait_P(_i("Printer model differs from the G-code. Continue?"));
lcd_display_message_fullscreen_P(_i("G-code sliced for a different printer type. Continue?")); lcd_display_message_fullscreen_P(_T(MSG_GCODE_DIFF_PRINTER_CONTINUE));
lcd_wait_for_click_delay(MSG_PRINT_CHECKING_FAILED_TIMEOUT); lcd_wait_for_click_delay(MSG_PRINT_CHECKING_FAILED_TIMEOUT);
//???custom_message_type=CUSTOM_MSG_TYPE_STATUS; // display / status-line recovery //???custom_message_type=CUSTOM_MSG_TYPE_STATUS; // display / status-line recovery
lcd_update_enable(true); // display / status-line recovery lcd_update_enable(true); // display / status-line recovery
break; break;
case ClCheckModel::_Strict: case ClCheckModel::_Strict:
lcd_show_fullscreen_message_and_wait_P(_i("G-code sliced for a different printer type. Please re-slice the model again. Print cancelled.")); lcd_show_fullscreen_message_and_wait_P(_T(MSG_GCODE_DIFF_PRINTER_CANCELLED));
lcd_print_stop(); lcd_print_stop();
break; break;
case ClCheckModel::_None: case ClCheckModel::_None:
@ -577,13 +577,13 @@ switch(oCheckModel)
{ {
case ClCheckModel::_Warn: case ClCheckModel::_Warn:
// lcd_show_fullscreen_message_and_wait_P(_i("Printer model differs from the G-code. Continue?")); // lcd_show_fullscreen_message_and_wait_P(_i("Printer model differs from the G-code. Continue?"));
lcd_display_message_fullscreen_P(_i("G-code sliced for a different printer type. Continue?")); lcd_display_message_fullscreen_P(_T(MSG_GCODE_DIFF_PRINTER_CONTINUE));
lcd_wait_for_click_delay(MSG_PRINT_CHECKING_FAILED_TIMEOUT); lcd_wait_for_click_delay(MSG_PRINT_CHECKING_FAILED_TIMEOUT);
//???custom_message_type=CUSTOM_MSG_TYPE_STATUS; // display / status-line recovery //???custom_message_type=CUSTOM_MSG_TYPE_STATUS; // display / status-line recovery
lcd_update_enable(true); // display / status-line recovery lcd_update_enable(true); // display / status-line recovery
break; break;
case ClCheckModel::_Strict: case ClCheckModel::_Strict:
lcd_show_fullscreen_message_and_wait_P(_i("G-code sliced for a different printer type. Please re-slice the model again. Print cancelled.")); lcd_show_fullscreen_message_and_wait_P(_T(MSG_GCODE_DIFF_PRINTER_CANCELLED));
lcd_print_stop(); lcd_print_stop();
break; break;
case ClCheckModel::_None: case ClCheckModel::_None:

View File

@ -51,6 +51,7 @@ enum class ClNozzleDiameter:uint_least8_t
_Diameter_250=25, _Diameter_250=25,
_Diameter_400=40, _Diameter_400=40,
_Diameter_600=60, _Diameter_600=60,
_Diameter_800=80,
_Diameter_Undef=EEPROM_EMPTY_VALUE _Diameter_Undef=EEPROM_EMPTY_VALUE
}; };

View File

@ -326,6 +326,10 @@ PREHEAT SETTINGS
#define PLA_PREHEAT_HPB_TEMP 55 #define PLA_PREHEAT_HPB_TEMP 55
#define PLA_PREHEAT_FAN_SPEED 0 #define PLA_PREHEAT_FAN_SPEED 0
#define PVB_PREHEAT_HOTEND_TEMP 215
#define PVB_PREHEAT_HPB_TEMP 75
#define PVB_PREHEAT_FAN_SPEED 0
#define ASA_PREHEAT_HOTEND_TEMP 260 #define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105 #define ASA_PREHEAT_HPB_TEMP 105
#define ASA_PREHEAT_FAN_SPEED 0 #define ASA_PREHEAT_FAN_SPEED 0

View File

@ -323,6 +323,9 @@ PREHEAT SETTINGS
#define PLA_PREHEAT_HOTEND_TEMP 215 #define PLA_PREHEAT_HOTEND_TEMP 215
#define PLA_PREHEAT_HPB_TEMP 55 #define PLA_PREHEAT_HPB_TEMP 55
#define PVB_PREHEAT_HOTEND_TEMP 215
#define PVB_PREHEAT_HPB_TEMP 75
#define ASA_PREHEAT_HOTEND_TEMP 260 #define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105 #define ASA_PREHEAT_HPB_TEMP 105

View File

@ -384,6 +384,9 @@
#define PLA_PREHEAT_HOTEND_TEMP 215 #define PLA_PREHEAT_HOTEND_TEMP 215
#define PLA_PREHEAT_HPB_TEMP 60 #define PLA_PREHEAT_HPB_TEMP 60
#define PVB_PREHEAT_HOTEND_TEMP 215
#define PVB_PREHEAT_HPB_TEMP 75
#define ASA_PREHEAT_HOTEND_TEMP 260 #define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105 #define ASA_PREHEAT_HPB_TEMP 105

View File

@ -385,6 +385,9 @@
#define PLA_PREHEAT_HOTEND_TEMP 215 #define PLA_PREHEAT_HOTEND_TEMP 215
#define PLA_PREHEAT_HPB_TEMP 60 #define PLA_PREHEAT_HPB_TEMP 60
#define PVB_PREHEAT_HOTEND_TEMP 215
#define PVB_PREHEAT_HPB_TEMP 75
#define ASA_PREHEAT_HOTEND_TEMP 260 #define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105 #define ASA_PREHEAT_HPB_TEMP 105

View File

@ -384,6 +384,9 @@
#define PLA_PREHEAT_HOTEND_TEMP 215 #define PLA_PREHEAT_HOTEND_TEMP 215
#define PLA_PREHEAT_HPB_TEMP 60 #define PLA_PREHEAT_HPB_TEMP 60
#define PVB_PREHEAT_HOTEND_TEMP 215
#define PVB_PREHEAT_HPB_TEMP 75
#define ASA_PREHEAT_HOTEND_TEMP 260 #define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105 #define ASA_PREHEAT_HPB_TEMP 105

View File

@ -385,6 +385,9 @@
#define PLA_PREHEAT_HOTEND_TEMP 215 #define PLA_PREHEAT_HOTEND_TEMP 215
#define PLA_PREHEAT_HPB_TEMP 60 #define PLA_PREHEAT_HPB_TEMP 60
#define PVB_PREHEAT_HOTEND_TEMP 215
#define PVB_PREHEAT_HPB_TEMP 75
#define ASA_PREHEAT_HOTEND_TEMP 260 #define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105 #define ASA_PREHEAT_HPB_TEMP 105

View File

@ -268,6 +268,7 @@
#define TMC2130_CURRENTS_R_HOME {8, 10, 20, 18} // homing running currents for all axes #define TMC2130_CURRENTS_R_HOME {8, 10, 20, 18} // homing running currents for all axes
#define TMC2130_STEALTH_Z #define TMC2130_STEALTH_Z
#define TMC2130_DEDGE_STEPPING
//#define TMC2130_SERVICE_CODES_M910_M918 //#define TMC2130_SERVICE_CODES_M910_M918
@ -497,6 +498,9 @@
#define PLA_PREHEAT_HOTEND_TEMP 215 #define PLA_PREHEAT_HOTEND_TEMP 215
#define PLA_PREHEAT_HPB_TEMP 60 #define PLA_PREHEAT_HPB_TEMP 60
#define PVB_PREHEAT_HOTEND_TEMP 215
#define PVB_PREHEAT_HPB_TEMP 75
#define ASA_PREHEAT_HOTEND_TEMP 260 #define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105 #define ASA_PREHEAT_HPB_TEMP 105

View File

@ -270,6 +270,7 @@
#define TMC2130_CURRENTS_R_HOME {8, 10, 20, 18} // homing running currents for all axes #define TMC2130_CURRENTS_R_HOME {8, 10, 20, 18} // homing running currents for all axes
#define TMC2130_STEALTH_Z #define TMC2130_STEALTH_Z
#define TMC2130_DEDGE_STEPPING
//#define TMC2130_SERVICE_CODES_M910_M918 //#define TMC2130_SERVICE_CODES_M910_M918
@ -501,6 +502,9 @@
#define PLA_PREHEAT_HOTEND_TEMP 215 #define PLA_PREHEAT_HOTEND_TEMP 215
#define PLA_PREHEAT_HPB_TEMP 60 #define PLA_PREHEAT_HPB_TEMP 60
#define PVB_PREHEAT_HOTEND_TEMP 215
#define PVB_PREHEAT_HPB_TEMP 75
#define ASA_PREHEAT_HOTEND_TEMP 260 #define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105 #define ASA_PREHEAT_HPB_TEMP 105

View File

@ -18,6 +18,8 @@
#define _PINDA ((READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING)?1:0) #define _PINDA ((READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING)?1:0)
static const char endl[2] PROGMEM = "\n";
#define DBG(args...) printf_P(args) #define DBG(args...) printf_P(args)
//#define DBG(args...) //#define DBG(args...)
#ifndef _n #ifndef _n
@ -29,6 +31,11 @@
#define _Z ((int16_t)count_position[Z_AXIS]) #define _Z ((int16_t)count_position[Z_AXIS])
#define _E ((int16_t)count_position[E_AXIS]) #define _E ((int16_t)count_position[E_AXIS])
#define _X_ (count_position[X_AXIS])
#define _Y_ (count_position[Y_AXIS])
#define _Z_ (count_position[Z_AXIS])
#define _E_ (count_position[E_AXIS])
#ifndef M_PI #ifndef M_PI
const constexpr float M_PI = 3.1415926535897932384626433832795f; const constexpr float M_PI = 3.1415926535897932384626433832795f;
#endif #endif
@ -40,6 +47,13 @@ const constexpr uint8_t Y_MINUS = 1;
const constexpr uint8_t Z_PLUS = 0; const constexpr uint8_t Z_PLUS = 0;
const constexpr uint8_t Z_MINUS = 1; const constexpr uint8_t Z_MINUS = 1;
const constexpr uint8_t X_PLUS_MASK = 0;
const constexpr uint8_t X_MINUS_MASK = X_AXIS_MASK;
const constexpr uint8_t Y_PLUS_MASK = 0;
const constexpr uint8_t Y_MINUS_MASK = Y_AXIS_MASK;
const constexpr uint8_t Z_PLUS_MASK = 0;
const constexpr uint8_t Z_MINUS_MASK = Z_AXIS_MASK;
/// Max. jerk in PrusaSlicer, 10000 = 1 mm/s /// Max. jerk in PrusaSlicer, 10000 = 1 mm/s
const constexpr uint16_t MAX_DELAY = 10000; const constexpr uint16_t MAX_DELAY = 10000;
const constexpr float MIN_SPEED = 0.01f / (MAX_DELAY * 0.000001f); const constexpr float MIN_SPEED = 0.01f / (MAX_DELAY * 0.000001f);
@ -226,6 +240,9 @@ uint16_t xyzcal_calc_delay(uint16_t, uint16_t)
#endif //SM4_ACCEL_TEST #endif //SM4_ACCEL_TEST
/// Moves printer to absolute position [x,y,z] defined in integer position system /// Moves printer to absolute position [x,y,z] defined in integer position system
/// check_pinda == 0: ordinary move
/// check_pinda == 1: stop when PINDA triggered
/// check_pinda == -1: stop when PINDA untriggered
bool xyzcal_lineXYZ_to(int16_t x, int16_t y, int16_t z, uint16_t delay_us, int8_t check_pinda) bool xyzcal_lineXYZ_to(int16_t x, int16_t y, int16_t z, uint16_t delay_us, int8_t check_pinda)
{ {
// DBG(_n("xyzcal_lineXYZ_to x=%d y=%d z=%d check=%d\n"), x, y, z, check_pinda); // DBG(_n("xyzcal_lineXYZ_to x=%d y=%d z=%d check=%d\n"), x, y, z, check_pinda);
@ -237,7 +254,7 @@ bool xyzcal_lineXYZ_to(int16_t x, int16_t y, int16_t z, uint16_t delay_us, int8_
sm4_stop_cb = check_pinda?((check_pinda<0)?check_pinda_0:check_pinda_1):0; sm4_stop_cb = check_pinda?((check_pinda<0)?check_pinda_0:check_pinda_1):0;
xyzcal_sm4_delay = delay_us; xyzcal_sm4_delay = delay_us;
// uint32_t u = _micros(); // uint32_t u = _micros();
bool ret = sm4_line_xyze_ui(abs(x), abs(y), abs(z), 0) ? true : false; bool ret = sm4_line_xyz_ui(abs(x), abs(y), abs(z)) ? true : false;
// u = _micros() - u; // u = _micros() - u;
return ret; return ret;
} }
@ -260,6 +277,7 @@ bool xyzcal_spiral2(int16_t cx, int16_t cy, int16_t z0, int16_t dz, int16_t radi
ad = 0; ad = 0;
if (pad) ad = *pad % 720; if (pad) ad = *pad % 720;
//@size=214
DBG(_n("xyzcal_spiral2 cx=%d cy=%d z0=%d dz=%d radius=%d ad=%d\n"), cx, cy, z0, dz, radius, ad); DBG(_n("xyzcal_spiral2 cx=%d cy=%d z0=%d dz=%d radius=%d ad=%d\n"), cx, cy, z0, dz, radius, ad);
// lcd_set_cursor(0, 4); // lcd_set_cursor(0, 4);
// char text[10]; // char text[10];
@ -278,7 +296,7 @@ bool xyzcal_spiral2(int16_t cx, int16_t cy, int16_t z0, int16_t dz, int16_t radi
dad = dad_max - ((719 - ad) / k); dad = dad_max - ((719 - ad) / k);
r = (float)(((uint32_t)(719 - ad)) * (-radius)) / 720; r = (float)(((uint32_t)(719 - ad)) * (-radius)) / 720;
} }
ar = (ad + rotation)* (float)M_PI / 180; ar = radians(ad + rotation);
int x = (int)(cx + (cos(ar) * r)); int x = (int)(cx + (cos(ar) * r));
int y = (int)(cy + (sin(ar) * r)); int y = (int)(cy + (sin(ar) * r));
int z = (int)(z0 - ((float)((int32_t)dz * ad) / 720)); int z = (int)(z0 - ((float)((int32_t)dz * ad) / 720));
@ -303,6 +321,7 @@ bool xyzcal_spiral8(int16_t cx, int16_t cy, int16_t z0, int16_t dz, int16_t radi
bool ret = false; bool ret = false;
uint16_t ad = 0; uint16_t ad = 0;
if (pad) ad = *pad; if (pad) ad = *pad;
//@size=274
DBG(_n("xyzcal_spiral8 cx=%d cy=%d z0=%d dz=%d radius=%d ad=%d\n"), cx, cy, z0, dz, radius, ad); DBG(_n("xyzcal_spiral8 cx=%d cy=%d z0=%d dz=%d radius=%d ad=%d\n"), cx, cy, z0, dz, radius, ad);
if (!ret && (ad < 720)) if (!ret && (ad < 720))
if ((ret = xyzcal_spiral2(cx, cy, z0 - 0*dz, dz, radius, 0, delay_us, check_pinda, &ad)) != 0) if ((ret = xyzcal_spiral2(cx, cy, z0 - 0*dz, dz, radius, 0, delay_us, check_pinda, &ad)) != 0)
@ -370,9 +389,49 @@ int8_t xyzcal_meassure_pinda_hysterezis(int16_t min_z, int16_t max_z, uint16_t d
} }
#endif //XYZCAL_MEASSURE_PINDA_HYSTEREZIS #endif //XYZCAL_MEASSURE_PINDA_HYSTEREZIS
void print_hysteresis(int16_t min_z, int16_t max_z, int16_t step){
int16_t delay_us = 600;
int16_t trigger = 0;
int16_t untrigger = 0;
DBG(_n("Hysteresis\n"));
xyzcal_lineXYZ_to(_X, _Y, min_z, delay_us, 0);
for (int16_t z = min_z; z <= max_z; z += step){
xyzcal_lineXYZ_to(_X, _Y, z, delay_us, -1);
untrigger = _Z;
xyzcal_lineXYZ_to(_X, _Y, z, delay_us, 0);
xyzcal_lineXYZ_to(_X, _Y, min_z, delay_us, 1);
trigger = _Z;
//xyzcal_lineXYZ_to(_X, _Y, min_z, delay_us, 0);
//@size=114
DBG(_n("min, trigger, untrigger, max: [%d %d %d %d]\n"), _Z, trigger, untrigger, z);
}
}
void update_position_1_step(uint8_t axis, uint8_t dir){
if (axis & X_AXIS_MASK)
_X_ += dir & X_AXIS_MASK ? -1 : 1;
if (axis & Y_AXIS_MASK)
_Y_ += dir & Y_AXIS_MASK ? -1 : 1;
if (axis & Z_AXIS_MASK)
_Z_ += dir & Z_AXIS_MASK ? -1 : 1;
}
void set_axes_dir(uint8_t axes, uint8_t dir){
if (axes & X_AXIS_MASK)
sm4_set_dir(X_AXIS, dir & X_AXIS_MASK);
if (axes & Y_AXIS_MASK)
sm4_set_dir(Y_AXIS, dir & Y_AXIS_MASK);
if (axes & Z_AXIS_MASK)
sm4_set_dir(Z_AXIS, dir & Z_AXIS_MASK);
}
/// Accelerate up to max.speed (defined by @min_delay_us) /// Accelerate up to max.speed (defined by @min_delay_us)
void accelerate(uint8_t axis, int16_t acc, uint16_t &delay_us, uint16_t min_delay_us){ /// does not update global positions
sm4_do_step(axis); void accelerate_1_step(uint8_t axes, int16_t acc, uint16_t &delay_us, uint16_t min_delay_us){
sm4_do_step(axes);
/// keep max speed (avoid extra computation) /// keep max speed (avoid extra computation)
if (acc > 0 && delay_us == min_delay_us){ if (acc > 0 && delay_us == min_delay_us){
@ -406,136 +465,183 @@ void accelerate(uint8_t axis, int16_t acc, uint16_t &delay_us, uint16_t min_dela
delay_us = t1; delay_us = t1;
} }
void go_and_stop(uint8_t axis, int16_t dec, uint16_t &delay_us, uint16_t &steps){ /// Goes defined number of steps while accelerating
/// updates global positions
void accelerate(uint8_t axes, uint8_t dir, int16_t acc, uint16_t &delay_us, uint16_t min_delay_us, uint16_t steps){
set_axes_dir(axes, dir);
while (steps--){
accelerate_1_step(axes, acc, delay_us, min_delay_us);
update_position_1_step(axes, dir);
}
}
/// keeps speed and then it decelerates to a complete stop (if possible)
/// it goes defined number of steps
/// returns after each step
/// \returns true if step was done
/// does not update global positions
bool go_and_stop_1_step(uint8_t axes, int16_t dec, uint16_t &delay_us, uint16_t &steps){
if (steps <= 0 || dec <= 0) if (steps <= 0 || dec <= 0)
return; return false;
/// deceleration distance in steps, s = 1/2 v^2 / a /// deceleration distance in steps, s = 1/2 v^2 / a
uint16_t s = round_to_u16(100 * 0.5f * SQR(0.01f) / (SQR((float)delay_us) * dec)); uint16_t s = round_to_u16(100 * 0.5f * SQR(0.01f) / (SQR((float)delay_us) * dec));
if (steps > s){ if (steps > s){
/// go steady /// go steady
sm4_do_step(axis); sm4_do_step(axes);
delayMicroseconds(delay_us); delayMicroseconds(delay_us);
} else { } else {
/// decelerate /// decelerate
accelerate(axis, -dec, delay_us, delay_us); accelerate_1_step(axes, -dec, delay_us, delay_us);
} }
--steps; --steps;
return true;
} }
void xyzcal_scan_pixels_32x32_Zhop(int16_t cx, int16_t cy, int16_t min_z, int16_t max_z, uint16_t delay_us, uint8_t* pixels){ /// \param dir sets direction of movement
/// updates global positions
void go_and_stop(uint8_t axes, uint8_t dir, int16_t dec, uint16_t &delay_us, uint16_t steps){
set_axes_dir(axes, dir);
while (go_and_stop_1_step(axes, dec, delay_us, steps)){
update_position_1_step(axes, dir);
}
}
/// goes all the way to stop
/// \returns steps done
/// updates global positions
void stop_smoothly(uint8_t axes, uint8_t dir, int16_t dec, uint16_t &delay_us){
if (dec <= 0)
return;
set_axes_dir(axes, dir);
while (delay_us < MAX_DELAY){
accelerate_1_step(axes, -dec, delay_us, delay_us);
update_position_1_step(axes, dir);
}
}
void go_start_stop(uint8_t axes, uint8_t dir, int16_t acc, uint16_t min_delay_us, uint16_t steps){
if (steps == 0)
return;
uint16_t current_delay_us = MAX_DELAY;
const uint16_t half = steps / 2;
accelerate(axes, dir, acc, current_delay_us, min_delay_us, half);
go_and_stop(axes, dir, -acc, current_delay_us, steps - half);
}
/// moves X, Y, Z one after each other
/// starts and ends at 0 speed
void go_manhattan(int16_t x, int16_t y, int16_t z, int16_t acc, uint16_t min_delay_us){
int32_t length;
// DBG(_n("x %d -> %d, "), x, _X);
length = x - _X;
go_start_stop(X_AXIS_MASK, length < 0 ? X_MINUS_MASK : X_PLUS_MASK, acc, min_delay_us, ABS(length));
// DBG(_n("y %d -> %d, "), y, _Y);
length = y - _Y;
go_start_stop(Y_AXIS_MASK, length < 0 ? Y_MINUS_MASK : Y_PLUS_MASK, acc, min_delay_us, ABS(length));
// DBG(_n("z %d -> %d\n"), z, _Z);
length = z - _Z;
go_start_stop(Z_AXIS_MASK, length < 0 ? Z_MINUS_MASK : Z_PLUS_MASK, acc, min_delay_us, ABS(length));
// DBG(_n("\n"));
}
void xyzcal_scan_pixels_32x32_Zhop(int16_t cx, int16_t cy, int16_t min_z, int16_t max_z, uint16_t delay_us, uint8_t *pixels){
if (!pixels) if (!pixels)
return; return;
int16_t z = _Z;
int16_t z_trig; int16_t z_trig;
uint16_t line_buffer[32]; uint16_t line_buffer[32];
uint16_t current_delay_us = MAX_DELAY; ///< defines current speed uint16_t current_delay_us = MAX_DELAY; ///< defines current speed
xyzcal_lineXYZ_to(cx - 1024, cy - 1024, min_z, delay_us, 0);
int16_t start_z; int16_t start_z;
uint16_t steps_to_go; uint16_t steps_to_go;
DBG(_n("Scan countdown: "));
for (uint8_t r = 0; r < 32; r++){ ///< Y axis for (uint8_t r = 0; r < 32; r++){ ///< Y axis
xyzcal_lineXYZ_to(_X, cy - 1024 + r * 64, z, delay_us, 0); for (uint8_t d = 0; d < 2; ++d){
for (int8_t d = 0; d < 2; ++d){ ///< direction go_manhattan((d & 1) ? (cx + 992) : (cx - 992), cy - 992 + r * 64, _Z, Z_ACCEL, Z_MIN_DELAY);
xyzcal_lineXYZ_to((d & 1) ? (cx + 1024) : (cx - 1024), _Y, min_z, delay_us, 0); xyzcal_lineXYZ_to((d & 1) ? (cx + 992) : (cx - 992), cy - 992 + r * 64, _Z, delay_us, 0);
z = _Z;
sm4_set_dir(X_AXIS, d); sm4_set_dir(X_AXIS, d);
for (uint8_t c = 0; c < 32; c++){ ///< X axis //@size=242
DBG(_n("%d\n"), 64 - (r * 2 + d)); ///< to keep OctoPrint connection alive
for (uint8_t c = 0; c < 32; c++){ ///< X axis
/// move to the next point and move Z up diagonally (if needed)
current_delay_us = MAX_DELAY;
const int16_t end_x = ((d & 1) ? 1 : -1) * (64 * (16 - c) - 32) + cx;
const int16_t length_x = ABS(end_x - _X);
const int16_t half_x = length_x / 2;
/// don't go up if PINDA not triggered (optimization)
const bool up = _PINDA;
const uint8_t axes = up ? X_AXIS_MASK | Z_AXIS_MASK : X_AXIS_MASK;
const uint8_t dir = Z_PLUS_MASK | (d & 1 ? X_MINUS_MASK : X_PLUS_MASK);
accelerate(axes, dir, Z_ACCEL, current_delay_us, Z_MIN_DELAY, half_x);
go_and_stop(axes, dir, Z_ACCEL, current_delay_us, length_x - half_x);
z_trig = min_z; z_trig = min_z;
/// move up to un-trigger (surpress hysteresis) /// move up to un-trigger (surpress hysteresis)
sm4_set_dir(Z_AXIS, Z_PLUS); sm4_set_dir(Z_AXIS, Z_PLUS);
/// speed up from stop, go half the way /// speed up from stop, go half the way
current_delay_us = MAX_DELAY; current_delay_us = MAX_DELAY;
for (start_z = z; z < (max_z + start_z) / 2; ++z){ for (start_z = _Z; _Z < (max_z + start_z) / 2; ++_Z_){
if (!_PINDA){ if (!_PINDA){
break; break;
} }
accelerate(Z_AXIS_MASK, Z_ACCEL, current_delay_us, Z_MIN_DELAY); accelerate_1_step(Z_AXIS_MASK, Z_ACCEL, current_delay_us, Z_MIN_DELAY);
} }
if(_PINDA){ if (_PINDA){
uint16_t steps_to_go = MAX(0, max_z - z); steps_to_go = MAX(0, max_z - _Z);
while (_PINDA && z < max_z){ while (_PINDA && _Z < max_z){
go_and_stop(Z_AXIS_MASK, Z_ACCEL, current_delay_us, steps_to_go); go_and_stop_1_step(Z_AXIS_MASK, Z_ACCEL, current_delay_us, steps_to_go);
++z; ++_Z_;
} }
} }
/// slow down to stop stop_smoothly(Z_AXIS_MASK, Z_PLUS_MASK, Z_ACCEL, current_delay_us);
while (current_delay_us < MAX_DELAY){
accelerate(Z_AXIS_MASK, -Z_ACCEL, current_delay_us, Z_MIN_DELAY);
++z;
}
/// move down to trigger /// move down to trigger
sm4_set_dir(Z_AXIS, Z_MINUS); sm4_set_dir(Z_AXIS, Z_MINUS);
/// speed up /// speed up
current_delay_us = MAX_DELAY; current_delay_us = MAX_DELAY;
for (start_z = z; z > (min_z + start_z) / 2; --z){ for (start_z = _Z; _Z > (min_z + start_z) / 2; --_Z_){
if (_PINDA){ if (_PINDA){
z_trig = z; z_trig = _Z;
break; break;
} }
accelerate(Z_AXIS_MASK, Z_ACCEL, current_delay_us, Z_MIN_DELAY); accelerate_1_step(Z_AXIS_MASK, Z_ACCEL, current_delay_us, Z_MIN_DELAY);
} }
/// slow down /// slow down
if(!_PINDA){ if (!_PINDA){
steps_to_go = MAX(0, z - min_z); steps_to_go = MAX(0, _Z - min_z);
while (!_PINDA && z > min_z){ while (!_PINDA && _Z > min_z){
go_and_stop(Z_AXIS_MASK, Z_ACCEL, current_delay_us, steps_to_go); go_and_stop_1_step(Z_AXIS_MASK, Z_ACCEL, current_delay_us, steps_to_go);
--z; --_Z_;
} }
z_trig = z; z_trig = _Z;
} }
/// slow down to stop /// slow down to stop but not lower than min_z
while (z > min_z && current_delay_us < MAX_DELAY){ while (_Z > min_z && current_delay_us < MAX_DELAY){
accelerate(Z_AXIS_MASK, -Z_ACCEL, current_delay_us, Z_MIN_DELAY); accelerate_1_step(Z_AXIS_MASK, -Z_ACCEL, current_delay_us, Z_MIN_DELAY);
--z; --_Z_;
} }
count_position[2] = z;
if (d == 0){ if (d == 0){
line_buffer[c] = (uint16_t)(z_trig - min_z); line_buffer[c] = (uint16_t)(z_trig - min_z);
} else { } else {
/// data reversed in X /// !!! data reversed in X
// DBG(_n("%04x"), (line_buffer[31 - c] + (z - min_z)) / 2); // DBG(_n("%04x"), ((uint32_t)line_buffer[31 - c] + (z_trig - min_z)) / 2);
/// save average of both directions /// save average of both directions (filters effect of hysteresis)
pixels[(uint16_t)r * 32 + (31 - c)] = (uint8_t)MIN((uint32_t)255, ((uint32_t)line_buffer[31 - c] + (z_trig - min_z)) / 2); pixels[(uint16_t)r * 32 + (31 - c)] = (uint8_t)MIN((uint32_t)255, ((uint32_t)line_buffer[31 - c] + (z_trig - min_z)) / 2);
} }
/// move to the next point and move Z up diagonally (if needed)
current_delay_us = MAX_DELAY;
// const int8_t dir = (d & 1) ? -1 : 1;
const int16_t end_x = ((d & 1) ? 1 : -1) * (64 * (16 - c) - 32) + cx;
const int16_t length_x = ABS(end_x - _X);
const int16_t half_x = length_x / 2;
int16_t x = 0;
/// don't go up if PINDA not triggered
const bool up = _PINDA;
int8_t axis = up ? X_AXIS_MASK | Z_AXIS_MASK : X_AXIS_MASK;
sm4_set_dir(Z_AXIS, Z_PLUS);
/// speed up
for (x = 0; x <= half_x; ++x){
accelerate(axis, Z_ACCEL, current_delay_us, Z_MIN_DELAY);
if (up)
++z;
}
/// slow down
steps_to_go = length_x - x;
for (; x < length_x; ++x){
go_and_stop(axis, Z_ACCEL, current_delay_us, steps_to_go);
if (up)
++z;
}
count_position[0] = end_x;
count_position[2] = z;
} }
} }
// DBG(_n("\n\n"));
} }
DBG(endl);
} }
/// Returns rate of match /// Returns rate of match
@ -582,36 +688,20 @@ uint8_t xyzcal_find_pattern_12x12_in_32x32(uint8_t* pixels, uint16_t* pattern, u
} }
// DBG(_n("\n")); // DBG(_n("\n"));
} }
DBG(_n("max_c=%d max_r=%d max_match=%d pixel\n"), max_c, max_r, max_match); //@size=278
DBG(_n("Pattern center [%f %f], match %f%%\n"), max_c + 5.5f, max_r + 5.5f, max_match / 1.32f);
*pc = max_c; *pc = max_c;
*pr = max_r; *pr = max_r;
return max_match; return max_match;
} }
uint8_t xyzcal_xycoords2point(int16_t x, int16_t y) const uint16_t xyzcal_point_pattern_10[12] PROGMEM = {0x000, 0x0f0, 0x1f8, 0x3fc, 0x7fe, 0x7fe, 0x7fe, 0x7fe, 0x3fc, 0x1f8, 0x0f0, 0x000};
{ const uint16_t xyzcal_point_pattern_08[12] PROGMEM = {0x000, 0x000, 0x0f0, 0x1f8, 0x3fc, 0x3fc, 0x3fc, 0x3fc, 0x1f8, 0x0f0, 0x000, 0x000};
uint8_t ix = (x > 10000)?1:0;
uint8_t iy = (y > 10000)?1:0;
return iy?(3-ix):ix;
}
//MK3
#if ((MOTHERBOARD == BOARD_EINSY_1_0a))
const int16_t xyzcal_point_xcoords[4] PROGMEM = {1200, 22000, 22000, 1200};
const int16_t xyzcal_point_ycoords[4] PROGMEM = {600, 600, 19800, 19800};
#endif //((MOTHERBOARD == BOARD_EINSY_1_0a))
//MK2.5
#if ((MOTHERBOARD == BOARD_RAMBO_MINI_1_0) || (MOTHERBOARD == BOARD_RAMBO_MINI_1_3))
const int16_t xyzcal_point_xcoords[4] PROGMEM = {1200, 22000, 22000, 1200};
const int16_t xyzcal_point_ycoords[4] PROGMEM = {700, 700, 19800, 19800};
#endif //((MOTHERBOARD == BOARD_RAMBO_MINI_1_0) || (MOTHERBOARD == BOARD_RAMBO_MINI_1_3))
const uint16_t xyzcal_point_pattern[12] PROGMEM = {0x000, 0x0f0, 0x1f8, 0x3fc, 0x7fe, 0x7fe, 0x7fe, 0x7fe, 0x3fc, 0x1f8, 0x0f0, 0x000};
bool xyzcal_searchZ(void) bool xyzcal_searchZ(void)
{ {
//@size=118
DBG(_n("xyzcal_searchZ x=%ld y=%ld z=%ld\n"), count_position[X_AXIS], count_position[Y_AXIS], count_position[Z_AXIS]); DBG(_n("xyzcal_searchZ x=%ld y=%ld z=%ld\n"), count_position[X_AXIS], count_position[Y_AXIS], count_position[Z_AXIS]);
int16_t x0 = _X; int16_t x0 = _X;
int16_t y0 = _Y; int16_t y0 = _Y;
@ -627,11 +717,13 @@ bool xyzcal_searchZ(void)
int16_t x_on = _X; int16_t x_on = _X;
int16_t y_on = _Y; int16_t y_on = _Y;
int16_t z_on = _Z; int16_t z_on = _Z;
DBG(_n(" ON-SIGNAL at x=%d y=%d z=%d ad=%d\n"), x_on, y_on, z_on, ad); //@size=82
DBG(_n(" ON-SIGNAL at x=%d y=%d z=%d ad=%d\n"), x_on, y_on, z_on, ad);
return true; return true;
} }
z -= 400; z -= 400;
} }
//@size=138
DBG(_n("xyzcal_searchZ no signal\n x=%ld y=%ld z=%ld\n"), count_position[X_AXIS], count_position[Y_AXIS], count_position[Z_AXIS]); DBG(_n("xyzcal_searchZ no signal\n x=%ld y=%ld z=%ld\n"), count_position[X_AXIS], count_position[Y_AXIS], count_position[Z_AXIS]);
return false; return false;
} }
@ -699,6 +791,35 @@ float highest(float *points, const uint8_t num_points){
return max; return max;
} }
/// slow bubble sort but short
void sort(float *points, const uint8_t num_points){
/// one direction bubble sort
for (uint8_t i = 0; i < num_points; ++i){
for (uint8_t j = 0; j < num_points - i - 1; ++j){
if (points[j] > points[j + 1])
SWAP(points[j], points[j + 1]);
}
}
// DBG(_n("Sorted: "));
// for (uint8_t i = 0; i < num_points; ++i)
// DBG(_n("%f "), points[i]);
// DBG(_n("\n"));
}
/// sort array and returns median value
/// don't send empty array or nullptr
float median(float *points, const uint8_t num_points){
sort(points, num_points);
return points[num_points / 2];
}
float __attribute__ ((noinline)) CLAMP_median(float *shifts, uint8_t blocks, float norm){
const constexpr float max_change = 0.5f; ///< avoids too fast changes (avoid oscillation)
return CLAMP( median(shifts, blocks) * norm, -max_change, max_change);
}
/// Searches for circle iteratively /// Searches for circle iteratively
/// Uses points on the perimeter. If point is high it pushes circle out of the center (shift or change of radius), /// Uses points on the perimeter. If point is high it pushes circle out of the center (shift or change of radius),
/// otherwise to the center. /// otherwise to the center.
@ -706,108 +827,123 @@ float highest(float *points, const uint8_t num_points){
void dynamic_circle(uint8_t *matrix_32x32, float &x, float &y, float &r, uint8_t iterations){ void dynamic_circle(uint8_t *matrix_32x32, float &x, float &y, float &r, uint8_t iterations){
/// circle of 10.5 diameter has 33 in circumference, don't go much above /// circle of 10.5 diameter has 33 in circumference, don't go much above
const constexpr uint8_t num_points = 33; const constexpr uint8_t num_points = 33;
float points[num_points]; const float pi_2_div_num_points = 2 * M_PI / num_points;
float pi_2_div_num_points = 2 * M_PI / num_points;
const constexpr uint8_t target_z = 32; ///< target z height of the circle const constexpr uint8_t target_z = 32; ///< target z height of the circle
float norm; const uint8_t blocks = num_points;
float angle;
float max_val = 0.5f;
const uint8_t blocks = 7;
float shifts_x[blocks]; float shifts_x[blocks];
float shifts_y[blocks]; float shifts_y[blocks];
float shifts_r[blocks]; float shifts_r[blocks];
// DBG(_n(" [%f, %f][%f] start circle\n"), x, y, r);
for (int8_t i = iterations; i > 0; --i){ for (int8_t i = iterations; i > 0; --i){
// DBG(_n(" [%f, %f][%f] circle\n"), x, y, r); //@size=128B
DBG(_n(" [%f, %f][%f] circle\n"), x, y, r);
/// read points on the circle /// read points on the circle
for (uint8_t p = 0; p < num_points; ++p){ for (uint8_t p = 0; p < num_points; ++p){
angle = p * pi_2_div_num_points; const float angle = p * pi_2_div_num_points;
points[p] = get_value(matrix_32x32, r * cos(angle) + x, r * sin(angle) + y) - target_z; const float height = get_value(matrix_32x32, r * cos(angle) + x, r * sin(angle) + y) - target_z;
// DBG(_n("%f "), points[p]); // DBG(_n("%f "), point);
shifts_x[p] = cos(angle) * height;
shifts_y[p] = sin(angle) * height;
shifts_r[p] = height;
} }
// DBG(_n(" points\n")); // DBG(_n(" points\n"));
/// sum blocks const float reducer = 32.f; ///< reduces speed of convergency to avoid oscillation
for (uint8_t j = 0; j < blocks; ++j){ const float norm = 1.f / reducer;
shifts_x[j] = shifts_y[j] = shifts_r[j] = 0; // x += CLAMP(median(shifts_x, blocks) * norm, -max_change, max_change);
/// first part // y += CLAMP(median(shifts_y, blocks) * norm, -max_change, max_change);
for (uint8_t p = 0; p < num_points * 3 / 4; ++p){ // r += CLAMP(median(shifts_r, blocks) * norm * .5f, -max_change, max_change);
uint8_t idx = (p + j * num_points / blocks) % num_points; //104B down
x += CLAMP_median(shifts_x, blocks, norm);
angle = idx * pi_2_div_num_points; y += CLAMP_median(shifts_y, blocks, norm);
shifts_x[j] += cos(angle) * points[idx]; r += CLAMP_median(shifts_r, blocks, norm * .5f);
shifts_y[j] += sin(angle) * points[idx];
shifts_r[j] += points[idx];
}
}
/// remove extreme values (slow but simple)
for (uint8_t j = 0; j < blocks / 2; ++j){
remove_highest(shifts_x, blocks);
remove_highest(shifts_y, blocks);
remove_highest(shifts_r, blocks);
}
/// median is the highest now
norm = 1.f / (32.f * (num_points * 3 / 4));
x += CLAMP(highest(shifts_x, blocks) * norm, -max_val, max_val);
y += CLAMP(highest(shifts_y, blocks) * norm, -max_val, max_val);
r += CLAMP(highest(shifts_r, blocks) * norm, -max_val, max_val);
r = MAX(2, r); r = MAX(2, r);
} }
//@size=118
DBG(_n(" [%f, %f][%f] final circle\n"), x, y, r); DBG(_n(" [%f, %f][%f] final circle\n"), x, y, r);
} }
/// Prints matrix in hex to debug output (serial line) /// Prints matrix in hex to debug output (serial line)
void print_image(uint8_t *matrix_32x32){ void print_image(const uint8_t *matrix_32x32){
for (uint8_t y = 0; y < 32; ++y){ for (uint8_t y = 0; y < 32; ++y){
const uint16_t idx_y = y * 32; const uint16_t idx_y = y * 32;
for (uint8_t x = 0; x < 32; ++x){ for (uint8_t x = 0; x < 32; ++x){
DBG(_n("%02x"), matrix_32x32[idx_y + x]); DBG(_n("%02x"), matrix_32x32[idx_y + x]);
} }
DBG(_n("\n")); DBG(endl);
} }
DBG(_n("\n")); DBG(endl);
}
/// Takes two patterns and searches them in matrix32
/// \returns best match
uint8_t find_patterns(uint8_t *matrix32, uint16_t *pattern08, uint16_t *pattern10, uint8_t &col, uint8_t &row){
uint8_t c08 = 0;
uint8_t r08 = 0;
uint8_t match08 = 0;
uint8_t c10 = 0;
uint8_t r10 = 0;
uint8_t match10 = 0;
match08 = xyzcal_find_pattern_12x12_in_32x32(matrix32, pattern08, &c08, &r08);
match10 = xyzcal_find_pattern_12x12_in_32x32(matrix32, pattern10, &c10, &r10);
if (match08 > match10){
col = c08;
row = r08;
return match08;
}
col = c10;
row = r10;
return match10;
} }
/// scans area around the current head location and /// scans area around the current head location and
/// searches for the center of the calibration pin /// searches for the center of the calibration pin
bool xyzcal_scan_and_process(void){ bool xyzcal_scan_and_process(void){
//@size=44
DBG(_n("sizeof(block_buffer)=%d\n"), sizeof(block_t)*BLOCK_BUFFER_SIZE); DBG(_n("sizeof(block_buffer)=%d\n"), sizeof(block_t)*BLOCK_BUFFER_SIZE);
bool ret = false; bool ret = false;
int16_t x = _X; int16_t x = _X;
int16_t y = _Y; int16_t y = _Y;
int16_t z = _Z; const int16_t z = _Z;
uint8_t *matrix32 = (uint8_t *)block_buffer; uint8_t *matrix32 = (uint8_t *)block_buffer;
uint16_t *pattern = (uint16_t *)(matrix32 + 32 * 32); uint16_t *pattern08 = (uint16_t *)(matrix32 + 32 * 32);
uint16_t *pattern10 = (uint16_t *)(pattern08 + 12);
xyzcal_scan_pixels_32x32_Zhop(x, y, z - 72, 2400, 200, matrix32);
print_image(matrix32);
for (uint8_t i = 0; i < 12; i++){ for (uint8_t i = 0; i < 12; i++){
pattern[i] = pgm_read_word((uint16_t*)(xyzcal_point_pattern + i)); pattern08[i] = pgm_read_word((uint16_t*)(xyzcal_point_pattern_08 + i));
// DBG(_n(" pattern[%d]=%d\n"), i, pattern[i]); pattern10[i] = pgm_read_word((uint16_t*)(xyzcal_point_pattern_10 + i));
} }
xyzcal_scan_pixels_32x32_Zhop(x, y, z, 2400, 200, matrix32);
print_image(matrix32);
/// SEARCH FOR BINARY CIRCLE /// SEARCH FOR BINARY CIRCLE
uint8_t uc = 0; uint8_t uc = 0;
uint8_t ur = 0; uint8_t ur = 0;
/// max match = 132, 1/2 good = 66, 2/3 good = 88 /// max match = 132, 1/2 good = 66, 2/3 good = 88
if (xyzcal_find_pattern_12x12_in_32x32(matrix32, pattern, &uc, &ur) >= 88){ if (find_patterns(matrix32, pattern08, pattern10, uc, ur) >= 88){
/// find precise circle /// find precise circle
/// move to the center of the pattern (+5.5) /// move to the center of the pattern (+5.5)
float xf = uc + 5.5f; float xf = uc + 5.5f;
float yf = ur + 5.5f; float yf = ur + 5.5f;
float radius = 5; ///< default radius float radius = 4.5f; ///< default radius
const uint8_t iterations = 20; constexpr const uint8_t iterations = 20;
dynamic_circle(matrix32, xf, yf, radius, iterations); dynamic_circle(matrix32, xf, yf, radius, iterations);
if (ABS(xf - (uc + 5.5f)) > 3 || ABS(yf - (ur + 5.5f)) > 3 || ABS(radius - 5) > 3){ if (fabs(xf - (uc + 5.5f)) > 3 || fabs(yf - (ur + 5.5f)) > 3 || fabs(radius - 5) > 3){
DBG(_n(" [%f %f][%f] mm divergence\n"), xf - (uc + 5.5f), yf - (ur + 5.5f), radius - 5); //@size=88
DBG(_n(" [%f %f][%f] mm divergence\n"), xf - (uc + 5.5f), yf - (ur + 5.5f), radius - 5);
/// dynamic algorithm diverged, use original position instead /// dynamic algorithm diverged, use original position instead
xf = uc + 5.5f; xf = uc + 5.5f;
yf = ur + 5.5f; yf = ur + 5.5f;
@ -816,7 +952,8 @@ bool xyzcal_scan_and_process(void){
/// move to the center of area and convert to position /// move to the center of area and convert to position
xf = (float)x + (xf - 15.5f) * 64; xf = (float)x + (xf - 15.5f) * 64;
yf = (float)y + (yf - 15.5f) * 64; yf = (float)y + (yf - 15.5f) * 64;
DBG(_n(" [%f %f] mm pattern center\n"), pos_2_mm(xf), pos_2_mm(yf)); //@size=114
DBG(_n(" [%f %f] mm pattern center\n"), pos_2_mm(xf), pos_2_mm(yf));
x = round_to_i16(xf); x = round_to_i16(xf);
y = round_to_i16(yf); y = round_to_i16(yf);
xyzcal_lineXYZ_to(x, y, z, 200, 0); xyzcal_lineXYZ_to(x, y, z, 200, 0);
@ -832,22 +969,15 @@ bool xyzcal_scan_and_process(void){
bool xyzcal_find_bed_induction_sensor_point_xy(void){ bool xyzcal_find_bed_induction_sensor_point_xy(void){
bool ret = false; bool ret = false;
DBG(_n("xyzcal_find_bed_induction_sensor_point_xy x=%ld y=%ld z=%ld\n"), count_position[X_AXIS], count_position[Y_AXIS], count_position[Z_AXIS]); //@size=258
DBG(_n("xyzcal_find_bed_induction_sensor_point_xy x=%ld y=%ld z=%ld\n"), count_position[X_AXIS], count_position[Y_AXIS], count_position[Z_AXIS]);
st_synchronize(); st_synchronize();
pos_i16_t x = _X; ///< magic constant, lowers min_z after searchZ to obtain more dense data in scan
pos_i16_t y = _Y; const pos_i16_t lower_z = 72;
pos_i16_t z = _Z;
uint8_t point = xyzcal_xycoords2point(x, y);
x = pgm_read_word((uint16_t *)(xyzcal_point_xcoords + point));
y = pgm_read_word((uint16_t *)(xyzcal_point_ycoords + point));
DBG(_n("point=%d x=%d y=%d z=%d\n"), point, x, y, z);
xyzcal_meassure_enter(); xyzcal_meassure_enter();
xyzcal_lineXYZ_to(x, y, z, 200, 0);
if (xyzcal_searchZ()){ if (xyzcal_searchZ()){
int16_t z = _Z; xyzcal_lineXYZ_to(_X, _Y, _Z - lower_z, 200, 0);
xyzcal_lineXYZ_to(x, y, z, 200, 0);
ret = xyzcal_scan_and_process(); ret = xyzcal_scan_and_process();
} }
xyzcal_meassure_leave(); xyzcal_meassure_leave();

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 # 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. # it will use the default Arduino IDE folders and so can corrupt the build environment.
# #
# Version: 1.0.6-Build_33 # Version: 1.0.6-Build_36
# Change log: # 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' # 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 # 16 Jan 2019, 3d-gussner, Build_2, Added development check to modify 'Configuration.h' to prevent unwanted LCD messages that Firmware is unknown
@ -135,6 +135,7 @@
# Update exit numbers 1-13 for prepare build env 21-29 for prepare compiling 30-36 compiling # Update exit numbers 1-13 for prepare build env 21-29 for prepare compiling 30-36 compiling
# 08 Jan 2021, 3d-gussner, Comment out 'sudo' auto installation # 08 Jan 2021, 3d-gussner, Comment out 'sudo' auto installation
# Add '-?' '-h' help option # Add '-?' '-h' help option
# 27 Jan 2021, 3d-gussner, Add `-c`, `-p` and `-n` options
#### Start check if OSTYPE is supported #### Start check if OSTYPE is supported
OS_FOUND=$( command -v uname) OS_FOUND=$( command -v uname)
@ -451,7 +452,7 @@ if type git > /dev/null; then
git_available="1" git_available="1"
fi fi
while getopts v:l:d:b:o:?h flag while getopts v:l:d:b:o:c:p:n:?h flag
do do
case "${flag}" in case "${flag}" in
v) variant_flag=${OPTARG};; v) variant_flag=${OPTARG};;
@ -459,6 +460,9 @@ while getopts v:l:d:b:o:?h flag
d) devel_flag=${OPTARG};; d) devel_flag=${OPTARG};;
b) build_flag=${OPTARG};; b) build_flag=${OPTARG};;
o) output_flag=${OPTARG};; o) output_flag=${OPTARG};;
c) clean_flag=${OPTARG};;
p) prusa_flag=${OPTARG};;
n) new_build_flag=${OPTARG};;
?) help_flag=1;; ?) help_flag=1;;
h) help_flag=1;; h) help_flag=1;;
esac esac
@ -469,6 +473,9 @@ while getopts v:l:d:b:o:?h flag
#echo "build_flag: $build_flag"; #echo "build_flag: $build_flag";
#echo "output_flag: $output_flag"; #echo "output_flag: $output_flag";
#echo "help_flag: $help_flag" #echo "help_flag: $help_flag"
#echo "clean_flag: $clean_flag"
#echo "prusa_flag: $prusa_flag"
#echo "new_build_flag: $new_build_flag"
# #
# '?' 'h' argument usage and help # '?' 'h' argument usage and help
@ -482,19 +489,23 @@ echo "$(tput setaf 2)-l$(tput sgr0) Languages '$(tput setaf 2)ALL$(tput sgr0)' f
echo "$(tput setaf 2)-d$(tput sgr0) Devel build '$(tput setaf 2)GOLD$(tput sgr0)', '$(tput setaf 2)RC$(tput sgr0)', '$(tput setaf 2)BETA$(tput sgr0)', '$(tput setaf 2)ALPHA$(tput sgr0)', '$(tput setaf 2)DEBUG$(tput sgr0)', '$(tput setaf 2)DEVEL$(tput sgr0)' and '$(tput setaf 2)UNKNOWN$(tput sgr0)'" echo "$(tput setaf 2)-d$(tput sgr0) Devel build '$(tput setaf 2)GOLD$(tput sgr0)', '$(tput setaf 2)RC$(tput sgr0)', '$(tput setaf 2)BETA$(tput sgr0)', '$(tput setaf 2)ALPHA$(tput sgr0)', '$(tput setaf 2)DEBUG$(tput sgr0)', '$(tput setaf 2)DEVEL$(tput sgr0)' and '$(tput setaf 2)UNKNOWN$(tput sgr0)'"
echo "$(tput setaf 2)-b$(tput sgr0) Build/commit number '$(tput setaf 2)Auto$(tput sgr0)' needs git or a number" echo "$(tput setaf 2)-b$(tput sgr0) Build/commit number '$(tput setaf 2)Auto$(tput sgr0)' needs git or a number"
echo "$(tput setaf 2)-o$(tput sgr0) Output '$(tput setaf 2)1$(tput sgr0)' force or '$(tput setaf 2)0$(tput sgr0)' block output and delays" echo "$(tput setaf 2)-o$(tput sgr0) Output '$(tput setaf 2)1$(tput sgr0)' force or '$(tput setaf 2)0$(tput sgr0)' block output and delays"
echo "$(tput setaf 2)-c$(tput sgr0) Do not clean up lang build'$(tput setaf 2)0$(tput sgr0)' no '$(tput setaf 2)1$(tput sgr0)' yes"
echo "$(tput setaf 2)-p$(tput sgr0) Keep Configuration_prusa.h '$(tput setaf 2)0$(tput sgr0)' no '$(tput setaf 2)1$(tput sgr0)' yes"
echo "$(tput setaf 2)-n$(tput sgr0) New fresh build '$(tput setaf 2)0$(tput sgr0)' no '$(tput setaf 2)1$(tput sgr0)' yes"
echo "$(tput setaf 2)-?$(tput sgr0) Help" echo "$(tput setaf 2)-?$(tput sgr0) Help"
echo "$(tput setaf 2)-h$(tput sgr0) Help" echo "$(tput setaf 2)-h$(tput sgr0) Help"
echo echo
echo "Brief USAGE:" echo "Brief USAGE:"
echo " $(tput setaf 2)./PF-build.sh$(tput sgr0) [-v] [-l] [-d] [-b] [-o]" echo " $(tput setaf 2)./PF-build.sh$(tput sgr0) [-v] [-l] [-d] [-b] [-o] [-c] [-p] [-n]"
echo echo
echo "Example:" echo "Example:"
echo " $(tput setaf 2)./PF-build.sh -v All -l ALL -d GOLD$(tput sgr0)" echo " $(tput setaf 2)./PF-build.sh -v All -l ALL -d GOLD$(tput sgr0)"
echo " Will build all variants as multi language and final GOLD version" echo " Will build all variants as multi language and final GOLD version"
echo echo
echo " $(tput setaf 2) ./PF-build.sh -v 1_75mm_MK3S-EINSy10a-E3Dv6full.h -b Auto -l ALL -d GOLD -o 1$(tput sgr0)" echo " $(tput setaf 2) ./PF-build.sh -v 1_75mm_MK3S-EINSy10a-E3Dv6full.h -b Auto -l ALL -d GOLD -o 1 -c 1 -p 1 -n 1$(tput sgr0)"
echo " Will build MK3S multi language final GOLD firmware " echo " Will build MK3S multi language final GOLD firmware "
echo " with current commit count number and output extra information" echo " with current commit count number and output extra information,"
echo " not delete lang build temporary files, keep Configuration_prusa.h and build with new fresh build folder."
echo echo
exit exit
@ -807,6 +818,12 @@ do
if [ $OUTPUT == "1" ] ; then if [ $OUTPUT == "1" ] ; then
sleep 2 sleep 2
fi fi
#New fresh PF-Firmware-build
if [ "$new_build_flag" == "1" ]; then
rm -r -f $BUILD_PATH/* || exit 36
fi
#$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 -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 30 $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 30
echo "$(tput sgr 0)" echo "$(tput sgr 0)"
@ -874,17 +891,21 @@ do
fi fi
fi fi
# Cleanup after build # Cleanup after build
echo "$(tput setaf 3)" if [[ -z "$clean_flag" || "$clean_flag" == "0" ]]; then
./fw-clean.sh || exit 34 echo "$(tput setaf 3)"
./lang-clean.sh || exit 35 ./fw-clean.sh || exit 34
echo "$(tput sgr 0)" ./lang-clean.sh || exit 35
echo "$(tput sgr 0)"
fi
else else
echo "$(tput setaf 2)Copying English only firmware to PF-build-hex folder$(tput sgr 0)" echo "$(tput setaf 2)Copying English only firmware to PF-build-hex folder$(tput sgr 0)"
cp -f $BUILD_PATH/Firmware.ino.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex || exit 34 cp -f $BUILD_PATH/Firmware.ino.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex || exit 34
fi fi
# Cleanup Firmware # Cleanup Firmware
rm $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 36 if [[ -z "$prusa_flag" || "$prusa_flag" == "0" ]]; then
rm $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 36
fi
if find $SCRIPT_PATH/lang/ -name '*RAMBo10a*.txt' -printf 1 -quit | grep -q 1 if find $SCRIPT_PATH/lang/ -name '*RAMBo10a*.txt' -printf 1 -quit | grep -q 1
then then
rm $SCRIPT_PATH/lang/*RAMBo10a*.txt rm $SCRIPT_PATH/lang/*RAMBo10a*.txt
@ -901,6 +922,12 @@ do
then then
rm $SCRIPT_PATH/lang/not_used.txt rm $SCRIPT_PATH/lang/not_used.txt
fi fi
#New fresh PF-Firmware-build
if [ "$new_build_flag" == "1" ]; then
rm -r -f $BUILD_PATH/* || exit 36
fi
# Restore files to previous state # Restore files to previous state
sed -i -- "s/^#define FW_DEV_VERSION FW_VERSION_$DEV_STATUS/#define FW_DEV_VERSION FW_VERSION_UNKNOWN/g" $SCRIPT_PATH/Firmware/Configuration.h sed -i -- "s/^#define FW_DEV_VERSION FW_VERSION_$DEV_STATUS/#define FW_DEV_VERSION FW_VERSION_UNKNOWN/g" $SCRIPT_PATH/Firmware/Configuration.h
sed -i -- 's/^#define FW_REPOSITORY "Prusa3d"/#define FW_REPOSITORY "Unknown"/g' $SCRIPT_PATH/Firmware/Configuration.h sed -i -- 's/^#define FW_REPOSITORY "Prusa3d"/#define FW_REPOSITORY "Unknown"/g' $SCRIPT_PATH/Firmware/Configuration.h

View File

@ -103,7 +103,7 @@
#MSG_BED #MSG_BED
"Bed" "Bed"
#MSG_MENU_BELT_STATUS c=18 #MSG_BELT_STATUS c=18
"Belt status" "Belt status"
#MSG_RECOVER_PRINT c=20 r=2 #MSG_RECOVER_PRINT c=20 r=2
@ -163,7 +163,7 @@
# #
"Crash detected. Resume print?" "Crash detected. Resume print?"
# #MSG_CRASH c=7
"Crash" "Crash"
#MSG_CURRENT c=19 r=1 #MSG_CURRENT c=19 r=1
@ -187,7 +187,7 @@
#MSG_EXTRUDER_CORRECTION c=13 #MSG_EXTRUDER_CORRECTION c=13
"E-correct:" "E-correct:"
#MSG_EJECT_FILAMENT c=17 r=1 #MSG_EJECT_FILAMENT c=16
"Eject filament" "Eject filament"
#MSG_EJECTING_FILAMENT c=20 r=1 #MSG_EJECTING_FILAMENT c=20 r=1
@ -229,7 +229,7 @@
#MSG_INFO_EXTRUDER c=18 #MSG_INFO_EXTRUDER c=18
"Extruder info" "Extruder info"
#MSG_MOVE_E #MSG_EXTRUDER c=17
"Extruder" "Extruder"
# #
@ -247,14 +247,14 @@
#MSG_SELFTEST_FAN c=20 #MSG_SELFTEST_FAN c=20
"Fan test" "Fan test"
#MSG_FANS_CHECK #MSG_FANS_CHECK c=13
"Fans check" "Fans check"
#MSG_FSENSOR #MSG_FSENSOR
"Fil. sensor" "Fil. sensor"
# c=14 #MSG_FIL_RUNOUTS c=14
"Filam. runouts" "Fil. runouts "
#MSG_FILAMENT_CLEAN c=20 r=2 #MSG_FILAMENT_CLEAN c=20 r=2
"Filament extruding & with correct color?" "Filament extruding & with correct color?"
@ -343,14 +343,14 @@
#MSG_SELFTEST_CHECK_FSENSOR c=20 #MSG_SELFTEST_CHECK_FSENSOR c=20
"Checking sensors " "Checking sensors "
#MSG_SELFTEST_CHECK_X c=20 #MSG_CHECKING_X c=20
"Checking X axis " "Checking X axis"
#MSG_SELFTEST_CHECK_Y c=20 #MSG_CHECKING_Y c=20
"Checking Y axis " "Checking Y axis"
#MSG_SELFTEST_CHECK_Z c=20 #MSG_SELFTEST_CHECK_Z c=20
"Checking Z axis " "Checking Z axis"
#MSG_CHOOSE_EXTRUDER c=20 r=1 #MSG_CHOOSE_EXTRUDER c=20 r=1
"Choose extruder:" "Choose extruder:"
@ -373,19 +373,19 @@
#MSG_INSERT_FILAMENT c=20 #MSG_INSERT_FILAMENT c=20
"Insert filament" "Insert filament"
#MSG_WIZARD_FILAMENT_LOADED c=20 r=2 #MSG_FILAMENT_LOADED c=20 r=2
"Is filament loaded?" "Is filament loaded?"
#MSG_STEEL_SHEET_CHECK c=20 r=2 #MSG_STEEL_SHEET_CHECK c=20 r=2
"Is steel sheet on heatbed?" "Is steel sheet on heatbed?"
# #MSG_LAST_PRINT_FAILURES c=20
"Last print failures" "Last print failures"
# #
"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets." "If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
# #MSG_LAST_PRINT c=18
"Last print" "Last print"
#MSG_SELFTEST_EXTRUDER_FAN c=20 #MSG_SELFTEST_EXTRUDER_FAN c=20
@ -436,7 +436,7 @@
#MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60 #MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60
"Measuring reference height of calibration point" "Measuring reference height of calibration point"
#MSG_MESH_BED_LEVELING #MSG_MESH_BED_LEVELING c=18
"Mesh Bed Leveling" "Mesh Bed Leveling"
#MSG_MMU_OK_RESUMING_POSITION c=20 r=4 #MSG_MMU_OK_RESUMING_POSITION c=20 r=4
@ -448,13 +448,13 @@
# #
"Measured skew" "Measured skew"
# #MSG_MMU_FAILS c=14
"MMU fails" "MMU fails"
# #
"MMU load failed " "MMU load failed "
# #MSG_MMU_LOAD_FAILS c=14
"MMU load fails" "MMU load fails"
#MSG_MMU_OK_RESUMING c=20 r=4 #MSG_MMU_OK_RESUMING c=20 r=4
@ -625,7 +625,7 @@
#MSG_FS_PAUSE c=5 #MSG_FS_PAUSE c=5
"Pause" "Pause"
# #MSG_POWER_FAILURES c=14
"Power failures" "Power failures"
#MSG_PRINT_ABORTED c=20 #MSG_PRINT_ABORTED c=20
@ -691,10 +691,10 @@
#MSG_CALIBRATE_BED_RESET #MSG_CALIBRATE_BED_RESET
"Reset XYZ calibr." "Reset XYZ calibr."
#MSG_BED_CORRECTION_RESET #MSG_RESET c=14
"Reset" "Reset"
#MSG_RESUME_PRINT #MSG_RESUME_PRINT c=18
"Resume print" "Resume print"
#MSG_RESUMING_PRINT c=20 #MSG_RESUMING_PRINT c=20
@ -871,7 +871,7 @@
# #
"Unload" "Unload"
# #MSG_TOTAL_FAILURES c=20
"Total failures" "Total failures"
# #
@ -886,7 +886,7 @@
#MSG_UNLOADING_FILAMENT c=20 r=1 #MSG_UNLOADING_FILAMENT c=20 r=1
"Unloading filament" "Unloading filament"
# #MSG_TOTAL c=6
"Total" "Total"
#MSG_USED c=19 r=1 #MSG_USED c=19 r=1
@ -1012,7 +1012,7 @@
#MSG_WARN #MSG_WARN
"Warn" "Warn"
# #MSG_HW_SETUP c=18
"HW Setup" "HW Setup"
# #
@ -1024,9 +1024,6 @@
#MSG_MESH #MSG_MESH
"Mesh" "Mesh"
#
"Mesh bed leveling"
# #
"MK3S firmware detected on MK3 printer" "MK3S firmware detected on MK3 printer"
@ -1048,10 +1045,10 @@
# #
"G-code sliced for a different level. Please re-slice the model again. Print cancelled." "G-code sliced for a different level. Please re-slice the model again. Print cancelled."
# #MSG_GCODE_DIFF_PRINTER_CONTINUE c=20 r=5
"G-code sliced for a different printer type. Continue?" "G-code sliced for a different printer type. Continue?"
# #MSG_GCODE_DIFF_PRINTER_CANCELLED c=20 r=6
"G-code sliced for a different printer type. Please re-slice the model again. Print cancelled." "G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."
# #
@ -1093,7 +1090,7 @@
#MSG_SOUND_BLIND #MSG_SOUND_BLIND
"Assist" "Assist"
# c=18 #MSG_STEEL_SHEET c=18
"Steel sheets" "Steel sheets"
#MSG_Z_CORRECTION c=13 #MSG_Z_CORRECTION c=13

View File

@ -138,7 +138,7 @@
"Bed" "Bed"
"Podlozka" "Podlozka"
#MSG_MENU_BELT_STATUS c=18 #MSG_BELT_STATUS c=18
"Belt status" "Belt status"
"Stav remenu" "Stav remenu"
@ -218,7 +218,7 @@
"Crash detected. Resume print?" "Crash detected. Resume print?"
"Detekovan naraz. Obnovit tisk?" "Detekovan naraz. Obnovit tisk?"
# #MSG_CRASH c=7
"Crash" "Crash"
"Naraz" "Naraz"
@ -250,9 +250,9 @@
"E-correct:" "E-correct:"
"Korekce E:" "Korekce E:"
#MSG_EJECT_FILAMENT c=17 r=1 #MSG_EJECT_FILAMENT c=16
"Eject filament" "Eject filament"
"Vysunout filament" "Vysunout fil."
#MSG_EJECTING_FILAMENT c=20 r=1 #MSG_EJECTING_FILAMENT c=20 r=1
"Ejecting filament" "Ejecting filament"
@ -306,7 +306,7 @@
"Extruder info" "Extruder info"
"\x00" "\x00"
#MSG_MOVE_E #MSG_EXTRUDER c=17
"Extruder" "Extruder"
"\x00" "\x00"
@ -330,7 +330,7 @@
"Fan test" "Fan test"
"Test ventilatoru" "Test ventilatoru"
#MSG_FANS_CHECK #MSG_FANS_CHECK c=13
"Fans check" "Fans check"
"Kontr. vent." "Kontr. vent."
@ -338,8 +338,8 @@
"Fil. sensor" "Fil. sensor"
"Fil. senzor" "Fil. senzor"
# c=14 #MSG_FIL_RUNOUTS c=14
"Filam. runouts" "Fil. runouts "
"Vypadky filam." "Vypadky filam."
#MSG_FILAMENT_CLEAN c=20 r=2 #MSG_FILAMENT_CLEAN c=20 r=2
@ -458,16 +458,16 @@
"Checking sensors " "Checking sensors "
"Kontrola senzoru" "Kontrola senzoru"
#MSG_SELFTEST_CHECK_X c=20 #MSG_CHECKING_X c=20
"Checking X axis " "Checking X axis"
"Kontrola osy X" "Kontrola osy X"
#MSG_SELFTEST_CHECK_Y c=20 #MSG_CHECKING_Y c=20
"Checking Y axis " "Checking Y axis"
"Kontrola osy Y" "Kontrola osy Y"
#MSG_SELFTEST_CHECK_Z c=20 #MSG_SELFTEST_CHECK_Z c=20
"Checking Z axis " "Checking Z axis"
"Kontrola osy Z" "Kontrola osy Z"
#MSG_CHOOSE_EXTRUDER c=20 r=1 #MSG_CHOOSE_EXTRUDER c=20 r=1
@ -498,7 +498,7 @@
"Insert filament" "Insert filament"
"Vlozte filament" "Vlozte filament"
#MSG_WIZARD_FILAMENT_LOADED c=20 r=2 #MSG_FILAMENT_LOADED c=20 r=2
"Is filament loaded?" "Is filament loaded?"
"Je filament zaveden?" "Je filament zaveden?"
@ -506,7 +506,7 @@
"Is steel sheet on heatbed?" "Is steel sheet on heatbed?"
"Je tiskovy plat na podlozce?" "Je tiskovy plat na podlozce?"
# #MSG_LAST_PRINT_FAILURES c=20
"Last print failures" "Last print failures"
"Selhani posl. tisku" "Selhani posl. tisku"
@ -514,7 +514,7 @@
"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets." "If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
"Mate-li vice tiskovych platu, kalibrujte je v menu Nastaveni - HW nastaveni - Tiskove platy" "Mate-li vice tiskovych platu, kalibrujte je v menu Nastaveni - HW nastaveni - Tiskove platy"
# #MSG_LAST_PRINT c=18
"Last print" "Last print"
"Posledni tisk" "Posledni tisk"
@ -582,7 +582,7 @@
"Measuring reference height of calibration point" "Measuring reference height of calibration point"
"Merim referencni vysku kalibracniho bodu" "Merim referencni vysku kalibracniho bodu"
#MSG_MESH_BED_LEVELING #MSG_MESH_BED_LEVELING c=18
"Mesh Bed Leveling" "Mesh Bed Leveling"
"\x00" "\x00"
@ -598,7 +598,7 @@
"Measured skew" "Measured skew"
"Merene zkoseni" "Merene zkoseni"
# #MSG_MMU_FAILS c=14
"MMU fails" "MMU fails"
"Selhani MMU" "Selhani MMU"
@ -606,7 +606,7 @@
"MMU load failed " "MMU load failed "
"Zavedeni MMU selhalo" "Zavedeni MMU selhalo"
# #MSG_MMU_LOAD_FAILS c=14
"MMU load fails" "MMU load fails"
"MMU selhani zavadeni" "MMU selhani zavadeni"
@ -834,7 +834,7 @@
"Pause" "Pause"
"\x00" "\x00"
# #MSG_POWER_FAILURES c=14
"Power failures" "Power failures"
"Vypadky proudu" "Vypadky proudu"
@ -922,11 +922,11 @@
"Reset XYZ calibr." "Reset XYZ calibr."
"Reset XYZ kalibr." "Reset XYZ kalibr."
#MSG_BED_CORRECTION_RESET #MSG_RESET c=14
"Reset" "Reset"
"\x00" "\x00"
#MSG_RESUME_PRINT #MSG_RESUME_PRINT c=18
"Resume print" "Resume print"
"Pokracovat" "Pokracovat"
@ -1162,7 +1162,7 @@
"Unload" "Unload"
"Vysunout" "Vysunout"
# #MSG_TOTAL_FAILURES c=20
"Total failures" "Total failures"
"Celkem selhani" "Celkem selhani"
@ -1182,7 +1182,7 @@
"Unloading filament" "Unloading filament"
"Vysouvam filament" "Vysouvam filament"
# #MSG_TOTAL c=6
"Total" "Total"
"Celkem" "Celkem"
@ -1350,7 +1350,7 @@
"Warn" "Warn"
"Varovat" "Varovat"
# #MSG_HW_SETUP c=18
"HW Setup" "HW Setup"
"HW nastaveni" "HW nastaveni"
@ -1366,10 +1366,6 @@
"Mesh" "Mesh"
"\x00" "\x00"
#
"Mesh bed leveling"
"Mesh Bed Leveling"
# #
"MK3S firmware detected on MK3 printer" "MK3S firmware detected on MK3 printer"
"MK3S firmware detekovan na tiskarne MK3" "MK3S firmware detekovan na tiskarne MK3"
@ -1398,11 +1394,11 @@
"G-code sliced for a different level. Please re-slice the model again. Print cancelled." "G-code sliced for a different level. Please re-slice the model again. Print cancelled."
"\x00" "\x00"
# #MSG_GCODE_DIFF_PRINTER_CONTINUE c=20 r=5
"G-code sliced for a different printer type. Continue?" "G-code sliced for a different printer type. Continue?"
"G-code je pripraven pro jiny typ tiskarny. Pokracovat?" "G-code je pripraven pro jiny typ tiskarny. Pokracovat?"
# #MSG_GCODE_DIFF_PRINTER_CANCELLED c=20 r=6
"G-code sliced for a different printer type. Please re-slice the model again. Print cancelled." "G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."
"G-code je pripraven pro jiny typ tiskarny. Prosim preslicujte model znovu. Tisk zrusen." "G-code je pripraven pro jiny typ tiskarny. Prosim preslicujte model znovu. Tisk zrusen."
@ -1458,7 +1454,7 @@
"Assist" "Assist"
"Asist." "Asist."
# c=18 #MSG_STEEL_SHEET c=18
"Steel sheets" "Steel sheets"
"Tiskove platy" "Tiskove platy"

View File

@ -138,7 +138,7 @@
"Bed" "Bed"
"Bett" "Bett"
#MSG_MENU_BELT_STATUS c=18 #MSG_BELT_STATUS c=18
"Belt status" "Belt status"
"Gurtstatus" "Gurtstatus"
@ -218,7 +218,7 @@
"Crash detected. Resume print?" "Crash detected. Resume print?"
"Crash erkannt. Druck fortfuehren?" "Crash erkannt. Druck fortfuehren?"
# #MSG_CRASH c=7
"Crash" "Crash"
"\x00" "\x00"
@ -250,7 +250,7 @@
"E-correct:" "E-correct:"
"E-Korrektur:" "E-Korrektur:"
#MSG_EJECT_FILAMENT c=17 r=1 #MSG_EJECT_FILAMENT c=16
"Eject filament" "Eject filament"
"Filamentauswurf" "Filamentauswurf"
@ -306,7 +306,7 @@
"Extruder info" "Extruder info"
"Extruder Info" "Extruder Info"
#MSG_MOVE_E #MSG_EXTRUDER c=17
"Extruder" "Extruder"
"\x00" "\x00"
@ -330,7 +330,7 @@
"Fan test" "Fan test"
"Lueftertest" "Lueftertest"
#MSG_FANS_CHECK #MSG_FANS_CHECK c=13
"Fans check" "Fans check"
"Luefter Chk." "Luefter Chk."
@ -338,9 +338,9 @@
"Fil. sensor" "Fil. sensor"
"Fil. Sensor" "Fil. Sensor"
# c=14 #MSG_FIL_RUNOUTS c=14
"Filam. runouts" "Fil. runouts "
"Filam. Maengel" "Fil. Maengel "
#MSG_FILAMENT_CLEAN c=20 r=2 #MSG_FILAMENT_CLEAN c=20 r=2
"Filament extruding & with correct color?" "Filament extruding & with correct color?"
@ -458,17 +458,17 @@
"Checking sensors " "Checking sensors "
"Pruefe Sensoren " "Pruefe Sensoren "
#MSG_SELFTEST_CHECK_X c=20 #MSG_CHECKING_X c=20
"Checking X axis " "Checking X axis"
"Pruefe X Achse " "Pruefe X Achse"
#MSG_SELFTEST_CHECK_Y c=20 #MSG_CHECKING_Y c=20
"Checking Y axis " "Checking Y axis"
"Pruefe Y Achse " "Pruefe Y Achse"
#MSG_SELFTEST_CHECK_Z c=20 #MSG_SELFTEST_CHECK_Z c=20
"Checking Z axis " "Checking Z axis"
"Pruefe Z Achse " "Pruefe Z Achse"
#MSG_CHOOSE_EXTRUDER c=20 r=1 #MSG_CHOOSE_EXTRUDER c=20 r=1
"Choose extruder:" "Choose extruder:"
@ -498,7 +498,7 @@
"Insert filament" "Insert filament"
"Filament einlegen" "Filament einlegen"
#MSG_WIZARD_FILAMENT_LOADED c=20 r=2 #MSG_FILAMENT_LOADED c=20 r=2
"Is filament loaded?" "Is filament loaded?"
"Ist das Filament geladen?" "Ist das Filament geladen?"
@ -506,7 +506,7 @@
"Is steel sheet on heatbed?" "Is steel sheet on heatbed?"
"Liegt das Stahlblech auf dem Heizbett?" "Liegt das Stahlblech auf dem Heizbett?"
# #MSG_LAST_PRINT_FAILURES c=20
"Last print failures" "Last print failures"
"Letzte Druckfehler" "Letzte Druckfehler"
@ -514,7 +514,7 @@
"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets." "If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
"Wenn Sie zusaetzliche Stahlbleche haben, kalibrieren Sie deren Voreinstellungen unter Einstellungen - HW Setup - Stahlbleche." "Wenn Sie zusaetzliche Stahlbleche haben, kalibrieren Sie deren Voreinstellungen unter Einstellungen - HW Setup - Stahlbleche."
# #MSG_LAST_PRINT c=18
"Last print" "Last print"
"Letzter Druck" "Letzter Druck"
@ -582,7 +582,7 @@
"Measuring reference height of calibration point" "Measuring reference height of calibration point"
"Messen der Referenzhoehe des Kalibrierpunktes" "Messen der Referenzhoehe des Kalibrierpunktes"
#MSG_MESH_BED_LEVELING #MSG_MESH_BED_LEVELING c=18
"Mesh Bed Leveling" "Mesh Bed Leveling"
"MeshBett Ausgleich" "MeshBett Ausgleich"
@ -598,7 +598,7 @@
"Measured skew" "Measured skew"
"Schraeglauf" "Schraeglauf"
# #MSG_MMU_FAILS c=14
"MMU fails" "MMU fails"
"MMU Fehler" "MMU Fehler"
@ -606,7 +606,7 @@
"MMU load failed " "MMU load failed "
"MMU Ladefehler" "MMU Ladefehler"
# #MSG_MMU_LOAD_FAILS c=14
"MMU load fails" "MMU load fails"
"MMU Ladefehler" "MMU Ladefehler"
@ -834,7 +834,7 @@
"Pause" "Pause"
"\x00" "\x00"
# #MSG_POWER_FAILURES c=14
"Power failures" "Power failures"
"Netzfehler" "Netzfehler"
@ -922,11 +922,11 @@
"Reset XYZ calibr." "Reset XYZ calibr."
"Reset XYZ Kalibr." "Reset XYZ Kalibr."
#MSG_BED_CORRECTION_RESET #MSG_RESET c=14
"Reset" "Reset"
"Ruecksetzen" "Ruecksetzen"
#MSG_RESUME_PRINT #MSG_RESUME_PRINT c=18
"Resume print" "Resume print"
"Druck fortsetzen" "Druck fortsetzen"
@ -1162,7 +1162,7 @@
"Unload" "Unload"
"Entladen" "Entladen"
# #MSG_TOTAL_FAILURES c=20
"Total failures" "Total failures"
"Gesamte Fehler" "Gesamte Fehler"
@ -1182,7 +1182,7 @@
"Unloading filament" "Unloading filament"
"Filament auswerfen" "Filament auswerfen"
# #MSG_TOTAL c=6
"Total" "Total"
"Gesamt" "Gesamt"
@ -1350,7 +1350,7 @@
"Warn" "Warn"
"Warnen" "Warnen"
# #MSG_HW_SETUP c=18
"HW Setup" "HW Setup"
"HW Einstellungen" "HW Einstellungen"
@ -1366,10 +1366,6 @@
"Mesh" "Mesh"
"Gitter" "Gitter"
#
"Mesh bed leveling"
"MeshBett Ausgleich"
# #
"MK3S firmware detected on MK3 printer" "MK3S firmware detected on MK3 printer"
"MK3S-Firmware auf MK3-Drucker erkannt" "MK3S-Firmware auf MK3-Drucker erkannt"
@ -1398,11 +1394,11 @@
"G-code sliced for a different level. Please re-slice the model again. Print cancelled." "G-code sliced for a different level. Please re-slice the model again. Print cancelled."
"G-Code ist fuer einen anderen Level geslict. Bitte slicen Sie das Modell erneut. Druck abgebrochen." "G-Code ist fuer einen anderen Level geslict. Bitte slicen Sie das Modell erneut. Druck abgebrochen."
# #MSG_GCODE_DIFF_PRINTER_CONTINUE c=20 r=5
"G-code sliced for a different printer type. Continue?" "G-code sliced for a different printer type. Continue?"
"G-Code ist fuer einen anderen Drucker geslict. Fortfahren?" "G-Code ist fuer einen anderen Drucker geslict. Fortfahren?"
# #MSG_GCODE_DIFF_PRINTER_CANCELLED c=20 r=6
"G-code sliced for a different printer type. Please re-slice the model again. Print cancelled." "G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."
"G-Code ist fuer einen anderen Drucker geslict. Bitte slicen Sie das Modell erneut. Druck abgebrochen." "G-Code ist fuer einen anderen Drucker geslict. Bitte slicen Sie das Modell erneut. Druck abgebrochen."
@ -1458,7 +1454,7 @@
"Assist" "Assist"
"\x00" "\x00"
# c=18 #MSG_STEEL_SHEET c=18
"Steel sheets" "Steel sheets"
"Stahlbleche" "Stahlbleche"

View File

@ -138,7 +138,7 @@
"Bed" "Bed"
"Base" "Base"
#MSG_MENU_BELT_STATUS c=18 #MSG_BELT_STATUS c=18
"Belt status" "Belt status"
"Estado de correa" "Estado de correa"
@ -218,7 +218,7 @@
"Crash detected. Resume print?" "Crash detected. Resume print?"
"Choque detectado. Continuar impresion?" "Choque detectado. Continuar impresion?"
# #MSG_CRASH c=7
"Crash" "Crash"
"Choque" "Choque"
@ -250,7 +250,7 @@
"E-correct:" "E-correct:"
"Corregir-E:" "Corregir-E:"
#MSG_EJECT_FILAMENT c=17 r=1 #MSG_EJECT_FILAMENT c=16
"Eject filament" "Eject filament"
"Expulsar fil." "Expulsar fil."
@ -306,7 +306,7 @@
"Extruder info" "Extruder info"
"Info. del extrusor" "Info. del extrusor"
#MSG_MOVE_E #MSG_EXTRUDER c=17
"Extruder" "Extruder"
"Extruir" "Extruir"
@ -330,7 +330,7 @@
"Fan test" "Fan test"
"Test ventiladores" "Test ventiladores"
#MSG_FANS_CHECK #MSG_FANS_CHECK c=13
"Fans check" "Fans check"
"Comprob.vent" "Comprob.vent"
@ -338,9 +338,9 @@
"Fil. sensor" "Fil. sensor"
"Sensor Fil." "Sensor Fil."
# c=14 #MSG_FIL_RUNOUTS c=14
"Filam. runouts" "Fil. runouts "
"Filam. acabado" "Fil. acabado "
#MSG_FILAMENT_CLEAN c=20 r=2 #MSG_FILAMENT_CLEAN c=20 r=2
"Filament extruding & with correct color?" "Filament extruding & with correct color?"
@ -458,16 +458,16 @@
"Checking sensors " "Checking sensors "
"Comprobando sensores" "Comprobando sensores"
#MSG_SELFTEST_CHECK_X c=20 #MSG_CHECKING_X c=20
"Checking X axis " "Checking X axis"
"Control sensor X" "Control sensor X"
#MSG_SELFTEST_CHECK_Y c=20 #MSG_CHECKING_Y c=20
"Checking Y axis " "Checking Y axis"
"Control sensor Y" "Control sensor Y"
#MSG_SELFTEST_CHECK_Z c=20 #MSG_SELFTEST_CHECK_Z c=20
"Checking Z axis " "Checking Z axis"
"Control sensor Z" "Control sensor Z"
#MSG_CHOOSE_EXTRUDER c=20 r=1 #MSG_CHOOSE_EXTRUDER c=20 r=1
@ -498,7 +498,7 @@
"Insert filament" "Insert filament"
"Introducir filamento" "Introducir filamento"
#MSG_WIZARD_FILAMENT_LOADED c=20 r=2 #MSG_FILAMENT_LOADED c=20 r=2
"Is filament loaded?" "Is filament loaded?"
"Esta el filamento cargado?" "Esta el filamento cargado?"
@ -506,15 +506,15 @@
"Is steel sheet on heatbed?" "Is steel sheet on heatbed?"
"?Esta colocada la lamina sobre la base" "?Esta colocada la lamina sobre la base"
# #MSG_LAST_PRINT_FAILURES c=20
"Last print failures" "Last print failures"
"Ultimas impresiones fallidas" "Ultimos imp. fallos"
# #
"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets." "If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
"Si tienes planchas de acero adicionales, calibra sus ajustes en Ajustes - Ajustes HW - Planchas acero." "Si tienes planchas de acero adicionales, calibra sus ajustes en Ajustes - Ajustes HW - Planchas acero."
# #MSG_LAST_PRINT c=18
"Last print" "Last print"
"Ultima impresion" "Ultima impresion"
@ -582,9 +582,9 @@
"Measuring reference height of calibration point" "Measuring reference height of calibration point"
"Midiendo altura del punto de calibracion" "Midiendo altura del punto de calibracion"
#MSG_MESH_BED_LEVELING #MSG_MESH_BED_LEVELING c=18
"Mesh Bed Leveling" "Mesh Bed Leveling"
"Nivelacion Mesh Level" "Nivela. Mesh Level"
#MSG_MMU_OK_RESUMING_POSITION c=20 r=4 #MSG_MMU_OK_RESUMING_POSITION c=20 r=4
"MMU OK. Resuming position..." "MMU OK. Resuming position..."
@ -598,7 +598,7 @@
"Measured skew" "Measured skew"
"Desviacion med:" "Desviacion med:"
# #MSG_MMU_FAILS c=14
"MMU fails" "MMU fails"
"Fallos MMU" "Fallos MMU"
@ -606,7 +606,7 @@
"MMU load failed " "MMU load failed "
"Carga MMU fallida" "Carga MMU fallida"
# #MSG_MMU_LOAD_FAILS c=14
"MMU load fails" "MMU load fails"
"Carga MMU falla" "Carga MMU falla"
@ -834,7 +834,7 @@
"Pause" "Pause"
"Pausa" "Pausa"
# #MSG_POWER_FAILURES c=14
"Power failures" "Power failures"
"Cortes de energia" "Cortes de energia"
@ -922,11 +922,11 @@
"Reset XYZ calibr." "Reset XYZ calibr."
"\x00" "\x00"
#MSG_BED_CORRECTION_RESET #MSG_RESET c=14
"Reset" "Reset"
"\x00" "\x00"
#MSG_RESUME_PRINT #MSG_RESUME_PRINT c=18
"Resume print" "Resume print"
"Reanudar impres." "Reanudar impres."
@ -1162,7 +1162,7 @@
"Unload" "Unload"
"Descargar" "Descargar"
# #MSG_TOTAL_FAILURES c=20
"Total failures" "Total failures"
"Fallos totales" "Fallos totales"
@ -1182,7 +1182,7 @@
"Unloading filament" "Unloading filament"
"Soltando filamento" "Soltando filamento"
# #MSG_TOTAL c=6
"Total" "Total"
"\x00" "\x00"
@ -1350,7 +1350,7 @@
"Warn" "Warn"
"Aviso" "Aviso"
# #MSG_HW_SETUP c=18
"HW Setup" "HW Setup"
"Configuracion HW" "Configuracion HW"
@ -1366,10 +1366,6 @@
"Mesh" "Mesh"
"Malla" "Malla"
#
"Mesh bed leveling"
"Nivelacion Malla Base"
# #
"MK3S firmware detected on MK3 printer" "MK3S firmware detected on MK3 printer"
"Firmware MK3S detectado en impresora MK3" "Firmware MK3S detectado en impresora MK3"
@ -1398,11 +1394,11 @@
"G-code sliced for a different level. Please re-slice the model again. Print cancelled." "G-code sliced for a different level. Please re-slice the model again. Print cancelled."
"Codigo G laminado para un nivel diferente. Por favor relamina el modelo de nuevo. Impresion cancelada." "Codigo G laminado para un nivel diferente. Por favor relamina el modelo de nuevo. Impresion cancelada."
# #MSG_GCODE_DIFF_PRINTER_CONTINUE c=20 r=5
"G-code sliced for a different printer type. Continue?" "G-code sliced for a different printer type. Continue?"
"Codigo G laminado para un tipo de impresora diferente. ?Continuar?" "Codigo G laminado para un tipo de impresora diferente. ?Continuar?"
# #MSG_GCODE_DIFF_PRINTER_CANCELLED c=20 r=6
"G-code sliced for a different printer type. Please re-slice the model again. Print cancelled." "G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."
"Codigo G laminado para una impresora diferente. Por favor relamina el modelo de nuevo. Impresion cancelada." "Codigo G laminado para una impresora diferente. Por favor relamina el modelo de nuevo. Impresion cancelada."
@ -1458,7 +1454,7 @@
"Assist" "Assist"
"Asistido" "Asistido"
# c=18 #MSG_STEEL_SHEET c=18
"Steel sheets" "Steel sheets"
"Lamina de acero" "Lamina de acero"

View File

@ -138,7 +138,7 @@
"Bed" "Bed"
"Lit" "Lit"
#MSG_MENU_BELT_STATUS c=18 #MSG_BELT_STATUS c=18
"Belt status" "Belt status"
"Statut courroie" "Statut courroie"
@ -218,7 +218,7 @@
"Crash detected. Resume print?" "Crash detected. Resume print?"
"Crash detecte. Poursuivre l'impression?" "Crash detecte. Poursuivre l'impression?"
# #MSG_CRASH c=7
"Crash" "Crash"
"\x00" "\x00"
@ -250,7 +250,7 @@
"E-correct:" "E-correct:"
"Correct-E:" "Correct-E:"
#MSG_EJECT_FILAMENT c=17 r=1 #MSG_EJECT_FILAMENT c=16
"Eject filament" "Eject filament"
"Remonter le fil." "Remonter le fil."
@ -306,7 +306,7 @@
"Extruder info" "Extruder info"
"Infos extrudeur" "Infos extrudeur"
#MSG_MOVE_E #MSG_EXTRUDER c=17
"Extruder" "Extruder"
"Extrudeur" "Extrudeur"
@ -330,7 +330,7 @@
"Fan test" "Fan test"
"Test du ventilateur" "Test du ventilateur"
#MSG_FANS_CHECK #MSG_FANS_CHECK c=13
"Fans check" "Fans check"
"Verif vent." "Verif vent."
@ -338,9 +338,9 @@
"Fil. sensor" "Fil. sensor"
"Capteur Fil." "Capteur Fil."
# c=14 #MSG_FIL_RUNOUTS c=14
"Filam. runouts" "Fil. runouts "
"Fins filament" "Fins filament "
#MSG_FILAMENT_CLEAN c=20 r=2 #MSG_FILAMENT_CLEAN c=20 r=2
"Filament extruding & with correct color?" "Filament extruding & with correct color?"
@ -458,16 +458,16 @@
"Checking sensors " "Checking sensors "
"Verif. des capteurs" "Verif. des capteurs"
#MSG_SELFTEST_CHECK_X c=20 #MSG_CHECKING_X c=20
"Checking X axis " "Checking X axis"
"Verification axe X" "Verification axe X"
#MSG_SELFTEST_CHECK_Y c=20 #MSG_CHECKING_Y c=20
"Checking Y axis " "Checking Y axis"
"Verification axe Y" "Verification axe Y"
#MSG_SELFTEST_CHECK_Z c=20 #MSG_SELFTEST_CHECK_Z c=20
"Checking Z axis " "Checking Z axis"
"Verification axe Z" "Verification axe Z"
#MSG_CHOOSE_EXTRUDER c=20 r=1 #MSG_CHOOSE_EXTRUDER c=20 r=1
@ -498,7 +498,7 @@
"Insert filament" "Insert filament"
"Inserez le filament" "Inserez le filament"
#MSG_WIZARD_FILAMENT_LOADED c=20 r=2 #MSG_FILAMENT_LOADED c=20 r=2
"Is filament loaded?" "Is filament loaded?"
"Fil. est-il charge?" "Fil. est-il charge?"
@ -506,7 +506,7 @@
"Is steel sheet on heatbed?" "Is steel sheet on heatbed?"
"Est la plaque sur le plat. chauffant?" "Est la plaque sur le plat. chauffant?"
# #MSG_LAST_PRINT_FAILURES c=20
"Last print failures" "Last print failures"
"Echecs derniere imp." "Echecs derniere imp."
@ -514,7 +514,7 @@
"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets." "If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
"Si vous avez d'autres feuilles d'acier, calibrez leurs pre-reglages dans Reglages - Config HW - Plaque en acier." "Si vous avez d'autres feuilles d'acier, calibrez leurs pre-reglages dans Reglages - Config HW - Plaque en acier."
# #MSG_LAST_PRINT c=18
"Last print" "Last print"
"Derniere impres." "Derniere impres."
@ -582,7 +582,7 @@
"Measuring reference height of calibration point" "Measuring reference height of calibration point"
"Je mesure la hauteur de reference du point de calibrage" "Je mesure la hauteur de reference du point de calibrage"
#MSG_MESH_BED_LEVELING #MSG_MESH_BED_LEVELING c=18
"Mesh Bed Leveling" "Mesh Bed Leveling"
"\x00" "\x00"
@ -598,7 +598,7 @@
"Measured skew" "Measured skew"
"Deviat.mesuree" "Deviat.mesuree"
# #MSG_MMU_FAILS c=14
"MMU fails" "MMU fails"
"Echecs MMU" "Echecs MMU"
@ -606,7 +606,7 @@
"MMU load failed " "MMU load failed "
"Echec chargement MMU" "Echec chargement MMU"
# #MSG_MMU_LOAD_FAILS c=14
"MMU load fails" "MMU load fails"
"Echecs charg. MMU" "Echecs charg. MMU"
@ -834,7 +834,7 @@
"Pause" "Pause"
"\x00" "\x00"
# #MSG_POWER_FAILURES c=14
"Power failures" "Power failures"
"Coup.de courant" "Coup.de courant"
@ -922,11 +922,11 @@
"Reset XYZ calibr." "Reset XYZ calibr."
"Reinit. calib. XYZ" "Reinit. calib. XYZ"
#MSG_BED_CORRECTION_RESET #MSG_RESET c=14
"Reset" "Reset"
"Reinitialiser" "Reinitialiser"
#MSG_RESUME_PRINT #MSG_RESUME_PRINT c=18
"Resume print" "Resume print"
"Reprendre impression" "Reprendre impression"
@ -1162,7 +1162,7 @@
"Unload" "Unload"
"Decharger" "Decharger"
# #MSG_TOTAL_FAILURES c=20
"Total failures" "Total failures"
"Total des echecs" "Total des echecs"
@ -1182,7 +1182,7 @@
"Unloading filament" "Unloading filament"
"Dechargement fil." "Dechargement fil."
# #MSG_TOTAL c=6
"Total" "Total"
"Totale" "Totale"
@ -1350,7 +1350,7 @@
"Warn" "Warn"
"Avert" "Avert"
# #MSG_HW_SETUP c=18
"HW Setup" "HW Setup"
"Config HW" "Config HW"
@ -1366,10 +1366,6 @@
"Mesh" "Mesh"
"\x00" "\x00"
#
"Mesh bed leveling"
"\x00"
# #
"MK3S firmware detected on MK3 printer" "MK3S firmware detected on MK3 printer"
"Firmware MK3S detecte sur imprimante MK3" "Firmware MK3S detecte sur imprimante MK3"
@ -1398,11 +1394,11 @@
"G-code sliced for a different level. Please re-slice the model again. Print cancelled." "G-code sliced for a different level. Please re-slice the model again. Print cancelled."
"Le G-code a ete prepare pour un niveau different. Veuillez decouper le modele a nouveau. L'impression a ete annulee." "Le G-code a ete prepare pour un niveau different. Veuillez decouper le modele a nouveau. L'impression a ete annulee."
# #MSG_GCODE_DIFF_PRINTER_CONTINUE c=20 r=5
"G-code sliced for a different printer type. Continue?" "G-code sliced for a different printer type. Continue?"
"Le G-code a ete prepare pour une autre version de l'imprimante. Continuer?" "Le G-code a ete prepare pour une autre version de l'imprimante. Continuer?"
# #MSG_GCODE_DIFF_PRINTER_CANCELLED c=20 r=6
"G-code sliced for a different printer type. Please re-slice the model again. Print cancelled." "G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."
"Le G-code a ete prepare pour une autre version de l'imprimante. Veuillez decouper le modele a nouveau. L'impression a ete annulee." "Le G-code a ete prepare pour une autre version de l'imprimante. Veuillez decouper le modele a nouveau. L'impression a ete annulee."
@ -1458,7 +1454,7 @@
"Assist" "Assist"
"\x00" "\x00"
# c=18 #MSG_STEEL_SHEET c=18
"Steel sheets" "Steel sheets"
"Plaques en acier" "Plaques en acier"

View File

@ -138,7 +138,7 @@
"Bed" "Bed"
"Piano" "Piano"
#MSG_MENU_BELT_STATUS c=18 #MSG_BELT_STATUS c=18
"Belt status" "Belt status"
"Stato cinghie" "Stato cinghie"
@ -218,7 +218,7 @@
"Crash detected. Resume print?" "Crash detected. Resume print?"
"Scontro rilevato. Riprendere la stampa?" "Scontro rilevato. Riprendere la stampa?"
# #MSG_CRASH c=7
"Crash" "Crash"
"Impatto" "Impatto"
@ -250,9 +250,9 @@
"E-correct:" "E-correct:"
"Correzione-E:" "Correzione-E:"
#MSG_EJECT_FILAMENT c=17 r=1 #MSG_EJECT_FILAMENT c=16
"Eject filament" "Eject filament"
"Espelli filamento" "Espelli fil."
#MSG_EJECTING_FILAMENT c=20 r=1 #MSG_EJECTING_FILAMENT c=20 r=1
"Ejecting filament" "Ejecting filament"
@ -306,7 +306,7 @@
"Extruder info" "Extruder info"
"Info estrusore" "Info estrusore"
#MSG_MOVE_E #MSG_EXTRUDER c=17
"Extruder" "Extruder"
"Estrusore" "Estrusore"
@ -330,7 +330,7 @@
"Fan test" "Fan test"
"Test ventola" "Test ventola"
#MSG_FANS_CHECK #MSG_FANS_CHECK c=13
"Fans check" "Fans check"
"Control.vent" "Control.vent"
@ -338,9 +338,9 @@
"Fil. sensor" "Fil. sensor"
"Sensore fil." "Sensore fil."
# c=14 #MSG_FIL_RUNOUTS c=14
"Filam. runouts" "Fil. runouts "
"Fil. esauriti" "Fil. esauriti "
#MSG_FILAMENT_CLEAN c=20 r=2 #MSG_FILAMENT_CLEAN c=20 r=2
"Filament extruding & with correct color?" "Filament extruding & with correct color?"
@ -458,16 +458,16 @@
"Checking sensors " "Checking sensors "
"Controllo sensori" "Controllo sensori"
#MSG_SELFTEST_CHECK_X c=20 #MSG_CHECKING_X c=20
"Checking X axis " "Checking X axis"
"Verifica asse X" "Verifica asse X"
#MSG_SELFTEST_CHECK_Y c=20 #MSG_CHECKING_Y c=20
"Checking Y axis " "Checking Y axis"
"Verifica asse Y" "Verifica asse Y"
#MSG_SELFTEST_CHECK_Z c=20 #MSG_SELFTEST_CHECK_Z c=20
"Checking Z axis " "Checking Z axis"
"Verifica asse Z" "Verifica asse Z"
#MSG_CHOOSE_EXTRUDER c=20 r=1 #MSG_CHOOSE_EXTRUDER c=20 r=1
@ -498,7 +498,7 @@
"Insert filament" "Insert filament"
"Inserire filamento" "Inserire filamento"
#MSG_WIZARD_FILAMENT_LOADED c=20 r=2 #MSG_FILAMENT_LOADED c=20 r=2
"Is filament loaded?" "Is filament loaded?"
"Il filamento e' stato caricato?" "Il filamento e' stato caricato?"
@ -506,15 +506,15 @@
"Is steel sheet on heatbed?" "Is steel sheet on heatbed?"
"Piastra d'acciaio su piano riscaldato?" "Piastra d'acciaio su piano riscaldato?"
# #MSG_LAST_PRINT_FAILURES c=20
"Last print failures" "Last print failures"
"Fallimenti ultima stampa" "Errori ultima stampa"
# #
"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets." "If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
"Se hai piastre d'acciaio aggiuntive, calibra i preset in Impostazioni - Setup HW - Piastre in Acciaio." "Se hai piastre d'acciaio aggiuntive, calibra i preset in Impostazioni - Setup HW - Piastre in Acciaio."
# #MSG_LAST_PRINT c=18
"Last print" "Last print"
"Ultima stampa" "Ultima stampa"
@ -582,7 +582,7 @@
"Measuring reference height of calibration point" "Measuring reference height of calibration point"
"Misura altezza di rif. del punto di calib." "Misura altezza di rif. del punto di calib."
#MSG_MESH_BED_LEVELING #MSG_MESH_BED_LEVELING c=18
"Mesh Bed Leveling" "Mesh Bed Leveling"
"Liv. grilia piano" "Liv. grilia piano"
@ -598,7 +598,7 @@
"Measured skew" "Measured skew"
"Deviazione mis" "Deviazione mis"
# #MSG_MMU_FAILS c=14
"MMU fails" "MMU fails"
"Fallimenti MMU" "Fallimenti MMU"
@ -606,7 +606,7 @@
"MMU load failed " "MMU load failed "
"Caricamento MMU fallito" "Caricamento MMU fallito"
# #MSG_MMU_LOAD_FAILS c=14
"MMU load fails" "MMU load fails"
"Caricamenti MMU falliti" "Caricamenti MMU falliti"
@ -834,7 +834,7 @@
"Pause" "Pause"
"Pausa" "Pausa"
# #MSG_POWER_FAILURES c=14
"Power failures" "Power failures"
"Mancanza corrente" "Mancanza corrente"
@ -922,11 +922,11 @@
"Reset XYZ calibr." "Reset XYZ calibr."
"Reset calibrazione XYZ." "Reset calibrazione XYZ."
#MSG_BED_CORRECTION_RESET #MSG_RESET c=14
"Reset" "Reset"
"\x00" "\x00"
#MSG_RESUME_PRINT #MSG_RESUME_PRINT c=18
"Resume print" "Resume print"
"Riprendi stampa" "Riprendi stampa"
@ -1162,7 +1162,7 @@
"Unload" "Unload"
"Scarica" "Scarica"
# #MSG_TOTAL_FAILURES c=20
"Total failures" "Total failures"
"Totale fallimenti" "Totale fallimenti"
@ -1182,7 +1182,7 @@
"Unloading filament" "Unloading filament"
"Scaricando filamento" "Scaricando filamento"
# #MSG_TOTAL c=6
"Total" "Total"
"Totale" "Totale"
@ -1350,7 +1350,7 @@
"Warn" "Warn"
"Avviso" "Avviso"
# #MSG_HW_SETUP c=18
"HW Setup" "HW Setup"
"Impostazioni HW" "Impostazioni HW"
@ -1366,10 +1366,6 @@
"Mesh" "Mesh"
"Griglia" "Griglia"
#
"Mesh bed leveling"
"Liv. griglia piano"
# #
"MK3S firmware detected on MK3 printer" "MK3S firmware detected on MK3 printer"
"Firmware MK3S rilevato su stampante MK3" "Firmware MK3S rilevato su stampante MK3"
@ -1398,11 +1394,11 @@
"G-code sliced for a different level. Please re-slice the model again. Print cancelled." "G-code sliced for a different level. Please re-slice the model again. Print cancelled."
"G-code processato per un livello diverso. Per favore esegui nuovamente lo slice del modello. Stampa annullata." "G-code processato per un livello diverso. Per favore esegui nuovamente lo slice del modello. Stampa annullata."
# #MSG_GCODE_DIFF_PRINTER_CONTINUE c=20 r=5
"G-code sliced for a different printer type. Continue?" "G-code sliced for a different printer type. Continue?"
"G-code processato per una stampante diversa. Continuare?" "G-code processato per una stampante diversa. Continuare?"
# #MSG_GCODE_DIFF_PRINTER_CANCELLED c=20 r=6
"G-code sliced for a different printer type. Please re-slice the model again. Print cancelled." "G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."
"G-code processato per una stampante diversa. Per favore esegui nuovamente lo slice del modello. Stampa annullata." "G-code processato per una stampante diversa. Per favore esegui nuovamente lo slice del modello. Stampa annullata."
@ -1458,7 +1454,7 @@
"Assist" "Assist"
"Assist." "Assist."
# c=18 #MSG_STEEL_SHEET c=18
"Steel sheets" "Steel sheets"
"Piani d'acciaio" "Piani d'acciaio"

View File

@ -138,7 +138,7 @@
"Bed" "Bed"
"Stol" "Stol"
#MSG_MENU_BELT_STATUS c=18 #MSG_BELT_STATUS c=18
"Belt status" "Belt status"
"Stan paskow" "Stan paskow"
@ -218,9 +218,9 @@
"Crash detected. Resume print?" "Crash detected. Resume print?"
"Wykryto zderzenie. Wznowic druk?" "Wykryto zderzenie. Wznowic druk?"
# #MSG_CRASH c=7
"Crash" "Crash"
"Zderzenie" "Zderzen"
#MSG_CURRENT c=19 r=1 #MSG_CURRENT c=19 r=1
"Current" "Current"
@ -250,7 +250,7 @@
"E-correct:" "E-correct:"
"Korekcja-E:" "Korekcja-E:"
#MSG_EJECT_FILAMENT c=17 r=1 #MSG_EJECT_FILAMENT c=16
"Eject filament" "Eject filament"
"Wysun filament" "Wysun filament"
@ -306,7 +306,7 @@
"Extruder info" "Extruder info"
"Ekstruder - info" "Ekstruder - info"
#MSG_MOVE_E #MSG_EXTRUDER c=17
"Extruder" "Extruder"
"Ekstruder" "Ekstruder"
@ -330,7 +330,7 @@
"Fan test" "Fan test"
"Test wentylatora" "Test wentylatora"
#MSG_FANS_CHECK #MSG_FANS_CHECK c=13
"Fans check" "Fans check"
"Sprawd.went." "Sprawd.went."
@ -338,8 +338,8 @@
"Fil. sensor" "Fil. sensor"
"Czuj. filam." "Czuj. filam."
# c=14 #MSG_FIL_RUNOUTS c=14
"Filam. runouts" "Fil. runouts "
"Konc.filamentu" "Konc.filamentu"
#MSG_FILAMENT_CLEAN c=20 r=2 #MSG_FILAMENT_CLEAN c=20 r=2
@ -458,16 +458,16 @@
"Checking sensors " "Checking sensors "
"Kontrola czujnikow" "Kontrola czujnikow"
#MSG_SELFTEST_CHECK_X c=20 #MSG_CHECKING_X c=20
"Checking X axis " "Checking X axis"
"Kontrola osi X" "Kontrola osi X"
#MSG_SELFTEST_CHECK_Y c=20 #MSG_CHECKING_Y c=20
"Checking Y axis " "Checking Y axis"
"Kontrola osi Y" "Kontrola osi Y"
#MSG_SELFTEST_CHECK_Z c=20 #MSG_SELFTEST_CHECK_Z c=20
"Checking Z axis " "Checking Z axis"
"Kontrola osi Z" "Kontrola osi Z"
#MSG_CHOOSE_EXTRUDER c=20 r=1 #MSG_CHOOSE_EXTRUDER c=20 r=1
@ -498,7 +498,7 @@
"Insert filament" "Insert filament"
"Wprowadz filament" "Wprowadz filament"
#MSG_WIZARD_FILAMENT_LOADED c=20 r=2 #MSG_FILAMENT_LOADED c=20 r=2
"Is filament loaded?" "Is filament loaded?"
"Filament jest zaladowany?" "Filament jest zaladowany?"
@ -506,7 +506,7 @@
"Is steel sheet on heatbed?" "Is steel sheet on heatbed?"
"Czy plyta stal. jest na podgrzew. stole?" "Czy plyta stal. jest na podgrzew. stole?"
# #MSG_LAST_PRINT_FAILURES c=20
"Last print failures" "Last print failures"
"Ostatnie bledy druku" "Ostatnie bledy druku"
@ -514,7 +514,7 @@
"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets." "If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
"Jesli masz dodatkowe plyty stalowe, to skalibruj ich ustawienia w menu Ustawienia - Ustawienia HW - Plyty stalowe." "Jesli masz dodatkowe plyty stalowe, to skalibruj ich ustawienia w menu Ustawienia - Ustawienia HW - Plyty stalowe."
# #MSG_LAST_PRINT c=18
"Last print" "Last print"
"Ost. wydruk" "Ost. wydruk"
@ -582,9 +582,9 @@
"Measuring reference height of calibration point" "Measuring reference height of calibration point"
"Okreslam wysokosc odniesienia punktu kalibracyjnego" "Okreslam wysokosc odniesienia punktu kalibracyjnego"
#MSG_MESH_BED_LEVELING #MSG_MESH_BED_LEVELING c=18
"Mesh Bed Leveling" "Mesh Bed Leveling"
"Poziomowanie stolu wg siatki" "Poziomowanie stolu"
#MSG_MMU_OK_RESUMING_POSITION c=20 r=4 #MSG_MMU_OK_RESUMING_POSITION c=20 r=4
"MMU OK. Resuming position..." "MMU OK. Resuming position..."
@ -598,7 +598,7 @@
"Measured skew" "Measured skew"
"Zmierzony skos" "Zmierzony skos"
# #MSG_MMU_FAILS c=14
"MMU fails" "MMU fails"
"Bledy MMU" "Bledy MMU"
@ -606,7 +606,7 @@
"MMU load failed " "MMU load failed "
"Blad ladowania MMU" "Blad ladowania MMU"
# #MSG_MMU_LOAD_FAILS c=14
"MMU load fails" "MMU load fails"
"Bledy ladow. MMU" "Bledy ladow. MMU"
@ -834,7 +834,7 @@
"Pause" "Pause"
"Pauza" "Pauza"
# #MSG_POWER_FAILURES c=14
"Power failures" "Power failures"
"Zaniki zasilania" "Zaniki zasilania"
@ -922,11 +922,11 @@
"Reset XYZ calibr." "Reset XYZ calibr."
"Reset kalibr. XYZ" "Reset kalibr. XYZ"
#MSG_BED_CORRECTION_RESET #MSG_RESET c=14
"Reset" "Reset"
"\x00" "\x00"
#MSG_RESUME_PRINT #MSG_RESUME_PRINT c=18
"Resume print" "Resume print"
"Wznowic wydruk" "Wznowic wydruk"
@ -1162,7 +1162,7 @@
"Unload" "Unload"
"Rozladuj" "Rozladuj"
# #MSG_TOTAL_FAILURES c=20
"Total failures" "Total failures"
"Suma bledow" "Suma bledow"
@ -1182,7 +1182,7 @@
"Unloading filament" "Unloading filament"
"Rozladowuje filament" "Rozladowuje filament"
# #MSG_TOTAL c=6
"Total" "Total"
"Suma" "Suma"
@ -1350,7 +1350,7 @@
"Warn" "Warn"
"Ostrzez" "Ostrzez"
# #MSG_HW_SETUP c=18
"HW Setup" "HW Setup"
"Ustawienia HW" "Ustawienia HW"
@ -1366,10 +1366,6 @@
"Mesh" "Mesh"
"Siatka" "Siatka"
#
"Mesh bed leveling"
"Poziomowanie stolu"
# #
"MK3S firmware detected on MK3 printer" "MK3S firmware detected on MK3 printer"
"Wykryto firmware MK3S w drukarce MK3" "Wykryto firmware MK3S w drukarce MK3"
@ -1398,11 +1394,11 @@
"G-code sliced for a different level. Please re-slice the model again. Print cancelled." "G-code sliced for a different level. Please re-slice the model again. Print cancelled."
"G-code pociety na innym poziomie. Potnij model ponownie. Druk anulowany." "G-code pociety na innym poziomie. Potnij model ponownie. Druk anulowany."
# #MSG_GCODE_DIFF_PRINTER_CONTINUE c=20 r=5
"G-code sliced for a different printer type. Continue?" "G-code sliced for a different printer type. Continue?"
"G-code pociety dla innej drukarki. Kontynuowac?" "G-code pociety dla innej drukarki. Kontynuowac?"
# #MSG_GCODE_DIFF_PRINTER_CANCELLED c=20 r=6
"G-code sliced for a different printer type. Please re-slice the model again. Print cancelled." "G-code sliced for a different printer type. Please re-slice the model again. Print cancelled."
"G-code pociety dla drukarki innego typu. Potnij model ponownie. Druk anulowany." "G-code pociety dla drukarki innego typu. Potnij model ponownie. Druk anulowany."
@ -1458,7 +1454,7 @@
"Assist" "Assist"
"Asyst." "Asyst."
# c=18 #MSG_STEEL_SHEET c=18
"Steel sheets" "Steel sheets"
"Plyty stalowe" "Plyty stalowe"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff