Merge pull request #50 from PavelSindler/MK2
Three digit farm numbers support added, status on demand added, temp reading disable in farm mode, fixed "shift out of range" bug in xyz calibration
This commit is contained in:
commit
7a896b3601
7 changed files with 129 additions and 41 deletions
|
@ -5,7 +5,7 @@
|
|||
#include "Configuration_prusa.h"
|
||||
|
||||
// Firmware version
|
||||
#define FW_version "3.0.10"
|
||||
#define FW_version "3.0.10.1"
|
||||
|
||||
#define FW_PRUSA3D_MAGIC "PRUSA3DFW"
|
||||
#define FW_PRUSA3D_MAGIC_LEN 10
|
||||
|
|
|
@ -292,6 +292,7 @@ extern unsigned long kicktime;
|
|||
extern unsigned long total_filament_used;
|
||||
void save_statistics(unsigned long _total_filament_used, unsigned long _total_print_time);
|
||||
extern unsigned int heating_status;
|
||||
extern unsigned int status_number;
|
||||
extern unsigned int heating_status_counter;
|
||||
extern bool custom_message;
|
||||
extern unsigned int custom_message_type;
|
||||
|
|
|
@ -267,6 +267,7 @@ unsigned char lang_selected = 0;
|
|||
|
||||
bool prusa_sd_card_upload = false;
|
||||
|
||||
unsigned int status_number = 0;
|
||||
|
||||
unsigned long total_filament_used;
|
||||
unsigned int heating_status;
|
||||
|
@ -1958,7 +1959,10 @@ void process_commands()
|
|||
int8_t SilentMode;
|
||||
#endif
|
||||
if(code_seen("PRUSA")){
|
||||
if (code_seen("fn")) {
|
||||
if (code_seen("PRN")) {
|
||||
MYSERIAL.println(status_number);
|
||||
|
||||
}else if (code_seen("fn")) {
|
||||
if (farm_mode) {
|
||||
MYSERIAL.println(farm_no);
|
||||
}
|
||||
|
@ -3917,21 +3921,23 @@ Sigma_Exit:
|
|||
#endif //TEMP_RESIDENCY_TIME
|
||||
if( (millis() - codenum) > 1000UL )
|
||||
{ //Print Temp Reading and remaining time every 1 second while heating up/cooling down
|
||||
if (!farm_mode) {
|
||||
SERIAL_PROTOCOLPGM("T:");
|
||||
SERIAL_PROTOCOL_F(degHotend(tmp_extruder),1);
|
||||
SERIAL_PROTOCOL_F(degHotend(tmp_extruder), 1);
|
||||
SERIAL_PROTOCOLPGM(" E:");
|
||||
SERIAL_PROTOCOL((int)tmp_extruder);
|
||||
|
||||
#ifdef TEMP_RESIDENCY_TIME
|
||||
SERIAL_PROTOCOLPGM(" W:");
|
||||
if(residencyStart > -1)
|
||||
if (residencyStart > -1)
|
||||
{
|
||||
codenum = ((TEMP_RESIDENCY_TIME * 1000UL) - (millis() - residencyStart)) / 1000UL;
|
||||
SERIAL_PROTOCOLLN( codenum );
|
||||
SERIAL_PROTOCOLLN(codenum);
|
||||
}
|
||||
else
|
||||
{
|
||||
SERIAL_PROTOCOLLN( "?" );
|
||||
SERIAL_PROTOCOLLN("?");
|
||||
}
|
||||
}
|
||||
#else
|
||||
SERIAL_PROTOCOLLN("");
|
||||
|
@ -3984,15 +3990,18 @@ Sigma_Exit:
|
|||
{
|
||||
if(( millis() - codenum) > 1000 ) //Print Temp Reading every 1 second while heating up.
|
||||
{
|
||||
float tt=degHotend(active_extruder);
|
||||
if (!farm_mode) {
|
||||
float tt = degHotend(active_extruder);
|
||||
SERIAL_PROTOCOLPGM("T:");
|
||||
SERIAL_PROTOCOL(tt);
|
||||
SERIAL_PROTOCOLPGM(" E:");
|
||||
SERIAL_PROTOCOL((int)active_extruder);
|
||||
SERIAL_PROTOCOLPGM(" B:");
|
||||
SERIAL_PROTOCOL_F(degBed(),1);
|
||||
SERIAL_PROTOCOL_F(degBed(), 1);
|
||||
SERIAL_PROTOCOLLN("");
|
||||
}
|
||||
codenum = millis();
|
||||
|
||||
}
|
||||
manage_heater();
|
||||
manage_inactivity();
|
||||
|
|
|
@ -412,18 +412,55 @@ BedSkewOffsetDetectionResultType calculate_machine_skew_and_offset_LS(
|
|||
cntr[1] = 0.f;
|
||||
float wx = 0.f;
|
||||
float wy = 0.f;
|
||||
for (int8_t i = 0; i < 9; ++ i) {
|
||||
for (int8_t i = 0; i < npts; ++ i) {
|
||||
float x = vec_x[0] * measured_pts[i * 2] + vec_y[0] * measured_pts[i * 2 + 1];
|
||||
float y = vec_x[1] * measured_pts[i * 2] + vec_y[1] * measured_pts[i * 2 + 1];
|
||||
float w = point_weight_x(i, y);
|
||||
cntr[0] += w * (pgm_read_float(true_pts + i * 2) - x);
|
||||
wx += w;
|
||||
if (verbosity_level >= 20) {
|
||||
MYSERIAL.print(i);
|
||||
SERIAL_ECHOLNPGM("");
|
||||
SERIAL_ECHOLNPGM("Weight_x:");
|
||||
MYSERIAL.print(w);
|
||||
SERIAL_ECHOLNPGM("");
|
||||
SERIAL_ECHOLNPGM("cntr[0]:");
|
||||
MYSERIAL.print(cntr[0]);
|
||||
SERIAL_ECHOLNPGM("");
|
||||
SERIAL_ECHOLNPGM("wx:");
|
||||
MYSERIAL.print(wx);
|
||||
}
|
||||
w = point_weight_y(i, y);
|
||||
cntr[1] += w * (pgm_read_float(true_pts + i * 2 + 1) - y);
|
||||
wy += w;
|
||||
|
||||
if (verbosity_level >= 20) {
|
||||
SERIAL_ECHOLNPGM("");
|
||||
SERIAL_ECHOLNPGM("Weight_y:");
|
||||
MYSERIAL.print(w);
|
||||
SERIAL_ECHOLNPGM("");
|
||||
SERIAL_ECHOLNPGM("cntr[1]:");
|
||||
MYSERIAL.print(cntr[1]);
|
||||
SERIAL_ECHOLNPGM("");
|
||||
SERIAL_ECHOLNPGM("wy:");
|
||||
MYSERIAL.print(wy);
|
||||
SERIAL_ECHOLNPGM("");
|
||||
SERIAL_ECHOLNPGM("");
|
||||
}
|
||||
}
|
||||
cntr[0] /= wx;
|
||||
cntr[1] /= wy;
|
||||
if (verbosity_level >= 20) {
|
||||
SERIAL_ECHOLNPGM("");
|
||||
SERIAL_ECHOLNPGM("Final cntr values:");
|
||||
SERIAL_ECHOLNPGM("cntr[0]:");
|
||||
MYSERIAL.print(cntr[0]);
|
||||
SERIAL_ECHOLNPGM("");
|
||||
SERIAL_ECHOLNPGM("cntr[1]:");
|
||||
MYSERIAL.print(cntr[1]);
|
||||
SERIAL_ECHOLNPGM("");
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -605,18 +642,24 @@ void world2machine_initialize()
|
|||
// Length of the vec_x shall be close to unity.
|
||||
float l = sqrt(vec_x[0] * vec_x[0] + vec_x[1] * vec_x[1]);
|
||||
if (l < 0.9 || l > 1.1) {
|
||||
SERIAL_ECHOLNPGM("X vector length:");
|
||||
MYSERIAL.println(l);
|
||||
SERIAL_ECHOLNPGM("Invalid bed correction matrix. Length of the X vector out of range.");
|
||||
reset = true;
|
||||
}
|
||||
// Length of the vec_y shall be close to unity.
|
||||
l = sqrt(vec_y[0] * vec_y[0] + vec_y[1] * vec_y[1]);
|
||||
if (l < 0.9 || l > 1.1) {
|
||||
SERIAL_ECHOLNPGM("Invalid bed correction matrix. Length of the X vector out of range.");
|
||||
SERIAL_ECHOLNPGM("Y vector length:");
|
||||
MYSERIAL.println(l);
|
||||
SERIAL_ECHOLNPGM("Invalid bed correction matrix. Length of the Y vector out of range.");
|
||||
reset = true;
|
||||
}
|
||||
// Correction of the zero point shall be reasonably small.
|
||||
l = sqrt(cntr[0] * cntr[0] + cntr[1] * cntr[1]);
|
||||
if (l > 15.f) {
|
||||
SERIAL_ECHOLNPGM("Zero point correction:");
|
||||
MYSERIAL.println(l);
|
||||
SERIAL_ECHOLNPGM("Invalid bed correction matrix. Shift out of range.");
|
||||
reset = true;
|
||||
}
|
||||
|
@ -1654,7 +1697,27 @@ BedSkewOffsetDetectionResultType find_bed_offset_and_skew(int8_t verbosity_level
|
|||
eeprom_update_float((float*)(EEPROM_BED_CALIBRATION_VEC_Y +0), vec_y[0]);
|
||||
eeprom_update_float((float*)(EEPROM_BED_CALIBRATION_VEC_Y +4), vec_y[1]);
|
||||
#endif
|
||||
if (verbosity_level >= 10) {
|
||||
// Length of the vec_x
|
||||
float l = sqrt(vec_x[0] * vec_x[0] + vec_x[1] * vec_x[1]);
|
||||
SERIAL_ECHOLNPGM("X vector length:");
|
||||
MYSERIAL.println(l);
|
||||
|
||||
// Length of the vec_y
|
||||
l = sqrt(vec_y[0] * vec_y[0] + vec_y[1] * vec_y[1]);
|
||||
SERIAL_ECHOLNPGM("Y vector length:");
|
||||
MYSERIAL.println(l);
|
||||
// Zero point correction
|
||||
l = sqrt(cntr[0] * cntr[0] + cntr[1] * cntr[1]);
|
||||
SERIAL_ECHOLNPGM("Zero point correction:");
|
||||
MYSERIAL.println(l);
|
||||
|
||||
// vec_x and vec_y shall be nearly perpendicular.
|
||||
l = vec_x[0] * vec_y[0] + vec_x[1] * vec_y[1];
|
||||
SERIAL_ECHOLNPGM("Perpendicularity");
|
||||
MYSERIAL.println(fabs(l));
|
||||
SERIAL_ECHOLNPGM("Saving bed calibration vectors to EEPROM");
|
||||
}
|
||||
// Correct the current_position to match the transformed coordinate system after world2machine_rotation_and_skew and world2machine_shift were set.
|
||||
world2machine_update_current();
|
||||
|
||||
|
|
|
@ -1875,6 +1875,7 @@ void lcd_diag_show_end_stops()
|
|||
|
||||
void prusa_statistics(int _message) {
|
||||
|
||||
|
||||
switch (_message)
|
||||
{
|
||||
|
||||
|
@ -1883,6 +1884,7 @@ void prusa_statistics(int _message) {
|
|||
{
|
||||
SERIAL_ECHO("{");
|
||||
prusa_stat_printerstatus(4);
|
||||
status_number = 4;
|
||||
prusa_stat_printinfo();
|
||||
SERIAL_ECHOLN("}");
|
||||
}
|
||||
|
@ -1890,6 +1892,7 @@ void prusa_statistics(int _message) {
|
|||
{
|
||||
SERIAL_ECHO("{");
|
||||
prusa_stat_printerstatus(1);
|
||||
status_number = 1;
|
||||
SERIAL_ECHOLN("}");
|
||||
}
|
||||
break;
|
||||
|
@ -1898,6 +1901,7 @@ void prusa_statistics(int _message) {
|
|||
farm_status = 2;
|
||||
SERIAL_ECHO("{");
|
||||
prusa_stat_printerstatus(2);
|
||||
status_number = 2;
|
||||
SERIAL_ECHOLN("}");
|
||||
farm_timer = 1;
|
||||
break;
|
||||
|
@ -1906,6 +1910,7 @@ void prusa_statistics(int _message) {
|
|||
farm_status = 3;
|
||||
SERIAL_ECHO("{");
|
||||
prusa_stat_printerstatus(3);
|
||||
status_number = 3;
|
||||
SERIAL_ECHOLN("}");
|
||||
farm_timer = 1;
|
||||
|
||||
|
@ -1914,12 +1919,14 @@ void prusa_statistics(int _message) {
|
|||
farm_status = 4;
|
||||
SERIAL_ECHO("{");
|
||||
prusa_stat_printerstatus(4);
|
||||
status_number = 4;
|
||||
SERIAL_ECHOLN("}");
|
||||
}
|
||||
else
|
||||
{
|
||||
SERIAL_ECHO("{");
|
||||
prusa_stat_printerstatus(3);
|
||||
status_number = 3;
|
||||
SERIAL_ECHOLN("}");;
|
||||
}
|
||||
farm_timer = 1;
|
||||
|
@ -1938,14 +1945,17 @@ void prusa_statistics(int _message) {
|
|||
break;
|
||||
case 6: // print done
|
||||
SERIAL_ECHOLN("{[PRN:8]}");
|
||||
status_number = 8;
|
||||
farm_timer = 2;
|
||||
break;
|
||||
case 7: // print done - stopped
|
||||
SERIAL_ECHOLN("{[PRN:9]}");
|
||||
status_number = 9;
|
||||
farm_timer = 2;
|
||||
break;
|
||||
case 8: // printer started
|
||||
SERIAL_ECHO("{[PRN:0][PFN:");
|
||||
status_number = 0;
|
||||
SERIAL_ECHO(farm_no);
|
||||
SERIAL_ECHOLN("]}");
|
||||
farm_timer = 2;
|
||||
|
@ -1963,6 +1973,7 @@ void prusa_statistics(int _message) {
|
|||
break;
|
||||
case 22: // waiting for filament change
|
||||
SERIAL_ECHOLN("{[PRN:5]}");
|
||||
status_number = 5;
|
||||
break;
|
||||
|
||||
case 90: // Error - Thermal Runaway
|
||||
|
@ -3550,7 +3561,6 @@ menu_edit_type(float, float51, ftostr51, 10)
|
|||
menu_edit_type(float, float52, ftostr52, 100)
|
||||
menu_edit_type(unsigned long, long5, ftostr5, 0.01)
|
||||
|
||||
|
||||
static void lcd_selftest()
|
||||
{
|
||||
int _progress = 0;
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
void lcd_mylang();
|
||||
bool lcd_detected(void);
|
||||
|
||||
|
||||
static void lcd_selftest();
|
||||
static bool lcd_selfcheck_endstops();
|
||||
static bool lcd_selfcheck_axis(int _axis, int _travel);
|
||||
|
|
|
@ -775,6 +775,10 @@ static void lcd_implementation_status_screen()
|
|||
}
|
||||
|
||||
}
|
||||
else {
|
||||
lcd.setCursor(LCD_WIDTH - 8 - 2, 2);
|
||||
lcd_printPGM(PSTR(" "));
|
||||
}
|
||||
|
||||
#ifdef SNMM
|
||||
lcd_printPGM(PSTR(" E"));
|
||||
|
@ -783,7 +787,7 @@ static void lcd_implementation_status_screen()
|
|||
#endif
|
||||
|
||||
//Print time elapsed
|
||||
lcd.setCursor(LCD_WIDTH - 8 -2, 2);
|
||||
lcd.setCursor(LCD_WIDTH - 8 -1, 2);
|
||||
lcd_printPGM(PSTR(" "));
|
||||
lcd.print(LCD_STR_CLOCK[0]);
|
||||
if(starttime != 0)
|
||||
|
|
Loading…
Reference in a new issue