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:
PavelSindler 2017-02-28 11:16:34 +01:00 committed by GitHub
commit 7a896b3601
7 changed files with 129 additions and 41 deletions

View file

@ -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

View file

@ -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;

View file

@ -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);
}
@ -1966,7 +1970,7 @@ void process_commands()
MYSERIAL.println("Not in farm mode.");
}
}else if (code_seen("fv")) {
}else if (code_seen("fv")) {
// get file version
#ifdef SDSUPPORT
card.openFile(strchr_pointer + 3,true);
@ -2017,7 +2021,7 @@ void process_commands()
}else if(code_seen("Y")) { //filaments adjustment at the beginning of print (for SNMM)
#ifdef SNMM
int extr;
SilentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT); //is silent mode or loud mode set
SilentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT); //is silent mode or loud mode set
lcd_implementation_clear();
lcd_display_message_fullscreen_P(MSG_FIL_ADJUSTING);
current_position[Z_AXIS] = 100;
@ -3917,22 +3921,24 @@ Sigma_Exit:
#endif //TEMP_RESIDENCY_TIME
if( (millis() - codenum) > 1000UL )
{ //Print Temp Reading and remaining time every 1 second while heating up/cooling down
SERIAL_PROTOCOLPGM("T:");
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)
{
codenum = ((TEMP_RESIDENCY_TIME * 1000UL) - (millis() - residencyStart)) / 1000UL;
SERIAL_PROTOCOLLN( codenum );
}
else
{
SERIAL_PROTOCOLLN( "?" );
}
if (!farm_mode) {
SERIAL_PROTOCOLPGM("T:");
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)
{
codenum = ((TEMP_RESIDENCY_TIME * 1000UL) - (millis() - residencyStart)) / 1000UL;
SERIAL_PROTOCOLLN(codenum);
}
else
{
SERIAL_PROTOCOLLN("?");
}
}
#else
SERIAL_PROTOCOLLN("");
#endif
@ -3984,15 +3990,18 @@ Sigma_Exit:
{
if(( millis() - codenum) > 1000 ) //Print Temp Reading every 1 second while heating up.
{
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_PROTOCOLLN("");
codenum = millis();
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_PROTOCOLLN("");
}
codenum = millis();
}
manage_heater();
manage_inactivity();

View file

@ -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;
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;
}
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();

View file

@ -1874,6 +1874,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
@ -3166,7 +3177,7 @@ static void lcd_main_menu()
MENU_ITEM(submenu, MSG_UNLOAD_FILAMENT, fil_unload_menu);
MENU_ITEM(submenu, MSG_CHANGE_EXTR, change_extr_menu);
#endif
MENU_ITEM(submenu, MSG_SETTINGS, lcd_settings_menu);
MENU_ITEM(submenu, MSG_SETTINGS, lcd_settings_menu);
if(!isPrintPaused) MENU_ITEM(submenu, MSG_MENU_CALIBRATION, lcd_calibration_menu);
}
@ -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;

View file

@ -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);

View file

@ -757,7 +757,7 @@ static void lcd_implementation_status_screen()
}
}
// Farm number display
// Farm number display
if (farm_mode)
{
lcd_printPGM(PSTR(" F"));
@ -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,8 +787,8 @@ static void lcd_implementation_status_screen()
#endif
//Print time elapsed
lcd.setCursor(LCD_WIDTH - 8 -2, 2);
lcd_printPGM(PSTR(" "));
lcd.setCursor(LCD_WIDTH - 8 -1, 2);
lcd_printPGM(PSTR(" "));
lcd.print(LCD_STR_CLOCK[0]);
if(starttime != 0)
{